この章の答え
テストで作れる状態と、実際のイベントから到達できる状態を区別する。
内部のフラグを直接書き換えれば、さまざまな状態を作れます。でも実際の利用では、イベントの順序やガード条件によって到達できない組み合わせもあります。状態の値だけでなく、その来歴を調べます。
01|図でつかむ
止める人、解除する人、再開させるきっかけ。この三つを対応付ける。
02|3つのポイントで理解する
1. フラグを立てる側から追う
suppress_queue_autosend のような gate を見つけたら、参照する場所だけでなく、値を書き込む場所を探します。その直前のイベントが状態の入口です。
2. 解除と再送信は別の操作
フラグを解除しても、それだけで待機入力を送り出すとは限りません。解除後にスケジューラやイベント処理を動かす箇所まで追います。
3. イベント列として再現する
本番に近いテストでは、可能な限り実際の操作経路で状態を作ります。直接フィールドを設定する場合も、同じ状態に到達するイベント列を説明できるようにします。
03|ソースで確かめる
以下の検索は Codex リポジトリのルートで実行します。最初に対象 commit を記録し、検索結果から定義と呼び出し元を一つずつ開いてください。
git rev-parse --short HEAD
rg -n "suppress_queue_autosend|maybe_send_next_queued_input" codex-rs
読む入口: codex-rs/tui/src/chatwidget/input_queue.rs 。リンク先は照合に使った固定 commit のファイルです。手元の版と異なる場合は、上の検索語から探し直します。
小さく試す
一つの gate を選び、立てる場所、解除する場所、再送信を試す場所を三点で結びます。
04|30秒で復習
- 状態には到達経路が必要。
- 解除と再開のきっかけを区別する。
- テストの準備を実際のイベント列に対応付ける。