Status: v1(PBI-116-06 で初版確立、Phase 2 / PBI-116) 関連:
docs/ai/core-contract.md/docs/ai/model-profiles.md/docs/ai/tool-policy.md/docs/ai/hook-enforcement.mdInterface preflight:docs/working/PBI-116/interface-preflight.md
PlanGate ワークフローにおいて、モデルに判断させるべきもの と runtime で決定論的にブロックすべきもの を明確に分離する。プロンプトに不変制約を全部書き込むと再び肥大化するため、「ソフト」「ハード」の境界を 4 layer で整理する。
| Layer | 強制力 | 責務 | 主な配置 |
|---|---|---|---|
| Prompt | ソフト(モデル判断) | 目的、成功条件、判断基準、不明点の扱い、報告形式 | core-contract.md / CLAUDE.md / AGENTS.md |
| Tool Policy | ソフト + 制限 | phase 別の利用可能ツールを限定 | tool-policy.md(本 PBI) |
| Hook | ハード(決定論ブロック) | 不変条件を runtime で 100% 強制 | hook-enforcement.md(本 PBI、定義のみ)+ .claude/settings.json の hooks(実装) |
| CLI / validate | ハード(事後検証) | 成果物・承認状態・plan_hash・検証証拠を検査 | bin/plangate validate 等(本 PBI scope 外) |
allowed_files / forbidden_files 違反検出plan_hash 改竄検知、approvals/c3.json の必須キーtool_policy: narrow / allowed_tools_by_phase / expanded の射影approvals/c3.json の plan_hash と現 plan.md SHA-256 一致evidence/verification.md、test 実行ログ複数 layer が同一事項に触れる場合(例: 「scope 外編集禁止」を Prompt にも Hook にも書く):
| 制約 | プロンプト | Tool Policy | Hook | CLI |
|---|---|---|---|---|
| C-3 承認前は production code 編集禁止 | Iron Law として明示 | approve-wait phase で write 全禁止 | runtime block | approvals/c3.json なしなら fail |
| scope 外ファイル編集禁止 | Iron Law として明示 | allowed_files に制限 | runtime block(forbidden_files 検出) | diff の対象外チェック |
| 検証証拠なし PR 禁止 | Iron Law として明示 | review phase で diff/test のみ | runtime block(evidence なし PR) | evidence ディレクトリ存在チェック |
| plan_hash 改竄禁止 | Iron Law として明示 | — | runtime block(hash 不一致検出) | approvals/c3.json の plan_hash と現 plan.md SHA 比較 |
| 承認なし sub-issue 追加禁止 | Iron Law として明示 | — | runtime block | — |
tool-policy.md + hook-enforcement.md.claude/settings.json の hooks 追加 / CLI validate 拡張 はすべて 別 PBI実装方法は hook-enforcement.md で「強制すべき不変条件」を定義し、別 PBI で実装する。
docs/working/PBI-116/parent-plan.mddocs/working/TASK-0041/core-contract.mdmodel-profiles.mdtool-policy.md / hook-enforcement.md