traceabilityは--at省略時に作業ツリーを読むAccepted(2026-09-16決定)。0032が導入したtraceabilityコマンドの入力ソースを拡張する。--atを省略可とする部分は、0043で--at自体を削除したため置き換えられた(作業ツリーを読むという決定は有効)。決定4のimpactを対象外とする部分は、0046でimpact --worktreeを追加したため置き換えられた。
0032は、traceability・impact・coverageの3コマンドを、いずれも指定したGit ref時点のコミット内容だけを読む設計に揃えた。実装したtraceability --at <ref>(既定値HEAD)は、GitTreeKnowledgeSource経由でGitオブジェクトから読むため、対象refに最低1回のコミットが存在しないと動作しない(未コミットの空リポジトリではHEADが解決できずgit ls-treeが失敗する)。
これはmarkharness-viewの実際の利用シーンで不便であることが判明した。GUIやviewが、利用者がKnowledgeを編集している最中にリアルタイムで関係を表示しようとすると、変更のたびにコミットを要求するのは編集ループとして成立しない。
一方、impact・coverageにはこの制約を外す動機がない。
impactはbase..headという2点間の比較そのものが目的であり、両方とも既にコミットされていなければ比較対象として成立しない。coverageはリリース監査(「あるコミット時点で何が検証対象だったか」)が主眼であり、未コミットの作業ツリー状態を混ぜると再現性(設計原則P3)が壊れる。traceabilityには2点比較も監査要件もなく、「今のKnowledgeの関係を見る」という単純な問い合わせである。generate・verifyは既にWorkingTreeKnowledgeSource経由で作業ツリーを直接読んでおり、traceabilityだけがGit ref必須である理由は本質的にはない。
--atはrequiredではなくoptionalにし、省略時は作業ツリーを読むmarkharness traceabilityの--at <ref>を省略した場合、GitTreeKnowledgeSourceではなくWorkingTreeKnowledgeSource(generate・verifyと同じ経路)を使い、作業ツリーの現在の内容をそのまま読む。--at <ref>を指定した場合は、0032決定1のとおり従来通りGit ref時点を読む。
デフォルト値をHEADから「省略」に変える(--atにdefault_valueを設けない)。「省略時は作業ツリー」という振る舞いは、generate・verifyが既に確立している既存の直感と一致する。
atフィールドで読み取り元を区別できるようにする作業ツリーを読んだ場合、atフィールドには固定文字列"working-tree"を格納する。Git ref指定時は、従来通り利用者が指定した文字列(解決前のref名)をそのまま格納する。これにより、出力を見るだけでどちらのソースを読んだ結果かが判別できる。
working-treeという値は、record_kindと同様「レコードの取り違えを防ぐための識別情報」の一種であり、Git refの値と衝突しない予約語として扱う(利用者がGit refにworking-treeという名前を付けた場合との衝突は、既存のHEAD等と同様、実用上のリスクとして許容する)。
現在のrequirements_at・features_at(src/traceability.rs)は、git::ls_tree_recursive/git::show_blob_by_shaによるGitオブジェクト読み取りのみを実装している。作業ツリー読み取りに対応するには、同等の内容をファイルシステムから直接読む実装を追加する必要がある。具体的な実装方法(関数を分けるか、KnowledgeSource同様の抽象化を導入するか)は、本ADRでは決定せず、実装フェーズの設計判断とする。
impact・coverageは対象外とする両コマンドに作業ツリー読み取りへの対応を広げる具体的な必要性は、現時点で確認されていない(YAGNI)。将来必要になれば、その時点で別のADRとして扱う。
record_kind・schema_version・フィールド構成)は変更しない本ADRは入力ソースの選択肢を増やすものであり、TraceabilityReadModelのフィールド構成自体には影響しない。
src/traceability.rs: computeの引数(git_ref: &strから、省略可能な形へ変更)、requirements_at・features_atの作業ツリー版実装、atフィールドの値決定ロジックsrc/cli.rs: Traceabilityコマンドのat引数をOption<String>にし、default_value = "HEAD"を外すdocs/ja/design/cli-read-model-design.md・docs/en/design/cli-read-model-design.md: traceabilityの--at説明、コマンド対応表を更新(本ADRに合わせて更新済み)docs/ja/cli-manual.md・docs/en/cli-manual.md(§1.25): --at省略時の挙動を追記(実装時に反映)src/impact.rs・src/coverage.rs、両コマンドのCLI引数定義markharness-viewの編集中プレビューという実際の困りごとを解決できない。--at working-treeのような明示的な値を新設する: --atを省略した場合の既定動作として作業ツリーを読む方が、generate・verifyと同じ「省略時は作業ツリー」という直感に合う。明示的な特別値を追加すると、利用者が「--atを指定しないと何が起きるか」を覚える負担が増えるだけで、具体的な利点がない。impact・coverageにも同様に作業ツリー対応を広げる: 両コマンドの目的(2点比較・リリース監査)には未コミット状態を混ぜる動機がなく、具体的な要求も確認されていない(YAGNI)。