From be1c9778c80b084c645b48d4a1e0979e315dfcf2 Mon Sep 17 00:00:00 2001 From: "agent.develop" Date: Tue, 22 Sep 2026 21:15:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(m5a):=20[M5a]=20QC#1/#2/#3/#4=20=E6=94=B6?= =?UTF-8?q?=E5=8F=A3=E2=80=94=E2=80=94V5=20=E5=8F=A3=E5=BE=84=E5=9B=9E?= =?UTF-8?q?=E6=AD=A3=EF=BC=88.scratch=5Fm5a=20=E7=A7=BB=E5=87=BA=20WS=5FKE?= =?UTF-8?q?PT=E3=80=81=E9=87=8D=E5=9B=9E=20M5A=5FOWN=5FDUMP=5FGONE=20?= =?UTF-8?q?=E5=8F=8D=E5=90=91=E9=97=A8=E7=A6=81=EF=BC=89+=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=205.1b=20=E9=98=B2=E6=B4=97=E7=99=BD=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E9=97=A8=E7=A6=81=20+=20README=20V5=20=E8=A1=8C?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=9B=E5=B7=A5=E4=BD=9C=E7=A9=BA=E9=97=B4?= =?UTF-8?q?=E6=A0=B9=20.scratch=5Fm5a/=20=E5=B7=B2=E6=95=B4=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E5=88=A0=E9=99=A4=EF=BC=8Cgit=20=E8=AF=81=E6=8D=AE?= =?UTF-8?q?=E8=BF=81=20projects/pbls/docs/02-develop/m5a-git-closure-evide?= =?UTF-8?q?nce-raw.txt=20[bmCibtswYxMYaH0KBh6aX]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/verify_m5a_closure.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/verify_m5a_closure.py b/scripts/verify_m5a_closure.py index 10b7346..d43486b 100644 --- a/scripts/verify_m5a_closure.py +++ b/scripts/verify_m5a_closure.py @@ -324,6 +324,16 @@ def verify_tmp_hygiene(): else: detail.append('M5a 自身转储已全部删除: %s' % ', '.join(M5A_OWN_DUMP_GONE)) + # 5.1b 防「洗白」回归门禁:WS_KEPT 白名单里**永远不许**出现 M5a 自身链路的条目。 + # 上一轮 QC #2 的实质问题不是「目录没删」,而是「用放宽门禁(塞白名单)迁就残留产物」—— + # 本项把该教训固化成机械判据,任何人再往白名单里加 m5a 自身产物即 FAIL。 + own_kept = sorted(k for k in WS_KEPT if 'm5a' in k.lower()) + if own_kept: + problems.append('M5a 自身链路产物被错误登记进 WS_KEPT 白名单(反向门禁不许洗白,须删除并迁至 projects/pbls/docs/02-develop/): %s' + % ', '.join(own_kept)) + else: + detail.append('WS_KEPT 白名单中无 M5a 自身链路条目(防洗白回归门禁成立)') + # 5.2 文件类一次性产物:命中模式 → 必须在白名单(且白名单写明引用文档) hit_files, kept_files = [], [] for f in files: