5.5 KiB
5.5 KiB
テスト妥当性レビュー: 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と interveningEditの相関。 - large
Editargument、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。
- repeated
- 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 resultcontentに sentinel を入れて、serialized report 全体に出ないことを横断的に確認するテストが欲しい。 - tolerant parsing の edge cases が薄い。
- invalid
argumentsJSON。 - 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。
- invalid
- response batching の境界条件が不足している。
- message/reasoning-only
assistant_item。 - assistant response が non-
assistant_itemで閉じられるケース。 - 複数 response にまたがる percentile/distribution。
top_tool_call_responsesの sort/truncate。
- message/reasoning-only
- tool classification / observation 系の coverage が偏っている。
counts_by_kindは total の間接確認程度で、pod/memory/ticket/task/web/other 分類は未確認。Writestats、largeWrite.content、pathalias、largeRead.limit、largeGrep.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.historyseeded 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 を追加する。
Writestats と large content。pathvsfile_path。- large
Readと largeGrep。 - 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.