132 lines
7.5 KiB
Markdown
132 lines
7.5 KiB
Markdown
# テスト妥当性レビュー: tui
|
|
|
|
- 評価: 混在
|
|
|
|
## 確認範囲
|
|
|
|
- 対象 crate: `crates/tui`
|
|
- 確認した主な範囲:
|
|
- `crates/tui/Cargo.toml`
|
|
- `crates/tui/README.md`
|
|
- `crates/tui/src/lib.rs`
|
|
- 既存 unit tests を持つ主要 module:
|
|
- `app.rs`
|
|
- `input.rs`
|
|
- `multi_pod.rs`
|
|
- `single_pod.rs`
|
|
- `workspace_panel.rs`
|
|
- `pod_list.rs`
|
|
- `task.rs`
|
|
- `command.rs`
|
|
- `markdown.rs`
|
|
- `ui.rs`
|
|
- `spawn.rs`
|
|
- `setup_model.rs`
|
|
- `composer_history.rs`
|
|
- `composer_keys.rs`
|
|
- `role_session_registry.rs`
|
|
- `picker.rs`
|
|
- `keys.rs`
|
|
- crate の責務として確認した内容:
|
|
- `ratatui` / `crossterm` ベースの TUI 表示・入力処理
|
|
- single-pod chat UI、multi-pod / workspace panel、pod picker、spawn/setup/key management UI
|
|
- composer/input model、Markdown/tool/task/system event rendering
|
|
- Pod list / Ticket panel / local role-session claim などの表示用 view model glue
|
|
|
|
## 現在のテストがよくカバーしていること
|
|
|
|
- Unit test の量は多く、`cargo test -p tui` 実行時に 299 tests が列挙される。TUI crate としては model-level の回帰テストがかなり厚い。
|
|
- `app.rs` / `input.rs` は重要な composer invariants をよく押さえている。
|
|
- running 中の submit queueing
|
|
- rollback 時の入力復元
|
|
- input history persistence
|
|
- file / knowledge completion
|
|
- typed `Segment` の保持
|
|
- context usage 表示
|
|
- live system item / task snapshot の反映
|
|
- `multi_pod.rs` / `workspace_panel.rs` は dogfooding 上重要な panel semantics を広く検証している。
|
|
- Ticket row ordering / state display
|
|
- ready ticket queue action
|
|
- done ticket close action
|
|
- Review action が黙って approve しないこと
|
|
- Companion / Orchestrator lifecycle decision
|
|
- composer が selected pod ではなく workspace companion に向くこと
|
|
- local role-session claim の扱い
|
|
- `pod_list.rs` は live/stored pod の分類・sort・socket reachability・corrupt metadata diagnostic を押さえており、TUI が誤って restore/send 可能扱いしないための invariant として有用。
|
|
- `task.rs` には `snapshot_format_contract` があり、Pod 側 snapshot 形式と TUI 側 deserialization の境界を守るテストとして妥当。
|
|
- `command.rs` / `single_pod.rs` は `:compact` / `:rewind` / `:peer` などの command が通常 user message として送られないこと、local diagnostic になることを確認していて良い。
|
|
- `markdown.rs` は Markdown renderer の基本構文、list、code block、table を文字列化して確認しており、LLM 出力表示の最低限の regressions には効く。
|
|
- `composer_history.rs` / `role_session_registry.rs` は workspace-scoped path、duplicate suppression、claim conflict など、永続化先を誤らないための安全側テストがある。
|
|
|
|
## 不足 / 疑問のあるテスト
|
|
|
|
- 現在の test suite は red。`cargo test -p tui` は 296 passed / 3 failed。
|
|
- `multi_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace`
|
|
- 失敗内容: expected `"/repo/yoi/.worktree/orchestration/yoi-orchestrator"` but actual `"/repo/yoi"`
|
|
- 現在の設計では dedicated Orchestrator が process cwd と runtime workspace を分ける可能性があり、この test 名・期待値は仕様の変化に追随していない疑いが強い。
|
|
- `spawn::tests::profile_choices_use_project_registry_default`
|
|
- `spawn::tests::profile_choices_include_builtin_and_project_default_marker`
|
|
- 失敗内容: selected index expected `1`, actual `6`
|
|
- builtin profiles の数・順序に依存した brittle な assertion になっている。profile selector / default marker / selected profile identity を見るべきで、index 固定は妥当性が低い。
|
|
- UI renderer の実画面に対する coverage は限定的。
|
|
- `ui.rs`, `multi_pod.rs`, `tool.rs` には多数の render helper があるが、terminal buffer snapshot 的な検証は少ない。
|
|
- 文字列 helper の unit test はある一方、layout collapse、small terminal width/height、wide Unicode、style priority、scroll offset と描画結果の統合的な確認は薄い。
|
|
- `tool.rs` の test が見当たらないのは大きな穴。
|
|
- Read/Write/Edit/Search/Bash などの tool call rendering は日常的に目に入る UI であり、diff wrapping、capped output、error suffix、aggregate Read rendering などの regression が入りやすい。
|
|
- 実 terminal / event loop / crossterm raw mode まわりはほぼ unit-test 対象外。
|
|
- project instruction 上 E2E は未設計なのでやむを得ないが、`run_loop`, polling, resize, alternate screen cleanup, Ctrl-C/quit guard の実端末統合は unit tests だけでは保証できない。
|
|
- async / process interaction は一部 mock・TempDir・git repo でよく検証されているが、実 Pod process / socket / session log replay との E2E はない。
|
|
- 特に Panel から child Pod launch、attach、completion notification、reload の end-to-end 整合は crate 単体の test だけでは判断できない。
|
|
- 一部の panel/render tests は text alignment や label の exact string に寄っており、仕様化された文言なら有用だが、見た目調整で壊れやすい。重要 invariant と cosmetic expectation を分けると保守性が上がる。
|
|
|
|
## 追加を提案するテスト
|
|
|
|
- まず red tests を仕様に合わせて直す。
|
|
- Orchestrator launch context は `workspace_root`, `role_workspace_root`, `original_workspace_root`, `implementation_worktree_root`, `merge_target_workspace_root`, process cwd のどれを守る test なのかを明確にして、名前と assertion を更新する。
|
|
- Profile choice tests は index ではなく、selected choice の `selector` / `source` / `is_default` 相当の意味で assert する。
|
|
- `tool.rs` に focused unit tests を追加する。
|
|
- Edit diff の old/new wrapping
|
|
- multiline result の cap
|
|
- failed tool call の error line
|
|
- Bash output truncation metadata
|
|
- Read aggregate rendering
|
|
- narrow width と wide Unicode
|
|
- `ratatui::backend::TestBackend` を使った small snapshot tests を少数追加する。
|
|
- single-pod main screen の最小 smoke
|
|
- multi-pod panel の ticket row + companion composer
|
|
- task side pane / mini view
|
|
- very small terminal size で panic しないこと
|
|
- scroll / viewport invariant の test を増やす。
|
|
- history scroll と rewind picker scroll が干渉しないことは既にあるが、tool blocks、Markdown long output、task pane open/close、terminal resize 時の offset clamp も対象にする。
|
|
- 実 Pod process まで含む E2E が未設計なら、まずは crate 境界で replay-based tests を足すと効果が高い。
|
|
- saved JSONL fragments / protocol events を `App` に流して expected blocks/actionbar/task state を確認する。
|
|
- 実 socket は使わず、TUI state transition の regression を固定する。
|
|
|
|
## 実行したコマンド
|
|
|
|
```text
|
|
cargo test -p tui
|
|
```
|
|
|
|
結果:
|
|
|
|
```text
|
|
running 299 tests
|
|
test result: FAILED. 296 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
|
|
```
|
|
|
|
失敗:
|
|
|
|
```text
|
|
multi_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace
|
|
spawn::tests::profile_choices_include_builtin_and_project_default_marker
|
|
spawn::tests::profile_choices_use_project_registry_default
|
|
```
|
|
|
|
```text
|
|
cargo test -p tui -- --list
|
|
```
|
|
|
|
crate の unit test inventory を確認するために使用した。
|
|
|