@furongjun1999/dsh-memory 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +223 -0
- package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.1.md +340 -0
- package/docs/eval/issue50_/345/205/203/346/225/260/346/215/256/351/200/217/344/274/240/344/270/216/345/205/234/345/272/225_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +437 -0
- package/docs/eval/issue50_/345/215/212/351/207/215/345/244/215/345/276/205/345/256/232/345/244/215/346/240/270_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +488 -0
- package/docs/eval/issue50_/345/276/205/345/256/232/345/244/215/346/240/270/345/205/245/351/230/237_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +428 -0
- package/docs/eval/issue50_/350/257/273/351/235/242/344/277/235/346/212/244/345/217/252/350/256/244/346/230/276/345/274/217/346/235/245/346/272/220_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +271 -0
- package/docs/eval/issue50_/351/207/215/350/246/201/345/272/246/345/220/214/346/272/220/344/270/216/344/277/235/346/212/244/350/257/255/344/271/211_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +306 -0
- package/docs/eval/issue51_/344/270/200/351/224/256/345/256/211/350/243/205/345/244/261/350/264/245_/345/275/222/345/261/236/345/210/244/345/256/232_v1.0.md +58 -0
- package/docs/eval/issue52_/346/235/241/344/273/266/345/205/210/350/241/214/344/270/216/346/210/252/346/226/255/345/217/257/350/247/202/346/265/213_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +360 -0
- package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/241/346/241/243/344/275/215/345/215/225/344/270/200/345/205/245/345/217/243_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +651 -0
- package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/242/345/217/230/346/233/264/345/215/225/344/270/216/345/233/236/346/273/232/345/216/237/350/257/255_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +439 -0
- package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/243/345/207/206/345/205/245/350/257/273/346/225/260_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +1337 -0
- package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/244/346/224/266/345/256/230/344/270/216/345/205/250/351/223/276/351/252/214/346/224/266_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +1817 -0
- package/docs/eval//345/217/221/345/270/20309_/346/243/200/347/264/242/351/235/242/344/270/211/346/211/271/346/224/266/345/217/243_v1.0.md +66 -0
- package/docs/eval//347/254/2543/345/261/202stg/347/273/223/346/236/204/347/264/242/345/274/225_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +250 -0
- package/docs/mdcg//345/212/237/350/203/275/350/260/203/347/224/250/346/230/240/345/260/204/350/241/250_v0.1.md +25 -25
- package/docs/plans/stg/346/235/241/344/273/266/345/214/226/344/270/216/347/273/223/346/236/204/347/264/242/345/274/225_/350/256/276/350/256/241_v0.1.md +124 -0
- package/docs/plans//350/256/260/345/277/206/350/207/252/345/244/204/347/220/206/344/270/211/346/241/243/350/207/252/346/262/273_/350/256/276/350/256/241_v0.2.md +207 -0
- package/md_cg/admission.py +718 -0
- package/md_cg/autonomy_modes.py +642 -0
- package/md_cg/consistency.py +133 -8
- package/md_cg/forgetting.py +38 -6
- package/md_cg/freshness.py +17 -1
- package/md_cg/lifecycle.py +30 -2
- package/md_cg/mcp_server.py +63 -7
- package/md_cg/mdcg.py +85 -17
- package/md_cg/mdcos.py +666 -16
- package/md_cg/protect.py +79 -4
- package/md_cg/provenance.py +1 -1
- package/md_cg/review_cli.py +31 -2
- package/md_cg/rollback.py +411 -0
- package/md_cg/rollback_cli.py +104 -0
- package/md_cg/stg.py +400 -50
- package/md_cg/stgidx.py +281 -0
- package/md_cg/test_autonomy_admission.py +1098 -0
- package/md_cg/test_autonomy_modes.py +1972 -0
- package/md_cg/test_b1_auto_id_multiproc.py +7 -0
- package/md_cg/test_b1b2_write_face.py +7 -0
- package/md_cg/test_b3_merge_keeps_content.py +7 -0
- package/md_cg/test_cons200_scan_selection.py +791 -0
- package/md_cg/test_i50a_half_dup_defer.py +408 -0
- package/md_cg/test_i50b_defer_to_review_queue.py +545 -0
- package/md_cg/test_i50c_meta_passthrough.py +608 -0
- package/md_cg/test_i50d_importance_source.py +531 -0
- package/md_cg/test_i50e_readside_protection.py +656 -0
- package/md_cg/test_issue39_utf8_stdio.py +9 -1
- package/md_cg/test_issue52_scan_condition_first.py +677 -0
- package/md_cg/test_linkref.py +7 -0
- package/md_cg/test_mode_parity.py +1393 -0
- package/md_cg/test_mutation_rollback.py +805 -0
- package/md_cg/test_n204_n205_n226_n227_n228_n229_exit_gates.py +1 -1
- package/md_cg/test_n214_n215_n221_n222_write_face_gates.py +7 -0
- package/md_cg/test_p2_mcp.py +8 -0
- package/md_cg/test_p9_forget_protect.py +7 -0
- package/md_cg/test_p9c_dedup_hints.py +7 -0
- package/md_cg/test_policy_required_ccg.py +5 -1
- package/md_cg/test_protocol.py +7 -0
- package/md_cg/test_stgidx_index_parity.py +1020 -0
- package/md_cg/test_writelimit.py +36 -9
- package/md_cg/test_writepipe.py +5 -2
- package/md_cg/weights.py +15 -1
- package/md_cg/writepipe.py +101 -2
- package/package.json +1 -1
- package/skills/plugin.json +1 -1
|
@@ -0,0 +1,1817 @@
|
|
|
1
|
+
# 三档自治 · 步骤⑤「收官与全链验收」——落码记录 v1.0
|
|
2
|
+
|
|
3
|
+
> **批次定位**:设计真源 `docs/plans/记忆自处理三档自治_设计_v0.2.md`(已签收冻结)§十一(验收判据)
|
|
4
|
+
> + §十三.5(收官步)在本批的落点。建立在**已提交**的步骤④(`ae519a24`)之上。
|
|
5
|
+
> **本批性质**:**零生产码改动**——只加/改守卫与文档(这正是「不动面对拍」全 SAME 的前提:
|
|
6
|
+
> 工作树与改动前基线在 A/E 全线 + full 档全线逐位一致,见 §四)。
|
|
7
|
+
> **本版说明(v1.1 修订轮)**:本报告吸收独立复核的 DEFER 判定与其 uncovered(§七),把复核发现的
|
|
8
|
+
> 未覆盖面(非 gated 直写面 plan×C,`mcp_server.py:3373`)**登记入池**(§八.1 第 12 条);
|
|
9
|
+
> 并按第一轮读者反馈逐条修订(unclear 6 条 + unsupported 10 条 + 问询 7 条——处置与落点见 §十一),
|
|
10
|
+
> 其中 headline 级更正两处:`test_mode_parity --mutate` 的「24 处全部命中预期」口径(§6.2/§6.5)、
|
|
11
|
+
> 「7 腿」→「8 条复现腿」(§二)。
|
|
12
|
+
> **本版说明(v1.2 补强批次,2026-10-03)**:复核 DEFER 的三件解除/收口项——**U1**(非 gated 直写面
|
|
13
|
+
> 档位闸行为断言)、**U2**(R 组「空池静默判绿」语义收口)、**E 面档位接线**——**已实施**
|
|
14
|
+
> (改**生产码 4 个文件**:`autonomy_modes.py` / `freshness.py` / `weights.py` / `lifecycle.py`;
|
|
15
|
+
> 守卫 2 个文件);本节为**追加记录**(§十二),§八.1 第 12/14 条**就地销项**、
|
|
16
|
+
> 第 3 条**状态更正**。**纠正**:本报告 v1.1 的「零生产码改动」声明**只适用于步骤⑤批次**;
|
|
17
|
+
> 补强批次的生产码改动清单、位置与「生效条件:」注释见 §12.4/§附A(v1.2 追加段)。
|
|
18
|
+
> **v1.2 复核轮(2026-10-03)**:独立复核判 **DEFER**——三件功能面/断言面复现全部成立;
|
|
19
|
+
> F1(变异表③条被删、「24 处」声称与产物不符)已就地更正(§6.2/§12.7/附B),全链数字与
|
|
20
|
+
> 复核读数见 **§十三**。
|
|
21
|
+
> **v1.2 后修订轮(2026-10-03)**:读者反馈 unclear 7/unsupported 3 的处置与问答见 **§十四**;
|
|
22
|
+
> 读数辨析(U1 三形态/U2 两形态/对拍四套)见 **§13.7**。
|
|
23
|
+
> **F1 收口轮(2026-10-03)**:③ 条**已恢复**并实测校准(红 63);新增**变异表完整性自检**
|
|
24
|
+
> (缺项 ⇒ fail-closed exit 2、报缺口编号)——F1 的「无自动核验载体」缺口收口、§8.1 第 18 条
|
|
25
|
+
> **销项**;详见 **§十五**(事实链、恢复记录、自检机制、重跑读数)+ **§十六**(验收侧:修前五腿/独立复核判 **ACCEPT**/全链收官读数)。
|
|
26
|
+
>
|
|
27
|
+
> **当前有效读数(F1 收口轮后 · 单一入口,2026-10-03)**:
|
|
28
|
+
> - 守卫:`test_autonomy_modes` **177 通过 / 0 失败**、`test_mode_parity` **63 通过 / 0 失败**(各 rc=0;合计 **240** 断言);
|
|
29
|
+
> - 定点变异:`test_autonomy_modes` **24 处实存**逐处命中(含③红 63)+ 防误删自检**判别力钉** 1 条(红 3)、`test_mode_parity` **8 处**逐处命中 + 判别力钉 1 条(红 3)(**两文件合计 32 处+表外钉 2**;各 rc=0;编号↔形态对照见 §12.7/§十五);
|
|
30
|
+
> - 定向回归 `run_tests.py md_cg`:**231/231 通过、3 跳过**(13 次实跑 11 绿、2 次 230/231——1 次捕获项名为 `test_p27_docindex`〔非本批两守卫;单跑 98/0;未定位、不猜〕,如实登记见 §十五.5);
|
|
31
|
+
> - python 全量 `run_tests.py`:**308/308 通过、5 跳过、rc=0**;容器两栈 **rc=0 / rc=0**〔二者=工作流采集·收官脚本实跑,§13.4〕;
|
|
32
|
+
> - **历史口径对照(不回填)**:守卫 159/56〔§6.1·步骤⑤〕→ **173/59**〔§12.7·v1.2〕→ **177/63**〔§十五·F1 收口轮〕;**变异表(按文件单列)**:am **17 处**〔§6.2·步骤⑤——该节「合计 24 处」为 am 17+mp 7 两文件合计口径〕→ **23 处实存**〔§12.7·v1.2,③条被删——F1〕→ **24 处(③已恢复)**〔§十五〕;mp **7 处**〔§6.2·步骤⑤〕→ **8 处**〔§12.7·v1.2〕(**两文件合计 24→31→32**)。**裁定:当前树以 §十五/§十六 为准**;§一–§十四 的旧数字均属对应批次的快照。
|
|
33
|
+
>
|
|
34
|
+
> **行号口径(跨轮漂移说明)**:§一–§十一 的生产码行号为 **HEAD(`ae519a24`)树读码**(步骤⑤批次零生产码改动,当时准确);v1.2 改 4 个生产码文件后行号下移——`autonomy_modes.py` `MATRIX` `:138-145` → **`:156-163`**、`decide` `:317` → **`:335-385`**(E 面经 `PLAN_STEP` 折算分支 `:361-376`)。U2 相关行号:收口前 `:763`/`:804`(复核轮)→ 收口后 **`:769`**/**`:811`** 等(§13.1 表双列)。`freshness.recalc` 的 `:302` 为**函数 def 行**(两树相同)、`:358`/`:364-368` 为**闸落点行**——同函数不同对象,非漂移。**同一对象两套行号时,以 §十二/§十三/§十五/§十六(现行树)为准**——补注(2026-10-03 修订):§十六 前言声明「F1 收口轮改动后行号已整体上移、不回填」(§16.2 实例:变异表体 §13 口径 `:1418-1644`〔修前〕→ 现行 `:1464-1696`),其内标〔修前口径〕者按该说明读、未标者=现行树读码;§十五 落点行号同为现行树。
|
|
35
|
+
> **关联**:步骤②`0960392e`(档位单一入口)· 步骤③`fd5b94ea`(变更单三字段+回滚原语)
|
|
36
|
+
> · 步骤④`ae519a24`(准入读数与准入闸)· 步骤①`04fc8a11`(issue #50 前置,含 `a33682eb`/`d5a6a511` 收口)。
|
|
37
|
+
> **红线**:不动任何在役数据根(全部实验在 `tempfile.mkdtemp` 合成库;oracle 导出树亦在系统临时区)
|
|
38
|
+
> · 不改 `data/policy.json` · 不削弱任何 `forbidden`
|
|
39
|
+
> · 不 `git add/commit/push` · 不实施生产接线(只读评估,见 §8.2)。
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 一、缺陷定义与真实站点(行号=本报告读码所见)
|
|
44
|
+
|
|
45
|
+
### 1.1 缺陷定义(本批要修什么)
|
|
46
|
+
|
|
47
|
+
设计 §十一 验收第一条:「每档一只守卫 + **定点变异自证**(注入『档位不生效』必红)」。
|
|
48
|
+
修前(步骤④提交 `ae519a24` 树)逐分组清点,存在**两类缺口**与**一类登记项**:
|
|
49
|
+
|
|
50
|
+
**缺口 A · plan 档热路径的守卫盲区(本批修复面)**。三档矩阵(`autonomy_modes.MATRIX`,
|
|
51
|
+
`md_cg/autonomy_modes.py:138-145`)规定 plan 档 C/D=「需确认」、A/B/E=「计划外 forbid」;
|
|
52
|
+
但**既有三套守卫**(`test_autonomy_modes` / `test_mutation_rollback` / `test_autonomy_admission`,
|
|
53
|
+
修前 149/59/64 条;第四套 `test_mode_parity` 是本批新增,修前尚不存在)对 plan 档在
|
|
54
|
+
**四处热路径位点**(写链非 gated C / gated 合并 B / 工具面 D / 直写面 C)的行为没有断言——
|
|
55
|
+
gated 面 C 与 A 已由 `I` 组 ①③④ 覆盖(`test_autonomy_modes.py:662/714/727`,组内编号对照见 §3.5),
|
|
56
|
+
这四处不在其内。实测判据=**变异存活检验**:在这些落点的判据行之后**追加**注入
|
|
57
|
+
「plan 档把这些动作放行/直落」的变异——若套件不转红,则该格**无判别力**(注入「档位不生效」不会红)。
|
|
58
|
+
修前四处位点全部存活(§二 腿 1–4;位点与修后状态见 §1.2 表)。
|
|
59
|
+
|
|
60
|
+
**缺口 B · E 分数类在档位面无接线、无断言(本批只钉现状,接线留池)**〔**v1.2 已接线**——本句=步骤⑤批次口径;现行见 §12.4/§8.1 第 3 条;2026-10-03 修订补注〕。
|
|
61
|
+
**生产码**(`md_cg/*.py` 非测试件)中 `decide()` 的调用点共 5 处(`writepipe.py:658`;
|
|
62
|
+
`mdcos.py:2977/3922/4003`;`mcp_server.py:3373`,本报告读码逐一复核),其动作类常量
|
|
63
|
+
只出现 A/B/C/D——**生产码中无 `decide(E_WEIGHT)` 调用**(E 面未接档位闸〔**v1.2 已接线**:新增单点 `e_gate`=`autonomy_modes.py:479` 体内 `decide(E_WEIGHT)`——§13.1 修前/修后双列、§12.4;2026-10-03 修订补注〕;测试/守卫件中的
|
|
64
|
+
`decide()` 调用——如 A 组矩阵与 M2 第三条——不在此列)。
|
|
65
|
+
plan 档 E 类动作(`maintain(action="importance")` → `weights.recalc`、`freshness.recalc`)
|
|
66
|
+
**照跑并写盘**(设计 §三 plan 档 E「须命中计划步骤」待计划输入面接线,属已知留池),
|
|
67
|
+
而三套守卫中 E 面(maintain/freshness/lifecycle)**断言数为 0**——「现状」无机械钉(§二 腿 5)。
|
|
68
|
+
|
|
69
|
+
**登记项 C · full 档直落路径不自动拍前像(非本批修复面,留池登记)**。
|
|
70
|
+
设计 §六 义务①「一切破坏性动作先留前像」在 full 档直落路径**未接线**:
|
|
71
|
+
直落不产变更单、无前像、`decisions.jsonl` 无 mutation 执行记录,回滚入口以
|
|
72
|
+
`rollback_gap` fail-closed(§二 腿 6)。本批以 R4「现状钉」断言如实钉住(§五 §8.1 第 4 条)。
|
|
73
|
+
|
|
74
|
+
### 1.2 真实站点(四处判据位点 + E 面两入口)
|
|
75
|
+
|
|
76
|
+
| # | 判据位点(file:line · 本报告读码) | 判据行(逐字) | 所在函数(def 行) | 缺口形态 |
|
|
77
|
+
|---|---|---|---|---|
|
|
78
|
+
| S1 | `md_cg/writepipe.py:658` | `dec = _am.decide(action)` | `_gate_autonomy`(`:617`) | plan×C 覆写:注入后「出单」变「直落」,存活(腿 1) |
|
|
79
|
+
| S2 | `md_cg/mdcos.py:3922` | `dec = _am.decide(_am.B_MERGE)` | `MdCGOS._autonomy_gate_merge`(`:3903`) | plan×B(MERGE 落点):注入后 FORBID 变「直接合并」,存活(腿 2) |
|
|
80
|
+
| S3 | `md_cg/mdcos.py:2977` | `dec = autonomy_modes.decide(autonomy_modes.D_DELETE)` | `MdCGOS.forget_gated`(`:2964`) | plan×D:注入后「出单」变「直删」,存活(腿 3) |
|
|
81
|
+
| S4 | `md_cg/mcp_server.py:3373` | `_dec = _am.decide(_action)` | `_dispatch` 的 `mdcg_remember` **非 gated 直写分支**(`def _dispatch`:3294;自注「热写入路径的第二落点」`:3360-3364`) | plan×C 直写:注入后「出单」变「直落」,存活(腿 4)——**修后仍存活**,复核 uncovered U1,见 §七、§八.1 第 12 条;**v1.2 已钉住**(M1e 三档断言 + 两处定点变异,见 §十二.2) |
|
|
82
|
+
| S5 | `md_cg/autonomy_modes.py:317`(`decide`;**无 E 分支动作面**) | — | E 动作面入口:`md_cg/mdcos.py:3407`(`maintain`→`weights.recalc`)· `md_cg/freshness.py:302`(`recalc`) | E 面照跑写盘且断言数 0(腿 5) |
|
|
83
|
+
|
|
84
|
+
**同族第 5 个调用点**(不在缺口内,如实列出):`md_cg/mdcos.py:4003`
|
|
85
|
+
(`MdCGOS._autonomy_gate_rewrite`,gated 面 C/A)——修前已有 `I` 组断言
|
|
86
|
+
(plan×C `:714-725`、plan×A `:727-739`、受保护覆写「资格先于档位」`:703-711`)。
|
|
87
|
+
|
|
88
|
+
### 1.3 清点口径
|
|
89
|
+
|
|
90
|
+
「有/无断言」的判据=**变异存活检验**(与 §六.2 同一方法学):在判据行后注入行为差分,
|
|
91
|
+
跑四套守卫与既有回归;全绿=该格无行为断言。覆盖矩阵(§3.4)按四套守卫(含本批新增的
|
|
92
|
+
parity 守卫)**逐分组实读**统计;组内断言的编号对照见 §3.5。
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 二、修前现场(8 条复现腿逐条:6 缺陷腿 + 2 装置正对照腿)
|
|
97
|
+
|
|
98
|
+
**装置(工作流采集)**:HEAD 只读副本树(`git archive HEAD` 导出)+ **追加式**注入
|
|
99
|
+
(保留原锚点行使守卫变异表自检不触发);每腿注入后跑三套既有自治守卫 + 18 项相关既有回归;
|
|
100
|
+
另以**替换式**同点位注入跑全量 md_cg 回归(`run_tests.py`,jobs=4)作旁证。
|
|
101
|
+
实验根:`%TEMP%\s5_repro_z42hhr0w`(out/ 下报告 JSON 与日志)。
|
|
102
|
+
|
|
103
|
+
| 腿 | 一句话 | 位点 | 观测结论 | reproduced |
|
|
104
|
+
|---|---|---|---|---|
|
|
105
|
+
| 1 | plan 档×写链 C 改写(注入「档位不生效」存活) | `writepipe.py:658` | 无断言转红 ⇒ 存活;正对照证明方法学有判别力 | ✔ |
|
|
106
|
+
| 2 | plan 档×合并 B 面(注入存活) | `mdcos.py:3922` | 无断言转红 ⇒ 存活(替换式触发 ANCHOR-MISS 结构自检,非行为断言) | ✔ |
|
|
107
|
+
| 3 | plan 档×删除 D 面(注入存活) | `mdcos.py:2977` | 无断言转红 ⇒ 存活 | ✔ |
|
|
108
|
+
| 4 | plan 档×直写面 C 改写(mdcg_remember 非 gated 分支,注入存活) | `mcp_server.py:3373` | 无断言转红 ⇒ 存活 | ✔ |
|
|
109
|
+
| 5 | E 分数类在档位面无接线(plan 档 E 动作照跑并写盘) | `autonomy_modes.py:317`(判据缺失位)· `mdcos.py:3407` · `freshness.py:302` | 无 fail-closed:写盘已生效;E 面断言数 0 | ✔ |
|
|
110
|
+
| 6 | full 档直落动作不可回滚(落→回滚→逐字节比对前像不可完成) | `rollback.py:375`(rollback_gap);根因=前像唯一采集点 `rollback.py:90` 唯一生产调用方 `mdcos.py:2552` | `rollback_gap` fail-closed(C/B/D 三动作相同) | ✔ |
|
|
111
|
+
| 7 | 端到端回滚演练·confirm 三动作跨面(子进程 review_cli + rollback_cli) | 无崩溃点 | 全部通过(SAME/无差异)——装置正对照 | ✘(未复现缺陷) |
|
|
112
|
+
| 8 | 不动面对拍·切档前后 A/E 与旧基线 oracle | 无崩溃点 | 有效读数全 SAME、0 DIFF——装置正对照 | ✘(未复现缺陷) |
|
|
113
|
+
|
|
114
|
+
### 2.1 腿 1 · 写链面 plan×C(判据点 `md_cg/writepipe.py:658`)
|
|
115
|
+
|
|
116
|
+
- **payload**:HEAD 只读副本 `md_cg/writepipe.py:658` 判据行「`dec = _am.decide(action)`」
|
|
117
|
+
**之后追加**(保留原锚点行以避开守卫变异表自检):
|
|
118
|
+
`if _am.mode()=="plan" and action==_am.C_REWRITE and dec["decision"]==_am.CONFIRM: dec=dict(dec,decision=_am.ALLOW)`
|
|
119
|
+
——plan 档写链 C 覆写从「出单」变「直落」。
|
|
120
|
+
- **observed**:**无异常(无断言转红)**——三套守卫 149/59/64 全绿、18 项回归全绿、
|
|
121
|
+
`anchor_miss=false`、注入语法自检 true ⇒ **变异存活=该格无行为断言**。
|
|
122
|
+
替换式同点位注入的全量回归 226/230 通过、无新增红(红集合=基线 4 项环境红:
|
|
123
|
+
rust release 二进制缺失×3 + generation_guard 判别力)。
|
|
124
|
+
**正对照**(同一方法学判别力证明):同点位注入 plan×A 不生效 ⇒ `test_autonomy_modes`
|
|
125
|
+
148 通过/1 失败,红项为「B plan 档 A 新增 fail-closed(未落盘、未出单)」。
|
|
126
|
+
- **基线**(未注入):三套守卫全绿、`--mutate` 定点变异自证全 PASS、全量 SUMMARY 226/230。
|
|
127
|
+
- **site**:`md_cg/writepipe.py:658`(判据点);未覆盖断言面=`test_autonomy_modes.py` B 组
|
|
128
|
+
(plan 档仅覆盖 A 面,无 plan×C 用例)。
|
|
129
|
+
- **reproduced**:true。**修后重放**〔独立复核〕:现行树注入 ⇒ 157 通过 2 失败(M1×2)⇒ 已钉住。
|
|
130
|
+
|
|
131
|
+
### 2.2 腿 2 · 合并面 plan×B(判据点 `md_cg/mdcos.py:3922`)
|
|
132
|
+
|
|
133
|
+
- **payload**:`_autonomy_gate_merge` 判据行「`dec = _am.decide(_am.B_MERGE)`」之后追加:
|
|
134
|
+
`if _am.mode()=="plan" and dec["decision"]==_am.FORBID: dec=dict(dec,decision=_am.ALLOW)`
|
|
135
|
+
——plan 档 B 合并从 fail-closed(FORBID) 变直接合并(应 fail-closed:设计 §三 硬约束③「计划外零变更」)。
|
|
136
|
+
- **observed**:**无异常**——三套守卫 149/59/64 全绿 + 18 回归全绿 ⇒ 存活。
|
|
137
|
+
附加读数:同点位**替换式**注入触发守卫套件自身 ANCHOR-MISS fail-closed
|
|
138
|
+
(`test_autonomy_modes` rc=2,消息「变异锚点缺失:'dec = _am.decide(_am.B_MERGE)' @MdCGOS._autonomy_gate_merge」)
|
|
139
|
+
——属**结构自检**(该位点恰被守卫变异表⑤锚定),非行为断言;套件对 plan 档 B 无行为用例。
|
|
140
|
+
基线行为探针:plan 档(无计划)合并实际返回 `verdict=FORBID/moved_to=autonomy_forbidden`
|
|
141
|
+
(与设计相符,但该行为**无断言钉住**)。
|
|
142
|
+
- **site**:`md_cg/mdcos.py:3922`;未覆盖断言面=`test_autonomy_modes.py` C 组(仅 confirm 档)。
|
|
143
|
+
- **reproduced**:true。**修后重放**〔独立复核〕:155/4(M1b×2+M1c×2)⇒ 已钉住。
|
|
144
|
+
|
|
145
|
+
### 2.3 腿 3 · 删除面 plan×D(判据点 `md_cg/mdcos.py:2977`)
|
|
146
|
+
|
|
147
|
+
- **payload**:`forget_gated` 判据行「`dec = autonomy_modes.decide(autonomy_modes.D_DELETE)`」之后追加:
|
|
148
|
+
`if autonomy_modes.mode()=="plan" and dec["decision"]==autonomy_modes.CONFIRM: dec=dict(dec,decision=autonomy_modes.ALLOW)`
|
|
149
|
+
——plan 档 D 删除从「出单」变「直删」。
|
|
150
|
+
- **observed**:**无异常**——三套守卫全绿 + 18 回归全绿 ⇒ 存活。替换式注入亦触发 ANCHOR-MISS(rc=2)
|
|
151
|
+
结构红(同腿 2 机制)。基线行为探针:plan 档删除实际返回
|
|
152
|
+
`ok=true/deleted=false/moved_to=review_queue`(出单,设计内),但无 plan 档断言。
|
|
153
|
+
- **site**:`md_cg/mdcos.py:2977`;未覆盖断言面=`test_autonomy_modes.py` D 组(仅 confirm 档)。
|
|
154
|
+
- **reproduced**:true。**修后重放**〔独立复核〕:158/1(M1d)⇒ 已钉住。
|
|
155
|
+
|
|
156
|
+
### 2.4 腿 4 · 直写面 plan×C(判据点 `md_cg/mcp_server.py:3373`)——**本批未修,复核 uncovered**
|
|
157
|
+
|
|
158
|
+
- **payload**:`mcp_server.py:3373` 直写面判据行「`_dec = _am.decide(_action)`」之后追加:
|
|
159
|
+
`if _am.mode()=="plan" and _action==_am.C_REWRITE and _dec["decision"]==_am.CONFIRM: _dec=dict(_dec,decision=_am.ALLOW)`
|
|
160
|
+
——plan 档直写面 C 覆写变直落。
|
|
161
|
+
- **observed**:**无异常**——三套守卫全绿 + 18 回归全绿 ⇒ 存活;替换式同点位注入的全量回归
|
|
162
|
+
226/230、无新增红。基线行为探针:plan 档直写面 C 覆写实际出单
|
|
163
|
+
(`ok=true/committed=false/moved_to=review_queue`),但无断言。
|
|
164
|
+
- **site**:`md_cg/mcp_server.py:3373`;未覆盖断言面=`test_autonomy_modes.py` I 组
|
|
165
|
+
(MCP 面用例为 `gated=true`,`:790-799`;未覆盖非 gated 直写分支)。
|
|
166
|
+
- **reproduced**:true。**修后重放**〔独立复核〕:**159 通过 0 失败、0 红——仍存活**(U1)。
|
|
167
|
+
|
|
168
|
+
### 2.5 腿 5 · E 分数类在档位面无接线(判据缺失位)
|
|
169
|
+
|
|
170
|
+
- **payload**:`env MDCG_AUTONOMY=plan`(无计划)+ 合成库:E 动作两入口——
|
|
171
|
+
`cg.maintain(action="importance", apply=True)`(`mdcos.py:3407` → `weights.recalc(apply=True)`)
|
|
172
|
+
与 `freshness.recalc(cg, apply=True)`(`freshness.py:302`)。设计语义:无计划时 A/B/E 一律 forbid(§三 硬约束③)。
|
|
173
|
+
- **observed**:**无异常、无 fail-closed(执行未被拦)**:importance 返回
|
|
174
|
+
`ok=true/changed=2/written=2`,盘面 importance 0.5→0.57(**写盘已生效**);freshness 返回 `ok=true`。
|
|
175
|
+
—— **v1.2 后修订注(回应读者)**:0.57 为本腿(**步骤⑤批次构造**)实测记录(守卫 M2⑥ 注释亦引
|
|
176
|
+
「接线前实测 0.5→0.57 已写盘」);补强批次两轮同面读数 0.5→**0.6646**(§12.4/§13.2,构造=
|
|
177
|
+
basis='test'、入度=1)——**不同构造的两次实跑**,非同一读数冲突;0.57 的构造细节未在本报告留存。
|
|
178
|
+
静态证据:**生产码**中 `decide()` 调用点共 5 处(`writepipe.py:658`;`mdcos.py:2977/3922/4003`;
|
|
179
|
+
`mcp_server.py:3373`),动作类仅覆盖 A/B/C/D——**生产码中无 `decide(E_WEIGHT)` 调用**
|
|
180
|
+
(测试/守卫件中的 `decide()` 调用不在此列);三套守卫中 E 面(maintain/freshness/lifecycle)断言数为 0。**v1.2 更新注(2026-10-03 修订补)**:上行「无 `decide(E_WEIGHT)` 调用」=**修前口径**;现行树 `E_WEIGHT` 实参调用点恰 1 处(`autonomy_modes.py:479`、`e_gate` 体内——§13.1 双列),E 面断言数亦已随 M2 重编码≠0(§12.4)。
|
|
181
|
+
- **site**:判据缺失位=`autonomy_modes.decide` 的 E 分支(`md_cg/autonomy_modes.py:317`,
|
|
182
|
+
仅矩阵值/守卫按值断言使用);动作面 `md_cg/mdcos.py:3407`、`md_cg/freshness.py:302`。
|
|
183
|
+
- **reproduced**:true。**修后处置**:M2 把现状**如实钉住**(非背书)+ 变异表新增⑰(接线形态的注入);接线留池(§8.1 第 3 条)。〔**v1.2 更新(2026-10-03 修订补)**:E 面**已接线**——M2 已按标题意图重编码(§12.4)、⑰ 已改指「直写面档位闸摘除」(§12.7);本句=步骤⑤批次口径。〕
|
|
184
|
+
|
|
185
|
+
### 2.6 腿 6 · full 档直落动作不可回滚("落→回滚→逐字节比对前像"不可完成,B/C/D 三动作)
|
|
186
|
+
|
|
187
|
+
- **payload**:`env MDCG_AUTONOMY=full` + 合成库:C=写链覆写直落、B=`remember_gated` MERGE 直落、
|
|
188
|
+
D=MCP 工具面(`_dispatch mdcg_forget`)直删;随后尝试回滚(进程内统一入口 + CLI 视角)。
|
|
189
|
+
设计 §六 义务①:一切破坏性动作先留前像(§四)。
|
|
190
|
+
- **observed**:直落全部生效(`committed=true` / `verdict=MERGE` / 节点离位),但:
|
|
191
|
+
**变更单 0 张、前像(`_protected_history/`)0 张、`decisions.jsonl` 中 mutation 执行记录 0 条**
|
|
192
|
+
(三个读数=三个落点,均可独立核对:**变更单**=`hippocampus/inbox.jsonl` 中 `kind=mutation`
|
|
193
|
+
的条目〔`review_list()` 可见;`md_cg/mdcos.py:443`/`:2016` 读码〕;**前像**=`_protected_history/`
|
|
194
|
+
快照文件;**执行记录**=`hippocampus/decisions.jsonl` 的 `rec["mutation"]`〔`md_cg/mdcos.py:444`〕);
|
|
195
|
+
回滚返回体 `{"ok": false, "error": "rollback_gap", "hint": "载荷缺 before(执行时点前像引用):
|
|
196
|
+
该变更单**未执行**(reject / fail-closed / pending)或执行记录不完整——fail-closed 不猜一个前像
|
|
197
|
+
(前像必须来自执行时点)。"}`(C/B/D 三动作完全相同);CLI 无 pid 可依。
|
|
198
|
+
对照:confirm 档同三动作全链通过(腿 7)——「无前像」是 full 直落路径**特有**缺口。
|
|
199
|
+
- **site**:`md_cg/rollback.py:375`(`rollback_gap` 分支);根因位点:前像的**组合采集单点**=
|
|
200
|
+
`rollback.preimage`(`md_cg/rollback.py:90`——内部调**快照单点** `protect.snapshot_preimage`
|
|
201
|
+
(`protect.py:249`)+采影响面+生成回滚命令),其唯一生产调用方=accept 执行桥
|
|
202
|
+
`md_cg/mdcos.py:2552`——**full 直落路径无任何拍摄点**(两个「单点」的同一性关系见 §5.2 注)。
|
|
203
|
+
- **reproduced**:true。**本批处置**:R4「现状钉」以 preimage 审计行人证(全部来自演练侧),
|
|
204
|
+
接线留池(§8.1 第 4 条)。
|
|
205
|
+
|
|
206
|
+
### 2.7 腿 7 · 端到端回滚演练·confirm 三动作跨面(装置正对照,未复现缺陷)
|
|
207
|
+
|
|
208
|
+
- **payload**:`env confirm` + 独立合成库×3:出单面各异——C=写链面(writepipe 链)、
|
|
209
|
+
B=插件面(remember_gated)、D=MCP 工具面(`_dispatch mdcg_forget`);随后子进程
|
|
210
|
+
`python -X utf8 -m md_cg.review_cli accept <pid> --root ...` 与子进程
|
|
211
|
+
`python -X utf8 -m md_cg.rollback_cli --root ... --pid ...` 各一,父进程独立逐字节比对前像
|
|
212
|
+
+ 残差核对(索引/边/聚合行)。
|
|
213
|
+
- **observed**:**未复现(无差异/无异常)**:三动作 accept rc=0、rollback rc=0、返回体 ok=true、
|
|
214
|
+
`bytes_equal_preimage=true`、residual 三面(agg_lines/edges/index)全 true;method=preimage(C)
|
|
215
|
+
/strip_aggregate_lines(B)/restore+preimage_calibration(D,`calibrated=true`、
|
|
216
|
+
`restore_bytes_equal=false` 如实);父进程复核逐字节=true、part_of 父边恢复=[t_p]、B 聚合行不残留。
|
|
217
|
+
- **site**:无崩溃点(该演练在改动前树上全部通过)。
|
|
218
|
+
- **reproduced**:false(**装置正对照**——证明「回滚链可用」,非缺陷)。
|
|
219
|
+
|
|
220
|
+
### 2.8 腿 8 · 不动面对拍·切档前后 A/E 与旧基线 oracle(装置正对照,未复现缺陷)
|
|
221
|
+
|
|
222
|
+
- **payload**:(a) 双库同 id 口径:写链 A / gated A / 直写面 A / E 权重(maintain importance)/
|
|
223
|
+
E 新鲜度(freshness.recalc)在 confirm 与 full 各跑一次,比对返回体+落盘读数+规范化哈希;
|
|
224
|
+
(b) 同一合成库 confirm→full→confirm 连续三次写入(id 归一);
|
|
225
|
+
(c) 与旧基线:`git archive HEAD` 只读导出两份副本(工作树副本 vs oracle 副本),
|
|
226
|
+
跑 14 case(A/E 全线 + full 档全线)逐键 diff。
|
|
227
|
+
- **observed**:**未复现(有效读数全 SAME,无 DIFF)**:(a) 15/15 SAME(result/read/norm_sha);
|
|
228
|
+
(b) `A_same_lib all_same=true`(唯一原始差异键 `consistency.scanned=0/1/2`,属库内节点数派生读数、
|
|
229
|
+
与档位无关,剔除后逐位 SAME);E 面两档均正常执行(无档位拦截);(c) 14 case、0 DIFF(SAME)。
|
|
230
|
+
**注**:改动前树上两副本同源,SAME 属预期——该对拍臂**单独不能证明判别力**;本批零生产码改动
|
|
231
|
+
(§四.2 全 SAME 属结构性原因),判别力改由 **Q 组负对照**(对 oracle 树副本定点注入差异 ⇒
|
|
232
|
+
DIFF 恰好命中 A 面两项,§4.2)作机械证明;plan 档未并入对拍范围(无计划时 A/E 的 forbid
|
|
233
|
+
是设计内语义,另由腿 5 对应断言单独钉住)。
|
|
234
|
+
- **site**:无崩溃点(对拍读数 SAME)。
|
|
235
|
+
- **reproduced**:false(**装置正对照**)。
|
|
236
|
+
|
|
237
|
+
### 2.9 修后重放总表(现行树,〔独立复核〕实测)
|
|
238
|
+
|
|
239
|
+
| 修前腿 | 注入在现行树的行为 | 结论 |
|
|
240
|
+
|---|---|---|
|
|
241
|
+
| V1'(写链 C) | `test_autonomy_modes` 157 通过 **2 失败**(M1×2:写链 C 覆写不再出单且正文被改) | **已钉住** |
|
|
242
|
+
| V2'(合并 B) | 155/4(M1b×2+M1c×2) | **已钉住** |
|
|
243
|
+
| V3'(删除 D) | 158/1(M1d:工具面 D 直删) | **已钉住** |
|
|
244
|
+
| V4'(直写面 C) | **159 通过 0 失败、0 红——仍存活**(步骤⑤树) | **未覆盖**(U1)→ **v1.2 已钉住**(M1e①–⑤;v1.2 树同注入变 rc=2/ANCHOR-MISS 结构红——三形态读数对照见 §13.7(a)) |
|
|
245
|
+
| HEAD 导出树(四腿) | 各 rc=0、149 通过 0 失败、红 0 | 修前缺口成立 |
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## 三、修法契约与落点
|
|
250
|
+
|
|
251
|
+
**契约来源**:设计 §十一(`:186-191`,逐条:①每档守卫+定点变异自证「注入『档位不生效』必红」;
|
|
252
|
+
②不动面对拍(切档前后 A/E 逐位不变);③回滚实测(每种破坏性动作各演一次「落→回滚→逐字节比对前像」);
|
|
253
|
+
④R1–R4 独立断言与门槛/窗口边界——由步骤④既有 `test_autonomy_admission` A–D 组承担,本批未改)
|
|
254
|
+
+ §十三.5 收官步 + 本次工作流任务书(覆盖补缺守卫「名自定,报告说明」)。
|
|
255
|
+
|
|
256
|
+
### 3.1 M 组「收官补缺」(`md_cg/test_autonomy_modes.py:1078-1218`,+10 断言 → 149→159)
|
|
257
|
+
|
|
258
|
+
| 断言 | 契约对应 | 内容(逐条) |
|
|
259
|
+
|---|---|---|
|
|
260
|
+
| M1(2 条) | 补缺:plan×C(写链面) | plan 档写链 C 覆写**出变更单且不落盘**(`moved_to=review_queue`、`committed=False`、载荷 action=C/target 齐);出单时目标正文**未被覆写**(逐字比对) |
|
|
261
|
+
| M1b(2 条) | 补缺:plan×B(MERGE 落点) | plan 档 gated B 合并 fail-closed:`verdict=FORBID`+`moved_to=autonomy_forbidden`+「计划外零变更」hint;未合并(正文/merge_count 不动、零变更单) |
|
|
262
|
+
| M1c(2 条) | 补缺:plan×B(CONVERGE 落点) | 限流闸 CONVERGE 在 plan 档 fail-closed(锚点先经 confirm 档落盘、切 plan 后第二篇被拦);CONVERGE 未并入(目标正文不含新值) |
|
|
263
|
+
| M1d(1 条) | 补缺:plan×D(工具面) | plan 档工具面 D 删除**出变更单且不软删**(`deleted=False` 明示、节点原样在位) |
|
|
264
|
+
| M2(3 条) | 补缺:plan×E + 设计内语义单钉 | ①`freshness.recalc` plan 与 confirm 两档输出**逐位相等**(现状:E 面无档位闸接线——**如实钉住、非背书**);②落盘 `freshness_weight/freshness_source` 同链;③`decide(A|E, plan)==forbid` 单钉并注明**不并入**对拍范围 |
|
|
265
|
+
|
|
266
|
+
模块 docstring 增「收官批次(步骤⑤)新增 M 组」段(`:55-63`);M 组自带覆盖矩阵与边界说明 docstring(`:1079-1106`)。
|
|
267
|
+
|
|
268
|
+
### 3.2 新守卫 `md_cg/test_mode_parity.py`(56 条断言;P 15 / Q 8 / R 33)
|
|
269
|
+
|
|
270
|
+
**命名理由**(契约要求「名自定,报告说明」):parity=对拍(§十一 核心判据),drill=演练;
|
|
271
|
+
不并入 `test_autonomy_modes.py` 的三条理由:①对拍与演练是**跨进程装置**(`git archive` 导出树 +
|
|
272
|
+
观测脚本子进程 + `rollback_cli` 子进程),与档位面守卫的纯进程内断言形态不同;②两者各有独立变异表,
|
|
273
|
+
混排会让「红项数恰好吻合」的判据面互相污染;③命名即职责。**覆盖补缺的断言**(plan 档热路径 / E 分数类)
|
|
274
|
+
按契约落在 `test_autonomy_modes.py` 的 M 组(该文件是「每档守卫」的既有落点)。
|
|
275
|
+
|
|
276
|
+
| 组 | 落点 | 内容 |
|
|
277
|
+
|---|---|---|
|
|
278
|
+
| **P 切档对拍** | `:286-360` | 同一合成库 confirm↔full:**P1** A 首写两臂对拍(同起点锚 + 切档臂 vs 对照臂逐位相等 + 落盘节点);**P2** E 两族(freshness/weights)「落→**既有 rollback**→切档→再落」读数与 fm 对拍;**切档零写入**(库盘面全文件 sha256 指纹);**切档锚不空转**(`mode()` 读回目标档) |
|
|
279
|
+
| **Q oracle 对拍** | `:362-671` | `git archive --format=tar HEAD` 只读导出到系统临时区(参照物,每次现导出、**不含**任何提交派生字面量期望值);同一观测脚本(`_RUNNER`,守卫生成)对两棵树各跑一遍,**15 项 SAME/0 DIFF**;provenance 自证(HEAD 路确实 import 导出树);**负对照**(导出树副本定点注入写链 A 面差异 ⇒ DIFF 恰为 `[A_add, full_A]`);`ORACLE-MISS` ⇒ exit 2 fail-closed |
|
|
280
|
+
| **R 端到端回滚演练** | `:674-921` | **R1** 写链 C 链 / **R2** 插件面 B 链 / **R3** 工具面 D 链(confirm 三链**各经不同入口面**:C=写链 `cg(op=write)` / B=插件面 `mdcg_remember(gated)` / D=工具面 `cg(op=forget)`)→ 执行桥 accept → **`md_cg.rollback_cli` 真子进程**(命令串取自执行记录字段,`shlex` 切分、`python` 令牌换本进程解释器、`shell=False`、显式 UTF-8)→ 逐字节比对前像 → 残差三面 + 索引条目重算对拍 + **CLI 负对照**(不存在 pid ⇒ rc=1 + `decision_not_found`);**R4** full 三链直落→统一回滚入口→逐字节→残差;**R5** 跨面汇总;**全程零变更单**;**现状钉**(full 直落不自动拍前像,审计行人证) |
|
|
281
|
+
|
|
282
|
+
### 3.3 配套改动
|
|
283
|
+
|
|
284
|
+
- `test_autonomy_modes.py:173-179` `_VOLATILE` 追加 `batch/note/elapsed_ms`(时钟/耗时面,
|
|
285
|
+
逐项理由注释;E 面对拍与后续对拍共用同一剔除口径)。
|
|
286
|
+
- `test_autonomy_modes.py:1237-1386` 变异表**实测校准** 6 处红项数(①17→20、②40→43、③47→55、
|
|
287
|
+
④6→8、⑤10→14、⑥4→5,注释写明新增红的归属)+ 新增第 17 处变异「E 面被档位闸阻塞」
|
|
288
|
+
(`freshness.recalc` 咨询 `decide(E_WEIGHT)`,红 2——即「接线」的注入形态)。〔**v1.2 后**:该条已随接线摘除、⑰ 改指「直写面档位闸摘除」——§12.4/§12.7;本句=步骤⑤口径,2026-10-03 修订补注〕
|
|
289
|
+
- `test_mode_parity.py:940-1015` 变异表 7 处 + ANCHOR-MISS exit 2;`:1148-1157` 尾部清理与 `sys.exit(rc)`。
|
|
290
|
+
|
|
291
|
+
### 3.4 覆盖矩阵(3 档 × 动作类 A–E × 四套守卫)
|
|
292
|
+
|
|
293
|
+
**四套守卫的既有断言面(清点口径:按分组实读)**:
|
|
294
|
+
|
|
295
|
+
| 守卫 | 分组 | 断言的档位面 |
|
|
296
|
+
|---|---|---|
|
|
297
|
+
| `test_autonomy_modes.py`(159 条) | A 矩阵/判定值 · B 写链 C 改写 · C 合并 B(MERGE+CONVERGE) · D 删除 · E 幂等 · F 存量兼容 · G 单点结构 · H 不动面对拍(full 全动作 / confirm↔full 的 A) · I gated 面 · J SHIM · K 变更单三字段 · L 准入闸生效面 · **M 收官补缺** | 三档矩阵逐格(判定层)+ confirm/full 热路径 + plan 面补缺 |
|
|
298
|
+
| `test_mutation_rollback.py`(59 条) | P 前像面 · Q C 改写回滚 · R B 合并回滚 · S D 删除回滚 · T 单点/边界/时点 | 回滚面(档位无关:只吃变更单/执行记录) |
|
|
299
|
+
| `test_autonomy_admission.py`(64 条) | A R1 · B R2 · C R3 · D R4 · E 准入闸 · F 结构/CLI · G 容错与失败态 | 准入读数与 full 档准入闸 |
|
|
300
|
+
| `test_mode_parity.py`(56 条,新) | **P 切档对拍 · Q oracle 基线对拍 · R 端到端回滚演练** | 切档前后与旧基线对拍 + 跨面演练 |
|
|
301
|
+
|
|
302
|
+
**逐格矩阵(补缺前 → 补缺后)**:
|
|
303
|
+
|
|
304
|
+
| 动作 | plan | confirm | full |
|
|
305
|
+
|---|---|---|---|
|
|
306
|
+
| **A 新增** | 判定层 A 组;写链 fail-closed `B组`;gated fail-closed `I:④` → **补缺后**加 M2(设计内语义单钉) | 写链直落 `B组`;对拍 `H组`;gated/链面/MCP `I:⑥⑦`;**P1 切档对拍**;**Q:A_add/plg_A** | full 直落 `H组`;gated `I:⑤`;**Q:full_A** |
|
|
307
|
+
| **B 合并** | ❌(仅判定层) → **M1b(MERGE 落点)/ M1c(CONVERGE 落点)** | 出单/accept/reject/edit `C组`;回滚 `R组`;**R2 插件面端到端**(新增) | 直落 `H组`;**R4-B(直落→回滚)**;**Q:full_B** |
|
|
308
|
+
| **C 改写** | ❌(写链非 gated 面) → **M1(写链 C 覆写出单)**;gated `I:③` | 出单/落盘核对 `B组`(写链)/`I:①⑦`;**R1 写链端到端 + CLI**;三字段 `K组` | 直落 `B组:o3`/`I:⑤`;**R4-C**;**Q:full_C** |
|
|
309
|
+
| **D 删除** | ❌ → **M1d(工具面出单、不软删)** | 出单/accept/资格闸 `D组`;**R3 工具面端到端 + CLI** | 直落 `H组`;**R4-D**;**Q:full_D** |
|
|
310
|
+
| **E 权重/生命周期** | ❌(且判定层 forbid 无动作面) → **M2(E 面无档位闸现状钉)** | ❌ → **P2 切档对拍(freshness/weights)**;**Q:E_weights/E_fresh** | ❌ → **P2**;**Q:full_E_weights/full_E_fresh** |
|
|
311
|
+
|
|
312
|
+
**补缺前未覆盖格(6 格)**:`plan×B`、`plan×C`(写链非 gated)、`plan×D`、`plan×E`、`confirm×E`、`full×E`。
|
|
313
|
+
**弱覆盖面(3 处)**:① plan×A 只有判定层与两处 fail-closed(缺「设计内语义」单钉);
|
|
314
|
+
② confirm/full 的**回滚实测**只有守卫级单呼(缺跨入口面 + 子进程 CLI 的端到端链);
|
|
315
|
+
③ 无「切档前后」与「与旧基线」两路对拍(§十一 核心判据)。
|
|
316
|
+
**补缺后**:15 格全部有断言落点(上表加粗/新增项)——**粒度声明**:该矩阵的粒度是「档 × 动作类」;
|
|
317
|
+
**入口面粒度**上 C 面已知一处缺口=`mcp_server._dispatch` 的 `mdcg_remember` **非 gated 直写分支**
|
|
318
|
+
(`mcp_server.py:3373`,plan 档无行为断言;§七 U1、§八.1 第 12 条)。
|
|
319
|
+
|
|
320
|
+
> **v1.2 更新(补强批次,2026-10-03)**:上表两处变化——① C 面「入口面粒度」缺口**已钉住**
|
|
321
|
+
> (M1e①–⑤:plan/confirm 出单且不落盘、full 直落,两处定点变异);② E 列三格由「现状钉」改为
|
|
322
|
+
> **接线后判据**(plan 被拦 + confirm/full 逐位相等,四处写盘入口)。**逐格更新后的矩阵**见
|
|
323
|
+
> §十二.5;本表保持 v1.1 原样(历史读数,不回填)。
|
|
324
|
+
|
|
325
|
+
### 3.5 本文引用的断言编号对照(组内编号 → 落点;行号=本报告读码)
|
|
326
|
+
|
|
327
|
+
矩阵与变异表里的 `I:③④`、`B组:o3`、`L3/E3/E4` 这类写法是**组内编号**。组级落点先列全:
|
|
328
|
+
`test_autonomy_modes.py`(159 条)= A `:203` · B `:263` · C `:322` · D `:382` · E `:454` · F `:484` ·
|
|
329
|
+
G `:528` · H `:580` · I `:655` · J `:830` · K `:854` · L `:946` · M `:1079`;
|
|
330
|
+
`test_autonomy_admission.py`(64 条)= A `:184` · B `:241` · C `:297` · D `:391` · E `:442` · F `:563` · G `:642`。
|
|
331
|
+
|
|
332
|
+
| 编号 | 断言半句(对应文本) | 落点 |
|
|
333
|
+
|---|---|---|
|
|
334
|
+
| `B组:o1` | 首次写入(A 新增)直落不拦 | `test_autonomy_modes.py:270-273` |
|
|
335
|
+
| `B组:o2` | C 改写出变更单且不落盘 | `:274-280` |
|
|
336
|
+
| `B组:o3` | **full 档 C 改写直落(无单、无 extra 键)** | `:302-308` |
|
|
337
|
+
| `B组:o4` | plan 档 A 新增 fail-closed | `:310-317` |
|
|
338
|
+
| `I:①` | gated 面 confirm 档 C 覆写出单且不落盘 | `:662-696` |
|
|
339
|
+
| `I:②` | 资格在先:受保护覆写在 `write_qualify` 当场拦 | `:698-712` |
|
|
340
|
+
| `I:③` | gated 面 **plan 档 C 覆写出单**(与 confirm 同格) | `:714-725` |
|
|
341
|
+
| `I:④` | gated 面 **plan 档 A 新增 fail-closed** | `:727-739` |
|
|
342
|
+
| `I:⑤` | full 档 C 覆写照旧直落(零变更单) | `:741-752` |
|
|
343
|
+
| `I:⑥` | A 新增 confirm/full 两档逐位一致(不动面对拍) | `:754-769` |
|
|
344
|
+
| `I:⑦` | 写链面(`op=write`+`gated=true`)与 MCP 工具面 C 覆写出单 | `:771-800` |
|
|
345
|
+
| `I:⑧` | 执行桥 C 目标消失 → `target_missing` 且不重建 | `:802-827` |
|
|
346
|
+
| `L1`–`L8` | 准入闸生效面:`L1` full+满足⇒full `:1003` | `L2`/`L2a`/`L2b` 回落+alerts `:1011` | **`L3` plan/confirm 零读数扫描 `:1027`** | `L4` 非法 env fail-closed `:1038` | **`L5` 未结算=旧行为 `:1045`** | **`L6` TTL 缓存不重扫 `:1050`** | `L7` 只读 `:1060` | `L8` 结算态可查 `:1067` | `:946-1075` |
|
|
347
|
+
| `E3`/`E4` | (admission)confirm / plan 档不受读数影响(零告警、零读数扫描) | `test_autonomy_admission.py:481-502` |
|
|
348
|
+
| `E6` | (admission)未结算时 `mode()` 返回配置档位(生效面未启用) | `:513-519` |
|
|
349
|
+
| `E7` | (admission)读数缓存:TTL 内重复结算只扫一次 | `:520-535` |
|
|
350
|
+
| `G4` | (admission)未调用过 settle:`mode()=env` 逐位不变 | `:803-809` |
|
|
351
|
+
| `P1`/`P2` | (parity)A 新增切档对拍 / E 两族切档对拍 | `test_mode_parity.py:290-326` / `:328-359` |
|
|
352
|
+
| `R1`–`R5` | (parity)写链 C 链 `:680-733` | 插件面 B 链 `:735-776` | 工具面 D 链 `:778-816` | full 直落三链 `:818-909` | 跨面汇总 `:911-921` | 同上 |
|
|
353
|
+
|
|
354
|
+
### 3.6 plan 档「不并入对拍」的边界(契约明文,单独钉住)
|
|
355
|
+
|
|
356
|
+
- plan 档 **C/D 与 confirm 同格**(需确认 ⇒ 出单)——M1/M1d 实测钉死(出单且**不落盘/不软删**);
|
|
357
|
+
- plan 档 **A/B/E 无计划输入即 forbid**——M2 第三条单钉(`decide(A|E, plan) == forbid`),
|
|
358
|
+
**不进** confirm↔full 对拍范围(对拍锚只含 confirm/full 两档);
|
|
359
|
+
- **E 面无档位闸接线**(现状,留池):M2 前两条把「plan 档 E 类动作照常落盘、输出与 confirm 档
|
|
360
|
+
逐位相等」**如实钉住**(非背书)——将来接线时本组须同步更新,定点变异 ⑰ 就是「接线」的注入形态(实测红 2)。〔**v1.2 已接线并已同步更新**:本组已重编码(§12.4)、⑰ 已改指直写面(§12.7);本句=步骤⑤口径,2026-10-03 修订补注〕
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## 四、不动面对拍读数(两路)
|
|
365
|
+
|
|
366
|
+
### 4.1 路一:切档前后(同一合成库 confirm↔full,非破坏性动作 A/E)〔本报告实跑〕
|
|
367
|
+
|
|
368
|
+
装置(`test_mode_parity.g_p`):同一库内先落一次、再切档重放,另设同档对照臂——比对判据=
|
|
369
|
+
「切档臂 vs 对照臂逐位相等」(剔除时钟/耗时面)。
|
|
370
|
+
|
|
371
|
+
| 读数 | 结果 |
|
|
372
|
+
|---|---|
|
|
373
|
+
| A 新增:full 档首写读数 vs confirm 档首写读数 | **逐位相等**(P1 核心判据) |
|
|
374
|
+
| A 新增:两臂同起点锚(confirm 首写) | 逐位相等 |
|
|
375
|
+
| A 新增:落盘节点(正文 + fm,时钟面除外) | 逐位相等 |
|
|
376
|
+
| 切档本身零写入(库盘面指纹全文件 sha256,跨 `confirm→full` / `confirm→confirm`) | 逐位相同(各 7 文件) |
|
|
377
|
+
| 切档锚不空转(切档后 `mode()` 读回目标档) | 两臂各自命中 |
|
|
378
|
+
| E 权重:`freshness.recalc` 两轮读数 + 落盘 fm | **逐位相等**(中间经**既有 rollback** 复位到同起点,`reverted=2`) |
|
|
379
|
+
| E 权重:`weights.recalc` 两轮读数 + 落盘 fm | **逐位相等**(同款,`reverted=2`) |
|
|
380
|
+
|
|
381
|
+
### 4.2 路二:与改动前基线(`git archive HEAD` oracle)〔本报告实跑〕
|
|
382
|
+
|
|
383
|
+
装置(`test_mode_parity.g_q`):`git archive --format=tar HEAD` → 系统临时区解包(只读导出,
|
|
384
|
+
不改 `.git`/工作区)→ 同一观测脚本(`_RUNNER`,独立子进程)对**两棵树**各跑一遍 → 逐项比对。
|
|
385
|
+
观测脚本自证 `import` 到了目标树(`provenance.md_cg` 指向 `tree_head/md_cg`)。
|
|
386
|
+
|
|
387
|
+
**读数:15 项 SAME / 0 项 DIFF**(本报告实跑输出照录):
|
|
388
|
+
|
|
389
|
+
```
|
|
390
|
+
SAME(15): A_add、E_fresh、E_weights、full_A、full_B、full_C、full_D、full_E_fresh、
|
|
391
|
+
full_E_weights、matrix、mode_default、plan_C、plan_D、plan_decide、plg_A
|
|
392
|
+
DIFF(0): (无)
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**负对照(对拍有判别力的机械证明)**:把导出的 HEAD 树副本**定点注入**写链 A 面差异
|
|
396
|
+
(`writepipe._gate_autonomy` 的放行分支对 `A_ADD` 改判 `CONFIRM`)⇒ DIFF 项**恰好**
|
|
397
|
+
`["A_add", "full_A"]`(SAME 集合不变)——对拍装置不空转。
|
|
398
|
+
|
|
399
|
+
**屏蔽面(「剔除不算放水」的逐项登记)**:对拍比对前统一剔除/掩码
|
|
400
|
+
① wall-clock 键 `t / created_at / last_access / last_merge_at / time_window / updated_at`;
|
|
401
|
+
② `batch`(strftime 批号)与内嵌 batch 的 `note`;③ `elapsed_ms`(运行耗时);
|
|
402
|
+
④ 聚合行时间戳(`【聚合 MM-DD HH:MM】` → `【聚合 <ts>】`);
|
|
403
|
+
⑤ **pid 熵面**(`prop_<hex>` → `prop_<id>`:pid = 内容签名(node_id + `time.time()` + `uuid4`),见
|
|
404
|
+
`md_cg/mdcos.py:2016` 起的 `propose`——身份面不是行为面)。
|
|
405
|
+
判据是「档位/版本有没有改变行为」,以上五类两侧必然不同(不同时刻/不同进程)。
|
|
406
|
+
|
|
407
|
+
**基线口径(回应硬约束「禁止以 git HEAD 为基线源」)**:本守卫**不含任何由某一提交派生的
|
|
408
|
+
字面量期望值**——oracle 是**每次运行现导出**的 HEAD 树(参照物),判据=「同一脚本在两棵树上输出是否
|
|
409
|
+
逐位一致」;本仓**两次教训**(出处实读:`md_cg/test_n225_nonobject_load.py:81`——「基线源是**工作区
|
|
410
|
+
源码**……绝不绑 git HEAD——本仓批次 80/81 两次教训:基线绑提交那一刻即失效」)指向的是
|
|
411
|
+
「把某提交的输出抄进断言」,本装置结构上不属该形态。**装置故障 fail-closed**:`git` 不可用 / 导出失败 / 导出树缺 `md_cg/mdcos.py` ⇒
|
|
412
|
+
打印 `ORACLE-MISS` 并以**退出码 2** 结束(不静默跳过)。
|
|
413
|
+
|
|
414
|
+
**对拍口径对照(v1.2 后修订轮补注 · 回应读者)**:全报告共有四套「不动面对拍」读数,装置/条目集/轮次
|
|
415
|
+
各不相同——**不是互相矛盾的结论**;v1.2 之后「不动面」的例行背书=**Q 组 15 项**(守卫内建、每跑)+
|
|
416
|
+
**复核 `obs2` 的 confirm/full 21 项**(复核轮)。对照:
|
|
417
|
+
|
|
418
|
+
| 读数 | 装置 | 条目集 | 轮次/口径 |
|
|
419
|
+
|---|---|---|---|
|
|
420
|
+
| §4.2 **15 项 SAME/0 DIFF** | 守卫 Q 组(`git archive HEAD` 现导出 oracle+同一观测脚本对两树) | A/E 全线+full 全线+矩阵/缺省/plan(固定 15 项) | 步骤⑤批次;**v1.2 后仍逐位成立**(§13.4) |
|
|
421
|
+
| §7.2 **17 项 SAME/0 DIFF** | 复核自写 `obs.py`(不 import 守卫;两树同脚本) | 复核侧 17 场景(掩码时钟/熵面) | 步骤⑤批次复核轮(独立装置、交叉佐证) |
|
|
422
|
+
| **Q 组 15 项**(§6.1 注/§13.4) | 守卫内建(每次运行现导出 oracle) | 同 §4.2 的 15 项 | **v1.2 例行读数**(`SAME(15)/DIFF(0)`) |
|
|
423
|
+
| §13.5.2 **21/21+plan_E×3 DIFF** | 复核自写 `obs2`(两树同脚本、剔时钟/熵面) | confirm/full 21 项+plan 3 项 | **v1.2 复核轮**;plan_E×3 为**预期修复差异**(E 面接线)——与 Q 组 15 项**不冲突**(条目集不同:21 项含复核自有场景) |
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## 五、端到端回滚演练读数(跨面 · 含子进程 CLI 实测)〔本报告实跑〕
|
|
428
|
+
|
|
429
|
+
### 5.1 confirm 档三条链(出单 → accept 执行 → 回滚 CLI 子进程 → 逐字节 → 残差)
|
|
430
|
+
|
|
431
|
+
| 链 | 入口面(实读) | 出单读数 | 执行 | 回滚路径 | CLI rc | 逐字节==前像 | 残差三面 |
|
|
432
|
+
|---|---|---|---|---|---|---|---|
|
|
433
|
+
| **C 改写(R1)** | **写链** `cg(op=write)`(`writepipe._gate_autonomy:617`) | `review_queue` + pid | accept(执行桥 `mdcos._mutation_execute:2489`) | `rollback_cli` **子进程**(命令串来自执行记录 `rec["mutation"]["rollback"]`) | 0 | ✔ | 索引/边/聚合行 全 ✔ |
|
|
434
|
+
| **B 合并(R2)** | **插件面** `mdcg_remember(gated=true)`(`mcp_server._dispatch:3294` → `mdcos.remember_gated:4072` → `_autonomy_gate_merge:3903`) | `verdict=CONFIRM` + pid | accept(`forgetting.reinforce`) | 同上 | 0 | ✔ | 全 ✔ |
|
|
435
|
+
| **D 删除(R3)** | **工具面** `cg(op=forget)`(`mcp_server` → `mdcos.forget_gated:2964`) | `review_queue` + `deleted=False` + pid | accept(`_forget_apply:2940`) | 同上(`calibrated=True` 读数如实) | 0 | ✔ | 全 ✔ |
|
|
436
|
+
|
|
437
|
+
附加判据:C 链的**索引条目回齐**(回滚后条目 == 前像重算条目,逐位)与**边回齐**
|
|
438
|
+
(声明式 `part_of` 父边回案);D 链的**节点复位**(索引条目在案 + 盘面 == 前像);
|
|
439
|
+
**CLI 负对照**(换一个不存在的 pid ⇒ `rc=1` + `decision_not_found`——CLI 腿不是无脑报成功)。
|
|
440
|
+
|
|
441
|
+
### 5.2 full 档三条链(直落 → 回滚 → 逐字节 → 残差)
|
|
442
|
+
|
|
443
|
+
| 链 | 入口面 | 直落读数 | 回滚路径 | 逐字节==前像 | 残差 |
|
|
444
|
+
|---|---|---|---|---|---|
|
|
445
|
+
| **C 改写(R4-C)** | 写链 | `committed=True`、`moved_to=None`(无单) | 演练侧执行时点前像(`protect.snapshot_preimage:249`,与执行桥同一单点)+ 统一回滚入口 `rollback.rollback_mutation:356`(method=`preimage`) | ✔ | 索引/边 ✔ |
|
|
446
|
+
| **B 合并(R4-B)** | 插件面 | `verdict=MERGE`、聚合行已追加、无单 | 同上(`strip_aggregate_lines:182` 定向剥离) | ✔ | 聚合行/索引 ✔ |
|
|
447
|
+
| **D 删除(R4-D)** | 工具面 | 软删生效、无单 | 同上(`restore` + 前像校准,`method=restore+preimage_calibration`) | ✔ | 三面全 ✔ |
|
|
448
|
+
|
|
449
|
+
**注(前像「单点」的同一性 · 回应读者)**:`protect.snapshot_preimage`(`protect.py:249`)是**快照文件**的
|
|
450
|
+
唯一拍摄函数(本报告实查:生产码内其调用点唯一=`rollback.py:107`;演练侧直接调它)——
|
|
451
|
+
执行桥链内是 `rollback.preimage`(组合采集,`rollback.py:90`)**内部调同一个它**;两处"单点"指
|
|
452
|
+
同一函数的不同调用路径(快照单点 vs 组合采集单点),互不矛盾(§2.6 site 行同此口径)。
|
|
453
|
+
|
|
454
|
+
**注(R4 三条「逐字节 == 前像」的合取结构 · 回应读者)**:该读数为**三重合取**——
|
|
455
|
+
①`ok`;②`bytes_equal_preimage`,由**生产码** `rollback._bytes_equal`(`rollback.py:259-261`)计算:
|
|
456
|
+
**任一侧取不到字节 ⇒ False**(注释原文「不可证即不认——比对判据 fail-closed」);
|
|
457
|
+
③守卫侧 `_bytes(_disk_path)==pre_b`——此项在"两侧皆空"时可静默判绿(复核 U2,§7.3/§8.1 第 14 条),
|
|
458
|
+
属**冗余项**;①②承担 fail-closed 语义。另如实说明:R4 三条**未**做 `bool(pre_b)` 非空前置
|
|
459
|
+
(R1/R3 有),复核的非空取证(前像 446B)只覆盖 confirm C 链(§7.2)——full 三链的"非空"取证
|
|
460
|
+
缺口如实登记(与 U2 同族)。
|
|
461
|
+
—— **v1.2 更新(2026-10-03)**:该「冗余项」**已收口**——R4 三条第三合取项加 `bool(pre_b/pre_mb/pre_db)`
|
|
462
|
+
非空前置,并新增三条「执行时点前像+盘面快照双非空」前置取证(§12.3;§8.1 第 14 条已销项)。
|
|
463
|
+
上段为**收口前口径**。
|
|
464
|
+
|
|
465
|
+
附加判据:**full 档全程零变更单**(直落面不产单——与 confirm 链的分界);
|
|
466
|
+
**现状钉(留池,非背书)**:full 档 C/B/D 直落路径**不自动拍前像**——三节点的 `preimage`
|
|
467
|
+
审计行全部来自演练侧(`pid=drill_*`);设计 §六 义务①「一切破坏性动作先留前像」在该路径
|
|
468
|
+
**未接线**(见 §八.1 第 4 条)。若将来接线,该断言转红、须同步更新。
|
|
469
|
+
|
|
470
|
+
### 5.3 跨面性证据
|
|
471
|
+
|
|
472
|
+
- **三个不同入口面**:写链(`writepipe`)/ 插件面(`mcp_server._dispatch`)/ 工具面(`cg op=forget`)
|
|
473
|
+
——不是同一函数三呼;
|
|
474
|
+
- **执行桥**:三条 confirm 链的落盘都经 `mdcos._mutation_execute`(前像/影响面/回滚命令补全);
|
|
475
|
+
- **回滚 CLI 真子进程**:命令串 `python -X utf8 -m md_cg.rollback_cli --root <root> --pid <pid>`
|
|
476
|
+
经 `shlex` 切分、`python` 令牌换本进程解释器、`shell=False`、显式 UTF-8 后实跑(读数取自子进程
|
|
477
|
+
stdout 的 JSON);子进程回滚后父进程经 `_maybe_reload_index()` 刷新读面;
|
|
478
|
+
- **残差核对**:每链三面(索引条目/边/聚合行)+ C 链的条目重算对拍。
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## 六、验证数字
|
|
483
|
+
|
|
484
|
+
### 6.1 守卫正向(〔本报告实跑〕,命令行逐条)
|
|
485
|
+
|
|
486
|
+
| 命令 | 读数 | 退出码 | 耗时 |
|
|
487
|
+
|---|---|---|---|
|
|
488
|
+
| `python -X utf8 -m md_cg.test_autonomy_modes` | **159 通过,0 失败**(批次④时 149;+10 = M 组) | 0 | 0.6s |
|
|
489
|
+
| `python -X utf8 -m md_cg.test_mode_parity` | **56 通过,0 失败**(P 15 / Q 8 / R 33) | 0 | 3.0s |
|
|
490
|
+
| `python -X utf8 -m md_cg.test_mutation_rollback` | 59 通过,0 失败(未改) | 0 | 0.6s |
|
|
491
|
+
| `python -X utf8 -m md_cg.test_autonomy_admission` | 64 通过,0 失败(未改) | 0 | 0.3s |
|
|
492
|
+
|
|
493
|
+
本报告另核实:Q 组 `SAME(15)/DIFF(0)`、负对照 DIFF 恰为 `[A_add, full_A]`、`provenance` 自证、
|
|
494
|
+
R1 CLI 负对照 `decision_not_found` 均按预期打印(§四 §五 照录)。
|
|
495
|
+
|
|
496
|
+
> **v1.2 更新(补强批次)**:`test_autonomy_modes` **173/0**、`test_mode_parity` **59/0**(各 rc=0);
|
|
497
|
+
> `test_mutation_rollback` 59/0 与 `test_autonomy_admission` 64/0 未改。见 §12.7。
|
|
498
|
+
> **F1 收口轮更新(2026-10-03)**:`test_autonomy_modes` **177/0**、`test_mode_parity` **63/0**
|
|
499
|
+
> (各 rc=0;各 +F1 组/`g_s` 组 4 条)——见 §十五.4。
|
|
500
|
+
|
|
501
|
+
### 6.2 定点变异自证(`--mutate`,与 `test_neg_condition_hits.py` 同口径)
|
|
502
|
+
|
|
503
|
+
**`test_autonomy_modes.py`:17 处,逐处「命中预期」**〔本报告实跑,rc=0,11.1s;未变异基线红项 0〕
|
|
504
|
+
(**v1.2 后=23 处实存〔v1.2 批次快照〕;F1 收口轮后=24 处(③已恢复)**,读数与编号对照见 §12.7/§十五)。
|
|
505
|
+
其中 6 处计数因 M 组并入而**实测校准**,另新增 1 处:
|
|
506
|
+
|
|
507
|
+
| # | 变异 | 红项数(预期=实测) | 与上批差异 |
|
|
508
|
+
|---|---|---|---|
|
|
509
|
+
| ① | 档位不生效(配置档位恒返回表内缺省) | **20** | 17→20(+M1b×2、M1c×1) |
|
|
510
|
+
| ② | confirm 也直落(decide 把 confirm 格判成 allow) | **43** | 40→43(+M1×2、M1d×1) |
|
|
511
|
+
| ③ | 矩阵整表坍缩成 full | **55** | 47→55(+M 组 8) |
|
|
512
|
+
| ④ | 写链档位闸不生效(`_gate_autonomy` 恒放行) | **8** | 6→8(+M1×2) |
|
|
513
|
+
| ⑤ | 合并档位闸不生效(`_autonomy_gate_merge` 恒放行) | **14** | 10→14(+M1b×2、M1c×2) |
|
|
514
|
+
| ⑥ | 删除档位闸不生效(`forget_gated` 直调软删) | **5** | 4→5(+M1d×1) |
|
|
515
|
+
| ⑦–⑯ | (其余十处,见文件表内注释) | 18/4/20/2/15/2/3/2/8/9 | 不变 |
|
|
516
|
+
| **⑰(新)** | **E 面被档位闸阻塞(`freshness.recalc` 咨询 `decide(E_WEIGHT)`)** | **2** | — |
|
|
517
|
+
|
|
518
|
+
**`test_mode_parity.py`:7 处**〔本报告实跑 **9 次运行中 8 次 rc=0、7 处逐处「命中预期」**;
|
|
519
|
+
1 次例外=第 1 次运行(第 ⑥ 处红项数 3≠2),见 §6.5〕(**v1.2 后=8 处**,见 §12.7 对照表):
|
|
520
|
+
|
|
521
|
+
| # | 变异 | 红项数 | 说明 |
|
|
522
|
+
|---|---|---|---|
|
|
523
|
+
| ① | 档位不生效(配置档位恒返回表内缺省) | 5 | 切档锚(full)+ R4 四条直落判据(§十一 明文「注入『档位不生效』必红」) |
|
|
524
|
+
| ② | accept 不执行(执行桥空转) | 13 | 三条 confirm 链的「落」与 CLI 后置判据 + R5 汇总 |
|
|
525
|
+
| ③ | 回滚不落盘(`_land` 空转) | 5 | **只有 R4 五条**——confirm 链回滚在 CLI 子进程内执行,**进程内变异不跨进程**(如实登记,CLI 腿判别力由 ②/④ 的状态面与输入侧负对照承担) |
|
|
526
|
+
| ④ | 执行记录不落 `mutation`(`rec["mutation"]` 摘除) | 14 | confirm 三条链的 CLI 后置判据整体失效(读取源断链) |
|
|
527
|
+
| ⑤ | 写链 full 档放行分支失效(full 也出单) | 4 | P1 两条 + R4 两条(切档对拍必须抓住它) |
|
|
528
|
+
| ⑥ | E 面被档位闸阻塞(`freshness.recalc` 按档名分叉) | 2 | P2 读数对拍 + 落盘 fm 对拍(稳定性见 §6.5) |
|
|
529
|
+
| ⑦ | E 面被档位闸阻塞(`weights.recalc` 按档名分叉) | 2 | 同上(另一族:importance 轴) |
|
|
530
|
+
|
|
531
|
+
**合计 24 处定点变异(am 17 + mp 7)**——完整口径=「24 处条目;`test_autonomy_modes` 侧多次实跑
|
|
532
|
+
逐处命中;`test_mode_parity` 侧 8/9 次运行逐处命中、1 次第 ⑥ 处红项数不符(§6.5)」:**不是**
|
|
533
|
+
无例外的恒真(前版「全部命中预期」的措辞过宽,本版更正)。两文件均带
|
|
534
|
+
**ANCHOR-MISS → 退出码 2**(fail-closed)与
|
|
535
|
+
**未变异基线红项=0** 的前置判据(基线即红时变异核验判 FAIL)。
|
|
536
|
+
**fail-closed 判据实测**(〔工作流采集〕+〔独立复核〕):两守卫的锚点自检路径各注入一条锚点必然缺失的变异
|
|
537
|
+
(内存内注入、不改文件)⇒ 均打印 ANCHOR-MISS 并**返回退出码 2**;oracle 路的 `ORACLE-MISS ⇒ 退出码 2`
|
|
538
|
+
由〔独立复核〕以「PATH 置空(git 不可用)」实测(P 组 15 条照跑后打印 `ORACLE-MISS git 不可用`,rc=2)。
|
|
539
|
+
**删断言探针**〔独立复核,内存改组表、零文件改动〕:am 单条变异③ 全分组红 55 命中预期 →
|
|
540
|
+
内存删 `g_m` 后同条红 47 ≠ 55「红项数不符」FAIL rc=1;mp 单条变异③(`_land` 空转)全分组红 5 →
|
|
541
|
+
删 `g_r` 后红 0 ≠ 5 FAIL rc=1——证「红项数恰好吻合」不是无判别力的恒真判据。
|
|
542
|
+
|
|
543
|
+
> **v1.2 更新(补强批次)**:上两表为**步骤⑤批次**读数(历史,不回填)。补强批次后——
|
|
544
|
+
> `test_autonomy_modes` **23 处实存**〔v1.2 批次快照〕(旧 ⑰「E 面被档位闸阻塞」已摘除,新增 ⑰–㉔ 共 8 处;
|
|
545
|
+
> ①27 ②46 ⑨22 重校准到位;**③「矩阵整表坍缩」条在工作树被删、仅剩注释——F1 更正,见 §十三.5**)、
|
|
546
|
+
> `test_mode_parity` **8 处**(新增「`_bytes` 恒空」红 11);逐处读数见 §12.7。
|
|
547
|
+
> **F1 收口轮更新(2026-10-03)**:③ 条**已恢复**(红 63 实测)⇒ `test_autonomy_modes`
|
|
548
|
+
> **24 处实存**(编号 ①–㉔ 无缺口);两守卫各新增**变异表完整性自检**(缺项 ⇒ exit 2、报缺口
|
|
549
|
+
> 编号)与判别力钉(各红 3)——见 §十五;**现行读数以 §十五 为准**。
|
|
550
|
+
|
|
551
|
+
### 6.3 回归(定向与全量)
|
|
552
|
+
|
|
553
|
+
```
|
|
554
|
+
python -X utf8 scripts/run_tests.py md_cg → rc=0
|
|
555
|
+
===== SUMMARY 231/231 通过,3 跳过(依赖缺失/平台不符) ===== (耗时约 222–228s)〔工作流采集〕
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
> **v1.2 复跑(补强批次)**:`python -X utf8 scripts/run_tests.py md_cg` → **231/231 通过,3 跳过**
|
|
559
|
+
> (最终树复跑,读数与上格一致)〔本报告实跑〕。**全量与容器本批未跑**(任务书明文留给脚本)。
|
|
560
|
+
> **F1 收口轮更新(2026-10-03)**:`run_tests.py md_cg` **231/231、3 跳过**(13 次实跑:11 绿、
|
|
561
|
+
> 2 次 230/231——1 次捕获项名 `test_p27_docindex`〔非本批两守卫〕,见 §十五.5);
|
|
562
|
+
> **全量与容器未跑**(留给收官脚本)。
|
|
563
|
+
|
|
564
|
+
- **全量 `python -X utf8 scripts/run_tests.py`(缺省全量,jobs=4)**〔本报告实跑〕:**rc=0**,
|
|
565
|
+
`===== SUMMARY 308/308 通过,5 跳过(依赖缺失/平台不符) =====`(耗时 230.7s)
|
|
566
|
+
——与工作流采集读数(308/308、5 跳过、rc=0)**逐字一致**。目标总数=**313**(本报告实跑
|
|
567
|
+
`run_tests.py --list`:md_cg 234 · compiler 18 · swarm 16 · scripts 17 · hive 28),
|
|
568
|
+
313 = 308 通过 + 5 跳过,两读数闭合。
|
|
569
|
+
|
|
570
|
+
**装置差异与耗时/跳过口径(回应读者问)**:
|
|
571
|
+
|
|
572
|
+
① **两个「全量」读数装置不同**:§二 采集里的 `226/230`(含「4 项环境红」)是 **HEAD 副本树装置**
|
|
573
|
+
(`git archive` 导出树 + 注入腿 + 回归)的读数,「红集合=基线 4 项环境红:rust release 二进制缺失×3
|
|
574
|
+
+ generation_guard 判别力」系**采集侧自陈**;本节的 `308/308` 是**工作树**上的全量。两者装置不同、
|
|
575
|
+
集合口径不同(230 vs 313 目标),**不可直接对比**。一处结构性差异本报告实查:`git archive` 导出树
|
|
576
|
+
**不含 gitignored 构建产物**,而工作树里 `hive/target/release/hive` 与 `rust/target` **在位**
|
|
577
|
+
(`os.path.exists` 实查皆 True)——依赖 rust 构建产物的测试在副本树装置里缺面。**「4 项环境红」的
|
|
578
|
+
去向本报告未在副本树装置复跑、未逐项定位(不猜)**;可确证者:它们属采集装置基线、与档位改动无关,
|
|
579
|
+
且本节工作树读数中无此 4 项。
|
|
580
|
+
② **耗时**:定向 `run_tests.py md_cg`(222–228s)与全量(230.7s)是**同一入口、同一并发池**
|
|
581
|
+
(`ThreadPoolExecutor`,`--jobs 4`,`scripts/run_tests.py:227-230`);全量只比定向多跑其余四组
|
|
582
|
+
(79 个目标,见上),这些测试轻、被并发池填隙调度,总时长接近;组级耗时明细未留存。
|
|
583
|
+
③ **「5 跳过」的构成**(本报告读码 `scripts/run_tests.py:155-180`):**3 项依赖缺失**
|
|
584
|
+
(`md_cg.test_p44_md_whitebox` / `md_cg.test_md_access_parity` / `md_cg.test_wisdom_md_store`——
|
|
585
|
+
依赖 gitignored 白箱库与 md 语料,本报告实查二者均不在工作树)+**2 项负载敏感**
|
|
586
|
+
(`swarm.tests.bench_swarm_scale` / `bench_swarm_parallel`,`--jobs 4` 下跳过;Windows 上
|
|
587
|
+
`swarm.tests.test_swarm_fault` 不跳过)——与 rust 无关。分组闭合:md_cg 234 = 231 通过 + 3 跳过
|
|
588
|
+
(与上格定向读数一致);其余四组 79 = 77 通过 + 2 跳过。
|
|
589
|
+
|
|
590
|
+
### 6.4 容器两栈(〔工作流采集〕;**本报告未复跑**)
|
|
591
|
+
|
|
592
|
+
| 栈 | 既定命令(`README.md:585-589` 同款) | 读数与退出码 |
|
|
593
|
+
|---|---|---|
|
|
594
|
+
| 栈一(linux:rust + python 全量含全部守卫 + smoke) | `docker run --rm -v <repo>:/work -w /work -e CARGO_TARGET_DIR=/tmp/target rust:bookworm bash scripts/linux_verify.sh full` | **rc=0**;`结果: 22 pass / 0 fail`;`[PASS] smoke_test (linux)`;`=== 汇总: 38 pass / 0 fail ===` |
|
|
595
|
+
| 栈二(node 侧:npm ci + build + ts test) | `docker run --rm -v <repo>:/work -w /work node:22-bookworm bash -c "npm install --include=dev && npm run build && node --import tsx --test test/*.test.ts"` | **rc=0**;Node TAP:`# cancelled 0` / `# skipped 3` / `# todo 0` / `# duration_ms 11382.562122` |
|
|
596
|
+
|
|
597
|
+
**本报告未复跑的理由(如实)**:①本报告轮的边界=**只改本报告文件**(不动工作区其他面);
|
|
598
|
+
两条容器腿会向**工作区**写入构建产物——`hive/target/`(`scripts/linux_verify.sh:28-32` 把 release
|
|
599
|
+
二进制拷回挂载点)与 `lib/`、`node_modules/`(栈二 npm install/build)——三者均在 `.gitignore`
|
|
600
|
+
忽略面内(本报告实读:`node_modules/`、`/lib/`、`/hive/target/` 逐项在案),写入虽不留 git 痕迹、
|
|
601
|
+
但确向工作区落盘;②两栈数字取自工作流采集(收官脚本实跑)。这不是「跑过」——如实标注为**未复跑**。
|
|
602
|
+
|
|
603
|
+
### 6.5 稳定性观察(〔本报告实跑〕新增)
|
|
604
|
+
|
|
605
|
+
`md_cg.test_mode_parity --mutate` 在本报告环境下共运行 **9 次**(同一命令、同一工作树):
|
|
606
|
+
|
|
607
|
+
- **第 1 次运行 FAIL(rc=1)**:变异 ⑥(E 面按档名分叉)报「红项=3 **红项数不符(预期 2)**」——
|
|
608
|
+
3 条红项=**P2 freshness 读数对拍 + P2 freshness 落盘 fm 对拍**(⑥ 自身的预期 2 项,属该变异正确
|
|
609
|
+
命中)+多红的 1 条「Q 负对照(对拍有判别力)」;其余 6 处变异命中预期。该轮完整 stdout 已存档:
|
|
610
|
+
`%TEMP%\s5_verify\run2_md_cg_test_mode_parity_mutate.log`(文件名 `run2` 是后台批次内的 job 序号,
|
|
611
|
+
非运行次序;本节的「第 1 次运行」即该 job)。
|
|
612
|
+
- **其后 8 次全部 PASS**(2 次即时复跑+6 次统计复跑;rc=0,单次 17.2–20.9s;各轮 7 处红项数均为
|
|
613
|
+
5/13/5/14/4/2/2、无「红项数不符」)⇒ **合计 9 次运行、1 次 FAIL / 8 次 PASS**。
|
|
614
|
+
- **影响面(据 FAIL 轮存档逐条核对)**:该轮 3 条红项**不含** §4.2 的主判据(「15 项 SAME/0 DIFF」)
|
|
615
|
+
——主结论(工作树 ≡ HEAD 导出树)在该轮依然成立;受影响的是**负对照的「恰好」强断言**
|
|
616
|
+
(DIFF 集合的精确性)——即「对拍有判别力」这条**辅助证明**在小概率下不精确,而非主判据失效。
|
|
617
|
+
- **未定因**(如实):候选面=Q 负对照两次子进程运行间的偶发差异或环境时序;本报告**未做定位实验**,
|
|
618
|
+
不猜根因。登记为不稳定读数风险(§八.1 第 13 条)。**升级标准**:本报告不代定流程阈值(归下一批/
|
|
619
|
+
复核);建议——下一批复跑若再现,即升级为「必须定位」项,不以「偶发」反复掩盖。
|
|
620
|
+
|
|
621
|
+
---
|
|
622
|
+
|
|
623
|
+
## 七、独立复核判定与 uncovered
|
|
624
|
+
|
|
625
|
+
### 7.1 【判定】DEFER(原样摘录)
|
|
626
|
+
|
|
627
|
+
> DEFER——交付物主体成立(四套守卫读数、24 处定点变异、对拍、fail-closed 面均由我在系统临时沙箱
|
|
628
|
+
> 独立复现),但「每档守卫完备性清点与补缺」有一条**修前腿在现行树上仍 0 红存活**(非 gated 直写面
|
|
629
|
+
> plan 档 C 档位闸无行为断言,四套守卫全绿),且收官报告未登记该面 ⇒ **不构成 ACCEPT**。
|
|
630
|
+
|
|
631
|
+
**判定状态与处置的关系(回应读者问)**:DEFER 是**独立复核轮**的结论,本报告如实摘录、未改写;
|
|
632
|
+
「登记入池」(§八.1 第 12 条)只补上「报告未登记该面」的**信息缺口**——**不等于修复 U1、
|
|
633
|
+
也不等于解除 DEFER**。解除路径=下一批实施轮补 U1 断言(形态同 M1)后,由**复核方/编排侧**重跑
|
|
634
|
+
重判;最终判定权归复核方与编排侧,本报告不代裁。
|
|
635
|
+
|
|
636
|
+
### 7.2 复核做法与读数(复核侧材料,摘录)
|
|
637
|
+
|
|
638
|
+
**材料来源**:工作流自省在本会话不可用;「修前各腿」取自修前复现阶段留在系统临时区的原始产物
|
|
639
|
+
(`%TEMP%\s5_repro_z42hhr0w\exp\mutate_probe2.py` 的 V1'–V4' 追加式注入表 +
|
|
640
|
+
`out\mutate_probe2_report.json`);设计真源与工作流 contract 已实读。
|
|
641
|
+
|
|
642
|
+
**① 修前各腿输入在现行树重放**(复核自写 `replay.py`/`replay_head.py`,只读复制 md_cg 到临时副本树):
|
|
643
|
+
|
|
644
|
+
- HEAD 导出树(`git archive HEAD`,只读):四腿各 rc=0、149 通过 0 失败、红 0 —— **修前缺口成立**。
|
|
645
|
+
- 现行树:基线 rc=0 159/0;V1'→157 通过 2 失败(M1×2:写链 C 覆写不再出单且正文被改);
|
|
646
|
+
V2'→155/4(M1b×2+M1c×2);V3'→158/1(M1d:工具面 D 直删);**V4'→159 通过 0 失败、0 红——仍存活**。
|
|
647
|
+
- V4' 行为差实测(复核自写 `dw_scn.py`,plan 档 + `mcp_server.mdcg_remember` 非 gated + 既有节点):
|
|
648
|
+
原树 `{moved_to: review_queue, committed: false, 正文未改, 变更单 1 张}`;
|
|
649
|
+
V4' 树 `{moved_to: null, 正文被直接覆写, 变更单 0 张}`——注入确实改变行为、**非空转**。
|
|
650
|
+
- 四套守卫对 V4' **全绿**(`test_autonomy_modes` 159/0;`test_mutation_rollback` 59/0;
|
|
651
|
+
`test_autonomy_admission` 64/0;`test_mode_parity` 56/0 rc=0——在带自建 git 仓的 V4' 副本上跑**含 Q 路**的完整版)。
|
|
652
|
+
把该闸(`mcp_server.py:3373` `_dec = _am.decide(_action)`)**不限档位**摘除的变体同样全绿
|
|
653
|
+
(am 159/0、mp `--no-oracle` 48/0)⇒ 该落点在 **plan 与 confirm 两档均无行为断言**。
|
|
654
|
+
对照:`mcp_server.py:3360-3364` 自注「本分支是热写入路径的第二落点(另两处=writepipe 链尾、
|
|
655
|
+
remember_gated)」——M 组 M1 只走 writepipe 链(`_pipe().execute`),未触此分支。
|
|
656
|
+
- 退化/容错路径可判定取证(复核自写 `probe_deg.py`,内存故障注入不改文件):`_bytes` 恒空时
|
|
657
|
+
R 组红 3 / 绿 30——R1 逐字节、R3 节点复位判红(有 `bool(pre_b)` 门槛),而 R2「回滚后盘面逐字节」、
|
|
658
|
+
R3 首个逐字节、R4 三条的第三合取项在两侧皆空时 `b''==b''` **静默判绿**
|
|
659
|
+
(与其「缺失 ⇒ 判不相等」声明相悖,见 7.3 U2)。
|
|
660
|
+
- 可判定比较实例(复核自写 `drill_scan.py`):confirm 档 C 链 落→accept→回滚 CLI 后:
|
|
661
|
+
索引节点集合 `{rev_…_r1, sc_1}` == 独立磁盘扫描集合(`set_equal=true`,跨 self/knowledge 层);
|
|
662
|
+
前像 446B 非空、回滚后盘面 446B 且逐字节==前像(非空==非空,防「空池也不抛」);
|
|
663
|
+
CLI rc=0、ok=true、`bytes_equal_preimage=true`、正文复位 true。
|
|
664
|
+
|
|
665
|
+
**② 合法输入与改动前逐位一致**(复核自写 `obs.py`,**不 import 守卫**;17 项场景):
|
|
666
|
+
工作树 vs HEAD 导出树 **17 项 SAME / 0 DIFF**;同树两次跑掩码后 0 键差(掩码前唯二差异键=
|
|
667
|
+
前像微秒文件名与 `rev_` 随机 id,纯时钟/熵面);生产码零改动机械佐证:`git diff` 仅
|
|
668
|
+
`md_cg/test_autonomy_modes.py`(+212/−29),`test_mode_parity.py` 为未追踪件。
|
|
669
|
+
|
|
670
|
+
**③ 守卫本体+变异自证**(仓根直跑):读数与 §6.1/§6.2 一致(am 159/0、17 处逐处 20/43/55/8/14/5/
|
|
671
|
+
18/4/20/2/15/2/3/2/8/9/2 rc=0;mp 56/0、7 处 5/13/5/14/4/2/2 rc=0;负对照 DIFF 恰好
|
|
672
|
+
`[A_add, full_A]`);删断言探针同 §6.2。
|
|
673
|
+
|
|
674
|
+
**④ 不得静默面可观测**:ANCHOR-MISS(内存往变异表插一条锚点缺失条目 ⇒ 两守卫 `_anchor_check` 命中、
|
|
675
|
+
`main()` 与 `_mutate_mode()` 均 rc=2 且打印「ANCHOR-MISS …」「锚点自检:FAIL(fail-closed,exit 2)」);
|
|
676
|
+
ORACLE-MISS(PATH 置空 ⇒ mp 打印「ORACLE-MISS git 不可用」+「oracle 自检:FAIL(fail-closed,exit 2)」,
|
|
677
|
+
rc=2)。
|
|
678
|
+
|
|
679
|
+
**硬边界自证**(复核):全部实验库根在 `%TEMP%`(副本树+合成库),未触在役数据根;
|
|
680
|
+
未 `git add/commit/push`;复核自建产物(52 个守卫遗留沙箱 + r5_review 工作区 + r5_v4git 等)已全部删除;
|
|
681
|
+
未跑全量与容器(按要求留给脚本)。
|
|
682
|
+
|
|
683
|
+
### 7.3 uncovered(复核列出,本报告原样登记)
|
|
684
|
+
|
|
685
|
+
- **U1(关键)**:**非 gated 直写面 plan 档 C 档位闸无行为断言**——`mcp_server.py:3373`
|
|
686
|
+
(`_dec = _am.decide(_action)`);现行树 V4' 注入 **0 红存活**;四套守卫全绿;
|
|
687
|
+
不限档位摘除的变体亦全绿(plan 与 confirm 两档均无断言)。⇒ 本批「每个 plan 档热路径落点都有
|
|
688
|
+
断言」的声明**在该面不成立**;收官报告初版未登记该面(本报告 §八.1 第 12 条已登记,此即闭环)。
|
|
689
|
+
- **U2**:**R 组三处断言的「空池静默判绿」语义**——R2「回滚后盘面逐字节」、R3 首个逐字节、
|
|
690
|
+
R4 三条的第三合取项:两侧皆空(`b''`)时判绿,与 `_bytes` 文档「缺失 ⇒ 判不相等」的声明相悖
|
|
691
|
+
(R1 逐字节与 R3 节点复位有 `bool(pre_b)` 门槛、会判红——同组内两种口径并存)。
|
|
692
|
+
|
|
693
|
+
### 7.4 本报告对 7.3 的处置(只写报告、不改任何文件面,红线)
|
|
694
|
+
|
|
695
|
+
- U1:登记入 §八.1 第 12 条(下一批补丁项);§3.4 矩阵加「入口面粒度」声明;§一 1.2 表 S4 标注「修后仍存活」。
|
|
696
|
+
- U2:登记入 §八.1 第 14 条(判据语义待收口)。
|
|
697
|
+
- **U1/U2 为何不在本批修(回应读者问)**:①本批(步骤⑤批次)的修复面在**实施轮**已冻结为
|
|
698
|
+
「六格补缺 + 两守卫」(§三),**U1 是复核阶段(实施轮结束之后)的新发现**——不在实施轮契约内;
|
|
699
|
+
②本报告轮的边界=**只改本报告文件**(任务书明文);③若在报告轮顺手改守卫,等于复核后自行加码、
|
|
700
|
+
且绕开复核——故 U1 的修复(**新增** plan×C 直写面断言,形态同 M1)与 U2 的收口(改断言/文案)
|
|
701
|
+
均属**下一批实施轮**,且须重过复核。
|
|
702
|
+
|
|
703
|
+
---
|
|
704
|
+
|
|
705
|
+
## 八、边界与未覆盖(留池汇总)
|
|
706
|
+
|
|
707
|
+
### 8.1 留池(延续登记 + 本批新增)
|
|
708
|
+
|
|
709
|
+
| # | 项 | 状态 |
|
|
710
|
+
|---|---|---|
|
|
711
|
+
| 1 | **生产接线**(`settle` 的调用点:MCP 启动面/常驻巡检) | **仍未接线**(沿用步骤④ §六.1);本批只做**只读方案评估**(§8.2) |
|
|
712
|
+
| 2 | **计划输入面**(plan 档 A/B/E 须命中计划步骤) | 未落;M2⑫ 把设计内语义单钉(无计划 ⇒ forbid);**v1.2 更正**:E 面接线后本项**语义变紧**——`e_gate(plan=None)` ⇒ plan 档 E 一律 fail-closed,「命中计划步骤」的 allow 分支同样待本项接线(守卫面 M2①⑥⑧⑩ 是现状判据) |
|
|
713
|
+
| 3 | **E 面档位闸接线** | ~~未落;M2 前两条把现状(三档同链)如实钉住;变异 ⑰ 是接线形态的注入面~~ → **v1.2 已落**(2026-10-03):`decide(E_WEIGHT)` 接入四处 **apply 写盘入口**(`weights.recalc` / `freshness.recalc` / `lifecycle.set_state` / `lifecycle.backfill`),判定单点 `autonomy_modes.e_gate()`;confirm/full 逐位不变(P2/Q/E 面对拍 + M2④);**未接三处**(`lifecycle.stamp` 属 B 链/库层 `require_transition` 禁接线/分数类回滚面待裁)已登记为新留池第 15–17 条(§十二.4) |
|
|
714
|
+
| 4 | **full 档直落不自动拍前像**(设计 §六 义务①) | 未接线;R4「现状钉」以 preimage 审计行人证(全部来自演练侧) |
|
|
715
|
+
| 5 | 回滚台账 / 「可回滚清单」(步骤③ 留池 3/9) | 未做 |
|
|
716
|
+
| 6 | `rollback_cli` 权限面(步骤③ 留池 6/10) | 未做 |
|
|
717
|
+
| 7 | R3 归档分片离线全扫(步骤④ §六.2) | 未做 |
|
|
718
|
+
| 8 | `_protected_history` 前像无轮转/清理(步骤③ 留池 5) | 未做 |
|
|
719
|
+
| 9 | 加密库前像逐字节边界(步骤③ 留池 4) | 如实登记(本批全部在非加密合成库) |
|
|
720
|
+
| 10 | 沙箱 `rmtree` 在 Windows 被锁句柄挡住(步骤② 留池 1) | 未定根因;本批四套守卫同款行为 |
|
|
721
|
+
| 11 | plan 档 CONFIRM 文案写「变更确认档(MDCG_AUTONOMY=plan)」 | 现状文案与档名轻微不对齐(语义正确:C/D 在 plan 与 confirm 同格);一行级,未修,登记 |
|
|
722
|
+
| **12(新)** | **非 gated 直写面 plan 档 C 档位闸无行为断言**(`mcp_server.py:3373`;复核 U1) | ~~**本轮明确不修**:V4' 注入在现行树 0 红存活(含不限档位摘除变体);四套守卫全绿;登记为**下一批补丁项**~~ → **v1.2 已销项**(2026-10-03):M1e①–⑤(plan/confirm/full 三档行为断言)+定点变异⑰(不限档位摘除 ⇒ 红 3)/⑱(V4' 追加式注入 ⇒ 红 2);基线 173/0。**判定仍归复核方**(销项=缺口已补,非 ACCEPT) |
|
|
723
|
+
| **13(新)** | **`test_mode_parity --mutate` 变异 ⑥ 偶发红 3≠2**(§6.5) | 本报告环境下**第 1 次运行 1 次 FAIL**(多红 Q 负对照条目)、其后 8 次复跑通过;**未定因**(未做定位实验);登记为观察项,下一批复跑观察(再现即升级为必须定位项) |
|
|
724
|
+
| **14(新)** | **R 组三处断言的「空池静默判绿」语义**(复核 U2) | ~~判据语义待收口…;本轮未修~~ → **v1.2 已销项**(2026-10-03):统一为「**缺失 ⇒ 判不相等**」——非空前置 5 处(R2「回滚后盘面逐字节」、R3 首个逐字节、R4 C/B/D 三条第三合取项)+**R4 三条 full 链非空前置取证**(前像与盘面快照双非空,3 条新断言);定点变异「`_bytes` 恒空」⇒ 红 **11**(收口前复核探针读数:红 3 / 绿 30)。守卫 56→**59/0** |
|
|
725
|
+
| **15(新,v1.2)** | `lifecycle.stamp` 未接 E 闸(**设计 §一 E 行点名该入口**) | **有意不接**:`stamp` 无 IO(就地改 fm,落盘由调用方做),两调用方 `forgetting.reinforce` / `writelimit.converge_into` 均属 **B 合并/趋同链**(B 已有闸且 plan 档上游先拦);在 E 闸里拦=用 E 判定挡 B 动作,且与守卫 G 组「合并原语不含档位判据」的机制前提相抵。属**设计面待裁**(是否要一条独立的 B/E 双判据) |
|
|
726
|
+
| **16(新,v1.2)** | 库层 `MdCG.add` 的 `lifecycle.require_transition` 面未接 E 闸 | **禁接线**(守卫 G 组结构判据钉死;「accept 执行桥直调库层越过确认判定」以此为前提)。登记为设计面边界,非缺口 |
|
|
727
|
+
| **17(新,v1.2)** | 分数类**回滚**面(`freshness.rollback` / `weights.rollback`)未接 E 闸 | **待裁**:回滚是「破坏可逆」准入读数 R3 与设计 §四 第 4 条的兑现面,plan 档拦回滚与设计语义相抵;本批不自行扩面(`e_gate()` docstring 逐条登记) |
|
|
728
|
+
| **18(新,v1.2 复核轮)** | **F1:变异表③「矩阵整表坍缩」条被删、「24 处」声称与产物不符**(守卫侧实存 23 条;`--mutate` 实跑 23 处——§十三.5) | **已销项**(2026-10-03 **F1 收口轮**):**③ 条已恢复**(expect 按现行树实测校准 = 红 **63**;编号 ①–㉔ 实存 **24 处**)+ 两守卫新增**变异表完整性自检**(缺项 ⇒ fail-closed exit 2、报缺口编号——删条目即机械报错、不靠人工发现)+ 判别力钉;事实链/恢复记录/自检机制/重跑读数见 **§十五**。**判定仍归复核方**(销项=缺口已补,非 ACCEPT) |
|
|
729
|
+
|
|
730
|
+
### 8.2 生产接线方案评估(只读;**13 处 full 夹具 / 空库击穿问题**)
|
|
731
|
+
|
|
732
|
+
**现状机制(实读)**:`autonomy_modes.settle()`(`:223`)是生效面的**唯一写入点**;`mode()`(`:190`)
|
|
733
|
+
/ `decide()`(`:317`)热路径**只读结算态、零 IO**;配置档位 ≠ full 时 settle 零 IO 直接返回
|
|
734
|
+
(这一步已由缓存频度判据钉死——`test_autonomy_modes.py` **L3**`:1027-1037`(plan/confirm 零读数扫描)
|
|
735
|
+
与 **L6**`:1050-1059`(TTL 内重复结算不重扫),对应 `test_autonomy_admission.py` 的 **E3/E4**`:481-502`
|
|
736
|
+
与 **E7**`:520-535`:**不得让每次 `decide` 都全库扫描**;编号落点明细见 §3.5)。
|
|
737
|
+
|
|
738
|
+
**13 处夹具清单(本批只读复核,`file:line` 逐处实读)**——全部在**空合成库**上以
|
|
739
|
+
`MDCG_AUTONOMY=full` 跑全链:`test_b1_auto_id_multiproc.py:59`、`test_b1b2_write_face.py:49`、
|
|
740
|
+
`test_b3_merge_keeps_content.py:81`、`test_i50b_defer_to_review_queue.py:76`、
|
|
741
|
+
`test_i50d_importance_source.py:84`、`test_i50e_readside_protection.py:94`、`test_linkref.py:25`、
|
|
742
|
+
`test_n214_n215_n221_n222_write_face_gates.py:106`、`test_p2_mcp.py:21`、
|
|
743
|
+
`test_p9_forget_protect.py:27`、`test_p9c_dedup_hints.py:52`、`test_protocol.py:34`、
|
|
744
|
+
`test_writelimit.py:30`。
|
|
745
|
+
|
|
746
|
+
**击穿机制(条件化的,不是无条件)**:只有当 `settle` 被**自动**触发时,这 13 处在空库上读数必然
|
|
747
|
+
不满足 ⇒ 生效档位回落 `confirm` ⇒ 破坏性动作由「直落」变「出单」,其 full 档断言整体转红。
|
|
748
|
+
**已经存在「真拉服务进程」的通道**(本报告**只读复核**,`file:line` 实读;**4 处 subprocess 调用点 /
|
|
749
|
+
3 个文件**):`test_p2_mcp.py:60-63`(`subprocess.Popen([sys.executable, "-m", "md_cg.mcp_server"], …)`)、
|
|
750
|
+
`test_b1_auto_id_multiproc.py:148-152`(worker Popen 子进程)、
|
|
751
|
+
`test_i50e_readside_protection.py:391-394` 与 `:398-402`(两处 subprocess.run);其余各处走
|
|
752
|
+
`mcp_server` 的导入面/工具面(`_dispatch` / `_protect_call`)。
|
|
753
|
+
|
|
754
|
+
**方案评估(三选一,只读结论)**:
|
|
755
|
+
|
|
756
|
+
- **方案 A(推荐,接线批与夹具改造同批)**:接线点只放**两处**——MCP 启动面
|
|
757
|
+
(`mcp_server.main()` 首次进入时 `settle(root=default_root(), ttl=…)`)与**常驻巡检**(按 TTL
|
|
758
|
+
重结算);**不触碰** `mode()`/`decide()` 热路径(保持零 IO,既有 L6/E7 判据不破)。
|
|
759
|
+
夹具侧同批处置:①**真正走启动面的腿**(上列 4 处 Popen/subprocess 面)显式
|
|
760
|
+
`autonomy_modes.reset_settlement()`(或给合成库喂**满足读数的数据面**——`test_autonomy_admission.
|
|
761
|
+
_satisfying()` 形态可复用);②其余各处为库层/工具面直调,**结构性不受接线影响**(不调 `settle`
|
|
762
|
+
即 `mode()`=env——**已有**:`test_autonomy_modes.py` L5`:1045-1049`、
|
|
763
|
+
`test_autonomy_admission.py` E6`:513-519` / G4`:803-809`);③接线批带守卫:启动面被调用的结构钉
|
|
764
|
+
+ 「未结算 ⇒ 与改动前逐位一致」对拍锚(**已有**:同上 L5/E6/G4)
|
|
765
|
+
+ 「full 未过闸 ⇒ 回落 + alerts」行为钉(**已有**:`test_autonomy_modes.py` L2/L2a/L2b`:1011-1026`、
|
|
766
|
+
`test_autonomy_admission.py` E2`:458-466`)。
|
|
767
|
+
- **方案 B(备选,不推荐首选)**:新增结算开关 env 键(如 `MDCG_AUTONOMY_SETTLE=0`)。代价:
|
|
768
|
+
必须登记进 `AUTONOMY_ENV_KEYS`/`AUTONOMY_ENV_DEFAULTS`(单一入口纪律),并同步 G 组字面量守卫;
|
|
769
|
+
档位语义面与守卫面同时扩大,收益仅是「夹具可无痛跳过」——方案 A 的①已能覆盖同一点。
|
|
770
|
+
- **方案 C(即被本设计否决的形态,明确不采用)**:把 settle 塞进热路径自动结算 ⇒ 13 处夹具
|
|
771
|
+
**立即整体击穿**,且违反 L6/E7 钉死的「热路径零 IO / 不得每次 decide 全库扫描」。
|
|
772
|
+
|
|
773
|
+
**排期建议(只读结论,供宿主面批次参考)**:①先做「夹具侧显式档位声明/读数满足」改造;
|
|
774
|
+
②再接线(启动面 + 巡检);③接线前先采集**在役库** R1–R4 只读读数——若此刻不满足,接线后 full
|
|
775
|
+
会**立即回落 confirm**(对在役行为是变更:破坏性动作变出单),依设计 §七「升档=计划式确认」
|
|
776
|
+
须走计划确认,**不得静默升档**;④验收=全量 `run_tests.py` + 容器两栈 + 在役只读读数复核。
|
|
777
|
+
**本批未实施上述任何一步**(工作树零生产码改动,`git status` 见 §10.2)。
|
|
778
|
+
**在役库现状读数:本报告未采集**(属接线批前置,见排期③)——当前在役库的实际档位与 R1–R4 满足度
|
|
779
|
+
**本报告无数据、不代答**(回应读者问)。
|
|
780
|
+
|
|
781
|
+
---
|
|
782
|
+
|
|
783
|
+
## 九、§十三 全链回顾(①–⑤ 各自提交与守卫编号)
|
|
784
|
+
|
|
785
|
+
| 步 | 提交 | 交付(设计条款) | 守卫面 |
|
|
786
|
+
|---|---|---|---|
|
|
787
|
+
| **①** | `04fc8a11`(+ `a33682eb` / `d5a6a511` 收口 issue50-d/e) | §八① 半重复→DEFER;**同批**「遗忘 DEFER→复核队列」接线(带原文);`writelimit` E 节按标题意图重编码;F1 元数据透传;F2 兜底 id | `md_cg/test_i50a_half_dup_defer.py`(26)· `test_i50b_defer_to_review_queue.py`(34)· `test_i50c_meta_passthrough.py`(30)· `test_i50d_importance_source.py`(32)· `test_i50e_readside_protection.py`(53)· `test_writelimit.py` |
|
|
788
|
+
| **②** | `0960392e` | §三 档位单一入口(`MDCG_AUTONOMY` 缺省 confirm)+热路径 B/C/D 出单+裁决执行桥(含补强四件) | `md_cg/test_autonomy_modes.py` A–J 组(当时 149 条) |
|
|
789
|
+
| **③** | `fd5b94ea` | §四 变更单三字段(前像=执行时点/影响面/回滚命令)+回滚原语通用化+回滚实测 | `md_cg/test_mutation_rollback.py`(59)+ `test_autonomy_modes` K 组 |
|
|
790
|
+
| **④** | `ae519a24` | §七 R1–R4 准入读数+§六 准入闸(含溢出容错/结算失败态 fail-closed) | `md_cg/test_autonomy_admission.py`(64)+ `test_autonomy_modes` L 组 |
|
|
791
|
+
| **⑤** | **本批(工作树,未提交)** | §十一 每档守卫+定点变异自证、不动面对拍(两路)、回滚演练、收官报告 | `test_autonomy_modes.py` **M 组**(+10)+ **`md_cg/test_mode_parity.py`(新,56)**;两文件变异表共 **24 处** |
|
|
792
|
+
|
|
793
|
+
**§十一 验收判据逐条落点**:
|
|
794
|
+
①「每档一只守卫 + 定点变异自证(注入『档位不生效』必红)」——三档守卫面见 §3.4(判定层/热路径
|
|
795
|
+
分档断言),定点变异共 24 处(其中①=「档位不生效」形态两文件各一);**已知例外**:非 gated 直写面
|
|
796
|
+
plan×C 无行为断言(§七 U1、§八.1 第 12 条);
|
|
797
|
+
②「不动面对拍:切档前后 A/E 逐位不变」——§四.1;③「与改动前基线」——§四.2;
|
|
798
|
+
④「回滚实测:每种破坏性动作各演一次落→回滚→逐字节比对前像」——§五(confirm 与 full 各三轮);
|
|
799
|
+
⑤「R1–R4 独立断言与门槛/窗口边界用例」——步骤④ 已落(`test_autonomy_admission` A–D 组,
|
|
800
|
+
门槛刚过/刚不过与 3/30 天窗口边界逐条在案)。
|
|
801
|
+
|
|
802
|
+
> **v1.2 更新(2026-10-03 · 回应读者)**:上表 ⑤ 行与「已知例外」句为**步骤⑤批次口径**(历史)。
|
|
803
|
+
> 补强批次后:①变异表**实存 23 处**(③条被删——F1,§十三.5);②「非 gated 直写面 plan×C 无行为
|
|
804
|
+
> 断言」**已销项**(M1e①–⑤,§12.2);③E 面接线已落(§12.4);④交付面=工作树 5 M+2 未跟踪件
|
|
805
|
+
> (§10 v1.2 注);⑤本行「共 24 处」至此仅为该批次快照——**现行口径见 §12.7**。
|
|
806
|
+
> **F1 收口轮更新(2026-10-03)**:①③ 条**已恢复**(红 63 实测)⇒ 变异表**实存 24 处
|
|
807
|
+
> (③已恢复)**;两守卫另各含**防误删自检判别力钉** 1 条(不占表内编号);**现行口径见 §十五**。
|
|
808
|
+
|
|
809
|
+
---
|
|
810
|
+
|
|
811
|
+
## 十、红线自查与 git 面
|
|
812
|
+
|
|
813
|
+
### 10.1 红线自查(逐条)
|
|
814
|
+
|
|
815
|
+
| 红线 | 实测 |
|
|
816
|
+
|---|---|
|
|
817
|
+
| 不触在役数据根 | 四套守卫的读写全在 `tempfile.mkdtemp` 合成库;oracle 导出树与观测脚本在系统临时区;`MDCG_TEST_LIVE_ROOT` 一律清空(`test_mode_parity.py:86`);`--no-oracle` 之外无任何默认根触达 |
|
|
818
|
+
| 实验走合成库 | 同上;policy 亦为沙箱合成件(`{"forbidden":["FORBIDDEN_WORD"],"required":["PASSED"]}`) |
|
|
819
|
+
| 不改 `data/policy.json` | 未触碰(git status 无该文件) |
|
|
820
|
+
| 不削弱任何 `forbidden` | 步骤⑤批次:未改任何生产码(见 §10.2);**v1.2**:改 4 个生产码文件(§12.4 清单),`data/policy.json` 与所有 `forbidden` 仍零改动(本节效力范围见 §10.2 末 v1.2 注) |
|
|
821
|
+
| 不 `git add/commit/push` | 未执行任何 git 写命令(本批只用 `git archive`/`git status`/`git diff`/`git log` 只读) |
|
|
822
|
+
| 不改纪律/归档面 | `zcode/AGENTS.md`、纪律真源、`data/` 全部零改动 |
|
|
823
|
+
|
|
824
|
+
### 10.2 git 面(〔本报告实跑〕`git status --short` / `git diff --stat` / `git log --oneline -6`)
|
|
825
|
+
|
|
826
|
+
```
|
|
827
|
+
$ git status --short
|
|
828
|
+
M md_cg/test_autonomy_modes.py
|
|
829
|
+
?? md_cg/test_mode_parity.py
|
|
830
|
+
?? docs/eval/三档自治_步骤⑤收官与全链验收_落码记录_v1.0.md
|
|
831
|
+
?? .zcode/ (会话前既有,非本批产物)
|
|
832
|
+
|
|
833
|
+
$ git diff --stat
|
|
834
|
+
md_cg/test_autonomy_modes.py | 241 +++++++++++++++++++++++++++++++++++++------
|
|
835
|
+
1 file changed, 212 insertions(+), 29 deletions(-)
|
|
836
|
+
```
|
|
837
|
+
|
|
838
|
+
生产码(`md_cg/autonomy_modes.py`、`writepipe.py`、`mdcos.py`、`mcp_server.py`、`rollback.py`、
|
|
839
|
+
`rollback_cli.py`、`protect.py`、`admission.py`、`freshness.py`、`weights.py`)**零改动**——
|
|
840
|
+
这正是 §四.2 对拍全 SAME 的结构性原因,也是「本批是收官步、不是功能步」的自证。
|
|
841
|
+
HEAD = `ae519a24`(步骤④)。
|
|
842
|
+
|
|
843
|
+
**v1.2 更新(2026-10-03 · 本节效力范围)**:以上为**步骤⑤批次**快照。补强批次后实测
|
|
844
|
+
`git status --short`:` M md_cg/autonomy_modes.py`、` M md_cg/freshness.py`、` M md_cg/lifecycle.py`、
|
|
845
|
+
` M md_cg/test_autonomy_modes.py`、` M md_cg/weights.py`、`?? md_cg/test_mode_parity.py`、
|
|
846
|
+
`?? docs/eval/三档自治_步骤⑤收官与全链验收_落码记录_v1.0.md`(另 `?? .zcode/` 为会话前既有)——
|
|
847
|
+
生产码改动面=**4 文件**(§12.4);红线逐条仍成立(未触在役数据根/`data/policy.json`/任何
|
|
848
|
+
`forbidden`;未 `git add/commit/push`)。
|
|
849
|
+
|
|
850
|
+
### 10.3 交付状态与提交面(回应读者问)
|
|
851
|
+
|
|
852
|
+
- **本批交付=工作树、未提交**:`git status` 见 §10.2(`M md_cg/test_autonomy_modes.py` + 未跟踪
|
|
853
|
+
`md_cg/test_mode_parity.py`、本报告、`.zcode/`)。**本报告轮(及本批红线)不执行
|
|
854
|
+
`git add/commit/push`**(§10.1);提交时机与执行方**不属本报告范围**(归工作流编排/宿主面)。
|
|
855
|
+
- **未跟踪件是否随批入库**:`md_cg/test_mode_parity.py` 是四件交付之二(§3.2)——**应随批入库**;
|
|
856
|
+
本报告同批。二者当前均为 `??`(未跟踪),入库与否由提交环节决定(本报告不代裁)。
|
|
857
|
+
|
|
858
|
+
---
|
|
859
|
+
|
|
860
|
+
## 十一、修订记录与读者问答(v1.1 轮)
|
|
861
|
+
|
|
862
|
+
### 11.1 修订处置(读者反馈 unclear 6 条 + unsupported 10 条,逐条)
|
|
863
|
+
|
|
864
|
+
> 读者声明(原样):本次只通读报告文件(未运行命令、未核对仓库事实,任务明示二者不属本次范围)。
|
|
865
|
+
> 以下行号均指**修订前**版本;处置中的行号=本报告读码/实查。
|
|
866
|
+
|
|
867
|
+
| # | 类别 | 反馈摘要 | 处置 | 落点 |
|
|
868
|
+
|---|---|---|---|---|
|
|
869
|
+
| 1 | unclear | `I:③④` / `I:①⑦` / `I:⑤` / `B组:o3` 等组内编号无对照表 | **补「断言编号对照表」**(组级落点 + 每个被引编号的半句与行号;I①–⑧、B o1–o4、L1–L8、admission E3/E4/E6/E7/G4、parity P1/P2/R1–R5) | §3.5(§1.1/§1.3 增加指向) |
|
|
870
|
+
| 2 | unclear | `L3/E3/E4`、`L6/E7`、`L5/E6/G4`、`R5` 无定义、无 `file:line` | 逐一定位并补落点:L3 `:1027-1037`、L6 `:1050-1059`(modes);E3/E4 `:481-502`、E6 `:513-519`、E7 `:520-535`、G4 `:803-809`(admission);R5 `:911-921`(parity) | §3.5、§8.2、§6.2 |
|
|
871
|
+
| 3 | unclear | §五 演练表用「C 链/B 链/D 链」不标 R1–R4;§3.2 R 组无 R1–R5 定义 | §3.2 R 行写明 **R1–R5 分组定义**;§五 两张表逐链标注(R1)/(R2)/(R3)/(R4-C)… | §3.2、§五 |
|
|
872
|
+
| 4 | unclear | 「变更单」落在哪里不明(不 vs `decisions.jsonl`) | 写明**三面三落点**:变更单=`hippocampus/inbox.jsonl` 的 `kind=mutation` 条目(`review_list()` 可见);前像=`_protected_history/`;执行记录=`hippocampus/decisions.jsonl` 的 `rec["mutation"]`(`mdcos.py:443`/`:444` 读码) | §2.6 |
|
|
873
|
+
| 5 | unclear | 「本报告轮不改任何源码」与 `+212/−29` 字面互斥 | 改写:改动面=守卫 `test_autonomy_modes.py`(实施轮)+新增守卫;**生产码零改动**;报告轮只改本报告文件;U1/U2 修复属下一批 | §7.4(另见 §10.2) |
|
|
874
|
+
| 6 | unclear | §8.2 方案 A ③ 两处「(已有)」无落点 | 逐处补落点:「未结算对拍锚」=modes L5 `:1045-1049`、admission E6 `:513-519`/G4 `:803-809`;「回落+alerts 行为钉」=modes L2/L2a/L2b `:1011-1026`、admission E2 `:458-466` | §8.2 |
|
|
875
|
+
| 7 | unsupported | 「24 处全部命中预期」与 §6.5 的 1 次 FAIL 冲突;「3 次中 2 次 rc=0」与「首跑」不一致;存档名 `run2` 与「首跑」不符 | 更正:24 处=**条目数**,mp 侧**8/9 次运行**逐处命中、1 次例外(第 1 次运行,⑥ 红 3≠2);「第 1 次运行」措辞+注明 `run2` 为后台批次 job 序号;FAIL 轮**影响面**(主判据未红)写清 | §6.2、§6.5 |
|
|
876
|
+
| 8 | unsupported | 「7 腿」与腿 1–8 不自洽 | 统一为「**8 条复现腿**(6 缺陷腿 + 2 装置正对照腿)」 | §二 标题、§附B |
|
|
877
|
+
| 9 | unsupported | 「四套守卫对 plan 热路径无断言」两头站不住(plan×A 已有断言;修前只有三套守卫) | 收窄:修前为**三套**守卫(第四套本批新增);缺口面精确为**四处位点**(写链非 gated C / gated 合并 B / 工具面 D / 直写面 C);gated C 与 A 已有 `I①③④` | §1.1 |
|
|
878
|
+
| 10 | unsupported | 前像「单点」两说(`rollback.preimage` vs `protect.snapshot_preimage`) | 澄清同一性:`rollback.preimage`=**组合采集单点**(内部调快照单点 `protect.snapshot_preimage` +采影响面+生成命令);生产码内 snapshot 唯一调用点=`rollback.py:107`(实查) | §2.6、§5.2(新增注) |
|
|
879
|
+
| 11 | unsupported | 「改码后复跑才显现」与零生产码改动矛盾 | 改写:该对拍臂单独不能证明判别力;判别力由 **Q 组负对照**承担 | §2.8 |
|
|
880
|
+
| 12 | unsupported | 「两次教训」无出处 | 补出处原文:`md_cg/test_n225_nonobject_load.py:81`(「本仓批次 80/81 两次教训:基线绑提交那一刻即失效」) | §4.2 |
|
|
881
|
+
| 13 | unsupported | 「本批实测的四处」与「只读复核」矛盾;「四处」只列 3 个文件 | 改「本报告**只读复核**」+计数口径「**4 处调用点 / 3 个文件**」+行号精确化(`p2_mcp:60-63`、`b1:148-152`、`i50e:391-394`/`:398-402`) | §8.2 |
|
|
882
|
+
| 14 | unsupported | §五 来源两说(§五 标实跑 vs 附 B 归「沿用前版」) | 附 B 改写:沿用**组织形态**、读数在**本报告实跑输出**上复核(§五 读数=本报告实跑;与前版一致) | §附B |
|
|
883
|
+
| 15 | unsupported | 容器不复跑的理由无证据;「只读交付面」边界未声明 | 补证据与改写:`.gitignore` 逐项实读(`node_modules/`、`/lib/`、`/hive/target/`)+`linux_verify.sh:28-32` 引用;边界改为「本报告轮=只改本报告文件(任务书明文)」 | §6.4 |
|
|
884
|
+
| 16 | unsupported | 「`E_WEIGHT` 无任何调用点」口径不固定 | 统一为「**生产码**中无 `decide(E_WEIGHT)` 调用(5 个生产调用点的动作类仅 A/B/C/D);测试/守卫件中的 `decide()` 调用不在此列」 | §1.1、§2.5 |
|
|
885
|
+
|
|
886
|
+
### 11.2 读者问答(v1.1 轮 nextQuestions 7 条,逐条)
|
|
887
|
+
|
|
888
|
+
1. **这批到底算不算过?DEFER 由谁解除?** —— 状态=**DEFER 未解除**;本报告只做**登记**
|
|
889
|
+
(信息面闭环),登记 ≠ 修复 ≠ 解除;解除路径=下一批实施轮补 U1 断言后由**复核方/编排侧**重跑
|
|
890
|
+
重判(判定权归属不代裁)。见 §7.1「判定状态与处置的关系」。
|
|
891
|
+
2. **U1 为何不在本批修?** —— 三条事实:①U1 是**复核阶段**(实施轮结束之后)的新发现,不在实施轮
|
|
892
|
+
冻结的修复面(六格补缺+两守卫)内;②本报告轮的边界=只改本报告文件(任务书明文);③报告轮
|
|
893
|
+
顺手改守卫=复核后自行加码且绕开复核。修复属**下一批实施轮**(形态同 M1)并须重过复核。见 §7.4。
|
|
894
|
+
3. **修前 4 项环境红哪去了?定向 222–228s 与全量 230.7s 同一口径吗?** —— ①两读数**装置不同**:
|
|
895
|
+
`226/230`(含 4 项环境红)=HEAD 副本树装置(`git archive` 导出树+注入腿)读数;`308/308`=
|
|
896
|
+
工作树全量。`git archive` 导出树**不含 gitignored 构建产物**,而工作树里 `hive/target/release/hive`
|
|
897
|
+
与 `rust/target` **在位**(实查)——「4 项环境红」去向**未在副本树装置复跑、未逐项定位(不猜)**;
|
|
898
|
+
②同口径(同一入口、同一并发池 `--jobs 4`,`scripts/run_tests.py:227-230`),全量只多跑其余四组
|
|
899
|
+
(79 目标、皆轻);③「5 跳过」=3 依赖缺失(p44/md_access_parity/wisdom_md_store)+2 负载敏感
|
|
900
|
+
(bench_swarm_scale/bench_swarm_parallel),与 rust 无关。见 §6.3。
|
|
901
|
+
4. **在役库现在是什么档、R1–R4 读数满足吗?** —— **本报告未采集**(属接线批前置);无数据、
|
|
902
|
+
不代答;回落风险的量化须先采读数(§8.2 排期③)。
|
|
903
|
+
5. **§6.5 偶发 FAIL 落在 Q 负对照 ⇒ §4.2 结论还剩多少?复跑判定标准?** —— ①据 FAIL 轮存档:
|
|
904
|
+
该轮 3 条红项**不含** §4.2 主判据(15 项 SAME/0 DIFF)——主结论仍成立;受影响的只是负对照的
|
|
905
|
+
「恰好」**强断言**(判别力辅助证明);②升级标准不代定;建议再现即升级为「必须定位」。见 §6.5。
|
|
906
|
+
6. **§5.2 full 三链的「逐字节 ✔」会不会正是 U2 的空池判绿?** —— 判据为**三重合取**:①`ok`;
|
|
907
|
+
②`bytes_equal_preimage`=生产码 `_bytes_equal`(任一侧取不到 ⇒ False,fail-closed 注释在案);
|
|
908
|
+
③守卫侧冗余项(U2 命中,可静默绿)。R4 三条**未**做非空前置、full 三链**无非空取证**(复核的
|
|
909
|
+
446B 实例只覆盖 confirm C 链)——如实登记。见 §5.2 注、§8.1 第 14 条。
|
|
910
|
+
7. **何时提交?`test_mode_parity.py` 是否随批入库?** —— 本批=**工作树未提交**;提交时机与执行方
|
|
911
|
+
**不属本报告范围**(红线禁本报告轮 `git add/commit/push`);`test_mode_parity.py`(四件交付之二)
|
|
912
|
+
与本报告**应随批入库**,入库动作由提交环节决定。见 §10.3。
|
|
913
|
+
|
|
914
|
+
---
|
|
915
|
+
|
|
916
|
+
## 附 A:本批新增/修改的判据与「生效条件:」注释(本仓惯例)
|
|
917
|
+
|
|
918
|
+
- **未改任何生产函数** ⇒ 无「生效条件:」注释需同步(本批零生产码改动,见 §10.2)。
|
|
919
|
+
—— **v1.2 更正**:该句仅适用于**步骤⑤批次**;补强批次改了生产码,逐处「生效条件:」注释与
|
|
920
|
+
docstring 同步清单见下方 v1.2 追加段(§十二.4 亦有落点表)。
|
|
921
|
+
- `md_cg/test_autonomy_modes.py`:模块 docstring 增加「收官批次(步骤⑤)新增 M 组」段(`:55-63`);
|
|
922
|
+
`g_m()` 自带覆盖矩阵与边界说明 docstring(`:1079-1106`);`_VOLATILE` 追加 `batch/note/elapsed_ms`(`:173-179`)。
|
|
923
|
+
- `md_cg/test_mode_parity.py`:模块 docstring(`:2-63`)写明三组判据、基线口径(oracle 现导出、
|
|
924
|
+
非冻结基线)、full 档直落前像的留池边界;`_RUNNER`(`:365-559`)内联观测脚本自带 provenance 自证;
|
|
925
|
+
变异表(`:940-1015`)逐处带「红项数=实测」注释。
|
|
926
|
+
- **`docs/README.md` 未登记本报告**(如实登记,非疏漏):同系列的步骤②③④ 三份落码记录亦未登记
|
|
927
|
+
(本批只读核对:`docs/README.md` 的 `eval/` 清单不含任一「三档自治_步骤…」件);本批沿系列现状、
|
|
928
|
+
不单方面扩大改动面;若要统一登记,宜由文档治理批次一次补齐。
|
|
929
|
+
|
|
930
|
+
## 附 B:本报告证据来源对照(每个数字谁跑的)
|
|
931
|
+
|
|
932
|
+
- **本报告实跑**(报告撰写轮,本会话):§6.1 **四套**守卫正向读数(159/0、56/0、59/0、64/0,rc=0);
|
|
933
|
+
§6.2 `test_autonomy_modes --mutate` 17 处与 `test_mode_parity --mutate` 7 处(9 次运行,含 §6.5
|
|
934
|
+
稳定性观察的全部复跑);§6.3 全量 `run_tests.py`(308/308、5 跳过、rc=0、230.7s)与
|
|
935
|
+
`run_tests.py --list`(共 313 目标);§4.2 Q 组完整 stdout(15 SAME/0 DIFF、负对照恰好 2 项);
|
|
936
|
+
§10.2 `git status/diff/log`;**v1.1 修订轮**的补核读码(§3.5 编号对照表、§2.6/§5.2/§6.3/§6.4
|
|
937
|
+
新增注的 `path:line`、`.gitignore` 与 `hive/target/release/hive` 存在性实查)。
|
|
938
|
+
- **工作流采集**(收官脚本实跑,任务上下文):§6.2 ANCHOR-MISS 的工作流侧读数与两文件变异表初值;
|
|
939
|
+
§6.3 定向 `run_tests.py md_cg` 231/231;§6.4 容器两栈读数与退出码;§二 **8 条复现腿**的
|
|
940
|
+
payload/observed 原文。
|
|
941
|
+
- **独立复核**(复核报告文字,本报告 §七 摘录):§2.9 现行树四腿重放;§七.2 四处做法(现行树重放、
|
|
942
|
+
V4' 行为差、退化路径探针、可判定比较实例、17 项 SAME、删断言探针、ANCHOR/ORACLE-MISS);
|
|
943
|
+
§七.3 uncovered U1/U2。
|
|
944
|
+
- **沿用前版(本报告读回并核对)**:沿用的是这些节的**组织形态**,读数均在本报告实跑输出上复核:
|
|
945
|
+
§3.4 覆盖矩阵(逐分组实读)、§五 演练读数表(读数为本报告实跑 §五 输出,与前版一致)、
|
|
946
|
+
§8.2 接线评估、§九 全链回顾(提交号经 `git log` 实读核对)。
|
|
947
|
+
- **未跑(如实)**:容器两栈(§6.4 理由:会向工作区写入构建产物);U1/U2 的修复实验(本轮明确不修);
|
|
948
|
+
§6.5 偶发 FAIL 的定位实验(未做,不猜根因)。
|
|
949
|
+
- **v1.2 追加(补强批次,2026-10-03 · 本报告追加轮实跑)**:`test_autonomy_modes` 173/0 rc=0 与
|
|
950
|
+
`--mutate` **23 处实存**〔v1.2 批次快照;**F1 收口轮已恢复③ ⇒ 24 处(③已恢复)**,见 §十五〕全命中(①27 ②46 ④8 ⑤14 ⑥5 ⑦18 ⑧4 ⑨22 ⑩2 ⑪15 ⑫2 ⑬3 ⑭2 ⑮8 ⑯9
|
|
951
|
+
⑰3 ⑱2 ⑲5 ⑳2 ㉑1 ㉒1 ㉓1 ㉔1;**③「矩阵整表坍缩」条已删、仅剩注释——F1 更正,见 §十三**);
|
|
952
|
+
`test_mode_parity` 59/0 rc=0 与 `--mutate` **8 处**全命中
|
|
953
|
+
(5/13/5/14/4/2/2/**11**);定向回归 `python -X utf8 scripts/run_tests.py md_cg` 231/231(3 跳过);
|
|
954
|
+
E 面前后对拍(`dsh_e_probe3` 同脚本两臂:接线前 `written=2`、importance 0.5→0.6646 已写盘/
|
|
955
|
+
接线后 `ok=false/error=autonomy_forbidden/written=0`、0.5 未改);三档入口逐处读数(§十二.4)。
|
|
956
|
+
**未跑(如实)**:全量与容器(脚本随后跑)。容器栈一 `test_policy_required_ccg` 的 SHIM 腿**已随
|
|
957
|
+
守卫 J 组子进程腿重跑**(173/0 读数内含 J2 整腿 PASS 与 J3 负对照;未单列命令)。
|
|
958
|
+
- **v1.2 后修订轮(2026-10-03 · 本轮实跑)**:§13.7 两注入形态探针(P1 红 11/P2 红 12,独立子根
|
|
959
|
+
干净装置;收口前两记录 3/4 的差集推导);`git diff` 读③条删除形态(注释更新为「红 63」+元组
|
|
960
|
+
删除同批);HEAD 行号实测(`decide` `:317`、`MATRIX` `:138`)与现行行号(`:335`、`:156`);
|
|
961
|
+
`_entry_from_preimage` 依赖读码(`test_mode_parity.py:218/:225`);`E_WEIGHT` 调用点 grep
|
|
962
|
+
(现行树恰 1 处,`autonomy_modes.py:479`)。**更正前两条**:U1/U2 的修复实验**已做**
|
|
963
|
+
(§12.2/§12.3);全量与容器**脚本已跑**(308/308、rc=0/0,§13.4)。
|
|
964
|
+
- **F1 收口轮(2026-10-03 · 本节撰写轮实跑)**:两守卫正向 **177/0**、**63/0**(rc=0;各含新增
|
|
965
|
+
F1 组 / `g_s` 组 4 条);`--mutate` am **24 处实存**(③**63**)+判别力钉红 **3**、
|
|
966
|
+
mp 8 处(5/13/5/14/4/2/2/11)+钉红 **3**(各 rc=0);定向回归 `run_tests.py md_cg`
|
|
967
|
+
**231/231**(13 次实跑 11 绿、2 次 230/231——失败项非本批两守卫〔1 次捕获项名
|
|
968
|
+
`test_p27_docindex`、单跑 98/0〕,未定位、不猜,如实登记);
|
|
969
|
+
删条目演示(临时副本 `_f1_demo_guard.py`:③元组删除 / ③注释+元组同删 ⇒ **均 rc=2**
|
|
970
|
+
+打印「变异表缺口:③」);自检形态、两守卫对齐落点与复核标准对照见 **§十五**。
|
|
971
|
+
**未跑(如实)**:全量与容器(脚本随后跑)。
|
|
972
|
+
|
|
973
|
+
---
|
|
974
|
+
|
|
975
|
+
## 十二、补强批次(v1.2,2026-10-03)——U1 直写面断言 / U2 空池判绿收口 / E 面档位接线
|
|
976
|
+
|
|
977
|
+
**批次定位**:独立复核(§七)判 **DEFER** 并列出 uncovered U1/U2;解除路径明文=「下一批实施轮补
|
|
978
|
+
U1 断言(形态同 M1)后,由复核方/编排侧重跑重判」。本批为该**实施轮**(三件 P0),并顺带把
|
|
979
|
+
E 面档位接线(§8.1 第 3 条留池、设计 §三 plan 档 E 列)一并落地。**判定权仍归复核方**——本批只交
|
|
980
|
+
「缺口已补、判别力已机械自证」的读数,不代裁。
|
|
981
|
+
|
|
982
|
+
### 12.1 三件与契约对照
|
|
983
|
+
|
|
984
|
+
| # | 契约要求 | 实施落点 | 状态 |
|
|
985
|
+
|---|---|---|---|
|
|
986
|
+
| **U1** | `mcp_server.py:3373` 非 gated 直写面在 **plan 与 confirm 两档均无行为断言** ⇒ 补 plan/confirm/full **三档**断言(形态同 M1)+定点变异 | 守卫 `md_cg/test_autonomy_modes.py` M 组 **M1e①–⑤** | 已落(§12.2) |
|
|
987
|
+
| **U2** | `test_mode_parity.py` R 组三处「空池静默判绿」与 `_bytes` 声明相悖 ⇒ 统一「缺失 ⇒ 判不相等」+补 R4 三条 full 链非空前置取证 | R2 / R3-逐字节 / R4 三条第三合取项**非空前置** + R4 三条**前置取证**(3 条新断言) | 已落(§12.3) |
|
|
988
|
+
| **E 面** | 生产码 `decide()` 无 `E_WEIGHT` 调用点 ⇒ plan 档 E 动作**照跑写盘**;按设计 §三矩阵在 **apply 路径**(资格面之后、写盘之前)接 `decide(E_WEIGHT)`;confirm/full **零变化**;M2① 按标题意图重编码 | 生产码 `autonomy_modes.e_gate/forbidden_result` + 四处写盘入口;守卫 M2①–⑫ | 已落(§12.4) |
|
|
989
|
+
|
|
990
|
+
**硬约束自查**:对拍锚未破(confirm/full 全线逐位不变:P1/P2/Q 全绿、M2④ 专锚);未调用 `settle`
|
|
991
|
+
的进程 `mode()=env` 不变(L5/G4 沿用,本批未动该面);红线同前(实验全在 `tempfile.mkdtemp`
|
|
992
|
+
合成库;未触在役数据根;未改 `data/policy.json`;未削弱 `forbidden`;未 `git add/commit/push`);
|
|
993
|
+
**full 直落前像(设计 §六 义务①)仍留池**(R4「现状钉」按原样保留、未顺手接线)。
|
|
994
|
+
|
|
995
|
+
### 12.2 U1——非 gated 直写面三档断言(复核解除项)
|
|
996
|
+
|
|
997
|
+
**判据位**:`md_cg/mcp_server.py:3373`(`_dec = _am.decide(_action)`;`_dispatch` 的
|
|
998
|
+
`mdcg_remember` **非 gated 直写分支**,自注「热写入路径的第二落点」`:3360-3364`)。
|
|
999
|
+
|
|
1000
|
+
**断言(M1e①–⑤,形态同 M1)**:
|
|
1001
|
+
|
|
1002
|
+
| 断言 | 内容 |
|
|
1003
|
+
|---|---|
|
|
1004
|
+
| M1e①(plan) | C 覆写**出变更单且不落盘**:`moved_to=review_queue`、`committed=False`、`pid` 非空、载荷 `action=C`/`target=ud_c` |
|
|
1005
|
+
| M1e②(plan) | 正文**未被覆写**(逐字比对)且队列**恰 1 张** |
|
|
1006
|
+
| M1e③(confirm) | 同面同形(出单且不落盘、正文未改、队列 1 张)——**固定桩:此前 confirm 档亦无断言** |
|
|
1007
|
+
| M1e④(full) | **直落**:`ok=True`、无单、正文已换、`overwrite_of=ud_c`(该分支无 `committed` 键,判据按真实返回体编码,不臆造字段) |
|
|
1008
|
+
| M1e⑤(full) | 同面**零变更单**(直落面不产单) |
|
|
1009
|
+
|
|
1010
|
+
**前/后对拍读数**(同一判据点、同一合成配置):
|
|
1011
|
+
|
|
1012
|
+
| 臂 | 读数 | 来源 |
|
|
1013
|
+
|---|---|---|
|
|
1014
|
+
| 基线(现行树,档位闸在位) | `{moved_to: review_queue, committed: false, 正文未改, 变更单 1 张}` —— 本批 M1e①② 断言实测绿 | 〔本报告实跑〕 |
|
|
1015
|
+
| 复核 V4' 注入树 | `{moved_to: null, 正文被直接覆写, 变更单 0 张}` | 复核 §7.2(摘录原文) |
|
|
1016
|
+
| **本批:不限档位摘除** | 红 **3**(M1e①②③——plan 两条 + confirm 一条) | 〔本报告实跑〕变异⑰ |
|
|
1017
|
+
| **本批:V4' 追加式注入复刻** | 红 **2**(M1e①②——只有 plan 档转红) | 〔本报告实跑〕变异⑱ |
|
|
1018
|
+
|
|
1019
|
+
⇒ 复核「V4' 注入 0 红存活」与「不限档位摘除变体亦全绿」**两条形态各自被打红**,且红项数与
|
|
1020
|
+
预期逐一相符(`--mutate` 全表自证 PASS)。
|
|
1021
|
+
|
|
1022
|
+
### 12.3 U2——R 组「空池静默判绿」收口
|
|
1023
|
+
|
|
1024
|
+
**收口口径(统一为「缺失 ⇒ 判不相等」)**:非空前置 **5 处** + R4 三条 full 链**前置取证 3 条**。
|
|
1025
|
+
|
|
1026
|
+
| 处 | 收口前 | 收口后 |
|
|
1027
|
+
|---|---|---|
|
|
1028
|
+
| R2「回滚后盘面逐字节 == 前像」 | 两侧皆空 ⇒ 判绿 | `bool(pre_b) and …`(判红) |
|
|
1029
|
+
| R3 首个「回滚后盘面逐字节 == 前像」 | 同上 | `bool(pre_b) and …` |
|
|
1030
|
+
| R4 C/B/D 三条「第三合取项」(`_bytes(...) == pre_b`) | 同上 | `bool(pre_b/pre_mb/pre_db) and …` |
|
|
1031
|
+
| R4 前置取证(**新增 3 条**) | 无(复核指出的同族缺口) | 执行时点前像**与**盘面快照**双非空**取证(逐条给出字节数) |
|
|
1032
|
+
|
|
1033
|
+
**前/后读数**(两种注入形态 × 收口前后;现行树复测读数见 §13.7(b)):
|
|
1034
|
+
|
|
1035
|
+
| 臂 | 注入 | 红项数 | 明细 |
|
|
1036
|
+
|---|---|---|---|
|
|
1037
|
+
| 收口**前**(复核探针) | `_bytes` 恒空 | 红 **3** / 绿 30 | **点名的**红项=R1-逐字节、R3-节点复位(带 `bool(pre_b)` 门槛);**第三条记录未点名**(按差集推断为 R5——两注入形态的完整辨析见 §13.7(b));R2、R3-逐字节、R4 三条**静默判绿** |
|
|
1038
|
+
| 收口**前**(修前腿) | `_disk_path` 恒 None | 红 **4** / 绿 29 | R1-逐字节、R1-索引条目回齐、R3-节点复位、R5(与上一行差恰 1 条=索引条目回齐——机制见 §13.7(b)) |
|
|
1039
|
+
| 收口**后**(本批变异⑧) | `_bytes` 恒空 | 红 **11** | R1-逐字节、R2-逐字节、R3-逐字节、R3-节点复位、R4 C/B/D 三条逐字节、R4 C/B/D 三条前置取证、R5 跨面汇总 |
|
|
1040
|
+
|
|
1041
|
+
⇒ 「同组两种口径并存」消失:空池注入下**所有**「逐字节/前像」判据一律判红。
|
|
1042
|
+
|
|
1043
|
+
### 12.4 E 面档位接线(设计 §三 plan 档 E 列)
|
|
1044
|
+
|
|
1045
|
+
**探针普查(E 动作面写盘入口,逐处实读)**:
|
|
1046
|
+
|
|
1047
|
+
| 入口 | 是否接闸 | 位置(资格面之后、写盘之前) | 依据/理由 |
|
|
1048
|
+
|---|---|---|---|
|
|
1049
|
+
| `weights.recalc`(apply) | **接** | `if apply:` 支路首行 | 生产调用方:`mdcos.maintain(action="importance")`(`mdcos.py:3407`)、`sustain.py:897/1257` |
|
|
1050
|
+
| `freshness.recalc`(apply) | **接** | 同上 | 设计 §一 E 行点名;无 MCP 直连入口(工具面经 maintain 走 weights 支路) |
|
|
1051
|
+
| `lifecycle.set_state` | **接** | `stamp`(合法性/保护裁决)之后、`cg._write_node` 之前 | **唯一推进入口**(含 `MdCG.set_state` 委托面:`mdcg.py:2554`);非法迁移与 noop 仍各回各的 code(档位不参与资格判定) |
|
|
1052
|
+
| `lifecycle.backfill`(apply) | **接** | 盘点(dry-run 分支)之后、写盘之前 | lifecycle 第二写盘入口(一次性回填;不改语义但确属写盘) |
|
|
1053
|
+
| `lifecycle.stamp` | **不接** | — | 无 IO(就地改 fm);两调用方(`forgetting.reinforce` / `writelimit.converge_into`)属 **B 链**——E 闸拦 B 动作语义交叉,且与 G 组「合并原语不含档位判据」相抵(§8.1 第 15 条) |
|
|
1054
|
+
| 库层 `MdCG.add` 的 `require_transition` | **不接** | — | **禁接线**(G 组结构判据;执行桥直调库层越过判定的前提)(§8.1 第 16 条) |
|
|
1055
|
+
| 分数类回滚面(`freshness.rollback` / `weights.rollback`) | **不接** | — | 回滚是 R3/§四 第 4 条的兑现面,plan 档拦回滚与设计语义相抵——**设计面待裁**(§8.1 第 17 条) |
|
|
1056
|
+
|
|
1057
|
+
**判定单点**:`autonomy_modes.e_gate(plan=None, environ=None)` → `decide(E_WEIGHT, …)` 原样体;
|
|
1058
|
+
fail-closed 返回体由 `forbidden_result(dec, **extra)` 统一(`ok=False`/`error="autonomy_forbidden"`/
|
|
1059
|
+
`autonomy`{mode,action,action_name,decision}/`hint`)——与写链/合并/删除三处 fail-closed 出口**同错误码**。
|
|
1060
|
+
|
|
1061
|
+
**前/后对拍读数**(同一脚本两臂,plan 档,MCP 面 `cg(op=maintain, action=importance, apply=true)`):
|
|
1062
|
+
|
|
1063
|
+
| 臂 | 读数 |
|
|
1064
|
+
|---|---|
|
|
1065
|
+
| **接线前**(`e_gate` 恒放行形态) | `ok=true / written=2 / changed=2`;盘面 `importance 0.5 → 0.6646`、`importance_source=recalc`(**写盘已生效**) |
|
|
1066
|
+
| **接线后**(现行树) | `ok=false / error=autonomy_forbidden / written=0`;盘面 `importance 0.5` **未改**、`source` 缺;`autonomy.decision=forbid`、hint 带「计划外零变更」 |
|
|
1067
|
+
|
|
1068
|
+
**三档 × 四入口逐格读数**(同一合成配置;**构造注(2026-10-03 修订)**:本表=补强批次构造〔plan 行 `importance=0.4` 起点、confirm 行 `written=2`〕,与 §13.2 腿 E〔起点 0.5、`written=1`〕**为两次不同构造的实跑**——数值面不可直接交叉比对(同 §2.5 的 0.57/0.6646 先例)、结论面一致;见 §十七 问答 5):
|
|
1069
|
+
|
|
1070
|
+
| 入口 | plan | confirm | full |
|
|
1071
|
+
|---|---|---|---|
|
|
1072
|
+
| `freshness.recalc(apply)` | `ok=false/error=autonomy_forbidden/written=0`;**盘面无** `freshness_weight`、无 `freshness_source` | `ok=true/written=2`;`freshness_weight=0.001` | 与 confirm **逐位相等** |
|
|
1073
|
+
| `weights.recalc(apply)` | 被拦;`importance=0.4` 未改 | `ok=true/written=2`;`importance=0.6646` | 与 confirm 逐位相等 |
|
|
1074
|
+
| `lifecycle.set_state` | `ok=false/error=autonomy_forbidden/changed=false`;盘面仍 `active` | `ok=true/changed=true`;`converged` | 与 confirm 逐位相等 |
|
|
1075
|
+
| `lifecycle.backfill(apply)` | 被拦;`missing=1` 仍 `backfilled=0`、盘面**无** state 键 | `ok=true/backfilled=1`;显式 `active` | 同 confirm |
|
|
1076
|
+
| **预演面**(`freshness.recalc(apply=False)`) | `ok=true/dry_run=true/changed=2`(**不接闸**——零写盘面不属「变更」) | 同左 | 同左 |
|
|
1077
|
+
|
|
1078
|
+
**M2 重编码(按标题意图;同 issue50-a 的 E1 先例)**:断言由「plan 与 confirm 逐位相等(E 面无
|
|
1079
|
+
接线——现状钉、非背书)」改为「**plan 被拦 + confirm/full 逐位相等**」,共 12 条:
|
|
1080
|
+
|
|
1081
|
+
| 断言 | 内容 | 断言意图(未变) |
|
|
1082
|
+
|---|---|---|
|
|
1083
|
+
| M2① ② | plan 档 `freshness.recalc(apply)` 被拦(fail-closed 体+hint)且**零写盘** | E 在 plan 档不得照落 |
|
|
1084
|
+
| M2③ ④ | confirm 档照落;confirm↔full 输出与 fm **逐位相等** | E 在 confirm/full 不阻塞(硬约束①的 E 面锚) |
|
|
1085
|
+
| M2⑤ | plan 档**预演**照旧出报表(闸只在 apply 路径) | 「变更」面才接闸 |
|
|
1086
|
+
| M2⑥ ⑦ | `weights.recalc`(第二入口)plan 被拦 / confirm 照落 | 入口面覆盖 |
|
|
1087
|
+
| M2⑧ ⑨ | `lifecycle.set_state`(第三入口)plan 被拦 / confirm 照落 | 入口面覆盖 |
|
|
1088
|
+
| M2⑩ ⑪ | `lifecycle.backfill`(第四入口)plan 被拦 / confirm 照落 | 入口面覆盖 |
|
|
1089
|
+
| M2⑫ | `decide(A|E, plan)==forbid` 单钉(**不并入** confirm↔full 对拍范围) | 设计内语义(原 M2 第三条,原样保留) |
|
|
1090
|
+
|
|
1091
|
+
**定点变异(E 面 6 处,全部命中预期)**:⑲ 闸无差别阻塞 ⇒ 红 **5**(**只在 confirm/full 档红**——
|
|
1092
|
+
这正是「E 接线只在 plan 档生效」的机械证据);⑳ 摘除·`freshness.recalc` ⇒ 红 **2**;
|
|
1093
|
+
㉑ 摘除·`weights.recalc` ⇒ 红 **1**;㉒ 摘除·`lifecycle.set_state` ⇒ 红 **1**;
|
|
1094
|
+
㉓ 摘除·`lifecycle.backfill` ⇒ 红 **1**;㉔ 闸越过 apply 边界(预演面也被拦)⇒ 红 **1**。
|
|
1095
|
+
**原变异 ⑰(「E 面被档位闸阻塞」= 接线形态的注入面)已随接线落地摘除**——它的语义(E 不得被
|
|
1096
|
+
闸阻塞)现由 parity 守卫 P2 的两处定点变异(⑥⑦,各红 2)继续承担。
|
|
1097
|
+
|
|
1098
|
+
### 12.5 §3.4 覆盖矩阵更新(v1.2)
|
|
1099
|
+
|
|
1100
|
+
**守卫读数**:`test_autonomy_modes` 159 → **173/0**;`test_mode_parity` 56 → **59/0**;
|
|
1101
|
+
`test_mutation_rollback` 59/0 与 `test_autonomy_admission` 64/0 **未改**(本批未动其面)。
|
|
1102
|
+
|
|
1103
|
+
| 动作 | plan | confirm | full |
|
|
1104
|
+
|---|---|---|---|
|
|
1105
|
+
| **A 新增** | 判定层 A 组;写链 `B组:o4`;gated `I:④`;M2⑫(语义单钉) | 写链 `B组`;对拍 `H组`;gated/链面/MCP `I:⑥⑦`;P1;Q:A_add/plg_A | full 直落 `H组`;gated `I:⑤`;Q:full_A |
|
|
1106
|
+
| **B 合并** | M1b/M1c | C 组;R2;**R2 非空前置(v1.2)** | H 组;R4-B(+**非空前置与前置取证**);Q:full_B |
|
|
1107
|
+
| **C 改写** | M1;**M1e①②(直写面·v1.2)** | B 组 / `I:①⑦`;**M1e③(直写面·v1.2)**;R1;K 组 | B 组:o3 / I:⑤;**M1e④⑤(直写面·v1.2)**;R4-C(+非空前置/取证);Q:full_C |
|
|
1108
|
+
| **D 删除** | M1d | D 组;R3(+**非空前置**);**R3-节点复位沿用** | H 组;R4-D(+非空前置/取证);Q:full_D |
|
|
1109
|
+
| **E 权重/生命周期** | ~~M2(现状钉)~~ → **M2① ② ⑥ ⑧ ⑩(四处入口 fail-closed + 零写盘)** | ~~❌~~ → **M2③ ⑦ ⑨ ⑪(四处入口照落)**;P2;Q:E_* | ~~❌~~ → **M2④(confirm↔full 逐位相等)**;P2;Q:full_E_* |
|
|
1110
|
+
|
|
1111
|
+
**修正后的粒度声明**:
|
|
1112
|
+
- C 面「入口面粒度」缺口(v1.1 §3.4 声明的那个)**已消除**——直写面三档判据在位(M1e①–⑤);
|
|
1113
|
+
- E 列的**入口面粒度**:写盘入口 **4 处全部接闸**(§12.4 表);未接 3 处各带理由(新留池 15–17 条);
|
|
1114
|
+
- E 列**档位面**的「命中计划步骤 ⇒ allow」分支**仍留池**(计划输入面未落,`e_gate(plan=None)`)。
|
|
1115
|
+
|
|
1116
|
+
### 12.6 §8.1 留池状态变更(本批)
|
|
1117
|
+
|
|
1118
|
+
| # | v1.1 状态 | v1.2 状态 |
|
|
1119
|
+
|---|---|---|
|
|
1120
|
+
| 3 | E 面档位闸接线未落 | **已落**(四处 apply 写盘入口);未接三处转记新条 15–17 |
|
|
1121
|
+
| 12 | 非 gated 直写面无断言(U1) | **已销项**(M1e①–⑤ + 变异⑰⑱) |
|
|
1122
|
+
| 14 | R 组空池静默判绿(U2) | **已销项**(非空前置 5 处 + R4 取证 3 条 + 变异「`_bytes` 恒空」红 11) |
|
|
1123
|
+
| 2 | 计划输入面未落 | 仍在(E 面接线后语义变紧:plan 档 E 一律 fail-closed) |
|
|
1124
|
+
| 15–17 | —(v1.2 新增) | `lifecycle.stamp` 未接(属 B 链)/库层 `require_transition` 禁接线/分数类回滚面待裁 |
|
|
1125
|
+
| 4 | full 直落不自动拍前像 | **未动**(本批不顺手接线——那是设计面变更;R4「现状钉」保留) |
|
|
1126
|
+
|
|
1127
|
+
### 12.7 本批验证数字(〔本报告实跑〕,命令行逐条)
|
|
1128
|
+
|
|
1129
|
+
> **口径**:下表为 **F1 收口轮后**的现行读数(§十五);**v1.2 批次原始读数**(am 173/0、
|
|
1130
|
+
> mp 59/0、`--mutate` 23 处实存)见 §十三.4 与 §15.1——本节不再保留无标注的旧数字。
|
|
1131
|
+
|
|
1132
|
+
```
|
|
1133
|
+
python -X utf8 -m md_cg.test_autonomy_modes → 177 通过 0 失败(rc=0)〔v1.2 时 173;+F1 组 4〕
|
|
1134
|
+
python -X utf8 -m md_cg.test_autonomy_modes --mutate → 24 处实存(③已恢复)全部命中预期(rc=0)
|
|
1135
|
+
①27 ②46 ③63 ④8 ⑤14 ⑥5 ⑦18 ⑧4 ⑨22 ⑩2 ⑪15 ⑫2 ⑬3 ⑭2 ⑮8 ⑯9
|
|
1136
|
+
⑰3 ⑱2 ⑲5 ⑳2 ㉑1 ㉒1 ㉓1 ㉔1
|
|
1137
|
+
+判别力钉「防误删自检开关剥除」红 3(不占表内编号)
|
|
1138
|
+
(③「矩阵整表坍缩」条已恢复:F1 收口轮(§十五)实测校准 63)
|
|
1139
|
+
python -X utf8 -m md_cg.test_mode_parity → 63 通过 0 失败(rc=0)〔v1.2 时 59;+g_s 组 4〕
|
|
1140
|
+
python -X utf8 -m md_cg.test_mode_parity --mutate → 8 处全部命中预期(rc=0)+判别力钉红 3
|
|
1141
|
+
5 / 13 / 5 / 14 / 4 / 2 / 2 / 11
|
|
1142
|
+
python -X utf8 scripts/run_tests.py md_cg → 231/231 通过,3 跳过
|
|
1143
|
+
```
|
|
1144
|
+
|
|
1145
|
+
**变异表重校准(本批,红项数随新断言上移)**:⑨kind 20→**22**、②confirm 也直落 43→**46**、
|
|
1146
|
+
①档位不生效 20→**27**;③矩阵坍缩 55→**63** 同批校准**但该条随后在工作树被删、仅剩注释**
|
|
1147
|
+
(**F1 更正**:v1.2 批次实存 23 条、该形态当时无自动核验载体——见 §十三.5;**F1 收口轮③
|
|
1148
|
+
已恢复**(红 63)+自检已加——见 §十五);其余 20 处=
|
|
1149
|
+
12 处沿用步骤⑤校准值(④8 ⑤14 ⑥5 ⑦18 ⑧4 ⑩2 ⑪15 ⑫2 ⑬3 ⑭2 ⑮8 ⑯9)+ 8 处本批新增(⑰–㉔)。
|
|
1150
|
+
|
|
1151
|
+
**变异编号 ↔ 形态名 ↔ 红项数对照(F1 收口轮后实存 24 处;本报告各处按号引用〔如 §12.2 的 ⑰/⑱、§12.4 的 ⑲–㉔、§13.7(a) 的 ⑰/⑱、§14.1 第 6 条、§16.5〕均按此表读——2026-10-03 修订:原括注「`:896`/`:1072` 等处」指代不成立(该两行与「按号引用」无关),已移除)**:
|
|
1152
|
+
|
|
1153
|
+
| # | 形态(`test_autonomy_modes`,24 处实存〔③已恢复〕) | 红 | # | 形态 | 红 |
|
|
1154
|
+
|---|---|---|---|---|---|
|
|
1155
|
+
| ① | 档位不生效(配置档位恒返回表内缺省) | 27 | ⑬ | 执行桥 C 目标消失判据摘除(upsert 回归) | 3 |
|
|
1156
|
+
| ② | confirm 也直落(decide 把 confirm 格判成 allow) | 46 | ⑭ | SHIM 登记丢失(`_SHIMS` 去掉 autonomy_modes) | 2 |
|
|
1157
|
+
| ③ | 矩阵整表坍缩成 full(档位不生效·真源版;**F1 收口轮已恢复**) | 63 | ⑮ | 执行桥不拍前像(执行时点前像整支失效) | 8 |
|
|
1158
|
+
| ④ | 写链档位闸不生效(`_gate_autonomy` 恒放行) | 8 | ⑯ | 执行时点补全摘除(`mutation_executed` 空转) | 9 |
|
|
1159
|
+
| ⑤ | 合并档位闸不生效(`_autonomy_gate_merge` 恒放行) | 14 | ⑰ | 直写面档位闸摘除(mdcg_remember 非 gated 放行) | 3 |
|
|
1160
|
+
| ⑥ | 删除档位闸不生效(`forget_gated` 直调软删) | 5 | ⑱ | 直写面 plan 档旁路(复核 V4' 注入形态) | 2 |
|
|
1161
|
+
| ⑦ | accept 不执行(执行桥空转) | 18 | ⑲ | E 面闸无差别阻塞(confirm/full 也被拦) | 5 |
|
|
1162
|
+
| ⑧ | 幂等键丢掉目标(内容签名回归) | 4 | ⑳ | E 面接线摘除·`freshness.recalc` | 2 |
|
|
1163
|
+
| ⑨ | kind 不落 rec(变更单退化成提案) | 22 | ㉑ | E 面接线摘除·`weights.recalc` | 1 |
|
|
1164
|
+
| ⑩ | 档位路径绕过 can_admin 闸(实修缺陷形态) | 2 | ㉒ | E 面接线摘除·`lifecycle.set_state` | 1 |
|
|
1165
|
+
| ⑪ | gated 面档位闸不生效(`_autonomy_gate_rewrite` 恒放行) | 15 | ㉓ | E 面接线摘除·`lifecycle.backfill` | 1 |
|
|
1166
|
+
| ⑫ | gated 面档位闸跳过资格探针(`write_qualify` 摘除) | 2 | ㉔ | E 面闸越过 apply 边界(预演面也被拦) | 1 |
|
|
1167
|
+
|
|
1168
|
+
(mp 侧 8 处=①档位不生效 5 /②accept 不执行 13 /③回滚不落盘 5 /④执行记录不落 mutation 14 /
|
|
1169
|
+
⑤写链 full 档放行分支失效 4 /⑥E 面按档名分叉·freshness 2 /⑦同·weights 2 /⑧空池注入
|
|
1170
|
+
(`_bytes` 恒空)11。**F1 收口轮**:两守卫另各含**防误删自检判别力钉** 1 条——「剥掉
|
|
1171
|
+
`_table_gaps` 自检开关」⇒ 合成源自证测例红 **3**(不占表内编号,表长与声明恒等;见 §十五.3)。)
|
|
1172
|
+
|
|
1173
|
+
**新增/改动的「生效条件:」注释与 docstring(本仓惯例)**:
|
|
1174
|
+
- `md_cg/autonomy_modes.py`:模块 docstring 增「补强批次(v1.2)」段(E 面接线的语义两格与边界);
|
|
1175
|
+
新增 `e_gate` / `forbidden_result` 两函数(各带「生效条件:」注释 + docstring 内的未接入口清单);
|
|
1176
|
+
`__all__` 同步。
|
|
1177
|
+
- `md_cg/freshness.py:301/302`(`recalc` 生效条件行 + docstring)、`md_cg/weights.py:471/472`(同)、
|
|
1178
|
+
`md_cg/lifecycle.py:205/206` 与 `:255/256`(`set_state` / `backfill` 生效条件行 + docstring)逐处写明
|
|
1179
|
+
「apply 路径先经 `e_gate()`;非 ALLOW 早退零写盘;confirm/full 原链原样」。
|
|
1180
|
+
- `md_cg/test_autonomy_modes.py`:模块 docstring 增「补强批次(v1.2)扩展 M 组」段;`g_m()` docstring
|
|
1181
|
+
边界段改写(E 面「已接线」+未接三处指向 `e_gate` docstring);变异表注释逐处更新。
|
|
1182
|
+
- `md_cg/test_mode_parity.py`:模块 docstring R 组加「空池口径(U2 收口)」条;变异表新增⑧。
|
|
1183
|
+
|
|
1184
|
+
### 12.8 边界与如实登记(本批)
|
|
1185
|
+
|
|
1186
|
+
- **plan 档「命中计划步骤 ⇒ allow」未通**:`e_gate(plan=None)` 是本批现状,故 plan 档 E 一律
|
|
1187
|
+
fail-closed;计划输入面落地后须把这些调用点串上 plan(属新留池第 2 条的延伸)。
|
|
1188
|
+
- **本批未做全量与容器**(任务书明文:留给脚本);定向回归 `run_tests.py md_cg` 已跑(231/231)。
|
|
1189
|
+
- **复核 V4' / U2 的原始读数**(`moved_to: null`、`红 3/绿 30`)为**复核侧材料摘录**,本批读数
|
|
1190
|
+
在同名注入形态下**自跑复现**(§12.2/§12.3 两表分列两方来源)。
|
|
1191
|
+
- **判定权**:DEFER 的解除由复核方/编排侧重跑重判;本批只交证据(§七.1 的关系声明继续适用)。
|
|
1192
|
+
|
|
1193
|
+
---
|
|
1194
|
+
|
|
1195
|
+
## 十三、补强批次复核轮(v1.2 复核,2026-10-03)——U1 直写面断言 / U2 空池判绿收口 / E 面档位接线 · 判定 DEFER 与 F1 收口
|
|
1196
|
+
|
|
1197
|
+
**节定位**:§十二 落码后的**独立复核轮**。判定=**DEFER**(§13.5 原样摘录)——三件修复(U1/U2/E 面)
|
|
1198
|
+
的**功能面与断言面**经复核独立复现**全部成立**;F1(「24 处」声称与产物不符:③条在工作树被删)为
|
|
1199
|
+
**必须收口项**。复核轮随即完成**文档面就地更新 6 处**(头部指针 + §6.2 + §12.7 两处 + 附 B +
|
|
1200
|
+
§8.1 第 18 条)与 **源码面留池登记**(§13.6)。本节数字分列来源:
|
|
1201
|
+
〔撰写轮实跑〕=本报告撰写员本轮直接执行;〔工作流采集〕=本工作流先行采集(复现腿与收官脚本实跑);
|
|
1202
|
+
〔独立复核〕=复核轮材料摘录。
|
|
1203
|
+
|
|
1204
|
+
### 13.1 缺陷定义与真实站点(行号=本节读码所见·现行工作树)
|
|
1205
|
+
|
|
1206
|
+
| # | 缺陷定义 | 真实站点(读码) | 缺陷形态 |
|
|
1207
|
+
|---|---|---|---|
|
|
1208
|
+
| **U1** | 非 gated 直写面档位闸在 **plan/confirm 两档无行为断言**(闸在位、判别力不在位) | 判据位 `md_cg/mcp_server.py:3373-3374`(`_dec = _am.decide(_action)` / `if _dec["decision"] != _am.ALLOW:`;`_dispatch` 的 `mdcg_remember` 非 gated 分支);断言缺口面=`test_autonomy_modes.py` M 组(最接近的 M1 只覆盖写链面)+ `test_mode_parity.py` P/R 组——两守卫 `mdcg_remember` 调用点除本批新增 M1e(`test_autonomy_modes.py:1217`)外**全部 gated=True**(本节读码:am `:806`;mp `:472`/`:748`/`:879`) | 覆盖缺口型:注入「档位不生效」0 红存活(**无异常**) |
|
|
1209
|
+
| **U2** | R 组「空池静默判绿」:逐字节断言在**两侧皆 `b""`** 时判绿,与 `_bytes` 文档相悖 | R2 逐字节 `md_cg/test_mode_parity.py:769-771`/R3 首个逐字节 `:811-813`/R4 三条第三合取项 `:860-865`·`:889-894`·`:917-922`(收口后现行树行号;复核轮给出收口前点位 `:763`/`:804`/`:846-849`·`:867-870`·`:887-890`);`_bytes` 声明-行为相悖点 `:151-153`(收口前 `:145-148`) | 判据退化:盘面完全缺失(最该判红)时 5 条最强判据静默判绿 |
|
|
1210
|
+
| **E 面** | `E_WEIGHT` 在**生产码无 `decide()` 调用点** ⇒ plan 档 E 动作(权重/新鲜度/生命周期)照跑写盘 | 判定单点 `md_cg/autonomy_modes.py:335-385`(`decide`;E 经 `PLAN_STEP` 折算分支 `:361-376`);E 面写盘入口 `mdcos.py:3406-3410`·`freshness.py:302`·`weights.py:472`·`lifecycle.py:206`/`:256`;**修前口径**:生产码热路径 decide 五调用点(本节 grep:`writepipe.py:658`·`mdcos.py:2977`/`3922`/`4003`·`mcp_server.py:3373`)实参仅 A/B/C/D ⇒ `E_WEIGHT` 零调用点;**修后**(现行树):新增单点 `e_gate`(`:450-479`,函数体=`decide(E_WEIGHT, …)`)——现行树 `E_WEIGHT` 实参调用点恰 **1 处**(`autonomy_modes.py:479`;五处热路径仍只走 A/B/C/D) | 接线缺口型:plan 档 `decide(E)=forbid`(设计 §三)与照跑行为**直接冲突**(**无异常、无拦截**) |
|
|
1211
|
+
|
|
1212
|
+
**修前判定装置(复核口径)**:U1=「0 红=该格无行为断言」+**生效性对照**(防「0 红=变异没生效」伪结论);
|
|
1213
|
+
U2=同组两种口径并存对照(带 `bool(pre_b)` 门槛者红、无门槛者绿);E 面=plan/confirm/full 三档逐位对照。
|
|
1214
|
+
|
|
1215
|
+
### 13.2 修前现场(工作流采集三条复现腿 · 逐条 payload/异常/崩溃点)
|
|
1216
|
+
|
|
1217
|
+
**腿 U1 · 直写面档位闸无行为断言**〔工作流采集〕
|
|
1218
|
+
- **payload**:合成库(tempfile)上 `mcp_server._dispatch(cg, "mdcg_remember", {"content": "PASSED 改写版正文", "node_id": "u1_1", "gated": False, "layer": "knowledge"})`(覆写既有 id;plan/confirm/full 三档各跑)。定点变异两条(**进程内源码替换**、不改工作区文件):M-U1-a『摘除』=把 `mcp_server.py:3374` 的 `if _dec["decision"] != _am.ALLOW:` 换为 `if False:`;M-U1-b『放行注入』=换为 `if _dec["decision"] == _am.FORBID:`。
|
|
1219
|
+
- **observed(行为面)**:confirm 与 plan 档均 `moved_to='review_queue'`、`committed=False`、`pid` 有、`mutation.action='C'`/`target='u1_1'`/`after` 齐、目标正文逐字未改、队列恰 1 条;full 档直落(正文已改、零变更单);plan 档 A 新增(新 id)⇒ `moved_to='autonomy_forbidden'`、`error='autonomy_forbid'`、未落盘。
|
|
1220
|
+
- **异常/崩溃点**:**无**(覆盖缺口型缺陷,全程无异常抛出——「崩溃点为空」是缺陷形态本身)。
|
|
1221
|
+
- **变异面**:M-U1-a 与 M-U1-b 在 `test_autonomy_modes`(13 组)与 `test_mode_parity`(P/Q/R 3 组)上红项数均=**0**(未变异基线亦 0);历史测试面抽验 rc 均 0(`test_p9c_dedup_hints` 31/0、`test_security_audit` 13/0、`test_b1b2_write_face` 33/0,独立子进程注入实测)。**生效性对照**:变异后同一 confirm 档覆写场景变直落(`moved_to=None`、正文已改=True)——注入确已改变行为、守卫仍 0 红 ⇒「注入 0 红存活」成立。
|
|
1222
|
+
- **site**:`md_cg/mcp_server.py:3373-3374`(判据位);断言缺口面见 §13.1。
|
|
1223
|
+
|
|
1224
|
+
**腿 U2 · 空池静默判绿**〔工作流采集〕
|
|
1225
|
+
- **payload**:进程内把 R 组盘面读 `test_mode_parity._disk_path` 替换为**恒返回 None**(=盘面/索引条目缺失形态),使每条「逐字节」断言里被比较的两侧(前像读数与回滚后读数)都成 `b""`;注入前后各跑 `g_r()` 逐条比对 PASS/FAIL。
|
|
1226
|
+
- **observed**:`_bytes(None)==_bytes(不存在路径)` ⇒ `b''==b''` → **True**(与 `_bytes` docstring「路径缺失/不可读 ⇒ b""(判据按「不相等」处理)」相悖——实现与承诺不符)。基线 R 组 **33 PASS/0 FAIL**;注入后 **29 PASS/4 FAIL**。目标 5 条断言两侧皆空时**静默判绿**:R2 逐字节、R3 逐字节、R4 C/B/D 三条第三合取项(`_bytes(_disk_path(...)) == pre_*` 均 `b''==b''`)。同族带 `bool(pre_*)` 门槛/依赖非空读数的 4 条如期转红(R1 逐字节、R1 索引条目回齐、R3 节点复位、R5 跨面演练齐备)——「两种口径并存」的直接机械证据。
|
|
1227
|
+
- **异常/崩溃点**:**无**(无异常抛出)。
|
|
1228
|
+
- **R4 同族缺口**:R4 三条链**无任何** `bool(pre_*)` 门槛(`pre_c`/`pre_mb`/`pre_db` 全可空)——「非空前置取证」缺口一并坐实。
|
|
1229
|
+
- **site**:见 §13.1 表。
|
|
1230
|
+
|
|
1231
|
+
**腿 E · E 面照跑写盘**〔工作流采集〕
|
|
1232
|
+
- **payload**:合成库节点 `e_a`(importance=0.5、verification_basis='test')被 `e_b` 以 part_of 引用;五入口逐跑:①`weights.recalc(cg, apply=True, min_delta=0.0001)` ②`cg.maintain(action='importance', apply=True, min_delta=0.0001)`(`mdcos.py:3407` 落点)③`freshness.recalc(cg, apply=True, min_delta=0.0001, now=1700000000.0)` ④`lifecycle.set_state(cg, 'l_a', 'demoted')` ⑤工具面 `_dispatch(cg, 'cg', {'op': 'maintain', 'action': 'importance', 'apply': True})`;plan/confirm/full 三档对照。
|
|
1233
|
+
- **observed**:**无异常、无拦截**(无 forbid/无出单/无 hint)。plan 档照跑写盘:①`ok=True written=2 changed=2`、importance 0.5→**0.6646**(`importance_source='recalc'`)、`_maintain.jsonl` 2 行;②⑤同链同读数(0.5→0.6646);③`written=1`、`freshness_weight=0.001`、`freshness_source='freshness_recalc'`;④`ok=True changed=True code='ok'`、`lifecycle_state='demoted'`、`_lifecycle.jsonl` 1 行。plan 档与 confirm/full 三档读数**逐位相同**;同进程 `decide(E)`(plan 档)='forbid' 与照跑行为**直接冲突**。
|
|
1234
|
+
- **异常/崩溃点**:**无**。
|
|
1235
|
+
- **数值说明(如实)**:任务示例『importance 0.5→0.57』为另一构造;本复现构造(basis='test'、入度=1)实测 **0.5→0.6646**——具体值随构造不同,结论(plan 档 E 动作照跑且写盘)不依赖具体值。
|
|
1236
|
+
- **site**:见 §13.1 表。
|
|
1237
|
+
|
|
1238
|
+
### 13.3 修法契约与落点(读码核对;与 §12.1/§12.4 同源)
|
|
1239
|
+
|
|
1240
|
+
**契约(硬约束)**:①plan 档 E 一律 fail-closed(计划输入面未落);②confirm/full **零变化**(逐位不变——P1/P2/Q 与 M2④ 专锚);③闸位置=**既有资格面之后、写盘之前**(档位不参与资格判定,非法迁移/noop 各回各的 code);④fail-closed=**零写盘**+统一错误码 `autonomy_forbidden`+可执行 hint(不静默)。
|
|
1241
|
+
|
|
1242
|
+
| 面 | 落点(读码所见·现行树) | 契约要点 |
|
|
1243
|
+
|---|---|---|
|
|
1244
|
+
| 判定单点 | `autonomy_modes.py:450-479`(`e_gate`;plan=None⇒forbid、confirm/full⇒ALLOW)+`:483-497`(`forbidden_result`);`__all__` 同步 | E 面各写盘入口共用单点(设计 §三「单一入口」) |
|
|
1245
|
+
| E 面入口 1/2 | `freshness.py:364-368`(`if apply:` 支路首行,`:358`)/`weights.py:531-535`(`:526`) | 非 ALLOW ⇒ `forbidden_result` 早退(零写盘、零 `_maintain.jsonl` 行);MCP `op=maintain action=importance` 面经 weights 支路覆盖 |
|
|
1246
|
+
| E 面入口 3/4 | `lifecycle.py:235-240`(`set_state`,`stamp` 资格面之后、`_write_node` 之前)/`:282-286`(`backfill`,盘点之后、写盘之前) | 非法迁移与 noop 仍各回各的 code |
|
|
1247
|
+
| 守卫 U1 | `test_autonomy_modes.py:1206-1254`(**M1e①–⑤**:plan/confirm 出单且不落盘、正文逐字、队列恰 1 张;full 直落+零变更单,含 `overwrite_of` 读数) | 形态同 M1(写链面) |
|
|
1248
|
+
| 守卫 U2 | `test_mode_parity.py:769-771`/`:811-813`/`:860-865`/`:889-894`/`:917-922`(**非空前置 5 处**)+ `:845-849`/`:874-878`/`:903-907`(**R4 前置取证 3 条**,双非空取证逐条打印字节数) | 统一「缺失 ⇒ 判不相等」口径 |
|
|
1249
|
+
| 守卫 E 面 | `test_autonomy_modes.py:1256-1400`(**M2 重编码 12 条**:plan 被拦+零写盘/confirm 照落/confirm↔full 逐位相等/预演不接闸/三入口成对/decide 级语义单钉) | 同 issue50-a 的 E1 先例(按标题意图重编码,意图不变) |
|
|
1250
|
+
| 变异表 | `test_autonomy_modes.py`(**23 条实存**)/`test_mode_parity.py`(**8 条**,含新增「`_bytes` 恒空」预期红 11) | 每处判据都有变异钉死(逐处红项数吻合) |
|
|
1251
|
+
|
|
1252
|
+
### 13.4 验证数字(全链)
|
|
1253
|
+
|
|
1254
|
+
**守卫正向与自证**〔撰写轮实跑·本轮直接执行〕:
|
|
1255
|
+
```
|
|
1256
|
+
python -X utf8 -m md_cg.test_autonomy_modes → 173 通过 0 失败(rc=0)
|
|
1257
|
+
python -X utf8 -m md_cg.test_autonomy_modes --mutate → 未变异基线红项=0;23 处实存逐处命中(rc=0)
|
|
1258
|
+
①27 ②46 ④8 ⑤14 ⑥5 ⑦18 ⑧4 ⑨22 ⑩2 ⑪15 ⑫2 ⑬3 ⑭2 ⑮8 ⑯9 ⑰3 ⑱2 ⑲5 ⑳2 ㉑1 ㉒1 ㉓1 ㉔1
|
|
1259
|
+
python -X utf8 -m md_cg.test_mode_parity → 59 通过 0 失败(rc=0)
|
|
1260
|
+
python -X utf8 -m md_cg.test_mode_parity --mutate → 未变异基线红项=0;8 处逐处命中(rc=0)
|
|
1261
|
+
5 / 13 / 5 / 14 / 4 / 2 / 2 / 11
|
|
1262
|
+
```
|
|
1263
|
+
断言总数=**232**(173+59),实跑通过 **232**,两守卫退出码均 **0**。
|
|
1264
|
+
(上块为 v1.2 复核轮快照;**F1 收口轮后**:am 177/0、mp 63/0、合计 **240**、`--mutate`
|
|
1265
|
+
am 24 处实存(含③63)+钉 1 条、mp 8 处+钉 1 条——见 §十五。)
|
|
1266
|
+
|
|
1267
|
+
**复核侧对照读数**〔独立复核〕:am 173/0 rc=0、mp 59/0 rc=0(Q `SAME(15)/DIFF(0)`、负对照 DIFF 恰好 `[A_add, full_A]`);`--mutate` am **23 条**逐条吻合 rc=0、mp 8 条(5/13/5/14/4/2/2/11)rc=0;另 mr 59/0、aa 64/0 未改——与〔撰写轮实跑〕逐位一致。(**v1.2 批次快照**;F1 收口轮读数见 §十五。)
|
|
1268
|
+
|
|
1269
|
+
**python 全量**〔工作流采集·收官脚本实跑;本轮撰写**未复跑**〕:rc=**0**,
|
|
1270
|
+
`===== SUMMARY 308/308 通过,5 跳过(依赖缺失/平台不符) =====`(含 `PASS md_cg.test_time_core_lint`)。
|
|
1271
|
+
|
|
1272
|
+
**容器两栈**〔工作流采集·收官脚本实跑;本轮撰写**未复跑**〕:
|
|
1273
|
+
- 栈一(linux:rust+python 全量含全部守卫+smoke):**rc=0**;`结果: 22 pass / 0 fail`;`[PASS] smoke_test (linux)`;`=== 汇总: 38 pass / 0 fail ===`。
|
|
1274
|
+
- 栈二(node 侧:build+ts test):**rc=0**;`# cancelled 0`/`# skipped 3`/`# todo 0`/`# duration_ms 11455.814531`。
|
|
1275
|
+
|
|
1276
|
+
**F1 层读数**〔撰写轮实跑·本轮直接执行〕:`len(_SRC_MUTATIONS)`=**23**;工作区 `md_cg/test_autonomy_modes.py` 全文 `'cell = MATRIX'` 出现 **0 次**(③ 元组被删、注释残留在 `:1448`/`:1453-1455`);`git show HEAD:md_cg/test_autonomy_modes.py` 于 **:1104-1106** 有③元组(`("矩阵整表坍缩成 full(档位不生效·真源版)", "mod", autonomy_modes, "decide", ' cell = MATRIX[m][act]', ' cell = MATRIX["full"][act]', 47)`)。
|
|
1277
|
+
(**v1.2 批次快照**——上段为 F1 发现时读数;**F1 收口轮**读数:`len(_SRC_MUTATIONS)`=**24**
|
|
1278
|
+
(③已恢复)、`'cell = MATRIX[m][act]'` 自检判据在位、自检 PASS——见 §十五.2。)
|
|
1279
|
+
|
|
1280
|
+
### 13.5 独立复核判定与 uncovered(DEFER)
|
|
1281
|
+
|
|
1282
|
+
#### 13.5.1 判定(原样摘录)
|
|
1283
|
+
|
|
1284
|
+
> 【判定】DEFER——三件修复(U1 直写面断言 / U2 空池判绿收口 / E 面档位接线)的**功能面与断言面**经我独立复现全部成立;但交付包存在一处「声称与产物不符」的必须收口项(F1):守卫定点变异表第③条(矩阵整表坍缩)在工作区被删除(仅剩注释),文档与注释声称『--mutate 24 处全部命中预期(含 ③63)』,实跑 23 处。按『不采信执行者自述』,不构成 ACCEPT。
|
|
1285
|
+
|
|
1286
|
+
#### 13.5.2 复核复现读数(摘要·摘录)
|
|
1287
|
+
|
|
1288
|
+
- **U1**:文件注入 V4'(payload 与本工作流物证逐字等价)⇒ 现行树 **rc=2/ANCHOR-MISS**——归因证明:内存剔除⑰条目后跑真套件 ⇒ **171 通过 2 失败**(M1e①②)**rc=1**(行为判别力在位、rc=2 唯一原因是⑰锚点自检);`--mutate` ⑰红3/⑱红2 吻合;**改前树同注入 149/0 全绿**(存活)。
|
|
1289
|
+
- **U2**:`_bytes` 恒空注入 ⇒ **红 11**(逐条=R1/R2/R3 逐字节+R3 节点复位+R4 C/B/D 逐字节+R4 C/B/D 前置取证+R5);独立探针:前像 444B 非空取证、`_bytes(缺失)==b''`。
|
|
1290
|
+
- **E 面**:plan 档四入口(weights/freshness/set_state/backfill)⇒ `ok=false/error=autonomy_forbidden`+独立磁盘指纹零写盘+盘面值不变(importance 0.5 未改、n_bare 无 state 键);**改前树同输入 `wrote=True`+0.5→0.6646/0.57、state=converged、backfilled=1**(对照)。
|
|
1291
|
+
- **合法输入对拍**:confirm/full **21/21 逐位 SAME**;DIFF 仅 plan_E×3(预期修复差异);负对照(写链 A 面注入)DIFF=[confirm_A, confirm_C, confirm_MCP, full_A, full_C, full_MCP] 非空。
|
|
1292
|
+
- **不得静默**:ANCHOR-MISS(am/mp 的 `_mutate_mode` 与 main 两路径均 rc=2+打印);ORACLE-MISS(PATH 置空 rc=2+『git 不可用』打印)。
|
|
1293
|
+
- **修前腿两树对照**:V1 149/0→rc=1 171/2;V2→169/4;V3→172/1;V4 149/0→rc=2(结构红);V4strip 149/0→rc=2(**V4strip=V4 同点位「摘除式」注入**:把 `mcp_server.py:3373` 判据**不限档位摘除**为恒放行——即 §7.2 行 652-653 所记「把该闸……不限档位摘除的变体」,与表内变异 ⑰ 同形态;本文档此前未定义、2026-10-03 修订补);V3m(矩阵坍缩文件注入)改前 rc=2(破坏 HEAD ③锚点)→ 现行 rc=1 **110/63**。
|
|
1294
|
+
- **复核边界**:全部实验在系统临时区(实验后清理;工作区 10 个关键文件 sha256 与起始快照逐位一致);未触在役数据根;无 `git add/commit/push`;未跑全量与容器(按任务书留给脚本——§13.4 已列脚本实跑读数)。
|
|
1295
|
+
|
|
1296
|
+
#### 13.5.3 F1 事实链与收口
|
|
1297
|
+
|
|
1298
|
+
**F1 事实链**(复核逐条 + 本节读码/实跑复核):
|
|
1299
|
+
1. `git show HEAD:md_cg/test_autonomy_modes.py:1104` 有③元组(expect 47)——本节实读于 `:1104-1106`。
|
|
1300
|
+
2. 工作区同文件仅剩注释(`:1448`/`:1453-1455`)、无 `'cell = MATRIX[m][act]'` 元组——本节实核:全文 0 次出现。
|
|
1301
|
+
3. 模块导入实测 `len(_SRC_MUTATIONS)`=**23**;`--mutate` 实跑 **23 条** rc=0 PASS——本节实跑复核。
|
|
1302
|
+
4. 文档多处声称『24 处全部命中预期』并列『③63』——本节实核(**更正前行号**):`:891`、`:1056-1057`(另 `:507-508` 同型);本轮已就地更正为「23 处实存」(落点见本小节末段)。
|
|
1303
|
+
5. 守卫**文件内无总数声明**(该数字仅存于文档/注释、无自动核验载体)——本节实核:两守卫文件搜『24 处』『23 处』均 0 次。**F1 收口轮更新(2026-10-03)**:已加**自动核验载体**——`_MUTATION_IDS` 显式声明(am ①–㉔ 24 个/mp ①–⑧ 8 个)+ 变异表完整性自检(缺项 ⇒ fail-closed exit 2、报缺口编号;判别力钉各红 3),见 **§十五.3**;本条第 5 项缺口**闭合**。
|
|
1304
|
+
6. ③ 形态本身的内存复现 ⇒ 红 **63**(**数字本身正确**)〔复核〕——但**自动核验缺失**。
|
|
1305
|
+
|
|
1306
|
+
**影响面(复核口径)**:U1/U2/E 三件的种子变异(⑰⑱⑲–㉔、mp⑧)**均在表内且实测吻合**,三件本身**不受 F1 影响**。
|
|
1307
|
+
|
|
1308
|
+
**文档面收口(本轮已完成)**:头部 v1.2 复核轮指针/§6.2 v1.2 更新(「24 处」→「23 处实存」+③条说明)/§12.7(命令行读数更正为 23 处实存+③63 加注)/附 B v1.2 追加(同款更正)/§8.1 新增**第 18 条**登记本项。
|
|
1309
|
+
**v1.2 后修订轮追加**(读者反馈处置):§2.5/§4.2/§5.2/§6.2/§9/§10/§12.3/§12.7/§13.1 逐处加注与更正,+新增 §13.7 读数辨析与 §十四 处置表(逐条见 §14.1)。
|
|
1310
|
+
**源码面收口(复核轮留池 → F1 收口轮已做)**:③ 条恢复/重编或其自动核验载体=源码面变更,当时超出复核轮「只写报告文件」边界(登记 §13.6 与 §8.1 第 18 条)。**F1 收口轮(2026-10-03)已完成**:③ 条自 `git show HEAD:` 取回并按现行树勘定锚点、实测校准(红 **63**)+ 两守卫新增**变异表完整性自检**与判别力钉——见 **§十五**。
|
|
1311
|
+
|
|
1312
|
+
### 13.6 边界与未覆盖(含本轮明确不修而留池的面)
|
|
1313
|
+
|
|
1314
|
+
**本轮边界**:只写本报告文件(未改任何源码;未 `git add/commit/push`;报告无明文凭据);上述复现腿与对拍实验全部在系统临时区合成库/副本树,未触在役数据根。
|
|
1315
|
+
|
|
1316
|
+
**本轮明确不修而留池的面**:
|
|
1317
|
+
- **F1 源码面(§8.1 新第 18 条)**:~~③「矩阵整表坍缩」条自动核验缺口——恢复条目或换载体;「防再被误删」机制未定~~ → **F1 收口轮已收口**(2026-10-03):③ 已恢复(红 63)+「删条目即机械报错」的变异表完整性自检(§十五);**判定权仍归复核方**(销项≠ACCEPT;解除待复核方/编排侧重跑重判)。
|
|
1318
|
+
- **计划输入面(§8.1 第 2 条)**:`e_gate(plan=None)` 为现状 ⇒ plan 档 E 一律 fail-closed;「命中计划步骤 ⇒ allow」分支待计划输入面落地。
|
|
1319
|
+
- **E 面未接三处(§8.1 第 15–17 条)**:`lifecycle.stamp`(属 B 链;设计面待裁)/库层 `require_transition`(禁接线)/分数类回滚面(设计面待裁)。
|
|
1320
|
+
- **full 直落前像(§8.1 第 4 条)**:设计 §六 义务①在 full 直落路径未接线(R4「现状钉」保留、非背书——接线时该断言转红、须随之更新)。
|
|
1321
|
+
- **偶发稳定性(§8.1 第 13 条)**:`mp --mutate` 历史 9 次运行 1 次 FAIL 未定因;复核轮与撰写轮各 1 次实跑均 PASS(未复发);未做定位实验(不猜根因)。
|
|
1322
|
+
- **§8.1 其余原池**(1、5–11 等)不受本批影响,照旧。
|
|
1323
|
+
|
|
1324
|
+
### 13.7 读数辨析(回应读者 unclear-3/4/5):U1 三形态 · U2 两形态 · 对拍四套
|
|
1325
|
+
|
|
1326
|
+
**(a)U1「V4'/直写面摘除」的三套读数(§2.9/§12.2/§13.5.2 的对应关系)**:
|
|
1327
|
+
|
|
1328
|
+
| 形态(装置) | 树/轮次 | 读数 | 含义与适用 |
|
|
1329
|
+
|---|---|---|---|
|
|
1330
|
+
| **文件注入**(副本树改写判据行 ≈ 复核 V4' 追加式) | 步骤⑤树(v1.1) | **159/0、0 红——存活**(§2.9) | 修前缺口:该面 0 判别力 |
|
|
1331
|
+
| 同形态 | v1.2 树 | **rc=2/ANCHOR-MISS**(§13.5.2) | **结构红**(⑰条目锚点自检命中,非行为红);归因证明:内存剔除⑰条目后 **171/2 rc=1**(M1e①②)=行为判别力在位 |
|
|
1332
|
+
| **`--mutate` 进程内**·⑱「V4' 注入形态复刻」 | v1.2 树 | **红 2**(M1e①②,仅 plan 两臂) | 行为判别力的直接读数——**复核/验收推荐形态**(预期⑱红 2) |
|
|
1333
|
+
| **`--mutate` 进程内**·⑰「不限档位摘除」 | v1.2 树 | **红 3**(M1e①②③,含 confirm 臂) | 对应复核「不限档位摘除亦全绿」的变体 |
|
|
1334
|
+
| 进程内两条(M-U1-a/b) | 步骤⑤树(v1.1) | **0 红**(§13.2) | 修前缺口(同一装置两树对照) |
|
|
1335
|
+
|
|
1336
|
+
⇒ 选用规则:**复核/验收用 `--mutate` 进程内形态(⑰/⑱;不改工作区文件)**;文件注入形态在
|
|
1337
|
+
v1.2 树上与变异表锚点重叠 ⇒ 触发 ANCHOR-MISS(rc=2 结构红、有打印),须以归因实验
|
|
1338
|
+
(内存剔条目)读行为面。
|
|
1339
|
+
|
|
1340
|
+
**(b)U2「空池」两注入形态的读数辨析**(回应 unclear-5 的「红 3/绿 30 vs 29/4」):
|
|
1341
|
+
|
|
1342
|
+
两读数=**两种注入形态**(非同一形态的冲突计数),均为**收口前**记录:
|
|
1343
|
+
|
|
1344
|
+
| 记录/实测 | 注入 | 树 | 读数 | 点名红项 |
|
|
1345
|
+
|---|---|---|---|---|
|
|
1346
|
+
| 复核探针(§7.2) | `_bytes` 恒空 | 收口前 | 红 **3** / 绿 30 | R1-逐字节、R3-节点复位(**第三条未点名**) |
|
|
1347
|
+
| 修前腿(§13.2) | `_disk_path` 恒 None | 收口前 | 红 **4** / 绿 29 | R1-逐字节、R1-索引条目回齐、R3-节点复位、R5 |
|
|
1348
|
+
| **本节实测 P1** | `_bytes` 恒空 | **现行树**(收口后) | 红 **11** | R1/R2/R3 逐字节、R3 节点复位、R4 C/B/D 逐字节×3、R4 取证×3、R5 |
|
|
1349
|
+
| **本节实测 P2** | `_disk_path` 恒 None | **现行树**(收口后) | 红 **12** | =P1 的 11 条+**R1 索引条目回齐** |
|
|
1350
|
+
|
|
1351
|
+
**差集与机制(闭合推导)**:
|
|
1352
|
+
- 收口把 P1 口径下 8 条「静默判绿」转为判红(R2/R3 逐字节 2 条+R4 逐字节 3 条+R4 取证 3 条
|
|
1353
|
+
——后 3 条为新增断言);即 **收口前 P1 红 3=11−8**、**收口前 P2 红 4=12−8**——两记录与
|
|
1354
|
+
现行树逐位闭合。
|
|
1355
|
+
- 两形态差**恰 1 条**=「R1 索引条目回齐」:其判据 `_entry_from_preimage`(`md_cg/test_mode_parity.py:218`/`:225`)
|
|
1356
|
+
**直接依赖 `_disk_path`**(恒 None ⇒ 恒返回 None ⇒ 判红);`_bytes` 恒空不触及它——这也解释
|
|
1357
|
+
两记录 3 vs 4 的差。
|
|
1358
|
+
- 「红 3 点名 2」的记录不完整如实登记:第三条按差集推断为 R5 跨面汇总(它读 drill 的 bytes
|
|
1359
|
+
合计,P1/P2 下均 False);收口前树不可复得(`test_mode_parity.py` 为未跟踪件、无历史版本;
|
|
1360
|
+
复核 probe_deg 与修前腿产物已删)——不再深挖、不猜。
|
|
1361
|
+
- 装置注:本节实测为**独立子根干净装置**(`_RUN[0]` 递增、单跑;复用子根会读到上一轮盘面——
|
|
1362
|
+
`_lib` docstring 自述;初版诊断曾现 23 条轮间污染,已排除、不作为读数)。
|
|
1363
|
+
- 收口后的判别力:P1 红 11=**全部「逐字节/前像」判据**在空池注入下一律判红(§12.3);P2 红 12
|
|
1364
|
+
(多一条索引条目回齐)。
|
|
1365
|
+
|
|
1366
|
+
⇒ 「29/4」与「红 3/绿 30」**不矛盾**:不同注入形态(差 1 条、有机制解释)+同一时代(收口前);
|
|
1367
|
+
现行树两形态判别力=11/12 条全真(**不含静默绿**)。
|
|
1368
|
+
|
|
1369
|
+
**(c)对拍四套读数**:见 §4.2 末「对拍口径对照」表(15/17/Q15/21+3 的装置×条目集×轮次;
|
|
1370
|
+
v1.2 后例行背书=Q 组 15 项+复核 `obs2` confirm/full 21 项——两者不冲突)。
|
|
1371
|
+
|
|
1372
|
+
---
|
|
1373
|
+
|
|
1374
|
+
## 十四、读者反馈修订(v1.2 后轮,2026-10-03)——unclear 7 / unsupported 3 处置 + 问答 7
|
|
1375
|
+
|
|
1376
|
+
> 读者声明(原样):本次只通读报告文件(未运行命令、未核对仓库事实)。以下行号均指**修订前**版本;
|
|
1377
|
+
> 处置落点=修订后本报告。**处置原则**:能补证据的补、能说清的改措辞、确属误报的说明不改。
|
|
1378
|
+
> **本版起「当前有效读数」单一入口=头部块**(回应 unclear-1)。
|
|
1379
|
+
|
|
1380
|
+
### 14.1 处置表(逐条)
|
|
1381
|
+
|
|
1382
|
+
| # | 类别 | 反馈摘要 | 处置 | 落点(修订后) |
|
|
1383
|
+
|---|---|---|---|---|
|
|
1384
|
+
| 1 | unclear | 无「当前有效读数」单一入口;159/56 vs 173/59、24 vs 23、7 vs 8 无汇总 | **头部新增「当前有效读数」块**(守卫 173/59、变异 23/8、全量 308/308、容器 rc=0;历史↔现行口径对照与裁定「以 §12.7/§13.4 为准」) | 头部 |
|
|
1385
|
+
| 2 | unclear | 行号跨轮漂移无说明(`decide` :317 vs :335-385;`freshness.recalc` :302 vs :358) | **头部新增「行号口径」段**:§一–§十一=HEAD 树读码;v1.2 插入致下移(`MATRIX` :138→:156、`decide` :317→:335);`freshness.recalc` 两处=def 行 vs 闸落点行(非漂移);总则:以 §十二/§十三为准 | 头部 |
|
|
1386
|
+
| 3 | unclear | V4'/直写面摘除三个并列读数无对应表 | **§13.7(a) 三形态对照表**(文件注入×2 树、`--mutate` ⑰/⑱、进程内修前;含「用哪个/预期什么」选用规则) | §13.7;§2.9 表加指针 |
|
|
1387
|
+
| 4 | unclear | 「对拍」四套读数无映射;:1169 与 :1191 并读似矛盾 | **§4.2 末新增「对拍口径对照」表**(15/17/Q15/21+3 的装置×条目集×轮次);判明不矛盾(条目集不同;v1.2 后例行背书=Q 组+obs2 confirm/full) | §4.2 末;§13.7(c) |
|
|
1388
|
+
| 5 | unclear | U2 空池两读数不一致且未解释;「点名 2 条却记 3」 | **§13.7(b) 辨析**:两读数=两注入形态;差 1 条有机制解释(`_entry_from_preimage` 依赖 `_disk_path`);收口转化 8 条使 3+8=11、4+8=12 与现行树闭合;「第三条未点名」如实登记(推断=R5) | §13.7;§12.3 表 |
|
|
1389
|
+
| 6 | unclear | 变异编号 ⑦–⑯ 名称全篇不给但按号引用 | **§12.7 新增「变异编号↔形态名↔红项数」对照表**(23 处+mp 8 处;③条标注已删) | §12.7 |
|
|
1390
|
+
| 7 | unclear | 0.57 vs 0.6646 两说、0.57 来源不明 | **§2.5 加来源注**:0.57=该腿(步骤⑤构造)实测(守卫 M2⑥ 注释同引);0.6646=补强批次构造(basis='test'、入度=1);两构造不同、都是实跑;0.57 构造细节未留存 | §2.5 |
|
|
1391
|
+
| 8 | unsupported | §九 仍以「24 处」「已知例外」收尾、无 v1.2 标注 | **§九 加 v1.2 更新块**(①23 处实存 ②U1 已销项 ③E 面接线已落 ④交付面 5M+2 未跟踪 ⑤旧口径为快照) | §九 |
|
|
1392
|
+
| 9 | unsupported | §10 写死「零生产码改动」、git 面只列 test 文件 | **§10.1/§10.2 加 v1.2 注**(改 4 生产码文件;现行 git status 快照;红线逐条仍成立;效力范围=步骤⑤快照) | §10 |
|
|
1393
|
+
| 10 | unsupported | §13.1「五调用点实参仅 A/B/C/D」vs §12.4「`e_gate`=`decide(E_WEIGHT)`」口径打架 | **§13.1 改为「修前口径/修后」双列**:现行树 `E_WEIGHT` 实参调用点恰 1 处(`autonomy_modes.py:479`,`e_gate` 体内);五处热路径仍只走 A/B/C/D(本轮 grep 实测) | §13.1 |
|
|
1394
|
+
| 附 | unsupported | 同类「已被后文推翻未标注」三处(§2.9 V4' 行/§5.2 注/附 B「未跑」清单) | **逐处加 v1.2 更新注**:§2.9→指向 §13.7(a);§5.2「冗余项」→已收口(§12.3);附 B→U1/U2 修复已做+全量/容器已跑(并加本轮实跑段) | §2.9/§5.2/附 B |
|
|
1395
|
+
|
|
1396
|
+
### 14.2 读者问答(nextQuestions 7 条,逐条)
|
|
1397
|
+
|
|
1398
|
+
1. **提交面:v1.2 的 4 个生产码文件+2 个守卫+本报告至今未提交——提交由谁、何时?与步骤⑤守卫改动一起提交还是分开?§10.3 的「应随批入库」在 v1.2 之后还算数吗?** —— 事实:v1.2 后工作树=5 M(4 生产码+守卫)+2 未跟踪新件(`test_mode_parity.py`、本报告),见 §10 v1.2 注。**提交执行方与时机不属本报告范围**(红线禁本报告轮 `git add/commit/push`);§10.3 的「随批入库」建议**在 v1.2 后仍算数**(四件交付之二+本报告),但是否与步骤⑤守卫改动**一起还是分开=编排/宿主面决定**,本报告不代裁。
|
|
1399
|
+
2. **F1:③ 条为什么被删、是谁删的?恢复 ③ 还是换载体?「防误删」谁定?F1 收口后是否够 ACCEPT?** —— **原因无留痕**:本轮复查(`git diff` 形态=③注释被更新为「红 63」、其元组同批删除;实施记忆与守卫注释均按「24 处」记录、未写删除动机)——**不能归因、不猜**。收口路径(恢复③条/换「自动核验载体」)与「防误删」机制**归下一批实施/复核**;F1 源码面收口后**仍须复核方重判**(「文档面更正≠ACCEPT」立场不变,§13.6);是否重跑全链由复核方定。**F1 收口轮已实施**(2026-10-03):③ 已恢复(红 63 实测)+「防误删」=变异表完整性自检(缺项 ⇒ exit 2、报缺口编号;两守卫对齐)+判别力钉——见 **§十五**。
|
|
1400
|
+
3. **设计面:三处待裁(`stamp`/库层/回滚)由谁裁、何时?「plan 档 E 一律 fail-closed」比设计 §三更严——改设计还是补偏离记录?** —— 归属=**设计真源持有方**(`docs/plans/记忆自处理三档自治_设计_v0.2.md` 已签收冻结);三处理由逐条在 `e_gate` docstring(§8.1 第 15–17 条)。「更严」的成因=计划输入面未落、「命中计划步骤 ⇒ allow」分支不可达(fail-closed 近似);偏离记录/改设计**由设计面决定**,本报告只如实登记现状(§12.5 粒度声明)。
|
|
1401
|
+
4. **在役面:plan 档日常 `maintain`/`freshness`/`lifecycle` 写盘全被拦的后果谁评估?在役档位与 R1–R4 何时采?13 处夹具改造排期?** —— 本报告**未采集在役读数**(§8.1 第 1 条:生产接线未落);接线前置=先采在役档位与 R1–R4(§8.2 排期③);评估责任面=**接线批/宿主面**;方案 A 的 13 处夹具改造排期(§8.2)=接线批决定(接线前或同批),本报告不代裁。
|
|
1402
|
+
5. **证据面:%TEMP% 产物、三套对拍、全量/容器对应哪棵树/时刻?下一轮按什么命令跑?要不要在 v1.2 树补跑全量与容器?** —— ①全量 308/308 与容器两栈为**补强批次后工作树**上的收官脚本实跑(§13.4;容器 duration 11455.8ms 为新一轮读数);②三套对拍的装置/条目集见 §4.2 对照表;③下一轮命令清单=§12.7+§13.4 逐条(两守卫正向+`--mutate`+`run_tests.py md_cg`+全量+容器两栈);④**v1.2 树上全量与容器已跑**(脚本实跑、rc=0)——复核方如需自跑按同清单。
|
|
1403
|
+
6. **归档面:文件名仍 v1.0、`docs/README.md` 未登记——对外引用写哪个版本?要不要出总表/改名?** —— ①「当前有效读数」总表**本版已加**(头部单一入口);②文件名与 `docs/README.md` 登记=**文档治理批次**事项(同系列 ②③④ 三份亦未登记,§附A 已如实登记);本报告沿系列现状、不单方面改名或扩面。
|
|
1404
|
+
7. **稳定性:§8.1 第 13 条的偶发 FAIL 在 v1.2 之后算观察结束吗?什么条件升级「必须定位」?** —— 事实:v1.2 后(复核轮+撰写轮+本轮)`mp --mutate` 各 1 次实跑均 PASS、**未复发**(累计 3 次);「算不算结束」与升级阈值**归流程侧定**(§6.5 立场:不代定阈值);本报告记账:未复发,**再现即触发定位**。
|
|
1405
|
+
|
|
1406
|
+
---
|
|
1407
|
+
|
|
1408
|
+
## 十五、F1 收口轮(2026-10-03)——③条恢复 / 防误删自检 / 文档同步
|
|
1409
|
+
|
|
1410
|
+
**节定位**:§十三 F1(「声称与产物不符」:变异表③条被删、实存 23 处而文档/注释声称 24 处)
|
|
1411
|
+
的**源码面收口批**。本批三件(P0):①**恢复③条**(自 `git show HEAD:` 取回、按现行树勘定锚点
|
|
1412
|
+
并实测校准);②**防误删机械自检**(补「数字无自动核验载体」缺口——删条目即机械报错);
|
|
1413
|
+
③**文档与守卫注释同步**(本节即落点)。
|
|
1414
|
+
**硬边界**:不改 ③ 以外的变异条目语义;不触在役数据根(全部实验在 `tempfile.mkdtemp` 合成库);
|
|
1415
|
+
不改 `data/policy.json`、不削弱任何 `forbidden`;不 `git add/commit/push`;自跑范围=两守卫
|
|
1416
|
+
(正向+变异自证)+定向回归 `run_tests.py md_cg`(全量与容器留给收官脚本)。
|
|
1417
|
+
**基线源**:一切判据以**当前工作区文件**为基线(自检读 `__file__` 现文),**不以 git HEAD 为
|
|
1418
|
+
基线源**(本仓已有两次教训;头部「行号口径」段同规)。
|
|
1419
|
+
|
|
1420
|
+
### 15.1 事实链(复核逐条 + 本批实核)
|
|
1421
|
+
|
|
1422
|
+
1. `git show HEAD:md_cg/test_autonomy_modes.py` 有③元组(expect **47**、锚点
|
|
1423
|
+
`cell = MATRIX[m][act]`,HEAD 树 `:1104-1106`)——本批实读复核。
|
|
1424
|
+
2. 工作区同文件仅剩注释(③注释块在表内、无该元组;v1.2 复核轮读数 `:1448`/`:1453-1455`
|
|
1425
|
+
——F1 批改动后行号上移,以 `_SRC_MUTATIONS` 区间现读为准);全文
|
|
1426
|
+
`'cell = MATRIX'` **0 次**——本批实核。
|
|
1427
|
+
3. 模块导入实测 `len(_SRC_MUTATIONS)`=**23**;`--mutate` 实跑 **23 条** rc=0——本批实跑复核
|
|
1428
|
+
(收口前读数)。
|
|
1429
|
+
4. 文档多处声称「24 处」、注释自称「红 63」——**数字本身正确、但无自动核验载体**(数字只存
|
|
1430
|
+
文档/注释)——复核结论,本批确认。
|
|
1431
|
+
5. **删除原因无留痕、不归因、不猜**(复核与实施轮立场一致;本批未做归因实验)。
|
|
1432
|
+
|
|
1433
|
+
### 15.2 恢复记录(③条:取回 → 锚点勘定 → 实测校准)
|
|
1434
|
+
|
|
1435
|
+
- **取回**:③元组自 `git show HEAD:md_cg/test_autonomy_modes.py` 逐字取回(原 expect **47** =
|
|
1436
|
+
历史值;HEAD 形态与现行树同形)。
|
|
1437
|
+
- **锚点勘定(现行树实测)**:锚点 `' cell = MATRIX[m][act]'` 在 `md_cg/autonomy_modes.py:358`
|
|
1438
|
+
(`decide()` 内;模块级函数、无类缩进)——逐字在位;替换文 `' cell = MATRIX["full"][act]'`。
|
|
1439
|
+
- **实测校准**:`--mutate` 实测 ③ 红项=**63**(历史 47 系旧树口径)——与复核「③形态内存复现
|
|
1440
|
+
⇒ 红 63」**逐位一致**;expect **以现行树实测值 63 写入表**(注释同步为「F1 收口轮校准」)。
|
|
1441
|
+
- **③条注释同步**:保留 v1.2 校准注记(红 63 的构成)+追加取回/校准说明(表内 ③ 注释块)。
|
|
1442
|
+
|
|
1443
|
+
### 15.3 防误删自检机制(补「无自动核验载体」缺口)
|
|
1444
|
+
|
|
1445
|
+
**形态(本节报告口径)**:**「编号无缺口 + 表长与显式声明一致」双判据**——
|
|
1446
|
+
|
|
1447
|
+
- **声明**:`_MUTATION_IDS`(am=①–㉔ 共 24 个;mp=①–⑧ 共 8 个;显式字面量);
|
|
1448
|
+
- **判据**(`_table_gaps` 纯函数,逐行扫描表区间;`_table_lines` 划区间):
|
|
1449
|
+
a. 编号注释被下一**不同**编号注释覆盖(=**删元组留注释**,F1 原形)⇒ 报该编号;
|
|
1450
|
+
b. 编号注释序列与声明不一致(缺/重复;含**注释与元组同删**的真删形态)⇒ 报缺者;
|
|
1451
|
+
c. `len(_SRC_MUTATIONS) ≠ 声明长度` ⇒ 报「len:N≠M」兜底(防共用注释等边角);
|
|
1452
|
+
- **fail-closed**:缺口非空 ⇒ 打印「变异表缺口:<编号>」并**退出码 2**(与 ANCHOR-MISS 同层,
|
|
1453
|
+
`main()` 与 `--mutate` 两路径均**先行执行**);**基线源=当前工作区文件**(`__file__` 现读)。
|
|
1454
|
+
- **两守卫对齐**:`md_cg/test_autonomy_modes.py` 与 `md_cg/test_mode_parity.py` **同款落地**
|
|
1455
|
+
(各自独立声明/判据/自证测例,不共享 import——两守卫的独立变异表口径不混排)。
|
|
1456
|
+
- **判别力自证(三层)**:
|
|
1457
|
+
1. **合成源自证测例**(am `g_m` 末 F1①–④ / mp 新组 `g_s` F1①–④,随每次运行自动核验):
|
|
1458
|
+
删元组留注释 ⇒ 报缺口编号;注释与元组同删 ⇒ 报缺口编号;真实表 ⇒ 无缺口(**「24 处」的
|
|
1459
|
+
自动核验载体本体**);表长-1 ⇒ 报「len」兜底;
|
|
1460
|
+
2. **判别力钉**(`_SELFCHECK_MUTATION`,**不占表内编号**——表长恒 = 声明,复核口径「24 处」
|
|
1461
|
+
与实存一致):剥掉 `_table_gaps` 自检开关(恒判「完好」)⇒ 合成源测例转红 **3**
|
|
1462
|
+
(am/mp 各 1 条钉、各红 3;`--mutate` 逐轮同跑、不符即 FAIL);锚点同样过 `_anchor_check`
|
|
1463
|
+
(漂移即 ANCHOR-MISS、exit 2);
|
|
1464
|
+
3. **删条目端到端演示**(本批实跑;**临时副本文件**、跑毕即删、工作区原件零改动):
|
|
1465
|
+
am(`_f1_demo_guard.py`):③元组删除(留注释)⇒ rc=2、打印「变异表缺口:③」+「len:23≠24」;
|
|
1466
|
+
③注释与元组同删 ⇒ rc=2、同报缺口编号 ③。mp(`_f1_demo_mp.py`):②条目删除(留注释)
|
|
1467
|
+
⇒ rc=2、打印「变异表缺口:②」+「len:7≠8」——两守卫均**删条目即机械报错**。
|
|
1468
|
+
|
|
1469
|
+
### 15.4 重跑读数(F1 收口后)与复核标准对照
|
|
1470
|
+
|
|
1471
|
+
```
|
|
1472
|
+
python -X utf8 -m md_cg.test_autonomy_modes → 177 通过 0 失败(rc=0)〔+F1 组 4 条〕
|
|
1473
|
+
python -X utf8 -m md_cg.test_autonomy_modes --mutate → 未变异基线红项=0;表内 24 处逐处命中(rc=0)
|
|
1474
|
+
①27 ②46 ③63 ④8 ⑤14 ⑥5 ⑦18 ⑧4 ⑨22 ⑩2 ⑪15 ⑫2 ⑬3 ⑭2 ⑮8 ⑯9 ⑰3 ⑱2 ⑲5 ⑳2 ㉑1 ㉒1 ㉓1 ㉔1
|
|
1475
|
+
+判别力钉「防误删自检开关剥除」红 3
|
|
1476
|
+
python -X utf8 -m md_cg.test_mode_parity → 63 通过 0 失败(rc=0)〔+g_s 组 4 条〕
|
|
1477
|
+
python -X utf8 -m md_cg.test_mode_parity --mutate → 未变异基线红项=0;8 处逐处命中(rc=0)
|
|
1478
|
+
5 / 13 / 5 / 14 / 4 / 2 / 2 / 11 +判别力钉红 3
|
|
1479
|
+
python -X utf8 scripts/run_tests.py md_cg → 231/231 通过,3 跳过(13 次实跑:11 绿、
|
|
1480
|
+
2 次 230/231——1 次捕获项名 `test_p27_docindex`〔非本批两守卫〕,未定位、不猜;见 15.5)
|
|
1481
|
+
```
|
|
1482
|
+
|
|
1483
|
+
**复核标准对照**:
|
|
1484
|
+
|
|
1485
|
+
| 标准 | 读数 |
|
|
1486
|
+
|---|---|
|
|
1487
|
+
| ① ③条在册且 `--mutate` 实测红项数吻合 | ③ 在表(表内可核)+实测红 **63** 命中预期(rc=0,全文 PASS) |
|
|
1488
|
+
| ② 删条目 ⇒ 自检机械报错(演示) | 两种删法均 rc=2+打印缺口编号 ③(15.3 第 3 层;演示用临时副本、零工作区改动) |
|
|
1489
|
+
| ③ 文档与产物一致(「24 处」与实存一致) | `len(_SRC_MUTATIONS)`=**24**=`_MUTATION_IDS` 长度;F1③ 测例每次运行自动核验;本节「24 处(③已恢复)」与实存一致 |
|
|
1490
|
+
|
|
1491
|
+
### 15.5 边界与如实登记(本批)
|
|
1492
|
+
|
|
1493
|
+
- **③ 以外的变异条目语义未改**(表内 0 处改动;判别力钉在表外、不占编号);
|
|
1494
|
+
- **全量与容器未跑**(任务书明文留给脚本;本批自跑=两守卫正向+变异自证+定向回归);
|
|
1495
|
+
- **偶发读数如实**:`run_tests.py md_cg` **13 次实跑中 2 次 230/231**(11 次 231/231)——
|
|
1496
|
+
其中 1 次捕获失败项名=**`test_p27_docindex`**(该次耗时 364s 异常偏高、与本文档编辑窗口
|
|
1497
|
+
重叠;该测试索引**真实 docs/** 并逐字节回放〔`:440-452`/`:697-717`〕,对「运行期间源被外部
|
|
1498
|
+
修改」不设防);另 1 次未捕获项名(该轮两守卫均 PASS)。**单跑 `test_p27_docindex` 98/0
|
|
1499
|
+
通过**、两守卫在全部 13 轮均 PASS。未做定位实验、**不猜根因**(与 §8.1 第 13 条同族
|
|
1500
|
+
「未定因」口径);**记账口径(2026-10-03 修订)**:11 次 231/231 为常态读数,2 次 230/231 均为**未定位观察项**(1 次有「与编辑窗口重叠+耗时 364s 异常」旁证、另 1 次未捕获项名)——**两次并列登记、不相互排除、不归因**;「以 11 绿为准」原措辞已撤(其排除动作缺依据,读者指出);阈值与升级时机归流程侧(§8.1 第 13 条);
|
|
1501
|
+
- **演示脚本**为一次性临时副本(`md_cg/_f1_demo_guard.py`,跑毕即删,含 `__pycache__` 清理),
|
|
1502
|
+
工作区原件零改动;
|
|
1503
|
+
- **判定权**:本批只交「缺口已补 + 判别力已机械自证」的读数;DEFER 的解除归**复核方/编排侧**
|
|
1504
|
+
重跑重判(§13.5.1 立场不变)。
|
|
1505
|
+
|
|
1506
|
+
---
|
|
1507
|
+
|
|
1508
|
+
## 十六、F1 收口·验收轮(2026-10-03)——修前五腿 / 独立复核 ACCEPT / 全链收官读数
|
|
1509
|
+
|
|
1510
|
+
**节定位**:§十五(F1 收口轮·源码面收口批)的**验收侧记录**。§十五 交付三件(③条恢复/防误删
|
|
1511
|
+
自检/文档同步)并自跑两守卫+定向回归;本轮补齐:修前现场五腿(§16.2)、修法契约与落点核对
|
|
1512
|
+
(§16.3)、全链验证数字(§16.4)、**独立复核判定=ACCEPT**(§16.5)、边界与留池(§16.6)。
|
|
1513
|
+
§十五.5 约定「DEFER 的解除归复核方/编排侧重跑重判」——§16.5 即该重判的落点(判定权归复核方,
|
|
1514
|
+
本报告只摘录)。
|
|
1515
|
+
**行号口径**:本节行号=**本轮读码所见(现行工作树)**;标「采集口径」者=F1 收口轮**修前版本**
|
|
1516
|
+
读码(工作流采集轮;F1 收口轮改动后行号已整体上移,不回填——同头部「行号口径」段规则)。
|
|
1517
|
+
**本轮边界**:只改本报告文件(追加本节);未改源码;未 `git add/commit/push`;自跑范围=两守卫
|
|
1518
|
+
(正向+`--mutate`)——全量与容器取脚本实跑读数(§16.4)。
|
|
1519
|
+
|
|
1520
|
+
### 16.1 缺陷定义与真实站点(读码所见)
|
|
1521
|
+
|
|
1522
|
+
**缺陷定义(F1)**:`md_cg/test_autonomy_modes.py` 定点变异表第③条「矩阵整表坍缩成 full」的
|
|
1523
|
+
**元组被删(仅剩注释)**——实存 **23** 处 vs 文档/注释声称 **24 处**;且守卫文件内**无任何总数
|
|
1524
|
+
核验载体**(数字只存于文档/注释),**删条目无机械报错**。数字「63」本身正确(③形态内存复现
|
|
1525
|
+
红 63,§13.5.2/§16.2 腿 3);缺陷在「条目不在表内 + 无自动核验」。
|
|
1526
|
+
|
|
1527
|
+
**真实站点(本轮读码·现行树)**:
|
|
1528
|
+
|
|
1529
|
+
| 面 | 站点(本轮读码) | 形态 |
|
|
1530
|
+
|---|---|---|
|
|
1531
|
+
| 变异表 ③(缺陷本体) | `md_cg/test_autonomy_modes.py` `_SRC_MUTATIONS` `:1464-1696`;③注释块 **`:1494-1504`**、③元组 **`:1505-1507`** | 修后:③恢复在位(编号 ①–㉔) |
|
|
1532
|
+
| ③变异目标锚点 | `md_cg/autonomy_modes.py:358`(`cell = MATRIX[m][act]`) | 逐字在位(③替换文 `cell = MATRIX["full"][act]` 现仅见于表内 `:1507`) |
|
|
1533
|
+
| 防误删自检(修后新增) | `test_autonomy_modes.py:1728-1789`(`_MUTATION_IDS` `:1728-1730`/`_table_lines` `:1735-1746`/`_table_gaps` `:1749-1782`/`_table_integrity_check` `:1785-1789`) | 三级判据 + 表长兜底 |
|
|
1534
|
+
| 判别力钉(修后新增) | `:1705-1711`(`_SELFCHECK_MUTATION`;**不占表内编号**) | 剥除自检开关 ⇒ 合成源测例红 3 |
|
|
1535
|
+
| 挂钩(修后新增) | `_mutate_mode` `:1891-1922`/`main` `:1930-1960`;`_anchor_check` 纳钉 `:1813-1820` | 缺口 ⇒ 打印「变异表缺口:<编号>」+ fail-closed exit 2 |
|
|
1536
|
+
| mp 对位(两守卫对齐) | `test_mode_parity.py`:`g_s` `:963-991`(纳入 `_GROUPS` `:994`)/钉 `:1110-1116`/声明 `:1132`/判据 `:1151-1183`/挂钩 `:1274-1305`、`:1308-1344` | 同款机制(声明 ①–⑧ 共 8) |
|
|
1537
|
+
| 修前现场(采集口径) | ③注释残留 `:1448-1455`(无元组;全文 `'cell = MATRIX'` **0 次**);HEAD 树③元组 `:1104-1106`(expect **47**);`len(_SRC_MUTATIONS)`=**23** | 「注释在、元组没了」——量测三路一致(AST/import/实跑) |
|
|
1538
|
+
| 文档残留(采集口径·修前) | 落码记录 `:525`/`:779`/`:783` 处「24 处」声称;守卫内③注释 `:1449` 以现在时声称「红 63」而条目不在表内 | 修后已同步(§16.3 文档面表;同三处按内容对齐现读 `:531`/`:791`/`:795`,均处历史快照注语境) |
|
|
1539
|
+
|
|
1540
|
+
### 16.2 修前现场(工作流采集五腿 · 逐条 payload/异常/崩溃点)
|
|
1541
|
+
|
|
1542
|
+
**共同装置(采集口径)**:临时副本树(`%TEMP%/f1repro_5g7w7jl9/`,=工作区 `md_cg` 包 +
|
|
1543
|
+
仓根 `utf8_boot.py`)。**五腿全部为「非崩溃型」**——**无异常抛出、无 traceback**(F1 是「静默
|
|
1544
|
+
数据缺失 + 无核验」型缺陷,「崩溃点为空」即缺陷形态本身;其机械证据=量测三路一致的 23)。
|
|
1545
|
+
|
|
1546
|
+
**腿 1 · ③元组缺失对照(工作区 vs HEAD)**
|
|
1547
|
+
- **payload**:只读对照——工作区 `md_cg/test_autonomy_modes.py` 全文 vs
|
|
1548
|
+
`git show HEAD:md_cg/test_autonomy_modes.py`(AST 取 `_SRC_MUTATIONS` 元素数;字面量
|
|
1549
|
+
`MATRIX[m][act]`/`cell = MATRIX` 计数)+ `git diff --unified=3` 取③区域形态。
|
|
1550
|
+
- **observed**:工作区:`'MATRIX[m][act]'` **0 次**、`'cell = MATRIX'` **0 次**、
|
|
1551
|
+
`_SRC_MUTATIONS` elts=**23**;③注释残留在 `:1448-1455`(含「红 63(实测 2026-10-03 补强
|
|
1552
|
+
批次 v1.2 校准 55→63)」),其元组缺失——`:1456` 紧接④注释。HEAD:③元组在 `:1104-1106`
|
|
1553
|
+
(锚点 `' cell = MATRIX[m][act]'`、替换 `' cell = MATRIX["full"][act]'`、expect 47)。
|
|
1554
|
+
`git diff` 显示同批:③注释改写(红 47 段→红 63 段)+元组三行删除;**删除动机无留痕
|
|
1555
|
+
(不归因)**。
|
|
1556
|
+
- **崩溃点**:无(非崩溃型)。
|
|
1557
|
+
- **site**:`md_cg/test_autonomy_modes.py:1448-1456`(对照 HEAD 同文件 `:1104-1106`)〔修前口径〕。
|
|
1558
|
+
- **reproduced**:true。
|
|
1559
|
+
|
|
1560
|
+
**腿 2 · `--mutate` 实存 23 条 rc=0(对照「24 处」声称)**
|
|
1561
|
+
- **payload**:临时副本 `tree_base` 跑 `python -X utf8 -m md_cg.test_autonomy_modes --mutate`
|
|
1562
|
+
(env `PYTHONUTF8=1`)。
|
|
1563
|
+
- **observed**:未变异基线红项=0;实跑变异条目 **23** 条逐条「命中预期」(①27 ②46 ④8 ⑤14
|
|
1564
|
+
⑥5 ⑦18 ⑧4 ⑨22 ⑩2 ⑪15 ⑫2 ⑬3 ⑭2 ⑮8 ⑯9 ⑰3 ⑱2 ⑲5 ⑳2 ㉑1 ㉒1 ㉓1 ㉔1);
|
|
1565
|
+
「定点变异自证:PASS」rc=0(15.6s);**③不在表内**。三路一致:AST elts=23、import 后
|
|
1566
|
+
`len(_SRC_MUTATIONS)`=23、实跑 23 行。
|
|
1567
|
+
- **崩溃点**:无。
|
|
1568
|
+
- **site**:`md_cg/test_autonomy_modes.py:1418-1644`(变异表〔修前口径〕;现行树表体
|
|
1569
|
+
`:1464-1696`——§16.1);运行输出 `%TEMP%/f1repro_5g7w7jl9/mutate_base.stdout.log`。
|
|
1570
|
+
- **reproduced**:true。
|
|
1571
|
+
|
|
1572
|
+
**腿 3 · ③形态红 63(现行树两路实测)**
|
|
1573
|
+
- **payload**:(a) 文件级:HEAD 版③元组(expect 置 63)插入副本 `tree_inject` 的②与④之间
|
|
1574
|
+
(保留③注释)后全表 `--mutate`;(b) 纯内存:import `tree_base` 副本守卫模块,append③元组后
|
|
1575
|
+
跑守卫自带 `_patched`+`_run_groups`(零文件改动)。
|
|
1576
|
+
- **observed**:(a) 24 条、③「矩阵整表坍缩成 full(档位不生效·真源版)」→ 红项=**63** 命中
|
|
1577
|
+
预期、全表 PASS rc=0(18.8s)、其余 23 条读数与基线逐一相同;(b) 红项=**63**(前 12 红项=
|
|
1578
|
+
A 组矩阵格判据等)。锚点 `' cell = MATRIX[m][act]'` 在现行 `md_cg/autonomy_modes.py:358`
|
|
1579
|
+
**逐字在位**(守卫锚点自检 fail-closed 未触发、rc≠2 交叉确认)⇒「63」数字本身正确;缺陷在
|
|
1580
|
+
「条目不在表内且无自动核验」。
|
|
1581
|
+
- **崩溃点**:无。
|
|
1582
|
+
- **site**:`md_cg/autonomy_modes.py:358`(变异目标行);注入副本
|
|
1583
|
+
`%TEMP%/f1repro_5g7w7jl9/tree_inject/md_cg/test_autonomy_modes.py`。
|
|
1584
|
+
- **reproduced**:true。
|
|
1585
|
+
|
|
1586
|
+
**腿 4 · 删条目无机械报错(防误删缺口)**
|
|
1587
|
+
- **payload**:临时副本 `tree_del` 中按 AST 删除⑳「E 面接线摘除·freshness.recalc」元组
|
|
1588
|
+
(注释保留——形态同③被删),随后 ①`python -X utf8 -m md_cg.test_autonomy_modes`
|
|
1589
|
+
②同命令+`--mutate`。
|
|
1590
|
+
- **observed**:①正常模式:「锚点自检:PASS」、「三档自治档位守卫:**173 通过,0 失败**」
|
|
1591
|
+
rc=0(1.0s);②`--mutate`:**22 条**逐条命中预期、PASS rc=0(17.0s)。静态:守卫全文**无
|
|
1592
|
+
`len(_SRC_MUTATIONS)` 判据、无编号连续性检查**;`_anchor_check` 只查锚点在位、`_mutate_mode`
|
|
1593
|
+
只逐条遍历表,均无总数声明;全文 `'24'` 唯一落点 `:1236` 为 `b_p[:24]`(无关)。⇒「删条目
|
|
1594
|
+
⇒ 机械报错」这一机制**当时不存在**。
|
|
1595
|
+
- **崩溃点**:无。
|
|
1596
|
+
- **site**:`md_cg/test_autonomy_modes.py:1723-1760`(`_mutate_mode`)/`:1668-1674`
|
|
1597
|
+
(`_anchor_check`)〔修前口径;修后同函数现读 `:1891-1922`/`:1813-1820`——§16.1〕。
|
|
1598
|
+
- **reproduced**:true。
|
|
1599
|
+
|
|
1600
|
+
**腿 5 · 文档残留「24 处」声称(实存 23)**
|
|
1601
|
+
- **payload**:全文正则扫描 `docs/eval/三档自治_步骤⑤收官与全链验收_落码记录_v1.0.md`
|
|
1602
|
+
(`'24 处|共 24|24 条'` 与 `'23 处'`)+守卫注释核对。
|
|
1603
|
+
- **observed**:残留「24 处」声称:`:525`「合计 24 处定点变异(am 17 + mp 7)——完整口径=
|
|
1604
|
+
「24 处条目…」」;`:779`(§九⑤行)「两文件变异表共 24 处」;`:783`(§十一)「定点变异共
|
|
1605
|
+
24 处」(`:790-793` 有 v1.2 快照注;`:525` 所在 §6.2 有 `:537` 历史注);另
|
|
1606
|
+
`:10`/`:19`/`:615`/`:716`/`:861`/`:1170`/`:1252`/`:1270`/`:1276`/`:1359`/`:1367` 为
|
|
1607
|
+
更正/历史引述。反向:多处已标「23 处实存」。守卫内③注释 `:1449` 仍以现在时声称「红 63
|
|
1608
|
+
(实测…)」而条目不在表内。
|
|
1609
|
+
- **崩溃点**:无。
|
|
1610
|
+
- **site**:文档 `:525`(/`:779`/`:783`)〔修前口径;F1 收口轮文档编辑后对应句按内容对齐现读
|
|
1611
|
+
`:531`/`:791`/`:795`〕;守卫 `:1449`〔修前口径〕。
|
|
1612
|
+
- **reproduced**:true。
|
|
1613
|
+
|
|
1614
|
+
### 16.3 修法契约与落点(读码核对)
|
|
1615
|
+
|
|
1616
|
+
**契约(三件 P0)**:①**恢复③条**——自 `git show HEAD:` 逐字取回、按现行树勘定锚点、expect
|
|
1617
|
+
**实测校准**(红 63;47 为历史值);②**防误删机械自检**——「编号无缺口 + 表长与显式声明
|
|
1618
|
+
一致」双判据,缺项 ⇒ fail-closed(exit 2、报缺口编号);③**文档与守卫注释同步**。
|
|
1619
|
+
**设计说明**:契约「配一条定点变异 或 纳入既有自检体系并两守卫对齐」两分支均做;判别力钉以
|
|
1620
|
+
**内置钉**形态落地且**不占表内编号**——保证「表长恒=24」与复核标准③「『24 处』与实存一致」
|
|
1621
|
+
同时成立(若进表则表长 25 与 24 口径冲突)。
|
|
1622
|
+
|
|
1623
|
+
**源码面落点(本轮读码·现行树)**:
|
|
1624
|
+
|
|
1625
|
+
| 面 | 落点 | 要点 |
|
|
1626
|
+
|---|---|---|
|
|
1627
|
+
| ③元组恢复 | `test_autonomy_modes.py:1505-1507`(锚点 `:1506`、替换+expect 63 `:1507`) | 逐字取回;实测校准 63 |
|
|
1628
|
+
| ③注释 F1 说明 | `:1502-1504` | 取回/校准说明;**删除原因无留痕、不归因** |
|
|
1629
|
+
| docstring F1 段 | `:84-93` | 自检机制+判别力钉+三级判据自述 |
|
|
1630
|
+
| F1 自证测例(`g_m` 末) | `:1413-1440`(F1①–④) | 合成源三形态+真实表对照(**自动核验载体本体**)+表长兜底 |
|
|
1631
|
+
| 判别力钉 | `:1705-1711` | 剥除 `_table_gaps` 自检开关 ⇒ 合成源测例红 3;锚点同过 `_anchor_check` |
|
|
1632
|
+
| 完整性自检 infra | `:1728-1789` | 声明/划区间/三判据/读 `__file__` 现文(不绑 git HEAD) |
|
|
1633
|
+
| `_anchor_check` 纳钉 | `:1813-1820` | 钉漂移 ⇒ ANCHOR-MISS+exit 2 |
|
|
1634
|
+
| 挂钩 | `_mutate_mode` `:1891-1922`(自检与钉先行、打印表内条数 24)/`main` `:1930-1960`(缺口 ⇒ 打印「变异表缺口:<编号>」+ exit 2;PASS 行显示「编号 ①–㉔ 无缺口、表长 24 = 声明」) | `main` 与 `--mutate` 两路径均先行 |
|
|
1635
|
+
| mp 对位(两守卫对齐) | `test_mode_parity.py`:docstring `:60-65`;`g_s` `:963-991`;钉 `:1110-1116`;声明 `:1132`;判据 `:1151-1183`;读现文 `:1186-1190`;纳钉 `:1210-1216`;挂钩 `:1274-1305`/`:1308-1344`(保留 oracle `SystemExit` 分支 `:1256-1259`) | 各自独立声明/判据/自证测例,不共享 import |
|
|
1636
|
+
|
|
1637
|
+
**文档面同步(抽查·本轮读码)**:头部 `:23-32`(F1 收口轮指针+当前有效读数〔守卫 177/63、
|
|
1638
|
+
变异 24 处实存含③红 63〕);§6.1 `:498-499`;§6.2 `:503-504`/`:543-549`;§6.3 `:560-562`;
|
|
1639
|
+
§8.1 第 18 条 `:728`(「已销项」);§9 `:802-807`;§12.7 `:1129-1148`/`:1151-1171`
|
|
1640
|
+
(编号↔形态↔红项对照表,③归位);§13.5.3 `:1303`/`:1310`;§13.6 `:1317`;§14.2 `:1399`;
|
|
1641
|
+
附 B `:949-950`/`:964-971`;§十五 `:1408-1505`(本节即其验收侧)。「23 处实存」旧称已全部更正
|
|
1642
|
+
为「24 处(③已恢复)」或带历史快照标注。
|
|
1643
|
+
|
|
1644
|
+
### 16.4 验证数字(全链)
|
|
1645
|
+
|
|
1646
|
+
**〔本轮自跑·本节撰写轮直接执行〕** L1 直跑:`python -X utf8 -m md_cg.test_autonomy_modes
|
|
1647
|
+
[--mutate]`、`python -X utf8 -m md_cg.test_mode_parity[--mutate]`(仓根)——只读判定(沙箱在
|
|
1648
|
+
`tempfile`、跑毕 rmtree;不改仓库/外部状态)、低频(批内核对)、可逆(零落盘改动)。
|
|
1649
|
+
|
|
1650
|
+
```
|
|
1651
|
+
python -X utf8 -m md_cg.test_autonomy_modes → 177 通过,0 失败(rc=0)
|
|
1652
|
+
python -X utf8 -m md_cg.test_autonomy_modes --mutate → 未变异基线红项=0;表内 24 处逐处命中(rc=0)
|
|
1653
|
+
①27 ②46 ③63 ④8 ⑤14 ⑥5 ⑦18 ⑧4 ⑨22 ⑩2 ⑪15 ⑫2 ⑬3 ⑭2 ⑮8 ⑯9 ⑰3 ⑱2 ⑲5 ⑳2 ㉑1 ㉒1 ㉓1 ㉔1
|
|
1654
|
+
+判别力钉红 3(不占表内编号)
|
|
1655
|
+
python -X utf8 -m md_cg.test_mode_parity → 63 通过,0 失败(rc=0;含 g_s 组 4 条)
|
|
1656
|
+
python -X utf8 -m md_cg.test_mode_parity --mutate → 未变异基线红项=0;8 处逐处命中(rc=0)
|
|
1657
|
+
5 / 13 / 5 / 14 / 4 / 2 / 2 / 11 +判别力钉红 3
|
|
1658
|
+
```
|
|
1659
|
+
|
|
1660
|
+
(本轮为独立新跑:与 §十五.4、独立复核读数(§16.5)逐条一致;断言合计 **240**=177+63。)
|
|
1661
|
+
|
|
1662
|
+
**〔读数来源分列(2026-10-03 修订):定向回归=F1 收口轮自跑;python 全量与容器两栈=本工作流收官脚本实跑(`.zcode/workflow-drafts/三档自治步骤⑤F1收口.dwf.ts:159-208`);本报告撰写轮均未复跑〕**:
|
|
1663
|
+
- 定向回归(**F1 收口轮自跑记录**,非收官脚本)`python -X utf8 scripts/run_tests.py md_cg`:**231/231 通过、3 跳过**(13 次实跑:
|
|
1664
|
+
11 绿、2 次 230/231——1 次捕获项名 `test_p27_docindex`〔非本批两守卫;单跑 98/0〕、另 1 次
|
|
1665
|
+
未捕获项名;未定位、不猜根因,如实登记见 §十五.5)。
|
|
1666
|
+
- **python 全量**(**树=F1 收口改动后的工作树**——收官 phase 在实施+独立复核之后、报告落盘之前;实施员/复核员均被约束「不得编辑工作区文件」)`python -X utf8 scripts/run_tests.py`:**rc=0**;
|
|
1667
|
+
`===== SUMMARY 308/308 通过,5 跳过(依赖缺失/平台不符) =====`(含 `PASS
|
|
1668
|
+
md_cg.test_time_core_lint`)。
|
|
1669
|
+
- **容器两栈**:栈一(linux:rust+python 全量含全部守卫+smoke)**rc=0**(`结果: 22 pass /
|
|
1670
|
+
0 fail`;`[PASS] smoke_test (linux)`;`=== 汇总: 38 pass / 0 fail ===`);栈二(node 侧:
|
|
1671
|
+
build+ts test)**rc=0**(`# cancelled 0`/`# skipped 3`/`# todo 0`/
|
|
1672
|
+
`# duration_ms 11369.384503`)。
|
|
1673
|
+
- 与 §13.4 记录(栈二 `duration_ms 11455.814531`)为**两次独立实跑的两组读数**:§13.4=补强批次(v1.2)树上的工作流收官、
|
|
1674
|
+
本节=**F1 收口树**上的工作流收官(不同树/不同时刻;时长面差异、非结论差异)。全量与容器未由本节撰写轮复跑
|
|
1675
|
+
(容器会向工作区写构建产物〔`hive/target/`、`lib/`、`node_modules/`,均 gitignored〕——边界同 §6.4)。
|
|
1676
|
+
|
|
1677
|
+
### 16.5 独立复核判定与 uncovered(ACCEPT)
|
|
1678
|
+
|
|
1679
|
+
**判定(原样摘录)**:
|
|
1680
|
+
|
|
1681
|
+
> 【判定 ACCEPT:三件(③条恢复/防误删自检/文档同步)经独立复现全部成立,未发现须收口缺陷。】
|
|
1682
|
+
|
|
1683
|
+
**复核界面**:被测声明=报告 §15.3/§15.4 与守卫代码(am `:1413-1440`/`:1505-1507`/
|
|
1684
|
+
`:1705-1711`/`:1728-1789`/`:1891-1960`;mp `:963-991`/`:1110-1190`/`:1274-1344`——本节逐段
|
|
1685
|
+
读码核对,均对应在位)。上轮复核(v1.2 复核轮)判 DEFER 的 F1 必须收口项,本轮复核判
|
|
1686
|
+
**ACCEPT**——「DEFER→收口→ACCEPT」链闭合(判定权归复核方)。
|
|
1687
|
+
|
|
1688
|
+
**复核复现要点(摘录;复核自述「全部为本轮亲自跑」,Windows/py3.12.10、实验根
|
|
1689
|
+
`%TEMP%\f1_rc_cogb49bg`、跑毕已清理)**:
|
|
1690
|
+
- **守卫与变异自证(仓根直跑)**:am 177/0 rc=0、mp 63/0 rc=0(含 Q oracle 15 项与负对照);
|
|
1691
|
+
`--mutate` am 24 处逐条命中(①27 ②46 ③63 …)+钉红 3、mp 8 处(5/13/5/14/4/2/2/11)+钉红 3;
|
|
1692
|
+
**合计 240 断言=声称值**;同装置副本(自建 git)交叉验证 177/0、63/0。
|
|
1693
|
+
- **退化/容错路径真的发生(可判定比较,非「没抛异常」)**:am 5 形态(删③留注释〔F1 原形〕/
|
|
1694
|
+
删③注释+元组/删⑨〔换编号〕/空表/编号重复)⇒ **无论 `main` 或 `--mutate` 路径均 rc=2**、
|
|
1695
|
+
stdout 打印「变异表缺口:<编号>」+「锚点/完整性自检:FAIL(fail-closed,exit 2)」、stderr
|
|
1696
|
+
无 traceback(受控非崩);**报出缺口集合 == 复核独立扫描**(块级状态机+ast 独立计数):
|
|
1697
|
+
③→{③, len:23≠24};⑨→{⑨, len:23≠24};空表→24 编号+len:0≠24;重复编号→{③};
|
|
1698
|
+
mp:删②→{②, len:7≠8}、空表→8 编号+len:0≠8。**修前/修后同输入对照**:重建的 F1 前版本
|
|
1699
|
+
(f1pre)同输入**静默**(22–23 条、rc=0、零缺口报错)→ 现行 rc=2+报缺口——「删条目即机械
|
|
1700
|
+
报错」由**静默→fail-closed** 的转换成立。
|
|
1701
|
+
- **修前各腿重放(现行树副本,六腿)**:V1'→rc=1、175/2(M1×2);V2'→173/4(M1b×2+M1c×2);
|
|
1702
|
+
V3'→176/1(M1d);V4'→rc=2「ANCHOR-MISS」(⑰锚点);V4strip→rc=2(形态定义见 §13.5.2 注);**V3m(矩阵坍缩文件
|
|
1703
|
+
注入)→ rc=2「ANCHOR-MISS('cell = MATRIX[m][act]')」——③恢复的直接机械证据**。六腿全程
|
|
1704
|
+
无 traceback、有打印(受控)。
|
|
1705
|
+
- **合法输入与改前一致(重建对拍)**:f1pre 正向 173/0 rc=0、mp 59/0 rc=0;`--mutate` 23 条
|
|
1706
|
+
红项与 §13.4 v1.2 快照逐条吻合;现行 vs f1pre 逐条对照——PASS 集合 am only-in-cur=4 **恰为
|
|
1707
|
+
F1①–④**、only-in-pre=0;变异红项 am 23 条、mp 8 条逐条 **SAME**(新增仅③=63 与钉=3)
|
|
1708
|
+
⇒「**③以外零改动**」成立。
|
|
1709
|
+
- **删断言探针(内存改、不改文件)**:`_GROUPS` 去 `g_m` ⇒ 16 条变异「红项数不符」FAIL rc=1;
|
|
1710
|
+
内存删表内 1 条 ⇒ `_table_integrity_check()==["len:23≠24"]`+FAIL 横幅 rc=2。
|
|
1711
|
+
- **不得静默可观测面**:删条目/空表/重复形态均子进程可观测(stdout 打印缺口编号+FAIL 横幅、
|
|
1712
|
+
rc=2、无 traceback、`main` 与 `--mutate` 两路径均先行);ANCHOR-MISS 亦打印可观测。
|
|
1713
|
+
- **边界对账**:工作区 10 个关键文件 sha256 起止逐位一致(mismatch=[]);git status 与会话起始
|
|
1714
|
+
一致(5 M+3 未跟踪);HEAD 仍 `ae519a24`;实验根已删。
|
|
1715
|
+
|
|
1716
|
+
**uncovered(复核列出)**:**无新增 uncovered**(判 ACCEPT、明言「未发现须收口缺陷」);复核
|
|
1717
|
+
材料中作为「口径/边界」登记三条:
|
|
1718
|
+
1. **文件注入与③/⑰锚点重叠** ⇒ **复核/验收口径仍须用 `--mutate` 进程内形态(⑰/⑱/③)**
|
|
1719
|
+
(文件注入在现行树触发 ANCHOR-MISS 结构红,非行为读数);
|
|
1720
|
+
2. 定向回归 13 次中 2 次 230/231(1 次捕获项名 `test_p27_docindex`、单跑 98/0;另 1 次未捕获)
|
|
1721
|
+
——**未做定位实验、不猜根因**(与 §8.1 第 13 条同族「未定因」口径);
|
|
1722
|
+
3. 实验装置边界(本机 `%TEMP%`/py3.12.10/未触在役数据根/无 git 写命令)——复核自证。
|
|
1723
|
+
|
|
1724
|
+
### 16.6 边界与未覆盖(含本轮明确不修而留池的面)
|
|
1725
|
+
|
|
1726
|
+
- **本轮边界**:只改本报告文件(追加本节)+F1 收口轮三件自身边界(不改③以外变异条目语义
|
|
1727
|
+
〔表内 0 处改动〕;钉在表外、不占编号;不触在役数据根;未 `git add/commit/push`;报告无明文
|
|
1728
|
+
凭据)。
|
|
1729
|
+
- **明确不修而留池的面(本轮沿用,未扩面)**:
|
|
1730
|
+
- §8.1 第 2 条 **计划输入面**(`e_gate(plan=None)` 现状 ⇒ plan 档 E 一律 fail-closed;
|
|
1731
|
+
「命中计划步骤 ⇒ allow」分支待接线);
|
|
1732
|
+
- §8.1 第 15–17 条 **E 面未接三处**(`lifecycle.stamp`/库层 `require_transition`〔禁接线〕/
|
|
1733
|
+
分数类回滚面〔设计面待裁〕);
|
|
1734
|
+
- §8.1 第 4 条 **full 直落前像未接线**(R4「现状钉」保留、非背书——接线时该断言转红、须
|
|
1735
|
+
随之更新);
|
|
1736
|
+
- §8.1 第 1、5–11 条原样(生产接线/回滚台账/CLI 权限/归档全扫/前像轮转/加密边界/
|
|
1737
|
+
Windows 沙箱空壳);
|
|
1738
|
+
- §8.1 第 13 条 **偶发稳定性**:本轮自跑 mp `--mutate` 1 次 PASS(未复发);记账「未复发、
|
|
1739
|
+
再现即触发定位」(阈值归流程侧);
|
|
1740
|
+
- **③条删除原因无留痕**——不归因、不猜(与 §15.1 第 5 条一致)。
|
|
1741
|
+
- **判定权**:F1 收口轮的解除由**独立复核判 ACCEPT**(§16.5);提交面(5 M+3 未跟踪件的入库
|
|
1742
|
+
时机与批次)归编排/宿主面——本报告不代裁、不执行 git 写命令。
|
|
1743
|
+
|
|
1744
|
+
---
|
|
1745
|
+
|
|
1746
|
+
## 十七、读者反馈修订(F1 收口·验收轮后,2026-10-03)——unclear 3/unsupported 4 处置 + 问答 8
|
|
1747
|
+
|
|
1748
|
+
> 读者声明(原样):本次只通读报告文件(未运行命令、未核对仓库事实,任务明示二者不属本次范围)。
|
|
1749
|
+
> 「报告读者」读的是 §十六 落盘后的整份报告。**行号口径**:以下行号=读者引用时版本;本修订全部
|
|
1750
|
+
> 为**行内替换**(1–1742 行号未漂移,读者所引行号修订后逐一对位),唯一新增=本节(§十七)。
|
|
1751
|
+
> **处置原则**:能补证据的补、能说清的改措辞、确属误报的说明不改。
|
|
1752
|
+
|
|
1753
|
+
### 17.1 处置表(unclear 3 + unsupported 4,逐条)
|
|
1754
|
+
|
|
1755
|
+
| # | 类别 | 反馈摘要 | 处置 | 落点(修订后=读者行号) |
|
|
1756
|
+
|---|---|---|---|---|
|
|
1757
|
+
| 1 | unclear | §12.7 表题「`:896`/`:1072` 等处」未说明是哪份文件行号;两处均不含按号引用 | **改**:移除原指代,改列实际按号引用处(§12.2 ⑰/⑱、§12.4 ⑲–㉔、§13.7(a) ⑰/⑱、§14.1 第 6 条、§16.5)。回核:`:896`=§11.2 第 3 问、`:1072`=§12.4 表 freshness 行;守卫源码同号段(am `:896`/`:1072`)亦无关——原括注不成立 | `:1151` |
|
|
1758
|
+
| 2 | unclear | 「V4strip」被当已知形态引用、全文无定义;与 §7.2「不限档位摘除变体」关系不明 | **补定义**:V4strip=V4 同点位「摘除式」注入(判据不限档位摘除为恒放行)=§7.2 行 652-653 所记变体(与变异 ⑰ 同形态;§13.5.2 注);§16.5 引用处加指针 | `:1293`、`:1702` |
|
|
1759
|
+
| 3 | unclear | 头部行 34 行号定则未纳入 §十五/§十六;按旧定则去 §12/§13 取行号会取到旧值 | **改**:定则扩为「§十二/§十三/§十五/§十六(现行树)」,注明 §十六〔修前口径〕标法与 §16.2 实例(`:1418-1644`〔修前〕→ `:1464-1696`〔现行〕) | `:34` |
|
|
1760
|
+
| 4 | unsupported | 头部行 32 把两文件合计口径(§6.2 的 24=am 17+mp 7)与 am 单文件口径(23/24)并成一条「24→23→24」序列 | **改**:按文件拆开——am 17→23→24;mp 7→8;两文件合计 24→31→32;注明 §6.2「合计 24 处」=两文件合计口径 | `:32` |
|
|
1761
|
+
| 5 | unsupported | §16.4 定向回归归属错(整块记「收官脚本实跑」,实为 F1 收口轮自跑);全量 308/308 树/时刻全篇未给 | **改+补**:来源分列(定向回归=F1 收口轮自跑;全量/容器=收官脚本实跑);补树/时刻=**F1 收口改动后的工作树**(收官 phase 位于实施+独立复核之后、报告落盘之前——`.zcode/workflow-drafts/三档自治步骤⑤F1收口.dwf.ts:159-208`);与 §13.4 两次实跑关系写清 | `:1662`/`:1663`/`:1666`/`:1673-1675` |
|
|
1762
|
+
| 6 | unsupported | §15.5「冻结读数以 11 绿为准」对第 2 次 230/231 的排除无支撑 | **改措辞**:撤「以 11 绿为准」的排除动作;2 次 230/231 均列**未定位观察项**(并列登记、不相互排除、不归因) | `:1500` |
|
|
1763
|
+
| 7 | unsupported | E 面四处旧陈述与 v1.2 已接线冲突且无指注;③④ 引用的 ⑰ 按 §12.7 表已取错条目 | **逐处补 v1.2 指注**(接线已落=§12.4;⑰ 已改指直写面=§12.7;M2 已重编码),四处均标明「本句=步骤⑤批次口径」 | `:60`/`:63-64`/`:180`/`:183`/`:287-288`/`:359-360` |
|
|
1764
|
+
| 附 | (由问答 5 引出) | §12.4 三档逐格表缺构造说明,无法判断与 §13.2 腿 E 能否交叉比对 | **补构造注**:§12.4 表=补强批次构造(`importance=0.4` 起点/`written=2`),与 §13.2 腿 E(0.5/`written=1`)为不同构造实跑、数值面不可交叉比对 | `:1068` |
|
|
1765
|
+
|
|
1766
|
+
**误报裁定:无**(8 条反馈逐条成立、全部已处置;另附 1 条由问答 5 引出、一并处置)。
|
|
1767
|
+
|
|
1768
|
+
### 17.2 读者问答(nextQuestions 8 条,逐条)
|
|
1769
|
+
|
|
1770
|
+
1. **提交与登记面:这批由谁、何时、分几次提交?`test_mode_parity.py`、本报告、`docs/README.md`
|
|
1771
|
+
登记是否随同一次处理?** —— ①**提交与推送不在本工作流脚本内**:脚本明文「提交与推送未在
|
|
1772
|
+
脚本内执行,留主会话收口(含 git add 后的 npm run gate)」(`.zcode/workflow-drafts/三档自治
|
|
1773
|
+
步骤⑤F1收口.dwf.ts:241-243`,另 `:259-262` 同)。**执行方=主会话/宿主面**;**时机与分批
|
|
1774
|
+
(与步骤⑤守卫改动合成一次或分开)不属本报告范围**(红线禁本报告轮 git 写命令),本报告
|
|
1775
|
+
不代裁。②`test_mode_parity.py`(未跟踪新件)与本报告**应随批入库**(§10.3 立场在 v1.2/F1 后
|
|
1776
|
+
仍算数);「随哪一个批」归编排/宿主面。③`docs/README.md` 未登记为**已知并如实登记**项
|
|
1777
|
+
(§附 A:系列 ②③④ 三份落码记录亦未登记)——宜由**文档治理批次**一次补齐,本报告不单方面扩面。
|
|
1778
|
+
2. **F1 收口轮之后的树上有没有复跑全量与容器?§16.4 的 308/308 与「rc=0 / rc=0」是哪棵树、哪一轮?**
|
|
1779
|
+
—— ①**树已定(本轮补)**:本工作流收官 phase(`dwf.ts:159-208`)在 **F1 收口改动后的工作树**上
|
|
1780
|
+
实跑——phase 顺序=锚定→修前复现→实施→独立复核→**收官(全量+容器)**→报告撰写;实施员/
|
|
1781
|
+
复核员均被约束「不得编辑工作区文件」(脚本 `:107`/`:141`/`:147`),故收官树=与复核(ACCEPT)
|
|
1782
|
+
基本同态的工作树。②**不是 §13.4 的复用**:§13.4=补强批次(v1.2)树上的工作流收官、§16.4=
|
|
1783
|
+
F1 收口树上的工作流收官——**两次独立实跑**(栈二 `duration_ms` 两组读数 11369.38/11455.81
|
|
1784
|
+
佐证)。③「ACCEPT 之后要不要补跑」:按本工作流时序,**门禁本就在独立复核(ACCEPT)之后跑**
|
|
1785
|
+
(同树);若主会话在提交/`npm run gate` 前又改树,是否补跑归流程侧——本报告只交读数、不代裁。
|
|
1786
|
+
3. **2 次 230/231(含 1 次项名未捕获)什么时候定位?「以 11 绿为准」是最终口径还是过渡?** ——
|
|
1787
|
+
①「以 11 绿为准」原措辞**已撤**(§15.5 修订:2 次均列未定位观察项、并列登记、不相互排除);
|
|
1788
|
+
②**定位时机与升级标准归流程侧**(§8.1 第 13 条:不代定阈值;再现即触发定位);③本修订轮
|
|
1789
|
+
**未做定位实验、不猜根因**(边界:只改报告文件)。
|
|
1790
|
+
4. **变异表「合计」到底是多少——am 24+mp 8=32?对外引用与后续复核拿哪个数?** —— **现行口径
|
|
1791
|
+
(本轮修订明确)**:am 表内 **24** 条/mp 表内 **8** 条/**两文件合计 32 条**;另各 1 条表外
|
|
1792
|
+
判别力钉(共 2 条、不占编号)。历史「合计 24(am 17+mp 7)」=**步骤⑤批次的两文件合计**;
|
|
1793
|
+
「23 处实存」「24 处(③已恢复)」=**am 单文件**——「24」两义并非数据冲突、而是**对象不同**
|
|
1794
|
+
(歧义源处置:头部行 32 已按文件拆开;本问答为合计口径)。**对外引用建议**:带文件限定
|
|
1795
|
+
(「am 24/mp 8/合计 32+表外钉 2」);单说「24 处」须注明「am 单文件」。
|
|
1796
|
+
5. **§12.4 三档逐格表与 §13.2 腿 E 是不同构造吗?能否交叉比对?** —— **是不同构造**(本轮补注):
|
|
1797
|
+
§12.4 表 plan 行 `importance=0.4` 起点、confirm 行 `written=2`;§13.2 腿 E 起点 **0.5**、
|
|
1798
|
+
③ 面 `written=1`——两表为**两次不同构造的实跑**,**数值面不可直接交叉比对**(同 §2.5 的
|
|
1799
|
+
0.57/0.6646 先例),**结论面一致**(plan 被拦/confirm、full 照落)。构造注已落 §12.4 表(`:1068`)。
|
|
1800
|
+
6. **设计面三处待裁与计划输入面(「比设计更严」)由谁裁、何时裁?要不要补偏离记录?** —— 归属=
|
|
1801
|
+
**设计真源持有方**(`docs/plans/记忆自处理三档自治_设计_v0.2.md` 已签收冻结);三处理由逐条在
|
|
1802
|
+
`e_gate` docstring(§8.1 第 15–17 条);「更严」成因=计划输入面未落、「命中计划步骤 ⇒ allow」
|
|
1803
|
+
分支不可达(fail-closed 近似)。偏离记录/改设计由设计面决定——**沿用 §14.2 问答 3 立场**:
|
|
1804
|
+
本报告只如实登记现状、不代裁;**裁决时点未定**(无数据)。
|
|
1805
|
+
7. **生产接线与 13 处夹具改造、在役 R1–R4 读数采集的排期与责任面?接线后 full 回落 confirm 的
|
|
1806
|
+
在役行为变更由谁背书?** —— ①排期建议(只读)在 §8.2:夹具侧显式档位声明/读数满足改造 →
|
|
1807
|
+
接线(MCP 启动面+常驻巡检)→ 接线前采在役库 R1–R4 只读读数 → 验收(全量+容器+在役读数
|
|
1808
|
+
复核);②责任面=**接线批/宿主面**;本报告**未采集在役读数、不代答**(§14.2 问答 4 立场延续);
|
|
1809
|
+
③full 回落 confirm 的背书机制=设计 §七「升档=计划式确认」——**不得静默升档**;背书主体归
|
|
1810
|
+
宿主/设计面,本报告只登记机制。
|
|
1811
|
+
8. **复核证据面:实验根跑毕即删、收口前树不可复得——将来复验 ACCEPT 的依据从哪里取?要不要定
|
|
1812
|
+
「复核产物留存」口径?** —— ①事实:复核实验根 `%TEMP%\f1_rc_cogb49bg` 跑毕已删(§16.5 摘录);
|
|
1813
|
+
收口前树不可复得(`test_mode_parity.py` 为未跟踪件、无历史版本;§13.7(b));②**「复核产物
|
|
1814
|
+
留存」当前无成文口径**(本报告范围内无此机制);③可复验面=**命令清单可重跑**(§12.7/§13.4/
|
|
1815
|
+
§16.4 逐条;两守卫为确定性套件,含自检与变异自证),复验者可在任意树副本上重放;④是否新设
|
|
1816
|
+
留存口径(留档 stdout/日志/树指纹、留存期与存放面)**归流程侧定**——本报告不代裁、本轮不新增
|
|
1817
|
+
留存(边界:只改报告文件)。
|