7.2 KiB
7.2 KiB
テスト妥当性レビュー: manifest
- 評価: 概ね良い
確認範囲
- Workspace root:
/home/hare/Projects/yoi - Crate/package:
manifest - 読み取り専用のレビューのみを行い、ソースファイルと Ticket は変更していない。
- 主な責務を以下で確認した:
crates/manifest/src/lib.rscrates/manifest/src/config.rscrates/manifest/src/scope.rscrates/manifest/src/profile.rscrates/manifest/src/paths.rscrates/manifest/src/model.rscrates/manifest/src/defaults.rs
cargo test -p manifestを実行: passed、129 passed; 0 failed。
現在のテストがよくカバーしていること
- この crate には、中核責務である manifest/profile 設定の parse、merge、validate、resolve に対する強い unit-test suite がある。
config.rsのテストは、多くの重要な manifest invariant をカバーしている:- 最小限の TOML parse と defaulting;
- model/tool/web/memory/compaction/reasoning fields;
- TOML type mismatch を hard error として扱うこと;
- partial config cascade と upper-layer override behavior;
- deprecated/removed fields が reject されること;
- authority-bearing fields における invalid relative paths;
- feature-flag behavior、特に shell/file/web/memory/tool areas の無効化;
- prompt/resources/workflow directories と generated memory settings。
scope.rsのテストは、セキュリティ上もっとも重要な path permission behavior をカバーしている:- recursive grants と non-recursive grants;
- read/write permission matching;
- deny entries が grants を override すること;
- path traversal rejection;
- canonicalization/relative-path normalization;
- delegation subset checks;
- shared-scope add/remove/clear operations。
profile.rsは、Lua profile behavior について特に広いカバレッジを持つ:- 意図された
yoi.profileAPI 経由の profile registration; - legacy/global APIs の明示的な rejection;
- builtin role profile defaults と tool-policy boundaries;
- workspace/profile override precedence;
extend、helper APIs、TOML loading、model catalog access、Lua module loading;- multiple-profile discovery、selector handling、ambiguity、exact/unique match behavior。
- 意図された
paths.rsのテストは、pure resolver functions によって XDG/Yoi directory precedence rules をカバーしており、global environment races を避けている。- いくつかのテストは、単なる実装機構ではなく、重要な product decisions を regression checks として符号化している。manifest/profile semantics は durable contract なので、この crate ではそれが適切である。
不足 / 疑問のあるテスト
- カバレッジはほぼすべて in-module unit tests である。これは概ね適切だが、downstream crates や CLI startup の観点からの integration-style coverage は少ない。変更によってこれらの local unit tests は維持されても、
yoi、pod、または profile loading が manifest API を compose する方法が壊れる可能性がある。 - Path-scope security tests は良いが、adversarial filesystem boundaries に対してはまだ網羅的ではない。workspace 内の symlink が外を指すケース、workspace 外の symlink が中を指すケース、または canonicalized symlink paths を通じた mixed deny/grant interactions に対する専用テストは見当たらなかった。この crate の authority role を考えると、これが主な残リスクである。
- Delegation subset tests は基本的な matrix をカバーしているが、より明示的な negative cases があるとよい:
- read-only grant は write delegation を満たしてはならない;
- non-recursive parent grant は child delegation を満たしてはならない;
- deny entries は direct access を制約するのと同じように delegation を制約するべきである;
- 同一 path 上の mixed read/write grants は order-independent のままであるべきである。
- 一部の default/builtin profile tests は snapshot-like で、詳細な role policy を assert している。これらは価値があるが、builtin role contracts が意図的に進化すると脆くなりうる。この脆さは、これらを policy-contract tests として扱うなら許容できる。そうでなければ、“must never regress” invariants と “current default snapshot” fixtures に分けるべきである。
- Model/auth schema coverage は manifest/profile coverage より薄い。
ModelManifest::mergeとAuthRefvariants は単純だが、codex_oauth、secret_ref、context-window/max-context-window precedence の round-trip tests を追加すると regression risk を下げられる。 - Compact-ratio behavior には known model context lookup を含む positive coverage があるが、以下についてより明確な negative tests があるべきである:
- model context がなく、unknown model ref である場合の ratio;
context_windowがmax_context_windowより明示的に大きい場合;- それらを reject する意図があるなら、invalid/edge ratios。
- Public path helpers は、exported environment-reading functions ではなく pure resolver helpers を通じてテストされている。これは determinism のためには良いが、ごく小さな serial/env-scoped smoke test があれば public functions の配線ミスを検出できる。
- README/doctest coverage は実質的に存在しない(doctests は
running 0 tests)。これは config crate にとって大きな問題ではないが、README examples が public contract の一部になるなら、実行可能にするか、テストでミラーするべきである。
追加を提案するもの
- private helpers だけをテストするのではなく、public API 経由で代表的な manifest/profile fixtures を load する小さな integration test を
crates/manifest/tests/配下に追加する。 Scopeに symlink boundary tests を追加する:- allowed root 内の symlink が外を指す場合は deny されるべきである;
- 外側の symlink が内側を指す場合は canonical target policy に従って振る舞うべきである;
- symlink を含む deny paths は、normalization/canonicalization 後も grants を override するべきである。
- permission、recursion、deny、path ancestry の組み合わせをカバーする delegation matrix test table を追加する。
- サポートされているすべての auth variants と context-window precedence について model/auth round-trip tests を追加する。
- missing/unknown context と invalid edge values 周辺の negative compact-ratio tests を追加する。
- snapshot-like builtin profile tests を policy-contract tests としてラベル付けするか、期待値を compact fixtures に移して、意図的な role-policy changes をレビューしやすくすることを検討する。
実行したコマンド
cargo test -p manifest- Result: passed
- Summary:
129 passed; 0 failed; 0 ignored; finished in 0.00s