@furongjun1999/dsh-memory 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +588 -552
  2. package/codebuddy/CODEBUDDY.md +10 -10
  3. package/data/policy.json +27 -0
  4. package/docs/discipline/harnesses.yaml +31 -0
  5. package/docs/discipline/templates/full.md.tmpl +1 -1
  6. package/docs/discipline/templates/rules.mdc.tmpl +1 -1
  7. 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
  8. 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
  9. package/docs/eval/DSH/347/253/257/347/274/272/351/231/267/344/270/223/351/241/271_v1.0.md +254 -0
  10. 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 +418 -0
  11. 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
  12. 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 +441 -0
  13. 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 +398 -0
  14. 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 +498 -0
  15. 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 +669 -0
  16. 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 +683 -0
  17. 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
  18. 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 +205 -0
  19. package/docs/eval//346/200/247/350/203/275/344/270/223/351/241/271_/345/206/267/346/237/245/350/257/242/344/270/216/345/206/205/345/255/230_v1.0.md +218 -0
  20. package/docs/eval//346/225/205/351/232/234/346/263/250/345/205/245/345/256/236/346/265/213_v1.0.md +10 -0
  21. 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 +646 -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_v18.md +183 -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_v19.md +207 -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_v20.md +283 -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_v21.md +224 -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_v22.md +223 -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_v23.md +293 -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_v24.md +303 -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_v25.md +230 -0
  30. package/docs/hive//346/243/200/347/264/242/350/267/257/345/276/204/344/270/216/350/256/244/347/237/245/347/273/223/346/236/204/345/245/221/347/272/246_v0.1.md +20 -0
  31. 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
  32. package/docs/mdcg/README/350/257/246/347/273/206/347/211/210_v0.4.10.md +12 -0
  33. 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
  34. package/docs/mdcg//345/217/221/345/270/203/351/227/250/347/246/201/351/223/276_v0.1.md +21 -9
  35. package/docs/mdcg//347/201/265/346/236/242/350/256/260/345/277/206/345/212/250/350/257/215/345/215/217/350/256/256_v1.0-draft.md +7 -2
  36. package/docs/mdcg//350/256/244/347/237/245/345/233/276_/347/264/242/345/274/225/344/270/216/345/267/245/347/250/213/350/247/204/350/214/203/345/214/226_/350/256/241/345/210/222_v0.1.md +39 -3
  37. 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 +220 -0
  38. package/docs/plans//347/234/237/346/272/220/347/264/242/345/274/225_/351/200/232/347/224/250/346/234/272/345/210/266_v0.3.md +227 -0
  39. package/docs/plans//350/234/202/345/267/242/346/250/241/345/236/213/345/257/206/351/222/245/351/205/215/347/275/256/351/235/242_v1.0.md +385 -0
  40. 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 +460 -460
  41. package/dsh/cordis-patch-profile-web.example.yml +35 -0
  42. package/lib/bridge.js +24 -2
  43. package/lib/cli.d.ts +3 -0
  44. package/lib/cli.js +66 -0
  45. package/lib/hooks.d.ts +31 -2
  46. package/lib/hooks.js +219 -16
  47. package/lib/init.d.ts +88 -0
  48. package/lib/init.js +302 -0
  49. package/lib/lib/prompt_safety.d.ts +52 -1
  50. package/lib/lib/prompt_safety.js +76 -1
  51. package/md_cg/audit.py +652 -379
  52. package/md_cg/bench6_arms.py +1 -1
  53. package/md_cg/bench_p0.py +1 -1
  54. package/md_cg/branches.py +2 -2
  55. package/md_cg/ccgc.py +1071 -1006
  56. package/md_cg/chain.py +1 -1
  57. package/md_cg/consistency.py +97 -9
  58. package/md_cg/consolidate.py +34 -9
  59. package/md_cg/crypto.py +59 -26
  60. package/md_cg/docindex.py +16 -1
  61. package/md_cg/evidence.py +585 -582
  62. package/md_cg/evolution.py +17 -1
  63. package/md_cg/export.py +1 -1
  64. package/md_cg/forgetting.py +309 -13
  65. package/md_cg/fsutil.py +454 -8
  66. package/md_cg/identity.py +3 -3
  67. package/md_cg/insight.py +24 -3
  68. package/md_cg/linkref.py +1 -1
  69. package/md_cg/logref.py +327 -0
  70. package/md_cg/mcp_server.py +4152 -3818
  71. package/md_cg/mdcg.py +4208 -3462
  72. package/md_cg/mdcos.py +4491 -4137
  73. package/md_cg/mreview/pipeline.py +15 -1
  74. package/md_cg/nodefile.py +639 -575
  75. package/md_cg/protect.py +158 -11
  76. package/md_cg/protocol.py +41 -2
  77. package/md_cg/provenance.py +22 -4
  78. package/md_cg/reach.py +4 -4
  79. package/md_cg/readcache.py +76 -15
  80. package/md_cg/reconcile.py +1 -1
  81. package/md_cg/refindex.py +246 -37
  82. package/md_cg/refine.py +1 -1
  83. package/md_cg/review_cli.py +49 -4
  84. package/md_cg/routing.py +32 -5
  85. package/md_cg/run_tests.py +17 -0
  86. package/md_cg/scrub.py +30 -3
  87. package/md_cg/security.py +47 -1
  88. package/md_cg/self_state.py +5 -5
  89. package/md_cg/sources.py +23 -6
  90. package/md_cg/srcindex.py +352 -0
  91. package/md_cg/stg.py +47 -3
  92. package/md_cg/subgraph.py +2 -2
  93. package/md_cg/sustain.py +1299 -1168
  94. package/md_cg/tasks.py +469 -470
  95. package/md_cg/test_b1_auto_id_multiproc.py +277 -0
  96. package/md_cg/test_b1b2_write_face.py +417 -0
  97. package/md_cg/test_b2_sensitivity_landing.py +223 -0
  98. package/md_cg/test_b3_merge_keeps_content.py +576 -0
  99. package/md_cg/test_b4_shard_dir_selfheal.py +843 -0
  100. package/md_cg/test_b4_shard_dir_selfheal_guard.py +238 -0
  101. package/md_cg/test_c3_transient_read_negative.py +793 -0
  102. package/md_cg/test_c8_search_rrf_gates.py +502 -0
  103. package/md_cg/test_ccg_form_parity.py +188 -0
  104. package/md_cg/test_ccgc.py +28 -3
  105. package/md_cg/test_govern_directread.py +17 -4
  106. package/md_cg/test_h2_session_view_norm.py +233 -0
  107. package/md_cg/test_h4_sustain_snapshot.py +1377 -0
  108. package/md_cg/test_hive_ingest.py +285 -285
  109. package/md_cg/test_index_crossprocess_reload.py +301 -0
  110. package/md_cg/test_issue39_utf8_stdio.py +307 -16
  111. package/md_cg/test_issue43_default_policy.py +865 -0
  112. package/md_cg/test_legacy_p3_node_id_type.py +375 -0
  113. package/md_cg/test_linkref.py +10 -3
  114. package/md_cg/test_lock.py +2 -2
  115. package/md_cg/test_logref.py +1109 -0
  116. package/md_cg/test_m3_h9_bucket_health_protect_mark.py +301 -0
  117. package/md_cg/test_m3_h9_semantic_guard.py +525 -0
  118. package/md_cg/test_mr_m2.py +15 -3
  119. package/md_cg/test_n130_verify_falsified_protect.py +1 -1
  120. package/md_cg/test_n139_dek_provision_failclosed.py +185 -0
  121. package/md_cg/test_n176_link_trust.py +221 -0
  122. package/md_cg/test_n178_units_jobid_gate.py +212 -0
  123. package/md_cg/test_n184_keys_concurrent_provision.py +307 -0
  124. package/md_cg/test_n195_writepath_reload.py +283 -0
  125. package/md_cg/test_n196_stale_gate_skip.py +169 -0
  126. package/md_cg/test_n197_n208_write_face_gates.py +471 -0
  127. package/md_cg/test_n198_tokens_corrupt_failclosed.py +225 -0
  128. package/md_cg/test_n199_tokens_concurrent_write.py +378 -0
  129. package/md_cg/test_n201_proposal_visibility.py +382 -0
  130. package/md_cg/test_n202_session_notes_visibility.py +461 -0
  131. package/md_cg/test_n204_n205_n226_n227_n228_n229_exit_gates.py +542 -0
  132. package/md_cg/test_n206_stdio_jsonrpc_type.py +403 -0
  133. package/md_cg/test_n209_verify_write_face_gates.py +461 -0
  134. package/md_cg/test_n212_n213_n224_generation_gates.py +513 -0
  135. package/md_cg/test_n214_n215_n221_n222_write_face_gates.py +563 -0
  136. package/md_cg/test_n225_nonobject_load.py +1110 -0
  137. package/md_cg/test_n62_tenant_bind_failclosed.py +200 -0
  138. package/md_cg/test_neg_condition_hits.py +333 -0
  139. package/md_cg/test_neg_tail_honesty.py +663 -0
  140. package/md_cg/test_none_id_write_guard.py +166 -0
  141. package/md_cg/test_opt_batch1_md_cg.py +451 -0
  142. package/md_cg/test_p1.py +5 -5
  143. package/md_cg/test_p11_consistency.py +161 -12
  144. package/md_cg/test_p26_refindex.py +2 -2
  145. package/md_cg/test_p27_docindex.py +777 -774
  146. package/md_cg/test_p28_refcheck.py +740 -13
  147. package/md_cg/test_p29_session_ingest_export.py +2 -2
  148. package/md_cg/test_p2_mcp.py +12 -1
  149. package/md_cg/test_p30_maintain.py +33 -2
  150. package/md_cg/test_p31_insight.py +1 -0
  151. package/md_cg/test_p9c_dedup_hints.py +276 -0
  152. package/md_cg/test_policy_required_ccg.py +426 -0
  153. package/md_cg/test_protocol.py +22 -0
  154. package/md_cg/test_rank_parity_score_mode.py +516 -0
  155. package/md_cg/test_read_face_input_gates.py +363 -0
  156. package/md_cg/test_read_face_semantics.py +489 -0
  157. package/md_cg/test_recall_face_guards.py +812 -0
  158. package/md_cg/test_rejected_credential_forms.py +188 -0
  159. package/md_cg/test_rejected_redact.py +146 -0
  160. package/md_cg/test_retr_s1b.py +2 -2
  161. package/md_cg/test_retr_s5.py +20 -7
  162. package/md_cg/test_review_cli_attribution.py +177 -0
  163. package/md_cg/test_review_cli_visibility.py +235 -0
  164. package/md_cg/test_review_conformance.py +21 -3
  165. package/md_cg/test_security_audit_v21.py +2 -2
  166. package/md_cg/test_server_version.py +67 -0
  167. package/md_cg/test_srcindex.py +171 -0
  168. package/md_cg/test_tenant_env_override_warn.py +63 -50
  169. package/md_cg/test_token_lowercase_form.py +315 -0
  170. package/md_cg/test_v21r1_package_version.py +310 -0
  171. package/md_cg/test_writepipe.py +10 -4
  172. package/md_cg/tokens.py +225 -95
  173. package/md_cg/tool_face.py +4 -4
  174. package/md_cg/trust.py +49 -5
  175. package/md_cg/units.py +204 -6
  176. package/md_cg/weights.py +4 -4
  177. package/md_cg/whitebox_kb/wisdom/knowledge_points.py +1 -1
  178. package/md_cg/writelimit.py +42 -8
  179. package/md_cg/writepipe.py +651 -554
  180. package/package.json +8 -2
  181. package/skills/plugin.json +1 -1
  182. package/src/bridge.ts +25 -2
  183. package/src/cli.ts +65 -0
  184. package/src/hooks.ts +229 -16
  185. package/src/init.ts +361 -0
  186. package/src/lib/prompt_safety.ts +88 -1
  187. package/zcode/AGENTS.md +10 -10
