curl -s -H "Authorization: token $GH_TOKEN" "https://api.github.com/repos/Cloudbird-Software/CI-Workflows/contents?ref=metering-ledger" | python3 -c '
import base64,json,sys
for ent in json.load(sys.stdin):
if ent["type"]=="file" and ent["name"].startswith("shadow-evidence-"):
base64.b64decode(ent["content"]) # KeyError: "content"
'
摘要
对 IR-0006(#402,state:done)做独立实证验收(不看 acceptance.md 结论、以实际代码与运行结果为准)时,发现 2 个真实未收口问题:①
evidence-query.sh的 metering 源存在确定性 KeyError bug,导致 AC-4「三源统一查询」的 metering 源永远取不到已有数据;②governance/tests/test-feedback-edge.sh稳定红(2 项断言失败),且 gate CI 因 for 循环退出码语义将其失败掩盖。其余 8 项 AC 均以代码+运行实证通过。问题 1:evidence-query.sh 的 metering 源拉取 KeyError(AC-4 未完整满足)
governance/evidence-query.sh第 66-75 行(引入自 feat: butler/drill 影子双写 + 三源统一查询(W1-B2 后半,IR-0006) #430,W1-B2 三源对齐)bash governance/evidence-query.sh --json退出 0,但 stderr 报KeyError: 'content',输出统一 JSONL 中 metering=0 条。repos/Cloudbird-Software/CI-Workflows/contents?ref=metering-ledger做目录列表拉取,GitHub 目录列表条目不含content字段,但代码对匹配shadow-evidence-*.jsonl的条目执行base64.b64decode(ent["content"])→ 必然 KeyError。即便metering-ledger分支根目录真实存在shadow-evidence-2026-W35.jsonl(1 条含 tenant 的记录),也永远取不到。.github仓无butler-ledger分支,governance/butler/shadow-evidence.jsonl404;butler-reconcile近期 run #33274629909/#33263640232 均在 checkout 步失败,未落过影子)。「七源一条命令」实为 5 源有数据。download_url/逐文件contents/<path>?ref=拉取正文,或改用git tree递归取 blob sha 再git blob取内容。问题 2:test-feedback-edge.sh 稳定红(W6-M2 #424 自测失败且被 CI 掩盖)
governance/tests/test-feedback-edge.sh(feat: R3→R1 反馈边骨架——运行信号自动生成候选 spec 入 backlog(IR-0006 W6-M2) #462 引入,W6-M2 反馈边)bash governance/tests/test-feedback-edge.sh退出 1,稳定 2 项断言 FAIL:pending 字串误判、用量越阈漏检(多次重跑稳定复现)。set -uo pipefail+ 对python3 feedback-edge.py ... | grep -q "..."的用法。grep -q命中后立即关闭读端,上游feedback-edge.py后续仍大量输出(CANDIDATE 正文等)触发 SIGPIPE,进程非零退出;pipefail使整条管道退出码非零 → 断言误报 FAIL。feature 本身输出正确(tee 留存流含PENDING needs-human-p90-stop与SIGNAL per-ir-cost value=80.5 gt 60.0,对文件 grep 均匹配;去掉 pipefail 后管道判定 PASS)。gate.yml「治理脚本自测」步骤用for t in ...; do bash "$t"; done且未set -e,退出码=最后一个测试(test-wave-schema.sh 绿)→ 该步整体 success,test-feedback-edge 的红被吞掉。gate CI 显示绿是假象。... | tee file | grep -q前先落文件再 grep,或grep -q -m1前加SIGPIPE容错、或去掉 pipefail 对管道的误伤(如set +o pipefail包裹);② gate 步骤加set -e/ 逐测试判定,让任何单测红都使 gate 红。已实证通过的部分(供对照,非本 issue 范围)
结论
IR-0006 意图主体已开发完成且大部分可实证通过,但 AC-4 的 metering 源查询、W6-M2 的自测两处未收口,与 acceptance.md「十条全绿」的表述不符。建议修复后重跑
evidence-query.sh(metering 应有记录)与test-feedback-edge.sh(应全绿),并让 gate 对单测失败真正 fail-closed。