ADR-0003 §2.1 は SessionStart hook (inventory Tier 1 を agent に inject、 Beads pattern) と inject-inventory script を minimal scope に列挙し、 mechanism の詳細は「ADR-0007 候補」 として defer していた。 Track 1 (REQ-VER-010) で producer (folio inventory → inventory.json) を実装済。 本 ADR は consumer (注入) を設計する: 何を / いつ / どう inject するか、 inventory.json の staleness をどう扱うか。
plugin-architecture-research §5.2 で Beads pattern を verified: {"SessionStart":[{"command":"bd prime"}], "PreCompact":[{"command":"bd prime --stealth"}]} — hook の command stdout が agent context に注入される (~1-2k tokens)。 CLI + hooks 方式は MCP より 10-50x context 効率 (ADR-0003 §4 案 D)。
SessionStart hook が folio prime を実行し、 その stdout を agent context に注入する (Beads pattern、 stdout ベース、 MCP 不使用)。 matcher を省略するため SessionStart は startup / resume / clear / compact の全 source で発火し、 session 開始/再開時の初期注入に加え compaction 後 (compact source) の再注入も担う。
注入は relations.html §4.2 Tier 1 = inventory.json の各 spec entry (@id + title + summary + doc-type + status) を agent-readable な compact text digest (~1-2k tokens 目安) として出力する。 full inventory.json (全 relations 込み) は注入しない。 agent は digest で全体構造を把握し、 詳細 relations は inventory.json を、 spec 本文は各 file を on-demand で Read する (3-tier progressive disclosure)。 digest の具体 layout は HOW (folio-self-spec.html §9 Bindings)。
folio prime は inventory.json を読み Tier 1 digest を stdout 出力する CLI subcommand。 hook から呼ばれる注入経路であると同時に、 user/architect が手動で実行する entry point でもある。 hook (inject-inventory) は folio prime を呼ぶ薄い wrapper、 または hooks.json から folio prime を直接 command 指定する。
folio prime は inventory.json が 不在または stale (spec の追加・編集・削除が inventory 生成後にある) を検出したら、 folio inventory を自動実行して inventory.json を最新化してから digest を出力する。 注入される context が常に現在の spec 構造を反映することを保証する (scan コストは spec 数が小さいため許容、 user 承認 2026-05-25)。
folio prime は手動でも再利用可能| 案 | 採用しなかった理由 |
|---|---|
| 案 A (採用): SessionStart hook (matcher 省略 = 全 source) → folio prime stdout → Tier 1 digest 注入 | Beads-inspired、 動的・compact・CLI+hooks 効率、 手動 prime 再利用可。 compact source で post-compaction も再注入 (e2e startup + compact 両 PASS) |
| 案 F: PreCompact hook で stdout 再注入 (当初案、 2026-05-25 amend で却下) | Claude Code docs 上 PreCompact stdout は context 注入されない (state 保存用)。 post-compaction 再注入は SessionStart:compact source が担う (2026-05-25 実 compaction で e2e PASS) |
| 案 B: MCP server で context 提供 | ADR-0003 案 D で却下済: Beads CLI+hooks が MCP より 10-50x context 効率 |
| 案 C: 静的 CLAUDE.md に inventory を埋込 | 動的でない (spec 追加・編集を反映できない)、 手動更新コスト |
| 案 D: full inventory.json をそのまま注入 | token 過多 (~8KB+)、 Tier 1 compact digest の趣旨 (relations §4.2) を defeat |
| 案 E: 注入なし (agent が手動で Read) | architect priming の目的を defeat、 agent が spec 構造を毎回手動発見 |
| staleness: warn+stale / fail-require-fresh | user が auto-regen を選択 (2026-05-25): 注入 context の常時正確性を優先 |
.claude-plugin/bin/folio (prime subcommand) + hooks/hooks.json (SessionStart、 matcher 省略 = 全 source) + .claude-plugin/scripts/inject-inventory.sh (prime wrapper)folio prime digest を cli-golden で golden-diff、 capture:stdout、 PASS) + SessionStart 実注入 e2e = PASS (startup source = fresh session で Tier 1 digest 注入を確認 S-F、 compact source = 2026-05-25 実 compaction で再注入を確認 S-F-compact、 e2e runbook + observations)folio inventory → inventory.json)。 prime は consumersessionstart-vs-precompact-injection。 ADR-0003 §2.1 の「SessionStart / PreCompact で inject」 記述は frozen のため触れず、 本 ADR が実機検証後の確定 mechanism (SessionStart 単一、 compact source で post-compaction カバー) を保持する