@furongjun1999/dsh-memory 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +572 -465
  2. package/docs/README.md +1 -0
  3. package/docs/eval/DSH/346/227/245/345/277/227/347/264/242/345/274/225v2_/345/217/202/350/200/203dsh-TUI_v1.0.md +248 -0
  4. package/docs/eval/DSH/346/227/245/345/277/227/347/264/242/345/274/225/346/225/210/346/236/234/351/252/214/350/257/201_v1.0.md +209 -0
  5. package/docs/eval/DSH/347/253/257/347/274/272/351/231/267/344/270/223/351/241/271_v1.0.md +254 -0
  6. package/docs/eval/P1b2_/350/257/273/351/235/242/344/273/243/351/231/205/344/277/256/345/244/215_v1.0.md +124 -0
  7. package/docs/eval/bench_lingshu_self/bench_self.py +140 -0
  8. package/docs/eval/bench_lingshu_self/self_bench_result.json +404 -0
  9. package/docs/eval/bench_lingshu_self//347/201/265/346/236/242/350/207/252/345/272/223/347/253/257/345/210/260/347/253/257/346/243/200/347/264/242/345/256/236/346/265/213_v1.0.md +38 -0
  10. package/docs/eval//344/270/215/345/217/257/351/235/240/346/200/247/350/220/275/345/234/260_P0_v1.0.md +185 -0
  11. package/docs/eval//345/217/221/345/270/20306_/344/270/200/351/224/256/351/205/215/347/275/256/344/270/216DSH0172_v1.0.md +171 -0
  12. package/docs/eval//346/225/205/351/232/234/346/263/250/345/205/245/345/256/236/346/265/213_v1.0.md +422 -0
  13. 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 +100 -0
  14. 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 +197 -0
  15. 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_v1.md +156 -0
  16. 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_v10.md +210 -0
  17. 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_v11.md +227 -0
  18. 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_v12.md +203 -0
  19. 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_v13.md +233 -0
  20. 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_v14.md +191 -0
  21. 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_v15.md +213 -0
  22. 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_v16.md +214 -0
  23. 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_v17.md +199 -0
  24. 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_v18.md +183 -0
  25. 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_v19.md +207 -0
  26. 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_v2.md +156 -0
  27. 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_v3.md +152 -0
  28. 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_v4.md +128 -0
  29. 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_v5.md +114 -0
  30. 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_v6.md +192 -0
  31. 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_v7.md +187 -0
  32. 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_v8.md +207 -0
  33. 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_v9.md +203 -0
  34. package/docs/hive//345/256/211/345/205/250/345/256/241/350/256/241/345/256/236/351/224/232_v0.1.md +202 -0
  35. 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 +19 -3
  36. package/docs/images/lingshu-moonlight-covenant-poster-preview.jpg +0 -0
  37. package/docs/images/lingshu-moonlight-covenant-poster.png +0 -0
  38. 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 +40 -40
  39. package/docs/theory//344/270/215/345/217/257/351/235/240/345/256/232/347/220/206/344/270/216/345/244/261/346/225/210/344/274/230/345/205/210/346/241/206/346/236/266_v0.3.md +365 -0
  40. package/docs//344/270/215/345/217/257/351/235/240/346/200/247/347/220/206/350/256/272_v0.1.md +343 -0
  41. package/dsh/cordis-patch-profile-web.example.yml +35 -0
  42. package/lib/bridge.d.ts +9 -0
  43. package/lib/bridge.js +35 -0
  44. package/lib/cli.d.ts +3 -0
  45. package/lib/cli.js +66 -0
  46. package/lib/index.js +7 -1
  47. package/lib/init.d.ts +88 -0
  48. package/lib/init.js +287 -0
  49. package/lib/lib/roleplay_web.js +530 -443
  50. package/lib/lib/token_store.d.ts +7 -1
  51. package/lib/lib/token_store.js +12 -3
  52. package/md_cg/audit.py +12 -1
  53. package/md_cg/backfill.py +16 -15
  54. package/md_cg/backfill_bucket_zh.py +35 -0
  55. package/md_cg/bench_e2e_judge.py +532 -0
  56. package/md_cg/bench_e2e_locomo_qa.py +368 -0
  57. package/md_cg/bench_e2e_qa.py +256 -0
  58. package/md_cg/branches.py +18 -2
  59. package/md_cg/ccgc.py +3 -2
  60. package/md_cg/chain.py +19 -4
  61. package/md_cg/consolidate.py +7 -6
  62. package/md_cg/crosscheck.py +4 -3
  63. package/md_cg/crypto.py +439 -437
  64. package/md_cg/datapath.py +395 -335
  65. package/md_cg/evidence.py +8 -3
  66. package/md_cg/export.py +3 -1
  67. package/md_cg/forgetting.py +2 -2
  68. package/md_cg/fsutil.py +48 -0
  69. package/md_cg/hotcache.py +255 -238
  70. package/md_cg/interop.py +161 -22
  71. package/md_cg/judgment_manifest.py +177 -0
  72. package/md_cg/links.py +655 -622
  73. package/md_cg/mcp_server.py +282 -31
  74. package/md_cg/mdcg.py +702 -126
  75. package/md_cg/mdcos.py +454 -68
  76. package/md_cg/mreview/govern.py +5 -4
  77. package/md_cg/postings.py +4 -2
  78. package/md_cg/readcache.py +76 -18
  79. package/md_cg/reconcile.py +228 -0
  80. package/md_cg/review_cli.py +215 -0
  81. package/md_cg/routing.py +28 -0
  82. package/md_cg/run_tests.py +211 -0
  83. package/md_cg/scrub.py +862 -852
  84. package/md_cg/security.py +385 -275
  85. package/md_cg/selfreport.py +3 -2
  86. package/md_cg/signer.py +565 -562
  87. package/md_cg/sources.py +3 -2
  88. package/md_cg/stg.py +6 -0
  89. package/md_cg/sustain.py +1168 -1138
  90. package/md_cg/test_access_hints.py +147 -0
  91. package/md_cg/test_branch_discard_tombstone.py +136 -0
  92. package/md_cg/test_branches.py +259 -249
  93. package/md_cg/test_chain_read_isolate.py +168 -0
  94. package/md_cg/test_datapath_device_name.py +203 -0
  95. package/md_cg/test_emit_negtail_cache.py +156 -0
  96. package/md_cg/test_en_pipeline.py +186 -166
  97. package/md_cg/test_govern_directread.py +421 -0
  98. package/md_cg/test_i32_hotcache_env_key.py +218 -0
  99. package/md_cg/test_identity_attribution.py +228 -147
  100. package/md_cg/test_index_crossprocess_reload.py +301 -0
  101. package/md_cg/test_index_durability.py +238 -224
  102. package/md_cg/test_interop.py +4 -2
  103. package/md_cg/test_interop_judgment.py +228 -0
  104. package/md_cg/test_issue39_utf8_stdio.py +273 -0
  105. package/md_cg/test_links_concurrent_write.py +188 -0
  106. package/md_cg/test_merge_upsert.py +168 -0
  107. package/md_cg/test_n123_derive_expiry_chain.py +205 -0
  108. package/md_cg/test_n130_verify_falsified_protect.py +185 -0
  109. package/md_cg/test_n131_merge_gate.py +205 -0
  110. package/md_cg/test_none_id_write_guard.py +165 -0
  111. package/md_cg/test_p1x_ref_root.py +160 -0
  112. package/md_cg/test_p27_docindex.py +774 -765
  113. package/md_cg/test_p2_mcp.py +3 -0
  114. package/md_cg/test_p32_backfill.py +304 -298
  115. package/md_cg/test_p39_verify_flow.py +90 -50
  116. package/md_cg/test_p47_session_view.py +60 -25
  117. package/md_cg/test_propose_tail_index.py +157 -0
  118. package/md_cg/test_read_scope_b27.py +277 -0
  119. package/md_cg/test_readcache_default_on.py +168 -0
  120. package/md_cg/test_readcache_precise_inval.py +270 -0
  121. package/md_cg/test_readcache_prodpath.py +55 -7
  122. package/md_cg/test_reconcile_v0.py +294 -0
  123. package/md_cg/test_retr_s1.py +6 -2
  124. package/md_cg/test_retr_s1b.py +67 -0
  125. package/md_cg/test_retr_s7.py +8 -0
  126. package/md_cg/test_retr_s9_entity_ctx.py +181 -175
  127. package/md_cg/test_retr_score_once.py +208 -0
  128. package/md_cg/test_review_cli_attribution.py +177 -0
  129. package/md_cg/test_review_cli_visibility.py +235 -0
  130. package/md_cg/test_review_onepass.py +170 -0
  131. package/md_cg/test_rrf_graph_seed_cache.py +154 -0
  132. package/md_cg/test_security_audit.py +155 -0
  133. package/md_cg/test_security_audit_b26.py +161 -0
  134. package/md_cg/test_security_audit_v21.py +250 -0
  135. package/md_cg/test_semantic_canonical.py +255 -241
  136. package/md_cg/test_session_isolation.py +168 -0
  137. package/md_cg/test_snapshot_autoclose.py +187 -0
  138. package/md_cg/test_tail_watermark_race.py +208 -0
  139. package/md_cg/test_tenant_env_override_warn.py +139 -0
  140. package/md_cg/test_tenant_registry_corrupt_warn.py +151 -0
  141. package/md_cg/test_v14_fixes.py +415 -397
  142. package/md_cg/test_verify_dirty_reconcile.py +157 -0
  143. package/md_cg/theory.py +276 -273
  144. package/md_cg/tokens.py +734 -677
  145. package/md_cg/units.py +3 -2
  146. package/md_cg/vision_evidence.py +4 -3
  147. package/md_cg/whitebox_kb/wisdom/code_solidified.json +6195 -6195
  148. package/md_cg/whitebox_kb/wisdom/multilang_ir.py +128 -124
  149. package/md_cg/writepipe.py +554 -550
  150. package/package.json +11 -2
  151. package/src/bridge.ts +434 -401
  152. package/src/cli.ts +65 -0
  153. package/src/index.ts +526 -518
  154. package/src/init.ts +347 -0
  155. package/src/lib/roleplay_web.ts +1019 -932
  156. package/src/lib/token_store.ts +202 -192
