Why
c3-prime 契約(#872 で確定)の検証規則が scripts/ai-loop/ の 3 ファイルに分散実装されており、#873(delivery.py)/#874(run_evidence.py)で消費者が 4〜5 に増える前に共通層へ集約する必要がある。
実測(2026-07-22・main 3ec2e24):
| 重複 |
箇所 |
多重度 |
定数(VALID_DECISIONS/VALID_VERDICTS/ARTIFACTS) |
plan_package.py + c3prime_verify.py |
2 重 |
| snapshot キー定義 |
arbiter.py SNAPSHOT_REQUIRED_KEYS(L486) + c3prime_verify.py SNAPSHOT_KEYS(L34) + plan_package.py 組み立て側 |
3 重 |
| sha256 + canonical JSON hash 式 |
plan_package.py _sha256_of(L137) + c3prime_verify.py _sha256(L46) |
2 重 |
| snapshot 三つ組照合(AC-5 の核心規則) |
arbiter.py plan_package_check(L495) + c3prime_verify.py(L155-171) |
2 重(別実装) |
分散したままだと、契約改版時に実装間 drift(片方だけ直す)で承認境界の検証強度が silent に割れるリスクがある。check_evidence は既に plan_package.py へ集約済み(c3prime_verify が import)で、その前例の延長。
What
Scope
scripts/ai-loop/c3_contract.py 新設(非 HO): 契約定数 + I/O なし純関数(canonical_hash / check_snapshot_trio)+ I/O あり sha256_of_file
- 3 ファイル(arbiter.py / plan_package.py / c3prime_verify.py)を import 参照へ置換(1 コミット 1 種類: 定数 → hash → 三つ組照合)
- sync 配布整合:
sync-plugin-plangate.sh の copy + delete 保護へ新モジュール追加、ta-30 bundled 自立 PASS
- 受理側(c3prime_verify)touch のため敵対レビュー 1 ラウンド以上
Suggested files
- 新設:
scripts/ai-loop/c3_contract.py + scripts/ai-loop/test_c3_contract.py
- 変更:
scripts/ai-loop/{arbiter,plan_package,c3prime_verify}.py / scripts/sync-plugin-plangate.sh / 対応 test 3 ファイル
Suggested outputs
refactor: プレフィックスの PR(機能変更なし・振る舞い不変)
Acceptance Criteria
Non-goals
- arbiter
plan_package_check(入力ブロック検証)と c3prime_verify(record 検証)の全統合(対象が異なる — premature abstraction 回避)
- c3-prime-contract.md の規則変更(実装集約のみ・契約は不変)
- 機能追加・挙動変更
Labels
enhancement / priority:P1 / area:workflow
Milestone
なし(次期機能リリースに同梱)
Parent EPIC / Roadmap
Why
c3-prime 契約(#872 で確定)の検証規則が
scripts/ai-loop/の 3 ファイルに分散実装されており、#873(delivery.py)/#874(run_evidence.py)で消費者が 4〜5 に増える前に共通層へ集約する必要がある。実測(2026-07-22・main 3ec2e24):
VALID_DECISIONS/VALID_VERDICTS/ARTIFACTS)SNAPSHOT_REQUIRED_KEYS(L486) + c3prime_verify.pySNAPSHOT_KEYS(L34) + plan_package.py 組み立て側_sha256_of(L137) + c3prime_verify.py_sha256(L46)plan_package_check(L495) + c3prime_verify.py(L155-171)分散したままだと、契約改版時に実装間 drift(片方だけ直す)で承認境界の検証強度が silent に割れるリスクがある。
check_evidenceは既に plan_package.py へ集約済み(c3prime_verify が import)で、その前例の延長。What
Scope
scripts/ai-loop/c3_contract.py新設(非 HO): 契約定数 + I/O なし純関数(canonical_hash/check_snapshot_trio)+ I/O ありsha256_of_filesync-plugin-plangate.shの copy + delete 保護へ新モジュール追加、ta-30 bundled 自立 PASSSuggested files
scripts/ai-loop/c3_contract.py+scripts/ai-loop/test_c3_contract.pyscripts/ai-loop/{arbiter,plan_package,c3prime_verify}.py/scripts/sync-plugin-plangate.sh/ 対応 test 3 ファイルSuggested outputs
refactor:プレフィックスの PR(機能変更なし・振る舞い不変)Acceptance Criteria
Non-goals
plan_package_check(入力ブロック検証)と c3prime_verify(record 検証)の全統合(対象が異なる — premature abstraction 回避)Labels
enhancement / priority:P1 / area:workflow
Milestone
なし(次期機能リリースに同梱)
Parent EPIC / Roadmap
docs/workflows/ai-loop/c3-prime-contract.md(契約正本・不変)