80 lines
5.5 KiB
Markdown
80 lines
5.5 KiB
Markdown
# テスト妥当性レビュー: session-analytics
|
|
- 評価: 概ね良い
|
|
|
|
## 確認した範囲
|
|
- 対象 crate: `crates/session-analytics`
|
|
- 実装: `crates/session-analytics/src/lib.rs`
|
|
- crate 内のテストは `src/lib.rs` の inline unit tests のみ。
|
|
- `crates/yoi/src/session_cli.rs` も参照し、`session-analytics` が `yoi session analyze ... --json` から呼ばれる境界を確認した。
|
|
- ソースファイル・Ticket は変更していない。
|
|
|
|
## 現在のテストがよくカバーしていること
|
|
- read-only な session JSONL analyzer としての主要な集計軸はかなり押さえられている。
|
|
- repeated `Read` と intervening `Edit` の相関。
|
|
- large `Edit` argument、`replace_all`、path 別 edit stats。
|
|
- failed tool result count と turn ごとの tool call count。
|
|
- large/truncated tool result の検出と、raw tool output を report JSON に混ぜないことの基本確認。
|
|
- compaction/context lifecycle 後の repeated read を「correlation only」として扱う方針。
|
|
- malformed JSONL / unknown entry の tolerant parsing。
|
|
- Bash による file inspection の observation。
|
|
- assistant response 単位の tool batching metrics。
|
|
- same-file multi-edit、edit-only streak、Read/Bash/test interleave を含む edit round-trip metrics。
|
|
- edits がない session の empty metrics。
|
|
- fixture は小さく、各テストの意図が読みやすい。crate の責務である「実 session log を直接型依存せず、`serde_json::Value` で寛容に読む」性質にも合っている。
|
|
- privacy/safety 重要点である「raw content を出さない」方向は、少なくとも large result について回帰テストがある。
|
|
- `cargo test -p session-analytics` は全 12 unit tests と doc-tests が成功した。
|
|
|
|
## 不足 / 疑問のあるテスト
|
|
- 実 session JSONL に近い golden/contract fixture がない。現在の tests はすべて手作り最小 fixture なので、実ログ形式の変化、複数 kind の混在、長い session の代表ケースに対する report schema の安定性は十分には保証していない。
|
|
- JSON report が CLI-facing な機械可読出力である割に、serialize 後の schema/field contract をまとめて確認する snapshot/golden test がない。
|
|
- privacy invariant は一部のみ。raw user input、tool arguments の `old_string` / `new_string` / `content`、tool result `content` に sentinel を入れて、serialized report 全体に出ないことを横断的に確認するテストが欲しい。
|
|
- tolerant parsing の edge cases が薄い。
|
|
- invalid `arguments` JSON。
|
|
- missing `tool_call.name`。
|
|
- `Read` / `Edit` / `Write` の path 欠落。
|
|
- `segment_start.history` に seeded tool calls が入る場合。
|
|
- top-level/synthetic response boundary diagnostic。
|
|
- empty file / nonexistent file error。
|
|
- response batching の境界条件が不足している。
|
|
- message/reasoning-only `assistant_item`。
|
|
- assistant response が non-`assistant_item` で閉じられるケース。
|
|
- 複数 response にまたがる percentile/distribution。
|
|
- `top_tool_call_responses` の sort/truncate。
|
|
- tool classification / observation 系の coverage が偏っている。
|
|
- `counts_by_kind` は total の間接確認程度で、pod/memory/ticket/task/web/other 分類は未確認。
|
|
- `Write` stats、large `Write.content`、`path` alias、large `Read.limit`、large `Grep.head_limit` は未確認。
|
|
- diagnostic bounding はテスト名に “bounded” とあるが、実際には 3 件の diagnostic を見るだけで、`MAX_DIAGNOSTICS` で打ち止めになることは検証していない。
|
|
- 一部の assertion は observation 文言の substring に依存している。policy 表現を守る意図なら妥当だが、単なる説明文変更で壊れやすい。可能なら stable な `kind` や boolean/metric を主に検証し、文言は最小限にした方がよい。
|
|
|
|
## 追加を提案するテスト
|
|
- 実ログに近い小さな golden fixture を `tests/fixtures` 相当で持ち、serialized JSON report の主要 schema と代表値を固定する。
|
|
- sentinel privacy test を追加する。
|
|
- `user_input` の本文。
|
|
- `Edit.old_string` / `Edit.new_string`。
|
|
- `Write.content`。
|
|
- `tool_result.content`。
|
|
- これらが serialized `SessionReport` に含まれないことを一括確認する。
|
|
- tolerant parsing/error-path tests を追加する。
|
|
- invalid tool arguments JSON。
|
|
- missing fields。
|
|
- nonexistent input path。
|
|
- empty JSONL file。
|
|
- `MAX_DIAGNOSTICS + n` 件の malformed entries。
|
|
- response boundary tests を追加する。
|
|
- `segment_start.history` seeded calls が tool usage には数えられるが response batching からは除外され、diagnostic/observation が出ること。
|
|
- assistant message-only response と mixed message/tool calls。
|
|
- multiple responses distribution と top-response ordering/truncation。
|
|
- less-covered metric tests を追加する。
|
|
- `Write` stats と large content。
|
|
- `path` vs `file_path`。
|
|
- large `Read` と large `Grep`。
|
|
- pod/memory/ticket/task/web/other に対する `counts_by_kind`。
|
|
- threshold boundary: `>= LARGE_*` と just-below cases。
|
|
|
|
## 実行したコマンド
|
|
- `cd /home/hare/Projects/yoi && cargo test -p session-analytics`
|
|
- 結果: 成功。12 unit tests passed, doc-tests 0 passed.
|
|
- `cd /home/hare/Projects/yoi && cargo test -p session-analytics -- --nocapture`
|
|
- 結果: 成功。12 unit tests passed, doc-tests 0 passed.
|
|
|