@@ -0,0 +1,207 @@
1
+ # 缺陷挖掘报告 · 自主迭代 v19(swarm 三轮深挖·三圈第四站)
2
+
3
+ - **日期**:2026-09-26(批次 58)
4
+ - **范围**(生效条件):第 19 轮 = swarm/hive 交界三轮深挖第四站,四区复核(legacy / recent / rustcore / pybridge)共 **28 条目**(confirmed 28 / rejected 0)→ 跨区重复合并 **5 条**(N143 三区 ×2、N113 两区 ×1、v5 N26 两区 ×1、v17 N146 两区 ×1、R02 与 pybridge serve.rs:201 复核条交叠归并 ×1)→ 独立条目 **23**(新发现 **13** = 本轮新编号 **N154-N166**〔high 1 / medium 5 / low 7,其中 N159 当场修复〕+ legacy 复测缺陷条 **7**〔其中 4 条 6 个缺陷面本轮首修〕+ 复测结案/台账条 **3**)→ 本轮修复 **5 个补丁**(闭 6 个缺陷面:R02 矛盾态 / v12 N109-111① / N143 验证面 / v12 N113 / v5 N26① / N159——全 swarm 与 hive 交界域,Rust+Python 双面)→ 遗留 **19 个开口**(medium 9 / low 10,含本报告补账 2 项)+rejected 0
5
+ - **编号口径**:**v18 实际用至 N153**(v18.md:4-5/:78-79 核实——其头部自述「本轮新发现自 N148 续编」,新发现表实列 N148-N153,其中 N152 系该报告会话补账、N153 系三区冲突族编裁决);本轮任务书「v18 用至 N151、自 N152 续编」与 v18.md 不符(N152/N153 已被 v18 报告会话占用),按「编号全局唯一」不变量本轮自 **N154 续编**。**材料四区候选暂编号冲突及本报告会话统一裁决**(如实记录,全部重编逐项标注原暂编号,非暗改):rustcore 区五项原暂编整体 +2 顺延——N152(protocol ACK verifier 记名)→ **N154**、N153(kill_tree taskkill 退出码)→ **N155**、N154(信任 NaN 夹取)→ **N156**、N155(vm CALL 帧深)→ **N157**、N156(HMAC '|' 裸连接)→ **N158**;pybridge 区三项与 rustcore 暂编冲突顺延——N152(build_rust_exe 短路)→ **N159**、N153(恒真断言)→ **N160**、N154(篡改断言脱钩)→ **N161**;recent 区四项未编号新发现按列示顺序编 **N162-N166**(content_hash 未含 cwd / seq 坏行两路径 / seq 首行基准 / MCP 幂等旁路 / 无锁 check-then-create)。legacy 区 R02 条候选自标「N154」系冲突暂编,按 legacy 口径不占新号(原报=故障注入实测_v1.0.md:192-193/:416 留档、N92 同型〔v10 首报、v17 F2 已修其 serve stop 杀树面〕,v17/DSH 专项两轮确认,本轮第 3 次复核)。
6
+ - **材料账目遗漏补账声明**(本报告会话第一手读核):四区 confirmed 中有 **2 项新发现既不在材料修复清单也不在材料留档未修清单**——①rustcore 区 protocol 拓扑 verifier 记名条(→N154)②recent 区幂等键 content_hash 未含 cwd 条(→N162)。本会话读核现行代码:两病灶均在位未修(swarm.rs:899-921 verifier 收件箱记名面、hive/src/main.rs:299-300 哈希只含 canonical spec 文本)——按第一手证据补账入第五节开口清单(均 medium),非修复项、非已闭项。
7
+ - **回归**:门禁四项为**编排会话实跑**(任务材料提供,本报告如实标注来源):python 全量 215/215 通过 5 跳过(依赖缺失/平台不符)退出码 0(尾部 PASS hive.test_wm_progress / swarm.tests.test_rust_swarm / hive.test_exec_tools);swarm cargo test 通过(退出码 0);npm test 通过(退出码 0);npm run gate 通过。**本报告会话实跑**:五项修复的常驻守卫逐一独立复跑全绿(hive.test_wm_conflict **7/7**、test_swarm_topology **13 passed 0 failed**、test_rust_swarm **24 passed 0 failed**、test_swarm_cli **22 passed 0 failed**、test_rust_codegen **22 passed 0 failed**——⑩节真实 cargo 构建:⑩b delta=62.1s、⑩c 重建语义 trust=0.9,与修复材料一致;⑦/⑨按套件自身环境声明跳过)+ 双侧 cargo 全量复跑(swarm/rust_runtime **lib 10 passed 0 failed** 含 F2 两新守卫;hive **29 lib + 9 bin + 6 integration = 44 passed 0 failed** 含 F1 两新守卫)+ python 全量后台复跑(结果见第四节末注①)+ npm run gate 落盘后复跑(分轮记录见第四节末注②③④)。
8
+ - **行号口径**:材料行号为上游复核/修复会话时点快照;修复 2 对 swarm.rs 净增 ~272 行使该文件后续行号整体下移,本会话对全部落点逐一读核并**双标**(例:verifier 记名面材料 :896 → 读核现行 :899-921;trust clamp 材料 :508/:1033/:1349 → 现行 :530/:1086/:1091/:1407;gossip_consistent counts 判据材料 :1372-1376 → 现行 :1431 附近;gossip_received 冒充材料 :1387 → 现行 :1445)——以读核为准。其余修复落点读核与材料口径吻合(第二节逐项标注)。
9
+ - **结构口径**(CCG 六要素):功能名(标题)/ 生效条件(范围与口径行)/ 子功能(第二~五节)/ 执行与验证方式(第四节:实跑命令与结果)/ 不适用条件(第七节:跳过与未运行项)
10
+
11
+ ---
12
+
13
+ ## 一、执行摘要
14
+
15
+ 本轮为 swarm/hive 交界三轮深挖第四站:四区复核 28 条目(rejected 0),跨区去重后 23 独立条目(新发现 13 + legacy 复测缺陷条 7 + 结案/台账条 3),5 补丁闭合 6 个缺陷面,遗留 19 开口(含补账 2)。四个主题:
16
+
17
+ 1. **交界「假成功」双主题收口**:①R02 矛盾态(v17/DSH 专项两轮确认的欠账,N92 同型)——杀 serve 后孤儿执行器补写 ok 产物与 state=error 终态在 poll 面同屏且无任何矛盾裁决字段,wm.py 凭证闸只按 result.ok 放行:观测面报失败、记账面记成功,双消费面结论相反。修复双落:Rust 观测面(result_summary 补透 ok 凭证位 + one_job_view 矛盾检测置 conflict="late_result_after_error"——state 不翻转、result 不吞、裁决权交消费面)+ Python 消费面(cmd_snapshot 记账面核查拒放行 + status 不可读 fail-closed)。②N159(high,本轮最重新发现)——build_rust_exe『exe 存在即返回』短路:同 project 换源重跑静默执行**旧嵌入字节码**(embed 是编译期 include_bytes! 嵌 exe 的),CLI 全绿假成功,审计元数据 build_meta.json 还被覆写加重误导——正常运维路径即触发、无需攻击者。修复=pbc 较新强制重建 + 构建后重探真实 .exe(v5 N26① 同面顺修)。
18
+ 2. **幂等聚合契约修复 + 验签面 fail-closed**:v12 N109-111①——同 project+同 WAL 重入后 watermarks/gossip 审计面归零(ACK payload 自带 {round,seq} 即重建信息源却未消费),违背重入幂等聚合契约;修复=WalReplay 增两审计面重建字段 + gossip 路由指纹回填 + 两表播种(health 面维持在线窗口口径的诚实边界见 F2)。N143 验证面最小形态——空串密钥验签 fail-open(空串自签伪造行 + `verify --secret ""` 全绿 rc=0):库面入口与 CLI 双落 fail-closed;run 侧缺省密钥来源维持**语义决策 deferred**。
19
+ 3. **守卫可信度修复 + 测试基建新发现**:v12 N113——拓扑测试②centralized/mesh 段运行失败时断言无声消失、套件全绿放行(恰是最需守卫的场景零防线);修复=段内补两条前置无条件 check。新发现同族两件留档:N160 恒真断言(`all(True for _ in [1])`,level 字段零校验——v18 compiler 测试基建同型发现模式)、N161 篡改断言与现行七字段签名串脱钩(两态恒真、检验力≈0)。
20
+ 4. **新发现 13 项全景(N154-N166)**:rust 运行时归因/资源面 5 项(N154 protocol ACK 记名〔补账〕、N155 kill_tree 不查 taskkill 退出码、N156 信任 NaN 夹取失效跨恢复永久存活、N157 vm CALL 帧深无上限峰值内存≈10GB、N158 HMAC 签名串 '|' 裸连接可平移字段边界);幂等键面 3 项(N162 content_hash 未含 cwd〔补账〕、N165 MCP hive_spawn 提交面整面旁路、N166 无锁 check-then-create);seq 取证面 2 项(N163 坏行占位两路径不一致——伪行可制造指向无辜行的明细、N164 首行基准删首部不可检);测试基建 2 项(N160/N161)+ 修复 1 项(N159)。
21
+
22
+ **对输入口径的核验**:输入称「四区复核 confirmed 28 条(四区各 7、rejected 空)+ 5 修复 + 留档未修 17 条」。本会话以 `git diff --stat`/`git status` + 全落点读核核对:改动面 = 12 文件 +588/-41 + untracked hive/test_wm_conflict.py——与五项修复一一对应(第二节逐项标注),**exec.rs 零改动与 N155 留档不修一致**,无越域改动。条目账目:28 confirmed − 跨区冗余 5 = 23 独立条目 = 13 新发现 + 7 legacy 复测缺陷条 + 3 结案/台账条;材料留档 17 条 + 本报告补账 2 项(N154/N162)= 19 开口,与第三/五节状态联动无多无少(其中 N159 已修不计开口、legacy 4 条含已修面部分闭合)。五项修复由上游修复会话完成,本报告会话未修改任何源文件,仅读核 + 守卫/门禁实跑。**需明示的口径偏差**:①任务书编号续编基准与 v18.md 不符已按全局唯一原则裁决(见编号口径行);②材料留档清单遗漏 N154/N162 两开口已补账;③候选暂编号冲突 8 处已统一重编(逐项标注)。
23
+
24
+ ---
25
+
26
+ ## 二、修复清单(5 项,逐项 where / 缺陷面 / 修复 / 攻防前后对比 / 守卫)
27
+
28
+ ### F1(R02 矛盾态·hive 面,medium,v17/DSH 专项两轮留档→本轮第 3 次复核坐实→本轮首修)杀 serve 后孤儿执行器补写 ok 产物与 state=error 终态同屏无裁决——wm 凭证闸只按 result.ok 放行
29
+
30
+ - **where**:`hive/src/main.rs`(**读核现行**:result_summary :371-413——:384-387 补透 ok 凭证位,注释自述「观测面此前只透 content/usage,凭证字段不可见——矛盾裁决无从在 poll 面成立」;one_job_view :415-449——:436-445 检测 state=error × result.ok=true 并存即 `kv.push conflict="late_result_after_error"`,:417-422 注释载明「不静默翻转 state、不静默吞 result:两张脸同屏 + 矛盾位显式置起,裁决权交给消费面」)+ `hive/wm.py`(:113 生效条件注释 + :133-154 矛盾态闸:status.state=error → ok:False + conflict + verdict;status 解析失败 → conflict=status_unreadable fail-closed;status 缺失按旧口径仅凭 ok 门放行)。守卫:main.rs bin 测试 2 项(one_job_view_flags_late_result_after_error / one_job_view_no_conflict_without_contradiction)+ `hive/test_wm_conflict.py`(新文件,G/Z/C 三组 7 检查,run_tests.py 的 hive/test_*.py glob 自动纳入 CI)。
31
+ - **缺陷面**:serve 被外部硬杀(kill -9/断电)→ 执行器成孤儿继续跑 → serve 重启时 recover_orphans 因产物未落盘标 error(scheduler.rs:342-356),此后 error 终态落入 `match _ => {}`(:358)永不再回看——孤儿自然完成时补写的 ok 产物矛盾固化。wm.py:124 `result.get("ok") is not True` 是唯一凭证门、全程不读 status.json。攻击向量:触发无需攻击者,窗口=任务剩余执行时长。
32
+ - **修复**:①Rust 观测面 result_summary 新增 ok 凭证字段透出(此前 poll 面凭证位不可见)+ one_job_view 合体时矛盾检测置 conflict(其余组合 done+ok / error+ok=false / error+无产物不置位零扰动);②Python 消费面 cmd_snapshot 在 ok 门之后新增记账面核查:state=error 拒放行(须人工核实产物后改写记账终态)、status 解析失败 fail-closed(conflict=status_unreadable,事故信号不静默)、status 缺失按旧口径零回归。拒绝发生在 staging 之前,无 wm/jobs/<job_id> 残留、无 task 分支产出。**未动 scheduler.rs recover_orphans 本体**(error 永不回看的根源留待上层裁决语义定夺——诚实边界)。
33
+ - **攻防前后对比**:修复前(材料第一手实测:哑 job status.json={"state":"error","error":"serve 中断:任务执行被重置"}〔与 scheduler.rs:343-355 逐字同字段〕)——`hive poll` 输出 {"state":"error","result":null};补写 result.json {"ok":true,...} 后再 poll 同屏输出 state=error + result.content_head="ORPHAN-LATE-WRITE-OK" + completed=true,键集无任何 conflict/warning(main.rs:425-427 修复前 status 与 result 直接合体无消解);同 job 调 wm cmd_snapshot 返回 ok=True 且 git commit 成功——产物借 ok 皮入库。修复后:poll 同屏透出 {"state":"error","result":{...ok:true...},"conflict":"late_result_after_error"};wm snapshot 函数面+CLI 均 rc!=0 拒绝且 wm 仓零残留零分支。
34
+ - **守卫**:红→绿两轮实跑(材料口径):cargo test --bin hive one_job_view 旧码 1 FAILED('矛盾态必须透出 conflict 裁决字段' left:None)→ 新码 2 passed;hive.test_wm_conflict 旧码 4 FAIL/3 ok → 新码 7/7。全量回归(材料口径):hive cargo 44/44(29 lib+9 bin+6 integration)+ scripts/run_tests.py hive 17/17。**本会话实跑(绿态)**:`python -X utf8 -m hive.test_wm_conflict` → G1 矛盾态拒绝/G2 staging 前无残留/G3 无 task 分支/Z1 done+ok 放行/Z2 无 status.json 放行/Z3 坏 status fail-closed/C1 CLI rc!=0 共 **7/7 通过**;`cargo test --manifest-path hive/Cargo.toml` → **29 lib + 9 bin(含两新守卫)+ 6 judgment_surface = 44 passed 0 failed**。注(材料如实转述):本改动不含 swarm 域代码,修复会话跑的是 hive crate 全量(CI hive-check.yml 同款)。
35
+
36
+ ### F2(v12 N109-111①面,medium,v12 首报→v14 复测→本轮第 3 次复核三面全复现→本轮首修①面)同 project+同 WAL 重入后 watermarks/gossip 审计面归零——ACK payload 自带 {round,seq} 即重建信息源却未消费
37
+
38
+ - **where**:`swarm/rust_runtime/src/swarm.rs`(**读核现行,修复后行号**:WalReplay 增补 gossip_sent 重建字段 :425-430〔注释载明「与在线 gossip_sent 记账同源同口径」〕;replay_wal 签名增 gossip_fps 指纹参数 :456-461、初始化 :475;重放回填:路由指纹计数 :567-573、ACK 分支回填水位;run_swarm 据 cfg.routes 计算指纹 :804-812、两表从 replay 播种 :824、早退分支传重建表 :870;守卫 wal_reentry_keeps_watermark_and_gossip_faces :1836 + replay_backfills_watermarks_and_gossip_exactly :1917-1964;既有 4 处 replay_wal 调用点同步新签名)。材料口径(修复前):402-419 WalReplay 无 watermarks/gossip_sent 字段、:769-776 空表起步、:801-818 早退传空表。
39
+ - **缺陷面**:同 project+同 WAL 重入的任何运维动作(重启聚合/断点续跑)即触发三审计面归零(health 面本轮不重建,见诚实边界)——重入报告与首跑报告矛盾,违背幂等聚合契约;部分恢复(续跑)路径同源丢失。触发无需攻击者。
40
+ - **修复**:①watermarks 重建=ACK 行 payload {"round","seq"} 的 seq 取 per 实例最大值(与在线水位推进写入面同源同值);②gossip_sent 重建=(from,type) 命中 gossip 路由指纹的路由行计数(与在线 fan-out 记账同口径——含 N111 已留档的发送侧语义,重入口径=与首跑报告一致;同源同型单播/gossip 病理重叠配置的歧义边界已如实声明);③run_swarm 两表播种:watermarks 在线推进带 > 守卫单调不回退、gossip 续跑累加新会话段;④守卫自亦修复一处潜病(新测试行构造 helper 单次取样 ts)。**诚实边界(未修项明说)**:health 面维持在线窗口口径——逐轮终态质量未持久化进 WAL(快照只存末轮 states,ACK 对 error 终态照发,参与性重建会把 error 轮伪造成 success,违背 G5「不伪造终态」纪律),精确重建须快照负载扩展持久化逐轮 outcomes,属协议变更非本轮最小修复,与②③同列 deferred;红守卫因此只断言 watermarks/gossip。
41
+ - **攻防前后对比**:修复前(材料红证,进程内合成 2 轮已完成 WAL 重入早退聚合)——report.watermarks.get("乙")==None、gossip 空表(与 v12/v14 留档实测「首跑 {乙:1}/{乙:2} → 重入 {}」逐字同象)。修复后——同 WAL 重入 watermarks={乙:1}、gossip={乙:2}、acks=1/global_seq=2 全保留、gossip_consistent=true——重入报告审计面与首跑一致。
42
+ - **守卫**:红→绿两轮实跑(材料口径):红证 cargo test --lib wal_reentry 旧码 FAILED('重入 watermarks 须从 ACK payload 重建' left:None right:Some(1))→ 新码 10/10 passed ×2 轮稳定;回归 scripts/run_tests.py swarm 14/14 + hive cargo 44/44 未受扰。**本会话实跑(绿态)**:`cargo test --manifest-path swarm/rust_runtime/Cargo.toml` → **lib 10 passed 0 failed**(含 wal_reentry_keeps_watermark_and_gossip_faces 与 replay_backfills_watermarks_and_gossip_exactly 两新守卫输出 ok 在案)。
43
+
44
+ ### F3(N143 验证面最小形态,medium,v15 N128 首报→v17 N143 留档→本轮第 3 次复核→本轮首修验证面)verify 空串密钥 fail-open:空串自签伪造行整条洗白、CLI --secret "" 全绿 rc=0
45
+
46
+ - **where**:`swarm/rust_swarm.py`(**读核现行**:verify_wal_signatures 生效条件注释 :103 + docstring :110-112 + 入口前置拒绝 :126-128 `if not shared_secret: raise ValueError("WAL 验签密钥不得为空(空串/None 密钥拒绝——fail-closed,N143)")`——读 WAL 之前即拒,非空密钥路径零改动)+ `swarm/swarm_cli.py`(:129 生效条件注释 + :131-134 `if not args.secret: _fail("verify", ..., 2)`——空串显式拒绝 rc=2 用法错口径,不透传验签器)。守卫:test_rust_swarm.py ③c 节(:164 起,③c-1 空串/③c-2 None)+ test_swarm_cli.py ⑧节(⑧a/⑧b)+ FI-R08 同步(test/chaos_injection/registry.py、test_fi_r08_default_secret_forge.py——git diff 佐证)。
47
+ - **缺陷面**:任何能写 WAL 的本机组件以空串自签伪造行(读过源码即知,无需特殊权限),`verify_wal_signatures(wal, '')` 返回 all_valid=True、CLI `verify --secret ""` rc=0——伪造信任/路由历史整条洗白。最小改动 18 行(两文件 diff 12+6)。
48
+ - **修复**:两入口空串/None 结构化拒绝(库面 ValueError / CLI rc=2);**未触 run 侧缺省密钥**——本会话读核佐证:rust_swarm.py:27 `DEFAULT_SECRET = "蜂群默认密钥"` 公开常量、:32 缺省形参、swarm_cli.py:93 `cfg_in.get("shared_secret", "")`、rust_runtime/src/main.rs:279 `.unwrap_or("蜂群默认密钥")` 全部原样在位——「缺省密钥从何而来」三入口统一(fail-closed 拒启动 vs 首启随机落盘)维持**语义决策 deferred**,已在 FI-R08 notes 与 registry 注释留档。
49
+ - **攻防前后对比**:修复前(材料第一手实测)——空串自签伪造行 verified=1 all_valid=True;CLI rc=0 ok=true 全绿;对照错密钥 rc=1 bad=1(防线本体判别力本就完好)。修复后——库面同入口抛 ValueError;CLI rc=2 ok=false stage=verify 带结构化 error;非空错密钥对照腿不变。
50
+ - **守卫**:红→绿四层(材料口径):临时守卫 exit=1→0;test_rust_swarm 修复前 22 passed 2 failed → 修复后 24 passed 0 failed;test_swarm_cli 修复前 20 passed 2 failed → 修复后 22 passed 0 failed;FI-R08 空串腿由缺口断言改写为修复面确认(verdict=gap 与 registry 期望一致 exit=0);无回归(FI-R04/R05/R06 exit=0、resume 15/0、fault 9/0、protocol 12/0)。**本会话实跑(绿态)**:test_rust_swarm → **24 passed 0 failed**(③c-1 抛 ValueError 文案输出在案);test_swarm_cli → **22 passed 0 failed**(⑧a rc=2 + ⑧b 结构化报错输出在案)。
51
+
52
+ ### F4(v12 N113,medium,v12 首报→本轮第 2 次复核双区坐实→本轮首修)拓扑测试②centralized/mesh 段静默跳过洞:运行失败时断言无声消失、套件仍全绿
53
+
54
+ - **where**:`swarm/tests/test_swarm_topology.py`(**读核现行**::72-74 N113 注释载明「若运行失败……仅有的角色断言被 if 静默跳过、套件全绿放行」;:77 `check("centralized 运行", rr["ok"], …)` 与 :83 `check("mesh 运行", rr["ok"], …)` 两条前置无条件 check——写法对照①段 :63、③段 :90/:97 同款);if 内角色推导断言原样保留。仅改测试文件一处段(+5 行,无生产代码改动——git diff --stat 佐证)。
55
+ - **缺陷面**:centralized/mesh 两拓扑运行失败时(恰是拓扑推导回归最需守卫的场景),②段零断言执行、套件仍全绿 exit 0——回归静默入库。注入臂第一手复现(材料双臂:legacy 区替换 run_topo 返回值 / pybridge 区 stub sys.modules['swarm.rust_swarm']):②段零 check 行输出、9 passed exit 0。
56
+ - **修复**:②段两处 run_topo 之后、if 之前各加一条前置无条件 check(对照其余三段既有写法),附 N113 注释说明成因。
57
+ - **攻防前后对比**:同一注入(run_swarm 对 centralized/mesh 返回 ok=False):修复前②段零断言行、9 passed 0 failed SUITE_EXIT=0;修复后②段两条 ✘(带注入 stderr 现场)、9 passed 2 failed SUITE_EXIT=1——套件变红。基线臂 11 passed → 13 passed(健康路径 +2✓ 无回归)。
58
+ - **守卫**:双臂注入 harness 四象限实测(材料口径)+ 按套件自身入口直跑。**本会话实跑(绿态)**:`python -X utf8 swarm/tests/test_swarm_topology.py` → **13 passed, 0 failed** exit 0(②段「centralized 运行」「mesh 运行」两✓输出在案)。临时 harness 已删(材料申报 0 leftover)。
59
+
60
+ ### F5(N159 本轮新发现当场修〔high〕+ v5 N26① 同面顺修〔low〕)build_rust_exe『exe 存在即返回』短路:换源重跑静默执行旧嵌入字节码 CLI 全绿假成功;fresh build 返回无后缀不存在路径
61
+
62
+ - **where**:`swarm/rust_codegen.py`(**读核现行,修复后行号**:generate_rust_project pbc 写入前与现存文件字节比对、内容一致不覆写 :34-42〔防 cmd_run 幂等重入无谓翻新 pbc mtime 触发假重建〕;build_rust_exe :69-101——`_probe()` .exe 优先/无后缀回落/缺失返回 None :73-78、exe 存在但 program.pbc 较新(getmtime 严格大于,相等不触发)置 exe=None 强制 cargo build :82-88、构建后重探真实产物、失败抛 RuntimeError :95-100;生效条件注释 :68 载明「embed 字节码是编译期 include_bytes! 嵌 exe 的……旧 exe 照跑旧程序」)。守卫:test_rust_codegen.py ⑩节 :234-291(⑩0/⑩a/⑩a'/⑩0'/⑩b/⑩c/⑩d/⑩e 8 腿)。
63
+ - **缺陷面**(N159,high):正常运维路径即触发——同一 config 目录改 source(或 --project 复用同目录)重跑 CLI run,generate 只覆写 program.pbc/build_meta.json,build_rust_exe『exe 存在即返回』短路(缺陷时点 :67/:69 两处 os.path.exists)→ exe 不重建;embed 项目实例 spawn --serve 无 --pbc 走 load_code(None) 拿旧 EMBEDDED_PROGRAM——用户以为跑了新逻辑,报告/信任曲线/WAL 全是旧程序产物,审计元数据 build_meta.json 还被覆写加重误导。历轮报告定向 grep『换源|旧字节码』0 文件命中,确为新发现。
64
+ - **修复**:①探测逻辑抽 _probe(返回 None 而非存疑路径变量);②pbc 较新即强制 cargo build(cargo 经 dep-info 感知 include_bytes! 依赖变化自动重建嵌入字节码);③构建后重探真实产物路径、失败抛 RuntimeError(v5 N26① 无后缀路径返回值同面修复);④generate 配套同内容不覆写 pbc。
65
+ - **攻防前后对比**:修复前(材料第一手实测,临时目录+哑密钥占位):A 源(德 0.5)首跑 rc=0 T_avg=0.6 → 换 B 源(德 0.9)同 --project 重跑 rc=0 ok=true 但 T_avg=0.6(旧 A 程序产物)+ 幂等聚合 health={};--wal 新文件名强制真实执行仍 0.6;对照 B 源+全新 project → T_avg=1.0(正确);exe mtime < program.pbc mtime 坐实未重建;fresh build 还返回无后缀不存在路径(os.path.exists(返回值)=False)。修复后同一形态 → pbc 较新被强制重建(mtime_delta=62s)、exe 语义翻转为新源 trust=0.9、fresh build 返回真实 protocol_vm.exe;健康重入(exe 新于 pbc)短路保持不重建(防修复过度化)。
66
+ - **守卫**:红→绿四腿双面(材料口径):临时守卫旧码 fails=['leg1','leg2','leg3'](含腿3 trust=0.5 实锤旧程序照跑)→ 新码 fails=[];常驻守卫 test_rust_codegen ⑩节 8 腿全绿;无回归 test_rust_swarm 24/0 + test_swarm_cli 22/0(③幂等重入腿 events 5→5 零重复=同内容不覆写配套面实测)。**本会话实跑(绿态)**:`python -X utf8 swarm/tests/test_rust_codegen.py` → **22 passed 0 failed**(⑩a 返回真实 .exe、⑩b delta=62.1s、⑩c 重建后语义 trust=0.9、⑩d 重入短路、⑩e 同源不覆写 pbc——输出在案;⑦/⑨按套件自身环境声明跳过,与⑩真实构建可用并存的探测口径差异如实照录)。语义腿以直接子进程跑 exe 读 trust 值——重建是否真换了嵌入字节码以行为实测为准。
67
+
68
+ ---
69
+
70
+ ## 三、发现明细(四区 confirmed 28 / rejected 0;去重后 23 独立条目 = 新发现 13 + legacy 复测 7 + 结案/台账 3)
71
+
72
+ 以下「证据要点」为上游复核/修复会话的读码+实跑(材料原文;攻击复现均在系统临时目录/哑密钥占位环境,测毕清理为材料逐项申报);标注★者本报告会话另做了现行代码读核(行号双标以读核为准)。legacy 项标注原轮次与复测轮数;新发现编号裁决见头部「编号口径」行(逐项标注原暂编号)。
73
+
74
+ ### 新发现 13 项(N154-N166;★=本报告会话读核在位;N159 已修经本会话守卫实跑)
75
+
76
+ | #(原暂编号) | where(读核现行行号) | 严重度 | 问题摘要 | 证据要点 | 状态 |
77
+ |---|------|--------|----------|----------|------|
78
+ | N154(rustcore 区暂编 N152;**材料双清单遗漏,本报告补账**)★ | swarm/rust_runtime/src/swarm.rs:899-921(verifier 收件箱记名面;材料口径 :862-902,F2 插入行下移) | medium | protocol 拓扑下 verifier 的 ACK 与消费水位把 primary 的收件箱消息记到自己名下(has_inbox/max_seq 直接取 primary_inbox 的全局 seq),G4b「实例消费水位=最后 ACK 的收件箱消息 seq」契约被破坏;primary 死亡轮(G5 跳过,无 primary ACK)其未消费消息仍被 verifier ACK——死亡轮投递丢失可被 verifier 假成功掩盖 | 实跑复现(材料,临时目录哑密钥,2 实例 protocol 拓扑路由乙→甲 2 轮):WAL 第3行 ACK from=甲 seq=1、第4行 ACK from=乙 seq=1(同一条仅投递给甲的消息双 ACK),报告 watermarks={乙:1,甲:1}——乙从未收到任何属于自己的路由消息,水位却与甲相同;acks=2。配置即触发、单机/跨机均污染报告 watermarks/acks 审计面。本会话读核:记名面在位未修 | **开口(补账,medium)** |
79
+ | N155(rustcore 区暂编 N153)★ | hive/src/exec.rs:63-76(:73 `if cmd.status().is_err()`;契约自述 :58) | medium | kill_tree 只在 taskkill 无法启动(spawn/wait IO 错)时回落 child.kill(),**不检查 taskkill 退出码**——:58『taskkill 失败回落 child.kill()』契约对退出码失败形态未实现;命中时强杀整体静默空转,scheduler.rs:456/:462 照记 killed/timeout 假成功,孙进程孤儿存活 | 哑进程树实测(材料,1:1 复刻 exec.rs:63-76):parent 派生 DETACHED 孙进程后即退 → 复刻件输出「status()=Ok(exit_code=128) → is_err()=false → 回落【不】触发」→ 孙进程杀后仍 ALIVE;裸跑 taskkill rc=128「没有找到进程」;存活 pid 对照 rc=0。**诚实收窄**:执行器在轮询点之前退出根本不进 kill_tree(下轮 try_wait=Ok(Some) 走 classify_exit),实际触发窗=判活后毫秒竞窗+pid 复用,窄于候选描述,但契约破坏与静默空转后果属实;测试进程 tasklist 10 pid 清点归零 | **开口(medium)** |
80
+ | N156(rustcore 区暂编 N154) | swarm/rust_runtime/src/swarm.rs 四处 clamp(读核现行 :530/:1086/:1091/:1407;材料口径 :508/:1033/:1349)+ 快照写出面(材料口径 :1207) | medium | 信任防操纵 0-1 夹取对 **NaN 失效**(f64::clamp(NaN,0,1)=NaN 穿透)且经快照持久化、跨恢复永久存活——last_trust=NaN 经 format! 写出**裸 NaN 快照**(非合法 JSON),@trust 路由载荷同被污染,严格 JSON 消费方解析失败 | rustc 原语实测(材料):parse("NaN").is_nan=true;NaN.clamp(0,1).is_nan=true(对照 inf.clamp(0,1)=1 正常——唯 NaN 穿透);format! 出 "NaN"。实跑复现(材料):配置 trust=NaN 双实例+@trust 路由 → WAL 路由行 payload=NaN、快照行 trusts 含 NaN;rounds=2 续跑触发恢复重放后路由/快照仍 NaN——污染跨恢复永久(重放 clamp 存活)。触发①:协调器配置 "trust":NaN(宽松解析+取值无 clamp);触发②:输出裸 NaN trust 终态的实例——夹取正是为不可信实例而设的防线。诚实标注:T_avg=NaN 子路径为读码+原语实测未端到端复现(vm.rs:557-562 非有限浮点序列化为 null 挡住 state_json 回流) | **开口(medium;修复极简,建议下轮 rust 面优先)** |
81
+ | N157(rustcore 区暂编 N155)★ | swarm/rust_runtime/src/vm.rs:470-476(CallFrame{symbols:self.symbols.clone(), cond:self.condition_stack.clone()}) | low | CALL 每帧**全量克隆** symbols+condition_stack 且无帧深上限(唯一防线 max_steps=100_000 只限步数不约束内存),深递归×大符号表峰值内存=帧深×符号表大小,可达 GB 级——批次56 编译器 VM N149 防线(Python 侧)同族缺口在 Rust 运行时侧 | 实跑复现(材料):手工构造嵌套 CALL×10000+RETURN 的 .pbc,serve 模式 stdin 喂 1MB 符号请求,tasklist 每 0.1s 采样峰值工作集≈10048 MB(≈10 GB);同深度 1KB 符号表对照≈0 MB——内存≈帧深×符号表放大实锤;终态为结构化步数上限报错(证明步数防线不约束内存);abort 终态未单独触发(避免持续压机)。.pbc 由用户源编译,运行时 VM 是沙箱边界层 | **开口(low)** |
82
+ | N158(rustcore 区暂编 N156)★ | swarm/rust_runtime/src/swarm.rs:376-385(fn sign_event :376;七字段 '|' 裸连接)+ rust_swarm.py:153-155 同构 | low | HMAC 签名串以 '|' 裸连接七字段且无字段校验/转义(Rust/Python 同构)——id/event_type 含 '|' 时 WAL 篡改者可平移 from/to 字段边界而验签仍过,**事件归因可被篡改** | 对拍实测(材料,Python hmac+仓库真实 verify_wal_signatures):sign(7,"ACK","a\|b","c",…) 与 sign(7,"ACK","a","b\|c",…) 渲染串逐位相同(7\|ACK\|a\|b\|c\|2\|1234\|null)→ HMAC 相同;两行分别以 from="a\|b",to="c" 与 from="a",to="b\|c" 写入临时 WAL → verified=2 bad=0 all_valid=True——边界平移对验签完全不可见。payload 居末位不受影响,暴露面限 type/from/to 三字段;属 canonicalization 加固缺口非直接可利用面 | **开口(low)** |
83
+ | N159(pybridge 区暂编 N152,冲突顺延)★ | swarm/rust_codegen.py:66-75 缺陷时点(读核现行修复面 :68-101) | **high** | build_rust_exe 以『exe 存在即返回』短路(:67/:69 两处 os.path.exists),同 project 换 source 重跑时 generate_rust_project 覆写 program.pbc/build_meta.json 但 exe 不重建——embed 字节码是编译期 include_bytes!(lib.rs:30)嵌入 exe 的,实例 spawn --serve 无 --pbc 走 load_code(None) 拿旧 EMBEDDED_PROGRAM,**静默执行旧程序且 CLI 全绿假成功** | 端到端实测(材料):A 源(德 0.5)首跑 T_avg=0.6 → 换 B 源(德 0.9)同 --project 重跑 rc=0 但 T_avg=0.6(旧 A 产物)+ 幂等聚合 health={};--wal 新文件名强制真实执行仍 0.6;对照 B 源全新 project → 1.0(正确);exe mtime < pbc mtime 坐实。历轮定向 grep 0 命中确为新发现。CLI 对『重入同程序』与『换源重跑』无任何区分/告警 | **已修**(F5,本会话守卫实跑 22/0) |
84
+ | N160(pybridge 区暂编 N153)★ | swarm/tests/test_swarm_reflect_signal.py:72-73(读核现行 `all(True for _ in [1])` 在位) | low | **恒真断言**——修正信号行 level 字段从未被任何测试实际校验(文件内 sig_rounds :52-54 只取 round 键),level 回归(误写 P1/P0)套件照绿;对照 v18 对 compiler 测试基建恒真断言的发现模式,属同型 | 实跑(材料)12 passed rc=0 且输出『[✓] 修正信号 level=2(P2 观察级,维生边界) — level 固定 2』**假证据打印在案** | **开口(low;一行修:读 WAL 断言 level==2)** |
85
+ | N161(pybridge 区暂编 N154)★ | swarm/tests/test_rust_swarm.py:107-112(读核现行六字段串 :107 在位) | low | 『篡改 payload → 签名不匹配』断言按旧 **6 字段**格式构造(缺 seq、未剥行尾 `}`),与现行七字段签名串(rust_swarm.py:153-155 / swarm.rs:376-385,seq\|type\|from\|to\|round\|ts\|payload)脱钩,:106 注释『验签逻辑同 verify』已失真——篡改/未篡改两态恒真、检验力≈0 | 双态实测(材料,F5 实验产出的真实签名 WAL+真实密钥):未篡改态断言通过=True、篡改态通过=True;现行七字段+剥尾}算法验同一未篡改原行匹配=True。真实篡改检测在 test_swarm_cli.py:104-117 ④段有有效覆盖(本会话读核在位:改 payload 一字符 → verify rc=1 bad≥1)——冗余弱断言非漏检 | **开口(low;顺批)** |
86
+ | N162(recent 区未编号;**材料双清单遗漏,本报告补账**)★ | hive/src/main.rs:299-301(读核现行::299-300 hash=sha256(v.to_canonical_string())、:301 find_active_by_hash) | medium | 幂等键 content_hash 只对**原始 spec 文本**的 canonical 形态做 sha256,未含 cwd/解析后路径视图——含相对 context_files 的同一 spec 模板在不同目录向同一 jobs 池提交时语义不同(spec.rs:68-87 base_dir=workdir 优先否则提交 cwd;exec.py:444 执行侧第三处路径)却被折叠为同一哈希,第二任务不建池**静默丢失**,调用方拿到他人 job_id | 实测(材料,临时区+哑密钥占位):两项目目录各放不同内容 notes.md,同一 spec 文本以 release 二进制依次向同一池 submit → 第一次 deduplicated=false 新建、第二次 deduplicated=true 返回同 job_id 同 content_hash=804a3a78…、池中仅 1 个 job 目录;两目录校验均通过证明语义不同却被去重。共用池路径三条常态可达(exe 锚定池 main.rs:57-62 / HIVE_JOBS_DIR env :51-54 / 编排脚本显式 --jobs) | **开口(补账,medium)** |
87
+ | N163(recent 区未编号)★ | swarm/rust_swarm.py:155-156(不可解析行 continue 不占位)+ :178-185(验签无效可解析行按占位推进;:103 生效条件注释自述) | medium | seq 连续性判定对坏行**两路径不一致**:HMAC 无效但 JSON 可解析的行按占位推进 expected,不可解析行 continue 不占位——中插一行伪 JSON 即可制造指向紧随其后无辜合法行的 continuity_break 明细(真伪行自身仅计 HMAC bad 无 break),且篡改现有行 payload(占槽+HMAC 失效)反而 breaks=[] 报告最干净,**取证归因被系统性误导**;附带 :175-177 首行分支信不可信 seq 定链基准 | 实测(材料,wal_line 同源构造器造合法 seq1-4):E-B 中插伪行(seq=99 HMAC 全零)→ bad=2、breaks=[{line:4,…}] 冤枉无辜 seq=3 行;E-C 同位置插非 JSON → bad=1 breaks=[];E-D 篡改现有行 payload → bad=1 breaks=[](真篡改最干净);E-E 伪行做首行 → 以伪 seq=99 定链基准,breaks 指向无辜 seq=1 行(expected=100)。all_valid 恒 False(fail-closed 检出能力未损),受损的是明细归因可信度 | **开口(medium;坏行占位策略=归因语义设计)** |
88
+ | N164(recent 区未编号)★ | swarm/rust_swarm.py:175-177(首行为基准)+ rust_runtime/src/swarm.rs event_seq 写序(先自增后写行,首行恒 seq=1) | low | seq 连续性判据以**首行 seq 为基准**——删除首部 k 行或清空整个 WAL 均不可检(all_valid=True);Rust 侧绝对锚存在(首跑起点 0)但 Python 判定未利用 | 实测(材料):删 seq=1 首行 → all_valid=True bad=0 breaks=[];仅留 seq=4 尾行 → all_valid=True;空文件 → all_valid=True total=0 且 CLI verify rc=0 ok=true。属批次53 注释在案的已知取舍(rust_swarm.py:114-117),维持加固项定级 | **开口(low)** |
89
+ | N165(recent 区未编号)★ | hive/hive_mcp/mcp_server.py:280-308(读核现行 _submit 直接生成 job_id 建目录写 spec/status,无 content_hash 无同哈希查询) | low | 批次53 幂等键只落地 CLI submit 面(main.rs:297-316),MCP hive_spawn 主提交面 _submit 无幂等——_t_spawn(:401-450):450 直接调用,**同内容重复 spawn 不去重,两条提交面行为分叉,修复存在整面旁路** | grep content_hash/dedup/幂等 于 mcp_server.py 零命中(材料);实测(材料,纯函数面——_t_spawn 会经 :421 _ensure_serve 起 serve 故未跑):同一 spec dict 连调 _submit 两次 → 2 个不同 job_id 目录、status.json 无 content_hash;对照 CLI 同内容二次 submit deduplicated=true——同部署两面保护不对称实测坐实 | **开口(low)** |
90
+ | N166(recent 区未编号)★ | hive/src/main.rs:301-333(读核现行::301 读判据 → :323 init_job_with_anchor → :327-333 patch_status 补写 content_hash;:325-326 注释自认「补写失败仅损去重能力不损任务本体——诚实取舍」) | low | 幂等去重为**无锁 check-then-create**:读判据与写判据之间无锁、判据落盘滞后于建池,并发同内容提交互相看不见即双建(降级为旧行为重复任务,不损任务本体) | 读码确认窗口真实存在(材料+本会话读核);实测 20 并发同内容 submit ×1 轮(材料,临时池)→ 1 份 deduplicated=false + 19 份 deduplicated=true、池中 1 个 job 目录无错误——窗口在案本轮未捕获双建,如实按 low 留档 | **开口(low)** |
91
+
92
+ ### legacy 复测 7 缺陷条(多区独立复核互为佐证——N143 三区、N113/N26/N146 各两区)
93
+
94
+ | # | where | 严重度 | 问题摘要(原轮次→复测轮数) | 证据要点 | 状态 |
95
+ |---|------|--------|----------|----------|------|
96
+ | R02 矛盾态(hive 面) | hive/src/main.rs:414-429 + hive/src/scheduler.rs:342-356 + hive/wm.py:113-127(缺陷时点) | medium | 【故障注入实测_v1.0.md:192-193/:416 留档(本会话 grep 核实在位);N92 同型(v10 首报、v17 F2 已修其 serve stop 杀树面);v17/DSH 专项两轮确认→本轮第 3 次复核第一手坐实】杀 serve 后孤儿执行器补写 result.json ok=true 与已定 state=error 终态在 poll 面同屏且无任何矛盾裁决字段,wm.py 凭证闸只按 result.ok 放行——观测面报失败、记账面记成功,双消费面结论相反 | 第一手实测(材料):哑 job status=error → poll {"state":"error","result":null};补写 ok 产物 → 同屏 error+content_head=ORPHAN…+completed=true 无 conflict 键;wm cmd_snapshot ok=True commit 成功。触发无需攻击者,窗口=任务剩余执行时长 | **已修**(F1)。候选区自标 N154 系编号冲突暂编,按 legacy 不占新号 |
97
+ | N143 WAL 缺省密钥三入口 fail-open | rust_swarm.py:27/:32 + swarm_cli.py:93 + rust_runtime/src/main.rs:279(本会话读核全部在位) | medium | 【v15 N128 首报(v15.md:18/:113 核实)→v17 N143 留档→本轮第 3 次复核(legacy/recent/pybridge 三区同报)】API 缺省=公开常量「蜂群默认密钥」、CLI 缺省=空串照签、Rust 键缺失回落公开常量/空串直接采用;cmd_verify 对显式空串无拒绝——缺省部署下审计签名可伪造且 verify 全绿;跨机部署 swarm.json 明文同盘泄露密钥 | 本轮三向实测(材料):空串自签 verify('')→{total:1,verified:1,bad:0,all_valid:True}、错密钥对照 bad=1(防线本体完好,缺口仅缺省密钥面);CLI run 无 shared_secret → swarm.json 落盘空串、追加接续 seq 伪造行 → verify --secret "" rc=0 all_valid=true、--secret 别的密钥 rc=1 bad=1 | **验证面已修**(F3 空串拒绝 fail-closed);run 侧缺省密钥与三入口统一=**语义专项 deferred**(第五节),v15/v17 留档口径维持,本轮零变更 |
98
+ | v12 N109+N110+N111 合并条 | swarm.rs(材料口径 :402-419/:769-776/:801-818/:1372-1376/:1095-1097/:1387;读核现行②face :1431 附近、③face :1445) | medium | 【v12 首报→v14 复测留档→本轮第 3 次复核三面全复现】①同 project+同 WAL 重入后 watermarks/gossip/health 三审计面归零(ACK payload 自带 {round,seq} 即重建信息源却未消费),违背重入幂等聚合契约;②非对称 gossip 拓扑(部分实例为源)投递完整却判 gossip_consistent=false;③gossip_received 实为发送侧 fan-out 计数(末轮产出与死亡目标照常计数,对账恒真掩盖丢弃) | 三面第一手复现(材料):①rounds=2 gossip 场景重入后三项全部归零 {};②三实例甲乙双源、丙纯汇总:实收足额 gossip={丙:2,乙:1,甲:1} 却 gossip_consistent=False(counts 排序后首尾相等判据,非对称拓扑期望数天然不等);③单轮场景 acks=0(零消息实际到达)而 gossip 计数照常透出非空(:1387 `gossip_received: gossip_sent`) | **①面已修**(F2);②③面 **deferred**(一致性判据语义+接收侧记账协议面,第五节) |
99
+ | v12 N113 拓扑测试静默跳过洞 | swarm/tests/test_swarm_topology.py:73-80(缺陷时点) | medium | 【v12 首报→本轮第 2 次复核(legacy/pybridge 双区双臂坐实)】②centralized/mesh 段两处 `if rr["ok"]:` 包裹且段内无任何前置无条件 check(对照①:63/③:85/:92/:100 均有)——拓扑运行失败时角色推导断言无声消失、套件仍全绿 exit 0,回归静默入库 | 双臂实测(材料):绿态基线 11 passed exit 0;注入臂(run_topo 对②段两拓扑返回 ok=False)→ ②段零 check 行、9 passed exit 0——被守护能力失效而套件全绿,静默放行坐实 | **已修**(F4,本会话 13 passed 0 failed) |
100
+ | v7 N57+N59 与 v12 N112 残面合并条 | swarm.rs:455-537/:1308-1315/:1105-1121/:568-618(材料口径) | medium | 【v7 N57/N59 首报+v12 N112→本轮复核维持】①恢复链路三遍「解析+HMAC 验签」+多份常驻+无压缩,重启成本随累计事件数线性无界;②WAL 写路径裸 File、flush 为 no-op 与 :1103-1104 纪律注释语义不符(正确性靠单 fd append+轮末 sync_all 兜底);③换 shared_secret 重入同 project+同 WAL:replay 全行验签失败→零提交→旧 WAL 静默归档 .corrupt-* 后从轮 1 重跑,rc=0 且报告无任何告警——与 WAL 被篡改在观测面不可区分 | ①第一手计量(材料):50,001 行合法签名 WAL 重入 0.678s vs 2 行对照 0.007s(≈13.4µs/行);三遍 sign_event 调用点读核在位;③密钥A 首跑→密钥B 重入 → rc=0、归档 .corrupt-<毫秒戳>、新 WAL 从轮 1 重跑、报告键集无 corrupt/archive/warning 任何字段 | **开口(medium)**——修复面大(压缩/性能/告警观测面),deferred |
101
+ | v17 N146 timeout/killed 标签不查产物 | hive/src/scheduler.rs:459-463(:453-457 killed 同面) | low | 【v17 首报→本轮读核确认在位+危害收敛】超时/kill 强杀分支 kill_tree 后**无条件** final_state=timeout/killed 不查产物(无 classify_result 调用)——执行器在最后心跳间隔内已原子写完 result.json(ok=true) 但进程尚在退出尾段被杀时,落成 status=timeout + result.ok=true 矛盾终态,与 R02 同族「标签与产物背离」 | 本轮读核 :459-463 无条件定态在位(材料+本会话);pybridge 区 serve.rs:201 复核升级(材料):swarm 交界无孤儿补写(见下「证伪」条),kill_tree 进程树回收后产物已不可能后出现——实际危害=亚秒竞窗误标非伪造面,低于 v17 留档评估;亚秒窗口未做动态复现(不可确定性构造,如实标注为读码确认) | **开口(low 维持留档)** |
102
+ | v5 N26 + v1 #26/#27 三件合并 | rust_codegen.py:63-75 + rust_swarm.py:250 + rust_runtime/src/main.rs:141-167(缺陷时点) | low | 【v1 #26/#27 + v5 N26 首报→本轮复核:①随 F5 已修、②③开口】①build_rust_exe 首建返回无后缀不存在路径——主链路靠 CreateProcess 自动补 .exe 未崩,任何对返回值 exists/copy/hash 的调用方必失败;②aggregate_health_python integrity 分子无 saturating_sub,verify_fail>total_events 时 integrity_rate 负值透出而 Rust 侧恒≥0——交叉验证参照实现在异常输入下数值分歧;③parse_json_scalar :143-146 裸 find([',','}']) 不跳字符串字面量、:152 丢弃 parse_json_string 返回的正确 next 游标——--symbols 字符串值含 ',' 或 '}' 时合法 JSON 被误拒 rc=2 | ③本轮升级真 exe 实测(材料):--symbols '{"符号":"你好,世界"}' → 「参数错误: 符号表键须为字符串」rc=2;'{"符号":"x}y"}' 同错;无分隔符对照 rc=0。②探针 integrity_rate=-0.6667 负值透出(score 因外层夹取仍 0.667,分项字段失真)。①第一手坐实返回 'protocol_vm' 不存在 | **①已修**(F5 同面);②③ **deferred**(各一行级修,顺批) |
103
+
104
+ ### 复测结案/台账条 3(不占缺陷数)
105
+
106
+ | 条目 | 结论与证据 |
107
+ |---|---|
108
+ | 批次53 R05/R06 seq 连续性修复复测(台账条) | **通过**(材料本轮实跑):test_fi_r05_wal_drop_line → verdict=pass consistent=true RC=0;test_fi_r06_wal_reorder_dep → verdict=pass RC=0;hive cargo test --lib 29 passed + --bin 7 passed 与候选声称逐一吻合;E8 补验:快照行+3 事件行 WAL 删快照行 → breaks 指位正确(row_type 报后继行类型,系判据表达力边界非缺陷);E8b 空 WAL 行夹中间删 seq=2 → break.line=3 空行计数证实。两附带对抗点:skip_continuity 全仓 grep 仅定义面与 chaos 测试三文件显式传 True,生产面 swarm_cli.py 严格缺省;continuity_breaks.line 按当前文件物理行号指位 |
109
+ | rustcore 焦点⑥:hmac.rs 纯 std SHA256+HMAC 对 RFC/Python 偏离复测(结案条) | **通过、未发现偏离**(材料):cargo build --release && cargo test --release——lib 8/8 全绿(FIPS 空消息/"abc" 向量、RFC 4231 TC1/TC2、WAL 恢复守卫、health 2 件);临时哑 cargo 工程与 Python hmac/hashlib 差分对拍 k∈{0,63,64,65,200}×m∈{0,55,56,63,64,65,10000} 共 35/35 逐字节一致(覆盖空消息/padding 边界/密钥折叠/万字节消息);对拍工程与临时目录已删(材料申报)。本会话复跑 cargo test lib 10/10(8 旧 + F2 两新)含同批向量,一致 |
110
+ | rustcore 焦点③④:health 四因子除零/NaN/溢出与同轮重建幂等复测(结案条) | **通过、未发现可报缺陷**(材料):分母 total/p 均 .max(1)(health.rs:58/:62)、saturating_sub(:69)、score clamp 0-1(:72-76)、gossip_base==0→coverage 1.0;权重硬编码无外部输入面;trust 不进 health 且 vm.rs:557-562 把非有限浮点序列化为 null 挡住实例侧 NaN 回流。两遍扫描前缀重建(swarm.rs:460-539)+管道断裂后每轮完整环境重跑读码复核未见轮次计数竞态/重复投递。焦点②(N146 timeout 标签)未修维持开口(上表) |
111
+
112
+ ### 证伪/剔除(rejected)
113
+
114
+ 四区复核 rejected 数组均为空——**本轮 0 条证伪剔除**(与 v16/v17/v18 的 0 条一致,如实记录)。已修剔除:无新剔除项。**边界证伪记录 1 条**(非条目剔除,供 DSH 专项第三轮免重复排查):**R02 同型在 swarm 交界不成立**——WAL 单写者=协调器(swarm.rs 五处 event_seq+=1 与写盘全在 run_swarm 体内,本轮读核;材料读核同结论),Python 侧超时 kill 协调器(rust_swarm.py:88-90)后实例 stdin 写端关闭 → serve.rs:201 `for line in stdin.lock().lines()` EOF break 自退(:289-291 写失败同 break;test_rust_swarm_kill.py:97 注释同证)——无孤儿补写者、poll 面无矛盾态可产生。活体强杀复现(材料):Popen protocol_vm(600 轮配置)→ 快照轮 K=17(真实中途点)tasklist 计 3 进程 → p.kill() 协调器 → 1.5s 后存活进程数=0、WAL 行数 360→360 无变化(无孤儿补写)、verify_wal_signatures all_valid=true breaks=0(链完好无撕裂)。**诚实收窄记录 4 条**:N155 触发窗窄于候选描述(见上表);N166 并发双建未捕获(窗口读码在案);N156 T_avg=NaN 子路径未端到端复现;N157 abort 终态未单独触发。
115
+
116
+ ---
117
+
118
+ ## 四、验证(门禁结果)
119
+
120
+ 下表区分**来源**:「编排实跑」=任务材料提供的编排会话门禁结果(本报告会话未重跑该项时如实标注);「本会话实跑」=本报告写作会话在仓库根目录实际运行(第一手命令与输出):
121
+
122
+ | 命令 | 结果 | 来源 |
123
+ |------|------|------|
124
+ | `python -X utf8 scripts/run_tests.py --jobs 4`(python 全量回归) | `===== SUMMARY 215/215 通过,5 跳过(依赖缺失/平台不符) =====` 退出码 0(尾部含 PASS hive.test_wm_progress / swarm.tests.test_rust_swarm / hive.test_exec_tools) | 编排实跑(材料);本会话后台复跑见本节末注① |
125
+ | swarm cargo test | 通过(退出码 0) | 编排实跑(材料);本会话复跑一致(下行) |
126
+ | `cargo test --manifest-path swarm/rust_runtime/Cargo.toml` | **lib 10 passed 0 failed**(含 F2 两新守卫 wal_reentry_keeps_watermark_and_gossip_faces / replay_backfills_watermarks_and_gossip_exactly、hmac FIPS/RFC 向量、health 2 件、WAL 恢复守卫组);bin/doc 0 用例 | **本会话实跑** |
127
+ | `cargo test --manifest-path hive/Cargo.toml` | **lib 29 + bin 9(含 F1 两新守卫 one_job_view_flags_late_result_after_error / one_job_view_no_conflict_without_contradiction 及 dedup_scan_active_only / content_hash_canonical_insensitive)+ judgment_surface 6(含 kill_tree_kills_grandchildren)= 44 passed 0 failed**——与 F1 材料口径 29+9+6 一致 | **本会话实跑** |
128
+ | `python -X utf8 -m hive.test_wm_conflict` | **7/7 通过**(G1 矛盾态拒绝/G2 staging 前无残留/G3 无 task 分支/Z1 done+ok 放行/Z2 无 status.json 放行/Z3 坏 status fail-closed/C1 CLI rc!=0)——与 F1 修后口径一致 | **本会话实跑** |
129
+ | `python -X utf8 swarm/tests/test_swarm_topology.py` | **13 passed, 0 failed** exit 0(②段「centralized 运行」「mesh 运行」两前置 check ✓——F4 守卫生效且无回归) | **本会话实跑** |
130
+ | `python -X utf8 swarm/tests/test_rust_swarm.py` | **24 passed, 0 failed**(③c-1/③c-2 空串/None 密钥拒绝 ValueError 文案在案——F3 守卫;篡改检测、验签容错、run_swarm 错误契约全绿) | **本会话实跑** |
131
+ | `python -X utf8 swarm/tests/test_swarm_cli.py` | **22 passed, 0 failed**(⑧a/⑧b N143 rc=2 守卫;③幂等重入 events 5→5 零重复=F5 配套面;④篡改检测) | **本会话实跑** |
132
+ | `python -X utf8 swarm/tests/test_rust_codegen.py` | **22 passed, 0 failed**(⑩节 8 腿全✓:⑩a 返回真实 .exe、⑩b delta=62.1s 重建、⑩c 重建语义 trust=0.9、⑩d 重入短路、⑩e 同源不覆写——F5 守卫,真实 cargo 构建;⑦/⑨按套件自身环境声明跳过——其探测与⑩实际构建可用并存的口径差异如实照录) | **本会话实跑** |
133
+ | npm test | 通过(退出码 0) | 编排实跑(材料);本会话未复跑(TS 面零改动——git diff --stat 证实无 src/ 触点) |
134
+ | npm run gate | 通过(编排实跑,材料口径,报告落盘前) | 编排实跑;本会话落盘后复跑分轮记录见末注②③④ |
135
+ | `git diff --stat` + `git status --porcelain` | 改动面=12 文件 +588/-41 + untracked hive/test_wm_conflict.py:main.rs +101/wm.py +27(F1)、swarm.rs +272(F2)、rust_swarm.py +12/swarm_cli.py +6/test_rust_swarm.py +39/test_swarm_cli.py +17/registry.py +4/test_fi_r08 +40(F3)、test_swarm_topology.py +5(F4)、rust_codegen.py +44/test_rust_codegen.py +62(F5)——与五项修复一一对应、**exec.rs 零改动与 N155 留档不修一致**、无越域改动 | **本会话实跑** |
136
+ | 落点读核(Read/grep) | 五项修复落点、两处补账病灶(swarm.rs verifier 记名面/main.rs:299-300)、17 项留档病灶代表性在位性(exec.rs:73、vm.rs:470-476、swarm.rs clamp 四处/sign_event :376/:1431/:1445、mcp_server.py:280-308、test_swarm_reflect_signal.py:72-73、test_rust_swarm.py:107-112、rust_swarm.py:27/:32/:126-128、swarm_cli.py:93/:131-134、main.rs:279、test_swarm_topology.py:72-84、rust_codegen.py:34-101、hive/test_wm_conflict.py)逐一看码在位——与材料「在位/开口」结论一致 | **本会话实跑** |
137
+
138
+ **末注(本会话后台/落盘后复跑,分轮如实记录)**:①python 全量后台复跑(`python -X utf8 scripts/run_tests.py --jobs 4`,后台完成)——`===== SUMMARY 215/215 通过,5 跳过(依赖缺失/平台不符) =====`,真实退出码 0,与编排实跑(材料口径)逐字一致;②npm run gate 落盘后首复跑——R1 凭据/密钥面(文件面=0 内容面=0)/R2 私有数据面/R3 隐私文本全 **PASS**(内容隐私零命中),unreachable 扫描 427 文件命中 0、发布清单/cogmap/链接检查/工作区索引/纪律渲染各环节过;**R4 非追踪件面 FAIL 命中=1(非追踪=25,允许=24),唯一命中件=本报告文件自身**——规则实现=`scripts/check_publish_artifact.py:431-435`(npm 包内 git 非追踪件仅允许 lib/;本报告 untracked 且在 npm 包内即超限),属产出文件待登记的结构状态、非内容违规(`git status --porcelain` 核实 untracked 共 2 件:本报告 + hive/test_wm_conflict.py,后者不在 npm 包内故未命中);③修正:本报告文件 `git add` 登记(仅暂存非提交,v18 同象先例);hive/test_wm_conflict.py 与 12 个修复改动文件保持工作树原状,归编排会话随批次处置;④登记后复跑:VERDICT=PASS(R1/R2/R3/R4 全 PASS,R4 命中=0)。
139
+
140
+ **上游会话已运行、本会话未重跑的验证**(材料口径,如实区分):五项修复的全部红证(修前各一跑,红绿数字见第二节——红证需旧码回退,多轮未提交改动的工作树上反复回退风险大于收益);四区复核全部攻击复现(protocol 拓扑双 ACK/哑进程树 taskkill rc=128/NaN 跨恢复/CALL×10000 内存采样/HMAC 边界平移对拍/换源旧字节码端到端/两目录同哈希去重/伪行冤枉无辜行/20 并发 submit/_submit 双建/50,001 行 WAL 计时/换密钥静默归档/活体强杀 EOF 自退等形态,均哑数据临时环境,材料逐项申报清理);FI-R04/R05/R06/resume/fault/protocol 无回归 sweep;35 组 HMAC 差分对拍。
141
+
142
+ ---
143
+
144
+ ## 五、遗留清单(19 个开口:medium 9 / low 10;rejected 0;含本报告补账 2 项)
145
+
146
+ | # | where | 严重度 | 问题 | 处置建议 |
147
+ |---|------|--------|------|----------|
148
+ | **N154**★(补账) | swarm.rs:899-921 | medium | protocol 拓扑 verifier ACK/水位把 primary 收件箱消息记到自己名下,G4b 契约破坏;primary 死亡轮投递丢失可被假成功掩盖 | verifier 记名面最小修=ACK/水位只记 verifier 自身收件箱(primary 载荷仅进复算输入);红守卫现成(protocol 双 ACK 复现形态)。**下轮 rust 面优先候选** |
149
+ | N155 | hive/src/exec.rs:73 | medium | kill_tree 不检查 taskkill 退出码,退出码失败形态静默空转、假成功、孤儿存活 | 一行级修(退出码非零也回落 child.kill());红守卫可覆盖死 pid 分支(rc=128 形态现成);竞窗/pid 复用不可确定性构造=诚实边界随守卫注明 |
150
+ | **N156** | swarm.rs clamp 面(现行 :530/:1086/:1091/:1407)+ 快照写出 | medium | 信任 0-1 夹取对 NaN 失效且经快照跨恢复永久存活,裸 NaN 非法 JSON 污染 WAL/快照/@trust 载荷 | **修复极简**(clamp 前 NaN 归零或配置面拒绝 NaN 字面量——含 Python json.dump allow_nan 面),红守卫可 cargo test;**建议下轮 rust 面优先速收** |
151
+ | **N162**★(补账) | hive/src/main.rs:299-301 | medium | 幂等键 content_hash 未含 cwd/解析后路径视图,相对 context_files 跨目录提交被折叠去重、任务静默丢失 | 修法=哈希混入 workdir/cwd 解析视图;**注意语义迁移**:改哈希口径使存量活跃任务判据换底,需与 find_active_by_hash 迁移策略一并设计——非纯一行,小专项 |
152
+ | N163 | rust_swarm.py:155-185 | medium | seq 连续性对坏行占位/不占位两路径不一致——伪行可制造指向无辜行的明细、真篡改反而最干净,取证归因误导 | 坏行占位策略语义设计(占槽行自身标注 + 明细不指向无辜行);all_valid 检出能力未损,属审计明细可信度专项 |
153
+ | v12 N109-111② | swarm.rs counts 判据(现行 :1431 附近) | medium | 非对称 gossip 拓扑投递完整却判 gossip_consistent=false(假 inconsistent) | 一致性判据须先拍板定义(按源期望数 / min-coverage / 角色加权三案选一)——**语义决策 deferred**,与③同一协议评审拍板 |
154
+ | v12 N109-111③ | swarm.rs:1445 `gossip_received: gossip_sent` | medium | gossip_received 实为发送侧 fan-out 计数,对账恒真掩盖丢弃 | 需接收侧记账(协议面/报告键变更);与②及 F2 诚实边界的 health 逐轮 outcomes 持久化同场拍板 |
155
+ | v7 N57+N59+v12 N112 残面合并条 | swarm.rs 恢复链路 | medium | 三遍验签线性无界成本 / 裸 File flush no-op / 换密钥重入静默归档重跑无告警 | 面大(压缩/性能/告警观测面)deferred;③最小起步=报告增 corrupt/archive/warning 字段使观测面可区分 |
156
+ | N143 全量语义专项(须拍板) | rust_swarm.py:27/:32 + swarm_cli.py:93 + main.rs:279 | medium | 缺省密钥从何而来 + 三入口口径不一致(CLI 空串/API 公开常量/Rust 键缺失回落且空串直接采用);跨机部署密钥明文同盘 | **三选一拍板**:fail-closed 拒启动 / 首启随机密钥生成落盘+权限收紧 / 显式必填;建议一轮专项统一三入口并定 swarm.json 密钥面边界。**验证面已 fail-closed(F3),run 侧拍板前维持现状=WAL 仍可能以空串/公开常量签名——诚实提示**;seq 连续性判据独立于密钥保密性仍可检出跳号/乱序 |
157
+ | N157 | vm.rs:470-476 | low | CALL 每帧全量克隆且无帧深上限,深递归×大符号表 GB 级内存 | 帧深上限取值(如 call_stack cap)拍板 + 克隆策略(COW/引用计数)评估;与批次56 Python VM N149 防线对齐 |
158
+ | N158 | swarm.rs:376-385 | low | HMAC 签名串 '|' 裸连接无转义,字段边界可平移且验签仍过 | canonicalization 加固(长度前缀/转义方案)——涉 WAL 格式兼容性决策;暴露面限 type/from/to |
159
+ | N160 | test_swarm_reflect_signal.py:72-73 | low | 恒真断言,level 字段零校验 | 一行修(读 WAL 修正信号行断言 level==2),顺批 |
160
+ | N161 | test_rust_swarm.py:107-112 | low | 篡改断言按旧 6 字段构造与七字段脱钩,两态恒真 | 一行修(对齐七字段+剥行尾},或直接删除断言改引 test_swarm_cli ④段),顺批 |
161
+ | N164 | rust_swarm.py:175-177 | low | seq 判据首行基准,删首部/清空不可检(绝对锚 seq==1 在 Rust 侧存在未用) | 加固项:绝对锚校验(新 WAL 首行须 seq=1)+空 WAL 明示;批次53 已知取舍升级 |
162
+ | N165 | mcp_server.py:280-308 | low | MCP hive_spawn 提交面无幂等键,与 CLI 面行为分叉(整面旁路) | _submit 接同哈希查询+content_hash 落盘,与 CLI 面共用判据;顺批 |
163
+ | N166 | hive/src/main.rs:301-333 | low | 幂等去重无锁 check-then-create,并发窗口双建 | 原子建池(先占位后写判据)或文件锁;注释已自认诚实取舍,low 维持 |
164
+ | v17 N146 | scheduler.rs:459-463 | low | timeout/killed 强杀分支不查产物无条件定态(亚秒竞窗误标) | 终态前 classify_result、有产物按产物定态;与 R02 已修面同域可搭车;kill 后产物已不可后出现,危害=误标非伪造 |
165
+ | v5 N26② | rust_swarm.py:250 | low | integrity 分子无 saturating_sub,异常输入负值透出(Rust 侧恒≥0) | 一行夹取对齐 health.rs:69,顺批 |
166
+ | v5 N26③ | main.rs:141-167 | low | parse_json_scalar 丢弃正确 next 游标,--symbols 值含 ,/} 被误拒 rc=2 | 一行修(采用 parse_json_string 返回的 next),顺批 |
167
+
168
+ ### 语义决策项与批次分诊(汇总)
169
+
170
+ 1. **下轮 rust 面速收批次(低风险、守卫现成)**:N156 NaN 归零夹取 → N154 verifier 记名面 → N155 kill_tree 退出码回落 → N157 帧深上限。四项均 medium/low、红守卫形态在材料中现成。
171
+ 2. **顺批一行族(单轮可清)**:N160/N161 测试记账、v5 N26②③、N165 MCP 幂等对齐、N166 原子建池、N164 绝对锚。
172
+ 3. **须先拍板后代码**:N143 缺省密钥来源与三入口统一(三选一,见上表);v12 N109-111②③ gossip 一致性判据+接收侧记账+health 逐轮 outcomes 持久化(同一协议评审);N163 坏行占位归因语义;N162 哈希口径迁移;N157 帧深上限取值;N158 canonicalization 编码方案(WAL 兼容性)。
173
+ 4. **交叠提示**:N154 与 F2 同在 WalReplay/ACK 面(修 F2 时行号已漂移,修 N154 时以读核现行 :899-921 为准);N156 与 N158 同在信任/WAL 完整性面;v5 N26③ 与 N158 同涉 main.rs/swarm.rs 参数与签名面。
174
+
175
+ ---
176
+
177
+ ## 六、纪律合规声明
178
+
179
+ 1. **定位先读索引**:本报告写作前已读 WORKSPACE_INDEX.md(按职责定位 swarm/ =「蜂群运行时——.pbc 确定性实例 + Gossip 拓扑/水位信箱/WAL-HMAC/信任聚合」、hive/ =「蜂巢并发引擎」),未做全盘浏览;材料指定的留档源头(故障注入实测_v1.0.md:192-193/:416、v17.md N143 口径、v15.md N128、v18.md 编号链)均 grep/读核核实。
180
+ 2. **结论引证**:所有修复与缺陷均引 path:line;材料行号为上游时点快照,本会话对五项修复落点与全部补账/留档开口逐一看码,F2 引起的 swarm.rs 行号下移(~+272)处双标(第三节/第四节逐项标注,以读核现行为准);第三节证据要点摘自任务输入的四区复核材料(上游会话读码+实跑),本会话读核一致的逐项标注★。
181
+ 3. **编号续编与冲突裁决声明**:v18 实际用至 N153(v18.md:4-5/:78-79 核实),任务书「v18 用至 N151」与在库报告不符——按「编号全局唯一」不变量本轮自 **N154 续编**;材料四区候选暂编号冲突 8 处由本报告会话统一裁决(rustcore 五项 +2 顺延 N154-N158、pybridge 三项冲突顺延 N159-N161、recent 四项未编号顺延 N162-N166),legacy R02 条候选自标不占新号——全部重编逐项标注原暂编号,非暗改。
182
+ 4. **材料账目遗漏如实补账**:N154(protocol verifier 记名)与 N162(content_hash 未含 cwd)两项四区 confirmed 却不在材料修复清单与留档清单——本报告未将其升格为已修、未伪造其缺失,而是第一手读核两病灶现行在位(swarm.rs:899-921、main.rs:299-300)后补账入第五节并显式标注「材料双清单遗漏,本报告补账」。
183
+ 5. **实验纪律**:材料全部攻击复现均在系统临时目录/哑密钥占位环境且逐项申报测毕清理(含 tasklist 10 pid 清点归零、mkdtemp 目录删除、0 leftover 申报);本报告会话仅运行常驻守卫/门禁/读码——未修改任何源文件、未做任何攻击性复现、未触任何真实令牌库/真实 serve/真实数据目录。
184
+ 6. **已修项勿重复报**:第 5 轮(swarm 深挖 7 修)、第 12 轮(WAL 原子化/验签 UTF-8/CLI 条件卡透传/异常面/embed 倒序修正)、批次53(R05/R06 seq 连续性、幂等键 CLI 面)已修清单未再报;本轮 5 修中 R02/v12 N109①/v12 N113/v5 N26① 为历轮留档面首修、N159 为新发现首修、N143 为留档缺陷的验证面首修(run 侧语义维持留档不重复立项);v17 N146 按留档口径维持不重复修复,仅复测在位性。
185
+ 7. **如实记录**:四区 rejected 均空(0 条证伪)如实声明;R02 同型在 swarm 交界不成立的边界证伪单列(供 DSH 专项第三轮免重复排查);四条诚实收窄(N155 触发窗/N166 双建未捕获/N156 T_avg 子路径/N157 abort 未触发)照录;门禁来源区分「编排实跑(材料)」与「本会话实跑」,守卫红证为材料口径未重跑(回退风险大于收益,绿态本会话逐一实跑一致);gate 首复跑 R4 结构命中与登记修正全程分轮留痕(第四节末注)——无一升格、无一虚闭。
186
+ 8. **隐私脱敏**:全文只写仓库相对路径;材料的本机绝对路径与本会话守卫输出中的系统临时目录路径形态一律以「系统临时目录/临时区/哑密钥占位」转录,不写入任何盘符/用户目录形态;哑密钥一律占位符(如「哑密钥-…」「API 键=dummy 占位」),无任何真实凭据字面量——本稿内容隐私面经 gate R1(文件面=0 内容面=0)/R2/R3 两轮实测 PASS(第四节末注②④)。
187
+ 9. **双清单自查**(写完自查):①**编号清单**——本轮新编号 N154-N166 共 13 项连续、无重号、无跳号,与 v18 终点 N153 衔接,与 v17 终点 N147(v17.md:5 核实)链条一致;候选冲突映射全部在第三节逐项留痕;②**修复/遗留互斥完备清单**——四区 confirmed 28 条目逐条归位:13 新发现(1 已修 N159 + 12 开口)+ 7 legacy 复测缺陷条(4 条含已修面、其余开口)+ 3 结案/台账条 + 5 条跨区重复合并 + 0 条证伪剔除 = 28;修复清单 5 补丁闭 6 面,遗留清单 19 开口(材料 17 + 补账 2),两清单无交集、无遗漏条目。
188
+
189
+ ---
190
+
191
+ ## 七、跳过项及原因
192
+
193
+ - **npm test 未复跑**:TS 面零改动(本会话 `git diff --stat` 证实无 src/ 触点,改动面仅 hive/swarm 交界域 12 文件+1 新守卫)——编排实跑通过(材料),如实标注来源。
194
+ - **五项修复的红证未重跑**:红证需旧码回退(回退多文件未提交工作树风险大于收益)——红绿数字为材料口径(第二节各守卫行),本会话以绿态逐一实跑一致 + 落点读核替代佐证。
195
+ - **四区复核的攻击复现未在本会话重跑**:全部动态复现(protocol 双 ACK/NaN 跨恢复/CALL 内存采样/HMAC 边界平移/换源旧字节码/两目录同哈希/伪行冤枉/并发 submit/50,001 行计时/换密钥归档/活体强杀等)为上游会话在临时环境执行且逐项申报清理;本会话以落点读核 + 五守卫实跑 + 双 cargo 全量替代,未重跑任何攻击场景。
196
+ - **MCP _t_spawn 端到端未实测**(N165 证据面):会经 _ensure_serve 拉起真实 serve,违反哑环境边界——材料以 _submit 纯函数面双建实测替代,本会话读核 _submit :280-308 无幂等在位佐证。
197
+ - **v17 N146 亚秒竞窗未动态复现**:不可确定性构造——读码确认无条件定态在位,如实标注为读码确认(历轮口径维持)。
198
+ - **N156 的 T_avg=NaN 子路径未端到端复现**:vm.rs:557-562 把非有限浮点序列化为 null 挡住 state_json 回流——以 rustc 原语实测(NaN.clamp 穿透/format! 出裸 NaN)+ 读码替代,如实区分「复现」与「读码+原语实测」。
199
+ - **N157 的 abort 终态未单独触发**:避免持续压机(10 GB 级工作集)——放大已实测(帧深×符号表),结构化步数上限报错终态在案。
200
+ - **N166 的并发双建未捕获**:20 并发一轮未命中毫秒级窗口——窗口读码在案(:301 读判据 → :327 写判据之间无锁),按 low 如实留档。
201
+ - **codegen ⑦/⑨ 两腿按套件自身环境声明跳过**:其 cargo 探测在本机环境未过(与⑩节实际构建可用并存的探测口径差异,照录不裁);⑩节真实 cargo 构建全绿。
202
+ - **python 全量后台复跑与撰写并行**:本会话另起 `scripts/run_tests.py --jobs 4` 后台复跑,报告撰写期间完成——`===== SUMMARY 215/215 通过,5 跳过 =====` 退出码 0,与编排实跑(材料口径)一致(第四节末注①已回填)。
203
+ - **gate 首复跑 R4 结构命中的修正**:命中件=本报告文件自身(untracked 非 Tracking 面规则 `check_publish_artifact.py:431-435`——npm 包内非追踪件仅允许 lib/),内容隐私 R1/R2/R3 同轮零命中——修正=本报告 `git add` 登记(仅暂存非提交),登记后复跑 VERDICT=PASS(第四节末注④);hive/test_wm_conflict.py 不在 npm 包内未命中,随修复批次归编排会话处置。
204
+ - **git 未提交**:commit 需任务方指令;本报告文件已登记(暂存区),12 个修复改动文件与 hive/test_wm_conflict.py 保持工作树原状,登记/提交归编排会话裁决。
205
+ - **19 项留档未修**:分诊与处置建议见第五节(rust 速收 4 项 + 顺批一行族 6 项 + 拍板后代码 6 族);本报告会话为报告撰写会话,不做修复。
206
+
207
+ ---