@@ -0,0 +1,227 @@
1
+ # 缺陷挖掘报告 · 自主迭代 v11(compiler 二轮深挖)
2
+
3
+ - **日期**:2026-09-25
4
+ - **范围**(生效条件):第 11 轮 = compiler 二轮深挖,四区复核(recent / lexparse / codegen / legacy)共 **39 条目**(confirmed 28 / rejected 11)→ 去重后独立缺陷 **23**(本轮新发现 14 项 **N93-N106**:high 4 / medium 9 / low 1;legacy 复测确认 9 组:v3 N3、v3 N4、v3 N5、v3 N7、v3 N8、v3 N14、v3 N16+N17、v8 N64,及 v3 N5/N7/N9/N10/N18/N19/N20 七项复核备注合并 1 组;v3 N6 广义形态与本轮新 N96 同对象合并处置)→ 本轮修复 **5 个补丁**,覆盖 9 个缺陷面(**全闭 6**:N93 / N94 / N100 / N101 / v3 N3 直连形态 / v3 N8;**部分收窄 3**:N96(工作 0.05 查表生效)/v8 N64(SyntaxError 形态由假成功变真失败)/N105(顶层 return 假成功面兜住))→ 遗留 **17 个开口**(全留档 14 + 残面 3:medium 14 / low 3)
5
+ - **编号口径**:本轮新发现沿历轮 N 口径续编 **N93-N106**(v10 用至 N92);legacy 项沿用原轮次号(v3 N3/N4/N5/N7/N8/N14/N16/N17、v8 N64)——本报告会话经 `grep` 核实(v3.md:67-80 各条在档、v8.md:102 N64 在档);v3 N6 为已修狭义形态(lexer 无空格定向断开),本轮涉及其扩展面标注「v3 N6 广义形态」。材料与新增守卫文件另按区序以「缺陷N」编号(recent 1-7 / lexparse 8-14 / codegen 15-20 / legacy 21-28;守卫自标「N64/缺陷15/21」「顶层 return/缺陷16」与合并项「缺陷4+22」「13+27」「15+21」核实一致);代码内修复注释自标「缺陷20/缺陷22」等(parser.py:762/:771)系修复会话内部口径,与本报告 N 编号不一一对应,以本报告编号为准
6
+ - **回归**:`python -X utf8 scripts/run_tests.py --jobs 4` 全量 **189/189 通过、5 跳过(依赖缺失/平台不符)**——本会话独立实跑 exit 0,尾部 SUMMARY 与材料逐字一致;189 = v10 基线 184 + 本轮 5 个新守卫套件;`cargo test` **未运行**(Rust 面零改动);`npm test` **未运行**(TS 面零改动);`npm run gate` **通过**(材料口径;本会话复现第 2 环 `scripts/check_publish_artifact.py`:R1-R4 全 PASS、VERDICT=PASS、R4 非追踪=24 恰等于允许上限 24——临界通过,五个新守卫 untracked 已计入非追踪面,提交前 `git add` 登记后更稳)
7
+ - **行号口径**:材料缺陷行号为缺陷时点快照行号;本轮 compiler/parser.py、name_checker.py、api.py 三文件修复使行号整体下移,材料口径的修复落点行号与本会话读核现行行号有漂移,涉及处以**本会话读核现行行号**为准并注明材料口径(第二节逐项双标)
8
+ - **结构口径**(CCG 六要素):功能名(标题)/ 生效条件(范围与口径行)/ 子功能(第二~五节)/ 执行与验证方式(第四节:实跑命令与结果)/ 不适用条件(第七节:跳过与未运行项)
9
+
10
+ ---
11
+
12
+ ## 一、执行摘要
13
+
14
+ 本轮为 compiler 二轮深挖:四区复核 39 条目、11 项整项剔除(历轮已修面复测留档成立与不成立候选,非缺陷),5 补丁修复 9 个缺陷面、留档 17 个开口。四个主题:
15
+
16
+ 1. **情感权重上限威胁模型的全形态闭合(3 修 + 1 查表化,high×3)**:0.15 上限是本编译器核心安全约束(SEMANTICS.md 明文),v3 N6 修复(lexer 无空格定向断开 + 空间切换检测)只守住「若条件空间为伴侣,则止…于X」单通道——本轮实证三条旁路全部双官方入口过审:**赋值切换**(『条件空间 = 伴侣』是 SEMANTICS.md §1.2 明文机制且 VM 已真实现,checker 无联动,N93/F2)、**空格数·等于形态**(NUMBER 被 _merge_identifiers 拼入标识符名、DENGYU 被静默跳过,数值失去 LITERAL 类型即不过 _check_literal,N94/F3)、**引号数值·缺值**('"0.9"' string 字面量跳过上限、「于」缺值操作数静默丢弃,N101/F4);F4 并将硬编码「伴侣+0.15」查表化(CONDITION_SPACE_RULES 的工作 0.05 随之生效,N96 部分收窄;「默认 0.3」与既有钉死语义冲突不收,残面留档)。
17
+ 2. **裸 float() 崩溃族五点闭(1 修,high)**:「于 标识符 数字」序列使 `float('甲5')` 的 ValueError 裸穿 api.compile_source 主入口与 CLI(N100),同族四点(ID+PERIOD+NUMBER / NUMBER 分支 / 指令操作数 / 表达式首词)与 v3 N3 直连形态(毒 token NUMBER('.'))一并按同函数既有 try/except 先例五点防护(F1)——主入口契约(返回 CompileResult 而非崩溃)恢复。
18
+ 3. **验证终裁产物终验(1 修)**:v3 N8 橡皮图章(verdict 只复述 result.errors、全包无一处 compile(result.code)、漏记错误即盖章 passed=True/0.85)闭合——errors 为空分支盖章前插入 `compile(result.code, "<协议产物>", "exec")` 终验(F5),一并兜住 v8 N64(class=5 假成功)与 N105(顶层 return 假成功)的全部 SyntaxError 形态;早退路径 verdict=None 现状按守卫钉死不漂移。
19
+ 4. **留档与剔除(如实记录)**:新发现留档 8 项(「且」「非」无空格吞并、条件表达式裸名直译产物 NameError、两入口语义相反、RecursionError、算术链右结合错值、科学计数法静默截值、行号漂移)+ 残面 2 项;legacy 复测维持 7 组(v3 N4/N5/N7/N14/N16+N17、七项复核备注、N64 残面);11 项 rejected 均为历轮已修面复测成立(v3 N6 狭义/parser 双推进/N11/N12/N13/N15/v4 N21/codegen 错误回流)或候选不成立(「则」被吞形态诚实失败、负索引疑虑),邻接缺口已单列 confirmed 不重复计。
20
+
21
+ **对输入口径的核验**:输入称「四区 28 confirmed + 11 rejected = 39 条目 → 去重 23 独立缺陷 → 修 5 补丁 → 留档 18 条(材料口径)」。本会话以 `git status --porcelain` / `git diff --stat` + 逐处读核核对:改动面恰为——三个修复文件(compiler/parser.py、compiler/name_checker.py、compiler/api.py)+ 五个新守卫文件(untracked)——与五项修复一一对应;工作树另有一件非本轮修复的改动如实注明(`md_cg/whitebox_kb/wisdom/code_solidified.json` −2/+1,仅移除一行「缓存命中(指纹 …)」记录——v10 报告已注明为先前会话遗留的工作区变更,本会话 diff 读核一致);材料另注明 `docs/eval/bench_lingshu_self/` 系复核会话期间出现的 gitignored 实验产物目录、非本轮修复创建。跨区重复条目 5 组(详第三节合并说明),28 − 5 = 23 独立缺陷;5 补丁全闭 6 + 收窄 3 = 9 个缺陷面,23 − 6 = 17 开口,无多无少。材料留档 18 条经本会话核验后为 17 开口(v3 N3 直连形态经 F1 五点防护实证全闭,parse_source 直连不崩——本会话实跑确认,详第四节)。
22
+
23
+ ---
24
+
25
+ ## 二、修复清单(5 项,逐项 where / 问题 / 修复 / 前后对比 / 守卫)
26
+
27
+ ### F1(N100,high;同族含 v3 N3 直连形态)裸 float() 五点防护:「于 标识符 数字」不再击穿编译主入口
28
+
29
+ - **where**:主缺陷材料口径 `compiler/parser.py:843-846`(_parse_numeric_value ID+NUMBER 拼接分支 `float(prefix + self.current_token.value)` 裸调);同型族材料口径 :834-837(ID+PERIOD+NUMBER)、:821-822(NUMBER 分支)、:774-776(_parse_instruction NUMBER 操作数)、:984-989(_parse_expression NUMBER 分支)。修复落点现行(本会话读核):`compiler/parser.py:885-897`(ID+NUMBER)、:865-877(ID+PERIOD+NUMBER)、:844-856(NUMBER 分支)、:785-793(指令操作数)、:1037-1049(表达式首词)+ 生效条件注释 :711/:838 同步
30
+ - **问题**:「于/比较词」右操作数为「标识符+数字」形态时 `float('甲5')` 抛 ValueError——api.py:143(parse_tokens 调用)无 try/except,异常穿透 api.compile_source 主入口(不返回 CompileResult);CLI `python -X utf8 -m compiler.cli compile` 同崩(cli/__init__.py:131 直调无兜底);输入 token 全合法、api.py:134 词法门禁不拦。同族四点:ID+PERIOD+NUMBER('甲.5')、NUMBER 分支与表达式首词(词法错毒 token NUMBER('.') 可经 compiler.compile_source 进入——该入口 parse 先于词法错误检查,compiler.py:255-258)、指令操作数('止 . 。')
31
+ - **修复**(五处最小修复,全部照抄同函数 :839-842 既有 try/except ValueError→回落先例,错误文案沿 L{line}:C{col} 风格、与 lexer.py:465「非法数值」措辞一致):① ID+NUMBER 分支 float 失败记 `"L{line}:C{col} 非法数值: '甲5'"`、消费 NUMBER、回落 IdentifierNode(拼接名)(与 _merge_identifiers 对同序列的合并语义一致);② ID+PERIOD+NUMBER 同模式回落 IdentifierNode(prefix);③ NUMBER 分支 float 失败记错、推进、返回 None(两调用点均已处理 None);④ 指令 NUMBER 操作数 float 失败记错并丢弃该操作数(不造伪值);⑤ 表达式 NUMBER 分支 float 失败记错、0.0 占位保持 AST 完整(占位值不会流入产物——语法错误在 api.py:154 / compiler.py:257-258 终止编译)
32
+ - **前后对比**(守卫实测 + 材料红证):前——8 个崩点逐一复现('止 情感权重 于 甲 5。' 变体 '甲 0.9'/'甲.5'/'乙 5' 及条件体链经 api 主入口整栈崩溃;'止 情感权重 于 . 。'/'止 情感权重 于 甲。5。'/'计数 = . 5。'/'止 . 。' 经 compiler.compile_source 四点同崩;CLI 同路径崩溃退出);后——全部返回结构化报错(api 侧 `CompileResult(success=False, errors=["L1:C10 非法数值: '甲5'"])`;compiler 侧 `(None, {ok:False,…})`;CLI 干净退出 exit=1 并打印「❌ 编译失败 L1:C10 非法数值: '甲5'」);15 个合法样例(于-数值/小数/负数/指令/条件/循环/术曰路径)JSON 快照 before/after 文本比对 IDENTICAL;既有 9 个测试文件计数全绿不变。**v3 N3 直连形态**:修复前 `parse_source('甲 = .')` → ValueError 崩溃(v3.md:67 留档);修复后本会话实跑**不崩**——lex_err 与 parse_err 各记一条「非法数值」(详第四节)
33
+ - **守卫**:新增 `compiler/tests/test_parser_n3_numeric.py`(16 断言,tests/ 既有 check/print/exit 风格):主守卫/变体/条件体链/同族四点/合法程序 5 例。材料红证:修前 **5/16**(11 红全为 ValueError 崩溃);修后 16/16。**本会话实跑:16/16 通过,exit 0**
34
+
35
+ ### F2(N93,high)名实校验补条件空间赋值切换联动:『条件空间 = 伴侣』不再绕过 0.15 上限
36
+
37
+ - **where**:材料口径 `compiler/name_checker.py:670-707`(_check_assign 全程无条件空间检测逻辑);语义参照 `compiler/condition_vm.py:208-213`(STORE_NAME 对 BUILTIN_CONDITION_SPACE 真调 _switch_condition_space)与 SEMANTICS.md:42-46(「写 条件空间 = <空间名> → 替换条件空间栈栈顶帧」明文机制)。修复落点现行(本会话读核):`compiler/name_checker.py:719-723`(_check_assign 尾部钩子,值表达式检查之后、符号登记/used 标记次序不变)+ :883-915(新增 _apply_space_assign_switch,对齐 :856-881 _check_condition_space_switch 与 VM _switch_condition_space 语义)
38
+ - **问题**:赋值「条件空间 = 伴侣」是文档明文切换机制且 VM 已真实现(运行期真切换真止停),但静态校验无联动——赋值切换后 0.15 情感权重上限整体失效,**v3 N6 同威胁模型经赋值形态复活**;plain(『条件空间 = 伴侣』)、string(『条件空间 = "伴侣"』)、术曰嵌套三形态双官方入口均过审,对照比较式『若条件空间为伴侣,则止情感权重于0.9。』两入口均拒(L1:C17)
39
+ - **修复**(仅 name_checker.py +42/-1,VM 与其它模块零改动):① _check_assign 尾部 target=="条件空间" 时调 _apply_space_assign_switch(stmt.value_node);② 值取 IdentifierNode 名或 string 字面量值——「恢复默认」→ current_condition_space="默认"(对齐 VM 弹栈到根)、CONDITION_SPACE_RULES 内空间名→切换、未知且非预定义→沿 :877-881 同款仅警告;数值/表达式等非空间名形态不动上下文
40
+ - **前后对比**(守卫实测):前——三形态双入口过审(api success=True / VM ok=True 且 ConditionVM().run 后 condition_space_name='伴侣'、halt='halt');后——三形态双入口全部拒绝并点名约束(api:success=False、errors=['L2:C7 在「伴侣」条件空间中情感权重不可超过 0.15,当前值: 0.9']);合法面不变——上限内 0.15、白名单指令(德 0.1,即 test_defect_regression.py 既有用例)、恢复默认弹栈、写默认、无切换默认放行全部仍编译成功;『条件空间 = 未知空间』与比较式形态一致地仅获警告(黄金基线 22 例唯一差异即此例新增一条设计内对齐警告,守卫 ⑤a 钉死);『条件空间 = 0.9』等非空间名赋值不受影响
41
+ - **守卫**:新增 `compiler/tests/test_name_checker_space_assign.py`(16 断言):三形态×双入口 6 断言 + 比较式既有拒绝不回归 + 合法赋值切换 5 例 + 未知空间仅警告/非空间名不受影响。材料红证:修前 **7/16**(9 红);修后 16/16。**本会话实跑:16/16 通过,exit 0**
42
+
43
+ ### F3(N94,high)数值不再并入标识符名 + 「等于」与「于」同形取数值:空格数/等于形态不再失去 LITERAL 类型
44
+
45
+ - **where**:材料口径 `compiler/parser.py:806-810`(_merge_identifiers 把 TokenType.NUMBER 列入合并类型——空格数形态根因)与 :782-783(指令解析对 DENGYU 等非 YU token 静默 _advance——等于形态根因);下游 name_checker.py:646-652(仅 LITERAL 操作数过 _check_literal)经 parser 修复后无需改动。修复落点现行(本会话读核):`compiler/parser.py:829-833`(合并循环条件收紧为仅 IDENTIFIER)+ :761-778(数值介词分支 `in (YU, DENGYU)`)+ docstring/生效条件注释 :807-821 如实更新
46
+ - **问题**:0.15 上限只挂 LITERAL 节点,数值以非「于」介词形态出现即失去 LITERAL 类型——空格数『止情感权重 0.9』token 流 [ZHI, ID(情感权重), NUMBER(0.9), PERIOD] 但操作数=[ID('情感权重0.9')](NUMBER 被拼入标识符名,数值彻底消失);粘连『止情感权重等于1』操作数=[ID(情感权重), ID('1')](DENGYU 被静默跳过,数字以 IDENTIFIER 形态出现,仅「可能是 P1 一部分」警告)——N6 守卫的「同流同拒」仅对「于」单形态成立,两形态双入口过审;对照『…于1。』双拒
47
+ - **修复**(仅 parser.py 两处最小修复):① 合并循环类型条件从 (IDENTIFIER, NUMBER) 收紧为仅 IDENTIFIER——NUMBER 留在 token 流由调用方按数值操作数处理,保住 LITERAL 类型经 _check_literal 撞空间上限;ID-ID 合并保持同行规则不变。**处方修正(如实)**:缺陷 prescription 建议补列号连续判断,但实证 token 列号基数不一致——IDENTIFIER/KEYWORD 带显式起点列(lexer.py:370/:424),NUMBER 走 _emit 无 col 参数回退消费后终点列(lexer.py:463/:466/:505-507),朴素「列号连续」对 NUMBER 恒不成立、对带空格 ID-ID 会误杀现行合法合并,故按守卫意图取「数值不并入名」最小合法行为差实现;② _parse_instruction 数值介词分支从 `== YU` 扩为 `in (YU, DENGYU)`——「止 X 等于 Y」与「止 X 于 Y」同形取数值(非数字后随经 _parse_numeric_value 既有回落 IdentifierNode,操作数集合与旧行为一致)
48
+ - **前后对比**(守卫实测):前——空格数操作数 [ID('情感权重0.9')]、等于形态 [ID, ID('1')] 双入口过审;后——空格数 [ID(情感权重), Lit(0.9)]→双拒(L1:C20 点名 0.15);等于 [ID, Lit(1.0)]→双拒(L1:C18);无空格同族 [ID('情感权重0'), Lit(0.9)]→拒(L1:C19);「于」形既有拒/合法语义不变;合法面不变(无空间切换空格数放行、等于形上限内、多词标识符指令 ID-ID 合并保留——德 累积信任值/柔 响应强度/道 新信任路径/知足 验证单元、上轮条件空间赋值联动不回归)。黄金基线 30 例:29 例逐位 IDENTICAL,唯一差异为『…止情感权重等于0.15。』(grep 证实不在任何既有测试中)产物 `_runtime.halt("情感权重", "0.15")`→`_runtime.halt("情感权重", 0.15)`——旧字符串形态即本缺陷产物(阈值劣化为带引号串),修后与「于」形逐字对齐
49
+ - **守卫**:新增 `compiler/tests/test_parser_weight_value_forms.py`(17 断言):主守卫两形态×双入口 4 断言 + 无空格同族 + 「于」形对照 + 合法面 10 例。材料红证:修前 **12/17**(5 红均为双入口过审);修后 17/17。**本会话实跑:17/17 通过,exit 0**
50
+
51
+ ### F4(N101 + N96 工作面,high + medium)「于/等于」缺值守卫 + 上限查表化 + 止指令字符串阈值范围检查
52
+
53
+ - **where**:材料口径 `compiler/parser.py:761-766`(_parse_numeric_value 返回 None 即静默丢弃)与 `compiler/name_checker.py:812-819`(_check_literal 硬编码 current_condition_space=="伴侣" and value>0.15,对照 :400-419 CONDITION_SPACE_RULES 三空间均声明上限)。修复落点现行(本会话读核):`compiler/parser.py:770-777`(缺值/非数值记语法错误)+ `compiler/name_checker.py:807-831`(_check_literal 改调 helper)+ :833-855(新增 _check_weight_cap 表驱动查 CONDITION_SPACE_RULES.max_emotional_weight)+ :655-660(_check_instruction 对止指令字符串操作数的范围性检查)
54
+ - **问题**:① 引号数值绕过——『…止 情感权重 于 "0.9"。』string 字面量跳过 number 检查(name_checker.py:794 仅 literal_type=='number' 才进上限),success=True 假成功、产物阈值降级为字符串;② 「于」缺值——『止 情感权重 于。』操作数仅 [ID(情感权重)] 零错误过审(ZHI min_operands=0 无兜底),上限语义静默失效;③ 上限硬编码只判伴侣——CONDITION_SPACE_RULES 为工作声明 0.05、默认声明 0.3 但无任何执行点读取(全仓 grep 仅表定义六行),带空格正典写法即全绕过(合并缺陷4+22);④ 无「于」字符串降级——『…止 情感权重 "0.9"。』过审
55
+ - **修复**(两文件三处):① parser 侧 _parse_numeric_value 返回 None 时不再静默丢弃,按 _consume 同款风格记语法错误「L:C 「于/等于」后期望数值,实际得到: '<后续 token 或 EOF>'」(缺值与字符串形态一并覆盖);② name_checker 侧硬编码块改调 _check_weight_cap——表驱动查 max_emotional_weight(伴侣 0.15/工作 0.05),消息模板对伴侣逐字不变;**「默认」与未设空间不拦截**——默认规则自身 description 声明「默认条件空间,无特殊约束」,且显式默认/无空间放行 0.9 为本轮 F2 守卫 ④c/④d 钉死的既有语义,缺陷建议的「默认 0.3」与该钉死冲突,按硬约束不收、如实留档(N96 残面);③ _check_instruction 对止(ZHI)指令字符串操作数加范围性检查:可 float 解析且超限时报同款错(阈值不得经字符串降级绕过),非数值字符串("说明")与非止指令不受影响
56
+ - **前后对比**(守卫实测):前——引号数值/于·等于缺值/工作空间比较式 0.3 与赋值式 0.06/伴侣字符串阈值全部 success=True/ok=True 假成功;后——引号数值双拒(L1:C22)、缺值双拒(L1:C8)、工作空间两形态双拒(点名 0.05)、伴侣字符串阈值 0.9 拒;合法面:伴侣既有消息逐字不变(精确等值断言)、无空间/默认/恢复默认三例仍放行(F2 守卫钉死)、上限内 "0.1"/0.05 合法、非数值字符串不受影响。黄金基线 36 例(因前三轮改动未提交无法 git 回退,采用副本+逆编辑重建本轮前状态、还原后守卫复跑确认精确还原)逐位 IDENTICAL;翻反面 6 例全部 api/vm True→False 如期
57
+ - **守卫**:新增 `compiler/tests/test_weight_cap_string_missing.py`(21 断言):引号数值双入口/于·等于缺值 4 断言/工作空间查表 3 断言/字符串降级闭包 4 断言/伴侣消息逐字不变+默认钉死 4 断言/合法形态 4 断言。材料红证:修前 **12/21**(9 红全为假成功);修后 21/21。**本会话实跑:21/21 通过,exit 0**
58
+
59
+ ### F5(v3 N8 + v8 N64 SyntaxError 面 + N105 假成功面,medium)验证终裁产物 compile() 终验:漏记错误形态不再盖章假成功
60
+
61
+ - **where**:材料口径 `compiler/api.py:194`(success=len(result.errors)==0)+ :300-325(_verification_verdict 仅复述 result.errors)。修复落点现行(本会话读核):`compiler/api.py:299-325`——errors 为空分支、盖章通过之前插入 `compile(result.code, "<协议产物>", "exec")`(:320),SyntaxError/ValueError → `{'passed': False, 'reason': f"产物不可编译: {异常类型}: {异常}", 'authority': 'VERIFICATION_UNIT'}`,经既有 :190-191 回流「验证单元否决」入 errors → success=False 联动(:194 无需改动)+ 生效条件注释同步
62
+ - **问题**:v3 N8 终裁橡皮图章——全包无一处 compile(result.code)(grep 证实),漏记错误形态(v8 N64 的 class/lambda/True/含点合并名、N105 的顶层/循环体 return)一律盖章 passed=True/confidence=0.85「路径有效」假成功;词法/语法/名实早退路径 verdict=None——终裁恰在需要否决的场景缺席;codegen 错误路径否决触发但同一错误重复追加两遍(材料 codegen 区证据 ③,本修未动该重复面)
63
+ - **修复**(仅 api.py 一处 +19/-4):errors 为空分支盖章前产物终验——compile() 只查语法,合法产物仅运行期 NameError 不受影响(N98 的 NameError 面不在本修范围,留档);errors 非空分支与占位注释(:313-317 简化实现)未动;早退路径(词法/语法/名实)verdict=None 保持现状——该面已由 errors 否决(success=False),加 verdict 反会漂移既有钉死输出,以守卫 ⑤a/⑤b 锁定
64
+ - **前后对比**(守卫实测 + 材料探针):前——'class = 5。'/'返回 1。'/'返回 信任值。'/'返回 甲 加 乙。' 全部 success=True+verdict passed=True/0.85;修复会话对 test_full_pipeline 全部用例+四轮守卫语料+函数族共 51 例逐个对产物跑 compile()——既有绿测样例全数 compile-ok,仅上述 4 例不可编译(即缺陷证据形态),无合法绿测命中;后——四形态全部 success=False、verdict={'passed': False, 'reason': '产物不可编译: SyntaxError: …', 'authority': 'VERIFICATION_UNIT'}、errors 回流「验证单元否决」;已记错误面 verdict 原文不变(『定义 +(甲,乙):返回 甲。』仍为「编译错误: L1 名字 '+' …」);合法面 verdict 逐字不变(passed=True/0.85/路径有效);函数体内 return 合法(产物 def 内 return 可编译);早退路径 verdict=None 不漂移。黄金基线 44 例(副本+逆编辑重建,含 test_full_pipeline 八个旗舰用例原文)逐位 IDENTICAL;翻反 4 例 True→False 如期;既有拒绝面 3 例逐位 IDENTICAL
65
+ - **守卫**:新增 `compiler/tests/test_verdict_product_compile.py`(15 断言):主守卫 class/返回 + 顶层 return 同族闭包 + 已记错误面 verdict 原文不变(精确等值)+ 合法面七例(含旗舰 verdict 逐字不变)+ 早退路径 verdict=None 钉死。材料红证:修前 **10/15**(5 红全为假成功);修后 15/15。**本会话实跑:15/15 通过,exit 0**
66
+
67
+ ---
68
+
69
+ ## 三、发现明细(四区 confirmed 28 / rejected 11)
70
+
71
+ 以下每项「证据要点」为上游复核/修复会话的读码+实跑(材料原文,复现均在临时脚本/临时目录、测毕清理);标注★者本报告会话另做了现行代码读核(修复项)或历轮报告 grep 核实(编号归属)。legacy 项沿用原轮次号。
72
+
73
+ ### recent 区(7 confirmed:全部 new;3 rejected)
74
+
75
+ | # | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
76
+ |---|------|--------|----------|----------|------|
77
+ | N93 | compiler/name_checker.py:670-707(_check_assign)+ condition_vm.py:208-213、SEMANTICS.md:42-46 | high | 赋值「条件空间 = 伴侣」是文档明文切换机制且 VM STORE_NAME 真调 _switch_condition_space,但 checker 无联动——赋值切换后 0.15 上限整体失效(v3 N6 同威胁模型经赋值形态复活)(详 F2)★ | 临时脚本实跑(双入口):『条件空间 = 伴侣\n止情感权重于0.9。』VM ok=True 且 run 后 condition_space_name='伴侣'、halt='halt'(真切换真止停);API success=True;string/术曰嵌套形态同双过审;对照比较式两入口均拒(L1:C17) | **已修**(F2) |
78
+ | N94 | compiler/parser.py:806-810 + :782-783 + name_checker.py:646-652 | high | 0.15 上限只挂 LITERAL:空格数「止情感权重 0.9」NUMBER 被 _merge_identifiers 拼成 ID("情感权重0.9") 数值消失;「止情感权重等于1」数字产出为 IDENTIFIER 且 DENGYU 被静默跳过——「同流同拒」仅对「于」成立(详 F3)★ | 临时脚本实跑+AST 直验:空格形态操作数=[('IDENTIFIER','情感权重0.9')];等于形态=[ID(情感权重),ID('1')];双入口过审(后者仅「可能是 P1 一部分」warning);对照「于1」双拒(L1:C17) | **已修**(F3) |
79
+ | N95 | compiler/lexer.py:393-410 + name_checker.py:842-846 | medium | 「且/或」不在 CJK 断开前瞻集合(仅 大于/等于/小于/于/为(条件空间后)/不为):无空格「条件空间为伴侣且宁静」产出 ID(伴侣且宁静),未知空间名仅 warning 不设空间上下文——0.9 过审且 VM 执行 NameError,与 N6 守卫「无空格/带空格不得分叉」口径冲突 | 实跑:token 流 [ID(条件空间),WEI,ID(伴侣且宁静)];API success=True 仅 warning;ConditionVM().run 实抛 NameError(名实不符);对照去「且宁静」即被拒 | 留档(medium) |
80
+ | N96(含 v3 N6 广义形态,与 legacy 区同对象合并) | compiler/name_checker.py:812-819 对照 :400-419(CONDITION_SPACE_RULES) | medium | 三空间均声明 max_emotional_weight(工作 0.05/默认 0.3)但 _check_literal 硬编码只判伴侣——同一规则表同一字段只强制一种空间,工作/默认上限形同虚设(详 F4)★ | 实跑:『若条件空间为工作…于0.3。』『…为默认…于0.9。』双入口过审零拦截;全仓 grep max_emotional_weight 仅表定义六行零执行点读取 | **部分已修**(F4:伴侣 0.15/工作 0.05 查表生效;「默认 0.3」与钉死语义冲突不收——残面留档) |
81
+ | N97 | compiler/lexer.py:393-410 + parser.py:896-920 + name_checker.py:759-770 | medium | 「非」不在断开集合:无空格吞并后整串单 IDENTIFIER 作合法裸名条件编译成功(产物执行必 NameError);带空格「条件空间 非 伴侣」反被语法错误拒——同一语义两种写法结论相反(N6 分叉口) | 实跑:『若条件空间非伴侣…』token 流单 [ID('条件空间非伴侣')],双入口零错误零警告;VM run 抛 NameError、api 产物裸名 if 同崩;带空格对照两入口 success=False(期望 '则' 实际 '非') | 留档(medium) |
82
+ | N98 | compiler/codegen.py:490-491(裸名直译,对照 :366-367 指令操作数 json.dumps 字符串化)+ api.py:177-197/:300-325 | medium | 条件表达式标识符裸名直译,比较双方在产物中从未定义——旗舰样例(api.py:349-353 模块自测原句)success=True 但产物一执行即 NameError;「产物须可 compile/exec」契约对条件语句类源码整体不成立;VM 路径有 _builtin_load 兜底(condition_vm.py:181-194)产物路径无等价机制 | 实跑:产物 153 行 'if 条件空间 == 伴侣:',模块级 exec 实抛 NameError 定位 <gen> line 153;复核注明首轮把 exec 置于函数内系作用域伪差异,模块级复现与原证据一致 | 留档(medium;分诊备注:F5 终验只兜语法不兜 NameError,需产物侧内建名机制,改动面大故缓) |
83
+ | N99 | compiler/compiler.py:179-185(VM 路径 float 失败抛名实不符)对照 codegen.py(无对应校验直译 accumulate_trust)与 name_checker.py:322-327(DE 约束 operand_types 含 identifier、example='德 累积信任值') | medium | 同一源码两官方编译入口结论相反:『德 累积信任值。』VM ok=False / API success=True 且产物把字符串当信任值累积——api 侧假成功、VM 侧拒掉约束表 example 与模块自测原句,二者必有一错 | 实跑双入口对照;『道 新路径。德 累积。』同样 VM 拒(报错指向德自身操作数)/API 过;旗舰样例即含此句 | 留档(medium) |
84
+ | ~~lexer.py:396-410~~(rejected) | — | — | **复测留档成立,非缺陷**:第 8 轮 lexer CJK 定向断开修复(v3 N6 狭义)无回归 | 实跑 compiler/tests/test_lexer_v3n6.py →「v3 N6 词法定向断开回归: 15/15 通过」exit 0;基线复测无空格/带空格『…于0.9』两入口均被拒(L1:C17 点名 0.15 上限) | 剔除 |
85
+ | ~~lexer.py:408-410~~(rejected) | — | — | **疑虑不成立**:text[i-4:i] 负索引——i<4 时切片长度恒 <4 不可能等于四字串「条件空间」,i≥4 为正常区间切片 | 实跑 tokenize('')→1 token(EOF)、tokenize('。')→2 token 均 0 error 无异常;2 万字超长行(若条件空间为+伴×20000+。)6 token、0 error、0.01s——边界无崩溃无性能问题 | 剔除 |
86
+ | ~~parser.py:350-359~~(rejected) | — | — | **复测留档成立,非缺陷**:parser 双推进修复点无回归 | 实跑『道 新路径。德 累积。』VM 报错仅指向德自身操作数(「德」作为第二条语句被正常解析非被吞);『道 新信任路径。』两入口均 ok=True | 剔除 |
87
+
88
+ ### lexparse 区(7 confirmed:5 new + 2 legacy 复测;0 rejected)
89
+
90
+ | # | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
91
+ |---|------|--------|----------|----------|------|
92
+ | N100(与 codegen 区 v3 N3 同族条目同对象合并) | compiler/parser.py:844(ID+NUMBER 拼接分支;同族 :834-837/:821-822/:775/:985) | high | 「于/比较词」右操作数为「标识符+数字」形态时裸 float() 拼串崩溃——ValueError 未捕获直穿 api.compile_source 主入口(api.py:143 无 try),CLI 同崩;输入无词法错误,词法门禁不拦(详 F1)★ | 实跑:'止 情感权重 于 甲 5。'→ValueError '甲5'(最深帧 parser.py:844);'…于 甲。5。'→'甲.5';'若 甲 等于 乙 5 则 道 A。'完整链 _parse_statement→_parse_condition→_parse_comparison→_parse_numeric_value 同崩;CLI `python -X utf8 -m compiler.cli compile` 整栈崩溃退出 | **已修**(F1) |
93
+ | N101 | compiler/parser.py:761-766 | high | 伴侣 0.15 上限被引号数值绕过('"0.9"' string 字面量整体跳过上限检查、产物阈值降级字符串);「于」后缺值/非数值时数值操作数被静默丢弃(_parse_numeric_value 返回 None 即弃、ZHI min_operands=0 无兜底),上限语义静默失效(详 F4)★ | 实跑:引号 0.9 双入口 success=True/ok=True、AST 操作数 LITERAL('0.9', literal_type='string')、产物 `_runtime.halt("情感权重", "0.9")`;『止 情感权重 于。』操作数仅 [ID(情感权重)] 零错误过审 | **已修**(F4) |
94
+ | N102 | compiler/parser.py:1029 | medium | 超长算术链/超深嵌套触发未捕获 RecursionError:_parse_expression 与 _parse_binary_tail 相互右递归每运算符约 2 帧耗尽默认递归限,单行约 1500 字符即触发,api/cli 均无兜底 | 实跑:'甲 = 1'+400×'加1'+'。'→success=True;500×→RecursionError 逃逸 compile_source;嵌套 '若 甲 等于 1 则 '×600 同崩 | 留档(medium) |
95
+ | N103 | compiler/parser.py:1016-1032 | medium | 算术链无优先级且右结合:链式≥2 运算符静默给出错误结果且零警告(docstring 自述「右结合单级,满足循环体自增语义」——单运算符正确,链式即错) | 实跑 VM 路径:'甲 = 10。甲 = 甲 减 2 减 3。'→11.0(常规 5,10-(2-3) 右结合);'甲 = 2。甲 = 甲 乘 3 加 1。'→8.0(常规 7);errors/warnings 全空;compiler.py:227-234 按 AST 后序忠实发射字节码 | 留档(medium) |
96
+ | N104 | compiler/lexer.py:489-491 | low | 未闭合字符串把换行当结束引号消费(pos+=1、column+=1,未 line+=1 也未 column 复位)——同一遍扫描内其后全部 token/错误定位失真 | 实跑 tokenize:errors=['L1:C7 字符串未闭合'] 后,第 2 行内容全报 line=1、乙(L2:C3) 实际在第 3 行;api 因词法错误提前返回不会误编译 | 留档(low) |
97
+ | v3 N3(直连形态,与 legacy 区同对象合并)★ | compiler/lexer.py:460-466(_read_number float 失败仍 _emit NUMBER)→ parser.py:985(同型 :775) | medium | 【复测·维持 v3 收窄口径】毒 token 照发 + parser 裸 float():parse_source/parse_tokens 直连未捕获 ValueError 崩溃;主入口被 api.py:134 词法门禁拦住不崩 | 实跑 parse_source('甲 = .')→ValueError '.'(最深帧 parser.py:985);token 流 [ID(甲),EQUALS,NUMBER('.'),EOF]+lex_errors=['L1:C5 非法数值'];v3.md:67 留档在案 | **已修**(随 F1 五点防护——本会话实跑 parse_source('甲 = .') 不崩,lex/parse 各记一条「非法数值」;lexer 毒 token 照发形态留存由 parser 防护兜底) |
98
+ | v3 N5(复测) | compiler/lexer.py:480-493 | low | 【复测·维持 v3 结论未修】字符串到 EOF 未闭合零诊断:while 到 EOF 自然退出无 error 追加(仅换行分支 :483 报未闭合),其后全部语句被吞进一个 STRING 操作数,api 报 success=True | 实跑 compile_source('…道 "未闭合到EOF后面还有 若 X 则 道 Y。 等')→success=True、errors=[]、warnings=[]、statements=2,第二语句为 道+[LITERAL(吞入内容)]——其后源码整体蒸发 | 留档(low) |
99
+
100
+ ### codegen 区(6 confirmed:2 new + 4 legacy 复测;4 rejected)
101
+
102
+ | # | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
103
+ |---|------|--------|----------|----------|------|
104
+ | v8 N64(与 legacy 区同对象合并)★ | compiler/codegen.py:390(_gen_assign f"{stmt.target} = ",同族 :490-491 _gen_expression 裸名 _write(expr.name);对照 _py_name :543-553 闸,仅函数名/调用名挂载) | medium | 【复测成立·v8.md:102 留档,v9/v10 无处置】_py_name 校验漏挂赋值目标与裸标识符表达式——Python 关键字/含点合并名直接拼入产物,假成功(success=True+verdict passed=True/0.85 但产物 compile() 必 SyntaxError);name_checker.py:692-701 目标不在符号表即自动登记零报错 | 实跑:'class = 5。'/'lambda = 1。'/'x = lambda。'/'若 lambda 等于 1 则 德。'/'True = 1。'/'x = 甲 0.15。' 全部 success=True,产物用户段实为 'class = 5.0' 等,compile() 依次抛 SyntaxError;附带 'x = None。' 产物可 compile 但 DSL 变量名静默替换为 Python None(语义漂移) | **部分已修**(F5 终验使 SyntaxError 形态真失败;_py_name 两处补挂与 None 语义漂移残面留档) |
105
+ | N105 | compiler/codegen.py:429-435(_gen_return 无缩进层级/函数上下文判断;上游 parser.py:394-398 / name_checker.py:522-525 均不限语境) | medium | 顶层/循环体内「返回」生成模块级 return——产物必炸 'return' outside function 但全链零错误(假成功);且与 VM 后端语义分歧:VM 把顶层 RETURN 定义为合法「程序结束」(condition_vm.py:293-301 无调用帧即 VMHalt),同一源码两后端一生一死 | 实跑:'返回 1。'→success=True、verdict passed=True/0.85、产物 'return 1.0' compile() SyntaxError;'当 甲 等于 1 执行 返回 1。' 同错;VM 对照 ok=True 且 halt='halt' | **部分已修**(F5 终验兜住假成功面;两后端语义统一残面留档) |
106
+ | v3 N8(与 legacy 区同对象合并)★ | compiler/api.py:194(success=len(errors)==0)+ :300-325(_verification_verdict) | medium | 【复测成立·未修→本轮修复】终裁橡皮图章:verdict 只复述 result.errors(:313-317 信任值/条件空间检查为「简化实现」占位注释),对产物可编译性零独立验证(全包无一处 compile(result.code)),漏记错误即盖章 passed=True/0.85「路径有效」;词法/语法/名实早退路径 verdict=None——验证单元恰在需要否决的场景缺席;codegen 错误路径否决触发但同一错误重复追加两遍(详 F5) | 实跑三路:名实错误路径 verdict=None;'class = 5' 假成功盖 passed=True/0.85;'定义 +(甲,乙):返回 甲。' errors 恰两条同义重复;对照回流有效面——gen.errors 经 :184 extend 在 verdict 前回流否决链有效;v3.md:70 留档在案 | **已修**(F5;同义错误重复两遍面未动,如实注明) |
107
+ | v3 N3 同族(→并入 N100 同对象) | compiler/parser.py:843-846(NUMBER 分支 float(标识符+数字原文) 无 try;对照 :839-842 PERIOD 分支有 try) | high | 【N3 同族复测成立·主入口契约破裂】ValueError 逃出 api.compile_source,主 API 崩溃而非返回 CompileResult 报错 | 实跑:'止 情感权重 于 甲 5。'/'甲 0.9'/'若条件空间为伴侣,则止情感权重于甲 0.9。'(traceback 经条件体指令链同落 :844)同崩;对照纯数值 success=True 产物 compile() OK;v3.md:67 留档该函数同型问题 | **已修**(随 F1,不重复占坑) |
108
+ | v3 N7(复测)★ | compiler/api.py:27(定义)——compile_source(:100-197) 全程无消费点;cli/__init__.py:37-38,126-129 暴露给用户 | medium | 【复测成立·未修】strict 纯死配置——help 宣称「严格模式(警告视为错误)」且 CLI 暴露 --strict/--no-strict,但 compile_source 从不读取 options.strict,strict=True 带警告仍 success=True(契约假承诺);对照 VM 路径消费在位(compiler.py:265 if strict and name_errors) | 实跑:compile_source('甲 = 乙。', strict=True) 与 strict=False 结果逐字段完全相同;grep api.py 'strict' 仅 :27 定义/:211 透传/:361 自测三处;v3.md:69 留档在案;修复注意(材料注明):CLI default=True,接通后带警告源码默认从成功变失败,需回归既有套件 | 留档(medium) |
109
+ | N106 | compiler/lexer.py:433-466(_read_number 只拼 [-]?\d[.]?\d 不支持 e/E)+ codegen.py:332-333(IDENTIFIER 语句无分派仅 warning 丢弃;v3 N12 修复只补五种不含 IDENTIFIER) | medium | 科学计数法静默截值:'1e5' 切成 NUMBER(1)+IDENTIFIER(e5),赋值只取 1,e5 残段作裸标识符语句被 _generate_statement 静默丢弃——success=True 产物 x = 1.0,值静默错 10 万倍(静默错值形态的假成功) | 实跑:'x = 1e5。'→success=True、warnings 含「未处理的语句类型: IDENTIFIER」、产物用户段仅 'x = 1.0'、compile() OK(无报错纯错值);'x = 1e-3。' 更早暴露为语法错不掩盖;:806-812 _merge_identifiers 只比行号不比列号(注释自认),'甲 0.15' 合并出 '甲0.15' 流入裸拼(已并入 N64 条目) | 留档(medium;分诊备注:残段产物可 compile,F5 终验兜不住值错,需 lexer/分派侧修) |
110
+ | ~~api.py:184~~(rejected) | — | — | **复测留档成立,非缺陷**:codegen 错误回流有效 | 实跑 '定义 +(甲,乙):返回 甲。'→success=False、verdict={'passed': False, 'reason': "编译错误: L1 名字 '+' …", 'authority': 'VERIFICATION_UNIT'}——gen.errors 经 :184 extend 在 :187 verdict 前回流,否决链有效 | 剔除 |
111
+ | ~~codegen.py:302-331 + :278-292~~(rejected) | — | — | **复测留档成立,非缺陷**:v3 N12/N15/N11 三项修复在位 | 实跑:'当 甲 等于 1 执行 甲 = 2。' 产物含 while 且 compile() OK;函数/调用/术曰样例产物 compile() 均 OK;'甲 = 1。' 产物尾部不含 protocol_procedure() 调用(_has_procedure 闸 :291 在位);'x = "a\\b"。' json.dumps 转义且 compile() OK | 剔除 |
112
+ | ~~parser.py:341-359~~(rejected) | — | — | **复测留档成立,非缺陷**:parser 双推进(start_pos + 推进条件)在位 | 实跑 parse_source('道 新路径。德 旧路径。')→2 条 INSTRUCTION_STMT、零 parse_errors——句号后下一条语句不再被吞(与 recent 区 rejected 第 3 条同对象,材料两区各留档一次) | 剔除 |
113
+ | ~~name_checker.py:792-819~~(rejected) | — | — | **绕过尝试不成立**:N6 守卫面无空格/赋值通道均拦 | 实跑:无空格『若条件空间为伴侣,则止情感权重于0.9。』→success=False(L1:C17);赋值通道『若条件空间为伴侣,则 甲 = 0.9。』→同名实错误拦截;合法 0.15→success=True;'…于甲 0.9' 合并标识符通道未绕过约束但触发主入口 ValueError 崩溃——已单列 N100 confirmed,非本项绕过 | 剔除 |
114
+
115
+ ### legacy 区(8 confirmed:全部 legacy 复测;4 rejected)
116
+
117
+ | # | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
118
+ |---|------|--------|----------|----------|------|
119
+ | v8 N64(同对象) | compiler/codegen.py:390 + :490-491 | medium | 【=codegen 区同对象条目】_py_name 漏挂赋值目标与裸标识符表达式——ASCII 关键字假成功(本会话注:本行「本会话」指上游复核会话) | 实跑:'class = 5'/'import = 5'/'x = lambda'/'甲 = class' 四条全部 success=True、verdict passed=True/0.85,产物第 153 行实为 `class = 5.0`,compile() 均 SyntaxError;对照 _gen_func_def/_gen_call_expr 均先经 _py_name 记错拦截 | **已修**(随 F5 终验兜底,不重复占坑;_py_name 补挂残面见遗留) |
120
+ | v3 N6 广义形态(同对象) | compiler/name_checker.py:813-818 对照 :400-419 | medium | 【=recent 区 N96 同对象】工作 0.05/默认 0.3 上限无任何执行点——带空格正典写法即全绕过,无需任何特殊形态 | 实跑:工作 0.3/默认 0.9 双入口 success=True 零拦截;全仓 grep(os.walk compiler/ 除 __pycache__)max_emotional_weight|min_trust 仅命中表定义六行零执行点 | **已修**(随 F4 查表化,不重复占坑;「默认 0.3」残面见遗留) |
121
+ | v3 N8(同对象) | compiler/api.py:299-325 + :186-191 + :134-136/:154-156/:165-167 | medium | 【=codegen 区同对象条目】终裁橡皮图章:成功路径零真实检查、早退路径 verdict=None 缺席、codegen 错误路径把同一错误重复追加两遍 | 实跑三面:①名实错误 verdict=None;②'class = 5' 盖 passed=True;③'定义 +…' errors 两条同义重复 | **已修**(随 F5,不重复占坑) |
122
+ | v3 N14 | compiler/codegen.py:451(_gen_shuyue 每块恒 writeln("def protocol_procedure():")) | medium | 【留档复测·维持】多术曰块同名 def protocol_procedure 互相覆盖:前面的术曰块静默变死代码,success=True 零警告,语义丢失 | 实跑:'术曰:1。道 路径一。\n术曰:1。道 路径二。'→success=True、warnings=[]、产物 def 计数=2、footer 只调一次;两段 exec 探针(按产物真实调用点 _runtime.create_path 复现)→create_path 实际调用=[('路径二',)]——「路径一」注册从未发生;v3.md:71 留档在案 | 留档(medium) |
123
+ | v3 N16/N17(一条覆盖两号,含 loop④⑦ 同型共 4 处) | compiler/tests/test_func_compile.py:92-95(⑤)+ compiler/tests/test_loop_compile.py:74-81(⑤)/ :62-67(④)/ :99-106(⑦) | medium | 【留档复测·维持】测试静默跳过洞:被测源编译失败时整段 check 位于 if rX["ok"]: 内且无 else 记账——用例无声消失、套件仍报全绿 exit 0;死循环保护(max_steps 安全网)自身的回归测试恰在其被测源坏掉时自行静默通过 | monkeypatch 复现(patch compiler.compiler.compile_source 对含 marker 子串源码强制 ok=False 后 runpy 重跑):func「9/9 通过」exit 0、loop「10/10 通过」exit 0,四次注入对应 check 行整段消失;loop src3 与 ①a 同源间接覆盖成立非独立洞;v3.md:73-74 留档在案 | 留档(medium;纯测试基建零生产风险,宜早修) |
124
+ | v3 N4 | compiler/parser.py:560 与 :567(then/else body=_parse_single_statement)+ :625(_parse_func_def body 同型) | medium | 【留档复测·维持】条件/函数体多语句静默泄漏顶层:『;』续接的第二条语句泄漏为顶层无条件语句——「仅条件成立才执行」漂移为「恒执行」零错误;同分隔符在循环体 _parse_statement_or_block(:639-673)却正确收进块,同分隔符两套语义 | 实跑 parse_source:'若 条件空间 为 伴侣 则 道 新路径;德 旧路径。'→parse_err=[]、「德 旧路径」确在顶层;'定义 增():返回 1;返回 2。'「返回 2」泄漏顶层;v3.md:68 留档在案 | 留档(medium) |
125
+ | v3 N3(同对象) | compiler/lexer.py:460-466 → parser.py:985(同型 :775) | medium | 【=lexparse 区同对象条目】毒 token 击穿裸 float():parse_source/parse_tokens 直连未捕获 ValueError 崩溃(compile_source 入口被词法错误提前返回拦住不崩——v3 收窄口径) | 实跑 parse_source('甲 = .')→ValueError '.';对照 compile_source 同源不崩(success=False、errors=["L1:C5 非法数值: '.'"]) | **已修**(随 F1 覆盖,不重复占坑) |
126
+ | 七项复核备注(v3 N5/N7/N9/N10/N18/N19/N20,合并 1 组) | compiler/lexer.py:470-484 / compiler/api.py:27-30,100-197,170-175,201-223 / compiler/tests/test_pbc.py:19-20 / compiler/tests/test_full_pipeline.py:171-189 / compiler/tests/test_compiler_c2.py:80-87 | low | 【复核备注·属实未入列】(v3 轮因 7 条上限未单列,本轮逐项验证全部属实):字符串 EOF 未闭合零诊断(N5,与单列条目同对象)、strict 死配置(N7,同对象)、LLM 建议计算后丢弃(N9)、validate_source 名不副实跑全流水线(N10)、pbc 测试用 VM 不存在的伪造操作码(N18:Opcode['PUSH']/'STORE' KeyError 而 test_pbc 往返清单含此二码)、恒真断言(N19:'halt' in code 恒真使双析取恒真)、文案与源码不符(N20:源码「4 大于 3」对文案「5>4」) | 上游会话逐项实跑/读核七项全部属实(材料原文;N5/N7 与上列单条重复) | 留档(low,供后续批次排期) |
127
+ | ~~lexer.py:396-410~~(rejected) | — | — | **维持已修结论(勿重复报)**:v3 N6 狭义形态 | 实跑:无空格『若条件空间为伴侣,则止情感权重于0.9。』→success=False(L1:C17);'…不为伴侣…' 同拒;修复锚点定向断开在位,守卫 test_lexer_v3n6.py 15/15 exit 0(与 recent 区 rejected 第 1 条同对象,材料两区各留档一次) | 剔除 |
128
+ | ~~lexer.py:380-411~~(rejected) | — | — | **维持不成立结论**:N6 广义候选 A「则」被吞形态——token 实吞(ID(伴侣则止情感权重))但 compile_source → success=False("L1:C15 期望 '则',实际得到: '于'",parser _consume 显式报错)——诚实失败,零错误静默绕过不成立 | 实跑 tokenize + compile_source 双对照;带空格对照正确触发 0.15 拦截 | 剔除 |
129
+ | ~~name_checker.py:513-530~~(rejected) | — | — | **维持已修结论(勿重复报)**:v4 N21 语句分派缺失已修——函数体内条件空间约束生效 | 实跑:'若 条件空间 为 伴侣,则 定义 增():止 情感权重 于 0.9。'→success=False(L1:C34 点名 0.15/0.9);三分支读码在位 | 剔除 |
130
+ | ~~codegen.py:362-372/:319-331/:502-512/:278-292~~(rejected) | — | — | **维持已修结论(勿重复报)**:v3 第五节 codegen 四项 N11(json.dumps 转义)/N12(五分支补齐)/N13(表达式记错+None 占位)/N15(_has_procedure 闸 + footer 条件调用)修复锚点在位(各自带修复注释) | 间接行为验证:全 9 套 compiler 测试逐文件实跑全绿 exit 0(c4 8/8、c2 12/12、condition_vm 13/13、defect_regression 18/18、full_pipeline、func 10/10、lexer_v3n6 15/15、loop 11/11、pbc 5/5) | 剔除 |
131
+
132
+ ### 跨区重复条目合并说明(5 组,28 条目 → 23 独立缺陷)
133
+
134
+ - 裸 float 主入口崩溃:lexparse 区 N100(:844)+ codegen 区 v3 N3 同族(:843-846)——同对象(同函数同分支同崩溃形态,前者 new / 后者 legacy 复测),随 F1 修复;
135
+ - N3 毒 token 直连:lexparse 区(lexer.py:460-466 + parser.py:985)+ legacy 区(同 where)——同对象,随 F1 覆盖;
136
+ - v3 N8 终裁橡皮图章:codegen 区(api.py:194+:300-325)+ legacy 区(api.py:299-325)——同对象,随 F5 修复;
137
+ - v8 N64:codegen 区(codegen.py:390)+ legacy 区(codegen.py:390+:490-491)——同对象,随 F5 终验兜底(补挂残面留档);
138
+ - v3 N6 广义形态(工作/默认上限):recent 区 N96(name_checker.py:812-819)+ legacy 区(:813-818)——同对象,随 F4 查表化(工作 0.05;默认 0.3 残面留档)。
139
+
140
+ ---
141
+
142
+ ## 四、验证(门禁结果)
143
+
144
+ 以下「本报告会话实跑」均为本报告写作会话在仓库根目录实际运行(第一手);「材料口径」为复核/修复会话已跑、本会话未重跑(如实区分):
145
+
146
+ | 命令 | 结果 | 来源 |
147
+ |------|------|------|
148
+ | `python -X utf8 scripts/run_tests.py --jobs 4`(全量) | `===== SUMMARY 189/189 通过,5 跳过(依赖缺失/平台不符) =====`,exit 0——尾部含 hive 五守卫(test_mcp_entry_guard / test_exec_empty_response / test_orch_int_args / test_wm_traversal / test_worker_scope 等)与 swarm 套件 PASS,与材料尾部逐字一致;189 = v10 基线 184 + 本轮 5 个新守卫 | **本会话实跑** |
149
+ | `python -X utf8 compiler/tests/test_parser_n3_numeric.py` | `=== N3 裸 float 崩溃族守卫: 16/16 通过 ===`,exit 0(材料红证:修前 5/16,11 红全为 ValueError 崩溃——本会话未重跑红证) | **本会话实跑** |
150
+ | `python -X utf8 compiler/tests/test_name_checker_space_assign.py` | `=== 赋值切换上下文联动守卫: 16/16 通过 ===`,exit 0(材料红证:修前 7/16) | **本会话实跑** |
151
+ | `python -X utf8 compiler/tests/test_parser_weight_value_forms.py` | `=== 情感权重非于形态守卫: 17/17 通过 ===`,exit 0(材料红证:修前 12/17) | **本会话实跑** |
152
+ | `python -X utf8 compiler/tests/test_weight_cap_string_missing.py` | `=== 情感权重引号/缺值绕过守卫: 21/21 通过 ===`,exit 0(材料红证:修前 12/21,9 红全为假成功) | **本会话实跑** |
153
+ | `python -X utf8 compiler/tests/test_verdict_product_compile.py` | `=== 验证终裁产物终验守卫: 15/15 通过 ===`,exit 0(材料红证:修前 10/15) | **本会话实跑** |
154
+ | `parse_source('甲 = .')` 直连核验(N3 直连形态现状,python -X utf8 临时 -c 探针,测毕即弃) | **不崩**:lex_err=["L1:C5 非法数值: '.'"]、parse_err=["L1:C6 非法数值: '.'"]——v3 N3 直连崩溃面已随 F1 五点防护闭合(材料留档清单仍列该项系分诊时点口径,分诊备注「目标1 同族顺带防护即覆盖」已兑现,本会话实证) | **本会话实跑** |
155
+ | `python -X utf8 scripts/check_publish_artifact.py`(`npm run gate` 第 2 环单独复现) | R1 凭据/密钥面 PASS、R2 私有数据面 PASS、R3 隐私文本 PASS、**R4 非追踪件面 PASS(非追踪=24,允许=24)**,`VERDICT=PASS`——与材料「npm run gate:通过」一致。**临界注明**:五个新守卫 untracked 状态已计入非追踪面,恰触允许上限,提交前 `git add` 登记后余量更足 | **本会话实跑** |
156
+ | `npm run gate`(全链) | 材料口径**通过**;本会话未重跑全链、仅单独复现 gate 的第 2 环检查器(上 row,VERDICT=PASS) | 材料 + 本会话部分复现 |
157
+ | `cargo test` | **未运行**——Rust 面零改动(本会话 git status 证实改动面仅 compiler/ 三文件 + 五守卫 + 一件先前遗留 wisdom json;rust/ 与 swarm/ 未动) | 双方一致 |
158
+ | `npm test` | **未运行**——TS 面零改动(src/ 与 test/ 未动,本轮缺陷与修复全部在 python 面) | 双方一致 |
159
+
160
+ **上游会话已运行、本会话未重跑的验证**(材料原文,如实区分):五项修复的守卫红证(修前各一跑:5/16、7/16、12/17、12/21、10/15,含 F3/F4 的 git stash 或副本+逆编辑回退复验);黄金基线快照比对(F1 15 例 / F2 22 例 / F3 30 例 / F4 36 例 / F5 44 例,逐位 IDENTICAL 与翻反如预期,临时脚本均于系统临时目录/测毕清理);CLI 崩溃形态修复前后对照(修前整栈崩溃 → 修后 exit=1 +「❌ 编译失败」);修复会话的递进全套件回归(每修一项增一守卫,最终 14 文件全绿——c4_tooling 8/8、compiler_c2 12/12、condition_vm 13/13、defect_regression 18/18、full_pipeline、func_compile 10/10、lexer_v3n6 15/15、loop_compile 11/11、pbc 5/5 + 五新守卫 16/16/16/16/17/17/21/21/15/15);四区复核的全部复现(临时脚本,sys.path 指仓库根,测毕已删/清理)。
161
+
162
+ **git 工作树核对**(本会话 `git status --porcelain` / `git diff --stat` + 逐处读核):改动面 = **三个修复文件**(compiler/parser.py(改动 98 行)、compiler/name_checker.py(改动 91 行)、compiler/api.py(改动 23 行)——四文件合计 179 insertions/36 deletions,含三文件修复本体;行数为 git diff --stat 的增删合计口径)+ **五个新守卫文件**(untracked:compiler/tests/test_parser_n3_numeric.py / test_name_checker_space_assign.py / test_parser_weight_value_forms.py / test_weight_cap_string_missing.py / test_verdict_product_compile.py)——与五项修复一一对应。另有一件非本轮修复的改动如实注明:`md_cg/whitebox_kb/wisdom/code_solidified.json`(−2/+1,本会话 diff 读核:仅移除一行「缓存命中(指纹 …)」记录及邻行拼接)——v10 报告已注明为先前会话遗留的工作区变更,非本轮触点,未动;材料另注明 `docs/eval/bench_lingshu_self/` 系复核会话期间出现的 gitignored 实验产物目录(非本轮修复创建)。未做任何 commit。
163
+
164
+ ---
165
+
166
+ ## 五、遗留清单(17 个开口:medium 14 / low 3)
167
+
168
+ 材料留档 18 条,经本会话核验后:**1 条全闭**(v3 N3 直连形态——随 F1 实证覆盖,见第四节)、**3 条部分收窄留残面**(N96 / v8 N64 / N105)、**14 条全留档**。
169
+
170
+ ### medium(14 项)
171
+
172
+ | # | where(缺陷时点) | 问题 | 留档理由 / 处置线索(材料口径) |
173
+ |---|------|------|------------------------------|
174
+ | N95 | compiler/lexer.py:393-410 + name_checker.py:842-846 | 「且/或」不在 CJK 断开前瞻集合:无空格「伴侣且宁静」产出未知空间名仅 warning——0.9 过审且 VM 执行 NameError,过审产物不可执行 | 修复=「且/或」纳入断开集合(需评估「且行」「或者」类名词误切代价)或未知空间名升级为错误;与 N97 同面可同轮处置 |
175
+ | N96 残面 | compiler/name_checker.py:833-855(现行 _check_weight_cap) | 「默认 0.3」上限未收:F4 查表化已使伴侣 0.15/工作 0.05 生效,但默认空间放行(0.9 过审)为 F2 守卫 ④c/④d 钉死的既有语义,与 CONDITION_SPACE_RULES 默认 0.3 声明冲突 | 需语义决策:改规则表(默认 description 自述「无特殊约束」与 0.3 声明本就自相矛盾)或钉死放行——两难留档,不建议无决策硬接 |
176
+ | N97 | compiler/lexer.py:393-410 + parser.py:896-920 + name_checker.py:759-770 | 「非」无空格吞并后整串单 IDENTIFIER 作合法裸名条件编译成功,产物运行必崩;带空格同语义反被拒——两种写法结论相反 | 修复=「非」纳入断开集合或裸标识符条件在名实校验记错;与 N95 同面 |
177
+ | N98 | compiler/codegen.py:490-491 + api.py 产物路径 | 条件表达式标识符裸名直译,比较双方在产物中从未定义——旗舰样例产物一执行即 NameError;与 VM 内建名兜底语义分歧 | 分诊备注:F5 的 compile() 终验只兜语法不兜 NameError,本条需产物侧内建名机制(改动面大故缓);修复方向=条件操作数字符串化(对齐指令操作数 json.dumps 形态)或产物头部注入内建名解析器 |
178
+ | N99 | compiler/compiler.py:179-185 对照 codegen.py 与 name_checker.py:322-327 | 『德 累积信任值。』两官方入口结论相反:VM 拒(约束表 example 原句)/API 假成功把字符串当信任值累积 | 二者必有一错:需裁决 DE 指令标识符操作数语义(数值要求 vs 标识符累积),裁决后对齐两入口;旗舰样例含此句 |
179
+ | N102 | compiler/parser.py:1029(现行 _parse_binary_tail/_parse_expression 相互右递归) | 超长算术链/超深嵌套触发未捕获 RecursionError,一行输入击穿编译主入口(api/cli 均无兜底) | 修复=迭代化右递归或入口包 RecursionError 转 CompileResult 报错(字数上限即输入约束) |
180
+ | N103 | compiler/parser.py:1016-1032(现行行号随 F1/F3 下移) | 算术链无优先级且右结合:链式≥2 运算符静默给出错误结果且零警告(docstring 自认右结合单级设计) | 修复=优先级爬升或至少链式≥2 运算符发 warning;涉及循环体自增语义回归(func/loop 套件钉死面)需同轮回归 |
181
+ | v8 N64 残面 | compiler/codegen.py:390 + :490-491 | _py_name 补挂两处(赋值目标/裸标识符表达式)未做:F5 终验已使 SyntaxError 形态从假成功变真失败,但报错定位从「名字不是合法标识符」(精确)退化为「产物不可编译」(粗粒度),且 'x = None' 语义漂移形态产物可 compile 终验兜不住 | 分诊备注:留待下批完整修复(补挂模板在位 :543-553,两处对称校验即可) |
182
+ | N105 残面 | compiler/codegen.py:429-435(_gen_return)| 顶层/循环体「返回」两后端语义分歧未统一:F5 终验已兜住假成功面(模块级 return 不可编译即拒),VM 后端仍把顶层 RETURN 定义为合法程序结束——同一源码 VM ok=True / API success=False | 分诊备注:两后端语义统一需另议(VM 语义有 v3 func 套件⑤注释钉死,改 API 侧 parser/name_checker 语境限制更稳) |
183
+ | v3 N7 | compiler/api.py:27 —— compile_source(:100-197) 全程无消费点;cli/__init__.py:37-38,126-129 | strict 纯死配置(CLI help 假承诺) | 修复=接通 options.strict(VM 路径消费在位 compiler.py:265 可参照);材料注明回归注意:CLI default=True,接通后带警告源码默认从成功变失败,需回归既有套件 |
184
+ | N106 | compiler/lexer.py:433-466 + codegen.py:332-333 | 科学计数法静默截值:'1e5' 值静默错 10 万倍,success=True | 分诊备注:残段产物可 compile,F5 终验兜不住值错,需 lexer 侧(_read_number 支持 e/E)+ 分派侧(IDENTIFIER 语句记错而非 warning 丢弃)同修 |
185
+ | v3 N14 | compiler/codegen.py:451 | 多术曰块同名 def 互相覆盖,前面术曰块静默死代码 | 修复=块序号后缀命名或重名记错(涉及 footer 调用点联动) |
186
+ | v3 N16/N17 | compiler/tests/test_func_compile.py:92-95 + test_loop_compile.py:74-81/:62-67/:99-106 | 测试静默跳过洞 4 处:被测源编译失败时用例无声消失、套件仍全绿 exit 0 | 纯测试基建零生产风险宜早修;修复=if rX["ok"]: 补 else 记账一条 check(v3.md:117 建议随下批顺手清账) |
187
+ | v3 N4 | compiler/parser.py:560/:567 + :625 | 条件/函数体『;』续接多语句静默泄漏顶层——「仅条件成立才执行」漂移为「恒执行」零错误,同分隔符两套语义 | 修复=then/else/函数 body 改调 _parse_statement_or_block(循环体既有正确实现)或 _skip_punctuation 不吞『;』;注意既有用例对单语句 body 的兼容 |
188
+
189
+ ### low(3 项)
190
+
191
+ | # | where(缺陷时点) | 问题 | 留档理由 / 处置线索(材料口径) |
192
+ |---|------|------|------------------------------|
193
+ | v3 N5 | compiler/lexer.py:480-493 | 字符串到 EOF 未闭合零诊断:其后全部语句被吞进一个 STRING 操作数,api 报 success=True | 修复=while 到 EOF 自然退出处追加「字符串未闭合」error(与换行分支 :483 对称),一行级 |
194
+ | N104 | compiler/lexer.py:489-491 | 未闭合字符串吞换行后 line 不递增、column 不复位,其后全部 token 行号列号漂移(api 因词法错误提前返回不会误编译,定位失真) | 修复=消费换行时 line+=1、column 复位;与 v3 N5 同函数可同轮处置 |
195
+ | 七项复核备注(v3 N9/N10/N18/N19/N20 五项独有 + N5/N7 与上重复) | compiler/api.py:170-175,201-223 / compiler/tests/test_pbc.py:19-20 / compiler/tests/test_full_pipeline.py:171-189 / compiler/tests/test_compiler_c2.py:80-87 | LLM 建议计算后静默丢弃(N9)、validate_source 名不副实跑全流水线(N10)、pbc 测试用 VM 不存在的伪造操作码(N18)、恒真断言(N19)、文案与源码不符(N20)——上游会话逐项验证全部属实 | 供后续批次排期(v3 轮因 7 条上限未单列的本轮补验清单);N18/N19/N20 为测试面小改 |
196
+
197
+ **优先级建议**(据材料处置线索汇总):N95/N97(「且/或/非」断开集合)与 v3 N5/N104(lexer 未闭合字符串族)可同轮速收;N103 算术链与 N102 递归深度同属表达式解析面建议同轮;v3 N16/N17 测试记账为最低成本项宜顺手清账;N96 残面(默认 0.3)与 N99(德语义裁决)、N105 残面(两后端统一)需语义决策,建议下轮专项;v8 N64 残面补挂与 N106 科学计数法为「模板在位」类接线项;N98 产物侧内建名机制改动面最大垫底。
198
+
199
+ ---
200
+
201
+ ## 六、纪律合规声明
202
+
203
+ 1. **定位先读索引**:本报告写作前已读 WORKSPACE_INDEX.md(按职责定位 compiler/ 为「中文(术数)编译器——词法→语法→名实校验→白名单代码生成→验证终裁」、docs/ 为文档归域、docs/eval 为历轮报告所在),未做全盘浏览。
204
+ 2. **结论引证**:所有修复与缺陷均引 path:line(缺陷时点快照行号;本轮三文件修复使材料口径的修复落点行号漂移,涉及处另注本会话读核现行行号——如 F1 主缺陷材料称 :843-846、读核实为现行 :885-897,以读核值为准);第三节证据要点摘自任务输入的四区复核材料(上游会话读码+实跑);第四节「本会话实跑」九项为第一手命令与输出原文(全量回归、五守卫、parse_source 直连探针、gate 第 2 环、git 核对),材料口径与未跑项(cargo/npm test/gate 全链/守卫红证重跑/复现场景重跑)均如实标注来源,无一冒充。
205
+ 3. **修复落盘核验**:五项修复的现行代码本报告会话逐处读核——F1 parser.py:885-897/:865-877/:844-856/:785-793/:1037-1049 五点防护、F2 name_checker.py:719-723 钩子 + :883-915 新方法、F3 parser.py:829-833 合并收紧 + :761-778 介词分支、F4 parser.py:770-777 + name_checker.py:807-831/:833-855/:655-660、F5 api.py:299-325(compile 终验 :320);五个新守卫文件存在性与本会话实跑全绿(16/16/16/16/17/17/21/21/15/15 计数见第四节)均确认;legacy 编号归属经 v3.md:67-80 / v8.md:102 grep 核实(v3 N3/N4/N5/N7/N8/N14/N16/N17、v8 N64)。代码内修复注释自标「缺陷20/缺陷22」等系修复会话内部编号,与本报告 N 编号不一一对应,已如实注明。
206
+ 4. **安全测试纪律**:材料中全部复现均为临时脚本/临时目录(sys.path 指向仓库根、探针于系统临时目录,测毕 rm/删除清理),不触真实数据目录;本报告会话只运行守卫套件、回归与门禁检查器及一条临时 -c 探针(parse_source 直连核验,即写即弃),未做任何攻击/越权复现。
207
+ 5. **已修项不重复报**:本轮 11 项 rejected 均为历轮已修面的复测留档成立(v3 N6 狭义定向断开、parser 双推进、v3 N11/N12/N13/N15、v4 N21、api.py:184 codegen 错误回流)或候选不成立(「则」被吞诚实失败、负索引疑虑),其邻接缺口已单列 confirmed 不重复计;第 1-10 轮已修清单(v1~v10 第二节)与 git log -p -- compiler/ 近期改动未再报;N96/N64/N105 为 v3 N6 广义/v8 N64/顶层 return 的**残面**(本轮修复未覆盖部分),非重复立项;材料留档清单中的 v3 N3 直连形态经本会话实证已随 F1 全闭,从遗留剔除并注明依据(第四节直连核验行)。
208
+ 6. **隐私脱敏**:全文只写仓库相对路径;材料的本机绝对路径(盘符/用户目录/系统临时区路径)一律转录为「系统临时目录/临时脚本」等占位描述;无任何 key/token 字面量(wisdom json 移除行的指纹值不转录);环境变量名与标识符(HIVE_*、MDCG_ROOT 等)为源码标识符非凭据值,为证据必需而保留;定稿前经机械扫描复查(盘符/用户目录/凭据字面量形态零命中,见下方自查)。
209
+
210
+ ---
211
+
212
+ ## 七、跳过项及原因
213
+
214
+ - **cargo test 未运行**:Rust 面零改动(本会话 git status 证实 rust/ 与 swarm/ 未动,改动面仅 compiler/ 三文件 + 五守卫 + 一件先前遗留 wisdom json)。
215
+ - **npm test 未运行**:TS 面零改动(src/ 与 test/ 未动,本轮缺陷与修复全部在 python 面)。
216
+ - **`npm run gate` 全链未于本会话重跑**:材料口径通过;本会话以 gate 的第 2 环 `scripts/check_publish_artifact.py` 单独复现 VERDICT=PASS(R1-R4 全 PASS、R4 非追踪=24=允许 24 临界)——五个新守卫 untracked 已计入非追踪面恰触上限,提交前 `git add` 登记后余量更足,处置归编排会话提交前裁决,本会话未擅自登记/提交。
217
+ - **守卫红证未在本会话重跑**(含 F2 的 git stash 回退、F3/F4/F5 的副本+逆编辑重建本轮前状态等回退跑法):上游修复会话已跑且逐项留痕(修前红/修后绿数字见第二节各守卫行),本会话重跑会反复改动工作树(前三轮改动未提交、无法整体回退),风险大于收益——以修复落盘读核 + 修后绿态实跑 + 全量回归替代佐证,如实标注。
218
+ - **四区复核的复现场景未在本会话重复**:上游复核会话已在临时环境执行并逐项声明「测毕已删/清理」(第三节证据来源均标注为材料原文);本会话仅补一条 parse_source 直连探针以裁决 N3 直连形态现状(材料留档与 F1 覆盖面的口径分歧),未重跑其余复现。
219
+ - **F4 的「默认 0.3」上限不收**:非跳过而是处置决策——与 F2 守卫 ④c/④d 钉死的默认放行语义冲突(且默认规则表 description「无特殊约束」与 0.3 声明自相矛盾),按硬约束不收、如实留档为 N96 残面(第五节)。
220
+ - **F5 的早退路径 verdict=None 现状不补**:该面已由 errors 否决(success=False),补 verdict 反会漂移既有钉死输出,以守卫 ⑤a/⑤b 锁定现状;同因 codegen 错误路径同义错误重复两遍面未动(材料证据已记录,未列入本轮修复面)。
221
+ - **git 未提交**:commit 需任务方指令;工作树保持三补丁 + 五守卫原状(及一件先前会话遗留的 wisdom json 变更)。
222
+
223
+ ---
224
+
225
+ *报告依据:任务输入的第 11 轮材料(四区复核 28 confirmed + 11 rejected 明细及证据、五项修复的 where/问题/修复/前后对比/守卫/verified_by、留档未修 18 条、门禁结果);本报告会话的修复落盘读核(五补丁共 13 处现行行号锚点)、五个新守卫文件实跑(16/16、16/16、17/17、21/21、15/15 全绿 exit 0)、parse_source 直连探针(N3 直连形态不崩实证)、全量回归实跑(189/189 通过、5 跳过,退出码 0)、gate 第 2 环复现(VERDICT=PASS、R4 临界注明)、legacy 编号历轮报告 grep 核实、git 工作树核对、报告脱敏机械扫描。*
226
+
227
+ *自查双清单:①材料覆盖——四区 39 条目全部入文(recent 7+3 / lexparse 7 / codegen 6+4 / legacy 8+4),confirmed 28 与剔除 11 一一对应,跨区重复 5 组合并说明单列,去重后 23 独立缺陷(新 N93-N106 共 14:high 4/medium 9/low 1 + legacy 复测 9 组)数目吻合,5 补丁逐项五要素齐全(where/问题/修复/前后对比/守卫),全闭 6 + 收窄 3 = 9 缺陷面、23 − 6 = 17 开口(全留档 14 + 残面 3)无多无少,材料留档 18 条经本会话核验后 1 条全闭(v3 N3 直连,附实证依据)如实调整并注明,legacy 项全部标注原轮次(v3 N3/N4/N5/N7/N8/N14/N16/N17、v8 N64、v3 N6 广义形态,编号经 v3.md:67-80/v8.md:102 grep 核实),门禁四项(python/cargo/npm test/gate)与跳过原因一一对应,材料与实跑不一致处(守卫红证口径、留档清单 N3 直连条目状态)如实记录;②纪律——全部结论引 path:line 或注明材料来源,九项第一手实跑命令与输出在第四节(全量回归、五守卫、直连探针、gate 第 2 环、git 核对),未跑项(cargo/npm test/gate 全链/红证/复现场景重跑)无一冒充为已跑,材料口径行号与读核现行行号的漂移(F1 :843-846→:885-897 等)如实注明,代码注释内部编号与本报告编号的口径差如实注明,工作树一件非修复改动(先前会话 wisdom json)如实注明,全文无本机绝对路径、无 key/凭据字面量(机械扫描盘符/用户目录/凭据字面量形态零命中;文中「token」均为词法 token 术语)。*