From 85baa451d08d34d699a09ae9dc7ca6270325ae83 Mon Sep 17 00:00:00 2001 From: "agent.develop" Date: Wed, 23 Sep 2026 12:46:15 +0800 Subject: [PATCH] =?UTF-8?q?docs(M11b-2d-A3b-R1):=20=E5=9B=9E=E5=A1=AB=20?= =?UTF-8?q?=C2=A77.0=20L163/L265/L621=20=E8=A1=8C=E5=8F=B7=E5=8D=A0?= =?UTF-8?q?=E4=BD=8D=E7=AC=A6=20+=20=E4=BF=AE=E6=AD=A3=20=C2=A77.0(?= =?UTF-8?q?=E4=B8=89)=2018=E5=A2=9E5=E5=88=A0=20vs=20=E9=9B=B6=E5=B7=AE?= =?UTF-8?q?=E5=BC=82=E7=9F=9B=E7=9B=BE=E5=B9=B6=E5=8A=A0=20=C2=A77.1=20?= =?UTF-8?q?=E6=8C=87=E5=90=91=E8=A1=8C=20+=20=E5=88=B7=E6=96=B0=20a3b=20?= =?UTF-8?q?=E4=B8=A4=E8=AF=81=E6=8D=AE=E4=BB=B6=EF=BC=88=C2=A78=20?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7=2014/14=20ALL=5FROWS=5FCONSISTENT?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-log-2026-09-22-m11b2d-fixture-contract.md | 25 ++++++- .../m11b2d_a3b_cmd_index_consistency.txt | 75 ++++++++++--------- .../m11b2d_a3b_single_tx_after_fix.txt | 16 ++-- 3 files changed, 68 insertions(+), 48 deletions(-) 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 da19a39..70feb90 100644 --- a/docs/work-log-2026-09-22-m11b2d-fixture-contract.md +++ b/docs/work-log-2026-09-22-m11b2d-fixture-contract.md @@ -345,7 +345,7 @@ git diff 81fdb86 -- tests/test_m11b2_single_tx.py # 仅 A1 的 3 处外观修 **(二)红态修复说明(两提交,仅测试文件,未新增/删除/重构任何用例)** - 提交 `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` + 1. `TxCase.apply`(现 L163):`"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`:旧写法 @@ -357,7 +357,7 @@ git diff 81fdb86 -- tests/test_m11b2_single_tx.py # 仅 A1 的 3 处外观修 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?), + `params[1]==4`(state_version 写回 3+1)、`params[-3:]==(TENANT, SESSION, ENTITY)`(现 L265,与上列 L260 的 `set_clause/where_clause` 拆分同属 `test_update_path_bumps_version_server_side` 的参数位校验断言块 L260–265), 与真源参数序 `(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`。 @@ -368,7 +368,7 @@ git diff 81fdb86 -- tests/test_m11b2_single_tx.py # 仅 A1 的 3 处外观修 | 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]` 均在册 | 已恢复(实为一直存活),无需再改 | +| ① vacuous 断言(`TestLatency` 逐次 results/samples 断言) | L507 / L620 `results.append(res)`、L621 `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:]` 写法 | 已恢复(实为一直存活),无需再改 | @@ -377,7 +377,20 @@ git diff 81fdb86 -- tests/test_m11b2_single_tx.py # 仅 A1 的 3 处外观修 独立提交内容**(`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 零差异。 +`git diff --numstat 91ea85c HEAD -- tests/test_m11b2_single_tx.py` 实测为 `18 5 tests/test_m11b2_single_tx.py`(同径 `git diff 91ea85c HEAD -- ` 输出 3616 字节、**非空**)。**该 18 增 / 5 删全部来自本任务 A3b 的两笔修复提交 `806a01b` + `9a794b1`**——实测 `git diff --numstat 806a01b^ 9a794b1 -- tests/test_m11b2_single_tx.py` 与上式逐字同数(同为 `18 5 …`),故 A1/A1c 引入在该文件上的内容在当前 HEAD **全量存活**,其准确判据是 `git diff --numstat 9a794b1 HEAD -- tests/test_m11b2_single_tx.py` **输出为空**(RC=0、stdout 0 字节)。 +(表述修正说明,响应 QC #12:原句把「实测 18 增/5 删」与「即零差异」写进同一句,自相矛盾——18/5 是本任务 A3b 修复提交自身的改动量,不是 A1/A1c 内容的丢失量。本轮改用「9a794b1→HEAD 为空」这一实测来表述「A1/A1c 内容全量存活」的结论,命令原样输出见下代码块。) + +``` +$ git diff --numstat 91ea85c HEAD -- tests/test_m11b2_single_tx.py +18 5 tests/test_m11b2_single_tx.py +$ git diff --numstat 806a01b^ 9a794b1 -- tests/test_m11b2_single_tx.py +18 5 tests/test_m11b2_single_tx.py +$ git diff --numstat 9a794b1 HEAD -- tests/test_m11b2_single_tx.py; echo "RC=$?" +RC=0 # ← numstat 无任何输出行,即 9a794b1 → HEAD 该文件零差异 +$ git diff 9a794b1 HEAD -- tests/test_m11b2_single_tx.py | wc -c +0 +``` +(A3b-R1 轮实跑,命令与结果原样抄自终端;测试文件自 `9a794b1` 起本轮零改动,本轮只改本文档。) **(四)验收口径**:复跑命令 `./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no` → 期望结果行 `40 passed, 8 xfailed`、`# RC=0`(RC=0 即通过判据);证据件 @@ -590,6 +603,10 @@ RC=0 **全部存活**。补注:`11aac66` 在当前 HEAD 血缘中的同信息提交是 `91ea85c`(历史被 approve 轮 重排过一次),实测 `git diff 91ea85c HEAD -- tests/test_m11b2_single_tx.py` **为空**,即 A1/A1c 在该文件上的内容与当前 HEAD 零差异。 + > 【A3b-R1 指向说明(响应 QC #12;本段为追加行,上方存档正文一字未改)】本段「`git diff 91ea85c HEAD` + > 为空」的结论(取证于 A3a 轮、早于 A3b 修复提交)**已被 §7.0(三)A3b 修复后的实测取代**:该 diff 实为 + > `18 5 …`(非空、3616 字节),18 增/5 删全部来自 A3b 修复提交 `806a01b`/`9a794b1`; + > 「A1/A1c 内容在当前 HEAD 全量存活」的准确判据改为 `git diff --numstat 9a794b1 HEAD -- …` 为空。 2. **提交 `8519443` / `18dc298` 本身对 `tests/test_m11b2_single_tx.py` 零改动**:实测 (b)(c) 的 `git show --numstat -- tests/test_m11b2_single_tx.py` 输出为空(RC=0,无 diff); (b+)(c+) 显示 `8519443` 只改了 `tests/evidence/m11b2d_a1_pytest.txt`(4/4), diff --git a/tests/evidence/m11b2d_a3b_cmd_index_consistency.txt b/tests/evidence/m11b2d_a3b_cmd_index_consistency.txt index 9701ff9..84e0db8 100644 --- a/tests/evidence/m11b2d_a3b_cmd_index_consistency.txt +++ b/tests/evidence/m11b2d_a3b_cmd_index_consistency.txt @@ -1,51 +1,52 @@ # 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:补齐上一版纸面登记的证据件本体 + 修正表格破损) +# DATE: 2026-09-23T12:40:43+0800 +# HEAD: 7fca489 +# PROVEN-TREE: 7fca489 + 本任务(M11b-2d-A3b-R1)工作树 —— 登记文档 §7.0(二)/(三)、§7.1、§8 在 R1 轮回填行号占位符与修正矛盾结论后的定稿态;测试文件 tests/test_m11b2_single_tx.py 自 9a794b1 起零改动(本任务未触碰任何测试文件/业务代码/models) +# TASK: M11b-2d-A3b-R1 文档收尾(响应 QC #11:回填三处「(现 L?)」占位符;QC #12:修正 §7.0(三)「18 增/5 删 …… 即零差异」自相矛盾表述并在 §7.1 存档段加指向行)后的 §8 全行 CMD 逐字一致性复跑核对 # 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@@ -# 占位符,已拆分为各占一行并以本件真实输出替换占位符。 +# 第一跑在本件生成前完成(核对 R1 轮文档改动后的 §8 全 14 行;因 §7.0/§7.1 追加内容,表格行号由上一版的 L668–L681 下移至 L685–L698,行号变化不影响 CMD 逐字一致性);本件落盘后以同一命令第二跑, +# 使自指行(现 L693)闭环比对(本件首行 `# CMD:` 去前缀 == §8 自指行引用)生效,第二跑输出见本文件末尾。 +# 覆盖范围:仅同名 a3b 核对件(上一轮 A3b 生成的工作件);m11b2d_a3a1b_* / m11b2d_a3_* / m11b2d_a1_* 等历史归档件一律未覆盖。 # ---------------------------------------------------------------- -===== 第一跑(本核对件生成前,§8 表格拆分修复后全 14 行逐字比对,12:24:23+08:00,RC=0) ===== +===== 第一跑(本核对件生成前,R1 轮文档回填/修正后 §8 全 14 行逐字比对,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 + L685 tests/evidence/m11b2d_a3_fixture_contract_pytest.txt 一致 + L686 tests/evidence/m11b2d_a3_fixture_contract_collect_only.txt 一致 + L687 tests/evidence/m11b2d_a3a1_fixture_contract_rerun.txt 一致 + L688 tests/evidence/m11b2d_a3a1_fixture_contract_collect_only_rerun.txt 一致 + L689 tests/evidence/m11b2d_a3a1b_cmd_index_consistency.txt 一致 + L690 tests/evidence/m11b2d_a3a_single_tx_after_revert_corrected.txt 一致 + L691 tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt 一致 + L692 tests/evidence/m11b2d_a3b_single_tx_after_fix.txt 一致 + L693 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),自指闭环比对留待生成后以同一命令第二跑完成 + L694 tests/evidence/m11b2d_a3_single_tx_after_revert.txt 一致 + L695 tests/evidence/m11b2d_a1_pytest.txt 一致 + L696 tests/evidence/m11b2d_a1_collect_only.txt 一致 + L697 tests/evidence/m11b2d_a3a_a1c_damage_forensics.txt 一致 + L698 tests/evidence/m11b2d_a3a_script_cleanup_grep.txt 一致 +统计:核对行 14,一致 14,跳过(列内无原文可核) 0,不一致 0 RESULT: ALL_ROWS_CONSISTENT -===== 第二跑(本核对件已落盘,同一命令,自指闭环生效,12:24:47+08:00,RC=0) ===== +# ----------------------------------------------------------------===== 第二跑(本件落盘后同一命令,自指闭环比对生效,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 一致 + L685 tests/evidence/m11b2d_a3_fixture_contract_pytest.txt 一致 + L686 tests/evidence/m11b2d_a3_fixture_contract_collect_only.txt 一致 + L687 tests/evidence/m11b2d_a3a1_fixture_contract_rerun.txt 一致 + L688 tests/evidence/m11b2d_a3a1_fixture_contract_collect_only_rerun.txt 一致 + L689 tests/evidence/m11b2d_a3a1b_cmd_index_consistency.txt 一致 + L690 tests/evidence/m11b2d_a3a_single_tx_after_revert_corrected.txt 一致 + L691 tests/evidence/m11b2d_a3a_single_tx_after_revert_rerun.txt 一致 + L692 tests/evidence/m11b2d_a3b_single_tx_after_fix.txt 一致 + L693 tests/evidence/m11b2d_a3b_cmd_index_consistency.txt 一致 §8 自指行 CMD 指向脚本实际路径 tests/checks/m11b2d_a3a1b_cmd_index_consistency.py;自指闭环通过:本核对件首行 `# CMD:` 去前缀后与 §8 自指行引用逐字相同 + L694 tests/evidence/m11b2d_a3_single_tx_after_revert.txt 一致 + L695 tests/evidence/m11b2d_a1_pytest.txt 一致 + L696 tests/evidence/m11b2d_a1_collect_only.txt 一致 + L697 tests/evidence/m11b2d_a3a_a1c_damage_forensics.txt 一致 + L698 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 9376c93..8f352a5 100644 --- a/tests/evidence/m11b2d_a3b_single_tx_after_fix.txt +++ b/tests/evidence/m11b2d_a3b_single_tx_after_fix.txt @@ -1,12 +1,14 @@ # CMD: cd modules/world_sync && ./.venv/bin/python -m pytest tests/test_m11b2_single_tx.py -q --tb=no -# 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 完整原样输出 +# DATE: 2026-09-23T12:41:19+0800 +# HEAD: 7fca489 +# PROVEN-TREE: 7fca489 + 本任务(M11b-2d-A3b-R1)工作树;本证据所证明的测试文件 tests/test_m11b2_single_tx.py 内容自修复提交 9a794b1 起零改动(实测 `git diff --numstat 9a794b1 HEAD -- tests/test_m11b2_single_tx.py` 输出为空、`git diff 9a794b1 HEAD -- …` 共 0 字节),R1 轮仅改登记文档,未触碰任何测试/业务代码 +# INTERPRETER: Python 3.10.12 +# TASK: M11b-2d-A3b-R1 文档收尾(响应 QC #11/#12)——复用 A3b 修复产出,本件为同名工作件在 R1 轮的复跑刷新(结果与上一版一致:40 passed, 8 xfailed, RC=0);未覆盖 m11b2d_a3_*/m11b2d_a1_*/m11b2d_a3a1b_* 等历史归档件 +# NOTE: 本文件首行 `# CMD` 与登记文档 §8 证据索引表「跑的是什么」列逐字一致(由 tests/evidence/m11b2d_a3b_cmd_index_consistency.txt 机器核对);下方为 pytest 完整原样输出 +# 配套核对(同轮实跑):tests/test_m11b2d_fixture_contract.py → 17 passed, RC=0;全目录 tests/ → 116 passed, 8 xfailed, RC=0 +# git diff --numstat 9a794b1 HEAD -- tests/test_m11b2_single_tx.py → 输出 ''(空即零差异) # ---------------------------------------------------------------- ........................................xxxxxxxx [100%] -40 passed, 8 xfailed in 0.27s +40 passed, 8 xfailed in 0.28s # ---------------------------------------------------------------- # RC=0