From 9a54b2839e9ca46d48b0a2148e8a6360a5468bc1 Mon Sep 17 00:00:00 2001 From: randypanding Date: Sat, 29 Aug 2026 08:40:52 +0000 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20evidence-query=20=E6=BA=90=E7=BC=BA?= =?UTF-8?q?=E5=B8=AD=E5=88=A4=E5=AE=9A=E5=85=BC=E5=AE=B9=20"No=20ref=20fou?= =?UTF-8?q?nd"=20404=20=E6=8A=A5=E6=96=87=E5=BD=A2=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 波次通道实测(W2-C3 AC-9a/9b,run 33243560655)抓出:butler-ledger 分支 未建时 contents API 404 报文为 "No ref found for ..."(不含 "not found"), 被误判"非 404 拉取失败"→ INFRA exit 2——源缺席本应是合法过渡态(W1-B2)。 fail-closed 方向无误(未盲熔断、cost-infra issue #435 已开出),仅缺席 判定面修复。回归用例入 test-evidence-shadow.sh(GH_STUB_BUTLER_MISSING=2)。 ADR-0103 / IR-0006 W2-C3 / BEH-03 --- governance/evidence-query.sh | 9 ++++++--- governance/tests/test-evidence-shadow.sh | 9 +++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/governance/evidence-query.sh b/governance/evidence-query.sh index c0f092b..f661580 100644 --- a/governance/evidence-query.sh +++ b/governance/evidence-query.sh @@ -41,8 +41,11 @@ open(sys.argv[2], "w", encoding="utf-8", newline="\n").write( PYEOF return 0 fi - if grep -qi 'not found' "$TMP/api.err" 2>/dev/null; then - return 1 # 源缺席(尚无影子记录)——过渡期合法,非红 + # 404 两种报文都算源缺席:路径不存在="Not Found";ref(分支)不存在= + # "No ref found for ..."(不含 "not found" 字样——2026-08-29 波次通道实测抓出: + # butler-ledger 分支未建被误判"非 404 拉取失败"→ INFRA exit 2,源缺席本应合法跳过) + if grep -qiE 'not found|no ref found' "$TMP/api.err" 2>/dev/null; then + return 1 # 源缺席(尚无影子记录/账本分支未建)——过渡期合法,非红 fi echo "FATAL: $repo@$branch $path 拉取失败(非 404):" >&2; cat "$TMP/api.err" >&2; exit 2 } @@ -57,7 +60,7 @@ for ent in json.load(open(sys.argv[1], encoding="utf-8")): base64.b64decode(ent["content"]).decode("utf-8")) PYEOF else - if ! grep -qi 'not found' "$TMP/api.err" 2>/dev/null; then + if ! grep -qiE 'not found|no ref found' "$TMP/api.err" 2>/dev/null; then echo "FATAL: metering-ledger 目录拉取失败:" >&2; cat "$TMP/api.err" >&2; exit 2 fi fi diff --git a/governance/tests/test-evidence-shadow.sh b/governance/tests/test-evidence-shadow.sh index ab0c42e..1312fc1 100644 --- a/governance/tests/test-evidence-shadow.sh +++ b/governance/tests/test-evidence-shadow.sh @@ -149,6 +149,9 @@ case "$url" in if [[ -f "$F/drill-tampered.json" ]]; then cat "$F/drill-tampered.json"; else cat "$F/drill.json"; fi ;; "repos/Cloudbird-Software/.github/contents/governance/butler/shadow-evidence.jsonl?ref=butler-ledger") if [[ "${GH_STUB_BUTLER_MISSING:-}" == "1" ]]; then echo "gh: Not Found (HTTP 404)" >&2; exit 1; fi + if [[ "${GH_STUB_BUTLER_MISSING:-}" == "2" ]]; then + echo 'gh: No ref found for "butler-ledger" in repo Cloudbird-Software/.github (HTTP 404)' >&2; exit 1 + fi cat "$F/butler.json" ;; *) echo "gh-stub: 意外 URL $url" >&2; exit 1 ;; esac @@ -173,6 +176,12 @@ MOUT=$(GH="$GHSTUB" GH_STUB_FIXTURES="$TMP/fixtures" GH_TOKEN=stub GH_STUB_BUTLE bash "$DIR/governance/evidence-query.sh" 2>"$TMP/m.err"); MRC=$? MN=$(nlines "$MOUT") [[ $MRC -eq 0 && "$MN" -eq 4 ]] && pass "butler 源缺席(404)→ 跳过非红(4 条)" || fail "源缺席误红(rc=$MRC 行=$MN)" +# 源缺席(404 第二报文形态——账本分支未建 "No ref found"):同跳过非红 +# (2026-08-29 波次通道实测回归:该形态曾被误判"非 404"→ INFRA exit 2) +ROUT=$(GH="$GHSTUB" GH_STUB_FIXTURES="$TMP/fixtures" GH_TOKEN=stub GH_STUB_BUTLER_MISSING=2 \ + bash "$DIR/governance/evidence-query.sh" 2>"$TMP/r.err"); RRC=$? +RN=$(nlines "$ROUT") +[[ $RRC -eq 0 && "$RN" -eq 4 ]] && pass "源缺席(No ref found 分支未建)→ 跳过非红(4 条)" || fail "分支未建误红(rc=$RRC 行=$RN)" # 负向:任一源链断 → exit 3 且 stdout 零输出(不可信数据不出结果) python3 - "$TMP/fixtures" <<'PYEOF' import base64, json, sys From 87a5da4ae5005d5ffec8e89b2ac9f1d4e08f2a92 Mon Sep 17 00:00:00 2001 From: randypanding Date: Sat, 29 Aug 2026 09:02:08 +0000 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20retrigger=20org-gate=EF=BC=88PR=20?= =?UTF-8?q?body=20=E5=B7=B2=E8=A1=A5=20ADR-0103=E2=80=94=E2=80=94rerun=20?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E6=97=A7=E4=BA=8B=E4=BB=B6=20payload?= =?UTF-8?q?=EF=BC=89ADR-0103?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit