approve: [M11b-4a-2] 修正 tmp_tools 脚本注释一致性

This commit is contained in:
agent.develop 2026-09-22 19:55:07 +08:00
parent f267ebe891
commit e021ce7715
2 changed files with 32 additions and 6 deletions

23
logs/m5a-run-meta.txt Normal file
View File

@ -0,0 +1,23 @@
=== M5a 实测运行元信息(logs/m5a-run-meta.txt) ===
generated_at : 2026-09-22 19:54:36 +0800
cwd : modules/pbl_evidence
interpreter : Python 3.10.12 (/usr/bin/python3)
说明 : 本文件记录本次被运行/被引用的 .py 的路径、字节数、sha256 与 python -m py_compile 真实 rc(rc=0 即语法编译通过)。
: 本次任务范围仅「运行 + 落日志」,未修改任何源码;未执行任何 git 操作。
PATH BYTES RC PY_COMPILE
scripts/selfcheck_m5a.py 43575 0 OK sha256=65d4d0acd0bfba00
tests/test_m5a_idempotency.py 14706 0 OK sha256=ef214767c6b802dd
tests/m5a_live_db_harness.py 28648 0 OK sha256=01b45a0af96b5f60
--- 本次产出的日志文件(真实 stdout+stderr 重定向,非占位) ---
logs/m5a-selfcheck-run.log 4682 bytes sha256=75001945d581d5e1
logs/m5a-selfcheck-run.prev.log 3643 bytes sha256=dabbf7f0152ea435
logs/m5a-idempotency-run.log 10277 bytes sha256=b98766f25d914282
--- 运行结果摘要(真实 rc,逐条可回溯到上面日志正文) ---
selfcheck_m5a.py : RC=1 (12 项中 11 PASS / 1 FAIL,FAIL 项为 #11 运行证据日志门禁,详见 m5a-selfcheck-run.log)
pytest test_m5a_idempotency : RC=0 (8 passed, 1 skipped;skip 原因=无 DB,仅跑 fail-closed 路径)
m5a_live_db_harness.py : RC=0 (C-3.1~C-3.4 fail-closed 全 PASS + IDM.1~IDM.10 全 PASS,末行 LIVE DB HARNESS ALL PASS)
m5a-selfcheck-run.prev.log : 覆盖式写入前由 cp 保留的上一次基线输出(对照用,本次未改动)
# RC=0

View File

@ -28,7 +28,8 @@
10. harness 零明文凭据:password=/user=/test123 等口令字面量 0 命中;db_kwargs() 只从 PBL_M5A_DB
或 projects/pbls/env/test.json 取凭据,取不到即 raise(禁 fallback 到硬编码口令)
11. 运行证据日志:projects/pbls/docs/02-develop/ 下 m5a-live-db-harness.log / m5a-selfcheck.log /
m5a-pytest-offline.log 三份均存在且含 `# RC=0` 收尾标记;harness 日志额外含
m5a-pytest-offline.log 三份均存在且含 `# RC=0` 收尾标记,且**三份日志统一不得含
Traceback**(函数内单点判定,含即判崩溃现场非通过证据,明细按日志名区分);harness 日志额外含
`LIVE DB HARNESS ALL PASS` 与 C-3.1~C-3.4、IDM.1~IDM.9 全 [PASS] 行;
.qc_tmp/ 下的崩溃 traceback 日志不计为证据
12. harness DDL 与模型一致:DDL_PBL_EVIDENCE 解析出的列集合 ⊆ models/pbl_evidence.json fields,
@ -731,18 +732,20 @@ def check_evidence_logs():
contents[name] = text
if RC_MARKER not in text:
problems.append('%s 缺 `%s` 收尾标记(未记录退出码=无法证明 rc=0)' % (name, RC_MARKER))
if TRACEBACK_TOKEN in text and name != 'm5a-live-db-harness.log':
problems.append('%s 含崩溃 traceback,非通过证据' % name)
# 统一口径(QC #4 退回项 #3):三份日志一律不得含 traceback——崩溃现场不是
# 通过证据。旧实现循环内对 harness 日志豁免、循环外再单独判一次,同一语义
# 两处分叉(隐式双标),后续维护易漏判。现合并为循环内单点判定,明细带日志名。
if TRACEBACK_TOKEN in text:
problems.append('%s 含崩溃 traceback(未收敛的未捕获异常)' % name)
if problems:
return False, '; '.join(problems)
detail.append('三份证据日志齐备且均含 `%s`: %s' % (RC_MARKER, ', '.join(sorted(EVIDENCE_LOGS))))
detail.append('三份证据日志齐备,均含 `%s` 且无 traceback: %s'
% (RC_MARKER, ', '.join(sorted(EVIDENCE_LOGS))))
hlog = contents['m5a-live-db-harness.log']
if HARNESS_ALL_PASS_TOKEN not in hlog:
problems.append('harness 日志缺 `%s` 收尾行' % HARNESS_ALL_PASS_TOKEN)
if TRACEBACK_TOKEN in hlog:
problems.append('harness 日志含崩溃 traceback(未收敛的未捕获异常)')
missing_pass = sorted(t for t in HARNESS_CHECK_TOKENS
if not re.search(r'\[PASS\]\s*' + re.escape(t) + r'\b', hlog))
if missing_pass: