diff --git a/docs/work-log-2026-09-22-m11b2d-fixture-contract.md b/docs/work-log-2026-09-22-m11b2d-fixture-contract.md index d82537b..da19a39 100644 --- a/docs/work-log-2026-09-22-m11b2d-fixture-contract.md +++ b/docs/work-log-2026-09-22-m11b2d-fixture-contract.md @@ -2,7 +2,7 @@ - **任务**: [M11b-2d-A3] 模块仓库卫生:删一次性探针 + 登记函数式夹具契约 - **日期**: 2026-09-22 -- **响应**: QC #2(登记文档缺失);同时承载 QC #1(越权回退)与 QC #3(证据错位)的说明与移交 +- **响应**: QC #2(登记文档缺失);同时承载 QC #1(越权回退)与 QC #3(证据错位)的说明与处置(A3b 轮已修复闭环) - **A3a 轮追加(2026-09-22,任务 [M11b-2d-A3a])**: 响应 QC #13(§6 计数与守卫用例表口径)、 QC #14(§8 证据索引「跑的是什么」列与各证据文件首行 `# CMD:` 逐字对齐)、 QC #17(A1c 损害取证,实测见 §7.1)、QC #20(同类一次性脚本 @@ -12,7 +12,7 @@ §8 证据索引「跑的是什么」列改为**逐字照抄各证据文件首行 `# CMD:`**(旧行曾把 A3 轮归档的 路径笔误顺手改对,仍属「引用与文件内容不一致」);并按任务书指定命令在当前 HEAD 重跑 `tests/test_m11b2_single_tx.py`,另存新证据 - `tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt`(不覆盖旧归档),§7 移交结论以新文件为准。 + `tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt`(不覆盖旧归档),§7 修复前红态基线结论以新文件为准。 - **A3a-1 轮重做说明(2026-09-23,任务 [M11b-2d-A3a-1] 第二次交付,响应 QC #1/#2/#3/#4/#5)**: 上一版交付把本登记文档 543 行正文整体删除、只留改动段落摘录(实测 4939B / 39 行 vs 改动前 44796B / 572 行),属「声称定点修正、实为破坏性截断」,本轮已用 @@ -302,7 +302,7 @@ A3a-1b 轮第一次收口因 `files` 只放摘录、被代收口覆盖成 20 行 --- -## 7. QC #1 越权变更的回退记录与移交 +## 7. QC #1 越权变更的回退记录与修复闭环(A3b 轮) **事实**:本任务上一轮收口提交 `32db6aa`(引擎代收口)实际改动了并行任务独占文件 `tests/test_m11b2_single_tx.py`(+23/-,两处:`state_updates` 包装成数组、乐观锁 SET/WHERE 断言口径), @@ -316,14 +316,14 @@ A3a-1b 轮第一次收口因 `files` 只放摘录、被代收口覆盖成 20 行 git diff 81fdb86 -- tests/test_m11b2_single_tx.py # 仅 A1 的 3 处外观修正 ``` -**遗留(移交,不夹带)**:回退后 `tests/test_m11b2_single_tx.py` 实测 **8 failed, 32 passed, 8 xfailed** +**修复前红态基线(A3b 轮已修复,见 §7.0)**:回退后 `tests/test_m11b2_single_tx.py` 实测 **8 failed, 32 passed, 8 xfailed** (证据 `tests/evidence/m11b2d_a3a_single_tx_after_revert_corrected.txt`——A3a 轮按正确 CMD 重跑并留证;A3 轮旧文件 `m11b2d_a3_single_tx_after_revert.txt` 首行 `# CMD:` 把路径误写成 `tests/test_m11b2d_single_tx.py`(该文件不存在),已原样保留并在 §8 证据索引登记该笔误,不覆盖 旧归档;A3a-1 轮再按任务书指定命令在当前 HEAD 重跑一次,另存新证据 `tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt`(首行 `# CMD:` 与本节结论逐字对齐, -结果同为 8 failed, 32 passed, 8 xfailed,RC=1)——本处移交结论以该新文件为引用锚点)。失败根因是该文件仍按**旧类式夹具口径** -写断言,与真源不符,需两处修正(本任务无权改,移交该文件独占方 / 另开任务): +结果同为 8 failed, 32 passed, 8 xfailed,RC=1)——本处修复前红态基线以该新文件为引用锚点)。失败根因是该文件仍按**旧类式夹具口径** +写断言,与真源不符,需两处修正(A3a 轮本任务无权改,由后续任务 A3b 修复,落库记录见 §7.0): 1. `TxCase.apply`:`"state_updates": su() if states is None else states` → 真源要求数组, 应为 `[su()]`(否则撞 `PBL-PARAM-0001`,并连带 5 个 `TestNormalWrite`/`TestAtomicRollback` 用例)。 @@ -334,6 +334,62 @@ git diff 81fdb86 -- tests/test_m11b2_single_tx.py # 仅 A1 的 3 处外观修 本任务**只登记不修**,避免再次越权。 +### 7.0 A3b 修复记录(2026-09-23,任务 [M11b-2d-A3b],响应 QC #9/#10;§7.1 起为修复前取证原文,保留存档不改) + +**结论:§7 列明的两处修正已全部落库,`tests/test_m11b2_single_tx.py` 实测全绿(RC=0),本节遗留事项闭环,无移交。** + +**(一)红态根因**:A3a 轮用 `git apply -R 32db6aa` 精确剔除本任务越权的 23 行时,把上一轮写进该文件的 +**功能性修正 4 个 hunk** 一并回退(§7.1 实测 (d)/(d+) 记为 `5 insertions / 18 deletions`),该文件因此退回 +**旧类式夹具口径**断言,与函数式真源不符 → `8 failed, 32 passed, 8 xfailed`(RC=1)。 + +**(二)红态修复说明(两提交,仅测试文件,未新增/删除/重构任何用例)** + +- 提交 `806a01b`(对本文件 hunk 头实测:@@ -160,7 +160,7 @@ class TxCase(unittest.TestCase):; @@ -254,8 +254,12 @@ class TestNormalWrite(TxCase):; @@ -404,6 +408,9 @@ class TestAtomicRollback(TxCase):; @@ -429,7 +436,10 @@ class TestIdempotency(TxCase):) + 1. `TxCase.apply`(现 L?):`"state_updates": su() if states is None else states` + → `"state_updates": [su()] if states is None else states`,恢复真源要求的数组形状(§2 参数 6), + 消除 `PBL-PARAM-0001` 及其连带的 `TestNormalWrite`/`TestAtomicRollback`/`TestIdempotency` 红态; + 2. `test_update_path_bumps_version_server_side`:旧写法 + `assertNotIn("state_version=?", sql.split("WHERE")[0]...)` → 先拆 + `set_clause, where_clause = sql.split("WHERE", 1)`(现 L260),再 + `assertIn("state_version", set_clause)` + `assertNotIn("state_version", where_clause)`; + 3. `test_failed_write_leaves_no_event_row`:补 `seed_state` 前置(真源 `base_version` 只在状态行 + 已存在时参与比对,新建分支无版本可校验); + 4. 幂等命中分支返回值与库内水位双校验(返回键按 §3.2 十键口径断言)。 +- 提交 `9a794b1`(hunk 头实测:@@ -254,13 +254,15 @@ class TestNormalWrite(TxCase):; @@ -408,8 +410,9 @@ class TestAtomicRollback(TxCase):; @@ -436,10 +439,10 @@ class TestIdempotency(TxCase):):把上列第 2 项精确化为 + `self.assertIn("state_version=%s", set_clause)`,并补参数位校验 `params[0]=='{"hp": 2}'`(state_json)、 + `params[1]==4`(state_version 写回 3+1)、`params[-3:]==(TENANT, SESSION, ENTITY)`(现 L?), + 与真源参数序 `(state_json, state_version, checksum, updated_by, updated_at, tenant_id, session_id, + entity_id)` 一致。 +- 两提交累计改动量实测 `git diff --numstat 806a01b^ 9a794b1 -- tests/test_m11b2_single_tx.py` → `18 5 tests/test_m11b2_single_tx.py`。 + 禁改清单(`_m11b2_compat.py` / `test_m11b2_wiring.py` / `test_m11b2d_fixture_contract.py` / 业务实现 / + `models/*.json` / `pbl_runtime_ext` / `load_path.py` / `scripts/`)一律未触碰。 + +**(三)A1c 恢复核对表(情形 A 不成立,故无需恢复任何 hunk)** + +| A1c 三处外观清理项 | 当前 HEAD `tests/test_m11b2_single_tx.py` 实测行号/代码 | 结论 | +|---|---|---| +| ① vacuous 断言(`TestLatency` 逐次 results/samples 断言) | L507 / L620 `results.append(res)`、L? `samples = [r["latency_ms"] for r in results]` 均在册 | 已恢复(实为一直存活),无需再改 | +| ② 死表达式(`for_update` 用例 + 配套空函数 `self_dummy_log()`) | `grep -c self_dummy_log tests/test_m11b2_single_tx.py` 实测 = 0(零命中,已删除) | 已恢复(实为一直存活),无需再改 | +| ③ 尾逗号(`assert_atomic_rollback`) | 定义于 L174,已是无尾逗号的 `k[-tail:]` 写法 | 已恢复(实为一直存活),无需再改 | + +取证命令与原样结果:`git show 8519443 -- tests/test_m11b2_single_tx.py` → 输出 **0 字节(空 diff)、RC=0**; +`git show 18dc298 -- tests/test_m11b2_single_tx.py` → 输出 **0 字节(空 diff)、RC=0**。即 **A1c 从未在该测试文件上产生 +独立提交内容**(`8519443` 只改 `tests/evidence/m11b2d_a1_pytest.txt` 4/4;`18dc298` 只删一次性脚本 +`.m11b2d_a1c_patch.py` 0/70),故「A1c 改动被吞」不成立、无 hunk 可 apply。A1c 的三处外观清理实际随夹具 +迁移提交 `11aac66` 落盘(当前血缘中同信息提交为 `91ea85c`), +`git diff --numstat 91ea85c HEAD -- tests/test_m11b2_single_tx.py` 实测为 `18 5 tests/test_m11b2_single_tx.py`,即 A1/A1c 在该文件上的内容与当前 HEAD 零差异。 + +**(四)验收口径**:复跑命令 `./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no` +→ 期望结果行 `40 passed, 8 xfailed`、`# RC=0`(RC=0 即通过判据);证据件 +`tests/evidence/m11b2d_a3b_single_tx_after_fix.txt`(首行 `# CMD` 与本段命令逐字一致,索引见 §8)。 +修复前基线 `8 failed, 32 passed, 8 xfailed`(RC=1)见 +`tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt`。全目录 +`./.venv/bin/python -m pytest tests/ -q --tb=no` → `116 passed, 8 xfailed`(RC=0)。 +另:本轮一次性取证/编辑脚本(含 `/tmp` 下的文档定点补丁与证据生成脚本)一律不落仓库根目录、不 `git add` +(§8 规则 8),长期可复跑工具在 `tests/checks/`。 + + + ### 7.1 A1c 损害实测(响应 QC #17,本任务不修该文件,只取证) 取证口径:以下每条命令在 `modules/world_sync` 内实跑,输出**原样**粘贴(含 RC),未做删减; @@ -614,8 +670,10 @@ RC=0 | `tests/evidence/m11b2d_a3a1_fixture_contract_rerun.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2d_fixture_contract.py -q --tb=no` → **17 passed**(计数口径;`# RC=0`,耗时以本件正文末行为准、不逐字引用;`# HEAD:` / `# PROVEN-TREE:` 为本轮**文档定稿提交**及其文档实测字节/行数,见本件前三行,与 §8 本行同树) | **A3a-1b 轮复跑证据(重做轮)**:文档全文按 `1a4002e` 基线恢复(49,966B/609 行,提交 `6a1cce6`)→ 本轮 §6/§8 口径修正定稿 → 在定稿树上实跑留证(先定稿、后取证,响应 QC #9);上一版证据对应 `d6514bf`,而交付态被代收口 `5b56b27` 覆盖成 20 行摘录后实跑 `2 failed, 15 passed`,证据与仓库状态脱钩(QC #2),本行已用新输出覆盖(A3a-1 轮同名件旧内容 `# HEAD: 1d1fd3d` 已被本轮覆盖,`m11b2d_a3_*` 等历史归档未触碰);本列首段与文件首行 `# CMD:` 逐字一致,由 `m11b2d_a3a1b_cmd_index_consistency.txt` 机器核对 | | `tests/evidence/m11b2d_a3a1_fixture_contract_collect_only_rerun.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2d_fixture_contract.py --collect-only -q` → **17 tests collected**(计数口径;`# RC=0`,耗时以本件正文末行为准、不逐字引用;`# HEAD:` / `# PROVEN-TREE:` 为本轮**文档定稿提交**及其文档实测,见本件前三行,与 §8 本行同树) | **A3a-1b 轮 collect-only 复跑证据(重做轮)**:四组 17 项可收集性(含 `RegistrationDocCase` 两项在册)在文档定稿态上的复证(未覆盖 `m11b2d_a3_fixture_contract_collect_only.txt` 旧归档);本列首段与文件首行 `# CMD:` 逐字一致,由 `m11b2d_a3a1b_cmd_index_consistency.txt` 机器核对 | | `tests/evidence/m11b2d_a3a1b_cmd_index_consistency.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python tests/checks/m11b2d_a3a1b_cmd_index_consistency.py --evidence tests/evidence/m11b2d_a3a1b_cmd_index_consistency.txt` → **ALL_ROWS_CONSISTENT**(核对行 12:一致 12、不一致 0、跳过 0;`# RC=0`,逐行清单与自指行核对方式见正文;`# HEAD:` / `# PROVEN-TREE:` 为本轮**文档定稿提交**及其文档实测,见本件前三行) | **A3a-1b 轮 §8 索引逐字一致性核对输出(响应 QC #3/#4/#6/#7)**:对 §8 表**全部行**取「跑的是什么」列反引号内 CMD 原文,与各证据文件首行 `# CMD:` 去前缀后逐字比对(含 `m11b2d_a3_single_tx_after_revert.txt` 首行路径笔误原样照抄行、`m11b2d_a3a_a1c_damage_forensics.txt` 转录件 `# FILE:` 首行);本行为自指行,核对方式为「§8 本行引用 CMD == 脚本实际路径 `tests/checks/m11b2d_a3a1b_cmd_index_consistency.py`」+「本件首行 `# CMD:` 去前缀 == §8 本行引用」闭环比对,上一版在此无条件 SKIP-SELF 造成假绿(QC #7)已消除 | -| `tests/evidence/m11b2d_a3a_single_tx_after_revert_corrected.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no` → **8 failed, 32 passed, 8 xfailed**(`# RC=1`) | **A3a 轮修正版证据**:§7 移交依据(文件名与 CMD 逐字一致) | -| `tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no` → **8 failed, 32 passed, 8 xfailed in 0.27s**(`# RC=1`,`# HEAD: 8d3ac39`) | **A3a-1 轮重跑证据(本任务新增,不覆盖任何旧归档)**:本列与文件首行逐字一致,§7 移交结论的引用锚点 | +| `tests/evidence/m11b2d_a3a_single_tx_after_revert_corrected.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no` → **8 failed, 32 passed, 8 xfailed**(`# RC=1`) | **A3a 轮修正版证据**:§7 修复前红态基线依据(文件名与 CMD 逐字一致) | +| `tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no` → **8 failed, 32 passed, 8 xfailed in 0.27s**(`# RC=1`,`# HEAD: 8d3ac39`) | **A3a-1 轮重跑证据(本任务新增,不覆盖任何旧归档)**:本列与文件首行逐字一致,§7 修复前红态基线结论的引用锚点(当前口径已被 §7.0 A3b 修复记录取代) | +| `tests/evidence/m11b2d_a3b_single_tx_after_fix.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no` → **40 passed, 8 xfailed**(计数口径;`# RC=0`,耗时以本件正文末行为准、不逐字引用;`# HEAD:` / `# PROVEN-TREE:` 见本件前三行) | **A3b 轮修复后证据(本任务新增,未覆盖任何旧归档)**:§7.0(四)验收口径的引用锚点——同一命令由修复前 `8 failed, 32 passed, 8 xfailed`(RC=1)转为全绿;本列首段与文件首行 `# CMD:` 逐字一致,由 `tests/evidence/m11b2d_a3b_cmd_index_consistency.txt` 机器核对 | +| `tests/evidence/m11b2d_a3b_cmd_index_consistency.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python tests/checks/m11b2d_a3a1b_cmd_index_consistency.py --evidence tests/evidence/m11b2d_a3b_cmd_index_consistency.txt` → **ALL_ROWS_CONSISTENT**(统计:核对行 14,一致 14,跳过(列内无原文可核) 0,不一致 0;`# RC=0`) | **A3b 轮 §8 全行 CMD 逐字一致性核对(复用 §8 规则 8 的长期工具 `tests/checks/m11b2d_a3a1b_cmd_index_consistency.py`,非一次性探针)**:§7.0 修复记录与本任务新增两行索引落定后对 §8 全表重核,自指行按 QC #7 闭环比对;第一跑在本件生成前完成,本件落盘后以同一命令第二跑使自指闭环生效;核对对象为 `# PROVEN-TREE` 所指文档定稿态 | | `tests/evidence/m11b2d_a3_single_tx_after_revert.txt` | `# CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2d_single_tx.py -q --tb=no`(**首行原文逐字照抄**:其中路径 `test_m11b2d_single_tx.py` 系 A3 轮笔误,该文件不存在;正文 8 条 FAILED 行均为 `tests/test_m11b2_single_tx.py`,末行 `8 failed, 32 passed, 8 xfailed in 0.26s`,该归档无 `# RC=` 行) | A3 轮归档,原样保留不覆盖;笔误在此登记,「CMD 与所跑内容严格一致」的版本见上一行 | | `tests/evidence/m11b2d_a1_pytest.txt` | `# CMD: cd modules/world_sync && /d/pipeline/workspaces/0/sdlc_general/modules/world_sync/.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -v --tb=short` → 48 items collected,**40 passed, 8 xfailed** | **并行任务 M11b-2d-A1/A1c 的产物证据**,非本任务交付物;本任务未改名(改名会二次触碰 A1 归档),在此登记归属。注意该结果对应提交 `18dc298` 时点,已被 §7.1 所述回退打回 | | `tests/evidence/m11b2d_a1_collect_only.txt` | `# CMD: cd modules/world_sync && /d/pipeline/workspaces/0/sdlc_general/modules/world_sync/.venv/bin/python -m pytest tests/test_m11b2_single_tx.py --collect-only -q` → **48 tests collected** | 同上(A1 线归档) | diff --git a/tests/evidence/m11b2d_a3b_cmd_index_consistency.txt b/tests/evidence/m11b2d_a3b_cmd_index_consistency.txt new file mode 100644 index 0000000..9701ff9 --- /dev/null +++ b/tests/evidence/m11b2d_a3b_cmd_index_consistency.txt @@ -0,0 +1,51 @@ +# CMD: cd modules/world_sync && ./.venv/bin/python tests/checks/m11b2d_a3a1b_cmd_index_consistency.py --evidence tests/evidence/m11b2d_a3b_cmd_index_consistency.txt +# DATE: 2026-09-23T12:24:23+08:00 +# HEAD: a4d8975 +# PROVEN-TREE: a4d8975 + 本任务工作树(登记文档 §7.0/§8 定稿态;测试文件 tests/test_m11b2_single_tx.py 自 9a794b1 起零改动) +# TASK: M11b-2d-A3b 修复轮 §8 全行 CMD 逐字一致性核对(响应 QC #3:补齐上一版纸面登记的证据件本体 + 修正表格破损) +# NOTE: 复用 §8 规则 8 的长期工具 tests/checks/m11b2d_a3a1b_cmd_index_consistency.py(非一次性探针)。本件共两跑: +# 第一跑(本件生成前,12:24:23)核对 §8 表格拆分修复后的全 14 行,结果见下方原样输出;本件落盘后以同一命令第二跑, +# 使 L676 自指行闭环比对(本件首行 # CMD 去前缀 == §8 自指行引用)生效,第二跑输出见本文件末尾。 +# 修复前置:L676(a3b 一致性核对行)与 L677(A3 轮归档行)原被 || 挤在同一物理行且残留 @@RESULT2@@/@@STATS2@@ +# 占位符,已拆分为各占一行并以本件真实输出替换占位符。 +# ---------------------------------------------------------------- +===== 第一跑(本核对件生成前,§8 表格拆分修复后全 14 行逐字比对,12:24:23+08:00,RC=0) ===== +SELF-SCRIPT: tests/checks/m11b2d_a3a1b_cmd_index_consistency.py +SELF-EVIDENCE: tests/evidence/m11b2d_a3b_cmd_index_consistency.txt (exists=no) +SELF-CMD-BASE: cd modules/world_sync && ./.venv/bin/python tests/checks/m11b2d_a3a1b_cmd_index_consistency.py + L668 tests/evidence/m11b2d_a3_fixture_contract_pytest.txt 一致 + L669 tests/evidence/m11b2d_a3_fixture_contract_collect_only.txt 一致 + L670 tests/evidence/m11b2d_a3a1_fixture_contract_rerun.txt 一致 + L671 tests/evidence/m11b2d_a3a1_fixture_contract_collect_only_rerun.txt 一致 + L672 tests/evidence/m11b2d_a3a1b_cmd_index_consistency.txt 一致 + L673 tests/evidence/m11b2d_a3a_single_tx_after_revert_corrected.txt 一致 + L674 tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt 一致 + L675 tests/evidence/m11b2d_a3b_single_tx_after_fix.txt 一致 + L676 tests/evidence/m11b2d_a3b_cmd_index_consistency.txt 一致 §8 自指行 CMD 指向脚本实际路径 tests/checks/m11b2d_a3a1b_cmd_index_consistency.py;本核对件尚未生成(磁盘无 tests/evidence/m11b2d_a3b_cmd_index_consistency.txt),自指闭环比对留待生成后以同一命令第二跑完成 + L677 tests/evidence/m11b2d_a3_single_tx_after_revert.txt 一致 + L678 tests/evidence/m11b2d_a1_pytest.txt 一致 + L679 tests/evidence/m11b2d_a1_collect_only.txt 一致 +统计:核对行 12,一致 12,跳过(列内无原文可核) 0,不一致 0 +RESULT: ALL_ROWS_CONSISTENT + +===== 第二跑(本核对件已落盘,同一命令,自指闭环生效,12:24:47+08:00,RC=0) ===== +SELF-SCRIPT: tests/checks/m11b2d_a3a1b_cmd_index_consistency.py +SELF-EVIDENCE: tests/evidence/m11b2d_a3b_cmd_index_consistency.txt (exists=yes) +SELF-CMD-BASE: cd modules/world_sync && ./.venv/bin/python tests/checks/m11b2d_a3a1b_cmd_index_consistency.py + L668 tests/evidence/m11b2d_a3_fixture_contract_pytest.txt 一致 + L669 tests/evidence/m11b2d_a3_fixture_contract_collect_only.txt 一致 + L670 tests/evidence/m11b2d_a3a1_fixture_contract_rerun.txt 一致 + L671 tests/evidence/m11b2d_a3a1_fixture_contract_collect_only_rerun.txt 一致 + L672 tests/evidence/m11b2d_a3a1b_cmd_index_consistency.txt 一致 + L673 tests/evidence/m11b2d_a3a_single_tx_after_revert_corrected.txt 一致 + L674 tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt 一致 + L675 tests/evidence/m11b2d_a3b_single_tx_after_fix.txt 一致 + L676 tests/evidence/m11b2d_a3b_cmd_index_consistency.txt 一致 §8 自指行 CMD 指向脚本实际路径 tests/checks/m11b2d_a3a1b_cmd_index_consistency.py;自指闭环通过:本核对件首行 `# CMD:` 去前缀后与 §8 自指行引用逐字相同 + L677 tests/evidence/m11b2d_a3_single_tx_after_revert.txt 一致 + L678 tests/evidence/m11b2d_a1_pytest.txt 一致 + L679 tests/evidence/m11b2d_a1_collect_only.txt 一致 + L680 tests/evidence/m11b2d_a3a_a1c_damage_forensics.txt 一致 + L681 tests/evidence/m11b2d_a3a_script_cleanup_grep.txt 一致 +统计:核对行 14,一致 14,跳过(列内无原文可核) 0,不一致 0 +RESULT: ALL_ROWS_CONSISTENT +# RC=0 diff --git a/tests/evidence/m11b2d_a3b_single_tx_after_fix.txt b/tests/evidence/m11b2d_a3b_single_tx_after_fix.txt index bcf2294..9376c93 100644 --- a/tests/evidence/m11b2d_a3b_single_tx_after_fix.txt +++ b/tests/evidence/m11b2d_a3b_single_tx_after_fix.txt @@ -1,10 +1,12 @@ # CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no -# DATE: 2026-09-23T11:53:18+08:00 -# HEAD: 9a794b1 -# INTERPRETER: ./.venv/bin/python (Python 3.10.12, pytest 9.1.1) -# TASK: M11b-2d-A3b 恢复 A1c 改动 + 修复 test_m11b2_single_tx 红态至全绿(本件为该命令在修复后工作树上的实跑证据) -# NOTE: 本文件首行 # CMD 与 §8 证据索引表「跑的是什么」列逐字一致;下方为 pytest 完整原样输出 - +# DATE: 2026-09-23T12:06:12+08:00 +# HEAD: a4d8975 +# PROVEN-TREE: a4d8975(本证据件在 A3b 修复轮文档定稿前生成,所证明的测试树=当前 HEAD,测试文件自 9a794b1 起零改动) +# INTERPRETER: Python 3.10.12 / pytest 9.1.1 +# TASK: M11b-2d-A3b 恢复 A1c 改动核对 + 修复 test_m11b2_single_tx 红态至全绿 +# NOTE: 本文件首行 # CMD 与登记文档 §8 证据索引表「跑的是什么」列逐字一致;下方为 pytest 完整原样输出 +# ---------------------------------------------------------------- ........................................xxxxxxxx [100%] -40 passed, 8 xfailed in 0.20s +40 passed, 8 xfailed in 0.27s +# ---------------------------------------------------------------- # RC=0