Skip to content

refactor(ai-loop): 検証ロジックの共通契約層化 — 定数/hash/snapshot三つ組照合の重複解消(#873/#874 前の基盤整理) #896

Description

@s977043

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

  1. scripts/ai-loop/c3_contract.py 新設(非 HO): 契約定数 + I/O なし純関数(canonical_hash / check_snapshot_trio)+ I/O あり sha256_of_file
  2. 3 ファイル(arbiter.py / plan_package.py / c3prime_verify.py)を import 参照へ置換(1 コミット 1 種類: 定数 → hash → 三つ組照合)
  3. sync 配布整合: sync-plugin-plangate.sh の copy + delete 保護へ新モジュール追加、ta-30 bundled 自立 PASS
  4. 受理側(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

  • 契約定数(ARTIFACTS / VALID_DECISIONS / VALID_VERDICTS / SNAPSHOT_KEYS / REQUIRED_KEYS 系)が単一モジュール定義で、3 消費者が import 参照する
  • sha256 / canonical JSON hash が単一実装になる
  • snapshot 三つ組照合が I/O なし共通純関数になり、arbiter / c3prime_verify の両経路が同一実装を使う
  • 既存テスト全 green(振る舞い不変: test_arbiter 247 / test_plan_package 30 / test_c3prime_verify 12 / run-tests 411)
  • sync 列挙(copy + delete 保護)に新モジュールが追加され、sync 2 回目 no-op + ta-30 bundled 自立 PASS
  • arbiter の「ファイル I/O なし」原則が維持される(arbiter は I/O あり関数を import しない)
  • 偽造 record 群(test_c3prime_verify の手 mutate 系)の reject が不変
  • 敵対レビュー 1 ラウンド以上の disposition 記録

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

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions