From 117a37e2a5d0509566ba27808fae418ae69583c8 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 29 Oct 2026 04:51:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E7=A8=8B(=E5=90=88=E5=9B=9E=E9=97=B8?= =?UTF-8?q?=E5=85=B3=E8=81=94=E6=A1=A3=E6=89=B9=C2=B7=E6=94=B6=E5=8F=A3?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3):=20=E7=BA=A2=E9=A1=B9=E6=8C=87=E7=BA=B9?= =?UTF-8?q?=E5=BD=92=E4=B8=80=E5=8C=96=E8=B6=85=E6=97=B6=E6=8C=82=E6=AD=BB?= =?UTF-8?q?=E8=A1=8C=E7=9A=84=20pid=E2=80=94=E2=80=94fingerprint=20?= =?UTF-8?q?=E5=8F=AA=E5=8F=96=20FAIL=20=E5=85=B3=E9=94=AE=E8=A1=8C?= =?UTF-8?q?=E5=93=88=E5=B8=8C=EF=BC=8C=E6=B3=A8=E9=87=8A=E8=87=AA=E9=99=88?= =?UTF-8?q?=E3=80=8C=E5=BF=BD=E7=95=A5=E6=97=B6=E5=BA=8F/=E8=80=97?= =?UTF-8?q?=E6=97=B6=E5=99=AA=E5=A3=B0=E3=80=8D=EF=BC=8C=E4=BD=86=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E8=A1=8C=E5=86=85=E5=B5=8C=20pid=3DNNNN=20=E9=80=90?= =?UTF-8?q?=E8=BD=AE=E5=8F=98=E5=8C=96=E4=BD=BF=E5=AD=98=E9=87=8F=E7=BA=A2?= =?UTF-8?q?=E6=8C=87=E7=BA=B9=E6=97=A0=E6=B3=95=E7=A8=B3=E5=AE=9A=E7=99=BB?= =?UTF-8?q?=E8=AE=B0=EF=BC=88=E9=A6=96=E8=B7=91=E5=AE=9E=E6=B5=8B=EF=BC=9A?= =?UTF-8?q?02=20=E7=9A=84=20forge=5Fworkbench=20=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E8=A1=8C=E5=B8=A6=20pid=20=E4=BD=BF=E6=8C=87=E7=BA=B9=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E5=A4=8D=E7=8E=B0=EF=BC=89=EF=BC=9B=E5=BD=92=E4=B8=80?= =?UTF-8?q?=E5=8C=96=20pid=3DN=20=E5=90=8E=E5=86=8D=E5=85=A5=E5=93=88?= =?UTF-8?q?=E5=B8=8C=EF=BC=8C=E5=88=A4=E5=AE=9A=E5=8F=A3=E5=BE=84=EF=BC=88?= =?UTF-8?q?FAIL=20=E8=A1=8C=E9=9B=86=E5=90=88=EF=BC=89=E4=B8=8D=E5=8F=98?= =?UTF-8?q?=E3=80=82=E9=A6=96=E8=B7=91=E5=8F=A6=E6=B5=8B=E5=BE=97=EF=BC=9A?= =?UTF-8?q?02=20=E7=8E=B0=E7=BA=A2=209=20=E5=A5=97=E4=BB=B6=EF=BC=8B09=20?= =?UTF-8?q?=E7=BA=A2=E9=A1=B9=E6=B8=85=E5=8D=95=E5=8F=98=E5=8C=96=E5=9D=87?= =?UTF-8?q?=E7=B3=BB=20master=20=E5=9C=A8=E5=86=8C=E5=AD=98=E9=87=8F?= =?UTF-8?q?=E5=80=BA=EF=BC=88=E5=BE=85=E5=8A=9E=E6=B8=85=E5=8D=95=E3=80=8C?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3=2041=20=E6=B5=8B=E8=AF=95=E5=80=BA=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E3=80=8D=E6=9D=A1=202026-10-29=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=A3=81=E5=B8=A6=E7=BA=A2=E5=90=88=E5=B9=B6=E6=89=BF=E6=8E=A5?= =?UTF-8?q?=EF=BC=9Aconfig=5Fdb=20=E8=A7=A3=E6=9E=90=E9=94=99/ooob=20?= =?UTF-8?q?=E9=80=80=E5=87=BA=E7=A0=81=202/table=5Fstructure=5Fguard/treas?= =?UTF-8?q?ure=5Fitems/standee=5Ffx/forge=5Fworkbench=20=E8=B6=85=E6=97=B6?= =?UTF-8?q?/tree=5Frequires=5Flevel/save=5Fmanager=5Fdomain/theme=5Fprojec?= =?UTF-8?q?tion=EF=BC=8BS9=2024=20=E5=A4=84=EF=BC=8BS10=204=20=E5=A4=84?= =?UTF-8?q?=EF=BC=8BS11=20adventure=5Ftable:55=EF=BC=89=EF=BC=8C=E9=9D=9E?= =?UTF-8?q?=E6=9C=AC=E6=89=B9=E6=96=B0=E5=A2=9E=E2=80=94=E2=80=94=E5=9F=BA?= =?UTF-8?q?=E7=BA=BF=E6=BB=9E=E5=90=8E=E7=9A=84=E6=88=90=E5=9B=A0=EF=BC=9D?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3=2041=20=E7=89=B9=E8=AE=B8=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E5=90=88=E5=9B=9E=E6=9C=AA=E9=87=8D=E8=B7=91=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=9F=9F=E9=97=B8=EF=BC=8C=E5=A4=84=E7=BD=AE=E8=A7=81=E4=B8=8B?= =?UTF-8?q?=E4=B8=80=E7=AC=94=E5=9F=BA=E7=BA=BF=E8=AE=B0=E8=B4=A6=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/run_all_gates.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/run_all_gates.sh b/tools/run_all_gates.sh index 97b625e0..943d227a 100644 --- a/tools/run_all_gates.sh +++ b/tools/run_all_gates.sh @@ -439,7 +439,7 @@ fi # ── 与存量基线比对 ── "$PY" - "$BASELINE" "$RECEIPT" "$QUICK" "$DOMAIN" "$REPO" "$DIRTY_GAME" "$SCOPE" "$ONLY_TERMS" "${NAMES[@]}" -- "${EXITS[@]}" -- "${LOGS[@]}" <<'PYEOF' -import hashlib, json, os, subprocess, sys +import hashlib, json, os, re, subprocess, sys baseline_path, receipt_path, quick, domain, repo, dirty_game, scope, only_terms = sys.argv[1:9] rest = sys.argv[9:] @@ -468,7 +468,8 @@ def tree_hash(): return "unknown" def fingerprint(exit_code, log): - """红项指纹:只取 exit!=0 时的 FAIL 关键行集合,忽略时序/耗时噪声。 + """红项指纹:只取 exit!=0 时的 FAIL 关键行集合,忽略时序/耗时噪声 + (超时挂死行的 pid=NNN 随跑批变化,归一化为 pid=N 后再入哈希——否则存量红指纹逐轮漂移)。 绿闸一律记 'green'——绿闸日志里的「零红」「全绿」等字样不是红项,采进来只会造噪声。""" # SKIP / NEED-APPROVAL 都属「本闸未实跑」状态,指纹一律记 skip—— # 两者互变不是闸况变化(同是没跑),只有「未跑 → 跑出结果」或「绿 → 红」才算变化。 @@ -485,7 +486,7 @@ def fingerprint(exit_code, log): s = line.strip() if not s or "FAIL" not in s: continue - keys.append(s[:160]) + keys.append(re.sub(r"pid=\d+", "pid=N", s)[:160]) if not keys: return "red-nokeys" return hashlib.sha1("\n".join(sorted(set(keys))).encode("utf-8")).hexdigest()[:12]