6.7 KiB
6.7 KiB
テスト妥当性レビュー: client
- 評価: 概ね良い
確認範囲
crates/client/Cargo.tomlと crate の全ソースファイルを確認した:src/lib.rssrc/runtime_command.rssrc/spawn.rssrc/pod_client.rssrc/ticket_role.rs
runtime_command、spawn、pod_client、ticket_roleの既存 unit tests を確認した。crates/client/tests/配下に integration tests がないことを確認した。- ソースファイルや Tickets は変更していない。
現在のテストがよくカバーしている点
runtime_commandのカバレッジは焦点が絞られていて適切:- runtime executable には常に
podprefix が付与される; YOI_POD_RUNTIME_COMMANDは executable path だけを置き換える;- 空の override は
current_exeにフォールバックする。
- runtime executable には常に
spawn::runtime_argstests は重要な引数 invariants をカバーしている:- workspace、pod identity、profile が分離されたままである;
- session restore mode では profile が省略される;
- child
cwdは CLI argument として渡されない; ticket_roleが存在する場合は明示的に渡される。
pod_clienttests は mock だけでなく実際の Unix sockets を使っている:- client が生存している間に events を受信する;
MethodJSON lines を送信する;- drop された clients は connections を速やかに閉じる;
- blocked reader tasks は drop 時に abort される。
ticket_roleは planning について広いカバレッジがある:- role config 欠落と backend-only config が拒否される;
inheritprofile は top-level launches で拒否される;- 解決不能な profile selectors は spawn 前に失敗する;
- concrete role config と scaffold config が launch plans を生成する;
- 設定された workflow/profile/launch prompt refs が表面化される;
- spawn config が pod name、profile、role、workspace root、
cwd境界を正しく保持する; - prompt override precedence がテストされている;
- role-specific launch prompts が intake、orchestrator、coder、reviewer 向けの重要な運用ガイダンスを含む。
- pre-run peer registration tests は、実際の
PodClientframing path を通し、最初のRun前の ordering を検証しているため有用。
ギャップ / 疑問のあるテスト
- 最大のギャップは
spawn_podの readiness behavior。実際の subprocess launch path、stderr file polling、YOI-READYparsing、socket wait loop、early-exit handling、stderr tail collection、malformed ready line handling、timeout behavior はほとんど未テスト。現在のspawntests は純粋な argument construction だけをカバーしている。 launch_ticket_role_pod_with_optionsは end-to-end の host-side launch flow としてテストされていない。planning と pre-run send tests に分解されているが、YOI-READYを出力し、socket を bind し、最初のRunを受け取り、acceptance evidence を返す fake runtime process がない。wait_for_run_acceptanceは重要な分岐が直接カバーされていない:- 一致する
Event::UserMessageを受理する; InvokeStart(UserSend)/TurnStartを受理する;Event::Errorで拒否する;- closed / timeout errors を返す;
- unrelated events を安全に無視する。
- 一致する
- Pre-run peer registration は success と explicit error のカバレッジがあるが、timeout、connection-closed、empty peer name、multiple peer registrations、response 前の unrelated-event cases が不足している。
- Prompt tests は prompt resources から多数の exact substrings を assert している。prompt text は product contract の一部なのでこの一部は有益だが、大量の substring lists は脆く、無害な prompt wording edits が behavioral regressions に見える可能性がある。
- Default pod-name generation と sanitization は、planning cases と caller-provided name 経由の間接テストを除き、直接テストされていない。whitespace ticket ids、punctuation-heavy ids、
MAX_POD_NAME_CHARSへの truncation、空の explicit pod names のような edge cases はカバーする価値がある。 PodClienttests は malformed JSON、EOF behavior、try_next_event、reader-channel backpressure をカバーしていない。これらは spawn/launch gaps より優先度は低いが、それでも crate の protocol boundary の一部である。- doc tests や integration tests はない。小さな client crate としては許容できるが、この crate の責務には process/socket orchestration が含まれるため、少なくとも 1 つの lightweight fake-runtime integration-style unit test があると信頼性が実質的に向上する。
追加提案
- 小さな test executable または shell script を使って、
spawn_pod用の fake-runtime tests を追加する:- 通常の stderr progress lines を書く;
YOI-READY\t<pod>\t<socket>を出力する;- 短い delay の後に socket を bind する;
- failure cases では早期終了する。
- readiness parsing について焦点を絞った unit tests を追加する:
- malformed ready line;
- socket なしの ready line;
- ready line 後、socket が connectable になる前に child が終了する;
- stderr tail が bounded tail だけを保持し、最後に flush された lines を含む。
- in-process Unix socket server を使って
wait_for_run_acceptance周辺の tests を追加する:UserMessageexact segment match;InvokeStart(UserSend)acceptance;TurnStartacceptance;Event::Errorrejection;- connection close;
- unrelated events がある timeout。
- pre-run peer registration の edge-case tests を追加する:
- empty peer name は warning を出し、それでも
Runを送信する; - timeout warning でも
Runを送信する; - closed connection warning または send error path;
- multiple peers が ordering を保持する。
- empty peer name は warning を出し、それでも
- Pod identity stability は user-visible で runtime state paths に影響するため、
default_pod_name/ sanitization / truncation について小さな pure tests を追加する。 - exact wording が意図的に stable contract として扱われている場合を除き、prompt resource ごとに小さめの semantic sentinel assertions を維持することで、prompt の脆さを減らすことを検討する。
実行したコマンド
cd /home/hare/Projects/yoi && cargo test -p client
結果: passed。29 unit tests が passed; doc-tests は 0 tests。このコマンドは 2 回実行され、どちらも passed。