@furongjun1999/dsh-memory 0.7.4 → 0.8.0
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 +632 -630
- package/codebuddy/CODEBUDDY.md +5 -5
- package/docs/discipline/templates/zcode-user.md.tmpl +4 -1
- package/docs/eval/issue64_replay_check_/346/240/270/351/252/214/344/270/216/344/277/256/345/244/215_v1.0.md +284 -0
- package/docs/eval//345/217/221/345/270/20312_/344/270/226/347/225/214/346/250/241/345/236/213/345/212/237/350/203/275/347/253/257_v1.0.md +1 -1
- package/docs/eval//345/217/221/345/270/20313_/344/270/212/344/270/213/346/226/207/350/207/252/347/256/241/347/220/206/346/234/272/345/210/266_v1.0.md +114 -0
- package/docs/eval//345/217/221/345/270/20314_/350/272/253/344/275/223/303/227/350/204/221/347/273/204/345/220/210_v1.0.md +152 -0
- package/docs/eval//351/262/270/345/250/230/344/270/203/347/261/273/347/212/266/346/200/201/350/277/275/350/270/252_v1.0.md +176 -0
- package/docs/mdcg//344/270/226/347/225/214/346/250/241/345/236/213/345/212/237/350/203/275/347/253/257_/344/275/277/347/224/250/344/270/216/350/277/220/347/273/264_v1.0.md +92 -13
- 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 +43 -43
- package/docs/mdcg//345/217/221/345/270/203/351/227/250/347/246/201/351/223/276_v0.1.md +14 -3
- package/docs/mdcg//347/235/241/347/234/240/345/221/250/346/234/237_/350/277/220/347/273/264/345/211/215/346/217/220/344/270/216/347/273/264/346/212/244/346/214/207/345/215/227_v1.0.md +85 -1
- package/docs/plans//347/201/265/346/236/242/350/272/253/344/275/223/303/227/350/204/221_/344/270/226/347/225/214/346/250/241/345/236/213/345/257/271/346/216/245/350/256/276/350/256/241_v0.1.md +119 -0
- package/docs//345/267/245/344/275/234/347/272/252/345/276/213_/350/256/244/347/237/245/345/233/276/346/235/241/347/233/256_v1.1.json +461 -461
- package/docs//350/256/260/345/277/206/347/263/273/347/273/237/345/215/263/347/231/275/347/256/261/345/214/226/346/231/272/350/203/275_/346/236/266/346/236/204/345/257/271/347/205/247_v0.2.md +121 -0
- package/docs//350/256/260/345/277/206/347/263/273/347/273/237/345/215/263/347/231/275/347/256/261/345/214/226/346/231/272/350/203/275_/346/236/266/346/236/204/345/257/271/347/205/247_v0.3.md +117 -0
- package/lib/hooks.d.ts +34 -0
- package/lib/hooks.js +165 -0
- package/lib/index.js +22 -1
- package/lib/lib/mdcg_client.d.ts +37 -0
- package/lib/lib/mdcg_client.js +44 -0
- package/md_cg/audit.py +7 -1
- package/md_cg/bench_governance.py +4 -1
- package/md_cg/bench_locomo_zh.py +12 -2
- package/md_cg/bench_zh_mad.py +12 -2
- package/md_cg/chain.py +23 -7
- package/md_cg/consolidate.py +81 -10
- package/md_cg/interop.py +25 -9
- package/md_cg/lifecycle.py +7 -0
- package/md_cg/mcp_server.py +22 -0
- package/md_cg/mdcg.py +6 -1
- package/md_cg/scrub.py +4 -2
- package/md_cg/sleep.py +273 -103
- package/md_cg/sustain.py +150 -4
- package/md_cg/test_lifecycle_retire_leak.py +90 -0
- package/md_cg/test_p6_consolidate.py +389 -7
- package/md_cg/test_sleep_gitlock.py +134 -0
- package/md_cg/test_spatial_coords3d.py +292 -0
- package/md_cg/test_sustain_bounded.py +624 -0
- package/md_cg/units.py +4 -1
- package/package.json +2 -2
- package/skills/plugin.json +1 -1
- package/src/hooks.ts +177 -0
- package/src/index.ts +22 -1
- package/src/lib/mdcg_client.ts +48 -0
- package/zcode/AGENTS.md +5 -5
package/codebuddy/CODEBUDDY.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 本文件由 `scripts/render_discipline.py` 从真源
|
|
4
4
|
> `docs/工作纪律_认知图条目_v1.1.json` 渲染生成,**请勿手改**;改真源后重跑渲染。
|
|
5
|
-
> 真源指纹(SHA256 前16位):
|
|
5
|
+
> 真源指纹(SHA256 前16位):9486668b0dadac39
|
|
6
6
|
|
|
7
7
|
## 概述
|
|
8
8
|
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
### 16. 任务收尾归档(记忆闭环)
|
|
129
129
|
|
|
130
130
|
- **触发**:任务执行完成|修改落地后|交付后
|
|
131
|
-
- **动作**:任务收尾→提炼核心修改(内容/原因/位置/验证结论四要素, 不写中间过程/试错/调试/重复确认)→按 CCG 六要素成文(# 功能名/# 生效条件/# 子功能/# 执行/# 验证方式/# 不适用条件 六行缺一不可, 与正文四要素并置)→写入灵枢记忆(认知图/MCP memory)——text 类缺要素即被写入闸门拒(REJECT, 当场返回缺失清单, 不是重试无用), 按清单补齐后重写即可→读回确认(写入后发起一次读取查询确认写入成功且可检索)→标注关联条目+更新 subgraph/depends_on
|
|
131
|
+
- **动作**:任务收尾→提炼核心修改(内容/原因/位置/验证结论四要素, 不写中间过程/试错/调试/重复确认)→按 CCG 六要素成文(# 功能名/# 生效条件/# 子功能/# 执行/# 验证方式/# 不适用条件 六行缺一不可, 与正文四要素并置)→写入灵枢记忆(认知图/MCP memory)——text 类缺要素即被写入闸门拒(REJECT, 当场返回缺失清单, 不是重试无用), 按清单补齐后重写即可→读回确认(写入后发起一次读取查询确认写入成功且可检索)→标注关联条目+更新 subgraph/depends_on; 长会话每10轮→同款间歇归档(写入+读回确认一次), 不等收尾
|
|
132
132
|
- **不适用**:情感交互|闲聊|纯查询无改动
|
|
133
133
|
- **声明**:按工作纪律第16条: 任务收尾归档——每次任务执行完只提炼核心修改(内容/原因/位置/验证结论)并按 CCG 六要素(功能名/生效条件/子功能/执行/验证方式/不适用条件)成文存入灵枢记忆(text 类六要素缺失会被写入闸门当场拒绝并返回缺失清单——补齐后重写即可, 不必等读回确认才发现), 写入后发起一次读取查询确认写入成功且可检索, 禁写中间过程/试错/调试等无效信息, 与第2条形成「查记忆→执行→写记忆→读回确认」闭环。
|
|
134
134
|
|
|
@@ -142,9 +142,9 @@
|
|
|
142
142
|
### 18. 工作区索引优先
|
|
143
143
|
|
|
144
144
|
- **触发**:查找工作区文件|需要了解工作区结构|跨目录检索定位|长会话续接/上下文压缩后查找工作区文件
|
|
145
|
-
- **动作**:定位工作区文件→先读 WORKSPACE_INDEX.md(仓根)→有则按表中职责/关键入口直接定位→无则先 python scripts/workspace_index.py --write 生成再读→守卫报陈化先重生成→不以重复全盘浏览代替; 新增顶层目录/根级文件须在脚本 DIR_ROLES/ROOT_FILES 登记后重生成; 上下文压缩/长会话续接后, 先 cg route『工作区索引』重建纪律视野(压缩会丢弃未留下执行痕迹的纪律, 只剩被声明过的条目——须主动召回)
|
|
145
|
+
- **动作**:定位工作区文件→先读 WORKSPACE_INDEX.md(仓根)→有则按表中职责/关键入口直接定位→无则先 python scripts/workspace_index.py --write 生成再读→守卫报陈化先重生成→不以重复全盘浏览代替; 新增顶层目录/根级文件须在脚本 DIR_ROLES/ROOT_FILES 登记后重生成; 上下文压缩/长会话续接后, 先 cg route『工作区索引』重建纪律视野(压缩会丢弃未留下执行痕迹的纪律, 只剩被声明过的条目——须主动召回); 压缩/续接后三步=route『工作区索引』→输出声明→回取本会话近10轮窗口重建上下文(cg(op=recent)/session_recall/会话 md 镜像)
|
|
146
146
|
- **不适用**:已明确路径的单文件操作|纯会话内对话/问答(无文件查找)|仓外路径/系统路径(git 追踪面之外)
|
|
147
|
-
- **声明**:按工作纪律第18条: 工作区索引优先——查工作区文件先读 WORKSPACE_INDEX.md(仓根, 管线生成); 无则先跑 scripts/workspace_index.py --write 生成再读, 不以重复全盘浏览代替。
|
|
147
|
+
- **声明**:按工作纪律第18条: 工作区索引优先——查工作区文件先读 WORKSPACE_INDEX.md(仓根, 管线生成); 无则先跑 scripts/workspace_index.py --write 生成再读, 不以重复全盘浏览代替。 压缩续接后并回取本会话窗口(最近10轮)重建上下文。
|
|
148
148
|
|
|
149
149
|
## 声明出口(`response.direct` 原文 · 未输出即未执行)
|
|
150
150
|
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
| 15 | 按工作纪律第15条: 命令执行统一走python——argv列表+显式UTF-8+PYTHONUTF8=1, 不经Windows shell, 规避GBK解码异常。 另: 全仓文本与路径/文件名一律UTF-8(中文可进路径), 不做控制台兼容(取用走python, 控制台乱码属显示层)。 另: 公开面路径写相对路径——本机绝对路径以中性占位代(仓内 `<仓根>`/家目录 `~/`/临时 `%TEMP%`), 门禁 check_local_paths。 |
|
|
168
168
|
| 16 | 按工作纪律第16条: 任务收尾归档——每次任务执行完只提炼核心修改(内容/原因/位置/验证结论)并按 CCG 六要素(功能名/生效条件/子功能/执行/验证方式/不适用条件)成文存入灵枢记忆(text 类六要素缺失会被写入闸门当场拒绝并返回缺失清单——补齐后重写即可, 不必等读回确认才发现), 写入后发起一次读取查询确认写入成功且可检索, 禁写中间过程/试错/调试等无效信息, 与第2条形成「查记忆→执行→写记忆→读回确认」闭环。 |
|
|
169
169
|
| 17 | 按工作纪律第17条: 任务派发统一走蜂巢——任何执行性任务经蜂巢 spawn/submit 执行并留痕(spec/status/result), agent本体只做编排; 宿主自带subagent/team不是等价通道(zcode端的工作流工具为等效蜂巢工具——使用者2026-10-04裁定; 蜂巢功能完全完善之前, zcode端可优先使用zcode工作流处理), 兜底须声明。L1只读判定(产物落点=不改仓库/外部状态)可直跑, 须输出「L1 直跑:<命令> — 风险/频次/可逆性」留痕。 |
|
|
170
|
-
| 18 | 按工作纪律第18条: 工作区索引优先——查工作区文件先读 WORKSPACE_INDEX.md(仓根, 管线生成); 无则先跑 scripts/workspace_index.py --write 生成再读, 不以重复全盘浏览代替。 |
|
|
170
|
+
| 18 | 按工作纪律第18条: 工作区索引优先——查工作区文件先读 WORKSPACE_INDEX.md(仓根, 管线生成); 无则先跑 scripts/workspace_index.py --write 生成再读, 不以重复全盘浏览代替。 压缩续接后并回取本会话窗口(最近10轮)重建上下文。 |
|
|
171
171
|
|
|
172
172
|
## 记忆接口速查(`cg` / `stg`)
|
|
173
173
|
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
**会话起始第一件事——包含上下文压缩 / 长会话续接之后**:读该仓库的 `zcode/AGENTS.md`(18 条工作纪律 + 执行公约 + 声明出口表),并按其中的纪律执行。
|
|
10
10
|
|
|
11
|
+
**压缩 / 续接后的上下文重建三步**:①读纪律文件(上句)→ ②输出命中纪律的 `response.direct` 原文 → ③**回取本会话近 10 轮窗口重建上下文**(`cg(op=recent)` 或 `session_recall`;会话 md 镜像只留最后 10 条、超长优先遗忘最旧,由会话钩子每轮交互后自动维护),然后才动手。
|
|
12
|
+
|
|
11
13
|
**怎么认出灵枢仓库(机器无关的特征文件法)**:自当前工作目录向上找到第一个**并存**以下四者的目录,那里就是仓根——`utf8_boot.py`、`WORKSPACE_INDEX.md`、`docs/工作纪律_认知图条目_v1.1.json`、`zcode/AGENTS.md`(四者同时在场即本仓;只看 `AGENTS.md` 会误认——本仓纪律产物落在子目录 `zcode/`,仓根另有本地私有件)。
|
|
12
14
|
|
|
13
15
|
为什么需要这一步:`zcode/AGENTS.md` 位于仓库**子目录**,而 ZCode 的指令文件发现面是「用户级 `~/.zcode/AGENTS.md` + 工作区级 `<仓根>/AGENTS.md`,且工作区那份自 cwd **向上**搜到项目根」——向上搜索永远到不了子目录。因此它不会被自动注入;本文件(用户级)就是把它拉进上下文的那个钩子。
|
|
@@ -17,13 +19,14 @@
|
|
|
17
19
|
- **0.1** 调 `cg(op=route, intent=<任务意图>)` 再动手,禁止跳过直接改码/跑命令。工具面若无 mdcg 工具,按第 7 条切等价兜底(进程内直调 `md_cg.mcp_server`)并声明降级,不得静默跳过。
|
|
18
20
|
- **0.2** 命中纪律须在回复中输出该条 `response.direct` 原文(未声明即视为未执行)。**压缩只保留留下执行痕迹的条目——声明就是痕迹。**
|
|
19
21
|
- **0.4 / 16** 违规即归档(第 4 条归因 + 第 16 条写入灵枢,六要素成文 + 读回确认);隐瞒违规是更严重的违规。
|
|
22
|
+
- **16(长会话节奏)** 每完成 10 轮交互做一次间歇归档(同款写入 + 读回确认一次),不等收尾;逢十轮由会话钩子自动提醒。
|
|
20
23
|
- **8** 中文思考
|
|
21
24
|
- **触发**:中文区域|中文项目开发过程
|
|
22
25
|
- **动作**:判定复杂度(情绪: 新奇/挑战/曾受批评 + 信息差: 不确定度)→复杂?「我们需要」深思考+确认 | 简单?「让我」快速执行; 推理开篇即中文锚点; 全程中文, 仅代码/标识符/引用保留原文
|
|
23
26
|
- **不适用**:需要英文编写的场景|英文环境|英文文档|国际接口
|
|
24
27
|
- **声明**:按工作纪律第8条: 中文思考——中文书写; 复杂(新奇/挑战/曾受批评/高信息差)→「我们需要」交流确认互补盲区; 简单→「让我」快速执行不空耗; 每段推理开篇用中文短语锚定语言。
|
|
25
28
|
- **17** 改状态类任务派发蜂巢并留痕;只读判定(跑门禁/测试/回归看结论)可直跑,须输出一行「L1 直跑:<命令> — 风险/频次/可逆性」。
|
|
26
|
-
- **18** 查工作区文件先读仓根 `WORKSPACE_INDEX.md
|
|
29
|
+
- **18** 查工作区文件先读仓根 `WORKSPACE_INDEX.md`,不以重复全盘浏览代替;**压缩续接后回取本会话近 10 轮窗口重建上下文**(见上文三步)。
|
|
27
30
|
|
|
28
31
|
其它工作目录不受本段约束。
|
|
29
32
|
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# issue64 · replay_check 过严一票否决与空集短路放行——核验与修复报告 v1.0
|
|
2
|
+
|
|
3
|
+
**日期**:2026-10-06 | **缺陷号**:issue64(外部报告 by angel12538,对 v0.7.5 实测;本工作流修前复现腿与独立复核双重复现)| **被测面**:`<仓根>` 工作树(未提交:`md_cg/consolidate.py`、`md_cg/test_p6_consolidate.py` 两件被改,本报告为第三件新增;`git status --porcelain` 实测三件)
|
|
4
|
+
|
|
5
|
+
**证据分级声明**(本报告只写有机械证据的事):
|
|
6
|
+
|
|
7
|
+
| 标记 | 含义 |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 〔本报告实跑〕 | 报告撰写员在本 ask 内亲手执行并计数:读码行号核实、HEAD/工作树 sha256、守卫 109/0、变异基线六腿、python 全量、git status |
|
|
10
|
+
| 〔工作流采集〕 | 本工作流前序阶段(修前复现编排 / 实施 / 独立复核,各角色定义见下「〇、角色与流程链」)实跑读数或材料转记,随任务材料传入;本报告逐处尽量标注来源,未重跑者明写未重跑 |
|
|
11
|
+
| 〔对拍〕 | 上述两侧读数逐位一致处 |
|
|
12
|
+
|
|
13
|
+
**未特别标记的正文行**(如 §三 契约三条、§五 判定依据与 uncovered、§6.1 留池理由)均属以下两类之一,不另含第三种来源:(a) 对源码的读码——同〔本报告实跑〕;(b) 对随任务材料转入文本的转记——同〔工作流采集〕。读者若需逐句溯源,可按此两分法判级。
|
|
14
|
+
|
|
15
|
+
行号口径:**改前** = HEAD `e3ca39b3` 的 `md_cg/consolidate.py`(sha256 前 16 位 `a831157411989a05`,〔本报告实跑〕`git show HEAD:md_cg/consolidate.py` 计算并与独立复核材料逐字节对拍一致);**改后** = 工作树(sha256 前 16 位 `e886d8bcc09005c9`,〔本报告实跑〕计算)。两套行号均为读码所见。
|
|
16
|
+
|
|
17
|
+
**一句话结论**:外部报告的两类主指控全部独立复现成立——`replay_check` 的负条件一票否决把合格负条件误杀为「正例召回失败」(错否决),主流程的负条件空集短路把「缺要素」翻译成「通过」(错接受);三处修复已落码并有定点变异自证与独立复核(判定 ACCEPT)。附带两处可配置性缺失(两角色预算/超时共用单值、timeout 不可配)同步修复。本轮明确不修的面共 4 条(判据宽严 ×2、防护差异 ×1、计数口径 ×1,逐条见 §6.1)登记留池(§六)。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 〇、角色与流程链(先读·读者导航)
|
|
22
|
+
|
|
23
|
+
本报告的产出链是一条**动态工作流**(脚本编排、多个子任务接力),共四个角色。「独立复核」之所以独立,是因为它**自建实验台并重跑读数**(自写探针与 oracle、自行提取改前包),不采信实施侧的结论与探针:
|
|
24
|
+
|
|
25
|
+
| 角色 | 做什么 | 与本报告的关系 |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| 修前复现编排侧 | 在隔离环境(系统临时目录合成库 / 直调)**先于改动**复现缺陷,产出四条腿 payload 与读数 | 其读数经〔工作流采集〕传入(§二 主体);采集时点先于修改,故称「修前现场」 |
|
|
28
|
+
| 实施侧 | 落三处代码修改与守卫 R 组,自跑守卫/定向回归 | 其材料(改动清单、守卫读数)经〔工作流采集〕传入 |
|
|
29
|
+
| 独立复核侧 | 重建实验台(`git archive HEAD` 提取改前包 + 自建探针与 oracle),对**改前/改后两树**对拍、删断言探针、ANCHOR-MISS 探针 | 其读数与 uncovered(§五);与实施侧探针不同源,此为「独立」的判据 |
|
|
30
|
+
| 报告撰写员(本报告) | 读码核对行号与保真度、重跑守卫/变异基线/python 全量、撰写与修订 | 即〔本报告实跑〕标记的出处 |
|
|
31
|
+
|
|
32
|
+
流程链一句话:**编排侧复现(修前)→ 实施侧修复 + 守卫 → 复核侧独立对拍 → 本报告汇总**。
|
|
33
|
+
|
|
34
|
+
### 编号与术语约定(本报告有三套「①②③」,此处一次性对齐)
|
|
35
|
+
|
|
36
|
+
| 编号套 | 出现处 | 所指 |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| **外部报告 A 类①/②/③** | §一、§四 表#9、§6.1 | 外部报告对 `replay_check` 三个判据面的指控:①=`pos_recall` 的负条件一票否决(已修);②=`neg_separated` 判据里「负条件对正文覆盖率 < 0.5」项(留池);③=同族宽严(与 `no_conflict` 的覆盖率阈值同族,留池) |
|
|
39
|
+
| **修法条目 1/2/3** | §三 | 本次三处修改:1=`replay_check` 撤销一票否决;2=主流程负条件两态拦截;3=CLI 两角色预算/超时单设 |
|
|
40
|
+
| **变异腿 ①/②a/②b/②ab/③a/③b** | §四 表#3 | 按**修法条目**编号的六条定点变异腿(**不是**外部报告 A 类编号) |
|
|
41
|
+
|
|
42
|
+
另有旧称「②因子 / ③因子」(见 §二 腿 A①及其后):分别指 `neg_separated` 判据里的 `coverage(tw_neg,BODY)<0.5` 项与 `no_conflict` 判据里的 `coverage(tw_pos,neg_text)<0.5` 项;本报告行文中已尽量改用判据全名。
|
|
43
|
+
|
|
44
|
+
**术语**:「变异(mutation)」在本报告一律指**注入缺陷方向**的定点改写(§四 表#3);§二 腿 A① 中「删掉缺陷行的副本」是**删除式对照体**(方向相反),不称变异。
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 一、缺陷定义与真实站点
|
|
49
|
+
|
|
50
|
+
### 1.1 缺陷 A:`replay_check.pos_recall` 的负条件一票否决(过严误杀)
|
|
51
|
+
|
|
52
|
+
**定义**:`pos_recall` 原式带因子 `and not _neg_hit(tw_pos, neg_terms)`——「生效条件任一词(权重 ≥ 0.6)整词出现在不适用条件文本里」即判 `pos_recall=False`。门槛出处(读码):`_neg_hit` 定义于 `md_cg/mdcos.py:300`,docstring 明写「只认高置信词(权重 ≥ min_weight,默认 0.6)且整词命中(`_term_degree ≥ 0.5`)」;`_term_degree` 定义于 `md_cg/mdcos.py:149`(分级命中函数,不是「子串出现即算」)。而负条件描述的正是**邻近易混情境**,与生效条件共享领域主题词是结构必然(不共享主题词就谈不上「邻近」)⇒ 该因子会**系统性误杀共享主题词的合格负条件**;该因子与 `no_conflict`(覆盖率口径,`<0.5` 才算互相覆盖)同意图且更严。已坐实的量:A① 单样本逐位复现(§二 腿 A①)+ 212 例 replay 直调中 10 例分歧全部属该类(§二末「复核侧扫面」)——本报告不称「大量」,量级以这两处为边界。
|
|
53
|
+
|
|
54
|
+
**三因子与合成(读码,工作树)**:`replay_check` 产出 `pos_recall` / `neg_separated` / `no_conflict` 三个因子,`ok = pos_recall and neg_separated and no_conflict`(`md_cg/consolidate.py:539`)——三因子全真才判「条件稳定」,任一判负即 `ok=False`。三处覆盖率度量均为 `_weighted_coverage`(定义于 `md_cg/mdcos.py:172`:词权 × 分级命中的加权覆盖率 ∈ [0,1])。本缺陷①出在第一因子;A 类②/③ 分别是第二、三因子的阈值项(见 §6.1)。
|
|
55
|
+
|
|
56
|
+
**真实站点**:
|
|
57
|
+
|
|
58
|
+
- 改前 `md_cg/consolidate.py:510-512`——注释 `:510`、公式 `:511-512`,否决因子在 `:512`(读码所见;〔工作流采集〕材料记为 `:511-512`,指公式两行)。
|
|
59
|
+
- 改后撤销于 `md_cg/consolidate.py:524-525`(§三-1)。
|
|
60
|
+
|
|
61
|
+
**后果**:合格节点 `ok=False` → REJECT(**错否决**)。失效形态不是崩溃。
|
|
62
|
+
|
|
63
|
+
### 1.2 缺陷 B:主流程负条件空集短路被误判放行(错接受)
|
|
64
|
+
|
|
65
|
+
**定义**:`consolidate()` 主流程把 grounding 后的空 neg 直接交给 `replay_check`;而 `replay_check` 有 `if neg_terms: … else: neg_separated = True` 短路——「没有负条件」被翻译成「负例分离成立」⇒ `replay.ok=true`。两态(候选**未产出**负条件 / 产出了但**被 grounding 删光**)均无甄别 ⇒ 缺「不适用条件」要素的节点被误判「通过」、落盘并携带 `verification_basis` 声明;`ccg_completeness.complete=false`(ratio=5/6≈0.833,即缺一行)未被拦截。
|
|
66
|
+
|
|
67
|
+
机制出处(读码):①「grounding 删光」= `grounding_filter`(`md_cg/consolidate.py:488`)按字段阈值(`DEFAULT_GROUNDING` `:119`)过滤候选,达标线之下者整体丢弃;其打分粒度是 `grounding_score`(`:478`)= 候选短语在正文里的 **bigram 命中率**(字符级支撑度)——「删光」即该字段全部候选的 bigram 命中率未达阈值(域外短语命中率 0.0)。②`ccg_completeness` 由 `md_cg/nodefile.py:448` 计算:按正文「# 字段」声明行(`ccg_mark_present`)统计四要素齐全度,`complete` 与 `ratio` 同源。③「闸门 2」= consolidate 模块头 docstring(`md_cg/consolidate.py:23-41`)定义的白箱三段闸门中的第二段——闸门 1 确定性 grounding(`:25-26`)、**闸门 2 确定性 replay(`:27-38`,即本缺陷落点)**、闸门 3 LLM 验证单元(`:39-41`)。
|
|
68
|
+
|
|
69
|
+
**真实站点**:
|
|
70
|
+
|
|
71
|
+
- 改前 `md_cg/consolidate.py:727-739`——`:730` 生成空 neg(`kept.get("不适用条件") or []`)、`:731` 直入 `replay_check`、`:732` 误判为「通过」;短路站点在 `:516-520`(`:519` `else:`、`:520` `neg_separated = True`)(读码所见;〔工作流采集〕材料记 `:728-739` 与 `:519-520`,指向同段)。
|
|
72
|
+
- 改后两态拦截于 `md_cg/consolidate.py:749-776`(§三-2)。
|
|
73
|
+
|
|
74
|
+
**后果**:缺要素节点落盘 + 携带声明(**错接受**);亦可反过来说——该短路使「负条件被删光」不可能被任何下游检出。
|
|
75
|
+
|
|
76
|
+
### 1.3 附带缺陷:CLI 两角色预算/超时不可分别单设
|
|
77
|
+
|
|
78
|
+
**定义**:`--max-tokens` 是**单值**且同时喂 reflect/verify 两角色;`http_llm` 的 `timeout` 恒为模块默认 120(两 lambda 均未传,CLI 无入口);`--reflect-max-tokens` / `--verify-max-tokens` / `--timeout` / `--reflect-timeout` / `--verify-timeout` 五个参数名全缺。
|
|
79
|
+
|
|
80
|
+
**真实站点**(读码所见):
|
|
81
|
+
|
|
82
|
+
- 改前 `:1479`(`--max-tokens` 单值参数)、`:1533-1535` 与 `:1540-1542`(两 lambda 均写 `max_tokens=a.max_tokens`、均未传 timeout)、`:279-280`(签名 `timeout: int = 120`)。
|
|
83
|
+
- 改后落点 `:1526-1541` 参数、`:1596-1613` 透传(§三-3)。
|
|
84
|
+
- 相关机制出处(读码):`resolve_max_tokens` 定义于 `md_cg/consolidate.py:228`(三级解析:显式参数 > env `MDCG_LLM_MAX_TOKENS` > `DEFAULT_MAX_TOKENS`);「不带参回落 `resolve_max_tokens`」即指 `max_tokens=None` 时走该链取字面默认值。
|
|
85
|
+
|
|
86
|
+
**后果**:思考模型(reflect)与判决模型(verify)的预算/超时需求可不同,却无法分别调整;HTTP 超时不可配。
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 二、修前现场(本工作流采集的复现腿,逐条列 payload / 异常 / 崩溃点)
|
|
91
|
+
|
|
92
|
+
四条腿均为〔工作流采集〕的编排侧独立复现(隔离于实施侧探针);每腿 payload 与读数原样列出。**跨腿共同结论先行**:四条腿**均无异常抛出、无崩溃点**——本缺陷的失效形态是错接受/错否决(独立复核明确修正:「同批输入在改动前实现上也不抛(pre.json 实测 0 异常)——『不再崩』成立但不是缺陷形态」,§五)。
|
|
93
|
+
|
|
94
|
+
### 腿 A① —— `replay_check` 负条件一票否决(唯一判负因子)
|
|
95
|
+
|
|
96
|
+
- **payload**:直调 `md_cg.consolidate.replay_check`;`pos=["海边甜品店 招牌蛋糕 做法"]`,`neg=["海边甜品店 的其它蛋糕 冷藏流程"]`,`BODY="# 功能名:海边甜品店招牌蛋糕做法\n海边甜品店招牌蛋糕做法:海边甜品店以招牌蛋糕为主打,蛋糕胚烘焙后冷藏定型,再以海岛水果与淡奶油裱花装饰。\n"`(自建合成体,体量/词面与编排侧探针等价)。运行:`cwd=%TEMP%\issue64_repro_v7gqwuxu`,`PYTHONPATH=<仓根>`,`PYTHONDONTWRITEBYTECODE=1 python -B -X utf8 leg_a1.py`。
|
|
97
|
+
- **observed**:返回 `{"pos_recall": false, "neg_separated": true, "no_conflict": true, "ok": false}`(与探针逐键一致)。逐因子读数:`coverage(tw_pos,BODY)=0.7981>0`(pos_recall 首因子为真);`_neg_hit(tw_pos,NEG)=true`(**唯一杀手**);`neg_separated` 的覆盖率项 `coverage(tw_neg,BODY)=0.4016<0.5`、`no_conflict` 的覆盖率项 `coverage(tw_pos,neg_text)=0.3702<0.5`,均未触发。反事实(内存按公式重算、不改文件):删该因子后 `pos_recall=true`、`ok=true`。代码级对照自证:临时目录副本删掉 `and not _neg_hit(tw_pos, neg_terms)` 一行、以 `md_cg.consolidate_mutant` 名加载(不碰工作区)——真身 `ok=false` / **删行对照体** `ok=true`(这是**反向对照**:删掉缺陷行判负消失,证明该行是唯一杀手;与 §四「变异」的注入方向相反,勿混)。
|
|
98
|
+
- **异常/崩溃点**:**无异常**。站点 = 改前 `:510-512`。
|
|
99
|
+
|
|
100
|
+
> **样本对照提示(本报告内有两个同族 A① 样本,勿混)**:本腿用**编排侧合成体**(上列 BODY),其上读数 = `0.7981 / 0.4016 / 0.3702`;附录「最小复现」与守卫 R1 组用**守卫内联 BODY**(`md_cg/test_p6_consolidate.py:140-142`),其上读数 = `0.402 / 0.37`(即 R1b 断言名所称「②=0.402 / ③=0.37」)。两组词面不同、各自独立测量,不互相复现;「0.402/0.37 与 0.4016/0.3702」为同一判据面、两样本词面的读数对(0.402↔0.4016、0.37↔0.3702,前者为后者四舍五入)。
|
|
101
|
+
|
|
102
|
+
### 腿 B 态1 —— 候选有负条件但被 grounding 删光 → 放行
|
|
103
|
+
|
|
104
|
+
- **payload**:隔离临时库(`tempfile.mkdtemp(prefix='issue64_legB_state1_neg_dropped_all_')`)+ `MdCGOS(root).add('n1', 微分方程夹具 BODY)`;reflect 打桩返回 `{"生效条件":["微分方程","数值方法"],"子功能":["建模","求解"],"执行":"使用数值方法迭代求解","不适用条件":["冰川溶洞探险装备清单"]}`(域外 → grounding 0.0);verify 打桩返回 `"{}"`;`consolidate(root, apply=True, …)`;并在进程内包裹 `replay_check` 记录主流程实参。运行:`PYTHONPATH=<仓根> python -B -X utf8 leg_b.py`。
|
|
105
|
+
- **observed**(仪器化证据):主流程实际传入 `replay_check` 的 `neg=[]`(空列表)→ 命中 `:519-520` 短路。`rep={targeted:1, accepted:1, rejected:0, deferred:0, written:1, reasons:{}}`;落盘 `fm.llm_consolidation.grounding.不适用条件={"scores":{"冰川溶洞探险装备清单":0.0},"kept":0}`;`llm_consolidation.replay={"pos_recall":true,"neg_separated":true,"no_conflict":true,"ok":true}`;`llm_consolidation.verification_basis="stub 验证声明"`;正文无「# 不适用条件」行(有「# 验证方式」行);`fm.non_applicable_conditions=[]`;`fm.verification_basis="other"`;`nodefile.ccg_completeness.complete=false` `ratio=0.833`;节点文件被改写;演化台账 `_evolution/ledger.md` 证据行「grounding通过 · replay通过 · stub 验证声明」——**缺「不适用条件」要素却携 replay通过 与 verification_basis 声明落盘**。与探针读数逐项一致。
|
|
106
|
+
- **异常/崩溃点**:**无异常**。站点 = 改前 `:727-739`(`:730` 生成空 neg、`:731` 传入、`:732` 误判)+ 短路 `:516-520`。
|
|
107
|
+
|
|
108
|
+
### 腿 B 态2 —— 候选根本没有「不适用条件」键 → 放行
|
|
109
|
+
|
|
110
|
+
- **payload**:同态1 隔离库夹具;reflect 打桩候选改为 `{"生效条件":["微分方程","数值方法"],"子功能":["建模","求解"],"执行":"使用数值方法迭代求解"}`(无负条件键);verify 打桩 `"{}"`。运行:`PYTHONPATH=<仓根> python -B -X utf8 leg_b.py`(第二用例)。
|
|
111
|
+
- **observed**:主流程传入 `neg=[]`;`rep accepted=1/written=1/rejected=0/reasons={}`;落盘 `grounding.不适用条件=null`(无该字段明细,与态1 的 `kept=0` 明细可甄别);`replay.ok=true`;正文无「# 不适用条件」行;`fm.non_applicable_conditions=[]`;`ccg_completeness.complete=false`(`ratio=0.8333`——与态1 的 `0.833` 为**同一读数**(5/6)的两种精度写法,非两态差异;§一 1.2 统一写作 `ratio=5/6≈0.833`)。**两态(被删光 / 未产出)在修前均无甄别、均放行。**
|
|
112
|
+
- **异常/崩溃点**:**无异常**。站点 = 改前 `:730-739`。
|
|
113
|
+
|
|
114
|
+
### 腿附带参数 —— 单值喂两角色、timeout 不可配、新参数名全缺
|
|
115
|
+
|
|
116
|
+
- **payload**:subprocess 跑 `python -B -X utf8 -m md_cg.consolidate --help`(`cwd=%TEMP%`,`PYTHONPATH=<仓根>`);进程内打桩 `http_llm` 后调用 `_cli(["--root",<临时库>,"--apply","--max-tokens","7777"])` 及不带 `--max-tokens` 各一次,记录两角色实收参数。运行:`PYTHONPATH=<仓根> python -B -X utf8 leg_cli.py`。
|
|
117
|
+
- **observed**:`help rc=0`;含 `--max-tokens=true`;`--reflect-max-tokens` / `--verify-max-tokens` / `--timeout` / `--reflect-timeout` / `--verify-timeout` **均=false(参数名全缺)**。`inspect.signature(http_llm)` 显示 `timeout: int = 120`(模块级默认,CLI 无入口覆盖)。带 `--max-tokens 7777` 时两角色实收 `[{role:reflect, max_tokens:7777, timeout_passed:false},{role:verify, max_tokens:7777, timeout_passed:false}]`(同一单值喂两角色;两 lambda 均未传 timeout → 真身走 120 默认);不带参时两角色 `max_tokens=null`(回落 `resolve_max_tokens`)。两轮 `rep.written=1`。
|
|
118
|
+
- **异常/崩溃点**:**无异常**。站点 = 改前 `:1479`、`:1533-1535`、`:1540-1542`、`:279-280`。
|
|
119
|
+
|
|
120
|
+
### 复核侧扫面(独立复核,〔工作流采集〕——注意树别)
|
|
121
|
+
|
|
122
|
+
**树别先行**:复核侧把**修前各腿的同一批输入**同时喂给**改前包**(`git archive HEAD` 提取的 `pre_pkg`)与**现行树**两份实现。下述条目 1-3(B1/B2、15/15 例)是**现行(修后)树**的读数——「`rejected=1` / `samples.replay=None`」正是修后拦截生效的形态,**不是**修前现场(修前现场见 §二 各腿:`accepted=1/written=1/reasons={}`);条目 4-6 是两版本同批与两式对照。
|
|
123
|
+
|
|
124
|
+
1. `probe_sweep.py`(同一批输入分别喂 HEAD 版与现行版):**现行树** 15 全链例 + 空池 + 212 例 replay 直调,异常数 0;`B1_neg_dropped_all → rejected=1/reasons={"neg_dropped_all":1}`、`B2_neg_absent → {"neg_absent":1}`、`samples[0].reason` 同名且 `replay=None`(未进 replay 即被拦)——即两态拦截在现行树上生效。
|
|
125
|
+
2. 退化路径「真发生」的判据(非只看没抛):B1 样本 `samples[0].grounding_neg={"scores":{"量子色动力学格点规范场论":0.0},"kept":0}` 而候选该字段非空 ⇒ 确系「产出后被 grounding 删光」,不是输入本来就空。
|
|
126
|
+
3. 独立扫描互证(现行树):枚举库内全部文件 sha256,15/15 例满足 `written=0 ⇔ 节点文件集与哈希逐字未变`、`written=1 ⇔ 变化`(空池=0 节点零计数不抛,节点集为空与扫描一致)。
|
|
127
|
+
4. 退化输入无异常(两版本同批):neg 为空串/空表/`[None," "]`/标量串、pos 全幻觉、空正文节点、空库。
|
|
128
|
+
5. 212 例 replay 直调(两式逐例比对):oracle 由复核侧自写——`pos_recall_new = pos_text 非空 ∧ coverage>0`;`old = 上式 ∧ ¬_neg_hit`。判定:202 全等、10 分歧且全部恰为旧式一票否决类(`pos_recall` False→True,`neg_separated`/`no_conflict` 逐位不变)、非法分歧 0、两侧例外 0。**分类规则如实标注**:「全等 / 旧式一票否决类分歧」的判据=上述两式逐位比对;「非法分歧 / 两侧例外」是复核侧自写的两类兜底项,其判据**未随任务材料提供**,本报告只转记读数为 0,未能核实其定义。
|
|
129
|
+
6. A① 样本中间量独立重算:`legacy_neg_hit=True`、`neg_separated` 项 `cov=0.4016`、`no_conflict` 项 `cov=0.3702`(与守卫 R1b 的 0.402/0.37 为同一判据面、两样本词面的舍入口径;样本对照见 §二 腿 A①尾注)。
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 三、修法契约与落点(三处,均在 `md_cg/consolidate.py`;行号为工作树读码所见)
|
|
134
|
+
|
|
135
|
+
> 编号提示:本节三条即**修法条目 1/2/3**(与外部报告 A 类①②③、变异腿 ①~③b 的对照见 §〇 约定表)。
|
|
136
|
+
|
|
137
|
+
**契约三条(修法 1/2/3)**:1 撤销过严因子——`pos_recall` 只认「生效条件在正文上有覆盖率」,自否定职责由 `no_conflict` 覆盖率口径承担;2 负条件两态拦截——缺「不适用条件」要素(未产出 / 被 grounding 删光)直接 REJECT,不得因空集短路被判「通过」;3 CLI 两角色预算/超时可分别单设,原单值语义作共用缺省保留。
|
|
138
|
+
|
|
139
|
+
### 1) `replay_check`:撤销负条件一票否决(`:507-541`)
|
|
140
|
+
|
|
141
|
+
- 改后 `:524-525`:`pos_recall = bool(pos_text) and _weighted_coverage(tw_pos, body) > 0.0`(删除 `and not _neg_hit(tw_pos, neg_terms)`)。
|
|
142
|
+
- docstring `:513-517` 与上方「生效条件:」注释 `:507` 同步写明撤销理由;模块头 docstring 闸门 2 条目同步(`:27-38`)。
|
|
143
|
+
- **未动**:`neg_separated`(`:529-533`)与 `no_conflict`(`:535-537`)判据本体、`replay_check` 其余返回键与语义。
|
|
144
|
+
|
|
145
|
+
### 2) `consolidate()` 主流程:负条件两态拦截(`:749-776`)
|
|
146
|
+
|
|
147
|
+
`grounding_filter`(`:745`)之后、`replay_check`(`:778`)之前:
|
|
148
|
+
|
|
149
|
+
- `neg_cand = cand.get("不适用条件") or []`(`:757`;`:758-760` 标量化与去空白项)→ 空 ⇒ `rejected+=1` + `_bump("neg_absent")` + samples 带 `reason:"neg_absent"`、`replay:None`、`continue`(`:761-768`);
|
|
150
|
+
- `neg_cand` 非空而 grounding 后 `neg` 空 ⇒ `rejected+=1` + `_bump("neg_dropped_all")` + samples 带 `reason:"neg_dropped_all"`、`replay:None`、`continue`(`:769-776`)。
|
|
151
|
+
- 两态都**不进 verify、不落盘**;原 `if not kept or not replay["ok"]`(`:779-786`)代码行保持原样。`consolidate()` docstring 同步(`:675-683`)。
|
|
152
|
+
- **独立复核修正(如实)**:修后 `kept=={}` 时两态拦截先行 `continue` ⇒ `:781` 的 `grounding_failed` 分支不再可达(详见 §五-1)——「grounding_failed / replay_failed 语义不变」的表述不精确:代码行未动属实,但 `grounding_failed` 不再是可达结论(两态都是 REJECT、都不落盘,属报表口径)。
|
|
153
|
+
|
|
154
|
+
### 3) CLI:两角色 max-tokens / timeout 可分别单设(`:1526-1541` 参数、`:1596-1613` 透传)
|
|
155
|
+
|
|
156
|
+
- 新增 `--reflect-max-tokens`(`:1531-1532`)/ `--verify-max-tokens`(`:1533-1534`)——缺省 None → 回落 `--max-tokens`;新增 `--timeout`(`:1535-1537`,默认 120)/ `--reflect-timeout`(`:1538-1539`)/ `--verify-timeout`(`:1540-1541`)——缺省 None → 回落 `--timeout`;原 `--max-tokens`(`:1526-1530`)语义不变(共用缺省)。
|
|
157
|
+
- 透传:`refl_mt`/`refl_to`(`:1596-1599`)→ reflect lambda `:1600-1602`;`ver_mt`/`ver_to`(`:1607-1610`)→ verify lambda `:1611-1613`;`--self-verify` 复用反思侧(`:1603-1604`)。
|
|
158
|
+
- `http_llm` 本体未改(`:285-286` 签名原样),docstring 补 timeout 来源一句(`:293-294`)。
|
|
159
|
+
|
|
160
|
+
### 「不许动」清单核对(本报告读码核实)
|
|
161
|
+
|
|
162
|
+
`no_conflict` / `neg_separated` 判据本体 ✅未动|`grounding_filter` / `DEFAULT_GROUNDING` 阈值 ✅未动(`:119` 原值 `{"生效条件":0.5,"子功能":0.5,"执行":0.5,"不适用条件":0.34}`)|`replay_check` 其余返回键与语义 ✅未动|**ccgc 路代码面 ✅未动**——依据:本次改动面不含 ccgc 相关文件(`git status --porcelain` 实测仅两改一新增);此处「ccgc 路」= `md_cg/ccgc.py` 的编译-签章路径(签章拒绝码表 E040-E043 见 `md_cg/ccgc.py:65-68`,`E041`=自证拒绝判据见 `md_cg/audit.py:485-518`),与 consolidate 路(`md_cg/consolidate.py`)为并列两路;本报告只核对「改动面未含」,不展开其内部语义|改动文件面:仅 `md_cg/consolidate.py`、`md_cg/test_p6_consolidate.py` 与本报告(`git status --porcelain` 实测)。
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 四、验证数字
|
|
167
|
+
|
|
168
|
+
| # | 项 | 命令(原样) | 结果 | 来源 |
|
|
169
|
+
|---|---|---|---|---|
|
|
170
|
+
| 1 | 守卫(含 R 组) | `python -X utf8 -m md_cg.test_p6_consolidate` | **109 通过 / 0 失败**,退出码 **0**(既有 82 项 + R 组 27 项) | 〔本报告实跑〕 |
|
|
171
|
+
| 2 | R 组断言构成 | 同上输出逐条计数 | 27 = R1 3(R1a-c)/ R2 3(R2a-c)/ R3 5(R3a-e)/ R4 5(R4a-e)/ R5 3(R5a-c)/ R6 8(R6a + 四参数名 + R6b/R6c/R6d)。**各组语义**:R1=撤销①的复现样本、R2=自否定兜底不退化、R3/R4=B 类两态全链 REJECT、**R5=不误伤组**(合法候选照常 `accepted=1/written=1`、`replay.ok=True`、「# 不适用条件」照常落盘;`md_cg/test_p6_consolidate.py:296-312`)、R6=CLI 组。**「四参数名」是哪四个**(`md_cg/test_p6_consolidate.py:326-328`):`--reflect-max-tokens` / `--verify-max-tokens` / `--reflect-timeout` / `--verify-timeout`——即四个**角色级**新增参数;§一 所列的第五个参数 `--timeout` 是共用缺省,不入帮助文本断言,而由 R6d 行为面直接使用并断言实收 7.0(`md_cg/test_p6_consolidate.py:340-358`) | 〔本报告实跑〕 |
|
|
172
|
+
| 3 | 变异自证 | `python -X utf8 -m md_cg.test_p6_consolidate --mutation-baseline` | 未变异基线红项 0;六腿红项 **3 / 2 / 5 / 10 / 1 / 1** 全等于登记值;退出码 **0** | 〔本报告实跑〕 |
|
|
173
|
+
| 4 | 删断言探针(复核) | 内存态删组后重跑守卫 | 删 R3 组 → 退出码 1(②b 红项 0≠5);删 R4 组 → 退出码 1(②a 0≠2);删 R2 组 → 退出码 1(① 2≠3) | 〔工作流采集〕 |
|
|
174
|
+
| 5 | ANCHOR-MISS 门 | 内存态锚点漂移探针(替身/重复/两条漂移) | 默认与 `--mutation-baseline` 两模式均退出码 **2**(fail-closed,打印 ANCHOR-MISS 清单) | 〔工作流采集〕 |
|
|
175
|
+
| 6 | python 全量 | `python -X utf8 scripts/run_tests.py` | **359/359 通过,5 跳过(依赖缺失/平台不符)**,退出码 **0**。口径:`359/359`=**可运行目标** 359 个全过;`5 跳过` 是**另计**的 5 个目标(不在 359 内),目标总数 = 359 + 5 = 364(打印式见 `scripts/run_tests.py:283-284`:「通过数/可运行数,跳过数」) | 〔本报告实跑〕(与〔工作流采集〕数字一致) |
|
|
176
|
+
| 7 | 容器栈一 | `docker run --rm -v <仓根>:/work -w /work rust:bookworm bash scripts/linux_verify.sh full` | 退出码 **0**(`结果: 22 pass / 0 fail`;`[PASS] smoke_test (linux)`;`=== 汇总: 49 pass / 0 fail ===`) | 〔工作流采集〕(本报告未重跑) |
|
|
177
|
+
| 8 | 容器栈二 | `docker run --rm -v <仓根>:/work -w /work node:22-bookworm bash scripts/verify_linux_node.sh` | 退出码 **0**(`# cancelled 0` | `# skipped 3` | `# todo 0` | `# duration_ms 12470.924826`) | 〔工作流采集〕(本报告未重跑) |
|
|
178
|
+
| 9 | 修前/修后对拍(A 类①) | 同脚本复跑 | `pos_recall` false→**true**、`ok` false→**true**;②/③ 读数不变(0.402 / 0.37) | 〔工作流采集〕 |
|
|
179
|
+
| 10 | 修前/修后对拍(B 类两态) | 隔离库全链 | `accepted=1/written=1` → **`rejected=1/written=0`**;`reasons` 由 `{}` → `{"neg_dropped_all":1}` / `{"neg_absent":1}`(可甄别);盘上内容逐字未变 | 〔工作流采集〕 |
|
|
180
|
+
| 11 | 合法输入不误伤 | 两例合法全链(复核材料记作 `L1`/`L2`——**样本名**,与纪律 17 的只读层级「L1 直跑」同名不同义)+ 212 例 replay 直调 | 合法全链归一化 3 处墙钟时间戳(`created_at` / `condition_space.time_window` / `llm_consolidation.at`)后逐位全等;212 例中 202 全等、10 分歧恰为旧式一票否决类、非法分歧 0 | 〔工作流采集〕 |
|
|
181
|
+
| 12 | 修前退化输入异常数 | `probe_sweep.py` | 异常 0(**缺陷形态是错接受/错否决,不是崩溃**) | 〔工作流采集〕 |
|
|
182
|
+
|
|
183
|
+
**变异腿红项名单**(〔本报告实跑〕输出逐条):① 恢复一票否决 → R1a、R1b、R2c;②a `if not neg_cand:`→`if False:` → R4b、R4e;②b `if not neg:`→`if False:` → R3a-R3e;②ab 两态整体删除 → R3 五 + R4 五;③a reflect 侧未透传单设 → R6b;③b verify 侧未透传单设 → R6c。**缺口如实登记**:R6a + 四参数名断言走 subprocess 跑盘上模块,内存变异打不到 ⇒ 不登记变异腿(判别力由四参数名逐一断言承担,§五-2)。
|
|
184
|
+
|
|
185
|
+
**变异基线机制**:锚点 = 守卫文件内**联的源码文本**(`_MUTATIONS` 表,`md_cg/test_p6_consolidate.py:382-406`),不读 git HEAD(全文件无 git 调用);锚点缺失/不唯一 → ANCHOR-MISS → 退出码 2(`_anchor_report` :409-423、`main` :470-479);变异为内存态源码替换、不落文件(`_mutate` :426-434)。
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 五、独立复核判定与它列出的 uncovered
|
|
190
|
+
|
|
191
|
+
### 判定:**ACCEPT**
|
|
192
|
+
|
|
193
|
+
依据(**复核侧原文,随任务材料传入**〔工作流采集〕):按工作纪律第5条 验证纪律——入库前必须过回放/断言/回归验证,未验证不固化。L1 直跑留痕(此处「L1」=纪律 17 的只读判定层级,与 §四 表#11 的样本名 `L1`/`L2` 同名不同义):`python -X utf8 -m md_cg.test_p6_consolidate` 与 `--mutation-baseline`——只读判定(产物落点=仅系统临时目录合成库,跑完清理;不改仓库/外部状态),秒级-分钟级,可逆。复核为本次工作流内独立于实施侧的执行(实验台、探针、oracle 均自建)。
|
|
194
|
+
|
|
195
|
+
**复核手段(全部〔工作流采集〕实跑)**:① 双树对拍——`git archive HEAD md_cg` 提取 `%TEMP%/issue64_review/pre_pkg`(consolidate.py sha256=`a831157411989a05` 与 HEAD blob 逐字节相同);现行树 `e886d8bcc09005c9`;② `probe_sweep.py` 15 全链例 + 空池 + 212 例 replay 直调,异常 0;③ 自写 oracle 逐例判定;④ 删断言探针;⑤ ANCHOR-MISS 探针(替身/重复/漂移三式均退出码 2);⑥ 两态可观测面独立复得(`reasons` 键可区分 `neg_absent`/`neg_dropped_all`、`samples` 带 `reason` 且 `replay=None`;`_cli` stdout(`consolidate.py:1626` 打印 rep)实测含 `"reasons": {"neg_dropped_all": 1}` 与 `"written": 0`);⑦ 工作区完整性——跑前跑后工作区 sha256 与 `git status` 与会话起始逐字一致;收尾删除 18 个 `i64_*` 与 45 个 `mdcg_p6_*` 残留(实验库根全部 `tempfile.mkdtemp`);**更早运行遗留 2538 个未动**——「属他人产物」为复核侧判据的转记,其判定依据未随任务材料提供、本报告未能核实,此处只转记「删 63 留 2538」这一动作边界。
|
|
196
|
+
|
|
197
|
+
### 它列出的 uncovered(逐条)
|
|
198
|
+
|
|
199
|
+
1. **`grounding_failed` 分支修后不可达**(非阻断发现):实测 pre 三例 `D_empty_body` / `D_hallu_pos_neg_absent` / `D_hallu_pos_neg_dropped`(复核探针内例名)的 reason 由 `grounding_failed` 变 `neg_absent`/`neg_dropped_all`;全仓 grep 仅该代码站点与报告提及、无下游消费者。**被修正的原句出处**:实施材料原表述为「原 `:779-786` 与 `grounding_failed`/`replay_failed` 语义保持」(随任务材料传入;本报告 §三-2 转记其大意)——独立复核指出其不精确:代码行未动属实,但 `grounding_failed` 不再是可达结论。**「报表」指什么**:`consolidate()` 返回的 `rep` 字典(`reasons` 计数与 `samples` 为其字段),`_cli` 在 `md_cg/consolidate.py:1626` 原样打印同一 `rep` JSON(可选 `--report` 落盘);节点 frontmatter 的 `llm_consolidation` 证据摘要由 `_evo_evidence`(`md_cg/consolidate.py:604`)拼接、并投影到演化台账 `_evolution/ledger.md` 的证据行。「分支不可达」= 在两态输入下 `grounding_failed` 不会再出现在 `reasons` 里——属**报表口径**的可见性变化,不是落盘行为变化(两态都是 REJECT、都不落盘)。
|
|
200
|
+
2. **R6 的变异覆盖缺口**:R6a + 四参数名断言走 subprocess 跑**盘上模块**,内存态变异打不到 ⇒ 不登记变异腿;判别力由「四个参数名逐一断言」承担(删任一参数即红)。
|
|
201
|
+
3. **删断言探针的边界(自指守卫固有)**:删 R3 组 + 同删 ②b 与 ②ab 两条变异腿 → 退出码 0(**静默**)——属自指守卫固有边界,若不声明即风险,记入守卫面残留风险。
|
|
202
|
+
4. **修前实现同批输入亦不抛异常(0 异常)**:「不再崩」成立但不是缺陷形态;本缺陷形态是错接受/错否决。
|
|
203
|
+
5. **生产两 lambda 的真实网关未验证**:超时/预算**单设**只在打桩层面验证(R6b/R6c/R6d 与 ③a/③b 变异腿);未对真实网关发请求(零 token;不越界)。
|
|
204
|
+
|
|
205
|
+
### 复核/复现材料清单(读者可得性)
|
|
206
|
+
|
|
207
|
+
本报告引用的前序阶段材料均**未入库**(由各阶段在系统临时目录生成,或仅为材料内名称);本报告已把其 payload/读数原文转记在对应章节。
|
|
208
|
+
|
|
209
|
+
| 材料 | 出处(角色/位置) | 读者当前可否取到 |
|
|
210
|
+
|---|---|---|
|
|
211
|
+
| `leg_a1.py` / `leg_b.py` / `leg_cli.py` | 修前复现编排侧;`%TEMP%\issue64_repro_v7gqwuxu` 等临时目录 | 否(未入库;payload 与读数已转记于 §二) |
|
|
212
|
+
| `probe_sweep.py` | 独立复核侧;系统临时目录 | 否(未入库;读数见 §二末「复核侧扫面」) |
|
|
213
|
+
| `pre.json` | 独立复核侧(改前包同批输入的异常计数) | 否(未入库;本报告转记「0 异常」) |
|
|
214
|
+
| `%TEMP%/issue64_review/pre_pkg` | 独立复核侧(`git archive HEAD` 提取的改前包,consolidate.py sha256=`a831157411989a05`) | **可复现**:同一命令(§附 复现命令末行) |
|
|
215
|
+
| `D_empty_body` 等三例 / `S2` / `S4` | 复核材料内例名(样本本体未随材料提供) | 否(只存名称) |
|
|
216
|
+
| 「复核侧原文」(ACCEPT 依据、uncovered 各条) | 本工作流独立复核阶段材料 | 否(本报告已逐条转记,本节即其出处) |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 六、边界与未覆盖(含本轮明确不修而留池的面)
|
|
221
|
+
|
|
222
|
+
### 6.1 本轮明确不修(登记留池,修复范围严格限于 §三 三处;共 4 条 = 判据宽严 ×2 + 防护差异 ×1 + 计数口径 ×1)
|
|
223
|
+
|
|
224
|
+
1. **A 类②**(`neg_separated` 判据里「负条件对正文覆盖率 < 0.5」项过严):判据设计边界——词面判据无法区分「复制正文」与「用正文词描述的邻近情境」,S2/S4 样本连续过渡(样本名见 §五 材料清单);若后续要收 ② 的边界,需先立设计稿(不在本缺陷范围)。
|
|
225
|
+
2. **A 类③同族宽严问题**:外部报告对 ③ 的原文**未随材料提供**(材料只给「同族宽严」概括);实施契约明令不动 ③ 本体——即 `neg_separated`(`:529-533`)与 `no_conflict`(`:535-537`)的**覆盖率阈值判据**;③ 兜底不退化由 R2 钉住。
|
|
226
|
+
3. **「B 路(consolidate)无 E04x 签章闸而 ccgc 路有」**:术语先定义——两路=**consolidate 固化路**(`md_cg/consolidate.py`,本报告被测文件)与 **ccgc 编译-签章路**(`md_cg/ccgc.py`;E04x 是其签章拒绝码表 `:65-68`:E040 无验证签章 / E041 自证拒绝 / E042 验证未通过);「签章闸」=后者对「验证方 ≠ 编译执行者」的机械拒绝机制。本条属两路防护**设计差异**,非本缺陷面;本报告只核到「本轮改动面未含 ccgc 相关文件」(§三 清单),不裁决该差异。
|
|
227
|
+
4. **「短流水(<N 字符)计入 rejected 污染计数」**:计数口径问题(短文本判据、报表分桶——「报表」定义见 §五-1),非本缺陷面。
|
|
228
|
+
|
|
229
|
+
### 6.2 未覆盖 / 残留风险
|
|
230
|
+
|
|
231
|
+
- 真实 reflect/verify 网关零请求:预算/超时单设的生产面仅打桩验证(§五-5)。
|
|
232
|
+
- A②/③ 的连续过渡区间(S2/S4)未建独立样本库。
|
|
233
|
+
- `grounding_failed` 可达性(修后不可达)留作报表口径观察项(§五-1)。
|
|
234
|
+
- 删断言 + 删对应变异腿的**双删静默**边界为自指守卫固有(§五-3),无法在本守卫内自证完全。
|
|
235
|
+
- 容器两栈(§四-7/8)与复核类读数(§四-4/5、§五)来源为**本工作流前序阶段实跑**,本报告未重跑;本报告实跑面 = 读码行号核实、sha256、守卫 109/0、变异基线六腿、python 全量 359/359、`git status`。如后续阶段数字需对拍,以各自阶段实跑为准。
|
|
236
|
+
- 未提交状态:`git status --porcelain` 仅两改一新增;未 `git add`/`commit`/`push`;未动在役数据根与 `data/policy.json`。
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 七、开放问题(读者提问的处置)
|
|
241
|
+
|
|
242
|
+
以下 9 条来自读者反馈的后续提问;能给事实的给事实,属工作流外决策的明确标注「本报告不裁决」、不预告时间。
|
|
243
|
+
|
|
244
|
+
1. **三件改动何时入库**:截至本报告,`git status --porcelain` 仅两改一新增,未 `git add`/`commit`/`push`;入库/发版/给外部报告者回执均属工作流外决策,本报告不裁决、无时间表。
|
|
245
|
+
2. **外部报告 issue64 原文**:未随本工作流材料提供;本报告的「两类主指控 / A 类①②③」是对材料中要点的转述,无法与原文逐字对照。
|
|
246
|
+
3. **真实网关上的预算/超时单设**:未做、未排期;本报告只登记「仅打桩面验证」这一事实(§五-5)。
|
|
247
|
+
4. **同类「负条件空集」是否存在于 consolidate 之外的写入路径**:本报告**未排查**(工作面限于 consolidate 路);§6.1-3 只登记两路防护差异,不等于已排除其它路径。
|
|
248
|
+
5. **A 类②/③ 的影响面 / `S2`、`S4` 样本本体**:影响面量化未做;`S2`/`S4` 为复核材料内样本名,样本本体未提供(§五 材料清单)。
|
|
249
|
+
6. **复现材料能否随报告提供**:所列材料均未入库(§五 材料清单);是否随报告发布/入库属工作流外决策。
|
|
250
|
+
7. **自指守卫盲区是否加 CI 兜底门**:§五-3 的「双删静默」是自指守卫固有边界;是否加外部计数/断言门属工作流外决策,本报告不裁决。
|
|
251
|
+
8. **2538 个更早残留**:复核侧只记录「未动」(§五 复核手段⑦);是否需要清理及影响,本报告未能核实,登记为待决项。
|
|
252
|
+
9. **版本与回执**:缺陷针对 v0.7.5 实测、修复当前停在工作树(未提交);进哪个版本、是否回执外部报告者,属工作流外决策。
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 附:复现命令
|
|
257
|
+
|
|
258
|
+
```text
|
|
259
|
+
# 守卫(含 R 组;仓根执行)
|
|
260
|
+
python -X utf8 -m md_cg.test_p6_consolidate
|
|
261
|
+
# 定点变异自证(六腿红项数须与登记值相等)
|
|
262
|
+
python -X utf8 -m md_cg.test_p6_consolidate --mutation-baseline
|
|
263
|
+
# python 全量
|
|
264
|
+
python -X utf8 scripts/run_tests.py
|
|
265
|
+
# 容器两栈(镜像与命令形态见脚本头注 / 既有记录)
|
|
266
|
+
docker run --rm -v <仓根>:/work -w /work rust:bookworm bash scripts/linux_verify.sh full
|
|
267
|
+
docker run --rm -v <仓根>:/work -w /work node:22-bookworm bash scripts/verify_linux_node.sh
|
|
268
|
+
# 复核侧实验台第一步:提取改前包(HEAD 版 md_cg 子树)
|
|
269
|
+
git archive HEAD md_cg | tar -x -C <目标目录>
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
A 类① 最小复现(存为 `%TEMP%/probe_a.py` 后 `python -X utf8 %TEMP%/probe_a.py`;仓根不可直接以 `-c` 传中文——规避 Windows shell 的 GBK 解码):
|
|
273
|
+
|
|
274
|
+
```python
|
|
275
|
+
from md_cg.consolidate import replay_check
|
|
276
|
+
POS = ["海边甜品店 招牌蛋糕 做法"]
|
|
277
|
+
NEG = ["海边甜品店 的其它蛋糕 冷藏流程"]
|
|
278
|
+
BODY = "海边甜品店招牌蛋糕做法:奶油打发后低温烘焙,成品当日冷藏保存。"
|
|
279
|
+
print(replay_check(POS, NEG, BODY))
|
|
280
|
+
# 修前:{'pos_recall': False, 'neg_separated': True, 'no_conflict': True, 'ok': False}
|
|
281
|
+
# 修后:{'pos_recall': True, 'neg_separated': True, 'no_conflict': True, 'ok': True}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
B 类两态全链复现:打桩 reflect 恒返回 `R_CAND_DROP`(态1,含域外负条件)/ `R_CAND_ABSENT`(态2,无负条件键)(`md_cg/test_p6_consolidate.py:149-155`)、verify 恒返回 `"{}"`,`consolidate(root, apply=True, …)` 于 `tempfile.mkdtemp` 隔离库;R3/R4 组即该复现的守卫化(修后 `rejected=1`、`reasons` 记 `neg_dropped_all`/`neg_absent`、不落盘)。
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
| 本机门禁 | `npm run gate` **VERDICT=PASS**(11 腿,rc=0) |
|
|
86
86
|
| E 盘空沙箱 | **VERDICT=PASS**(rc=0):空沙箱真装真握手——出货清单 1580 条目含 utf8_boot.py → `npm install` 装好 → 真启动 MCP 握手 `serverInfo.version=0.7.4`、`tools=[cg, stg]`;沙箱保留供复核 |
|
|
87
87
|
| Linux 容器双栈 | **栈一 45 pass / 0 fail**(rust:bookworm `linux_verify.sh full`,含 12 项断言判别力自证与 smoke 22/0);**栈二 135 tests / pass 132 / fail 0 / skipped 3**(node:22-bookworm TS 套件) |
|
|
88
|
-
| registry 回验 |
|
|
88
|
+
| registry 回验 | **VERDICT=PASS**(发布后轮询传播后实测):tarball 25,607,695 字节 / **1582 文件**与 registry fileCount 一致、R0 sha1/sha512 对拍通过、R1–R3/R5/R7 全过 |
|
|
89
89
|
|
|
90
90
|
## 七、复跑命令(中性占位路径)
|
|
91
91
|
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# 发布 v0.7.5:上下文自管理机制(DSH 端 + zcode 端 + 系统提示词)+ issue #63 修复
|
|
2
|
+
|
|
3
|
+
> 版本 0.7.5 | 提交 `7475c2b5` 及其前 11 笔(本报告与版本递增为其后一笔)| 2026-10-06
|
|
4
|
+
> 前版 v0.7.4(世界模型功能端三批+DSH 会话归因治本)| 定位:「我们取代 zcode 成为管理上下文的 harness 组件」(使用者 2026-10-06)
|
|
5
|
+
> 下一版 0.8.0=与对外完整身体库 `FuRongJun-1999/lingshu` 组合、端到端可用(对接设计 v0.1 待签收)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 一、本版范围(v0.7.4 → v0.7.5 共十二笔)
|
|
10
|
+
|
|
11
|
+
| 提交 | 内容 |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `36654795` | **issue #63 修复**(批次117):常驻循环无界等待有界化+活体进度面 |
|
|
14
|
+
| `d291d826` | **批次118** DSH 端会话窗口:滑动沉淀+续接注入(两轨独立) |
|
|
15
|
+
| `c8f4d8ea` | **批次119** zcode 端同步器:会话库真人轮 → 灵枢运行态窗口(增量水位) |
|
|
16
|
+
| `dedef082` | **批次120** zcode 端三件:SessionStart 接续包钩子+全量 md 转写+doc_ref 索引 |
|
|
17
|
+
| `0ad463c7`/`ba31625a` | 白箱化理论 v0.2/v0.3 入库(文档,v0.3 为灵枢载体视角第三次迭代) |
|
|
18
|
+
| `b06f8f28` | 0.8.0 身体×脑:MCP 端到端冒烟固化(`scripts/body_e2e_smoke.py`)+对接设计 v0.1 |
|
|
19
|
+
| `717c6cb4` | **纪律真源修订**:压缩/续接三步重建+长会话每 10 轮间歇归档(8 端产物重渲染) |
|
|
20
|
+
| `9e02604d` | **批次121** zcode 窗口钩子:Stop 每轮镜像+UserPromptSubmit 压缩重建/逢十提醒 |
|
|
21
|
+
| `13762111` | 钩子去重补丁:SessionStart 注入后记压缩确认位(防 resume 双注入) |
|
|
22
|
+
| `7475c2b5` | 本机路径出门禁:转写/镜像根改动态解析(门禁第 11 腿抓出;另修一处 NameError 隐患) |
|
|
23
|
+
| `c26c1d2b` | 发布12 报告回填(0.7.4 registry 回验读数) |
|
|
24
|
+
|
|
25
|
+
## 二、上下文自管理机制(核心)
|
|
26
|
+
|
|
27
|
+
### 分层(一句话:注入取近 10,窗口滚 200,全文可回读)
|
|
28
|
+
|
|
29
|
+
| 层 | zcode 端 | DSH 端 |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| 注入面 | 近 10 轮窗口(SessionStart 接续包+UserPromptSubmit 压缩后重建) | 近 10 条(独立第二块注入,两轨独立) |
|
|
32
|
+
| 运行态窗口 | `_recent` 滚动 200 条(stop 每轮增量) | 同面(插件写入,真机验收) |
|
|
33
|
+
| 会话 md 镜像 | **只保留最近 10 轮**、超长优先遗忘最旧(Stop 钩子每轮刷新) | —(硬窗属身体侧会话引擎原生,0.8.0) |
|
|
34
|
+
| 完整原文 | 全量转写 md+`cg(op=ref)` 逐字节回读 | 宿主日志 |
|
|
35
|
+
| 纪律面 | 系统提示词三步(读纪律→输出声明→回取近 10 轮窗口)+每 10 轮间歇归档提醒 | — |
|
|
36
|
+
|
|
37
|
+
### zcode 端三件钩子(各司其职,全部 fail-soft)
|
|
38
|
+
|
|
39
|
+
- **SessionStart**(startup/resume):增量同步+刷新镜像/转写 → 注入「灵枢接续包」(近 10 轮+在办任务/活跃目标/未解)。引擎侧语义已核实:每会话实例仅一次(`sessionStartHookRan` 闸)且本版本无 compact 触发点——压缩路径由提交面承担。
|
|
40
|
+
- **Stop**(每轮):静默维护三写(会话 md 镜像/全量转写/运行态窗口)。**刻意零输出**:引擎对 Stop 仅在 `decision=block` 时消费注入,普通输出无意义。
|
|
41
|
+
- **UserPromptSubmit**(每次提交前):①检测新压缩(`compact_summary` 结构性判据,不受正文提及污染)→ 注入重建包;②已完成轮数逢十 → 注入间歇归档提醒(同一轮数不重复,确认位落状态文件)。
|
|
42
|
+
|
|
43
|
+
### 库根与预算(两处工程要害)
|
|
44
|
+
|
|
45
|
+
- **库根与 MCP 同源**:env `MDCG_ROOT` → zcode 配置 `mcp.servers.mdcg.env.MDCG_ROOT` → 缺省。修前缺省解析到 C 盘 profile 遗留库,与 MCP 实际服务的 AEIS 数据区库**分叉**(实测抓出,含历史误投清理+备份)。
|
|
46
|
+
- **注入预算 4000**:`session_recall` 默认 1200 在富库(未解 28 条+自我卡)下会把 recent 段**整段裁空**(实测 0 条);升 4000 后 recent=10 全保(实测 3050 tokens 内)。
|
|
47
|
+
|
|
48
|
+
## 三、活体验收(重启后实测,2026-10-06)
|
|
49
|
+
|
|
50
|
+
| 面 | 读数 |
|
|
51
|
+
|---|---|
|
|
52
|
+
| SessionStart 注入 | 重启后首轮上下文出现「会话开始/压缩恢复」接续包段 |
|
|
53
|
+
| UserPromptSubmit 重建 | 同轮出现「检测到上下文压缩——重建近 10 轮窗口」段(预留的活体验收点被自然触发) |
|
|
54
|
+
| Stop 三写 | 会话 md 恰 10 轮(mtime 16:42:31)/转写追加 448 轮终版 +4.3KB/`_recent` 84 条 zcode-window、水位推进 |
|
|
55
|
+
| 逢十提醒 | 第 450 轮提交时**真实触发**(`win|` 确认位落盘 `last_reminded_turn=450`) |
|
|
56
|
+
| Stop 面复核 | 次轮核对:转写 mtime 16:49:20、末块=第 450 轮全文;`_recent` 88 条(尾部两轮齐全) |
|
|
57
|
+
| 双注入去重 | 修前 resume 场景双注入(约 3KB 重复)→ 确认位补丁后:SessionStart 注入 1608 字并写位,随后提交面**零输出** |
|
|
58
|
+
|
|
59
|
+
## 四、实测抓出并修复的缺陷(诚实面)
|
|
60
|
+
|
|
61
|
+
1. **双库分叉**(钩子缺省根 ≠ MCP 服务根):根解析改与配置同源;历史误投 200 行清理(备份在案)、转写按 DB 权威重建(水位回退)。
|
|
62
|
+
2. **预算陷阱**(1200 裁空 recent):升 4000,富库实测保全。
|
|
63
|
+
3. **resume 双注入**:`13762111` 确认位去重(复现→修复→复验链路齐)。
|
|
64
|
+
4. **本机路径入追踪面**(门禁第 11 腿抓出 3 处):转写/镜像根改动态解析(env `MDCG_DATA_ROOT` → 库根父级 → 家目录兜底),**行为逐字等价断言通过**;顺带修 `--index` 分支裸名报错隐患。教训重申:**提交后必须复跑全量门禁**。
|
|
65
|
+
|
|
66
|
+
## 五、issue #63 修复(批次117)
|
|
67
|
+
|
|
68
|
+
- 报告:常驻循环 `_git` 无界等待无超时 —— `Popen.wait()` 无 timeout,stdin 未隔离。
|
|
69
|
+
- 修复:`_git` 加 `timeout=120s`+`stdin=DEVNULL`;新增可区分的 `SleepGitTimeout` 异常;全库 subprocess 加固;活体进度面 `current_tick/stale_tick`。守卫 58 断言;回复已发(`issuecomment-6011170578`,线上回读 exact=True)。
|
|
70
|
+
|
|
71
|
+
## 六、工程面读数(编排侧亲跑)
|
|
72
|
+
|
|
73
|
+
- python 全量 **356/356**(5 跳过)rc=0;npm test **143/0/1**。
|
|
74
|
+
- `npm run gate` **11 腿 VERDICT=PASS**(rc=0):含出货面冒烟(临时沙箱 pack→install→真握手 S1–S6)、R-7 rust 双腿(cargo 33 passed、rank_parity 两侧逐位一致 10/10)、本机路径门禁(追踪面零命中)。
|
|
75
|
+
- 纪律验证 10/10(真源指纹 `9486668b0dadac39`);工作区索引与仓库一致(追踪 2253 件)。
|
|
76
|
+
|
|
77
|
+
## 七、边界与如实声明
|
|
78
|
+
|
|
79
|
+
- 钩子随**会话实例**装载:已验证(重启后实测);不装载的存量实例不生效(已如实入档)。
|
|
80
|
+
- 逢十提醒与压缩重建同为钩子面能力,依赖装载;提醒为提示性质,不强制。
|
|
81
|
+
- zcode 宿主无「截断历史」API——本版为**等价效果**(压缩瞬间接续+全量可回读);真·「只保留 10 条」硬窗属身体侧会话引擎原生能力(0.8.0)。
|
|
82
|
+
- 0.8.0 对接设计 v0.1 四条待裁:适配器归属/3D 坐标方案/tag 过滤读/smoke 进门禁。
|
|
83
|
+
- 同一压缩的首次重建注入在「resume+首提示」场景曾双发,已由确认位去重修复。
|
|
84
|
+
|
|
85
|
+
## 八、发布三关(发布时点实测)
|
|
86
|
+
|
|
87
|
+
| 关 | 读数 |
|
|
88
|
+
|---|---|
|
|
89
|
+
| 本机门禁 | `npm run gate` **VERDICT=PASS**(11 腿,rc=0) |
|
|
90
|
+
| 出货面冒烟 | **VERDICT=PASS**:临时沙箱 pack→install→真握手(initialize→serverInfo;tools/list == ['cg','stg'];装后含 `utf8_boot.py`) |
|
|
91
|
+
| Linux 容器双栈 | 栈一 rust:bookworm(`linux_verify.sh full`)**45 pass / 0 fail**(含红基线判别力自证;smoke 22/0);栈二 node:22-bookworm(TS 套件)**144 tests / pass 141 / fail 0 / skipped 3** |
|
|
92
|
+
| registry 回验 | **VERDICT=PASS**(发布后实测;registry 发布时间 2026-10-06T09:28:02Z):tarball **25,653,193 字节 / 1587 文件**(与 registry fileCount=1587 一致)、R0 sha1/sha512 对拍通过、R1–R3/R5/R7 全过(R4 于 registry 模式按设计跳过,工作区与发布提交由发版笔保证一致) |
|
|
93
|
+
|
|
94
|
+
## 九、复跑命令(中性占位路径)
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# 全量
|
|
98
|
+
python -X utf8 scripts/run_tests.py --jobs 4
|
|
99
|
+
cmd /c "npm test"
|
|
100
|
+
cmd /c "npm run gate"
|
|
101
|
+
|
|
102
|
+
# 钩子手测(stdin 喂载荷;Stop 静默、提交面出注入 JSON)
|
|
103
|
+
echo '{"hookEventName":"Stop","sessionId":"<sid>"}' | python -X utf8 scripts/zcode_window_hook.py
|
|
104
|
+
echo '{"hookEventName":"UserPromptSubmit","sessionId":"<sid>"}' | python -X utf8 scripts/zcode_window_hook.py
|
|
105
|
+
echo '{"sessionId":"<sid>"}' | python -X utf8 scripts/zcode_compact_hook.py
|
|
106
|
+
|
|
107
|
+
# 窗口镜像/转写单点
|
|
108
|
+
python -X utf8 scripts/sync_zcode_session.py --dry-run
|
|
109
|
+
python -X utf8 scripts/export_zcode_transcript.py
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
*本报告 v1.0 · 2026-10-06 · 编排侧编制;容器与 registry 回验读数均已收录*
|