@furongjun1999/dsh-memory 0.7.1 → 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 +58 -48
- package/codebuddy/CODEBUDDY.md +9 -9
- 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/20309_/346/243/200/347/264/242/351/235/242/344/270/211/346/211/271/346/224/266/345/217/243_v1.0.md +1 -1
- package/docs/eval//345/217/221/345/270/20310_/350/257/273/351/235/242/346/215/237/345/235/217UTF8/345/256/266/346/227/217/346/224/266/345/217/243_v1.0.md +71 -0
- 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 +9 -8
- 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/bench6_arms.py +10 -6
- package/md_cg/bench_e2e_judge.py +4 -2
- package/md_cg/branches.py +29 -3
- package/md_cg/census.py +2 -1
- 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 -4764
- package/md_cg/mdcos.py +40 -15
- package/md_cg/mreview/locate.py +1 -1
- package/md_cg/nodefile.py +77 -13
- package/md_cg/readcache.py +29 -4
- package/md_cg/rollback.py +12 -3
- package/md_cg/routing.py +10 -1
- 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_corrupt_utf8_read_surfaces.py +451 -0
- package/md_cg/test_datapath_device_name.py +62 -3
- package/md_cg/test_generation_guard.py +20 -11
- package/md_cg/test_ghostref.py +182 -0
- package/md_cg/test_health_corrupt_utf8.py +37 -0
- package/md_cg/test_index_crossprocess_reload.py +39 -24
- package/md_cg/test_interop.py +1 -1
- package/md_cg/test_issue52_scan_condition_first.py +1 -1
- package/md_cg/test_issue53_cipher_health_hash.py +385 -0
- 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 +9 -9
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# 缺陷挖掘 · 自主迭代 第 31 轮报告(TS 面深挖)
|
|
2
|
+
|
|
3
|
+
> **报告文件**:`docs/eval/缺陷挖掘_自主迭代_v30.md`(文件序号 v30;**轮次号为第 31 轮**——材料 ② 的草案文件名即「缺陷迭代第 31 轮 TS 面深挖」(`.zcode/workflow-drafts/` 下,本席 `ls` 复核存在),与文件序号序列自洽:v29 = 第 30 轮 纪律·门禁·工程管线面)。
|
|
4
|
+
> **扫描域**:DSH 插件 TS 面——`src/` 源码、`test/` 顶层 TS 测试、`dsh/` 示例配置与发布面文案、插件清单与各端 README 文案、CI 收集面。
|
|
5
|
+
> **候选池**:25 条(材料 ① 四区候选与独立复核结论)。**结论分布**:`real 24` / `already_covered 1`(#1 入口自判 `isMainEntry`,coveredBy = `N207`)/ `false_positive 0`。
|
|
6
|
+
> **分诊**(材料 ②):`fix 5`(编号 **N265–N269**)/ `defer 20`(含复核附注线索 1 条)/ `rejected 0`。
|
|
7
|
+
> **实际落地**(本席实跑核验工作区):5 条全部落地于工作区;**N266 / N267 / N268 / N269 = verified;N265 = blocked**——半角 `&` 与全角 `#%^*` 五个字符落地、守卫 ⑧⑨ 实测转绿;全角 `!` 一字卡「大设计裁决」(与守卫 ④ 既有断言正面冲突,修复席按红线未放宽判据,详见 §二-N265)。
|
|
8
|
+
> **首次编写**:本文件此前不存在(本席实跑 `ls docs/eval/` 复核最大为 v29)。
|
|
9
|
+
|
|
10
|
+
**行号口径**:全文行号一律为**本席亲读的现工作区行号**(工作区含本轮 N265–N269 的未提交改动,`src/hooks.ts` / `src/bridge.ts` / `src/lib/mutual.ts` / `src/lib/roleplay_web.ts` 的现行行号较材料 ①/③ 的时点行号有偏移);与材料不一致处逐条注明「材料时点行号」。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 一、执行摘要
|
|
15
|
+
|
|
16
|
+
1. **扫描面**:候选池 25 条(材料 ① 四区复核席):**real 24**、**already_covered 1**(#1 `isMainEntry` 无 realpath 归一,coveredBy = `N207`——v23 首登记 :173-178、v24/:185,:241 与 v25/:177 两次复测留档、v26–v29 未再复测、现行代码未修 ⇒ 号仍开、候选同源)、`false_positive` 0。
|
|
17
|
+
2. **分诊**(材料 ②):real 24 条 → `fix 5`(编号 **N265–N269**)/ `defer 19` / `rejected 0`;另将复核附注线索 1 条(`src/index.ts:499-502`)列入 defer,故遗留清单一共 20 条。分诊时点编号实占最大 = **N264**(N265 唯一出现为草案模板注释、N266–N269 零命中),故本轮自 N265 起连续编。
|
|
18
|
+
3. **实际落地**(本席实跑核验工作区):**5 条全部落地**——源码注释逐号在位(§四-2 逐号命中)、5 件守卫单跑全绿(§四-4);**N266/N267/N268/N269 = verified**(按材料 ③ 状态);**N265 = blocked**(五字符落地实测转绿;全角 `!` 一字未改——卡点在「与守卫 ④ 既有断言正面冲突」属大设计裁决,修复席按红线未放宽/未改写判据,本报告如实并列两个候选处置方向、不代替裁决)。
|
|
19
|
+
4. **编号实占核对(硬要求 ③)**:本席现跑 `git grep -ohE 'N[0-9]{3,4}' | tr -d 'N' | sort -n -u | tail -12` → `259…269 / 802`(`802` = `# noqa: N802` lint 码,剔除)。**报告时点实占最大 = N269 = 本轮五号**;`git grep -nE 'N26[5-9]'` 逐号命中全部落在本轮修复面(源码注释 / 守卫测试名),无其它占用(§四-2)。
|
|
20
|
+
5. **三关读数(本席实跑,硬要求 ⑤;TS 面单列见 §四-3)**:`npm test` → **退出码 0**,`tests 117 / pass 116 / fail 0 / skipped 1`;python 全量 `python scripts/run_tests.py --jobs 4` → **退出码 0**,`SUMMARY 345/345 通过,5 跳过`;`npm run gate` → **退出码 0**(**修复面时点、本报告写入前**,11 腿全绿)。与材料 ④ 三关读数逐项一致。**报告写入后复跑**:唯一红腿为 `check_publish_artifact` 的 R4 非追踪件面(唯一点名=本报告 untracked,设计口径「包内非追踪件仅允许 `lib/`」),其余各腿逐一单跑全绿(§四-3 两段读数)——属交付面流程项(报告须随批次 `git add`),非正文形态缺陷。
|
|
21
|
+
6. **严重度不一致(如实并列)**:**N266**(材料 ① medium / 材料 ③ high)、**N269**(材料 ① low / 材料 ③ high)两处不一致;N265(high/high)、N267(medium/medium)、N268(medium/medium)一致。
|
|
22
|
+
7. **重复面处置**:#1 的 already_covered 判据由材料 ① 逐条给出(含 N207 的 v23–v25 留档核对与 v26–v29 零命中);其余 24 条的「未登记」排查(全仓 grep + 缺陷号台账)亦由材料 ① 逐条给出,本席核注现码行号与在位性(§四-2/§四-6)。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 二、修复清单(已落地 5 条:N265–N269)
|
|
27
|
+
|
|
28
|
+
> **读数来源声明**:本节各条「红基线 / 绿态」命令与输出均**来自材料 ③(修复席)**,**并非本席实跑**(红基线须先把产品源码回退到 HEAD 版,本 ask 明令「不得改动任何产品源码文件」);本席实跑部分为**五件守卫绿态单跑**(§四-4)与**源码注释 / 守卫在位核验**(§四-2),逐条标注。材料 ③ 中 N265 状态为 **blocked**、其余四条 **verified**,本节如实转写、不归一。
|
|
29
|
+
|
|
30
|
+
### N265 · 脱敏值类「两宽齐备」缺口:半角 `&` 与全角 `#%^*`
|
|
31
|
+
|
|
32
|
+
- **where(现行)**:`src/hooks.ts:128`(`CRED_VALUE_CHARS` 定义;修前 :119,N265 注解 :117-127);中文密码规则 `:183`(修前 :170;**材料 ③ 的 N265 条载 :179,系 N269 注释插入前快照,本席以亲读为准**)。守卫:`test/fullwidth_redact.test.ts:292`(⑧)/ `:315`(⑨)。
|
|
33
|
+
- **缺陷面**:值类此前半角 `% ^ * ! #` 有、全角 `%^*` 缺,且反向半角 `&` 缺(类里只有全角 `&`)——构成「同形不同过滤」:缺口字符落在值前 4 位内 ⇒ 整条规则失配(凭据原文全量落库);落在第 4 位之后 ⇒ 命中被截断在缺口处、尾部明文残留。该路(`src/hooks.ts` 现 :502/:524/:534 的 sanitize → memorize → `md_cg/mcp_server.py` 直调 `remember_gated`,gated=true 不过 audit/redact)——TS 侧 `desensitize` 是唯一防线。
|
|
34
|
+
- **修复(材料 ③)**:半角 `&` 与全角 `#%^*` 五字符并入值类(复用 M5 单点);守卫新增 ⑧(整条漏检形态)与 ⑨(尾部残留形态)两测(本席亲读 `:287-339`,共 +55 行、纯增 0 删,`git diff --numstat` 复核一致)。
|
|
35
|
+
- **未落地部分(一字,卡点)**:全角 `!` **不能**并入值类——它与守卫 ④ 的既有断言(全角叹号处必须收住)及 `src/hooks.ts:101` 的「两宽类刻意不含中文句读」口径正面冲突;两种处置候选:a = 改判据(`!` 视为值类成员,同步改 ④ 样本与 :101 口径,代价是放宽「跨句吞并」误伤边界);b = 维持句读边界、判 ask 形态二 by-design。**属大设计裁决**,修复席未自行放宽判据(status=blocked)。
|
|
36
|
+
- **守卫红基线 → 绿态(材料 ③)**:红 `node --import tsx --test test/fullwidth_redact.test.ts` → `tests 9 / pass 7 / fail 2`(⑧⑨ 失败原文:半角 `&` 处未命中 ⇒ 凭据面整条漏检;缺口字符后的值明文残留);同批探针改前 20 行读数:缺口一侧命中=false、明文残留=true;对照一侧命中=true、零残留。绿 → **9/9**(⑧⑨ 转绿、①–⑦ 原样全绿;`git diff --numstat` 复核 test 面 +55/-0 纯增、无删改断言)。
|
|
37
|
+
- **severity**:high(材料 ① 与材料 ③ 一致)。
|
|
38
|
+
- **状态**:**blocked(材料 ③)**——五字符已落地并实测转绿;`!` 一字待裁决。
|
|
39
|
+
|
|
40
|
+
### N266 · 角色扮演 chat 入口类型闸 + 落盘顺序
|
|
41
|
+
|
|
42
|
+
- **where(现行)**:`src/lib/roleplay_web.ts:850-859`(`:856` 入口类型闸 → 400)+ `:874-884`(落盘后移:`appendTranscript` 现 :883、`toGraph` :884,均在就绪闸 503 分支 :874-878 之后)。守卫:`test/roleplay_chat_gate.test.ts`(新文件 192 行,6 测 :91/:108/:122/:138/:158/:175)。
|
|
43
|
+
- **缺陷面**:`p.message.includes(w)` 对 JSON 数组退化为逐元素**全等**比较 → 内容类别词与性相关词的合取硬拦截整条失配(能力挂载态 200 照旧转发引擎);数字/对象/缺省抛 TypeError → 500(内部异常文本随响应外泄);且 `appendTranscript`/`toGraph` 写在内容门控与 `capReady` 之前——未过门控的原文先进本地转录(读同一文件的历史接口随即原样回放)。
|
|
44
|
+
- **修复(材料 ③)**:入口 `typeof p.message !== 'string'` 一律 400 拒(与 `/meta` 的 `validRoleId` 同口径:不转发、不落盘);落盘移到内容门控与就绪闸之后。**本席实测改动面**:`git diff --numstat` = `17 2 src/lib/roleplay_web.ts`(**材料 ③ 载「+15/-2」,不一致,以本席实测为准**)。
|
|
45
|
+
- **守卫红基线 → 绿态(材料 ③)**:红 → `tests 6 / pass 2 / fail 4`(① 数组 message 在挂载态走完 200 转发;② 默认 503 态数组原文已落转录;③ 非字符串落 500 且异常文本外泄;⑥ 就绪闸前落盘);绿 → **6/6**(回归腿 ④⑤ 改前即绿、改后仍绿)。
|
|
46
|
+
- **severity**:**材料 ① medium / 材料 ③ high(不一致,如实并列)**。
|
|
47
|
+
- **交付面提醒(材料 ③,本席 `git status` 复核)**:新守卫 `test/roleplay_chat_gate.test.ts` 当前为 **untracked**,须随批次入库才进收集面;`lib/` 为 gitignored 构建产物,无需同步。
|
|
48
|
+
|
|
49
|
+
### N267 · 桥「冷却分支」跳过状态面结算
|
|
50
|
+
|
|
51
|
+
- **where(现行)**:`src/bridge.ts:313-321`(冷却分支 return 前新增结算:`:320` `readyState='failed'`、`:321` `flushBootQueue(false)`;`:322` return,只跳过 `scheduleRetry`)。守卫:`test/bridge_cooldown_state.test.ts`(新文件 127 行,① :69 / ② :105)。
|
|
52
|
+
- **缺陷面**:exit 分支「10 分钟内 ≥3 次意外退出 → 5 分钟冷却」在修前于 :313 直接 return,**跳过**了同分支尾部的 `readyState='failed'` + `flushBootQueue(false)` → 子进程已死而 `isReady()` 恒 true、`waitReady()` 立即 resolve(true);该值经 `src/lib/mdcg_client.ts:209-211` 一行直通宿主门控 → hooks 侧自动召回/自动记忆门控据此放行,调用错误被空 catch 静默吞(`src/hooks.ts` 现 :451;材料时点 :442)或反复 warn 刷屏。
|
|
53
|
+
- **修复(材料 ③)**:冷却分支 return 前补状态面结算(与 spawn error / 常规 exit / 握手失败三处同形),仍不调 `scheduleRetry()`(冷却定时器已安排重试)。`git diff --numstat` = `9 0 src/bridge.ts`(纯增)。
|
|
54
|
+
- **如实划界(材料 ③ 派生结论)**:`flushBootQueue(false)` 在生产可达面**是空操作**(该分支可达态为 ok/failed,bootQueue 必为空)——按 ask 保留作对称防御,未造行为断言(造不出有判别力的红基线),源码注释写明「不单独承担判据、行为无可观察差异」。
|
|
55
|
+
- **守卫红基线 → 绿态(材料 ③)**:红 → `tests 2 / pass 1 / fail 1`(① 冷却分支后 `alive=false isReady=true waitReady=true`——三条读数先采样再断言,红跑一次可读全);绿 → **2/2**(三条读数转 `alive=false isReady=false waitReady=false`,冷却定时器仍在、冷却期内未换代)。
|
|
56
|
+
- **severity**:medium(材料 ① 与材料 ③ 一致)。
|
|
57
|
+
|
|
58
|
+
### N268 · `combineVerdict` fail-closed 判据查错字段
|
|
59
|
+
|
|
60
|
+
- **where(现行)**:`src/lib/mutual.ts:266-267`(判据;`:260` `const c = l.conclusion || ''`;N268 注释 :262-265)。守卫:`test/mutual_review_failclosed.test.ts`(新文件 88 行,① :36 / ⑤ :67 等 5 测)。
|
|
61
|
+
- **缺陷面**:`llm_error:` 前缀由 `llmReview()` 写在 :253 的 `l.conclusion`,而原 fail-closed 判据查 `w.judgment`(该字段只可能由 `whiteboxVerify()` 写 `whitebox_error:`)→ 该分支为**死条件**;白箱「采纳」(d_norm≥0)+ 复核通道抛异常时 `combineVerdict` 返回 `pass`——复核通道不可用反成「通过」(:261 注释承诺失效)。
|
|
62
|
+
- **修复(材料 ③)**:条件由 3 项扩为 4 项——新增 `c.startsWith('llm_error')`(`c = l.conclusion || ''`,兼得 undefined 防御);`w` 侧同形项保留为防御。`git diff --numstat` = `5 1 src/lib/mutual.ts`。
|
|
63
|
+
- **守卫红基线 → 绿态(材料 ③)**:红 → `tests 5 / pass 3 / fail 2`(① 白箱采纳 + 复核异常 ⇒ 实测 pass;⑤ 端到端 `processTask` 内存与落盘 verdict 均 pass);绿 → **5/5**(①⑤ 转 `needs_revision`;对照腿 ②③④ 改前即绿、改后仍绿)。
|
|
64
|
+
- **旁证(既存断裂,未修,与本次改动无关)**:域内两条既有脚本 import 的是**不存在的** `../src/mutual.ts`(模块实际在 `src/lib/`)——`test/verify_fixes.ts:10` 与 `test/verify_mutual.ts:7`(本席逐字复核),二者均不在 `test/*.test.ts` 收集面 ⇒ `combineVerdict` 此前**零活守卫覆盖**(见 §三-#19 与 §五-13)。
|
|
65
|
+
- **severity**:medium(材料 ① 与材料 ③ 一致)。
|
|
66
|
+
|
|
67
|
+
### N269 · `SENSITIVE_PATTERNS` 词形补齐(语言面 + 标签面)
|
|
68
|
+
|
|
69
|
+
- **where(现行)**:`src/hooks.ts:177-183`(语言面并入中文密码规则,规则本体 :183)+ `:187-198`(标签面新规则:注释 :187-194、规则 :195-198;**材料 ③ 载「:186-198」,起点差 1 行——:186 为手机号规则行,本席以亲读为准**)。守卫:`test/token_desensitize.test.ts:66`(⑥)/ `:81`(⑦)/ `:97`(⑧ 误伤边界)。
|
|
70
|
+
- **缺陷面**:规则表只认英文字面量(`sk-` / `api_key` / `apikey` / `access_token` / `password` / `passwd` / `pwd` / `Bearer` / 自家令牌 / `tk_`)+简体「密码」——繁体「密碼」、日文「パスワード」、中文「口令」以及「密钥:」「token:」「secret:」「creds=」这类标签全部原样通过、也不整条跳过,凭据值明文进记忆库(窄于 `:66` 的界面承诺)。
|
|
71
|
+
- **修复(材料 ③)**:七类词形并入(语言面并入既有中文密码规则词形分支 :183;标签面新增一条规则 :195-198,`label='密钥'`);值类沿用共享单点 `CRED_VALUE_CHARS` 与 `{4,}` 下限、词形用 `twoWidth` 单点生成;**位置约束**:新规则插在两条令牌规则**之前**(`test/token_redact_parity.test.ts:122-127` 的交换序按 n-2/n-1 取最后两位做对拍)。规则数 9 → 10。边界如实保留:词内标签(`mytoken=`)不命中;日文助词「は」不并入分隔符(普通句子误伤);`credentials=` 未纳入(ask 未列,不自行扩词)。
|
|
72
|
+
- **守卫红基线 → 绿态(材料 ③)**:红 → `tests 8 / pass 6 / fail 2`(⑥ 繁体/日文/口令三例明文残留;⑦ 密钥/token/secret/creds 五例明文残留);绿 → **8/8**。
|
|
73
|
+
- **severity**:**材料 ① low / 材料 ③ high(不一致,如实并列)**。
|
|
74
|
+
|
|
75
|
+
**改动面汇总(本席实跑 `git diff --numstat`,7 件 +163/-8)**:`md_cg/test_issue52_scan_condition_first.py` +1/-1(N265 注记同步:`hooks.ts` 行号 423→432,本席亲读 `:14` 复核);`src/bridge.ts` +9/-0;`src/hooks.ts` +29/-4(N265+N269 合计);`src/lib/mutual.ts` +5/-1;`src/lib/roleplay_web.ts` +17/-2(材料 ③ 载 +15/-2,不一致如实并列);`test/fullwidth_redact.test.ts` +55/-0;`test/token_desensitize.test.ts` +47/-0。三件新守卫(untracked):`127 / 88 / 192` 行。
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 三、发现明细(全量复核表 · 25 条)
|
|
80
|
+
|
|
81
|
+
> **结论与严重度来源**:均为材料 ①(四区候选与独立复核席);「去向/编号」列中 N265–N269 经本席实跑确认源码注释与守卫在位(§四-2/§四-4),其余为材料 ② 分诊结论;where 列的「现行」行号为本席亲读(§四-6)。
|
|
82
|
+
|
|
83
|
+
| # | where(材料时点 → 现行,本席亲读) | 结论 | severity(①) | 覆盖号 | 去向 / 编号 | 来源 |
|
|
84
|
+
|---|---|---|---|---|---|---|
|
|
85
|
+
| 1 | `src/cli.ts:46-56`(:58 门)→ 现行 `:46-58`;`src/init.ts:342-352`(:354 门)→ 现行 `:342-354` | already_covered | medium | **N207** | —(v23 首登记 / v24、v25 留档;v26–v29 未复测;现行代码未修) | 材料 ①;本席读核现码 |
|
|
86
|
+
| 2 | `src/bridge.ts:301-313` → 现行 `:301-323`(:320-321 结算 / :322 return) | real | medium | — | **fix · N267 · 已落地** | 材料 ①③;本席读核现码 |
|
|
87
|
+
| 3 | `src/bridge.ts:249-251` → 现行 `:249-250`;settle 定义 `:431-441` → 现行 `:440` 起(+9) | real | medium | — | **defer**(bridge-transport 批) | 材料 ①②;本席读核现码 |
|
|
88
|
+
| 4 | `src/init.ts:84-98`(:86/:88)→ 现行 `:85-98`;调用 `:262-264 / :285-288` → 现行 `:262 / :287-288` | real | low | — | **defer**(bridge-transport 批) | 材料 ①②;本席读核现码 |
|
|
89
|
+
| 5 | `src/lib/mdcg_client.ts:131-134` → 现行 `:131-134`(:134 常量、:366 消费点) | real | low | — | **defer**(文档批) | 材料 ①②;本席读核现码 |
|
|
90
|
+
| 6 | `src/hooks.ts:119 / :170` → 现行 `:128 / :183` | real | high | — | **fix · N265 · 部分落地(blocked)** | 材料 ①③;本席读核现码 |
|
|
91
|
+
| 7 | `src/lib/mutual.ts:262` → 现行 `:266-267`(注释 :262-265) | real | medium | — | **fix · N268 · 已落地** | 材料 ①③;本席读核现码 |
|
|
92
|
+
| 8 | `src/lib/mutual.ts:273-274`(:272 注释)→ 现行 `:277-278`(:276 注释) | real | low | — | **defer**(mutual 契约批) | 材料 ①②;本席读核现码 |
|
|
93
|
+
| 9 | `src/lib/mutual.ts:187-191` → 现行 `:187-191`(:187 okTimer / :188 failTimer) | real | medium | — | **defer**(mutual 契约批) | 材料 ①②;本席读核现码 |
|
|
94
|
+
| 10 | `src/lib/token_store.ts:146-148`(:192)→ 现行 `:146-148 / :192` | real | low | — | **defer**(凭据面批) | 材料 ①②;本席读核现码 |
|
|
95
|
+
| 11 | `src/lib/mutual.ts:73-75` → 现行 `:73-75`(:74 ageMs) | real | low | — | **defer**(mutual 契约批) | 材料 ①②;本席读核现码 |
|
|
96
|
+
| 12 | `src/hooks.ts:156-211` → 现行 `:165` 起;消费点 `:214-223 / :386-389` → 现行 `:239 / :400 / :411`(+调用 :502/:524/:534);承诺 `:66` → 现行 `:66` | real | low | — | **fix · N269 · 已落地** | 材料 ①③;本席读核现码 |
|
|
97
|
+
| 13 | `src/lib/roleplay_web.ts:774`(:777 node_id)→ 现行 `:774 / :777`;发送端 `:161 / :380` → 现行 `:161 / :380` | real | medium | — | **defer**(tools-metadata 批) | 材料 ①②;本席读核现码 |
|
|
98
|
+
| 14 | `src/lib/roleplay_web.ts:852-864` → 现行 `:850-884`(:856 闸 / :874 capReady / :883-884 落盘) | real | medium(①)/ **high(③)** | — | **fix · N266 · 已落地** | 材料 ①③;本席读核现码 |
|
|
99
|
+
| 15 | `src/tools.ts:114`(:175 消费点)→ 现行 `:114 / :175` | real | low | — | **defer**(须使用者裁决:上游 DSL 扩展面) | 材料 ①②;本席读核现码 |
|
|
100
|
+
| 16 | `src/lib/whitebox_llm.ts:205-236`(:211 核心行)→ 现行 `:211`(段落同区间) | real | low | — | **defer**(恢复接线前必修;暂并入 tools-metadata 批) | 材料 ①②;本席读核现码 |
|
|
101
|
+
| 17 | `src/index.ts:181` → 现行 `:181`;读取端 `:987 / :1014` → 现行 `:1000-1002 / :1029`(+13/+15) | real | low | — | **defer**(tools-metadata 批) | 材料 ①②;本席读核现码 |
|
|
102
|
+
| 18 | `package.json:87` + `.github/workflows/` 全 8 件 → 现行 `:87`;本席实测 8 workflow 对 `npm test`/`tsx`/`node --test` **零引用**(唯 `python-tests.yml:43` 引 `run_tests.py --jobs 1`) | real | medium | — | **defer**(须使用者裁决:CI 接入) | 材料 ①②;本席实测复核 |
|
|
103
|
+
| 19 | `test/verify_fixes.ts:10`、`test/verify_mutual.ts:7` → 现行逐字一致 | real | medium | — | **defer**(须使用者裁决:收集面口径) | 材料 ①②;本席读核现码 |
|
|
104
|
+
| 20 | `dsh/cordis-patch-profile-web.example.yml:28-29`(:15 同口径)→ 现行 `:28-29 / :14-15` | real | medium | — | **defer**(文档/配置批) | 材料 ①②;本席读核现码 |
|
|
105
|
+
| 21 | `dsh/cordis-patch-profile-web.example.yml:9` → 现行 `:9` | real | low | — | **defer**(同上批) | 材料 ①②;本席读核现码 |
|
|
106
|
+
| 22 | 插件清单与 README 15 处「16 条工作纪律」→ 本席 grep 复核 15 处现值(`marketplace.json:6/:11`、两端插件 `plugin.json:3/:4/:14/:15`、各端 README 等,清单见 §五-16) | real | low | — | **defer**(文档批) | 材料 ①②;本席实测复核 |
|
|
107
|
+
| 23 | `package.json:87`(glob 不跨目录)→ 现行 `:87` | real | low | — | **defer**(tests-dist 批) | 材料 ①②;本席读核现码 |
|
|
108
|
+
| 24 | `test/fullwidth_redact.test.ts:245-251`(⑤)→ 现行 `:245-251`(本轮新增 ⑧⑨ 在 :287-339) | real | low | — | **defer**(随 N265 守卫强化部分核销;⑤ 本身判据未动) | 材料 ①②;本席读核现码 |
|
|
109
|
+
| 25 | `dsh/hive-mcp.example.yml:4`(+ `dsh/README.md:15/:31`)→ 现行 `:4`;本席核 `:31` 命中、`:15` 行未复现「4 个工具」字样 | real | low | — | **defer**(文档批) | 材料 ①②;本席读核现码 |
|
|
110
|
+
|
|
111
|
+
**计数核对**:25 条 = real **24**(#2–#25)+ already_covered **1**(#1)+ false_positive **0** ✔(与材料 ① 逐条 verdict 一致)。
|
|
112
|
+
**去向核对**:fix 5 = N265(#6) / N266(#14) / N267(#2) / N268(#7) / N269(#12)(**5 条全部落地**);defer 19(其余);already_covered 1(#1)。**5 + 19 = 24 = real 条数** ✔。另:材料 ② 的 defer 共 20 条 = 上述 19 条 + 复核附注线索 1 条(`src/index.ts:499-502`,不在本表 25 条内,见 §五-20)。
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 四、实跑读数(本会话第一手)
|
|
117
|
+
|
|
118
|
+
> **L1 直跑:`git status` / `git grep` / `git diff` / `grep` / `npm test` / `python scripts/run_tests.py --jobs 4` / `npm run gate` / 五件新守卫单跑(python 包装)— 风险:低(只读判定为主;npm 腿含 build 写 `lib/` 构建产物,属 gitignored 非追踪面;守卫只写系统临时目录);频次:本 ask 内一次性;可逆性:完全可逆(仓库追踪面零写入)。** 按工作纪律第 17 条留痕。
|
|
119
|
+
|
|
120
|
+
1. **工作区状态**(`git status --porcelain`,本席开工与写报告前各跑一次、逐项一致):
|
|
121
|
+
```
|
|
122
|
+
M md_cg/test_issue52_scan_condition_first.py
|
|
123
|
+
M src/bridge.ts
|
|
124
|
+
M src/hooks.ts
|
|
125
|
+
M src/lib/mutual.ts
|
|
126
|
+
M src/lib/roleplay_web.ts
|
|
127
|
+
M test/fullwidth_redact.test.ts
|
|
128
|
+
M test/token_desensitize.test.ts
|
|
129
|
+
?? test/bridge_cooldown_state.test.ts
|
|
130
|
+
?? test/mutual_review_failclosed.test.ts
|
|
131
|
+
?? test/roleplay_chat_gate.test.ts
|
|
132
|
+
```
|
|
133
|
+
**判读**:改动面 = N265–N269 五条(`src/hooks.ts` 承载 N265+N269 两条)+ N265 注记同步件(`md_cg/test_issue52_scan_condition_first.py:14` 处 `hooks.ts` 行号 423→432,本席亲读复核);三件新守卫为 **untracked**(须 `git add` 才进收集面/CI)。HEAD = `37f535e5` 未动。**写报告后复跑同一命令**:增量恰为 `?? docs/eval/缺陷挖掘_自主迭代_v30.md`(本报告自身),仓库追踪面零写入(「完全可逆」判据据此复核)。
|
|
134
|
+
2. **编号实占扫描(硬要求 ③)**:
|
|
135
|
+
- `git grep -ohE 'N[0-9]{3,4}' | tr -d 'N' | sort -n -u | tail -12` → `259 260 261 262 263 264 265 266 267 268 269 802`;`802` = `# noqa: N802` lint 码(剔除)。
|
|
136
|
+
- 含未跟踪全树 `grep -rhoE 'N[0-9]{3,4}'` → `265…269 / 802`(N260–N264 历史占用分布于 scripts/swarm 等面,与本轮无关)。
|
|
137
|
+
- `git grep -nE 'N26[5-9]'` → 逐号命中(`src/bridge.ts:313`、`src/hooks.ts:120/:179/:187`、`src/lib/mutual.ts:262`、`src/lib/roleplay_web.ts:850/:858/:879`、`test/fullwidth_redact.test.ts:287/:292/:315`、`test/token_desensitize.test.ts:62/:66/:81` 等),全部落在本轮修复面。
|
|
138
|
+
- **结论**:分诊时点实占最大 N264(材料 ② 扫描)、报告时点实占最大 **N269**(=本轮五号);N265–N269 连续、全局唯一。
|
|
139
|
+
3. **三关读数(硬要求 ⑤;TS 面单列)**:
|
|
140
|
+
- **TS 面**:`npm test`(含 build 段)→ **`NPM_TEST_EXIT=0`**;`ℹ tests 117 / pass 116 / fail 0 / cancelled 0 / skipped 1`(两次独立跑:8405.7 ms / 8516.8 ms,读数一致)。skip 1 系平台条件跳过(child-cwd / python-utf8-mode)。
|
|
141
|
+
- **python 全量**:`PYTHONUTF8=1 python scripts/run_tests.py --jobs 4` → **`PY_ALL_EXIT=0`**;`===== SUMMARY 345/345 通过,5 跳过(依赖缺失/平台不符) =====`。
|
|
142
|
+
- **`npm run gate`** → **`GATE_EXIT=0`**,11 腿全绿:`check_unreachable` 扫描 574 文件命中 0;`check_publish_artifact` 文件数=1561 / R1 凭据面 PASS / R7 未扫文本件=0 / `VERDICT=PASS`;`check_publish_smoke` `VERDICT=PASS`;`cogmap_sync check` 通过(cg 37 op / stg 4 op / whitebox 6 / mdcg_* 31);`link_check` 受管 md 1286 / 链接 239 / `OK=239 BROKEN=0 UNTRACKED=0`;`workspace_index --check` OK(顶层目录 20 · 追踪 2213 件);`verify_discipline --allow-missing` 10/10 目标一致;`gate_rust_crate_test` cargo 33 passed;`gate_rust_parity` 逐位一致 10/10;`check_local_paths` `VERDICT=PASS`。
|
|
143
|
+
- 与材料 ④ 三关读数(npm test 退出码 0 / pass 116;python 345 条 PASS / 退出码 0;gate 退出码 0)**逐项一致**。
|
|
144
|
+
- **报告写入后复跑(两段读数,如实并列;本席实跑)**:`npm run gate` → **退出码 1**,唯一红腿 = `check_publish_artifact` 的 **R4 非追踪件面**(`命中=1;非追踪=29,允许=28`,点名行 `- docs/eval/缺陷挖掘_自主迭代_v30.md`)——判据为「包内非追踪件仅允许 `lib/`」(`scripts/check_publish_artifact.py:50` `ALLOW_NONTRACKED = ("lib/",)`;`:660-663` `untracked = pkg_set - tracked`),即**本报告自身 untracked** 所致(与三件新守卫同属「新文件须随批次入库」的流程项;报告经 `git add` 进追踪面后 R4 即消——读码推断,本席未 `git add`、未实测)。同一腿内其余规则全 PASS:`R1 凭据/密钥面`(内容面=0;唯 5 处既有哑值 NOTE,均非本报告)、`R2 私有数据面`、`R3 隐私文本`、`R5 清单路径安全`、`R6 清单来源可信`、**`R7 扫描面完整性(清单文件数=1562,未扫文本件=0)`——即报告已完整进入发布面扫描且零命中**。其余各腿在报告写入后**逐一单跑全绿**:`check_publish_smoke` RC=0;`cogmap_sync check` RC=0;`link_check` RC=0(`OK=239 BROKEN=0 UNTRACKED=0`);`workspace_index --check` RC=0;`discipline_nodes --init --write` RC=0;`verify_discipline --allow-missing` RC=0(结论 10/10 目标一致);`gate_rust_crate_test` RC=0(cargo 33 passed);`gate_rust_parity` RC=0(逐位一致 10/10);`check_local_paths` RC=0(`VERDICT=PASS`)。
|
|
145
|
+
4. **五件新守卫绿态单跑**(本席实跑,python 包装逐件 `node --import tsx --test <件>`,捕获 UTF-8 输出):
|
|
146
|
+
```
|
|
147
|
+
test/fullwidth_redact.test.ts RC=0 tests 9 pass 9 fail 0
|
|
148
|
+
test/token_desensitize.test.ts RC=0 tests 8 pass 8 fail 0
|
|
149
|
+
test/roleplay_chat_gate.test.ts RC=0 tests 6 pass 6 fail 0
|
|
150
|
+
test/mutual_review_failclosed.test.ts RC=0 tests 5 pass 5 fail 0
|
|
151
|
+
test/bridge_cooldown_state.test.ts RC=0 tests 2 pass 2 fail 0
|
|
152
|
+
```
|
|
153
|
+
与材料 ③ 各条绿态读数(9/8/6/5/2)逐件一致。
|
|
154
|
+
5. **改动面规模**:`git diff --numstat` 7 件 +163/-8(逐件见 §二 汇总);3 件新守卫 127 / 88 / 192 行。
|
|
155
|
+
6. **现码行号读核**(本席以 Read/grep 亲读,落为 §二/§三 的「现行行号」):`src/hooks.ts`(`:66` 承诺 / `:101` 边界口径 / `:117-127` N265 注解 / `:128` 常量 / `:165` 规则表起 / `:177-198` N269 两规则 / `:239` desensitize / `:400/:411/:502/:524/:534` sanitize/memorize 面)、`src/bridge.ts`(`:249-250` settle 调用 / `:301-323` 冷却分支 / `:440` settle 定义)、`src/lib/mutual.ts`(`:73-75 / :187-191 / :253 / :260-269 / :277-278`)、`src/lib/roleplay_web.ts`(`:161 / :380 / :774-777 / :850-884 / :1000-1002 / :1029`)、`src/init.ts`(`:85-88 / :262 / :287-288 / :342-354`)、`src/cli.ts`(`:46-58`)、`src/tools.ts`(`:114 / :175`)、`src/lib/mdcg_client.ts`(`:131-134 / :366`)、`src/lib/token_store.ts`(`:97 / :146-148 / :192`)、`src/lib/whitebox_llm.ts`(`:211`)、`src/index.ts`(`:181`)、`package.json`(`:85-91`,test 脚本 `:87`)、`test/verify_fixes.ts:10`、`test/verify_mutual.ts:7`、`md_cg/test_issue52_scan_condition_first.py:14`、`dsh/cordis-patch-profile-web.example.yml`(`:9 / :14-15 / :28-29`)、`dsh/hive-mcp.example.yml:4`、`dsh/README.md:31`、插件清单 15 处(§五-16 清单)。
|
|
156
|
+
7. **未由本席实跑、全部标注来源的读数(不得冒充)**:
|
|
157
|
+
- 各条守卫**红基线**命令与输出、N265 的 `!` 卡点两候选 → **材料 ③(修复席)**;本席未复跑(红基线须先回退产品源码)。
|
|
158
|
+
- **候选复核结论与逐条复现证据**(25 条)→ **材料 ①(四区复核席)**;本席仅读核其现码行号与在位性。
|
|
159
|
+
- **分诊编号与修法** → **材料 ②(分诊席)**。
|
|
160
|
+
- **三关读数材料值** → 材料 ④;本席已独立复跑(§四-3),读数一致。
|
|
161
|
+
- **双清单自检命中清单** → **材料 ⑤(自检席)**;本报告自身的自扫描见 §附。
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 五、遗留清单(defer 20 条,逐条给建议去向)
|
|
166
|
+
|
|
167
|
+
> 以下条目均**未修**(材料 ② 判 defer),按材料 ② 的顺序转写并给出建议去向;判据与严重度来源为材料 ①/②,行号为本席亲读现行值。
|
|
168
|
+
|
|
169
|
+
1. **`src/lib/roleplay_web.ts:774` 锚点落层查表恒 miss**(real / medium):映射表键写复数 `anchors`,网页三档实发单数 `anchor` → 取到 undefined 静默落 knowledge 层(非 PROTECTED_LAYERS),「不可遗忘」保护落空;且 node_id/键名与 md_cg 迁移面(复数 `anchors_items`)不一致。**建议去向**:下轮 tools-metadata 批(与 N266 同文件族);修法需就「网页写面统一为复数锚点、对齐迁移面」作跨面口径统一。
|
|
170
|
+
2. **`src/bridge.ts:249-251` settle 无请求形态闸**(real / medium):一行**对象**但非响应形态(同 id、带 method、无 result/error)仍被按 id 静默结算 → `resolve(undefined)`,挂起的 tools/list 被结掉、随后 TypeError;md_cg 自产行不触发(`_reply` 恒写 result/error),属第三方/非合规 stdio 对端的纵深缺口。**建议去向**:下轮 bridge-transport 批(修法=settle 前校验 result/error 键)。
|
|
171
|
+
3. **`src/init.ts:84-98` `--end` 的按标签匹配死代码**(real / low):`v` 已 toLowerCase 而 label 含大写 ASCII → `v === e.label` 分支不可达,交互菜单照抄 label 输入必被拒。**建议去向**:下轮 bridge-transport 批(对 label 也做小写归一比较,单处小修)。
|
|
172
|
+
4. **`src/lib/mdcg_client.ts:131-134` 注释枚举与真源不一致**(real / low):注释 6 项 vs `md_cg/nodefile.py` 的 `VERIFICATION_BASIS` 实为 8 项(另含 textbook / public_kb);与 `docs/mdcg/功能调用映射表_v0.1.md:240` 同错。**建议去向**:文档批一并校正(产品行为已正确,无运行时后果)。
|
|
173
|
+
5. **`src/lib/mutual.ts:277-278`(材料时点 :273-274)否定白名单不完整**(real / low):「未通过 / 无法通过 / 不能通过」等含子串「通过」落 pass(真函数实测);但生产接线经 `src/index.ts:499-502` 归一化双重遮蔽、可达性有限。**建议去向**:下轮 mutual 契约批(与 N268 同函数,建议一并统一否定词归一)。
|
|
174
|
+
6. **`src/lib/mutual.ts:187-191` 10s failTimer 死代码**(real / medium):50ms 的 okTimer 先 finish 并 clearTimeout → 非零退出的子进程仍返回 'started'(日志却写「守护进程退出 code=N」)。**建议去向**:下轮 mutual 契约批(修法须理顺 okTimer/failTimer 语义,非一行)。
|
|
175
|
+
7. **`src/lib/token_store.ts:146-148` 签发输出无类型闸**(real / low):非字符串 token 落 `[object Object]` 密钥环并注入下游(MDCG_TOKEN → 令牌格式非法 → 降级 guest)。**建议去向**:下轮凭据面批(修法=加 `typeof string` 闸)。
|
|
176
|
+
8. **`src/lib/mutual.ts:73-75` readHeartbeat 的 ts 无类型闸**(real / low):ts 缺失/非数字 → ageMs NaN → judgeStamp 判 'dead'(误报失联,方向保守)。**建议去向**:下轮 mutual 契约批(修法=有限性校验)。
|
|
177
|
+
9. **`src/tools.ts:114` pattern/maxLength 被静默丢弃**(real / low):DSH DSL(dsh-tools 的 schema.d.ts)无 pattern/maxLength 字段,转换器无承载落点;后端 `md_cg/mdcg.py` 的 `_NODE_ID_RE` 兜底已降级为调用失败+错误文案、非安全缺口。**建议去向**:**须使用者裁决**(是否推动上游 DSL/透传面扩展)。
|
|
178
|
+
10. **`src/lib/whitebox_llm.ts:205-236` 主路径不检查 r.isError**(real / low):md_cg 工具级失败以 isError 结果返回 → 降级契约失效(内部错误 JSON 被当白箱自答);该文件当前未接线(`src/index.ts:423-427` 仅注释)。**建议去向**:恢复接线前必修;暂并入下轮 tools-metadata 批。
|
|
179
|
+
11. **`src/index.ts:181` roleplayEntryButton 无类型闸**(real / low):Config 接口未声明该字段、读取端 `@ts-nocheck` 无检查(漂移两态 tsc 均静默);当前字段名一致、无现存漂移。**建议去向**:下轮 tools-metadata 批(接口补声明)。
|
|
180
|
+
12. **`package.json:87` + `.github/workflows/` 全 8 件(TS 套件无 CI 入口)**(real / medium):8 workflow 对 `npm test`/`tsx`/`node --test` 零引用(本席实测复核),改坏 TS 面的提交在 CI 全绿。**建议去向**:**须使用者裁决**(接入涉 devDeps 镜像源与 workflow 结构;v15 归档已界注「属另案」)。
|
|
181
|
+
13. **`test/verify_*.ts`(8 件不在收集面、4 件现红)**(real / medium):两件陈旧导入 `../src/mutual.ts`(模块已迁 `src/lib/`)、两件「handler 未注册」、verify_web 2/5;`safeTaskId`/`combineVerdict`/`ensureHarness`/`processTask` 四符号在收集面零覆盖。**建议去向**:**须使用者裁决**(收集面口径:重激活/退役;与 v29 §五-5、A6 同源)。
|
|
182
|
+
14. **`dsh/cordis-patch-profile-web.example.yml:28-29` root 解析注释与本征不符**(real / medium):模板称「按插件进程 cwd 解析」,实现一律锚插件包根 → 照抄(root: 'data/mdcg')把记忆真源落在包内,正是 datapath 记录的「pnpm 更新整目录替换」数据丢失形态。**建议去向**:文档/配置批(与姊妹样例 cordis.yml.example 口径对齐)。
|
|
183
|
+
15. **`dsh/cordis-patch-profile-web.example.yml:9` tools=brain 注释过时**(real / low):实现默认已是 core(丢失 override 后实际只剩 cg/stg 两基元)。**建议去向**:与上一条同批(同文件两处并修)。
|
|
184
|
+
16. **插件清单与 README 15 处「16 条工作纪律」**(real / low):真源已 18 条、随插件分发的 SKILL.md 自称 18;渲染/守卫矩阵未覆盖这些手写面(门禁全绿而文案陈旧)。15 处现值(本席 grep 复核):`marketplace.json:6/:11`;`claude/lingshu-memory/.claude-plugin/plugin.json:3`;`claude/lingshu-memory/README.md:3/:61`;`claude/README.md:11`;`codex/lingshu-memory/.codex-plugin/plugin.json:4/:14/:15`;`codex/lingshu-memory/README.md:3/:56`;`codex/README.md:10`;`dsh/README.md:61`;`zcode/README.md:10`;`codebuddy/README.md:10`。**建议去向**:文档批(15 处机械同步,可评估纳入守卫)。
|
|
185
|
+
17. **`dsh/hive-mcp.example.yml:4`(+ `dsh/README.md:31`)「4 个工具」**(real / low):server tools/list 实测 5 个(含 hive_restart);hive/README 已同步、唯 dsh 发布面未同步。**建议去向**:文档批。
|
|
186
|
+
18. **`package.json:87` 收集面 glob 不跨目录**(real / low):`test/*.test.ts` 不收集子目录(嵌套 fail 型测试静默不跑、套件照绿);修法一行改 `test/**/*.test.ts`。**建议去向**:下轮 tests-dist 批(与 CI 接入裁决联动)。
|
|
187
|
+
19. **`test/fullwidth_redact.test.ts:245-251`(⑤ 判据弱于自称)**(real / low):唯一断言只查「规则源含 ≥1 全角字符」,拦不住「词形只写半角」新规则(变异实测)。**建议去向**:随 N265 守卫强化**部分核销**(本轮已补 ⑧⑨ 两只退化形态的行为断言;⑤ 本身判据未动),余项下轮 tests-dist 批。
|
|
188
|
+
20. **`src/index.ts:499-502`(复核附注线索)**(未独立复核):「不完全同意 / 不予同意」含「同意」而落 pass。**建议去向**:另立候选交独立复核后再进分诊(材料 ① 原载为附注、未实跑,不在本清单确认面内)。
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 六、纪律合规声明
|
|
193
|
+
|
|
194
|
+
1. **工具面降级声明(第 7 条)**:本会话 `cg(op=route, intent=…)` 经 MCP 端 `mdcg` 正常返回(命中 v27/v28/v29 报告章节节点与编号口径知识),**未触发降级兜底**。
|
|
195
|
+
2. **命中纪律声明(第 0.2 条)**:本席开工按纪律第 0.1 条先 `cg(op=route)`、按第 18 条先读 `WORKSPACE_INDEX.md`;命中并在会话回复输出 `response.direct` 原文的条目:第 5 条(验证——三关复跑与守卫单跑)、第 8 条(中文思考)、第 15 条(命令执行/相对路径)、第 17 条(L1 直跑留痕)、第 18 条(工作区索引优先)。本报告各节即其执行痕迹。
|
|
196
|
+
3. **只读与不改产品源码**:本席**未改任何产品源码文件**——全部命令为只读判定腿(§四),唯一写入为本报告自身 `docs/eval/缺陷挖掘_自主迭代_v30.md`(新建)与一份临时跑器脚本(系统临时目录,用毕已删)。
|
|
197
|
+
4. **命令执行(第 15 条)**:python 腿经 `python`(argv + 显式 UTF-8 + `PYTHONUTF8=1`);`git`/`grep`/`ls`/`wc`/`sed` 为 MSYS 豁免面;**如实申报**:`npm test` 与 `npm run gate` 两条腿为原生程序直跑(未 python 包装),输出经文件重定向捕获、读取实测无乱码(按边界判据「本次调用是否产出非 UTF-8 字节流」实测为否);五件守卫单跑经 python 包装(`subprocess` + `encoding='utf-8'`)。
|
|
198
|
+
5. **任务派发(第 17 条)**:本席为工作流内报告撰写席,只做编排与只读判定,未派发新的执行性任务;只读命令合并为一条 L1 留痕(§四 首行)。
|
|
199
|
+
6. **归档(第 16 条)**:本席仅产出报告文件,未写灵枢记忆(N265–N269 的修复归档由修复席/编排会话按流程处置;本报告的归档由编排会话处置)。
|
|
200
|
+
7. **编号一致性(硬要求 ③)**:全文编号(N207 引用、N265–N269、`802` 注明 lint 码)与 §四-2 实占扫描一致。
|
|
201
|
+
8. **路径脱敏(硬要求 ②)与自伤规避(硬要求 ⑥)**:本报告全部路径为仓库**工作区相对路径**或中性占位(`<仓根>` / `%TEMP%` / `~/`);不含本机盘符绝对路径、不含凭据字面量;正文不含可触发 `link_check` / 发布面门禁的实例形态(自扫描见 §附;报告写入后 `check_publish_artifact` 的 `R1`/`R2`/`R3`/`R7` 对含本报告的清单全 PASS=机械证据;唯一红腿 `R4` 为「本报告 untracked」的追踪态判负、**非正文形态**,须随批次 `git add`,见 §四-3)。
|
|
202
|
+
9. **TS 面读数单列(硬要求 ⑤)**:§四-3 首条即 TS 面(`npm test` 退出码与 pass/fail/skip 计数),其后为 python 全量与 gate。
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 七、跳过项及原因
|
|
207
|
+
|
|
208
|
+
| 项 | 原因 |
|
|
209
|
+
|---|---|
|
|
210
|
+
| **未复跑各条「红基线」** | 红基线须先把产品源码回退到 HEAD 版再跑守卫;ask 明令「不得改动任何产品源码文件,只写这一份报告」。故红基线一律标注**材料 ③(修复席)**,本席未复跑、不冒充。 |
|
|
211
|
+
| **未端到端复现 §三 各候选** | 复现需构造夹具 / 起子进程,属材料 ① 复核席职责;本席只读核其现码行号与判据(§四-6)。 |
|
|
212
|
+
| **未实跑 win32 不可达腿** | 材料 ① 已自注未实测项(POSIX `.bin` 符号链接 / npx 实链路、registry 联网面、真 stdio 端到端等);本席同环境同限、不重复声明。 |
|
|
213
|
+
| **未逐件复读 8 个 workflow 全文** | 材料 ① 载「8 件对 npm test/tsx/node --test 零引用」;本席以 grep 实测复核该论断(§四-6),未逐行走读全文。 |
|
|
214
|
+
| **未裁决 N265 的 `!` 一字** | 属大设计裁决(改判据 vs 判 by-design),ask 未授权、红线禁放宽/删除既有断言;本席只如实并列两候选。 |
|
|
215
|
+
| **未动 `lib/` 构建产物同步** | `lib/` 为 gitignored 构建产物;`npm test` 含 build 段已重建。 |
|
|
216
|
+
| **未 `git add` / commit** | 提交由编排会话执行;本席只写报告。**连带读数**:本报告在发布面为 untracked,`check_publish_artifact` 的 R4 腿因此判负(唯一 1 项=本报告,须随批次 `git add`;两段 gate 读数见 §四-3)。 |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 附:双清单自查(内容政策 + 隐私)
|
|
221
|
+
|
|
222
|
+
**本席实跑扫描面 = 本报告自身**(`docs/eval/缺陷挖掘_自主迭代_v30.md`):
|
|
223
|
+
|
|
224
|
+
- 命令(逐项,**本席实跑**):盘符绝对路径正则 `grep -cE '([^A-Za-z0-9]|^)[A-Za-z]:[\\/]' docs/eval/缺陷挖掘_自主迭代_v30.md` → **0**;凭据形态正则 `grep -cE 'sk-[A-Za-z0-9]{12,}|mdcg1\.[A-Za-z0-9._-]{8,}|gh[pousr]_[A-Za-z0-9]{20,}|tk_[0-9a-f]{8,}|Bearer [A-Za-z0-9._-]{16,}' docs/eval/缺陷挖掘_自主迭代_v30.md` → **0**(报告内「四段令牌」描述一律用政策许可泛形 `mdcg1.<role>.<token_id>.<secret>`,尖括号占位不含完整字符类;扫描正则自身的文本亦不构成任何命中形态);Markdown 链接闭合形态(右方括号紧跟左圆括号的字面组合)计数 → **0**;行尾以 python 逐字节计数 → 纯 LF(无 CRLF / 无裸 CR)。
|
|
225
|
+
- `policyClean = true`(内容政策:无违规内容;**本报告对内容类别样本只作机制性中性描述、不复写字面量**);`privacyClean = true`(无盘符绝对路径、无真实凭据、无个人隐私)。
|
|
226
|
+
- **本报告已剔除材料中的凭据字面量**:材料 ①/③ 载有哑令牌样本(四段形态)与短前缀样本;本报告不复制其字面量,只描述形态与机制。
|
|
227
|
+
- **报告写入后发布面实测(本席实跑)**:`check_publish_artifact` 对含本报告的清单(文件数=1562)判定 `R1 凭据/密钥面`、`R3 隐私文本`、`R7 扫描面完整性`(未扫文本件=0)全 **PASS**——「报告在发布面扫描下零命中」的机械证据;唯一红腿 `R4` 为「本报告 untracked」的追踪态判负、**非正文形态**(§四-3 两段读数)。
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
*报告席产出:`docs/eval/缺陷挖掘_自主迭代_v30.md`。本席未改任何产品源码;全文数字凡非本席实跑均标注来源(① 复核席 / ② 分诊席 / ③ 修复席 / ④ 三关读数 / ⑤ 自检席)。*
|