背景(独立验收发现)
IR-0006 AC-3 与 BEH-02 明确要求两项独立可执行的机器锚点:
-
独立验证脚本(AC-3 then 段):
hash 链头与月度 checkpoint 可由独立脚本复算验证(链断=红);
运行时证据 = checkpoint 验证 run 的 JSONL 日志。
IR-0006 验收报告 specs/IR-0006/acceptance.md 第 3 条回探行明确写了:
本轮实测:scripts/verify_evidence.py 独立复算 OK(3 条链完整 + checkpoint×1 对账一致)。
-
月度 checkpoint 执行(BEH-02):
每月末对判定层做 checkpoint(链头 hash+当月汇总)提交 git;
独立验证脚本可从任意旧 blob 复算整链。
实际代码证据(本轮独立核对)
GAP 2A:scripts/verify_evidence.py 根本不存在
Glob **/*verify*evidence* → 0 结果
仓库侧实际存在的验链入口只有:
| 文件 |
作用域 |
能否独立从 archive 仓远端证据账本复算? |
governance/evidence_shadow.py verify |
本仓 .github/ 本地影子文件的 append/verify/relink |
❌ 只吃本地 JSONL 文件路径,无远端 archive 证据目录拉取逻辑 |
governance/evidence-query.sh |
7 源统一查询 + 逐源验链 |
⚠️ 验链但只输出查询结果,不产出 checkpoint JSONL,也不对比 checkpoints/YYYY-MM.json 链头 |
standards/evidence/README.md |
文档描述 checkpoint 格式 |
❌ 不可执行 |
验收报告提到的 scripts/verify_evidence.py 名称与「archive evidence/ledger.jsonl → checkpoints/2026-08.json」对账断言在本仓找不到可执行对应物。如果脚本实际位于 archive 仓 scripts/ 目录而不是 .github 仓,那:
- 应该在
specs/IR-0006/spec.md AC-3 的 blastRadius 或 IFACE-01 行显式标注"脚本居 archive 仓 scripts/"——但没有;
- 独立验收者按 acceptance.md 给出的相对路径在本仓跑会失败(本轮复现就是如此)。
GAP 2B:checkpoint 生成 / 调度脚本缺失
Glob **/*checkpoint* → 0 结果
governance/ 脚本目录下没有 checkpoint.sh / checkpoint.py / 任何以 checkpoint 命名的文件。
.github/workflows/ 16 个 yaml 逐一过:butler-ledger.yml、governance-drift.yml、butler-reconcile.yml 等——没有任何 workflow 声明「每月末(或任一月度 cadence)对 archive evidence/ 生成 checkpoint 并提交 git」。
standards/evidence/README.md L53-54 只描述了产物形态 evidence/checkpoints/YYYY-MM.json 和校验要求,但:
- 没有生成脚本;
- 没有调度 cron;
- 没有「checkpoint 缺失 = 红」的 fail-closed 门禁。
佐证:PyYAML 依赖(非 bug,备注)
先前 wave_schema.py / elevation.py 本地沙箱报错"budget 块须为 YAML 映射""缺 PyYAML",根因为沙箱环境没装依赖。安装 PyYAML 后:
test-wave-schema.sh 15/15 PASS(包括 budget/capabilities 解析、hard-stop超限 exit 4)
test-elevation.sh 17/17 PASS(HO 场景 3 缺 reason/spec 必拒、grant 正向、sweep/open-check AC-9d)
test-evidence-shadow.sh 28/28 PASS
.github/requirements-gate.txt 已 pin pyyaml==6.0.3 --hash=...,CI 侧 gate 环境正确装包。PyYAML 不是 GAP,排除在本 issue 外。
影响面
- AC-3 T-15 回探证据不可复现:独立验收者按 acceptance.md 指引运行
scripts/verify_evidence.py → 文件不存在。治理仓"可回放"承诺受损。
- BEH-02 月度节奏无机器守卫:没脚本没 cron,checkpoint 靠人工或靠别的仓;一旦人忘记,账本的月度 hash 锚点断档——篡改历史的检测窗口从"1 个月"拉长到"下次有人手工跑"。
- fail-closed 边界不闭合:即使未来补 checkpoint,如果没 CI 工作流断言"新 checkpoint 必须在上月 1 号 + N 天窗口内出现",缺失也不会红。
建议交付
2A — 独立验证脚本(建议居 .github 仓 scripts/verify_evidence.py,或验收报告显式改路径)
选型二选一,但必须有其一:
- (A) 在本仓新增
scripts/verify_evidence.py,支持 --repo Cloudbird-Software/archive --branch main --dir evidence/ --checkpoint checkpoints/2026-08.json,输出 JSONL 日志记录每条链的验证结果,链断=exit 3。
- (B) 若脚本实际居 archive 仓,补齐本仓两处引用导航:
specs/IR-0006/spec.md blastRadius 加 archive: scripts/verify_evidence.py;acceptance.md 回探 3 改为 archive/scripts/verify_evidence.py,并在 docs/NAVIGATION.md 登记(防 test-navigation.sh 断链红)。
2B — checkpoint 生成 + 调度
- 新增
governance/evidence-checkpoint.sh(或同名 py):拉取 archive evidence/ 月末最新链头 + 月聚合行数/字节数,写 checkpoints/YYYY-MM.json。
- 新增
.github/workflows/evidence-checkpoint.yml:schedule: cron: "33 7 1 * *"(每月 1 号 UTC 07:33)调用脚本,以 cloudbrid-agent 身份向 archive 仓开 PR(或直接提,如果工作流 token 有 archive 写权 via dispatch)。
- 在 gate.yml(或红队路径)加一个最小断言:checkpoint 缺失超过 40 天=红(防止月度跑飞)。
关联意图
- IR-0006 AC-3(独立脚本 + checkpoint)/ BEH-02(月度节奏)
- ADR-0062 hash 链平移(链断=红的 fail-closed)
背景(独立验收发现)
IR-0006 AC-3 与 BEH-02 明确要求两项独立可执行的机器锚点:
独立验证脚本(AC-3 then 段):
IR-0006 验收报告
specs/IR-0006/acceptance.md第 3 条回探行明确写了:月度 checkpoint 执行(BEH-02):
实际代码证据(本轮独立核对)
GAP 2A:
scripts/verify_evidence.py根本不存在仓库侧实际存在的验链入口只有:
governance/evidence_shadow.py verify.github/本地影子文件的 append/verify/relinkgovernance/evidence-query.shstandards/evidence/README.md验收报告提到的
scripts/verify_evidence.py名称与「archive evidence/ledger.jsonl → checkpoints/2026-08.json」对账断言在本仓找不到可执行对应物。如果脚本实际位于 archive 仓scripts/目录而不是.github仓,那:specs/IR-0006/spec.mdAC-3 的blastRadius或 IFACE-01 行显式标注"脚本居 archive 仓 scripts/"——但没有;GAP 2B:checkpoint 生成 / 调度脚本缺失
governance/脚本目录下没有 checkpoint.sh / checkpoint.py / 任何以 checkpoint 命名的文件。.github/workflows/16 个 yaml 逐一过:butler-ledger.yml、governance-drift.yml、butler-reconcile.yml等——没有任何 workflow 声明「每月末(或任一月度 cadence)对 archive evidence/ 生成 checkpoint 并提交 git」。standards/evidence/README.mdL53-54 只描述了产物形态evidence/checkpoints/YYYY-MM.json和校验要求,但:佐证:PyYAML 依赖(非 bug,备注)
先前
wave_schema.py/elevation.py本地沙箱报错"budget 块须为 YAML 映射""缺 PyYAML",根因为沙箱环境没装依赖。安装 PyYAML 后:test-wave-schema.sh15/15 PASS(包括 budget/capabilities 解析、hard-stop超限 exit 4)test-elevation.sh17/17 PASS(HO 场景 3 缺 reason/spec 必拒、grant 正向、sweep/open-check AC-9d)test-evidence-shadow.sh28/28 PASS.github/requirements-gate.txt已 pinpyyaml==6.0.3 --hash=...,CI 侧 gate 环境正确装包。PyYAML 不是 GAP,排除在本 issue 外。影响面
scripts/verify_evidence.py→ 文件不存在。治理仓"可回放"承诺受损。建议交付
2A — 独立验证脚本(建议居
.github仓scripts/verify_evidence.py,或验收报告显式改路径)选型二选一,但必须有其一:
scripts/verify_evidence.py,支持--repo Cloudbird-Software/archive --branch main --dir evidence/ --checkpoint checkpoints/2026-08.json,输出 JSONL 日志记录每条链的验证结果,链断=exit 3。specs/IR-0006/spec.md blastRadius加archive: scripts/verify_evidence.py;acceptance.md回探 3 改为archive/scripts/verify_evidence.py,并在docs/NAVIGATION.md登记(防 test-navigation.sh 断链红)。2B — checkpoint 生成 + 调度
governance/evidence-checkpoint.sh(或同名 py):拉取 archive evidence/ 月末最新链头 + 月聚合行数/字节数,写checkpoints/YYYY-MM.json。.github/workflows/evidence-checkpoint.yml:schedule: cron: "33 7 1 * *"(每月 1 号 UTC 07:33)调用脚本,以 cloudbrid-agent 身份向 archive 仓开 PR(或直接提,如果工作流 token 有 archive 写权 via dispatch)。关联意图