@furongjun1999/dsh-memory 0.7.2 → 0.7.3
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 +56 -47
- package/codebuddy/CODEBUDDY.md +6 -6
- package/docs/README.md +148 -144
- package/docs/discipline/harnesses.yaml +16 -8
- package/docs/discipline/templates/zcode-user.md.tmpl +49 -0
- package/docs/eval/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_/345/205/255/345/256/266/350/256/260/345/277/206/347/263/273/347/273/237/345/220/214/345/260/272/345/256/236/346/265/213_v3.1.md +340 -0
- package/docs/eval/N225_/347/264/242/345/274/225/346/227/245/345/277/227/351/235/236/345/257/271/350/261/241/350/243/205/350/275/275/351/235/242/347/261/273/345/236/213/351/227/270_v1.0.md +2 -2
- 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 +1 -1
- 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 +1 -1
- package/docs/eval/issue43_/351/273/230/350/256/244/347/255/226/347/225/245/344/270/216/351/224/256/347/261/273/345/236/213/351/227/270_v1.1.md +1 -1
- package/docs/eval/issue43_/351/273/230/350/256/244/347/255/226/347/225/245/345/212/240/350/275/275/344/270/216/345/207/255/346/215/256/346/230/216/346/226/207/351/230/237/345/210/227_v1.0.md +2 -2
- 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 +5 -5
- 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 +9 -9
- 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 +4 -4
- 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 +1 -1
- 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 +1 -1
- 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 +3 -3
- 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 +3 -3
- 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 +7 -7
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/270/200/346/211/271_/346/216/245/347/272/277/344/270/216/347/255/211/344/273/267/345/217/230/346/215/242_v1.0.md +2 -2
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/270/211/346/211/271_/351/227/250/347/246/201/350/275/254/346/255/243/344/270/216/350/260/203/345/272/246/346/255/242/350/241/200/344/270/216/351/227/250/346/216/247/346/224/266/345/217/243_v1.0.md +1 -1
- package/docs/eval//344/274/230/345/214/226/347/254/254/344/272/214/346/211/271_/344/276/235/350/265/226/351/200/217/344/274/240/344/270/216/345/257/271/346/213/215/345/217/243/345/276/204/344/270/216/350/264/237/347/274/223/345/255/230_v1.0.md +7 -7
- package/docs/eval//345/207/272/350/264/247/351/235/242/345/206/222/347/203/237_/350/277/233/350/264/247/351/227/250/347/246/201_v1.0.md +10 -10
- package/docs/eval//345/217/221/345/270/20307_/345/244/226/351/203/250/346/212/245/345/221/212/345/233/233/346/211/271/344/277/256/345/244/215/344/270/216/346/217/222/344/273/266/351/235/242/345/212/240/345/233/272_v1.0.md +4 -0
- package/docs/eval//345/217/221/345/270/20308_/350/207/252/350/277/255/344/273/243/344/270/216/347/235/241/347/234/240_/345/233/276/346/243/200/347/264/242/350/267/257/344/270/216/346/235/203/351/207/215_v1.0.md +1 -1
- package/docs/eval//345/217/221/345/270/20311_/345/244/226/346/212/245/345/205/255/350/277/236/344/277/256/344/270/216/344/270/226/347/225/214/346/250/241/345/236/213/345/272/225/345/272/247_v1.0.md +91 -0
- package/docs/eval//345/275/222/344/270/200/345/261/202/347/274/272/347/234/201/347/277/273/345/205/263_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +2 -2
- package/docs/eval//347/224/250/346/210/267/350/243/201/345/206/263/345/244/204/347/275/256_/347/254/254/344/270/200/346/211/271_v1.0.md +195 -0
- package/docs/eval//347/224/250/346/210/267/350/243/201/345/206/263/345/244/204/347/275/256_/347/254/254/344/272/214/346/211/271B6_/346/234/254/346/234/272/350/267/257/345/276/204/347/233/270/345/257/271/345/214/226_v1.0.md +78 -0
- package/docs/eval//347/253/257/345/210/260/347/253/257LoCoMoQA/345/220/214/345/217/243/345/276/204/345/257/271/347/205/247_v1.0.md +1 -1
- package/docs/eval//347/253/257/345/210/260/347/253/257/345/271/262/346/211/260/346/261/240/350/257/204/346/265/213_/347/241/256/345/256/232/346/200/247/350/243/201/345/206/263vsLLM_judge_v1.1.md +3 -3
- 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 +1 -1
- package/docs/eval//347/274/226/347/240/201/351/235/242/345/211/215/347/275/256_/345/205/245/345/217/243/350/207/252/344/277/235/350/257/201UTF8/344/270/216/346/226/207/346/234/254open/345/256/210/345/215/253_v1.0.md +1 -1
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v26.md +196 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v27.md +259 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v28.md +217 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v29.md +270 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v30.md +231 -0
- package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v31.md +281 -0
- package/docs/hive//345/256/211/345/205/250/345/256/241/350/256/241/345/256/236/351/224/232_v0.1.md +1 -1
- package/docs/hive//350/234/202/345/267/242M6_ingest/345/256/236/346/226/275/350/256/241/345/210/222_v0.1.md +1 -1
- package/docs/hive//350/234/202/345/267/242/345/217/214/345/256/236/344/276/213/344/272/222/351/252/214_/350/256/276/350/256/241/345/256/232/347/250/277.md +1 -1
- package/docs/hive//350/234/202/345/267/242/350/256/276/350/256/241_/347/220/206/350/256/272/345/257/271/351/275/220_v0.1.md +17 -17
- package/docs/hive//350/234/202/345/267/242/350/277/255/344/273/243_/345/256/217/350/247/202/344/270/216/347/276/244/344/275/223/350/260/203/345/272/246_v0.1.md +1 -1
- package/docs/mdcg/README/350/257/246/347/273/206/347/211/210_v0.4.10.md +2 -2
- 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 +42 -41
- package/docs/mdcg//345/217/221/345/270/203/351/227/250/347/246/201/351/223/276_v0.1.md +29 -8
- 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 +71 -1
- package/docs/plans//345/205/250/344/270/255/346/226/207/347/274/226/347/240/201/344/270/216/350/234/202/345/267/242/344/273/273/345/212/241/346/240/207/350/257/206/345/245/221/347/272/246_v2.0.md +1 -1
- package/docs/plans//345/244/232/344/270/273/344/275/223/344/270/226/347/225/214/346/250/241/345/236/213_/345/257/271/351/275/220/350/257/204/344/274/260/344/270/216/350/220/275/345/234/260/350/256/276/350/256/241_v0.1.md +141 -0
- package/docs/plans//347/235/241/347/234/240/344/270/216/350/207/252/350/277/255/344/273/243_/345/212/237/350/203/275/344/274/230/345/214/226/350/256/276/350/256/241_v0.4.md +2 -2
- package/docs/plans//350/257/255/344/271/211/346/227/266/347/251/272/345/233/276/350/241/245/345/205/250_/344/270/226/347/225/214/346/250/241/345/236/213/345/212/237/350/203/275/347/253/257_/350/256/276/350/256/241_v0.1.md +107 -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 +6 -5
- package/docs//347/247/244_/350/256/260/345/277/206/347/263/273/347/273/237/350/257/204/346/265/213/350/247/204/350/214/203_v2.1.md +225 -0
- package/dsh/cordis-patch-profile-web.example.yml +2 -2
- package/lib/bridge.js +9 -0
- package/lib/hooks.d.ts +8 -1
- package/lib/hooks.js +94 -32
- package/lib/lib/hook_audit.d.ts +55 -0
- package/lib/lib/hook_audit.js +208 -0
- package/lib/lib/mutual.js +5 -1
- package/lib/lib/roleplay_web.js +17 -2
- package/md_cg/auditview.py +248 -0
- package/md_cg/bench_e2e_judge.py +4 -2
- package/md_cg/branches.py +29 -3
- package/md_cg/consistency.py +38 -13
- package/md_cg/datapath.py +38 -11
- package/md_cg/forgetting.py +15 -2
- package/md_cg/freshness.py +32 -11
- package/md_cg/ghostref.py +130 -0
- package/md_cg/judgment_manifest.py +7 -0
- package/md_cg/mcp_server.py +58 -1
- package/md_cg/mdcg.py +4923 -4822
- package/md_cg/mdcos.py +31 -12
- package/md_cg/nodefile.py +77 -13
- package/md_cg/readcache.py +29 -4
- package/md_cg/selfreport.py +12 -3
- package/md_cg/sleep.py +129 -13
- package/md_cg/sources.py +1 -1
- package/md_cg/state_events.py +131 -0
- package/md_cg/sustain.py +1436 -1436
- package/md_cg/test_auditview.py +277 -0
- package/md_cg/test_autonomy_modes.py +2 -1
- package/md_cg/test_boot_openblas_guard.py +197 -0
- package/md_cg/test_ccg_form_parity.py +95 -4
- package/md_cg/test_cons200_scan_selection.py +4 -2
- package/md_cg/test_datapath_device_name.py +62 -3
- package/md_cg/test_generation_guard.py +5 -2
- package/md_cg/test_ghostref.py +182 -0
- package/md_cg/test_interop.py +1 -1
- package/md_cg/test_issue52_scan_condition_first.py +1 -1
- package/md_cg/test_lock.py +16 -7
- package/md_cg/test_m3_h9_semantic_guard.py +1 -1
- package/md_cg/test_n230_dirty_replay.py +375 -375
- package/md_cg/test_n238_body_text_parity.py +156 -0
- package/md_cg/test_n276_probe_hoist.py +199 -0
- package/md_cg/test_p4_freshness.py +95 -1
- package/md_cg/test_policy_required_ccg.py +3 -1
- package/md_cg/test_readcache_prodpath.py +66 -0
- package/md_cg/test_sleep.py +58 -1
- package/md_cg/test_sleep_p1.py +218 -2
- package/md_cg/test_state_events.py +178 -0
- package/md_cg/test_time_core_lint.py +8 -1
- package/md_cg/test_writepipe.py +8 -5
- package/md_cg/tokens.py +11 -2
- package/md_cg/writepipe.py +76 -0
- package/package.json +2 -2
- package/skills/plugin.json +1 -1
- package/src/bridge.ts +9 -0
- package/src/hooks.ts +576 -517
- package/src/lib/hook_audit.ts +243 -0
- package/src/lib/mutual.ts +5 -1
- package/src/lib/roleplay_web.ts +17 -2
- package/zcode/AGENTS.md +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# issue50-d · 遗忘闸门重要度同源与保护语义(落盘=裁决值 · 保护位只认显式声明 · 审计文案分叉)——修复工程报告 v1.0-r1
|
|
2
2
|
|
|
3
|
-
**日期**:2026-10-02(v1.0-r1 同日,按读者反馈逐条修订——处置明细见 **§七**)| **缺陷号**:issue50-d |
|
|
3
|
+
**日期**:2026-10-02(v1.0-r1 同日,按读者反馈逐条修订——处置明细见 **§七**)| **缺陷号**:issue50-d | **被测面**:`<仓根>` 工作树(未提交——4 改 + 1 新增,见文末 git 面)
|
|
4
4
|
|
|
5
5
|
**关联**:issue50-a(半重复 DEFER 结构性不可达 → `docs/eval/issue50_半重复待定复核_修复记录_v1.0.md`)· issue50-b(DEFER 出口接线 → `docs/eval/issue50_待定复核入队_修复记录_v1.0.md`)· issue50-c(DEFER 元数据透传与 node_id 兜底 → `docs/eval/issue50_元数据透传与兜底_修复记录_v1.0.md`)。issue50-d 是遗忘闸门三问裁决中「重要度一问」的收口:**审计面文案、落盘分、保护位三者首次同源一致**。
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
- 来源:dsh-plugin-hub(第三方插件市场)**安装失败自动报告**,自动提交至本仓库(作者 Weizuo-84,2026-10-02)。
|
|
11
11
|
- 命令:`dsh plugin --profile web add @furongjun1999/dsh-memory`(另试 `--profile desktop`,同样失败)。
|
|
12
|
-
- 环境读数(报告自带):DSH v0.2.0-rc.2 · Hub v1.4.13 · Node v24.18.1 · **pnpm: unknown** · **npm: unknown** · git 2.55 · win32 x64 (10.0.22000) · Profile `desktop` · DSH Home
|
|
12
|
+
- 环境读数(报告自带):DSH v0.2.0-rc.2 · Hub v1.4.13 · Node v24.18.1 · **pnpm: unknown** · **npm: unknown** · git 2.55 · win32 x64 (10.0.22000) · Profile `desktop` · DSH Home `~/.dsh`。
|
|
13
13
|
- 错误正文:仅两行 `[exit 1]`。报告模板自述「Full log: `~/.dsh/profiles/desktop/hub.log` (paste or attach for the full output)」——**报告者未附日志**。
|
|
14
14
|
|
|
15
15
|
## 二、一手证据(本判定全部由编排侧亲跑,读数如下)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# issue52 · 条件先行与截断可观测(stg `_scan` 索引序切片·静默截断)——修复工程报告 v1.1
|
|
2
2
|
|
|
3
|
-
**日期**:2026-10-03(v1.1 同日,按读者反馈逐条修订——处置明细见 **§七**)| **缺陷号**:issue52 |
|
|
3
|
+
**日期**:2026-10-03(v1.1 同日,按读者反馈逐条修订——处置明细见 **§七**)| **缺陷号**:issue52 | **被测面**:`<仓根>` 工作树(未提交——5 个已跟踪文件被改 + 新增守卫 `md_cg/test_issue52_scan_condition_first.py`;另有未追踪设计稿与宿主目录,见文末 git 面)
|
|
4
4
|
|
|
5
5
|
**关联**:
|
|
6
6
|
- 设计稿 `docs/plans/stg条件化与结构索引_设计_v0.1.md`(未追踪)——本批为第 1/2 层实施,第 3 层(结构索引 + 条件资格)留池另立;设计稿 §一立约动因即本 #52 的在役复现。
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
| **断言标签 A\*/B\*/C\*/D\*/E\*** | 守卫 `test_issue52_scan_condition_first.py` 的组内编号:G1=A1-A8(条件先行)、G2=B1-B9(截断可观测)、G3=C1-C3(兜底选序)、G4=D1a-D6c(语义红线)、G5=E1(结构)。本报告引用时随文注内容;A1=「运行期追加序:会话条件命中不被切片吞掉(count=2)」、A3=「跨会话视图 count=全库 8(修前被静默切为 3)」、C1=「timeline 超限保留最近 4 条(id 序 t09..t06;字典序切片会保最旧的 t00..t03)」 |
|
|
28
28
|
| **Z1 / B 探针** | 复核「删断言探针」的标签:A/C/D/E=内存删组/删断言/塞假断言/抹锚点四探针;**Z1** 是 D 探针自造的**假断言**名(塞一条无变异能打红的断言以验收空转判据;探针脚本未随材料保留,本报告以等价探针实测该机制,§4.2③);**B 探针**=删掉整条变异③而不删断言(§4.2③残余)。 |
|
|
29
29
|
| **并集判据** | `--branch-baseline` 的空转检查机制:`reddened` 为**各变异红项集合的并集**(`reddened |= set(reds)`),仅「从未出现在并集里的断言」报空转(守卫 `:603-627`);它**不检查每条变异是否被表覆盖**——故删掉整条变异不会被自证发现(§4.2③与 §五)。 |
|
|
30
|
-
| **在役读数(时点性)** | 在役库
|
|
30
|
+
| **在役读数(时点性)** | 在役库 `<在役库根>\_index.json` 是**活跃写入面**(本报告复算时点:全库最近 1h 新增 7379 条)——任何在役数字必须带**时点与口径**才可对拍(v1.1 新增警示,§4.2④) |
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
@@ -214,7 +214,7 @@
|
|
|
214
214
|
- **② 合法输入逐位对照**:基线=`git show HEAD:md_cg/stg.py` 运行时装载(已核该源含 `[:max_scan]`、无 `_cap_hits`),同库同调用逐个比对。**24 例**(timeline 缺省/*/session/layer/desc/limit=0/time_axis=effective/max_scan=None/==限额边界;anchors 时间窗/bbox/limit=None/错误面 `need_time_window_or_bbox`;consistency layer/limit;MdCGSecure 面;旧快照回退面)剥掉新增键 `{scanned, kept, truncated, hint}` 后 **dict 全等**、且 truncated=False 且无 hint。**唯一差异项**:`max_scan=-1`(改前 count=9 静默丢尾 → 现行 count=10/kept=0/truncated=True),属 `_cap_hits` 文档化的有意语义变更,守卫未断言它(见 §五)。
|
|
215
215
|
- **③ 守卫本体与判别力(复核亲跑;v1.1 补「并集判据」展开与本报告实跑复验)**:主模式 36 通过/0 失败/rc=0;`--branch-baseline` rc=0 红 24/15/3/4/4/3/1/2;`--legacy-baseline` rc=0 红 28 条(含 A1/A3)。删断言探针(复核跑,仅内存改组表/变异表/源码串,文件未改):A 删 g3 组 → rc=1(③号变异红 0≠预期 3);C 组内只删 C1 → rc=1(红 2≠3);D 塞假断言 → rc=1(空转断言点名 Z1);E 抹掉变异①锚点 → rc=2(ANCHOR-MISS)。**「并集判据」是什么**(v1.1 展开):空转检查的集合是 `reddened`=**各变异红项集合的并集**(守卫 `:603-627` `reddened |= set(reds)`),只有「从未出现在并集里」的断言才报空转——它不检查「每条变异是否仍被表覆盖」。**残余(复核已复现;本报告实跑复验〔本报告实跑〕)**:删掉整条变异③(保留全部断言)→ **rc=0 仍 PASS**——C1/C2/C3 已被其它变异(如变异①)的打红并集覆盖,空转检查照过、且「恰好命中」检查因该表目消失而根本不再执行。本报告复验命令与读数:内存删变异③后跑 `_branch_baseline` → 7 条变异全部「恰好命中」、无空转报出、**RC=0**(修复前 8 处→删后 7 处,数字 `24/15/4/4/3/1/2` 全 OK)。机理旁证(本报告实跑):往组表塞一条恒真断言 `ZZ_FAKE_ALWAYS_GREEN` → rc=**1**、报「空转断言(无任何变异能打红):ZZ_FAKE_ALWAYS_GREEN」——该探针即 Z1 类机制的等价实测(Z1 本体脚本未随材料保留,不代补其内容)。残余的兜底:真实回归仍由 C1(内容见术语速览)等断言兜住——删变异③只是「自证表被删项不被发现」,不改变实现代码。
|
|
216
216
|
- **④ 在役只读核验与「在役数字簇」映射(v1.1 重写:补时点维度 + 本报告复算)**:
|
|
217
|
-
- **转录面(复核段原文)**:纯字节 json.load
|
|
217
|
+
- **转录面(复核段原文)**:纯字节 json.load `<在役库根>\_index.json`(前后 size/mtime 一致、不构造任何 MdCG)=**17850 节点**;会话 `sess_1b7a945d2eee` 切片内 25 条全 `code_*`、被排除 206 条含 17 条 `mem_*`(材料记「文档记 25/204/15——差的 2 条即其后新归档的 `mem_*`」)。
|
|
218
218
|
- **本报告复算**(同一文件、同一只读形态〔本报告实跑〕;命令形态:`json.load` → `keys=list(nodes)` → 切片 `[:5000]` 与 `[5000:]` 分别按 session 过滤计数 + `created_at` 分桶 + `mem_*` 清单;另用三接口替身 cg(`index`/`_read`/`get`,不构造 MdCG、不写盘)调修复后 `stg.timeline(session=…)`):17850 节点(与转录一致);**修前等价计数**(文件序切片 + session 精确匹配 + iv 可判定)=**2182**(全 `code_*`;字典序口径 2184,两口径同量级);**修复后读数**=`count=7607 / scanned=17850 / kept=5000 / truncated=True`(hint 在场;items 前 3 条为最新 3 条 `mem_*`);三元组(切片内/切片外/切片外 `mem_*`)=**(2182, 5425, 17)**;全库 190+ 个会话逐一扫描:**无任何会话**匹配 (25, 204, 15) 或 (25, 206, 17)。
|
|
219
219
|
- **映射表(v1.1 新增:每个数字的口径与归属)**:
|
|
220
220
|
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
|
|
59
59
|
## 二、修前现场(〔工作流采集·复现段〕;逐条 payload/异常/崩溃点)
|
|
60
60
|
|
|
61
|
-
**来源与边界(如实)**:以下腿由本工作流「缺陷复现员」在**尚未改动的**树上独立复现(全部 `reproduced=true`),交本报告原样引用。实验库根一律系统临时目录合成库(脚本
|
|
61
|
+
**来源与边界(如实)**:以下腿由本工作流「缺陷复现员」在**尚未改动的**树上独立复现(全部 `reproduced=true`),交本报告原样引用。实验库根一律系统临时目录合成库(脚本 `%TEMP%\step3_repro_5l5jydkg\repro_step3.py` 与 `repro_step3b.py`——本轮实读两文件仍在案)。「仅用临时目录」自证:全部库根在 `%TEMP%\step3_*`(5 个实验根共 37+ 文件,全为合成库);实验前后 `git status --porcelain` 仅 `?? .zcode/`(会话起始既有)、`git diff --stat` 空、HEAD 仍 `0960392e`——工作区零改动。
|
|
62
62
|
|
|
63
63
|
**读数标签说明(读者反馈轮补)**:腿 1a 的实验分**两段脚本**——第一段 `repro_step3.py`(标签 `L1a_*`);第二段 `repro_step3b.py`(文件内段落标题原样为「#### LEG 1a2: C 改写 —— 三字段 KeyError + 提议/执行双时点 + 队列原文 ####」,标签 `L1a2_*`)。即 **`L1a2_*` =「腿 1a 的第二脚本」读数**(同腿续测:双时点与 inbox 原文);腿 1c 引用的 `L1a2_REC_*`(inbox 原始记录读数)即该第二脚本产出——腿编号与标签前缀不一致点在此说明,非另一批次。
|
|
64
64
|
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
### 附 · 对照片与边界自证(受保护快照既有行为基线、仅临时目录、工作区零改动)
|
|
122
122
|
|
|
123
123
|
- **受保护快照既有行为实测(改动前基线)**:快照文件 `_protected_history/p_1/20261002-194013.md`(旧版全文)+ `_protected_audit.jsonl` actions=`['snapshot','override_write']`。
|
|
124
|
-
- **自证**:全部库根在
|
|
124
|
+
- **自证**:全部库根在 `%TEMP%\step3_*`(`SANDBOX_UNDER_TEMP=true`,5 个实验根共 37+ 文件全为合成库);实验后 `git status --porcelain` 仅 `?? .zcode/`(会话起始既有,非本批产物)、`git diff --stat` 空、HEAD 仍 `0960392e`——工作区零改动、未 `git add/commit/push`。
|
|
125
125
|
- **边界说明**:本报告文件当时未创建——复现段硬边界「不得编辑工作区任何文件」优先,该路径属落码阶段交付面;另跑守卫后 `%TEMP%` 残留 6 个 `autonomy_modes_sandbox_*`(合成库、非在役数据,测试自身已知留池)。
|
|
126
126
|
- **site**:`md_cg/protect.py:215-245`、`262-265`;`md_cg/test_autonomy_modes.py:126`(基线)。`reproduced=true`。
|
|
127
127
|
|
|
@@ -193,7 +193,7 @@ mutation_payload(...) → { # 提议时点(extra.mutation
|
|
|
193
193
|
**形态**(载荷 `rollback` 字段原文,取自 C 场景实跑):
|
|
194
194
|
|
|
195
195
|
```text
|
|
196
|
-
python -X utf8 -m md_cg.rollback_cli --root "
|
|
196
|
+
python -X utf8 -m md_cg.rollback_cli --root "%TEMP%\demo_report_cufa4jho\c" --pid prop_064741eabc17
|
|
197
197
|
```
|
|
198
198
|
|
|
199
199
|
**CLI 实测输出**(同场景 subprocess 实跑,`rc = 0`):
|
|
@@ -180,7 +180,7 @@ gate.sample/protocol.*)无一 R1–R4 类;`report_summary` 键集
|
|
|
180
180
|
|
|
181
181
|
### 自证 · 仅用临时目录与工作区零改动
|
|
182
182
|
- **payload**:两段探针脚本执行于
|
|
183
|
-
|
|
183
|
+
`%TEMP%\step4_repro_hjesj_ml\repro_step4.py` 与
|
|
184
184
|
`repro_step4b.py`;沙箱根全由 `tempfile.mkdtemp` 建:`step4_repro_hjesj_ml`
|
|
185
185
|
(脚本+守卫日志 4 件)、`step4_repro_jg3_2pv1`(29 件)、`step4_repro_b_vsdh_7ev`
|
|
186
186
|
(17 件);全程 `-B`(不落 pyc)。
|
|
@@ -219,8 +219,8 @@ gate.sample/protocol.*)无一 R1–R4 类;`report_summary` 键集
|
|
|
219
219
|
`_protected_audit.jsonl` action 分布 `{'override_write': 4, 'override_forget': 4,
|
|
220
220
|
'snapshot': 1}`、`preimage` 0 条。⇒ R3 只能状态推断(§3.2 偏离②)。
|
|
221
221
|
- **腿⑤ 在役库数据面规模(成本约束来源;落码轮时点读数)**:在役根
|
|
222
|
-
|
|
223
|
-
|
|
222
|
+
`<在役库根>`(`datapath.mdcg_root()` 同源解析;本机用户级根
|
|
223
|
+
`~/.dsh\.dsh-memory\data\mdcg` 为空壳——只有 `_keys.json`,不是
|
|
224
224
|
认知图):`_index.json` 21.3MB / `_audit.jsonl` 23.9MB(105335 行;单位与
|
|
225
225
|
时点口径见 §4.5 注)/
|
|
226
226
|
`_audit_archive/` 8 片 ≈ 536MB / `_deletions.jsonl` 2.0MB(8725 行)/
|
|
@@ -546,9 +546,9 @@ cargo test 1 + cargo build --release 1 + python 套件 23 + hive 脚本 4
|
|
|
546
546
|
|
|
547
547
|
### 4.5 在役库只读采样〔实跑·撰写轮;修订轮复跑〕
|
|
548
548
|
|
|
549
|
-
|
|
549
|
+
在役根:`<在役库根>`(`isdir=True`,修订轮实读)。修订轮实跑两条
|
|
550
550
|
只读路径〔实跑·撰写轮〕(回应读者「命令不可复原」):
|
|
551
|
-
① **CLI**=`python -X utf8 -m md_cg.admission --root "
|
|
551
|
+
① **CLI**=`python -X utf8 -m md_cg.admission --root "<在役库根>"`
|
|
552
552
|
⇒ **rc=1**(「不够格」档;stdout 即下方读数块,stderr 空);
|
|
553
553
|
② **结算体与六面 stat 采样**=进程内调用(脚本要点:`sys.path` 指向仓根;
|
|
554
554
|
`os.environ['MDCG_AUTONOMY']='full'`;`am.reset_settlement()` 后
|
|
@@ -556,7 +556,7 @@ cargo test 1 + cargo build --release 1 + python 套件 23 + hive 脚本 4
|
|
|
556
556
|
逐字段打印)。两条路径全程零写入。
|
|
557
557
|
|
|
558
558
|
```text
|
|
559
|
-
== 三档自治准入读数(R1–R4)·
|
|
559
|
+
== 三档自治准入读数(R1–R4)· <在役库根>
|
|
560
560
|
结论:不够格 缺:R1、R2、R3、R4
|
|
561
561
|
[NO ] R1: 30 天窗内 verdict 三态不全:缺 DROP、DEFER(窗口内 {'ACCEPT': 201, 'MERGE': 14})——分布退化。
|
|
562
562
|
[NO ] R2: 3 天窗内新增不足:rejected=0。
|
|
@@ -608,7 +608,7 @@ SAME 为证)。另注:R1 的 `0.9349=201/215` 为 **ACCEPT 占比**(verdic
|
|
|
608
608
|
认知图写入**一条归档记忆节点**(`mem_1790952929766_b28eef`,`knowledge/orphan/`,
|
|
609
609
|
经写入闸门 11 条禁止+6 条必需规则 ⇒ **ACCEPT**、读回确认可检索)——纯**新增**
|
|
610
610
|
节点,不改任何既有节点/队列/账本;本机 MCP 认知图 root 与在役根同为
|
|
611
|
-
|
|
611
|
+
`<在役库根>`。判读点(供复核):红线「不触在役数据根写面」的
|
|
612
612
|
既有解释是**实验面**(步骤③ §7.2 原文「一切实验走 `tempfile` 合成库……未触
|
|
613
613
|
任何在役数据根」;先前各批次的归档节点同样经此常规通道写入在役库)。**本批的
|
|
614
614
|
读数与准入闸(契约对象——「契约」出处见报头编号出处注)在在役库上零写入**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
- 日期:2026-09-29
|
|
4
4
|
- **修订:v1.0-r1**(按读者反馈逐条处置:符号图例与计数口径新增于 §0.1;`_dirty` 机制改写于 §3.1;R-2 数字口径与第一手复测新增于 §4.1、§6.3;`git diff --numstat` 与「零写入」措辞更正在 §6.4、§7;读者 21 条问题的逐条处置见 §8)
|
|
5
|
-
-
|
|
5
|
+
- 仓库:`<仓根>`(下称 `<repo>`)
|
|
6
6
|
- 批次标识:opt-batch1(外部双路调研确认的改进批次)。**计数口径**:**6 项缺陷**(C-1 一项含 3 处写点、C-7、R-1、R-2、R-3、R-6)/**8 条缺陷取证腿**(§2 的 C-1a/b/c、C-7、R-1a、R-2、R-3、R-6)/**10 条复现记录**(上列 8 条 + 登记态复测腿 C-1d + **非缺陷**基线腿 R-1b,见 §2 的计数表)
|
|
7
7
|
- 变更面(本报告实跑 `git status --porcelain` 所见):
|
|
8
8
|
- Python:`M md_cg/forgetting.py`、`M md_cg/insight.py`、`M md_cg/scrub.py`、`M md_cg/consolidate.py`、`M md_cg/test_p30_maintain.py`、`M md_cg/test_p31_insight.py`、`M md_cg/test_govern_directread.py`、`?? md_cg/test_opt_batch1_md_cg.py`(新增守卫)
|
|
@@ -264,7 +264,7 @@ md_cg/forgetting.py:314-316 md_cg/insight.py:322-324 md_cg/s
|
|
|
264
264
|
| 6 | `CARGO_TARGET_DIR=/tmp/… cargo test --offline`(在 `rust/`) | `22 passed`(lib)+`2 passed`(bin:`opt_batch1_tests::r1_eval_path_applies_query_unifier`、`r1_graph_seeds_default_is_sorted`)+`1 passed`(`i29_probe`)+`1 passed`(`i29_store_probe`)=**26 passed / 0 failed**,**零 `warning:` 行** | `0` |
|
|
265
265
|
| 7 | `CARGO_TARGET_DIR=/tmp/… cargo test --offline --features no-probe`(在 `rust/`) | 同为 **26 passed / 0 failed**(`r6` 两条 cfg 分支各被编进并执行),零告警 | `0` |
|
|
266
266
|
| 8 | `git archive HEAD rust/ \| tar -x -C /tmp/… && cargo check --all-targets`(HEAD 源码树,仓库零写入) | 恰好 **2 条** `warning: unexpected \`cfg\` condition value: \`no-probe\``,位置 `80 \| #[cfg(not(feature = "no-probe"))]`、`86 \| #[cfg(feature = "no-probe")]`(=R-6 修前态**我复现到位**) | `0` |
|
|
267
|
-
| 9 | **v1.0-r1 新增:R-2 独立探针** —— 临时 crate `/tmp/optb1_r2probe`(`Cargo.toml` 挂本地库 `mdcg_eval = { package = "mdcg-eval", path = "
|
|
267
|
+
| 9 | **v1.0-r1 新增:R-2 独立探针** —— 临时 crate `/tmp/optb1_r2probe`(`Cargo.toml` 挂本地库 `mdcg_eval = { package = "mdcg-eval", path = "<仓根>\rust" }`)→ `CARGO_TARGET_DIR=/tmp/optb1_r2probe_target cargo run --release --offline` | 语料 20000 文档(body **700 字符 / 890 字节**,中英混排;`tags_joined="alpha beta"`);**现行(预存)`lexical` 中位 8.96 ms**;**两次 `to_lowercase` 合计中位 30.06 ms**;每次查询小写化产出 **18,000,000 字节**(20000 文档 × 900 B = body 890 + tags 10)。按采集腿口径(旧 `lexical` ≈ 现行 + 两次小写化)**推算占比 30.06/(8.96+30.06) = 77.0%** | `0` |
|
|
268
268
|
|
|
269
269
|
- **第 9 行的读数怎么用**:它**支持**「两次小写化是 `lexical` 热路径的主导项」这一**方向**(30.06 ms 相对现行整条 `lexical` 的 8.96 ms),但**不给出**采集腿的 88.7%;两者口径与语料不同,不能互相替代(对账见 §6.3)。探针源码与构建产物全部在**系统临时目录**,仓库零写入。
|
|
270
270
|
- 第 6 行的测试名清单由实跑 `CARGO_TARGET_DIR=/tmp/… cargo test --offline -- --list` 得到(含 `store::opt_batch1_tests::r2_like_lower_is_precomputed_equivalent` / `r2_like_lower_follows_lit_branch` / `r2_like_case_insensitive_recall`、`engine::tests::r1_*` ×2 / `r3_*` ×2、`atoms::tests::r6_probe_branch_is_active_by_default` 等)。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 优化第三批(R-7 门禁转正 · H-3/H-7 调度止血 · H-4 止血 · C-8 门控收口)—— 工程报告 v1.0
|
|
2
2
|
|
|
3
3
|
- 日期:2026-09-29
|
|
4
|
-
-
|
|
4
|
+
- 仓库:`<仓根>`(下称 `<repo>`);`HEAD = f8c93e6e`(`git log --oneline -1` 实跑所见)
|
|
5
5
|
- 批次标识:**opt-batch3**(四项:R-7 / H-3·H-7 / H-4 / C-8)
|
|
6
6
|
- 本报告只落盘本文件一行;**未改任何源码**;未 `git add` / `commit` / `push`
|
|
7
7
|
- **本版相对同路径前一稿(v1.0-r1)的实质订正**(前一稿写在最后一轮实施与复核之前,以下四处已陈化,本版按当前工作区与当前复核结论重写):
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
- 日期:2026-09-29
|
|
4
4
|
- **修订:v1.0-r1**(按读者反馈逐条处置:新增「前件出处与外部编号」一节与「行号与计数口径声明」的位移表/计数约定;四可补定义与出处;`_dep_gate` 报文与 `as_str_vec` 出处补出;新增 §附A「断言标签 → 断言文本对照」(43+40+43);§0.2 证据结构改为「主证据+启发式佐证」并更正「态②归因」;§4.2 补两栈定义表;§7 第 1 项与 §4.2 的冲突更正;新增 §8 逐条处置(unclear 7 / unsupported 8 / nextQuestions 8);另补两次实测——在役池 `guard-model` 残留核证、`--ab` 冲突态读数)
|
|
5
|
-
-
|
|
5
|
+
- 仓库:`<仓根>`(下称 `<repo>`);`HEAD = 4b0b3294`
|
|
6
6
|
- 批次标识:**opt-batch2**(三项:H-6 / CH-1 / C-3)
|
|
7
7
|
- **批次最重要的结论**:CH-1 的**归属更正**——**清单原判「三条 DIFF 由 R-4/R-5 造成」这一归因**被本批三态实验推翻(**推翻的是归因,不是「R-4/R-5 仍是潜在差异」的可能**——边界声明见 §0.2 末段),见 §0.2 与 §3.2、§4.3。
|
|
8
8
|
- 变更面(本报告实跑 `git status --porcelain` 所见,逐条照录):
|
|
@@ -258,7 +258,7 @@
|
|
|
258
258
|
| **CH1-6** | 状态②的第 4 条 DIFF 是否同因:`MDCG_UNIFY_QUERY=0 MDCG_SCORE_MODE=jaccard python scripts/rank_parity.py ...`(两侧同口径) | rc=0;`10/10 · 10/10 · 10/10`,**零 DIFF** ⇒ 关掉归一层后的**全部 4 条** DIFF(含那条**集合层**差异)在**只对齐打分口径**后全部消失。故 CH-1 的根因「harness 口径漏接线」是**充分的**,无需引入 `strip_tense` / entity tags 解释 | `scripts/rank_parity.py:204-226` |
|
|
259
259
|
| **CH1-7** | **Rust `--serve` 已接受并生效显式 `--score`(契约③的前提不成立)**:同一临时库上对同一二进制跑 `--root <lib> --serve`(缺省)与 `--root <lib> --serve --score legacy`,并按 `MDCG_SCORE_MODE` 两态取 Python 答案对照;query=`newuser 探针结论` | `rust --serve` **缺省**=`[en_07,.016393 \| en_09,.016129 \| en_03,.015873 \| en_13,.015625 \| en_08,.015385]`,与 Python 在 `MDCG_SCORE_MODE=jaccard` 下**逐位相同**;`rust --serve --score legacy`=`[en_03,.016393 \| en_07,.016129 \| en_09,.015873 \| en_13,.015625 \| en_08,.015385]`,与 Python 缺省(legacy) **逐位相同**。即 serve 链路已把 `--score` 透传为 `EngineConfig.jaccard`(`main.rs:154` 解析 → `:760`;`engine.rs:124/163/247` 使用)⇒ 契约③「若 serve 无法接受显式口径入参…让 serve 也接受」的前提**不成立**:**Rust 侧一行都不用改**,只需在 `rank_parity.py:110` 的 argv 加 `--score jaccard` | `rust/src/main.rs:154`、`:756-764` |
|
|
260
260
|
| **CH1-8** | eval 面既定单点确认(但「**全部** bench 脚本都调它」不精确):`python` 统计 `md_cg/bench*.py` 对 `use_jaccard` 的引用 | **23 个 `bench*.py` 中 8 个**直调 `use_jaccard()`;`bench_lme_zh.py:361/371` 直接置 `m.SCORE_MODE`;`bench_locomo.py:72` 明确注明「**不切 jaccard**」。故契约括注「全部 bench 脚本都调它」为**不精确表述**,但操作性主结论成立:评测面确有既定单点 `md_cg/eval_common.py::use_jaccard()`(`:79-96`),harness 应走它而非新写第二套开关 | `md_cg/eval_common.py:79-96` |
|
|
261
|
-
| **CH1-9** | 零仓库写入 / 未动在役数据根 / 库根全在系统临时目录:对仓内 15530 个文件(排除 `.git`、`node_modules`)做 `(size, mtime_ns)` 指纹前后比对;`git status`;`rust/target` 二进制 mtime 核对 | 三次 harness 对拍前后指纹 `changed=0`;活动结束后 `git status --porcelain` **仍只有会话开始即存在的 `?? .zcode/`**;`rust/target/release/mdcg-eval.exe` mtime 保持 `2026-09-29 14:01:14` 未被改写(⇒ 三态实验用的就是 HEAD 的二进制)。父树探针的 `cargo build` 走临时 `CARGO_TARGET_DIR`,`git archive -o` 输出到 `%TEMP%`。所有实验库根来自 `tempfile.mkdtemp`。**未触碰**
|
|
261
|
+
| **CH1-9** | 零仓库写入 / 未动在役数据根 / 库根全在系统临时目录:对仓内 15530 个文件(排除 `.git`、`node_modules`)做 `(size, mtime_ns)` 指纹前后比对;`git status`;`rust/target` 二进制 mtime 核对 | 三次 harness 对拍前后指纹 `changed=0`;活动结束后 `git status --porcelain` **仍只有会话开始即存在的 `?? .zcode/`**;`rust/target/release/mdcg-eval.exe` mtime 保持 `2026-09-29 14:01:14` 未被改写(⇒ 三态实验用的就是 HEAD 的二进制)。父树探针的 `cargo build` 走临时 `CARGO_TARGET_DIR`,`git archive -o` 输出到 `%TEMP%`。所有实验库根来自 `tempfile.mkdtemp`。**未触碰** `<AEIS 工程根>`、hive 在役 jobs 池、`data/policy.json`;全程未 `git add/commit/push`;未编辑工作区任何文件 | n/a(跨切面核验) |
|
|
262
262
|
| **CH1-10** ⚠ `reproduced=false` | 契约验证项「新建守卫 `md_cg/test_rank_parity_score_mode.py` 并跑 ①②③」**无法执行**:`ls md_cg/test_rank_parity_score_mode.py` | `No such file or directory` ——守卫是**本次修复的产物**而非现状,且该任务硬边界禁止编辑工作区,故采集方**未执行任何断言**。替代做法(采集原文自标为**替代**):直接以真实 harness 跑三态对拍,并额外机械验证了守卫①③所依赖的两个事实——缺省态**并非** 10/10/10(`7/10/10/7`,rc=1)与两侧同口径为 `10/10/10` rc=0。守卫的「锚点漂移报 ANCHOR-MISS 退出码 2」「SKIP 不计通过」两项当时**未运行**,无从判定 | `md_cg/`(当时**无**该文件) |
|
|
263
263
|
|
|
264
264
|
> `CH1-10` 的 `reproduced=false` 是**采集面的如实标注**,不是缺陷不成立。本报告 §4.1 已在**修后**树上实跑该守卫,其 ANCHOR-MISS / SKIP 两项由 §5.2 复核条目补齐。
|
|
@@ -283,7 +283,7 @@
|
|
|
283
283
|
| **C3-9** | **失效条件与隔离面**:固化成立后依次 `cg.add('m2', …)+flush`、`cg.add('m1', …)+flush`;另有独立对照 `readcache.clear(cg)+search` | 写 m2 后 `search(Q1) = ['m2']`(**m1 仍缺席**,脏集**按 path 精确失效**,不累及他节点);再写 m1 后 `search(Q1) = ['m1']`(恢复)。`clear(cg)` 返回 1 且随后 `search = ['m1']`。另观察:持锁期**邻居 m2 命中正常**(固化按 path 隔离)⇒「永久消失直至重启/再写盘」成立 | 修前 `md_cg/readcache.py:80-100`(`_fresh` 按 `path_gen`/`broad_gen` 判新鲜);`:clear` |
|
|
284
284
|
| **C3-10** | **重试代价数据(供修复选型论证)**:同一注入下统计「真读盘次数」(计数点落在 `_read_uncached` 之下的真原始读):持锁窗口 3 次查询 + 释放后 2 次查询 | 持锁窗口真读盘:`nocache 6`(3 查询 × 2 节点)、`shipped 2`(后续查询被负缓存喂饱)、`variant 4`(m1 每次重试);释放后:`nocache 4`、`shipped 0`、`variant 1` ⇒「不入缓存」路线在故障窗口内确为**每查询重试**(**有限窗口内**),**不是永久性能悬崖** | 修前 `md_cg/readcache.py:108`(`orig(entry)` 调用点即重试点) |
|
|
285
285
|
| **C3-11** | **既有 chaos 用例在未改动树上维持 `EXPECTED_GAP` 一致**(Windows 实测;非 Windows 分支为 SKIP→gap):直跑既有用例;另把 `os.name` 临时改成 `'posix'` 后在已导入模块上调用其 `main()`,机械确认非 Windows 分支**不伪装 pass** | `python -X utf8 test/chaos_injection/test_fi_m02_transient_read_negative_cache.py` → 全部 8 项 check OK,末行 `CASE_RESULT {"case_id":"FI-M02","verdict":"gap","expected":"gap","consistent":true}`,rc=0。`os.name` 改 `'posix'` 后 `main()` → NOTE 非 Windows 平台…维持 gap 基线,`verdict gap / consistent true`,返回 0。**声明**:后者是本机 Python 上对 `os.name` 打桩的**分支模拟**,不是真实 Linux 运行(容器栈一未接触) | `test/chaos_injection/test_fi_m02_transient_read_negative_cache.py:32-37`(非 nt → `case.finish("gap","gap")`);登记见 `test/chaos_injection/registry.py:66-67` |
|
|
286
|
-
| **C3-12** | **复现面合规**:不动在役数据根 / 不编辑工作区:全部实验库根由 `tempfile.mkdtemp` 生成;核对 git 工作树与 `MDCG_*` 解析结果 | `git status --porcelain` → `'?? .zcode/'`(会话开始快照即如此,**无新增改动**);`HEAD = 4b0b3294310aaf1b90ae25c481fefd6d8298c066`;`mdcg_root`/`data_root`/`state_dir`/`aux_root`/`state_root` 与 `MDCG_ROOT`/`DATA_ROOT`/`AUX_ROOT`/`STATE_ROOT`/`TOKEN_FILE`/`SUSTAIN_DIR` 全部 `under_temp=True`。未 `git add/commit/push`,未改 `data/policy.json`,未动
|
|
286
|
+
| **C3-12** | **复现面合规**:不动在役数据根 / 不编辑工作区:全部实验库根由 `tempfile.mkdtemp` 生成;核对 git 工作树与 `MDCG_*` 解析结果 | `git status --porcelain` → `'?? .zcode/'`(会话开始快照即如此,**无新增改动**);`HEAD = 4b0b3294310aaf1b90ae25c481fefd6d8298c066`;`mdcg_root`/`data_root`/`state_dir`/`aux_root`/`state_root` 与 `MDCG_ROOT`/`DATA_ROOT`/`AUX_ROOT`/`STATE_ROOT`/`TOKEN_FILE`/`SUSTAIN_DIR` 全部 `under_temp=True`。未 `git add/commit/push`,未改 `data/policy.json`,未动 `<AEIS 工程根>` 与 hive 在役池,未重建/重启在役 serve | `test/chaos_injection/mdcg_support.py:20-36`(`apply_env` 全部 `MDCG_*` 钉到临时目录) |
|
|
287
287
|
|
|
288
288
|
---
|
|
289
289
|
|
|
@@ -435,15 +435,15 @@
|
|
|
435
435
|
|
|
436
436
|
| 核对项 | 命令 / 手段 | 我看到的 |
|
|
437
437
|
|---|---|---|
|
|
438
|
-
| 在役 hive 池**运行前**快照 | `os.listdir(
|
|
438
|
+
| 在役 hive 池**运行前**快照 | `os.listdir(<仓根>\hive\jobs)` | **17 个条目**:`_serve.json`、`_serve.log` + 15 个 `h*` 任务目录 |
|
|
439
439
|
| 在役 hive 池**运行后**快照(跑完三项守卫 + 全量套件后) | 同上 | **17 个条目,逐条同名同序**(与运行前**完全一致**) |
|
|
440
440
|
| **在役 hive 池的「时点敏感」补记**(本版新增,回应读者对计数口径的追问) | 同 `os.listdir`,连续两次 | 某一次列举得到 **18 个条目**:多出一个**非目录**条目 **`_serve.tmp20528`**(文件名内嵌 pid **20528**=**在役 serve 的 pid**,mtime `15:26:02`,恰与 `_serve.json` 的 `15:26:01` 同批);**下一次列举即消失、恢复 17 条目**。⇒ 它是**在役 serve 心跳原子写(tmp+rename)中途**被列举恰巧抓到的**瞬时件**,**非本报告产物**(本报告从未对该池发起任何写) |
|
|
441
441
|
| **在役池无 `guard-model` 残留**(本版新增,回应 nextQuestions 第 2 条) | 逐目录读 `spec.json` / `status.json` | 15 个任务目录的 `model` **全部**为 `deepseek-flash`(state:14 `done` + 1 `timeout`),**`guard-model` 命中 0 条**(本报告实跑按 `model=='guard-model'` 逐目录筛) |
|
|
442
|
-
| 在役 serve | `wmic process where "name='hive.exe'" get ProcessId,CommandLine` | 恰好 1 个:`hive.exe serve --jobs
|
|
442
|
+
| 在役 serve | `wmic process where "name='hive.exe'" get ProcessId,CommandLine` | 恰好 1 个:`hive.exe serve --jobs <仓根>\hive\jobs`(**本报告未启停它**) |
|
|
443
443
|
| `hive/src/` 是否被动 | `git status --porcelain` | **无任何 `hive/src/` 条目** ⇒ `spec.rs` / `main.rs` / `job.rs` / `scheduler.rs` 零改动 |
|
|
444
444
|
| 检索/排序判据是否被动 | `git status --porcelain` + 复核读码 | `md_cg/mdcos.py`(`search_rrf` 所在)与 `md_cg/nodefile.py` / `md_cg/eval_common.py` **未列入改动** |
|
|
445
445
|
| 工作区整体 | **开工快照**与**落盘前核对快照**各一次 `git status --porcelain` | **两次逐条相同:13 个 `M` + 4 个 `??`**(`??`=`.zcode/` + 三个守卫文件)。**这两个快照都不含本文件**;写出本文件后的**收尾快照**为 13 个 `M` + **5** 个 `??`(新增项即本文件)。计数约定见「行号与计数口径声明 → 工作区快照的计数约定」 |
|
|
446
|
-
| 在役数据根 | 本报告全部命令 | 未触碰
|
|
446
|
+
| 在役数据根 | 本报告全部命令 | 未触碰 `<AEIS 工程根>`、`data/policy.json`、hive 在役池;库根全部来自 `tempfile.mkdtemp` |
|
|
447
447
|
|
|
448
448
|
### 4.5 未由本报告执行的验证(完整清单)
|
|
449
449
|
|
|
@@ -498,7 +498,7 @@
|
|
|
498
498
|
2. **固有边界(有意保留、非回归)**:`FileNotFoundError` **仍按契约固化** `(gen,(None,None))`(`G1i` 实测),故「外部删除后由外部非 CG 写路径恢复同名文件」在本进程内仍不可见至写盘/重启——这是模块声明的「跨进程/外部改写不可见」边界,本次未改。
|
|
499
499
|
3. **Linux(容器栈一)行为未实测**:本机 win32,非 nt 分支只做读码核对;FI-M02 在 Linux 将走 `case.finish("pass","pass")` 报 pass(与 registry `expected_verdict=pass` 一致 ⇒ 退出码 0),**不做任何实测**——即 **Linux 上的 pass 是登记基线而非实测结论**,与旧版报 `gap` 同属「无实测的基线声明」。
|
|
500
500
|
4. 未跑 `run_all` 全量与 hive/容器面(契约明令不重复全量),故 registry 变更在整包裁决下的表现未实测,仅按 `run_all.py:104` 的 `(verdict==expected)` 口径读码推得一致。
|
|
501
|
-
5. **清理声明(如实)**:收尾清临时目录时把 `%TEMP%` 下既有的 `chaos_fi_m03/m04/m05/m09/r07_*` 旧残留**一并删除**(均在系统临时目录,非在役数据根;在役
|
|
501
|
+
5. **清理声明(如实)**:收尾清临时目录时把 `%TEMP%` 下既有的 `chaos_fi_m03/m04/m05/m09/r07_*` 旧残留**一并删除**(均在系统临时目录,非在役数据根;在役 `<AEIS 工程根>` 与 hive jobs 池未被触碰,工作区 `git status` 与开工时逐条相同)。
|
|
502
502
|
|
|
503
503
|
---
|
|
504
504
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
> **日期**:2026-10-01 | **缺陷号**:PKG-SMOKE-GATE
|
|
5
5
|
> **本文件路径的来处**:由工作流 `args.report` 指定为 `docs/eval/出货面冒烟_进货门禁_v1.0.md`(本报告实读运行脚本确认,见 §4.9-③)。**「进货门禁」是文件名用词**,正文一律称「**出货面冒烟腿**」;该词在本报告中的定义见 §1.0。
|
|
6
6
|
> **契约与判据出处**:动态工作流 `dwfrun-b27a6016-4fb8-4a76-a03a-aad166ef5762` 的 `args.contract`——**原文全文见附录 A**(本报告实读该运行脚本内联 `args` JSON 取得)。
|
|
7
|
-
>
|
|
7
|
+
> **被测面**:`<仓根>` **工作树(未提交)**——2 个已修改跟踪件(`package.json`、`scripts/check_publish_artifact.py`)+ 1 个已修改文档(`docs/mdcg/发布门禁链_v0.1.md`)+ 2 个未跟踪新件(`scripts/check_publish_smoke.py`、`scripts/test_publish_smoke_guard.py`)。
|
|
8
8
|
> ⚠ **并发观测(非本报告所为)**:本报告写作期间工作区被**本报告之外**的进程改动过两次(详见 §4.3 注与 §6.4)——`docs/plans/…_v0.1.md` → `…_v0.2.md`,且**本报告文件本身被置为暂存状态(`A`)**;本报告从未执行 `git add`。
|
|
9
9
|
>
|
|
10
10
|
> **证据分级**(本报告不越界陈述):
|
|
@@ -218,8 +218,8 @@ git cat-file -e HEAD:scripts/test_publish_smoke_guard.py rc = 128
|
|
|
218
218
|
> **本节全部读数属于新腿 `scripts/check_publish_smoke.py`**。下面最后一条(`--mutate` / `ANCHOR-MISS`)**属于守卫 `scripts/test_publish_smoke_guard.py`**——新腿没有 `--mutate` 开关,其可配面只有 `--root`(`:291`–`:294`)与环境变量 `MDCG_GATE_SANDBOX_DIR`(`:329`);该条与上表并列只为对照「两个 2 的不同语义」(§3.4),**不属于新腿判据面**。
|
|
219
219
|
|
|
220
220
|
- `python -X utf8 scripts/check_publish_smoke.py` → `rc=0`:沙箱=`tempfile.mkdtemp` 且已清理、清单条目=1493、S1–S5 全 PASS、`serverInfo={name:mdcg-mcp,version:0.6.1}`、`tools=['cg','stg']`、S6 NOTE 策略来源=package_default path=`<装好目录>/data/policy.json`(包内件=是)。
|
|
221
|
-
- `MDCG_GATE_SANDBOX_DIR
|
|
222
|
-
- **密闭面取证**:握手前后快照
|
|
221
|
+
- `MDCG_GATE_SANDBOX_DIR=<空沙箱>\test\smoke` 重跑 → `rc=0` 且打印「沙箱保留:<空沙箱>\test\smoke」,其余读数同上。
|
|
222
|
+
- **密闭面取证**:握手前后快照 `~/.mdcg` 与 `~/.dsh/.dsh-memory` → **added 0 / changed 0**(真库未被触碰)。
|
|
223
223
|
- **退化路径**(npm 探不到):`PATH` 剥到 `C:\Windows\System32` 使 `which('npm.cmd')=None` → `rc=1` + `[FAIL] S0` + `SMOKE_JSON verdict=FAIL/env_error=false`,**无 `[SKIP]` 行、无 Traceback**(fail-closed,不静默放过)。
|
|
224
224
|
- 【**守卫**,非本腿】ANCHOR-MISS 判别力:临时根里把修法行改名后跑 `python -X utf8 scripts/test_publish_smoke_guard.py --mutate` → 打印 `ANCHOR-MISS 去掉缺件修法行 ← … 找不到变异锚点` 并 **rc=2**(守卫语义,§3.4)。
|
|
225
225
|
|
|
@@ -276,7 +276,7 @@ basename = 'aux' | dirname = 'D:\\x'
|
|
|
276
276
|
|
|
277
277
|
**③ 契约原文提取**(回答反馈「契约全文一行未列」):从 `.zcode/workflow-runs/dwfrun-b27a6016-4fb8-4a76-a03a-aad166ef5762.mjs` 内联 `args` JSON 取出 `contract`(3078 字符)、`sites`(350 字符)、`guard`、`report`、`container`——**全文见附录 A**。其中 `args.report = "docs/eval/出货面冒烟_进货门禁_v1.0.md"`,即本文件路径的出处。
|
|
278
278
|
|
|
279
|
-
**④ 独立复核所引探针的可达性检查**:在**工作区**、`%TEMP
|
|
279
|
+
**④ 独立复核所引探针的可达性检查**:在**工作区**、`%TEMP%`、`<旧机工程根>` 三处递归搜索 `probe_prefix*.py / probe_silent*.py / probe_equiv*.py / probe_del_assert*.py / probe_green*.py` → **0 命中**(`%TEMP%` 下另有 181 个历史 `probe_*.py`,但**不含**这六个名字)。⇒ §五 引用的六个探针**在本报告可达范围内不存在**,其读数**不可定位、不可复现**;§五 已相应降级标注。
|
|
280
280
|
|
|
281
281
|
**⑤ 附带复核**:`scripts/workspace_index.py` 的登记面(`:187`–`:188` `unreg_dirs`/`miss_dirs` 只对 `DIR_ROLES` 与 `tops`;`:261`–`:262` 只对 `roots` 与 `ROOT_FILES`)⇒ 新增 `scripts/*.py` **确实无需登记**(采集腿腿1 的附带核实成立)。
|
|
282
282
|
|
|
@@ -288,7 +288,7 @@ basename = 'aux' | dirname = 'D:\\x'
|
|
|
288
288
|
|
|
289
289
|
**复核者的前置声明**(转述):本会话 `ListWorkflowRuns` 返回 `workflow_introspection_unavailable`,ask#1「复现员」的记录不可达;故①由复核者从 `.zcode/workflow-runs/dwfrun-b27a6016-…mjs` 读出 `args.contract` 后**自建等价修前现场**,**不采信执行者自述**。
|
|
290
290
|
|
|
291
|
-
**依据(复核者自跑的四组检查)**——⚠ **本节读数的可复核性已降级**:其六个探针脚本(`probe_prefix.py`/`probe_silent.py`/`probe_equiv.py`/`probe_equiv2.py`/`probe_del_assert.py`/`probe_green.py`)**本报告在工作区、`%TEMP
|
|
291
|
+
**依据(复核者自跑的四组检查)**——⚠ **本节读数的可复核性已降级**:其六个探针脚本(`probe_prefix.py`/`probe_silent.py`/`probe_equiv.py`/`probe_equiv2.py`/`probe_del_assert.py`/`probe_green.py`)**本报告在工作区、`%TEMP%`、`<旧机工程根>` 三处搜索均未找到(0 命中,§4.9-④)**,即:**无路径、无留存说明、命令与输出均为转述而非照录**。故以下内容本报告**按复核者自述采信,未复核、未复跑**;本报告能独立复核的部分已在 §四分别实跑:
|
|
292
292
|
|
|
293
293
|
1. **修前盲区与退化路径**(复核者称 `probe_prefix.py` / `probe_silent.py`):`git show HEAD:package.json` → gate 仅 8 腿无 smoke;`git cat-file -e HEAD:scripts/check_publish_smoke.py` → **rc=128**(←**本报告已独立复核成立**,§一.2)。临时副本(`files` 去掉 `utf8_boot.py`、文件仍在仓根)上:在役 `check_publish_artifact.py --root <copy>` → `rc=0 VERDICT=PASS`,而**独立 `tarfile` 扫描**同副本真产 tarball 得 1493 条目且 `utf8_boot.py ∉ 集合` ⇒「仓里在、包里不在」成立而旧门禁全绿;同一副本上新腿 → `rc=1`、`fails` 恰为 S1/S2/S4/S5、自报 `manifest_entries=1493` 与独立 tar 扫描 1493 **对账一致**、打印修法行(←**本报告以守卫 B2 红侧等价复核成立**,§4.3)。退化路径:`PATH` 剥到 `C:\Windows\System32` → `rc=1` + `[FAIL] S0` + `SMOKE_JSON verdict=FAIL/env_error=false`,无 `[SKIP]`、无 Traceback(←**转述,本报告未复跑**)。
|
|
294
294
|
2. **与改前逐位一致**(复核者称 `probe_equiv.py` / `probe_equiv2.py`):HEAD 为内联字面量(`git show HEAD:…:401`←**本报告已读码复核**),现行为 `resolve_npm()`(`check_publish_artifact.py:399-409`);拦 `subprocess.run` 取实际 argv:**head 与 cur 逐位相同**(含 `--ignore-scripts` 变体),`shell=False` 保持。同一真 git 面副本上两份实现 `--root` 扫描 → `rc(head)=rc(cur)=0`、stdout 归一逐行相同、`VERDICT=PASS`,且两者自报文件数 **1494** 与独立 `npm pack --dry-run --json` 的 1494 条目 oracle **三方对齐**(←**转述**;其 1494 与 §4.3 的「前序 ask 时刻」口径一致)。
|
|
@@ -370,7 +370,7 @@ git ls-files | wc -l ; git status --short → 2113;含本
|
|
|
370
370
|
3. **「S5 的缺省面两侧谁是真源?将来工具面变动时谁先漂移?」** —— **`md_cg/mcp_server.py:1056`(`KERNEL_TOOLS`)是唯一真源**;新腿的 `DEFAULT_TOOLS`(`:63`)是**独立字面量**,目的是「不读被测方的常量也能判」——它**故意**不从 `mcp_server` 导入(否则被测面自己改口径,判据跟着飘,等于没判)。两侧的一致性由**守卫 C5** 的字面量相等断言钉住(`:159`–`:161`,只断言**腿内自洽**,不跨读 `mcp_server`)。⇒ **漂移顺序:腿先假红**(真源加了工具 → S5 实得 `['cg','stg',…]` ≠ `['cg','stg']` → 腿红,人去改 `DEFAULT_TOOLS`);这正是「判据面独立于被测面」的预期代价,**不是缺陷**。若希望「真源改了就自动同步」,需要反过来导入真源——那会牺牲判别独立性,属设计取舍。
|
|
371
371
|
4. **「新腿并链后单次耗时与网络依赖?」** —— **本报告没有该腿的耗时专项读数**(不臆造):现有数字只有 `npm install` 7.9–8.2s(采集腿)、握手 1.4–1.5s(采集腿)、修前对照八腿串联 `npm run gate` 9.1s(采集腿)。链路四段里 `npm pack`/`npm install` 是主要开销,**单次量级应在十秒级**——但这是**推断**,未实测。网络依赖:契约本身要求「不引入网络」,且本腿用 `--legacy-peer-deps` 跳过 peer;**「全程零网络」未验证**(§6.1-8)。
|
|
372
372
|
5. **「§五 的『四项 ask 指定检查』原文是哪四条?」** —— 复核所据的 ask 原文**未随转述给出**,本报告**无法还原**其四条逐字原文。可精确给出的是**契约的【验收判据】段**(附录 A 末段,共 6 条),以及复核者自列的 1–4 归类(§五)。⇒ 覆盖核对:契约 6 条判据中「新腿单独跑 rc=0」「`MDCG_GATE_SANDBOX_DIR` 分支」「定点变异自证(副本)」「守卫三处锚点 + `--mutate`」「`npm run gate` 全腿」「python 全量 + 容器双腿」在 §四均有点对点读数(来源已逐条标注),**唯有「容器双腿」与「python 全量」不是本报告跑的**。
|
|
373
|
-
6. **「六个探针脚本留没留在工作区?」** —— **本报告在三处(工作区、`%TEMP
|
|
373
|
+
6. **「六个探针脚本留没留在工作区?」** —— **本报告在三处(工作区、`%TEMP%`、`<旧机工程根>`)递归搜索,0 命中**(§4.9-④)。⇒ 它们**既不在工作区**(故与头部被测面的「2 修改 + 1 文档 + 2 新件」不矛盾),**也不在任何本报告可达的临时目录**;§五 的四组复核读数**因此不可复查**。本报告已把 §五 相应条目标注为「转述,未复核」。
|
|
374
374
|
|
|
375
375
|
---
|
|
376
376
|
|
|
@@ -408,7 +408,7 @@ MCP stdio 帧格式 = **逐行 JSON-RPC**(不是 Content-Length 帧),协
|
|
|
408
408
|
|
|
409
409
|
【必须怎么修】
|
|
410
410
|
1. 新增 scripts/check_publish_smoke.py(跟同目录 check_publish_artifact.py / check_registry_tarball.py 同风格:纯 stdlib、argv 列表 + shell=False + 显式 UTF-8、中文判据行、退出码 0=通过)。它做上面那条链路并断言:①发货清单含仓根 utf8_boot.py(点名式断言,缺则直接红并打出「修法:files 加 utf8_boot.py」);②装好的目录里 utf8_boot.py 与 md_cg/mcp_server.py 都在;③真握手拿到 serverInfo 与 tools,且 tools **等于** ['cg','stg'](缺省面;若加了 MDCG_MCP_SURFACE 多到 33 面的口径请只测缺省面并在注释里说明);④启动 stderr 里出现策略来自**包内** data/policy.json 的证据则一并记录(可选)。
|
|
411
|
-
2. 沙箱路径:缺省 tempfile.mkdtemp(),跑完全部清理;若 env MDCG_GATE_SANDBOX_DIR 给定则使用它并**保留不删**(便于人工复核,例如指到
|
|
411
|
+
2. 沙箱路径:缺省 tempfile.mkdtemp(),跑完全部清理;若 env MDCG_GATE_SANDBOX_DIR 给定则使用它并**保留不删**(便于人工复核,例如指到 <空沙箱>)——两条分支都要有读数行。
|
|
412
412
|
3. npm 解析必须复用 check_publish_artifact.py 里已有的那个单点(若它是私有函数就抽成共用,别写第二套方言):Windows 上 npm 会命中 npm.cmd,且实测 `cmd /c npm ...` 在本仓 Bash 里会打印 cmd 横幅且假绿(rc=0)——**不要用 cmd /c 包一层**。若探不到 npm,fail-closed(退出码 1)并打出为什么,不要静默 SKIP。
|
|
413
413
|
4. 接线:package.json 的 gate 脚本里加这条腿,紧跟在 check_publish_artifact 之后(位置要按语义选,别放最后)。
|
|
414
414
|
5. 文档同步:docs/mdcg/发布门禁链_v0.1.md 现在写的是八道/八条腿(它自称与 package.json 对齐),改成九道并补本条腿的说明与为何必要(同类漏两次);README 里若有门禁腿数的描述一并同步;search 一下有无其它写「八腿/八条腿/8 legs」的文档。
|
|
@@ -421,7 +421,7 @@ MCP stdio 帧格式 = **逐行 JSON-RPC**(不是 Content-Length 帧),协
|
|
|
421
421
|
|
|
422
422
|
【验收判据(逐条给读数)】
|
|
423
423
|
- 新腿单独跑:python -X utf8 scripts/check_publish_smoke.py 得 rc=0 与完整读数(清单条目数、utf8_boot 是否在、握手 serverInfo、tools 列表、沙箱路径与是否清理)。
|
|
424
|
-
- 指定 MDCG_GATE_SANDBOX_DIR
|
|
424
|
+
- 指定 MDCG_GATE_SANDBOX_DIR=<空沙箱>\test\smoke 再跑一遍,证明覆盖分支可用且保留沙箱。
|
|
425
425
|
- **定点变异自证(关键,必须在临时副本上做,不许改真工作区)**:在副本里把 package.json 的 files 里 "utf8_boot.py" 删掉 → 本腿必须变红并点名缺件;恢复后变绿。红/绿两侧读数都要给。
|
|
426
426
|
- 新增守卫 scripts/test_publish_smoke_guard.py:断言 ①gate 脚本串里确实含这条腿 ②smoke 脚本存在且其关键断言有可定位锚点(发清单含 utf8_boot / tools 等于 cg 与 stg / 剔除 MDCG_* 三处)③用上面的定点变异证明本腿有判别力(在临时副本上);带 --mutate 或等价自证,红项数点名。
|
|
427
427
|
- npm run gate 全腿 rc=0(沙箱里 npm 可能不可 spawn,按环境报实情)。
|
|
@@ -432,7 +432,7 @@ MCP stdio 帧格式 = **逐行 JSON-RPC**(不是 Content-Length 帧),协
|
|
|
432
432
|
**其余 `args` 字段**(同源实读):
|
|
433
433
|
|
|
434
434
|
```text
|
|
435
|
-
repo =
|
|
435
|
+
repo = <仓根>
|
|
436
436
|
defect = PKG-SMOKE-GATE
|
|
437
437
|
sites = package.json 的 scripts.gate(约 :88,现八道腿)|scripts/check_publish_artifact.py(npm 解析单点,供复用)|
|
|
438
438
|
scripts/check_registry_tarball.py(同目录风格参考)|docs/mdcg/发布门禁链_v0.1.md(八道→九道)|
|
|
@@ -448,7 +448,7 @@ container = true
|
|
|
448
448
|
| 契约判据 | 本报告落点 | 谁跑的 |
|
|
449
449
|
|---|---|---|
|
|
450
450
|
| 新腿单独跑 rc=0 + 完整读数 | §4.4 第 1 条 | 工作流采集 |
|
|
451
|
-
| `MDCG_GATE_SANDBOX_DIR
|
|
451
|
+
| `MDCG_GATE_SANDBOX_DIR=<空沙箱>\test\smoke` 分支 | §4.4 第 2 条 | 工作流采集 |
|
|
452
452
|
| 定点变异自证(副本,红/绿两侧) | §4.3(B2 绿/红)+ §4.9-①(skills 变体) | **本报告实跑** |
|
|
453
453
|
| 守卫三处锚点 + `--mutate`、红项数点名 | §4.1、§4.2、§4.3 | **本报告实跑** |
|
|
454
454
|
| `npm run gate` 全腿 rc=0 | §4.7 | 工作流采集(**运行树未标注**,§6.2-10) |
|
|
@@ -90,6 +90,8 @@
|
|
|
90
90
|
| **H1** | 子代理委派被写成本人记忆 | `isSubagentSession`(会话级,刻意**前置于 sid 捕获之前**,否则子代理会话会污染 `lastSession`)+ `isRelayedMessage`(消息级)两个纯判据 | 六种退化形态一律**不筛不报错**;⚠️ **真实宿主是否真写 `origin`/`delegationDepth`/`form:'relay'` 只在类型面成立、未在真实会话事件上观测**(本机未装 DSH harness) |
|
|
91
91
|
| **H2** | 写入与召回的会话口径不同尺 | 读侧 `stg._view_session` 消费**同一个** `mcp_server._normalize_session`(**不重写实现**);插件侧无会话标识时写显式 `unassigned`(替代进程级随机 `sess_*` 兜底桶);召回改为显式带会话槽 | 三态语义(缺省/`""`/`"*"`)逐位不变;`cg` 读路径的 session 走身份判定(issue #35 定稿「身份不可自报」)**不经**此视图,不得互相「对齐」(对齐即等于开一条按请求 session 读 private 的越权通道);env 固定会话的部署形态仍读不到本会话视图(如实记录,不在本次范围) |
|
|
92
92
|
|
|
93
|
+
- **【订正 2026-10-05】** 上表 **H1** 行末的诚实边界(「只在类型面成立、未在真实会话事件上观测」/「本机未装 DSH harness」)已与事实不符,原文保留作时间点留档:本机**已装** DSH 2.0(`dsh-0.2.0-rc.2`),接口面已按实装包复核(`origin`/`delegationDepth` 见 dsh-session/lib/types/types.d.ts:81/87;`'relay'` 见 dsh-llm/lib/types/message.d.ts:56/90),19 场真实会话已观测(会话头 `delegationDepth=0` 真实在写;`user/message` 270 条的 `source.kind` = user 80/roleplay-tasks 82/roleplay-context 72/runtime-context 19/skill-catalog 14/user-approval 2/goal 1,注入类均被 `kind !== 'user'` 判据设计滤除)。**仍未观测**:`origin='subagent'`/`delegationDepth>0`/`form='relay'` 的真实出现——守卫证明的「在场且匹配才拦、缺失不拦」性质不变。
|
|
94
|
+
|
|
93
95
|
- 守卫:`md_cg/test_p9c_dedup_hints.py`(31)、`md_cg/test_h2_session_view_norm.py`(17)、`test/fullwidth_redact.test.ts`、`test/untrusted_memory.test.ts`、`test/h1-source-filter.test.ts`。
|
|
94
96
|
- **文件并发写入的完整性核验**:`src/hooks.ts` 在同一轮里被**四方**(M5/H5/H1/H2)写入、守卫文件也被中途追加。我在提交前逐标记核验四处改动**全部在场且互不覆盖**(`twoWidth`/`renderUntrustedMemoryBlock`/`isSubagentSession`/`UNASSIGNED_SESSION`),变异残留扫描全程为 0。
|
|
95
97
|
- **我自己的派发契约缺陷**:H1/H2 的 `hooks.ts` 侧在我写的归属划分里**没有主**(我把 hooks.ts 排给了插件面修改员,却把 H1/H2 排给了另一员)。是该子代理**拒答并上报**(`dwfq-a9007424-1`)才暴露的——**缺陷在我,不在它的边界**。我据此补授权并加了三项防丢更新要求。
|
|
@@ -168,6 +170,7 @@ gate 八腿逐条:`check_unreachable` PASS · `check_publish_artifact` PASS(
|
|
|
168
170
|
- `npm pack` / `npm publish` —— publish 属使用者终端凭据动作(实测 `npm whoami` = E401 凭据无效)。`prepublishOnly` 会在发布时自动再跑 build+test+gate。
|
|
169
171
|
- 发布后回验(`check_publish_artifact.py --registry 0.6.1`、`npx @furongjun1999/dsh-memory init` 清缓存终验、`check_registry_tarball.py`)——须等 registry 出现 0.6.1 之后。
|
|
170
172
|
- **H1 的真实宿主行为**:本机未装 DSH harness ⇒ 「宿主要不要真写 `origin`/`delegationDepth`/`form:'relay'`」**只在类型面成立、未在真实会话事件上观测过**。守卫证明的是「判据在场即拦、缺失即不拦」这一可机械判定的性质,**不是**真实委派已被拦住。
|
|
173
|
+
- **【订正 2026-10-05】** 上一条已过时(原文保留作时间点留档):本机**已装** DSH 2.0(`dsh-0.2.0-rc.2`);接口面已按实装包复核(dsh-session/lib/types/types.d.ts:81/87;dsh-llm/lib/types/message.d.ts:56/90),19 场真实会话已观测(会话头 `delegationDepth=0` 19/19 真实在写;`user/message` 270 条的 `source.kind` 分布 = user 80/roleplay-tasks 82/roleplay-context 72/runtime-context 19/skill-catalog 14/user-approval 2/goal 1,注入类均被 `kind !== 'user'` 判据设计滤除)。**仍未观测**:`origin='subagent'`/`delegationDepth>0`/`form='relay'` 的真实出现——守卫证明的性质(在场且匹配才拦、缺失不拦)不变。
|
|
171
174
|
- `test_conformance.py:312` 硬编码一条**本机活库绝对路径**(`<盘符>/Program Files/2_ai/…` 形态;门禁 R3 的 `LOCAL_PATH_PROGRAM` 规则对本仓自有文档同样生效,故本报告不复述字面量)——按本轮「不碰在役库」约束,复核侧改用 `conformance --root <沙箱>` 替代,**未在活库上跑**。
|
|
172
175
|
- 第二节的**探针额外发现②(负尾重复出条)**:收口方式为负尾单点化,**该具体形态未单独立断言复验** ⇒ 待复验。
|
|
173
176
|
|
|
@@ -195,6 +198,7 @@ gate 八腿逐条:`check_unreachable` PASS · `check_publish_artifact` PASS(
|
|
|
195
198
|
- **执行**:见第三节各批提交(`778f8ede` / `69e8719b` / `2e7d7230` / `f706b799` / `956807a1`)与第五节读数的对应命令;每批提交前**均由编排侧独立复跑**守卫、套件与门禁,**代理自报未作为判据**。
|
|
196
199
|
- **验证方式**:`python scripts/run_tests.py --jobs 4`(286/286)+ `npm.cmd test`(99/98/1)+ `npm.cmd run gate`(8 腿 PASS、`VERDICT=PASS` rc=0)+ Docker 双栈(38/0 与 99/96/3,均 rc=0)+ 基线 worktree 对拍(自有回归的定因)。
|
|
197
200
|
- **不适用条件**:不覆盖**已发布 npm 制品**的行为(那是 0.6.0 代码);不覆盖**真实 DSH 宿主**的委派字段写入行为(未装 harness);不覆盖 `test_conformance.py:312` 的活库路径腿(本轮约束不碰在役库);不覆盖留池 9 项;`SERVER_VERSION` 不在版本面内(动态读 `package.json`,故意的)。
|
|
201
|
+
- **【订正 2026-10-05】** 上条「不覆盖**真实 DSH 宿主**的委派字段写入行为(未装 harness)」的前提已变(原文保留作时间点留档):本机**已装** DSH 2.0(`dsh-0.2.0-rc.2`),接口面已按实装包复核(dsh-session/lib/types/types.d.ts:81/87;dsh-llm/lib/types/message.d.ts:56/90),19 场真实会话已观测(会话头 `delegationDepth=0` 19/19 真实在写;`user/message` 270 条的 `source.kind` 分布 = user 80/roleplay-tasks 82/roleplay-context 72/runtime-context 19/skill-catalog 14/user-approval 2/goal 1,注入类均被 `kind !== 'user'` 判据设计滤除)。**仍未观测**:`origin='subagent'`/`delegationDepth>0`/`form='relay'` 的真实出现。
|
|
198
202
|
|
|
199
203
|
---
|
|
200
204
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# 发布 11 · 0.7.3:外报六连修与世界模型底座
|
|
2
|
+
|
|
3
|
+
> 发版线:v0.7.2 → v0.7.3(本批窗口 30 笔提交)
|
|
4
|
+
> 发布三关:`npm run gate`(11 条腿)· Linux 容器双栈(rust:bookworm / node:22-bookworm)· 空文件夹沙箱模拟新用户安装
|
|
5
|
+
> 起源:连续六则外部 issue(#56–#61)+世界模型对齐评估路线 A/B/C 落地+性能面第 32 轮+纪律注入面与编译器批次
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 一、六则外部 issue 闭环(#56–#61)
|
|
10
|
+
|
|
11
|
+
**共同主线:外部报告逐条实证、修复入库、定点变异自证**。六则均已修复;修复**未随 0.7.2 发布**,本版为首个携带版本(复验入口见各条)。
|
|
12
|
+
|
|
13
|
+
1. **#56(hook 过滤面不可观测)** —— 提交 `c6f59263`。
|
|
14
|
+
新模块 `src/lib/hook_audit.ts`:三处过滤分支(子代理会话/中继消息/`source.kind !== 'user'`)与写入路径**落盘计数**(filtered/written/skipped+kind 分布+最近 ≤20 条**零内容**摘要);原子写、有界、静默降级;写入与过滤判定**一字未改**。随批收口入口 OPENBLAS 线程自保证(多进程同启时 numpy 导入期内存申请失败的启动死亡,12 并发实测 4~9/12 失败 → 置值 0/12)。守卫 `test/hook_audit_observability.test.ts` 10/10;`md_cg/test_boot_openblas_guard.py` 7/7。
|
|
15
|
+
2. **#57(保留设备名守卫失效)** —— 提交 `2a45759e`。
|
|
16
|
+
根因订正:分界不在 Python 版本,而在 **OS 层 `GetFullPathNameW` 行为差异**(本机同版本 Python 复跑 20/20 干净)。修法=**末段直判**(去尾随分隔符/按首个点截断/大小写不敏感,含 CONIN$/CONOUT$/上标 COM¹²³·LPT¹²³;实测 com0/lpt0/com10/lpt10/clock$ 不保留),与 OS 行为解耦。测试 20 → **58**(含"恒等 abspath 现场模拟"把报告人系统行为固化为确定性断言)。
|
|
17
|
+
3. **#58(干净克隆跑不全绿)** —— 提交 `dfd6ce9b`。
|
|
18
|
+
定因:守卫的守卫(`--mutate` 阶段)嵌套真跑全套件、其 per-test 日志写进**共享真实日志目录**,352 份日志被清洗(判分不受影响,仅日志受害)。修法:`_env_clean` 加 `MDCG_TESTLOG_DIR` 隔离(不改机理)+新判据 NESTED-LOGS(⑨b,AST 装载被判根源码实测)+新变异 M14(删隔离行恰红)。守卫 30/30 → **32/32**;修复后整轮日志熔断行 **352 → 0**。
|
|
19
|
+
4. **#59(README 读数与命令不符)** —— 提交 `f1d22cc9`。
|
|
20
|
+
`top1 0/8(全部漏召)` 与实测不符 → 对齐为 **top1 1/8、hit@10 8/8、MRR 0.340**;「词面零重叠」收窄为「事实正文与问句 char-bigram 零重叠」+如实标注语料设计事实(gold 生效条件按设计是问句子串=词法路 8/8 进 top10 的通道;8 条并列同分靠 id 字典序兜底 ⇒ top1 仅 1/8=**排序弱,非召回缺失**);「8/8 REJECT」明确为**裁决器层**直调验证(②断言)+排序层增益如实记 **0**(D−C +0/+0.000、filtered=0)。
|
|
21
|
+
5. **#60(睡眠周期在活跃工作区永不迭代)** —— 提交 `d6e3fd0d`。
|
|
22
|
+
`materialize` 的 `ok` 把「真源面有新增」当「物化未成功」⇒ 活跃库**自我否决循环**。修法=语义拆分:`ok` 只表**物化动作成功**,新增 `face_stable`(原 ok 真值);**物化成功即迭代**,窗口内漂移交 ③ 对账段的并发闸(`baseline_face` 水位/主库优先)逐项裁决。台账 ②③④ 的 skip 文案三类区分(门拦/物化未完成/幂等)。
|
|
23
|
+
6. **#61(缺「立即跑一轮」手动入口)** —— 提交 `d6e3fd0d`(同批)。
|
|
24
|
+
新增 `python -X utf8 -m md_cg.sleep --once`(过同一组四道门;未迭代时打印与台账**同源**的「本轮未迭代原因」);`--once --dry-run`(零落盘预览,单独使用返回 2);`--status` 增 `last_cycle`(「上次为何没迭代」CLI 直读)。运维指南升 v1.1(调度前提/手动入口/行为口径更新)。
|
|
25
|
+
|
|
26
|
+
**验收读数(#60/#61)**:`test_sleep` 76 通过、`test_sleep_p1` 135 通过;变异自证两组全 PASS(新 #60 变异红集 G9b/G9c/G9e;另修一处先存 `--mutate` ANCHOR-MISS 变异锚点陈旧);python 全量 **352/352**;gate 11 腿 rc=0。
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 二、世界模型底座(对齐评估路线 A/B/C)
|
|
31
|
+
|
|
32
|
+
依据 `docs/plans/多主体世界模型_对齐评估与落地设计_v0.1.md`(五层对齐+33 条复核全采纳),按 A→B→C 落地:
|
|
33
|
+
|
|
34
|
+
1. **A(口径收口)**:**L0 状态事件五元台账**(`md_cg/state_events.py`——主体/槽位/旧值→新值/轮次/出处+五类变迁,append-only、跨进程锁、坏行记账可观测)+**检验强度字段**(`check_strength`:hoop/smoking_gun/doubly_decisive,经 MCP `op=write`/`mdcg_remember`/变更单**全写链**透传)+**幽灵引用检查器**(`md_cg/ghostref.py`:短语层回指标记 `uncertain_refs`**不拒收**、id 层「目标晚于自身」降级告警;挂 writepipe before 链)。
|
|
35
|
+
2. **C(证据审计面)**:`cg(op=audit)` 只读组装「现值+出处链+两存/备择+盲区+退役史」(`md_cg/auditview.py`,零写路径改动);并当场发现并修复 A1 的接线缺口(`check_strength` 经 MCP 曾静默丢弃,六处漏传)。
|
|
36
|
+
3. **B(L4 隔离原型探针)**:真实会话语料(85.6 万字符/1467 轮)状态链回放——值段 23、复发 20(值段级,真失效约 14–15);三判据「有条件可操作」;主要成本=状态链抽取方法论(词形消歧/发言者归属/思考块剥离/合法回忆排除)。**产品化待裁定**(如实)。
|
|
37
|
+
|
|
38
|
+
另:《秤》v2.1 记忆系统评测规范(多主体世界模型评测规范·冻结版)入库(`41c64e7a`)并登记 docs 索引;AGI 七维评分报告 v3.0/v3.1(六家同尺+U/I 单家活体自测)入库。
|
|
39
|
+
|
|
40
|
+
**如实边界**:A1 台账目前**未接生产写入/检索路径**(模块+守卫在位,待 L2 槽位 schema 专稿后接线);B 为隔离原型**非产品**;L2「主体×谓词槽位寄存器」为下一阶段(设计稿已判定的最大结构缺口)。
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 三、性能面(第 32 轮缺陷迭代,批次108)
|
|
45
|
+
|
|
46
|
+
四区并扫(检索 IO/索引启动与写盘/compiler-hive-rust/插件热路径),候选 8 条全 real;落码三修(`f798bd97`):
|
|
47
|
+
|
|
48
|
+
- **检索** positive_body 缓存钩子化(热态约 **-47%**,调用 8000→0);
|
|
49
|
+
- **新鲜度** 三参循环外提(**-24.7% / -26.4%**,56007→8005 次);
|
|
50
|
+
- **写链** 签名探针(440→2,**46.9 → 31.5ms**)。
|
|
51
|
+
|
|
52
|
+
**语义证明**:检索面 `scripts/rank_parity.py` 逐位一致 10/10(排序有位移不算收益——本批无位移)。守卫 `test_n276_probe_hoist`(11)/P8(20)/G13(89)/cons200 夹具(27)。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 四、纪律注入面与编译器(批次 103/104)
|
|
57
|
+
|
|
58
|
+
1. **用户级纪律注入面升为渲染产物**(`7eb1516b`):`~/.zcode/AGENTS.md` 改由渲染管线生成(variant `zcode-user`+模板+**声明出口表内嵌**;`verify_discipline.py` 指针分支加第四检**「全文与重渲染逐字一致」**;守卫 `scripts/test_zcode_user_embed.py` 22/22+变异 4/4)。仓根识别改「特征文件法」(机器无关,去本机盘符)。
|
|
59
|
+
2. **编译器三修 N270/N271/N272**(同批):条件空间两模型脱钩(静态别名跟随+比较极性修误拒+Python VM 写类型闸对齐)/读取面未声明即**编译期 error**(指令操作数面保留宽松)/SEMANTICS §1 写面「—」集编译期拒+两 VM 结构化拒同判。守卫 28/28·37/37·34/34·12/12;既有钉旧行为断言更新 8 处(逐条列明)。
|
|
60
|
+
3. **TS 面五修 N265–N269**(批次103 `e3a16932`):聊天入口类型闸/冷却分支状态结算/复核侧 fail-closed/脱敏词形补齐等;N265 判 by-design(注释落档)。
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 五、工程面杂项(批次 92–102 摘要)
|
|
65
|
+
|
|
66
|
+
- **CI 双绿里程碑**:`python-tests` 长期红 → 首 0 红(`49f32a1e`);`discipline-check` 历史首绿(`06dd33ed`,EOL 指纹归一)。
|
|
67
|
+
- **公开面本机路径全面相对化**(批次98 `c90e9d7c`):120 处 / 47 文件+家目录形态归一;新守卫 `scripts/check_local_paths.py` 成**门禁第 11 腿**+CI 两步。
|
|
68
|
+
- **用户裁决处置批次 96/97/98**:纪律投影判据体强制 root 且四自动化面真跑/自举固化前快照审计/link_check 代码跨度感知等。
|
|
69
|
+
- **scripts/hive/swarm 各面收口(批次 92–95、99–102)**:hive 入口 DoS/锚预期可判定性/终态静默失败;swarm VM 跳转越界/信任舍入;scripts 面解码崩溃(N261)/跨基元误引(N262)/报告原子写(N248)/用法错结构化(N249)/N256–N260 五修/N264 杀后直读半行加固。
|
|
70
|
+
- **DSH 2.0 事实订正**(批次106 `f018bfc0`):全仓「未装 DSH harness」类陈旧断言订正+真实会话库观测法入库(19 场实测:`delegationDepth=0` 19/19 真实在写、注入类 kind 分布、`origin/relay` 未出现)。
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 六、发布三关读数
|
|
75
|
+
|
|
76
|
+
三关均在发布提交(`cd56b2f0`)的树上由编排侧亲跑,读数如下:
|
|
77
|
+
|
|
78
|
+
1. **`npm run gate`(11 条腿)**:rc=0 / VERDICT=PASS——含出货面冒烟(第九腿:pack → 空沙箱真装 → 真握手)、rust crate 测试(33 passed)、两侧逐位对拍(10/10 逐位一致)、纪律面 10/10、本机路径门禁等;**提交前后各复跑一次**。
|
|
79
|
+
2. **Linux 容器双栈**:
|
|
80
|
+
- `rust:bookworm`(`scripts/linux_verify.sh full`):**45 pass / 0 fail**——cargo test + release 构建 + 27 项 python 守卫(含 21 个红基线/判别力自证面)+ smoke 22/0(Linux 口径:SIGTERM 收尾);
|
|
81
|
+
- `node:22-bookworm`(`scripts/newuser_sim.sh`):**10 pass / 0 fail**——干净 clone(=`cd56b2f0`)→ `npm install` + `npm run build` → `npm pack`(发布件含大脑入口/写管线/skills)→ 大脑直连导入与令牌签发 → **MCP stdio 新用户全链 11 项**(initialize/空库首写/检索/冲突入队与裁决/ccgc 签章/info 健康)。
|
|
82
|
+
3. **空目录沙箱模拟新用户安装**:`VERDICT=PASS`——出货清单 **1571 条目**含仓根 `utf8_boot.py`;空沙箱 `npm install <tgz>`(0.7.3)逐件断言(`utf8_boot.py`/`md_cg/mcp_server.py` 在位);**真启动真握手**:`serverInfo={"name":"mdcg-mcp","version":"0.7.3"}`、`tools=["cg","stg"]`、策略来源=包内件;四根(memory/aux/state/data)全在沙箱 ⇒ 密闭。
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 七、如实边界与已知待决
|
|
87
|
+
|
|
88
|
+
1. **#60/#61 的真机 3600s tick 端到端长跑未覆盖**——以隔离根+手动入口(`--once`)等价路径验证;merge 相位随 `MDCG_SLEEP_MERGE` 档(auto 走到合并/ask·never 按档挂起)。
|
|
89
|
+
2. **世界模型底座**:A1 台账未接生产(见 §二);B 探针产品化待裁定;L2 槽位寄存器为下一阶段。
|
|
90
|
+
3. **性能面**:N275(hive/src 红线面)与 N277(get 走缓存的语义面)**受阻待裁决**,未含本版。
|
|
91
|
+
4. 六则 issue 修复均**未随 0.7.2 发布**,本版为首个携带版本;#57/#58/#59/#60/#61 建议报告人按各自复验命令在 0.7.3 上复验。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 归一层缺省翻关(UNIFY-DEFAULT-OFF)修复记录 v1.0
|
|
2
2
|
|
|
3
3
|
> **日期**:2026-09-30 | **缺陷号**:UNIFY-DEFAULT-OFF | **契约**:动态工作流 `dwfrun-e8eabeba-…` 的 `args.contract`(`defect=UNIFY-DEFAULT-OFF`)——**验收条款原文见 §七.1**
|
|
4
|
-
>
|
|
4
|
+
> **被测面**:`<仓根>` **工作树(未提交)**——12 个已修改跟踪件(`README.md`、`docs/hive/检索算法口径对照_v0.1.md`、`md_cg/bench_e2e_locomo_qa.py`、`md_cg/mdcg.py`、`md_cg/mdcos.py`、`md_cg/semantic/unify.py`、`md_cg/test_en_pipeline.py`、`md_cg/test_rank_parity_score_mode.py`、`md_cg/test_semantic_canonical.py`、`md_cg/test_unify_scope.py`、`rust/src/atoms.rs`、`scripts/rank_parity.py`)+ 2 个未跟踪项(`.zcode/`、新守卫 `md_cg/test_unify_default_off.py`)
|
|
5
5
|
> **证据分级**(本报告不越界陈述):
|
|
6
6
|
> - **§一、§三**=本次读码实读(行号以本次读码为准,**每处同时标明 `git HEAD`(修前)与工作树(修后)两个行号**);§一.2 与 §三.1 各附实跑命令原文。
|
|
7
7
|
> - **§二**=工作流复现腿采集的修前现场(11 条腿,逐条标出「谁跑的」);**本报告未重跑修前态**。其中「HEAD 判据字面量」「HEAD↔现行逐位等价」「修前非 `"0"/"1"` 取值」「修前断言判别力」四点由本报告直接复核,见 §一.2、§四.6、§四.13、§四.11。
|
|
@@ -145,7 +145,7 @@ $ git diff HEAD -- md_cg/semantic/unify.py | grep -E "^@@"
|
|
|
145
145
|
|
|
146
146
|
## 四、验证数字(本次会话实跑)
|
|
147
147
|
|
|
148
|
-
> 全部命令在
|
|
148
|
+
> 全部命令在 `<仓根>`(工作树)执行;标【副本】者在一个**字节保真临时副本**执行——副本 = `git ls-files` 2109 件逐文件字节拷贝 + 未跟踪的新守卫 1 件,位于 `%TEMP%\unifyoff_report`。副本内建库/建 target 均落临时目录,**工作区在全部实验前后 `git status --short` 逐行相同**(12 M + `.zcode/` + `md_cg/test_unify_default_off.py`)。
|
|
149
149
|
|
|
150
150
|
### 4.1 新守卫正向
|
|
151
151
|
|