@furongjun1999/dsh-memory 0.4.11 → 0.5.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 (580) hide show
  1. package/README.md +552 -465
  2. package/codebuddy/CODEBUDDY.md +11 -3
  3. package/codebuddy/README.md +92 -90
  4. package/codebuddy/mcp.json +27 -27
  5. package/docs/GBrain/345/217/257/345/200/237/351/211/264/347/202/271_/347/201/265/346/236/242/350/220/275/347/202/271/344/272/244/346/216/245_20260919.md +169 -169
  6. package/docs/Pi/345/217/257/345/255/246/344/271/240/344/274/230/347/202/271_/347/201/265/346/236/242/345/244/247/350/204/221/346/224/271/350/277/233/344/272/244/346/216/245_20260915.md +144 -144
  7. package/docs/README.md +143 -111
  8. package/docs/discipline/harnesses.yaml +244 -226
  9. package/docs/discipline/templates/full.md.tmpl +61 -61
  10. package/docs/discipline/templates/rules.mdc.tmpl +68 -0
  11. package/docs/discipline/templates/skill.md.tmpl +23 -23
  12. package/docs/eval/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_md_cg_v1.0.md +299 -299
  13. package/docs/eval/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_md_cg_v2.0.md +239 -239
  14. package/docs/eval/bench_lingshu_self/bench_self.py +140 -0
  15. package/docs/eval/bench_lingshu_self/self_bench_result.json +404 -0
  16. 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
  17. 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
  18. package/docs/eval//345/256/236/351/252/214/346/226/271/346/241/210_/345/255/246/344/271/240/351/227/255/347/216/257AB/344/270/216/346/250/252/350/257/204_v1.0.md +174 -174
  19. 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
  20. package/docs/eval//346/250/252/350/257/204_/345/205/255/345/256/266100/351/242/230/344/270/255/350/213/261/345/217/214/346/237/245_v1.0.md +223 -223
  21. 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
  22. 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
  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_v1.md +156 -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_v10.md +210 -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_v11.md +227 -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_v12.md +203 -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_v13.md +233 -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_v14.md +191 -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_v15.md +213 -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_v16.md +214 -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_v17.md +199 -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_v2.md +156 -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_v3.md +152 -0
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. package/docs/{mdcg → hive}//344/273/244/347/211/214/344/270/216/350/247/222/350/211/262/346/235/203/350/201/214/345/210/206/347/246/273_v0.1.md +165 -160
  41. package/docs/hive//344/273/244/347/211/214/350/257/255/344/271/211/344/277/256/346/255/243_/344/273/262/350/243/201/344/275/215_v0.1.md +76 -0
  42. package/docs/{mdcg → hive}//345/255/220/344/273/243/347/220/206/351/205/215/347/275/256/346/240/207/345/207/206_v0.5.md +236 -236
  43. 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
  44. package/docs/hive//346/243/200/347/264/242/346/224/266/346/225/233/345/256/236/346/265/213/344/270/216S1b/350/256/276/350/256/241_v0.1.md +43 -43
  45. package/docs/hive//346/243/200/347/264/242/347/256/227/346/263/225/345/217/243/345/276/204/345/257/271/347/205/247_v0.1.md +85 -0
  46. 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 +102 -102
  47. 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 +47 -0
  48. 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 +519 -503
  49. package/docs/hive//350/234/202/345/267/242/345/267/245/344/275/234/350/256/260/345/277/206_/351/241/271/347/233/256/350/256/241/345/210/222.md +85 -85
  50. package/docs/hive//350/234/202/345/267/242/350/256/276/350/256/241_/347/220/206/350/256/272/345/257/271/351/275/220_v0.1.md +191 -0
  51. package/docs/hive//350/234/202/345/267/242/350/277/255/344/273/243_/345/256/217/350/247/202/344/270/216/347/276/244/344/275/223/350/260/203/345/272/246_v0.1.md +90 -0
  52. package/docs/images/lingshu-moonlight-covenant-poster-preview.jpg +0 -0
  53. package/docs/images/lingshu-moonlight-covenant-poster.png +0 -0
  54. package/docs/mdcg/D_meta_/345/267/245/347/250/213/345/214/226/346/226/271/346/241/210_v0.2.md +216 -216
  55. package/docs/mdcg/README/350/257/246/347/273/206/347/211/210_v0.4.10.md +646 -646
  56. package/docs/mdcg/lingshu_tutorial.html +14449 -14449
  57. package/docs/mdcg/release_v0.4.11.md +49 -0
  58. package/docs/mdcg/release_v0.4.5.md +55 -55
  59. package/docs/mdcg/tool_table_v0.3.0.md +117 -117
  60. package/docs/mdcg//345/205/250/345/272/223/344/273/243/347/240/201/350/257/204/345/256/241/344/270/216/346/235/241/344/273/266/345/214/226/346/263/250/351/207/212_/350/256/241/345/210/222_v0.1.md +600 -600
  61. 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
  62. package/docs/mdcg//345/215/225/345/205/203/350/207/252/346/210/221/351/224/232/347/202/271_/347/263/273/347/273/237/346/217/220/347/244/272/350/257/215/346/240/207/345/207/206_v0.3.md +275 -275
  63. package/docs/mdcg//345/217/221/345/270/203/351/227/250/347/246/201/351/223/276_v0.1.md +54 -0
  64. package/docs/mdcg//346/272/220/347/240/201/347/272/247/346/236/266/346/236/204/345/256/241/350/256/241_GPT/346/211/271/350/257/204/345/257/271/347/205/247_v1.0.md +130 -130
  65. package/docs/mdcg//347/201/265/346/236/24282/345/267/245/345/205/267_/345/212/237/350/203/275/346/225/264/347/220/206/344/270/216/350/277/201/347/247/273/346/230/240/345/260/204_v0.1.md +278 -278
  66. 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 +172 -172
  67. package/docs/mdcg//347/274/272/345/217/243/345/215/225_P0/346/224/266/345/217/243_v0.1.md +270 -270
  68. package/docs/mdcg//350/256/244/347/237/245/345/233/276_G4-G8/347/274/272/345/217/243/350/243/201/345/256/232/345/215/225_v0.1.md +491 -491
  69. package/docs/mdcg//350/256/244/347/237/245/345/233/276_/346/235/241/344/273/266/347/251/272/351/227/264/345/220/210/346/210/220/344/270/216/347/224/237/346/225/210/346/235/241/344/273/266/345/217/243/345/276/204_v0.1.md +340 -340
  70. 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 +588 -588
  71. package/docs/plans/GridWorld/346/234/200/345/260/217/351/227/255/347/216/257/350/247/204/346/240/274_v0.1.md +176 -176
  72. package/docs/plans//345/221/275/345/220/215/346/262/273/347/220/206_/351/241/271/347/233/256/350/256/241/345/210/222.md +81 -81
  73. package/docs/swarm//350/234/202/347/276/244/344/272/222/350/201/224_v0.1.md +704 -704
  74. package/docs/swarm//350/234/202/347/276/244/345/220/214/351/224/231/346/243/200/346/265/213/345/256/236/351/252/214/345/215/217/350/256/256_v0.1.md +242 -242
  75. 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
  76. package/docs/theory//345/215/225/347/272/277/347/250/213/344/270/216/346/263/250/346/204/217/345/212/233/351/233/206/344/270/255_/346/227/240/344/272/211/350/256/256/347/220/206/350/256/272/346/226/207/346/241/243_v1.0.md +129 -129
  77. package/docs/theory//345/271/266/345/217/221/345/277/205/347/204/266/346/200/247/347/220/206/350/256/272_v0.2.md +134 -134
  78. package/docs/theory//346/231/272/350/203/275/350/256/2723.4.md +5260 -5260
  79. package/docs/theory//346/246/202/345/277/265/345/210/206/345/261/202/345/257/271/351/275/220/350/241/250_v0.1.md +145 -145
  80. package/docs/theory//347/220/206/350/256/272_/346/234/272/345/210/266_/344/273/243/347/240/201_/345/256/236/351/252/214_/347/274/272/345/217/243/347/237/251/351/230/265_v0.1.md +144 -144
  81. package/docs/theory//347/220/206/350/256/272/344/273/223/346/213/206/345/210/206/344/270/216/347/231/275/347/256/261/347/237/245/350/257/206/345/272/223/345/206/205/350/277/201_v0.1.md +198 -198
  82. package/docs/theory//350/256/244/347/237/245/344/273/243/347/220/206/344/270/216/346/224/266/346/225/233/347/273/223/346/236/204_/346/235/241/344/273/266/350/256/272/351/207/215/346/236/204_v0.1.md +221 -221
  83. package/docs/world_model//344/270/226/347/225/214/346/250/241/345/236/213_/347/245/236/347/273/217/347/275/221/347/273/234/345/272/225/345/261/202/346/236/266/346/236/204_v1.0.md +237 -237
  84. 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
  85. package/docs//345/217/221/345/270/203/344/273/266/345/233/236/346/272/257/350/257/264/346/230/216_v0.1.md +82 -82
  86. 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 +28 -2
  87. package/dsh/README.md +82 -82
  88. package/dsh/cordis.yml.example +139 -139
  89. package/dsh/update-lingshu.bat +11 -11
  90. package/lib/bridge.d.ts +9 -0
  91. package/lib/bridge.js +35 -0
  92. package/lib/hooks.js +36 -2
  93. package/lib/index.js +7 -1
  94. package/lib/lib/roleplay_web.js +116 -29
  95. package/lib/lib/token_store.d.ts +7 -1
  96. package/lib/lib/token_store.js +12 -3
  97. package/md_cg/__init__.py +7 -7
  98. package/md_cg/audit.py +379 -368
  99. package/md_cg/autonomy.py +287 -287
  100. package/md_cg/backfill.py +1328 -1327
  101. package/md_cg/backfill_bigdomain.py +34 -34
  102. package/md_cg/backfill_bucket_zh.py +35 -0
  103. package/md_cg/bench6_arms.py +410 -410
  104. package/md_cg/bench6_common.py +230 -230
  105. package/md_cg/bench6_competitors.py +212 -212
  106. package/md_cg/bench_axis_domain.py +257 -257
  107. package/md_cg/bench_blind_comp.py +308 -308
  108. package/md_cg/bench_e2e_judge.py +532 -0
  109. package/md_cg/bench_e2e_locomo_qa.py +368 -0
  110. package/md_cg/bench_e2e_qa.py +256 -0
  111. package/md_cg/bench_en_atoms_public.py +230 -230
  112. package/md_cg/bench_governance.py +348 -348
  113. package/md_cg/bench_lme_zh.py +410 -410
  114. package/md_cg/bench_locomo.py +121 -121
  115. package/md_cg/bench_locomo_zh.py +450 -450
  116. package/md_cg/bench_locomo_zh_public.py +147 -147
  117. package/md_cg/bench_longmem.py +112 -112
  118. package/md_cg/bench_membench.py +632 -632
  119. package/md_cg/bench_p0.py +149 -149
  120. package/md_cg/bench_progressive.py +287 -287
  121. package/md_cg/bench_role_views.py +238 -238
  122. package/md_cg/bench_task_ab.py +243 -243
  123. package/md_cg/bench_task_ab_llm.py +408 -408
  124. package/md_cg/bench_unified_en.py +204 -204
  125. package/md_cg/bench_zh_mad.py +601 -601
  126. package/md_cg/blindspot_tickets.py +123 -123
  127. package/md_cg/branches.py +301 -285
  128. package/md_cg/build_postings.py +73 -73
  129. package/md_cg/ccgc.py +1006 -948
  130. package/md_cg/census.py +132 -132
  131. package/md_cg/chain.py +315 -300
  132. package/md_cg/codeindex.py +531 -531
  133. package/md_cg/coldverify.py +292 -292
  134. package/md_cg/comment_gate.py +337 -337
  135. package/md_cg/cond_compose.py +190 -190
  136. package/md_cg/cond_facts.py +154 -154
  137. package/md_cg/cond_template.json +106 -106
  138. package/md_cg/condition_anchor.py +142 -142
  139. package/md_cg/conformance.py +726 -726
  140. package/md_cg/consistency.py +717 -717
  141. package/md_cg/consolidate.py +1537 -1439
  142. package/md_cg/corpus.py +110 -110
  143. package/md_cg/crosscheck.py +1098 -1097
  144. package/md_cg/crypto.py +3 -1
  145. package/md_cg/d_meta.py +310 -310
  146. package/md_cg/datapath.py +78 -18
  147. package/md_cg/docindex.py +473 -473
  148. package/md_cg/eval_common.py +575 -575
  149. package/md_cg/evidence.py +4 -2
  150. package/md_cg/evolution.py +477 -477
  151. package/md_cg/export.py +222 -220
  152. package/md_cg/forgetting.py +581 -581
  153. package/md_cg/fsutil.py +377 -329
  154. package/md_cg/hotcache.py +48 -7
  155. package/md_cg/hyperedge.py +251 -251
  156. package/md_cg/identity.py +390 -390
  157. package/md_cg/insight.py +500 -500
  158. package/md_cg/interop.py +338 -0
  159. package/md_cg/judgment_manifest.py +177 -0
  160. package/md_cg/lexicon/build_cedict_en_zh.py +329 -329
  161. package/md_cg/lexicon/build_standard_en.py +171 -171
  162. package/md_cg/lexicon/expand_en_zh.py +211 -211
  163. package/md_cg/lifecycle.py +272 -272
  164. package/md_cg/linkref.py +280 -280
  165. package/md_cg/links.py +140 -107
  166. package/md_cg/mcp_server.py +403 -55
  167. package/md_cg/md_whitebox.py +345 -345
  168. package/md_cg/mdcg.py +783 -233
  169. package/md_cg/mdcos.py +500 -70
  170. package/md_cg/metacognition.py +591 -591
  171. package/md_cg/migrate.py +119 -119
  172. package/md_cg/migrate_aeis.py +221 -221
  173. package/md_cg/migrate_roleplay.py +293 -293
  174. package/md_cg/migrate_wisdom_graph.py +360 -360
  175. package/md_cg/mreview/__init__.py +25 -25
  176. package/md_cg/mreview/__main__.py +110 -110
  177. package/md_cg/mreview/bundle.py +178 -178
  178. package/md_cg/mreview/candidates.py +262 -262
  179. package/md_cg/mreview/govern.py +694 -693
  180. package/md_cg/mreview/locate.py +939 -939
  181. package/md_cg/mreview/pipeline.py +728 -728
  182. package/md_cg/mreview/rules/duplication.json +21 -21
  183. package/md_cg/mreview/rules/field_coverage.json +54 -54
  184. package/md_cg/mreview/rules/source_license.json +21 -21
  185. package/md_cg/mreview/rules/template_flow.json +21 -21
  186. package/md_cg/mreview/ruleset.py +252 -252
  187. package/md_cg/nodefile.py +575 -575
  188. package/md_cg/pooling.py +484 -472
  189. package/md_cg/postings.py +300 -298
  190. package/md_cg/predict.py +1100 -1100
  191. package/md_cg/progressive.py +123 -123
  192. package/md_cg/protect.py +272 -272
  193. package/md_cg/protocol/md_cg_gate.proto +33 -33
  194. package/md_cg/protocol.py +372 -372
  195. package/md_cg/provenance.py +582 -582
  196. package/md_cg/reach.py +453 -453
  197. package/md_cg/readcache.py +143 -0
  198. package/md_cg/reconcile.py +228 -0
  199. package/md_cg/refindex.py +833 -833
  200. package/md_cg/refine.py +604 -604
  201. package/md_cg/review_cli.py +170 -0
  202. package/md_cg/roleviews.py +89 -89
  203. package/md_cg/routing.py +393 -365
  204. package/md_cg/run_tests.py +211 -0
  205. package/md_cg/scrub.py +13 -3
  206. package/md_cg/security.py +128 -18
  207. package/md_cg/self_state.py +1029 -1029
  208. package/md_cg/selfreport.py +152 -151
  209. package/md_cg/semantic/__init__.py +10 -10
  210. package/md_cg/semantic/canonical.py +122 -122
  211. package/md_cg/semantic/en_normalizer.py +364 -364
  212. package/md_cg/semantic/en_zh_map.json +28694 -0
  213. package/md_cg/semantic/export_en_zh_map.py +64 -0
  214. package/md_cg/semantic/unify.py +45 -0
  215. package/md_cg/semantic/zh_en_atoms.py +139 -139
  216. package/md_cg/signer.py +7 -4
  217. package/md_cg/sources.py +816 -582
  218. package/md_cg/statushdr.py +179 -179
  219. package/md_cg/stg.py +54 -37
  220. package/md_cg/subgraph.py +729 -729
  221. package/md_cg/sustain.py +35 -5
  222. package/md_cg/tasks.py +470 -470
  223. package/md_cg/test_access_hints.py +147 -0
  224. package/md_cg/test_action_derive.py +203 -203
  225. package/md_cg/test_audit_rotate.py +270 -270
  226. package/md_cg/test_autonomy.py +143 -143
  227. package/md_cg/test_bench_governance.py +102 -102
  228. package/md_cg/test_blindspot_tickets.py +166 -166
  229. package/md_cg/test_branch_discard_tombstone.py +136 -0
  230. package/md_cg/test_branches.py +13 -3
  231. package/md_cg/test_ccg_perturb.py +184 -184
  232. package/md_cg/test_ccgc.py +433 -433
  233. package/md_cg/test_census_prune.py +81 -81
  234. package/md_cg/test_chain_read_isolate.py +168 -0
  235. package/md_cg/test_cond_compose_anchors.py +76 -76
  236. package/md_cg/test_cond_match.py +165 -165
  237. package/md_cg/test_condition_anchor.py +81 -81
  238. package/md_cg/test_d_meta.py +412 -412
  239. package/md_cg/test_datapath_device_name.py +203 -0
  240. package/md_cg/test_datapath_root.py +199 -199
  241. package/md_cg/test_emit_negtail_cache.py +156 -0
  242. package/md_cg/test_en_pipeline.py +22 -2
  243. package/md_cg/test_gain_gate.py +212 -212
  244. package/md_cg/test_govern_directread.py +421 -0
  245. package/md_cg/test_health_scale.py +173 -173
  246. package/md_cg/test_hive_ingest.py +285 -0
  247. package/md_cg/test_hot_cold.py +215 -215
  248. package/md_cg/test_hyperedge.py +245 -245
  249. package/md_cg/test_i26_empty_first_write.py +116 -0
  250. package/md_cg/test_i27_e041_identity.py +128 -0
  251. package/md_cg/test_i28_hotcache_prodpath.py +122 -0
  252. package/md_cg/test_i32_hotcache_env_key.py +218 -0
  253. package/md_cg/test_identity_attribution.py +96 -15
  254. package/md_cg/test_index_durability.py +17 -3
  255. package/md_cg/test_interop.py +95 -0
  256. package/md_cg/test_interop_judgment.py +228 -0
  257. package/md_cg/test_issue39_utf8_stdio.py +273 -0
  258. package/md_cg/test_lifecycle.py +309 -309
  259. package/md_cg/test_linkref.py +306 -306
  260. package/md_cg/test_links_concurrent_write.py +188 -0
  261. package/md_cg/test_lock.py +43 -43
  262. package/md_cg/test_md_access_parity.py +255 -255
  263. package/md_cg/test_md_writepath.py +345 -345
  264. package/md_cg/test_mdstore_search_parity.py +160 -0
  265. package/md_cg/test_merge_upsert.py +168 -0
  266. package/md_cg/test_mr_m2.py +587 -587
  267. package/md_cg/test_mr_m3.py +710 -710
  268. package/md_cg/test_mr_m4.py +485 -485
  269. package/md_cg/test_n123_derive_expiry_chain.py +205 -0
  270. package/md_cg/test_n130_verify_falsified_protect.py +185 -0
  271. package/md_cg/test_n131_merge_gate.py +205 -0
  272. package/md_cg/test_p0.py +250 -250
  273. package/md_cg/test_p1.py +316 -316
  274. package/md_cg/test_p10_identity.py +173 -173
  275. package/md_cg/test_p11_consistency.py +233 -233
  276. package/md_cg/test_p12_metacognition.py +212 -212
  277. package/md_cg/test_p13_encryption.py +241 -241
  278. package/md_cg/test_p14_sustain.py +249 -249
  279. package/md_cg/test_p15_scrub.py +280 -280
  280. package/md_cg/test_p16_self_state.py +301 -301
  281. package/md_cg/test_p17_predict.py +354 -354
  282. package/md_cg/test_p18_whitebox.py +171 -171
  283. package/md_cg/test_p19_migrate_roleplay.py +149 -149
  284. package/md_cg/test_p1x_ref_root.py +160 -0
  285. package/md_cg/test_p20_evolution.py +315 -315
  286. package/md_cg/test_p21_tokens.py +293 -270
  287. package/md_cg/test_p22_theory.py +175 -175
  288. package/md_cg/test_p23_links.py +311 -311
  289. package/md_cg/test_p24_evidence.py +227 -227
  290. package/md_cg/test_p25_weights.py +156 -156
  291. package/md_cg/test_p26_refindex.py +416 -416
  292. package/md_cg/test_p27_docindex.py +16 -7
  293. package/md_cg/test_p28_refcheck.py +305 -305
  294. package/md_cg/test_p29_session_ingest_export.py +354 -333
  295. package/md_cg/test_p2_mcp.py +3 -0
  296. package/md_cg/test_p3.py +11 -2
  297. package/md_cg/test_p30_maintain.py +330 -330
  298. package/md_cg/test_p31_insight.py +534 -534
  299. package/md_cg/test_p32_backfill.py +7 -1
  300. package/md_cg/test_p33_ccg_wiring.py +293 -293
  301. package/md_cg/test_p34_crosscheck.py +331 -331
  302. package/md_cg/test_p35_conditioned_claim.py +252 -252
  303. package/md_cg/test_p36_kp_align.py +230 -230
  304. package/md_cg/test_p37_condition_space.py +248 -248
  305. package/md_cg/test_p38_concurrent_flush.py +102 -0
  306. package/md_cg/test_p38_contextualize.py +273 -273
  307. package/md_cg/test_p39_verify_flow.py +153 -0
  308. package/md_cg/test_p39_vision_evidence.py +369 -369
  309. package/md_cg/test_p40_refine_worklist.py +241 -241
  310. package/md_cg/test_p41_evolve_patrol.py +224 -224
  311. package/md_cg/test_p42_provenance.py +269 -269
  312. package/md_cg/test_p43_pooling.py +412 -398
  313. package/md_cg/test_p44_md_whitebox.py +231 -231
  314. package/md_cg/test_p45_session_identity.py +219 -219
  315. package/md_cg/test_p46_unit_scope.py +272 -272
  316. package/md_cg/test_p47_session_view.py +316 -0
  317. package/md_cg/test_p4_fuzzy.py +223 -223
  318. package/md_cg/test_p5_semantic.py +226 -226
  319. package/md_cg/test_p6_consolidate.py +440 -387
  320. package/md_cg/test_p7_goals_recent.py +202 -202
  321. package/md_cg/test_p8_subgraph_chain.py +200 -200
  322. package/md_cg/test_p9_forget_protect.py +231 -231
  323. package/md_cg/test_predict_beta.py +135 -135
  324. package/md_cg/test_preflight_failclosed.py +100 -100
  325. package/md_cg/test_progressive.py +146 -146
  326. package/md_cg/test_propose_tail_index.py +157 -0
  327. package/md_cg/test_protocol.py +243 -243
  328. package/md_cg/test_reach.py +378 -378
  329. package/md_cg/test_reach_keys.py +201 -201
  330. package/md_cg/test_read_clip.py +141 -141
  331. package/md_cg/test_read_scope_b27.py +277 -0
  332. package/md_cg/test_readcache_default_on.py +168 -0
  333. package/md_cg/test_readcache_precise_inval.py +270 -0
  334. package/md_cg/test_readcache_prodpath.py +203 -0
  335. package/md_cg/test_reconcile_v0.py +294 -0
  336. package/md_cg/test_retr_gates_prodpath.py +140 -0
  337. package/md_cg/test_retr_s1.py +344 -340
  338. package/md_cg/test_retr_s1b.py +276 -209
  339. package/md_cg/test_retr_s3.py +194 -194
  340. package/md_cg/test_retr_s4.py +163 -163
  341. package/md_cg/test_retr_s5.py +200 -200
  342. package/md_cg/test_retr_s6.py +157 -157
  343. package/md_cg/test_retr_s7.py +392 -384
  344. package/md_cg/test_retr_s8_time.py +369 -316
  345. package/md_cg/test_retr_s9_edges.py +286 -286
  346. package/md_cg/test_retr_s9_entity_ctx.py +9 -3
  347. package/md_cg/test_retr_score_once.py +208 -0
  348. package/md_cg/test_review_conformance.py +367 -367
  349. package/md_cg/test_review_onepass.py +170 -0
  350. package/md_cg/test_role_views.py +354 -354
  351. package/md_cg/test_rrf_graph_seed_cache.py +154 -0
  352. package/md_cg/test_security_audit.py +155 -0
  353. package/md_cg/test_security_audit_b26.py +161 -0
  354. package/md_cg/test_security_audit_v21.py +250 -0
  355. package/md_cg/test_sem_noise.py +242 -242
  356. package/md_cg/test_semantic_canonical.py +16 -2
  357. package/md_cg/test_session_isolation.py +168 -0
  358. package/md_cg/test_snapshot_autoclose.py +187 -0
  359. package/md_cg/test_subproc_encoding.py +192 -192
  360. package/md_cg/test_sustain_mutual.py +153 -153
  361. package/md_cg/test_tail_watermark_race.py +208 -0
  362. package/md_cg/test_tasks.py +409 -409
  363. package/md_cg/test_tenant_env_override_warn.py +139 -0
  364. package/md_cg/test_tenant_registry_corrupt_warn.py +151 -0
  365. package/md_cg/test_tool_face.py +189 -189
  366. package/md_cg/test_transfer.py +180 -180
  367. package/md_cg/test_trust.py +361 -361
  368. package/md_cg/test_twophase.py +286 -286
  369. package/md_cg/test_v14_fixes.py +38 -20
  370. package/md_cg/test_validity_filter.py +280 -280
  371. package/md_cg/test_verify_answer.py +138 -138
  372. package/md_cg/test_verify_dirty_reconcile.py +157 -0
  373. package/md_cg/test_wisdom_md_store.py +292 -292
  374. package/md_cg/test_writelimit.py +197 -197
  375. package/md_cg/test_writepipe.py +214 -214
  376. package/md_cg/theory.py +6 -3
  377. package/md_cg/tokens.py +85 -14
  378. package/md_cg/tool_face.py +260 -260
  379. package/md_cg/trust.py +986 -950
  380. package/md_cg/twophase.py +231 -231
  381. package/md_cg/units.py +668 -667
  382. package/md_cg/vision_evidence.py +667 -666
  383. package/md_cg/weights.py +624 -624
  384. package/md_cg/whitebox.py +527 -527
  385. package/md_cg/whitebox_kb/__init__.py +37 -37
  386. package/md_cg/whitebox_kb/aeis_core/__init__.py +42 -42
  387. package/md_cg/whitebox_kb/aeis_core/semantic.py +280 -280
  388. package/md_cg/whitebox_kb/aeis_core/textutil.py +13 -13
  389. package/md_cg/whitebox_kb/engine.py +310 -310
  390. package/md_cg/whitebox_kb/seed_knowledge//346/231/272/350/203/275/350/256/2723.4.md +5260 -5260
  391. package/md_cg/whitebox_kb/wisdom/browser_units.py +2631 -2631
  392. package/md_cg/whitebox_kb/wisdom/causal_discover.py +432 -432
  393. package/md_cg/whitebox_kb/wisdom/chat_engine.py +1506 -1506
  394. package/md_cg/whitebox_kb/wisdom/compiler_code_units.py +3033 -3033
  395. package/md_cg/whitebox_kb/wisdom/condition_algebra.py +112 -112
  396. package/md_cg/whitebox_kb/wisdom/condition_frame.py +315 -315
  397. package/md_cg/whitebox_kb/wisdom/condition_kb.py +108 -108
  398. package/md_cg/whitebox_kb/wisdom/conflict_map.json +4445 -4445
  399. package/md_cg/whitebox_kb/wisdom/core/lexer.py +512 -512
  400. package/md_cg/whitebox_kb/wisdom/core/name_checker.py +1023 -1023
  401. package/md_cg/whitebox_kb/wisdom/cspmn.py +258 -258
  402. package/md_cg/whitebox_kb/wisdom/csre.py +264 -264
  403. package/md_cg/whitebox_kb/wisdom/danmaku_audit.py +252 -252
  404. package/md_cg/whitebox_kb/wisdom/distilled_condition_units.json +6417 -6417
  405. package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902b.json +1950 -1950
  406. package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902c.json +1296 -1296
  407. package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph_demo.json +59 -59
  408. package/md_cg/whitebox_kb/wisdom/graph_db_units.py +3089 -3089
  409. package/md_cg/whitebox_kb/wisdom/knowledge_points.py +318 -318
  410. package/md_cg/whitebox_kb/wisdom/md_access.py +470 -470
  411. package/md_cg/whitebox_kb/wisdom/md_store.py +276 -251
  412. package/md_cg/whitebox_kb/wisdom/migrate_wisdom.py +476 -476
  413. package/md_cg/whitebox_kb/wisdom/multilang_ir.py +128 -124
  414. package/md_cg/whitebox_kb/wisdom/navigate.py +248 -248
  415. package/md_cg/whitebox_kb/wisdom/neural_retrieve.py +224 -224
  416. package/md_cg/whitebox_kb/wisdom/os_units.py +2735 -2735
  417. package/md_cg/whitebox_kb/wisdom/pattern_separation.py +376 -376
  418. package/md_cg/whitebox_kb/wisdom/prereq_map.json +364 -364
  419. package/md_cg/whitebox_kb/wisdom/python_code_units.py +2766 -2766
  420. package/md_cg/whitebox_kb/wisdom/role_solidified.json +7 -7
  421. package/md_cg/whitebox_kb/wisdom/route_memory.py +244 -244
  422. package/md_cg/whitebox_kb/wisdom/scene_reconstruction.py +148 -148
  423. package/md_cg/whitebox_kb/wisdom/snr_report.json +40 -40
  424. package/md_cg/whitebox_kb/wisdom/test_code_compose_domains.py +7541 -7541
  425. package/md_cg/whitebox_kb/wisdom/test_compiler_self_bootstrap.py +354 -354
  426. package/md_cg/whitebox_kb/wisdom/test_ecosystem_assembly.py +158 -158
  427. package/md_cg/whitebox_kb/wisdom/test_ecosystem_demos.py +193 -193
  428. package/md_cg/whitebox_kb/wisdom/test_graph_db.py +292 -292
  429. package/md_cg/whitebox_kb/wisdom/test_python_self_bootstrap.py +160 -160
  430. package/md_cg/whitebox_kb/wisdom/trigger_words_index.json +4366 -4366
  431. package/md_cg/whitebox_kb/wisdom/verifier.py +1297 -1297
  432. package/md_cg/writelimit.py +356 -356
  433. package/md_cg/writepipe.py +20 -8
  434. package/package.json +101 -96
  435. package/skills/plugin.json +54 -54
  436. package/skills/skills/designer-perspective/SKILL.md +158 -158
  437. package/skills/skills/designer-perspective/references/01-observation-position.md +66 -66
  438. package/skills/skills/designer-perspective/references/02-structure-recognition.md +62 -62
  439. package/skills/skills/designer-perspective/references/03-direction-judgment.md +55 -55
  440. package/skills/skills/designer-perspective/references/04-qualification-verdict.md +72 -72
  441. package/skills/skills/designer-perspective/references/05-condition-attribution.md +74 -74
  442. package/skills/skills/designer-perspective/scripts/designer.py +545 -545
  443. package/skills/skills/designer-perspective/tests/cases.jsonl +17 -17
  444. package/skills/skills/designer-perspective/tests/selftest.py +61 -61
  445. package/skills/skills/lingshu-browser/SKILL.md +60 -60
  446. package/skills/skills/lingshu-compiler/SKILL.md +56 -56
  447. package/skills/skills/lingshu-compiler/units/analyze-type-infer/SKILL.md +45 -45
  448. package/skills/skills/lingshu-compiler/units/check-name-real/SKILL.md +45 -45
  449. package/skills/skills/lingshu-compiler/units/compile-assign/SKILL.md +45 -45
  450. package/skills/skills/lingshu-compiler/units/compile-expr-tree/SKILL.md +45 -45
  451. package/skills/skills/lingshu-compiler/units/compile-full-pipeline/SKILL.md +45 -45
  452. package/skills/skills/lingshu-compiler/units/compile-func-def/SKILL.md +45 -45
  453. package/skills/skills/lingshu-compiler/units/compile-if-then/SKILL.md +45 -45
  454. package/skills/skills/lingshu-compiler/units/compile-logic-expr/SKILL.md +45 -45
  455. package/skills/skills/lingshu-compiler/units/compile-recursive/SKILL.md +45 -45
  456. package/skills/skills/lingshu-compiler/units/compile-scope/SKILL.md +45 -45
  457. package/skills/skills/lingshu-compiler/units/compile-type-check/SKILL.md +45 -45
  458. package/skills/skills/lingshu-compiler/units/compile-while/SKILL.md +45 -45
  459. package/skills/skills/lingshu-compiler/units/compiler-0010c4bf/SKILL.md +45 -45
  460. package/skills/skills/lingshu-compiler/units/compiler-0355bffb/SKILL.md +45 -45
  461. package/skills/skills/lingshu-compiler/units/compiler-0361708a/SKILL.md +45 -45
  462. package/skills/skills/lingshu-compiler/units/compiler-054a0414/SKILL.md +45 -45
  463. package/skills/skills/lingshu-compiler/units/compiler-05a1691a/SKILL.md +45 -45
  464. package/skills/skills/lingshu-compiler/units/compiler-05eeed1e/SKILL.md +45 -45
  465. package/skills/skills/lingshu-compiler/units/compiler-0622a1f6/SKILL.md +45 -45
  466. package/skills/skills/lingshu-compiler/units/compiler-08b54217/SKILL.md +45 -45
  467. package/skills/skills/lingshu-compiler/units/compiler-0a62b70c/SKILL.md +45 -45
  468. package/skills/skills/lingshu-compiler/units/compiler-0ab24d00/SKILL.md +45 -45
  469. package/skills/skills/lingshu-compiler/units/compiler-0e093688/SKILL.md +45 -45
  470. package/skills/skills/lingshu-compiler/units/compiler-0e82b966/SKILL.md +45 -45
  471. package/skills/skills/lingshu-compiler/units/compiler-0ee9b9b9/SKILL.md +45 -45
  472. package/skills/skills/lingshu-compiler/units/compiler-0f3787e6/SKILL.md +45 -45
  473. package/skills/skills/lingshu-compiler/units/compiler-1028685f/SKILL.md +45 -45
  474. package/skills/skills/lingshu-compiler/units/compiler-11897630/SKILL.md +45 -45
  475. package/skills/skills/lingshu-compiler/units/compiler-16661b9b/SKILL.md +45 -45
  476. package/skills/skills/lingshu-compiler/units/compiler-1f722303/SKILL.md +45 -45
  477. package/skills/skills/lingshu-compiler/units/compiler-25be1262/SKILL.md +45 -45
  478. package/skills/skills/lingshu-compiler/units/compiler-2a76ba07/SKILL.md +45 -45
  479. package/skills/skills/lingshu-compiler/units/compiler-2dbea54a/SKILL.md +45 -45
  480. package/skills/skills/lingshu-compiler/units/compiler-2df52f16/SKILL.md +45 -45
  481. package/skills/skills/lingshu-compiler/units/compiler-2ec2c9d2/SKILL.md +45 -45
  482. package/skills/skills/lingshu-compiler/units/compiler-2f8c8f39/SKILL.md +45 -45
  483. package/skills/skills/lingshu-compiler/units/compiler-38378ac7/SKILL.md +45 -45
  484. package/skills/skills/lingshu-compiler/units/compiler-39457d2e/SKILL.md +45 -45
  485. package/skills/skills/lingshu-compiler/units/compiler-39fb5926/SKILL.md +45 -45
  486. package/skills/skills/lingshu-compiler/units/compiler-47f4fbfa/SKILL.md +45 -45
  487. package/skills/skills/lingshu-compiler/units/compiler-4a8cd1f1/SKILL.md +45 -45
  488. package/skills/skills/lingshu-compiler/units/compiler-4b230b6b/SKILL.md +45 -45
  489. package/skills/skills/lingshu-compiler/units/compiler-4cbbda95/SKILL.md +45 -45
  490. package/skills/skills/lingshu-compiler/units/compiler-4d5a68ff/SKILL.md +45 -45
  491. package/skills/skills/lingshu-compiler/units/compiler-56dc9bdd/SKILL.md +45 -45
  492. package/skills/skills/lingshu-compiler/units/compiler-57e76ebe/SKILL.md +45 -45
  493. package/skills/skills/lingshu-compiler/units/compiler-61ff016b/SKILL.md +45 -45
  494. package/skills/skills/lingshu-compiler/units/compiler-63eae588/SKILL.md +45 -45
  495. package/skills/skills/lingshu-compiler/units/compiler-64c4224b/SKILL.md +45 -45
  496. package/skills/skills/lingshu-compiler/units/compiler-66377955/SKILL.md +45 -45
  497. package/skills/skills/lingshu-compiler/units/compiler-674ab4f6/SKILL.md +45 -45
  498. package/skills/skills/lingshu-compiler/units/compiler-6af76fd6/SKILL.md +45 -45
  499. package/skills/skills/lingshu-compiler/units/compiler-6d979db2/SKILL.md +45 -45
  500. package/skills/skills/lingshu-compiler/units/compiler-6de326c0/SKILL.md +45 -45
  501. package/skills/skills/lingshu-compiler/units/compiler-6f1c0eea/SKILL.md +45 -45
  502. package/skills/skills/lingshu-compiler/units/compiler-724d6c9b/SKILL.md +45 -45
  503. package/skills/skills/lingshu-compiler/units/compiler-7690177f/SKILL.md +45 -45
  504. package/skills/skills/lingshu-compiler/units/compiler-7b229a7d/SKILL.md +45 -45
  505. package/skills/skills/lingshu-compiler/units/compiler-7f471b3a/SKILL.md +45 -45
  506. package/skills/skills/lingshu-compiler/units/compiler-815cad08/SKILL.md +45 -45
  507. package/skills/skills/lingshu-compiler/units/compiler-83c61634/SKILL.md +45 -45
  508. package/skills/skills/lingshu-compiler/units/compiler-8c798c81/SKILL.md +45 -45
  509. package/skills/skills/lingshu-compiler/units/compiler-8dd747ac/SKILL.md +45 -45
  510. package/skills/skills/lingshu-compiler/units/compiler-90324d0a/SKILL.md +45 -45
  511. package/skills/skills/lingshu-compiler/units/compiler-94b8d72d/SKILL.md +45 -45
  512. package/skills/skills/lingshu-compiler/units/compiler-94f12231/SKILL.md +45 -45
  513. package/skills/skills/lingshu-compiler/units/compiler-95937c16/SKILL.md +45 -45
  514. package/skills/skills/lingshu-compiler/units/compiler-98a5625b/SKILL.md +45 -45
  515. package/skills/skills/lingshu-compiler/units/compiler-98b4c42f/SKILL.md +45 -45
  516. package/skills/skills/lingshu-compiler/units/compiler-98e3894a/SKILL.md +45 -45
  517. package/skills/skills/lingshu-compiler/units/compiler-9bdfe4b8/SKILL.md +45 -45
  518. package/skills/skills/lingshu-compiler/units/compiler-9d9b4e83/SKILL.md +45 -45
  519. package/skills/skills/lingshu-compiler/units/compiler-9f7be5ad/SKILL.md +45 -45
  520. package/skills/skills/lingshu-compiler/units/compiler-a6daf076/SKILL.md +45 -45
  521. package/skills/skills/lingshu-compiler/units/compiler-a7995a0c/SKILL.md +45 -45
  522. package/skills/skills/lingshu-compiler/units/compiler-a8399248/SKILL.md +45 -45
  523. package/skills/skills/lingshu-compiler/units/compiler-aabbd099/SKILL.md +45 -45
  524. package/skills/skills/lingshu-compiler/units/compiler-afe169d8/SKILL.md +45 -45
  525. package/skills/skills/lingshu-compiler/units/compiler-b0678bda/SKILL.md +45 -45
  526. package/skills/skills/lingshu-compiler/units/compiler-b09bd196/SKILL.md +45 -45
  527. package/skills/skills/lingshu-compiler/units/compiler-b1396e23/SKILL.md +45 -45
  528. package/skills/skills/lingshu-compiler/units/compiler-b9b31ce0/SKILL.md +45 -45
  529. package/skills/skills/lingshu-compiler/units/compiler-c10264a7/SKILL.md +45 -45
  530. package/skills/skills/lingshu-compiler/units/compiler-cb1e8e4b/SKILL.md +45 -45
  531. package/skills/skills/lingshu-compiler/units/compiler-ccafd438/SKILL.md +45 -45
  532. package/skills/skills/lingshu-compiler/units/compiler-cda9c262/SKILL.md +45 -45
  533. package/skills/skills/lingshu-compiler/units/compiler-ce648068/SKILL.md +45 -45
  534. package/skills/skills/lingshu-compiler/units/compiler-cf5776a4/SKILL.md +45 -45
  535. package/skills/skills/lingshu-compiler/units/compiler-d974e5d3/SKILL.md +45 -45
  536. package/skills/skills/lingshu-compiler/units/compiler-e3979fd3/SKILL.md +45 -45
  537. package/skills/skills/lingshu-compiler/units/compiler-eb1cf2b5/SKILL.md +45 -45
  538. package/skills/skills/lingshu-compiler/units/compiler-ecb30d5b/SKILL.md +45 -45
  539. package/skills/skills/lingshu-compiler/units/compiler-f8c8b24b/SKILL.md +45 -45
  540. package/skills/skills/lingshu-compiler/units/compiler-f99fedbe/SKILL.md +45 -45
  541. package/skills/skills/lingshu-compiler/units/compiler-fa8ff5f7/SKILL.md +45 -45
  542. package/skills/skills/lingshu-compiler/units/compiler-fe1b058d/SKILL.md +45 -45
  543. package/skills/skills/lingshu-compiler/units/lex-chinese-program/SKILL.md +45 -45
  544. package/skills/skills/lingshu-compiler/units/lex-dao-de-jing/SKILL.md +45 -45
  545. package/skills/skills/lingshu-compiler/units/lex-nine-chapters/SKILL.md +45 -45
  546. package/skills/skills/lingshu-compiler/units/vm-arithmetic/SKILL.md +45 -45
  547. package/skills/skills/lingshu-compiler/units/vm-array-ops/SKILL.md +45 -45
  548. package/skills/skills/lingshu-compiler/units/vm-closure-call/SKILL.md +45 -45
  549. package/skills/skills/lingshu-compiler/units/vm-closure-create/SKILL.md +45 -45
  550. package/skills/skills/lingshu-compiler/units/vm-compare/SKILL.md +45 -45
  551. package/skills/skills/lingshu-compiler/units/vm-cond-jump/SKILL.md +45 -45
  552. package/skills/skills/lingshu-compiler/units/vm-cond-space/SKILL.md +45 -45
  553. package/skills/skills/lingshu-compiler/units/vm-exception/SKILL.md +45 -45
  554. package/skills/skills/lingshu-compiler/units/vm-func-call/SKILL.md +45 -45
  555. package/skills/skills/lingshu-compiler/units/vm-loop-run/SKILL.md +45 -45
  556. package/skills/skills/lingshu-compiler/units/vm-profiling/SKILL.md +45 -45
  557. package/skills/skills/lingshu-compiler/units/vm-refcount/SKILL.md +45 -45
  558. package/skills/skills/lingshu-compiler/units/vm-run-loop/SKILL.md +45 -45
  559. package/skills/skills/lingshu-compiler/units/vm-short-circuit/SKILL.md +45 -45
  560. package/skills/skills/lingshu-compiler/units/vm-stack-guard/SKILL.md +45 -45
  561. package/skills/skills/lingshu-compiler/units/vm-stack-ops/SKILL.md +45 -45
  562. package/skills/skills/lingshu-compiler/units/vm-trust-accum/SKILL.md +45 -45
  563. package/skills/skills/lingshu-graph/SKILL.md +63 -63
  564. package/skills/skills/lingshu-net/SKILL.md +48 -48
  565. package/skills/skills/lingshu-os/SKILL.md +64 -64
  566. package/skills/skills/lingshu-pylang/SKILL.md +71 -71
  567. package/src/bridge.ts +33 -0
  568. package/src/hooks.ts +38 -2
  569. package/src/index.ts +526 -518
  570. package/src/lib/datapath.ts +326 -326
  571. package/src/lib/mdcg_client.ts +413 -413
  572. package/src/lib/mutual.ts +428 -428
  573. package/src/lib/prompt_safety.ts +62 -62
  574. package/src/lib/python_path.ts +71 -71
  575. package/src/lib/roleplay_web.ts +116 -29
  576. package/src/lib/token_store.ts +13 -3
  577. package/src/tools.ts +212 -212
  578. package/zcode/AGENTS.md +11 -3
  579. package/zcode/README.md +41 -41
  580. /package/docs/{mdcg → hive}//344/270/273/344/273/243/347/220/206/345/255/220/344/273/243/347/220/206/350/256/260/345/277/206/346/236/266/346/236/204/350/256/276/350/256/241.md" +0 -0
@@ -0,0 +1,210 @@
1
+ # 缺陷挖掘报告 · 自主迭代 v10(hive 二轮深挖)
2
+
3
+ - **日期**:2026-09-25
4
+ - **范围**(生效条件):第 10 轮 = hive 二轮深挖,四区复核(recent / orch / servemcp / legacy)共 **27 条目**(confirmed 25 / 整项剔除 2)→ 去重后独立缺陷 **20**(本轮新发现 11 项 **N82-N92**:medium 6 / low 5;legacy 复测确认 9 项:v2 N16 high,v2 N7 / v2 N13 / v2 N8 / v8 N67 medium,v8 N68 / v8 N69 medium,v8 N70 / v7 N58 low)→ 本轮修复 **5 个补丁,全部落在 legacy 复测确认项**(v2 N16 high + v2 N7 / v2 N13 / v2 N8 / v8 N67 medium;修复选择与严重度/修复面成本相关,非按新旧排序)→ 遗留 **15**(新 11 + legacy 4:medium 8 / low 7)
5
+ - **编号口径**:本轮新发现沿历轮 N 口径续编 **N82-N92**(v9 用至 N81);legacy 项沿用原轮次号(v2 N7/N8/N13/N16、v7 N58、v8 N67/N68/N69/N70)。其中 **v8 N67**(wm 穿越读)与 **v2 N8**(worker_scope 单串切分)的编号为本报告会话读码注释 + 历轮报告 grep 核实补齐(材料 legacy 区条目未带原编号:v8.md:111 确认 N67 条目在档、v2.md:116 确认「N8 read_roots 单串切分(medium)」在档;修复代码内注释亦分别自标「v8 N67」wm.py:252 与缺陷描述一致)
6
+ - **回归**:`python -X utf8 scripts/run_tests.py --jobs 4` 全量 **184/184 通过、5 跳过(依赖缺失/平台不符)**——本报告会话独立实跑两轮:**首跑 183/184**(`md_cg.test_p0` 失败,md_cg 面本轮零代码改动、与 hive 修复无涉),单独复跑该套件 **25/0 通过**、再跑全量 **184/184**(尾部 SUMMARY 与材料逐字一致)→ 判定为偶发(并行资源争用形态),如实记录三跑全程;184 = v9 基线 179 + 本轮 5 个新守卫套件(`scripts/run_tests.py:52` 自动发现 `hive/test_*.py`,本会话读核在位);`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
+ - **行号口径**:缺陷行号为缺陷时点快照行号;本轮 hive/exec.py(+79 行)改动使后续行号下移,材料口径的修复落点行号(如 call_llm 守卫「:1207」)与本会话读核现行行号(:1221)有漂移,涉及处以**本会话读核现行行号**为准并注明材料口径(第二节逐项标注)
8
+ - **结构口径**(CCG 六要素):功能名(标题)/ 生效条件(范围与口径行)/ 子功能(第二~五节)/ 执行与验证方式(第四节:实跑命令与结果)/ 不适用条件(第七节:跳过与未运行项)
9
+
10
+ ---
11
+
12
+ ## 一、执行摘要
13
+
14
+ 本轮为 hive 二轮深挖:四区复核 27 条目、2 项整项剔除(均为历轮已修项的复测留档成立,非缺陷),修复 5 补丁(全为 legacy 复测确认后修复)、留档 15 项(新 11 + legacy 4)。四个主题:
15
+
16
+ 1. **MCP 入口一行杀进程(v2 N16,high,1 修)**:`_rpc` 入口对非 dict JSON(JSON-RPC 2.0 规范允许的批量数组、裸 str/int/null)与 `params` 非 dict(str/list/int)形态直接 `req.get` 抛 AttributeError——且 `main` 循环的 try 只包 `json.loads` 的 ValueError,`resp=_rpc(req)` 在 try 外,异常直达进程顶层:**一行输入即使常驻 MCP server 进程崩溃退出(DoS)**。本轮实弹七形态(batch_array/bare_str/bare_int/bare_null/params_string/params_list/params_int)全部 rc=1 崩溃、后续合法请求无应答,并实抓 traceback 落点(mcp_server.py 的 method 取行与 params 取行)。本轮修复为纵深三层:入口 isinstance 守卫(-32600)+ params 守卫(-32602)+ main 循环把 `_rpc` 纳入 try(-32603 兜底,与工具层同款模板)。
17
+ 2. **「假成功/假失败」诚实性三连(3 修)**:v2 N7——`call_llm` 单发路径对网关 200+空/缺 choices 无条件 `ok=True` 落盘 EXIT_OK,且同族第二缺口(工具路径强制终答分支无 `_empty_turn` 防护)+ 第三形态(content=null 穿透 `.get` 默认值落 None)本轮一并实证;v2 N13——编排工具对模型可控参数裸 `int()`,'600s'/'20k' 等 function calling 常见脏参数抛 ValueError 逃出工具处理器直达 main 兜底以 EXIT_API 判死整个编排 job(已派发子任务全部成孤儿),且 `max_chars=-100` 负数形态使截断契约破坏(truncated=True 却返回 90-99% 全文);v2 N8——`_worker_scope` 对 `read_roots` 单串形态 `list()` 逐字符切分,切出的单字符路径分隔符经 realpath 归一为**当前盘根**混入读白名单——worker 读权限被意外扩到全盘(实弹读仓外文件全文回显)。
18
+ 3. **wm 穿越读(v8 N67,1 修)**:`cmd_progress` 的 `--job-id` 无路径段校验即裸拼 `os.path.join` 与 `git show` 两处,`../../victim` 可越权读 wm 仓外任意 JSONL 并全文回显(entries+handoff 聚合卡);姊妹分支 `cmd_snapshot` 同款输入有防穿越校验、防御不一致——本轮接同款四行模板补齐对称。
19
+ 4. **留档与剔除(如实记录)**:新发现 11 项全部留档(含 write_result 双写者终态改写/exec 撕裂、snapshot staging 残留绕闸直达 main、编排装载点求值顺序断裂致接管者重复派发、jobs 池双源分叉致任务静默饿死、stop 不杀进程树致孤儿继续烧 API 配额等——第三节逐项);2 项 rejected 均为第 8 轮/批次 34-35 已修面的复测留档成立(守卫实跑通过),邻接缺口已单列 confirmed 不重复计。
20
+
21
+ **对输入口径的核验**:输入称「四区 25 confirmed + 2 rejected = 27 条目 → 去重 20 独立缺陷 → 修 5 → 留档 15」。本会话以 `git status` / `git diff --stat` + 逐处读核核对:改动面恰为——四个修复文件(hive/exec.py +79、hive/hive_mcp/mcp_server.py +30、hive/orch.py +24、hive/wm.py +10)+ 五个新守卫文件(untracked)——与五项修复一一对应;工作树另有一件非本轮修复的改动如实注明(`md_cg/whitebox_kb/wisdom/code_solidified.json` 仅删除一行缓存命中指纹记录,v9 报告已注明为先前会话遗留的工作区变更,本会话 diff 读核现状一致)。跨区重复条目 5 组(v2 N16 / v2 N7 / v2 N13 / v8 N68 / v8 N69 各在两区出现),25 − 5 = 20 独立缺陷,20 − 5 修复 = 15 留档,无多无少。
22
+
23
+ ---
24
+
25
+ ## 二、修复清单(5 项,逐项 where / 问题 / 修复 / 前后对比 / 守卫)
26
+
27
+ ### F1(v2 N16,high;v8 留档时定 medium,本轮实弹七形态全崩后按材料升 high)MCP 入口三层守卫:一行非 dict / params 非 dict 不再杀常驻 server
28
+
29
+ - **where**:缺陷时点 `hive/hive_mcp/mcp_server.py:566`(`_rpc` 入口 `req.get("method")`)与 :583(`(req.get("params") or {}).get("name")`)、:611(main 循环 `resp=_rpc(req)` 在 try 外);修复落点现行(本会话读核)`hive/hive_mcp/mcp_server.py:569-572`(req 非 dict → -32600)、:594-597(params 非 dict → -32602)、:626-631(main 循环 `_rpc` 纳入 try → -32603 兜底)+ 契约注释 :564/:616
30
+ - **问题**:一行非 dict JSON(JSON-RPC 2.0 规范允许的批量数组、裸 str/int/null)使 `_rpc` 入口 `req.get("method")` 抛 AttributeError;`params` 非 dict(str/list/int)使 `:583` 处 `(req.get("params") or {}).get("name")` 同崩——两处均早于只包工具执行 `fn(args)` 的 try;且 main 循环 try 只包 `json.loads` 的 ValueError,`resp=_rpc(req)` 在 try 外——异常直达进程顶层,**一行输入即使常驻 MCP server 进程崩溃退出(DoS)**。v8 曾留档(v8.md:83,时定 medium、竞争修复席败于 exec.py:103);本轮四区复核实弹七形态全崩 + traceback 实抓(method 取行 / params 取行 / `_rpc` 调用行三点),扩向量(params 非 dict 三形态为 v8 未记)确认后升级 high 修复
31
+ - **修复**(三层纵深,不引入新机制):① `_rpc` 入口 `isinstance(req, dict)` 守卫——非 dict 回 `id=None` 的 -32600 Invalid Request,不再下探;② tools/call 加 params isinstance 守卫——非 dict 回 -32602 Invalid params(不进工具,原「先取后判」改为先判后取);③ main 循环把 `resp=_rpc(req)` 纳入 try——非 ValueError 异常回 `id=None` 的 -32603 internal error 一行,不杀 server(与工具层兜底同款模板);④ 同步两处「生效条件」契约注释防漂移
32
+ - **前后对比**(守卫实测,两轮含 stash 复验):前——七攻击形态任一行 → AttributeError 杀常驻 server(rc=1、stdout 0 行、后续合法 tools/list 无应答),守卫 15 FAIL,traceback 逐字落在缺陷时点行号,与四区 evidence 吻合;后——同一攻击行 → 回一行错误响应(非 dict req → -32600 id=null;params 非 dict → -32602 id 回带),server 存活、攻击行后的合法 tools/list 正常应答、EOF 后 rc=0;夹击场景(攻击-合法-攻击-合法)两条合法行均应答
33
+ - **守卫**:新增 `hive/test_mcp_entry_guard.py`——①单元面七攻击形态调 `_rpc` 不抛异常且回正确错误码;②子进程面(哑 env:临时 HIVE_JOBS_DIR + 指向不存在文件的 HIVE_CONFIG,不触真实 serve/jobs/令牌)起 `python -m hive.hive_mcp.mcp_server`,攻击行后合法 tools/list 探活必须有应答且 rc=0,七形态逐一独立进程;③合法面零回归(initialize/tools/list 五工具/未知方法 -32601/未知工具 -32602/notification None);④夹击场景。材料诚实备注:初版夹击断言判定目标写错(等 id=777 而实际发 id=6,修复后仍 FAIL),已修正为两条合法 id 全应答(更严不放松),修正版经 `git stash` 复验对旧代码仍 15 FAIL 红。**本会话实跑:结果 0 fail(20 OK 口径与材料一致)**
34
+
35
+ ### F2(v2 N7,medium)call_llm 空包假成功三形态统一 _error 通道:单发路与强制终答分支不再记成功
36
+
37
+ - **where**:缺陷时点 `hive/exec.py:1541-1548`(main 单发路无条件 `out.update(ok=True)`);修复落点现行(本会话读核)`hive/exec.py:1217-1222`(call_llm `_empty_turn` 守卫 + content=null 处理;材料口径守卫行 :1207,因同文件 F5/F3 修复增行漂移,以读核为准)、:1431-1436(强制终答分支 `_empty_turn` 守卫 + log/progress where="force_final";材料口径 :1414-1424)、:1556-1574(main 统一 `_error` 落盘通道,EXIT_API;材料口径 :1541-1563)+ 契约注释 :1212/:1461 附近
38
+ - **问题**:①单发路径(无 tools)对 200+空/缺 choices 无条件落 `ok=true`+EXIT_OK(content 兜底成 "");②同族第二缺口——工具路径超轮次后的强制终答分支(不带 tools 的那次请求)同样无 `_empty_turn` 防护(对照轮内有):网关故障回空包时任务记 `forced_final=true`+`content=""` 的假成功,空 content 的 result.json 流入下游合并/续跑链(wm.py 快照闸只查 `result.ok is not True`,ok=True 即放行入库);③第三形态——content 为 null 的回显穿透 `.get("content","")` 落 None。v2 报告 :63 留档「未修复(遗留)」,v9 已修清单 F1-F5 全为 md_cg 面不含本项,本轮复测成立修复
39
+ - **修复**(`_error` 协议与 run_with_tools 既有失败通道同款,最小改动):① call_llm 改 `_choice(data).get("message") or {}` 取 msg + `_empty_turn` 守卫——空/缺 choices、content 空串、content=null 统一回 `{"_error": "模型返回空助手轮…"}`;② 强制终答分支 msg 解析后加同款守卫 + log/progress;③ main 把 `if "_error" in out` 从工具分支内提出为两路共用(write_result 字段 ok/error/tool_trace/finished_ts/duration_s 与原工具分支逐字段一致,log 文案按来源区分、progress where=tool_loop/single_shot),return EXIT_API——单发路不再无条件 ok=True
40
+ - **前后对比**(守卫实测):前——守卫实跑 8 FAIL:单发路 mock 网关 200+空 choices → rc=0(EXIT_OK)+ result={ok:true, content:""};content=null → rc=0 + content=null 穿透;工具路强制终答空包 → rc=0 + 假成功 forced_final——与四区 evidence(本地 http.server mock 实跑形态)一致;后——同守卫 12/12 绿:三形态统一回 `_error`,main 写 ok=false + error 文案 + tool_trace 失败 result、rc=EXIT_API(3);对照组正常 content 仍 rc=0+ok=true、强制终答有 content 仍 forced_final=true 非空、轮内既有防护行为不变
41
+ - **守卫**:新增 `hive/test_exec_empty_response.py`(test_exec_tools.py 同款形态:importlib 直载 + mock.patch.object)——[A] call_llm 四形态单元断言 + 正常 content 零回归锚点;[B] run_with_tools 强制终答分支(假 `_post_chat` 序列:tool_call×2→空包)断言非假成功 + 轮内既有防护零回归;[C] 端到端子进程(本地 http.server mock 网关、哑令牌、临时 job 目录逐案清理):C1 单发空包/C2 content=null/C3 工具路强制终答空包/C4 对照组正常 content。**本会话实跑:12 pass / 0 fail**
42
+
43
+ ### F3(v2 N13,medium)编排面脏参容错接 _int_arg + execute_tool 分派兜底:脏参数不再判死整个 job
44
+
45
+ - **where**:缺陷时点 `hive/orch.py:422`(timeout_s 裸 int)、:424-425(context_budget_tokens)、:472(`_read_full` max_chars)+ `hive/exec.py:1142-1143`(execute_tool 对 _EXTRA_TOOLS 分派无 try);修复落点现行(本会话读核)`hive/orch.py:427-432`(timeout_s/context_budget_tokens 接 `_ex._int_arg`)、:479-482(cap 同款 + 负数形态注释)、`hive/exec.py:1154-1157`(分派 try/except 兜底;材料口径 :1142-1153,漂移以读核为准)+ 契约注释 orch.py:380/:470、exec.py:1149-1153
46
+ - **问题**:编排工具对模型可控参数裸 `int()`——'600s' 抛 ValueError、[600] 抛 TypeError、'2k' 同;异常逃出工具处理器穿透 run_with_tools 调用点(无 try)直达 exec.main 兜底 except → **以 EXIT_API 判死整个编排 job,已派发子任务全部成孤儿**,模型失去当场改参重试机会;exec.execute_tool 对 _EXTRA_TOOLS handler 分派亦无捕获(handler 抛错同型穿透)。附带负数形态:max_chars=-100 → cap=-100 使 `len(raw)>cap` 恒真而 `head=raw[:-100]`——truncated=True 却返回 90.4%(四区实测)至 99.6%(守卫实测 25000 字符截 20000)全文,截断契约破坏。`_int_arg` 容错模板在位(缺陷时点 exec.py:964-970)未接。v2 报告 :68 留档「未修复(遗留)」,本轮复测成立修复
47
+ - **修复**(全部复用既有模板,不引入新常量/新机制):① `_spawn` 两参数由裸 int() 改接 `_ex._int_arg`(int() 失败/非正回落 default;hi=sys.maxsize=本面不引入新值域上限,上限属调度面语义,注释言明);② `_read_full` cap 同款(负数形态由「非正回落默认」一并修掉);③ execute_tool 的 _EXTRA_TOOLS 分派包 try——handler 抛异常回 `{ok:False, error:类型名+信息}`(与 mcp_server 工具层兜底同款模板),不再杀 job;④ 同步三处契约注释
48
+ - **前后对比**(守卫实测):前——守卫实跑 7 FAIL:'600s'/'20k'/[600] 抛 ValueError/TypeError 逃出、max_chars=-100 返回 99.6% 全文(truncated=True)、handler 异常穿透(traceback 含 handler 分派帧)——与四区 evidence 逐形态一致;后——同守卫 13/13 绿:脏值/非正一律回落默认('600s'/'20k'/[600]/-100 → 600/200000/600/FULL_MAX_CHARS),数字串 '600' 与合法 int 8000 仍原样解析;handler 异常被兜底回 ok=False,run_with_tools 集成中 loop 继续走到终答正常、trace 记 ok=false
49
+ - **守卫**:新增 `hive/test_orch_int_args.py`(test_orch.py 同款 _load 直载形态)——[A] `_spawn` 脏参六形态(哑捕获桩拦 `_hm._submit`,不触文件机械/serve);[B] `_read_full` 四形态(临时 jobs 目录真写 25000 字符 result.json,断言 head 长==20000 非 24900);[C] execute_tool 兜底+集成(run_with_tools 三元素假 `_post_chat` 序列断言 handler 异常不杀 loop)。材料诚实备注:C3 初版 mock 序列写在 lambda 内联列表(每次调用重建、pop(0) 恒弹第一个),已修为外部序列并经 stash 复验修正版对旧代码仍 7 FAIL。**本会话实跑:13 pass / 0 fail**
50
+
51
+ ### F4(v8 N67,medium)cmd_progress 补防穿越闸:--job-id 不再越权读 wm 仓外 JSONL
52
+
53
+ - **where**:缺陷时点 `hive/wm.py:251-260`(cmd_progress 的 `elif wm and job_id:` 分支——:253 `os.path.join` 裸拼 + :258-260 `git show task/<id>:jobs/<id>/...` 裸拼);修复落点现行(本会话读核)`hive/wm.py:252-259`(入口四行防穿越模板,注释自标「v8 N67」)+ 契约注释 :221;姊妹模板参照 `hive/wm.py:134-137`(cmd_snapshot)
54
+ - **问题**:`--job-id` 无路径段校验即裸拼两处——`../../victim` 穿越可越权读 wm 仓外任意 JSONL 并全文回显(entries + handoff 聚合卡);姊妹分支 cmd_snapshot 同款输入有防穿越校验(「须为单一路径段」即拒)、hive_mcp 面 `_valid_job_id` 亦不覆盖本入口——防御不一致。v8 报告 :111 留档(时处置建议「与 F4 同 patch 顺带挂闸约三行」未被采纳,v8.md:162 如实记录),本轮 legacy 区复测成立修复
55
+ - **修复**(约六行含注释,不新建函数/常量):分支入口接 cmd_snapshot 同款四行模板——`job_id in (".", "..") or "/" in job_id or "\\" in job_id` 即返回 `{ok:False, error:"非法 job_id…防穿越越权读"}`,置于工作区直读与 git show 两处裸拼之前;fail-closed,与姊妹面防御一致
56
+ - **前后对比**(守卫实测):前——守卫实跑 6 FAIL:`--job-id ../../victim`(及反斜杠形态)→ rc=0、ok=true、source=wm,entries+handoff 全文回显仓外哑标记(与四区 evidence 的 rc=0/ok=true/source=wm 逐字同形态);绝对路径/'.'/'..' 虽因文件不存在未泄露,但错误文案回显拼接路径而非拒绝;后——同守卫 10/10 绿:五种攻击形态入口即拒(ok=false + 非法 job_id 文案),响应无任何仓外内容泄露;合法面零回归(工作区直读 source=wm、git 分支两级查找 source=wm_branch、cmd_snapshot 既有模板、CLI 正常调用 rc=0)
57
+ - **守卫**:新增 `hive/test_wm_traversal.py`(test_wm_progress.py 同款 _load 直载形态;临时环境:系统临时区 git init 的 wm 仓 + 仓外哑标记 progress.jsonl,测毕 rmtree 清理)——[G] 五攻击形态断言拒绝且无哑标记泄露;[Z] 零回归三锚点(直读/分支面/snapshot 既有模板);[C] CLI 端到端。材料诚实备注:fixture 初版三处自与(main unborn 致 checkout 失败、task 分支误提交 untracked 工作区、Z3 漏 job_id 字段)均已修正后重验;修复中一次 f-string 闭合括号笔误致 SyntaxError(守卫即红)当场修正。**本会话实跑:10 pass / 0 fail**
58
+
59
+ ### F5(v2 N8,medium)_worker_scope 单串包裹:read_roots 单串不再切出盘根扩权到全盘
60
+
61
+ - **where**:缺陷时点 `hive/exec.py:955`(`list(spec.get("read_roots") or [])` 逐字符切分);修复落点现行(本会话读核)`hive/exec.py:958-960`(`rr = spec.get("read_roots") or []` → `isinstance(rr, str)` 时 `rr = [rr]`)+ 契约注释 :952-957;影响面同文件 :1062-1067(scope_roots 拒读闸)与 run_with_tools 以其产物作 read_file 白名单处
62
+ - **问题**:`_worker_scope` 对 spec.read_roots 单串形态 `list()` 逐字符切分——docstring(:952)声称的「列表/单串」单串支持完全失效(白名单内正常读反被拒);且切出的单字符路径分隔符经 realpath 归一为**当前盘根**混入 scope_roots——worker 读白名单被意外扩到全盘,read_file 可读盘内任意文件,仅剩 `_sensitive_read` 凭据形态一道防线。v2 报告 :116 留档在案(「N8 read_roots 单串切分(medium)」),本轮 legacy 区复测成立修复
63
+ - **修复**(最小两行 + 注释):入口对 read_roots 先收 `rr = spec.get("read_roots") or []`,`isinstance(rr, str)` 时包一层 `[rr]`,再进既有的归一循环——下游 realpath/去重/空项过滤逻辑零改动。fail-closed 方向:单串不再产生意外放行的盘根,也不能再被用作绕过白名单的形态
64
+ - **前后对比**(守卫实测):前——守卫实跑 4 FAIL:单串 → 29 个垃圾根(根数随串长)且含当前盘根(与四区 evidence 的 11 根含盘根同形态);实弹面以该组 roots 作 scope_roots 调 tool_read_file 读仓外同盘哑探针 → ok=true + 全文回显;白名单内正常读反被拒;后——同守卫 9/9 绿:单串恰出一根==realpath(该串)、无盘根无垃圾根;白名单内正常读 ok=true;仓外探针拒读;列表/缺省/空项过滤/空 tuple fail-closed 全部零回归
65
+ - **守卫**:新增 `hive/test_worker_scope.py`(test_exec_tools.py 同款 _load 直载形态;临时环境:白名单目录 + 仓外同盘哑探针——与进程 cwd 同盘是实弹关键,测毕 rmtree 无残留)——[A] 单元面(单串恰出一根/不含盘根/列表去重/缺省/空项过滤零回归);[B] 实弹面(env 剔除 HIVE_READ_ROOTS 防部署白名单干扰:仓外探针拒读且无泄露、白名单内正常读、空 tuple 对照、列表形态零回归)。**本会话实跑:9 pass / 0 fail**
66
+
67
+ ---
68
+
69
+ ## 三、发现明细(四区 confirmed 25 / 整项剔除 2)
70
+
71
+ 以下每项「证据」为上游复核会话的读码+实跑(材料原文,复现均在临时目录/临时 jobs 目录/哑令牌哑数据环境、测毕清理);标注★者本报告会话另做了现行代码读核(修复项)或历轮报告 grep 核实(编号补齐)。
72
+
73
+ ### recent 区(5 confirmed:全部 new;2 rejected)
74
+
75
+ | # | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
76
+ |---|------|--------|----------|----------|------|
77
+ | N82 | hive/exec.py:117 | medium | write_result 用固定共享 tmp 名(result.json.tmp),重投双写者并发重叠时一者 os.replace 抢先消费共享 tmp → 另一者抛 FileNotFoundError(不在「只捕 PermissionError」的重试面内 :122-129)→ 传播到 main() 顶层 except(:1583-1594)再以 ok:false 覆写 result.json——把对撞写者的成功终态改写为 error 终态;双 open 同一 tmp 交错写还会产生撕裂非法 JSON 终态——均为 N6(030947c)宣称消灭的「成功任务读成 error/截断终态」形态 | 临时目录复现(importlib 加载真实 exec.py):(a) 双写者可再 open 同一 tmp 截断——实测双 tell 错位;(b) ready/go 双屏障对撞 40 轮:worker-outcomes 计 FileNotFoundError 39 次,且 result.json 终态 6/40 轮为非法 JSON(撕裂直落终态文件);(c) fatal 模式(按 :1583 形态走顶层兜底)40/40 轮终态被改写为 ok=False error=FileNotFoundError;对照无屏障自然启动 60 轮仅 1 次 PermissionError、0 次 FileNotFoundError——窗口需并发重叠,重叠即近必现。守卫 K1/K2(hive/test_exec_tools.py:653-694)为单写者+读者形态不覆盖。v8 F5(结果原子写)的次生缺口,非重复修复 | 留档(medium) |
78
+ | N83 | hive/wm.py:161 | medium | cmd_snapshot staging 残留绕闸:artifacts 缺失早退(:161-162)发生在 spec/result/log 已拷入 wm/jobs/<job_id>(:145-155)之后且在提交链 try/finally(:174-190)之外,残留无清理;后续任一任务快照的 add jobs(:176)把残留全量扫进自己的分支并随其 merge 进 main——失败任务产物绕过自己的凭证闸/分支/合并审查直达 main | 临时 wm 仓复现(importlib 加载真实 wm.py):jobA 快照带 artifacts=不存在的文件 → ok:false 且 wm/jobs/jobA/ 残留 4 文件;jobB 正常快照成功后 git ls-tree task/jobB 实含 jobs/jobA 三文件;cmd_merge 后 ls-tree main 出现 jobs/jobA 三文件且 task/jobA 分支不存在(rev-parse/branch -a 均无)。v2 N10(030947c)只闭合了 HEAD 残留机制,staging 无回滚,提交链 try 内失败(磁盘满/hook)同型残留。守卫 hive/test_wm_progress.py 实跑 49/0,G 段只覆盖「nothing to commit」同内容形态 | 留档(medium) |
79
+ | N84 | scripts/bootstrap_loop.py:289 | medium | run_channel_b 首条前置拒绝路径(缺 code 或缺 cases 的条目 :289-290 continue)不标 status=failed 也不计 stats——批次 35(be1f63e)修了同族另外三条 continue(:301/:314/:332)漏了首条:坏条目永久 pending 反复重扫(:269-270 过滤条件使每轮重新入队),占满 queue[:max_tasks] 首部时饿死后续真任务,监控面 stats 全零不可见 | 临时 STATE 复现(m.STATE 指临时目录,与 md_cg 冒烟测试同隔离法):队列=[3 个缺 cases/code 坏条目占首 + 真任务 heap_sort],run_channel_b 连跑两轮 stats 均 {'generated':0,'passed':0,'failed':0},四条 status 全恒 'new',verified_units 空、rejected_log.json 不存在——真任务永久饿死且零可见。守卫 test_security_audit_v21 实跑 49/0,冒烟只测有 cases 条目 | 留档(medium;材料注明 owner 规则强制降级——where 非 hive/ 前缀,本轮修复面限 hive) |
80
+ | N85 | hive/verify_runner.py:102 | low | iter_id 白名单 `[A-Za-z0-9_.-]{1,80}` 放行裸 '..'(及 '.'/'...')——'..' 是穿越 token:frozen_fp/out_fp(:120/:178)拼接后实际指向 interop 上一级(hive/frozen.json、hive/verdict.json),第 8 轮(030947c)威胁模型「穿越形态 rc=2 拒跑」对裸 '..' 不成立 | 实弹探测(子进程 cwd=仓库根 env HIVE_ROLE=verifier):iter='..' → rc=4 error「冻结凭证不可读(…hive\..\frozen.json)」——已过白名单并越级读上一级;'.'/'...' 同 rc=4 过;'../x' → rc=2 白名单拒(含分隔符形态防线有效)。姊妹入口 md_cg/interop.py 实存同一 regex。影响受限:写步需 frozen 读步先行通过且该文件当前不存在(本会话材料确认)→ 写步不可达,读步越级亦只 rc=4 诚实退出——low 定级成立 | 留档(low) |
81
+ | N86 | hive/exec.py:927 | low | lingshu_cg 递归脱敏形态漏网:_redact_pii 手机号模式(\b1[3-9]\d{9}\b)只认 ASCII 词边界隔离的裸 11 位连写——+86 前缀、连字符/空格分隔、中文数字、以及**紧邻汉字的裸手机号**(\b 在 CJK 邻接处不构成边界,Python Unicode 模式汉字属 \w)全部原样通过——中文文本嵌入形态(本产品主场景)大面积漏网;_redact_deep(:946)只脱字符串值不脱 dict 键名 | 临时复现(直调纯函数):裸 11 位连写被脱(对照成立),'+86…'/'138-0013-8000'/'138 0013 8000'/中文数字/「电话13800138000联系」均原样通过;dict 键名内嵌手机号两个均原样保留。V21-7 接线(exec.py:733-739)使 lingshu_cg 返回体过此防线。exec.py:910-913 注释自declare「正则脱敏是概率防线非密码学保证」,维持 low | 留档(low) |
82
+ | ~~verify_runner.py:97~~(rejected) | — | — | **复测留档成立,非缺陷**:第 8 轮(030947c)三修复形态已修成立 | 上游实跑三条守卫全部通过:hive/test_exec_tools.py → 87 通过/0 失败(K1 写后完整且无 .tmp 残留、K2 并发写读压测 0 撕裂);hive/test_wm_progress.py → 49/0(G1-G5 在位);md_cg/test_p39_verify_flow.py → 11 passed/0 failed(穿越形态拒跑不触盘、绝对路径注入拒跑)。邻接缺口不在原修复面,已单列 confirmed(N82/N83/N85) | 剔除 |
83
+ | ~~bootstrap_loop.py:259~~(rejected) | — | — | **复测留档成立,非缺陷**:批次 34/35(1fd4b36/be1f63e)报告项已修成立 | 上游实跑 python -m md_cg.test_security_audit_v21 → 49 通过/0 失败(含 V21-4 主体/空队列/全链路冒烟、V21-7 递归脱敏、V21-8 敏感名族拒读);读码复核 verified={} 初始化、三条 status='failed' 与沙箱拒 rejected_log 留痕均在位。漏标的首条 continue 已单列 confirmed(N84) | 剔除 |
84
+
85
+ ### orch 区(7 confirmed:2 new + 5 legacy 复测;0 rejected)
86
+
87
+ | # | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
88
+ |---|------|--------|----------|----------|------|
89
+ | N87 | hive/orch.py:597-603 | medium | main() 的 `_CFG.update({... "children": _load_children()})` 中字典字面量在 update 执行前求值,_load_children() 经 _children_path() 读到的 _CFG["job_dir"] 仍是模块初始空串,`os.path.join("", "_children.json")` 落为 CWD 相对路径——装载点与保存点(_spawn:434 与 finally:641 均在 update 之后写 job 目录)结构性不对称:换人接管永远读不到 job 目录内的清单,恒视为无子任务而全量重复派发,max_subtasks 从 0 重计可放行翻倍子任务;serve 拉起 worker 不设 current_dir(worker 继承 serve CWD=HIVE_DIR),全部编排 job 共享同一错误读取点,该点恰有清单文件时还会读进他人 children 污染越权读边界 | 临时区子进程逐字复制语句序列(新 import orch、HIVE_JOBS_DIR 指临时区、预置 _children.json 含 1 子任务、chdir 模拟 serve CWD):场景A 输出 loaded children=[] 且路径为 CWD 相对(时序修正即正常);场景B(CWD 恰有他人 _children.json)loaded=他人两条——读入他人清单(后续 poll/read_full 以「本编排者派发」身份读他人结果)。可达性读码:scheduler.rs:283-293 claimed 无产物删锁回 pending 重投;exec.rs:87-96 spawn_executor 不设 current_dir;serve_start.py:257 cwd=HIVE_DIR。测试缺口:hive/test_orch.py B12 只测保存侧、E 组无装载断言。历轮留档核对:v8 N70 只覆盖保存侧吞异常,装载点求值顺序历轮无记录——new 属实 | 留档(medium) |
90
+ | N88 | hive/orch.py:618-622 | low | main() spec 补全写回用裸 open("w")+json.dump 覆盖写 spec.json(本文件唯一原子写在 _save_children tmp+os.replace;exec.write_result 已按 v8 F5 修原子写,此处同款反模式漏网)——写中途 OSError(磁盘满/杀毒锁/强杀落窗)被捕获仅 log 一行继续跑,盘面留半截 spec 且旧完整任务契约已毁:rust claimed 无产物重投读同一坏 spec → read_spec 失败 EXIT_SPEC 永久失败,原始任务契约证据不可恢复 | 确定性复现(临时区测毕清理):预置 117 字符完整 spec.json,monkeypatch json.dump 为「写 '{' 后抛 OSError(28)」,逐字复制语句序列执行 → 盘面仅剩 1 字符 '{'、json.loads 抛解析错误、exec.read_spec 抛 JSONDecodeError(→ exec.main 写 result 返回 EXIT_SPEC,rust 重投再读同一坏 spec 永久失败)。对照读码:exec.write_result:103-129 与 _save_children:271-274 均原子写,:618-620 漏网。历轮留档核对:v2/v7/v8 文档均无此项记录——new 属实 | 留档(low) |
91
+ | v8 N68 | hive/orch.py:417-420 | medium | 【留档复测·维持】_spawn 白名单键元组含 mdcg_root,编排者模型(或提示注入)可控子任务认知图读写落点——exec.py:694 root=env MDCG_ROOT 优先、spec.mdcg_root 兜底,serve 未设 MDCG_ROOT 的部署即生效,任意目录建图+写入模型可控内容(入审核队列) | 本轮临时环境复现(测毕清理):orch._spawn({user_prompt, mdcg_root=临时 evil_root}) ok=True 且 spec 原样透传;MDCG_ROOT env 为空时 exec.tool_lingshu_cg(write) ok=True(committed=False 为 DEFER 入审核队列)且 evil_root 下建出完整图结构 12 项(_audit.jsonl/_keys.json/各层目录)。v8.md:112 条目确认留档未修。修复需语义决策(完全移除键 vs 根白名单约束——spec.mdcg_root 兜底是 exec.py:694 的合法部署形态),坑满顺延。输入含两条同对象条目(orch 面+legacy 面),合并处置 | 留档(medium) |
92
+ | v8 N69 | hive/orch.py:408-411 | medium | 【留档复测·维持】context_files 通道只做 isfile 存在性检查即透传(:408-411),绕过 read_file 工具面的全部敏感防线——编排者模型可指定 .ssh 私钥/.env 等凭据文件全文注入子代理 prompt 发往外部 LLM 网关(exec._context_block:313-326 读全文进 messages,无 _sensitive_read/_redact_pii 任何检查),且该参数在 _spawn_schema:132-133 明确声明为模型正常可用 | 本轮临时环境双通道对照复现(伪造哑私钥/哑 env,测毕清理):同两路径 tool_read_file 均被拒(敏感凭据目录/密钥环境凭据文件文案),同两文件经截获证 _spawn ok=True 且 spec['context_files'] 原样透传,build_messages 后 user 消息含哑私钥全文与哑 API key 且无脱敏标记。v8.md:113 条目确认留档未修;v8.md:164 分诊注:修复涉及拦截策略设计决策(拒绝整 spawn vs 跳过文件+标注),风险高于纯接线项,坑满顺延。输入含两条同对象条目,合并处置 | 留档(medium) |
93
+ | v2 N13 | hive/orch.py:422 | medium | 【复测成立→本轮修复】编排工具对模型可控参数裸 int()(timeout_s/context_budget_tokens/max_chars),脏参数抛异常逃出工具处理器直达 main 兜底以 EXIT_API 判死整个编排 job;负数形态破坏截断契约(详 F3) | 本轮临时环境复现(测毕清理):'600s' 抛 ValueError、'20k' 同、[600] 抛 TypeError、max_chars='2k' 同型、max_chars=-100 返回 90.4% 全文;execute_tool 分派无 try 的穿透链实跑实证(traceback 含 handler 分派帧)。v2 文档 :68 条目确认「未修复(遗留)」 | **已修**(F3) |
94
+ | v8 N70 | hive/orch.py:269-276 | low | 【留档复测·维持】_save_children except OSError: pass 静默吞写盘失败(无 log 无重试,tmp 固定名),children 清单丢失;_load_children(:254-265) 同吞 ValueError——损坏清单静默返回 [];两者与装载点断裂(N87)叠加构成「清单丢失→接管者重复派发」复合根因 | 本轮临时环境复现(测毕清理):patch os.replace 抛 PermissionError → _save_children 静默返回、清单不落盘;损坏 JSON → _load_children 返回 [];双轮全程 patch 演示(max_subtasks=2):首轮 spawn(a)/(b) ok + spawn(c) 诚实拒,轮末清单不存在(三次保存全静默失败)→ 模拟接管者装载 0 条 → 同名重派双双 ok → 两轮累计提交 4 > 上限 2。v8.md:114 条目确认留档未修 | 留档(low) |
95
+ | v7 N58 | hive/orch.py:445-460 | low | 【留档复测·维持】_poll 每次轮询对全部子任务全量重读+重解析 status.json 与完整 result.json(_card → _hm._result_view 整文件 json.load)只为渲染 200 字卡片,无终态短路/读缓存;附带 _card children 线性扫 + _poll `i not in known` 列表扫 → O(C²) | 本会话合成子任务 5 次取中位计时(临时区测毕清理):C=8×500KB result → 中位 4.96ms;C=32 → 20.03ms(4.04× 近线性);C=32 无 result.json 对照 → 1.22ms(result.json 全量 json.load 占 poll 成本 93.9%)——与 v7 留档数据同形态,绝对值差异来自机器/内容。读码:mcp_server.py:258-260 json.load 整文件;_card:344-347 线性扫;_poll:451 列表扫。v7.md:105 条目确认留档 | 留档(low) |
96
+
97
+ ### servemcp 区(6 confirmed:4 new + 2 legacy 复测;0 rejected)
98
+
99
+ | # | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
100
+ |---|------|--------|----------|----------|------|
101
+ | v2 N16 | hive/hive_mcp/mcp_server.py:566 | high(v8 留档时 medium,本轮实弹七形态全崩后升 high) | 【复测成立→本轮修复】_rpc 入口对非 dict JSON(批量数组/裸 str/int/null)与 params 非 dict(str/list/int)抛 AttributeError,早于只包工具调用的 try,且 main 循环只护 json.loads 的 ValueError——一行输入即使常驻 MCP server 进程崩溃退出(DoS)(详 F1) | 本轮独立子进程实跑(哑 env、攻击行后追加合法 tools/list 探活):七形态全部 rc=1、stdout 0 行、后续合法请求无应答;traceback 实抓三点落位(method 取行/params 取行/_rpc 调用行在 try 外)。v9 已修清单 F1-F5 全为 md_cg 面不含 N16——留档复测仍未修成立;params 非 dict 三形态为 v8 未记的扩向量 | **已修**(F1) |
102
+ | v2 N7 | hive/exec.py:1541 | medium | 【复测成立→本轮修复】call_llm 单发路径空包假成功(200+空/缺 choices 无条件 ok=true+EXIT_OK)+ 同族第二缺口(工具路强制终答分支无 _empty_turn 防护)+ 第三形态(content=null 穿透 .get 默认值)(详 F2) | 本轮实跑复现(本地 http.server mock 网关、哑令牌、临时 job 目录逐案清理):单发路 rc=0(EXIT_OK)+ result={ok:true, content:""};工具路 max_tool_rounds=1 强制终答空包 → rc=0 + {ok:true, forced_final:true, content:""};content=null 穿透实证。v9 已修清单不含本项——留档复测仍未修成立 | **已修**(F2) |
103
+ | N89 | hive/hive_mcp/mcp_server.py:85 | medium | jobs 池双源分叉致任务静默饿死:MCP 面 _jobs_dir() 只读 env(:85-88),而 _ensure_serve→serve_start.start 的合并环境 config 键胜出 env(serve_start.py:231)——config.local.json 设 HIVE_JOBS_DIR 时 hive_spawn 返回 ok=true/serve.started=true 但 job 写进 env 池、serve 跑在 config 池,任务永久 pending 无人领取;:205-211 routes 谎报为 env 池(丢弃 start 返回的真实 jobs_dir),hive_doctor 同读 env 池误报 serve_alive=false——spawn/doctor/poll 三观测面同时与实况相悖 | 临时环境复现(monkeypatch serve_start.subprocess.Popen 只拦 serve 拉起并伪造心跳落 config 池,pid=自身使三层判据真,零真实 serve 进程,测毕清理):spawn.ok=True、serve.started=true、routes 报 env 池;serve 实际 argv 指向另一临时池;job 落 env 池 True/config 池 False 且 poll state=pending;心跳 env 池=False/config 池=True;doctor.serve_alive=False(实况 serve 在 config 池存活)。stderr 有池提示但 MCP 返回面全绿。材料诚实备注:复现首版 monkeypatch 误伤全局 subprocess.Popen 连带诊断查询致假阴性,收窄为只拦 serve 拉起后复现成立 | 留档(medium) |
104
+ | N90 | hive/hive_mcp/mcp_server.py:386 | low | 单个畸形 job 文件打崩整个观测工具:hive_poll 无参列表对每个入选 job 调 _result_view(head=800)(:386),后者 :263-264 对 content 非 str(int)len() 即 TypeError、对 result.json 顶层非 dict r.get 即 AttributeError;hive_doctor 的 (st or {}).get("state")(:417-418)遇 status.json 顶层非 dict 即 AttributeError——一个 job 的 result/status 损坏使列表 poll 连好任务都列不出、doctor 整面失败;同仓 serve_start.status() 的条目级 except 只对非法 JSON 文本有效、对同族非 dict 顶层形态同样崩,MCP 面且无该防护 | 经 hm._rpc tools/call 面实跑(临时池四种 job:正常/result content=int/result 顶层 list/status 顶层 list):hive_poll 无参列表 ok=False "TypeError: object of type 'int' has no len()";hive_doctor ok=False "AttributeError: 'list' object has no attribute 'get'";逐个移除定位两种坏形态各自独立打崩。对照证据修正(候选原说不成立):serve_start.status 同池伪造 alive 心跳后同形态亦抛(其条目级 except 只捕 OSError/ValueError 对合法 JSON 非 dict 顶层同样无防护)——两处同族缺口且 MCP 面更重。测毕清理 | 留档(low) |
105
+ | N91 | hive/serve_start.py:64 | low | resolve() 对 str 直值形态的空串/纯空白 fail-open::64-65 原样返回(对照 {"env":...} 形态以 `or None` 把空值归失败),load_config :92 只判 is None → 空串键不进 bad、不触发 fail fast,违背 :17 docstring「防止残缺 env 的 serve 上岗」;且 :231 merged={**os.environ,**env} 使 config 空串静默覆盖宿主进程已设的真实值——serve 带残缺 env 上岗,每个任务烧一次调度后才在 exec.py _post_chat 以「HIVE_API_KEY 未设置」落 error | 实跑(临时 config 文件测毕清理):resolve('')→''、resolve(' ')→' '(str 直值不 strip 不归失败);对照 resolve({'env':…})(未设)→None(env 形态空值归 None 进 bad fail fast)——同函数两形态防护不对称实拍。load_config({HIVE_API_KEY:"",HIVE_API_BASE:" "})→err=None(只判 is None)。merged 演示宿主真值被空串覆盖。下游后果读码核实:exec.py:1181-1183 api_key 空则 RuntimeError | 留档(low) |
106
+ | N92 | hive/serve_start.py:210 | medium | stop/restart/rebuild 的 stop 段不杀进程树——Windows 用 taskkill /PID <pid> /F(无 /T)、unix 用 os.kill(pid,15)(serve 经 :258 start_new_session 单独成组却未 killpg):强杀 serve 后其 worker 正在跑的 exec.py 子进程全部成孤儿,继续消耗外部 API 配额并晚落 result.json;recover_orphans 只在新 serve 启动时跑一次(scheduler.rs:153/:251),晚落产物形成 state=error+result.ok=true 并存的矛盾终态;同仓 rust 侧对执行器明确采用杀树模式(exec.rs kill_tree 带 /T + 守卫测试),python 侧 stop 同一操作漏 /T——「以为停了、子任务还在烧钱」正是 restart 高频场景 | 读码 + 平台语义实验(构建复现留修复员;按纪律未对真实 hive serve 做全链实验):Windows :209-212 无 /T、unix :214 无 killpg、:258 start_new_session 成组未用组杀;同仓模板在位(exec.rs:63-81 kill_tree 带 /T、scheduler.rs:431/437 注释进程树回收、tests/judgment_surface.rs:189 守卫测试);recover_orphans 仅 serve() 启动调一次、running 无产物分支诚实标 error(:315-322 读核)。平台实验(临时 detached 父+长睡子进程,测毕清理确认双亡):同形 taskkill 无 /T → 父亡子孤存活;带 /T → 父子双亡 | 留档(medium) |
107
+
108
+ ### legacy 区(7 confirmed:全部 legacy 复测;0 rejected)
109
+
110
+ | # | where(缺陷时点) | 严重度 | 问题摘要 | 证据要点 | 状态 |
111
+ |---|------|--------|----------|----------|------|
112
+ | v8 N67 | hive/wm.py:251-260 | medium | 【复测成立→本轮修复】cmd_progress 的 --job-id 无路径段校验即裸拼两处,`../../victim` 穿越可越权读 wm 仓外任意 JSONL 并全文回显(entries+handoff 聚合卡),姊妹分支 cmd_snapshot 有防穿越校验、防御不一致(详 F4;编号为本报告会话经 v8.md:111 条目核实补齐) | 本会话临时环境复现(系统临时区 git init 的 wm 仓 + 仓外哑标记 progress.jsonl,测毕清理):`python hive/wm.py progress --wm … --job-id ../../victim` → rc=0、ok=true、source=wm、entries 全文回显哑标记、handoff 聚合卡透出;对照组 cmd_snapshot 对同形态即拒。test_wm_progress.py:231-237 仅测合法 id(守卫盲区) | **已修**(F4) |
113
+ | v2 N16(同对象) | hive/hive_mcp/mcp_server.py:565-566 | medium | 【=servemcp 区同对象条目】_rpc 入口对非 dict JSON 抛 AttributeError 早于工具层 try,main 循环只护 json.loads——一行输入使常驻进程崩溃退出 | 临时环境复现(临时 HIVE_JOBS_DIR、subprocess 喂单行 stdin):dict 形态 rc=0 正常返回;数组/'"hello"'/'42' → rc=1 同崩、stderr 末行 AttributeError、无 stdout——进程退出而非单条错误响应 | **已修**(随 F1,不重复占坑) |
114
+ | v2 N7(同对象) | hive/exec.py:1540-1548 | medium | 【=servemcp 区同对象条目】call_llm 单发路径(无 tools)缺 _empty_turn 防护:空/缺 choices 回 content="" 后无条件 ok=True 落盘 EXIT_OK,空内容 result.json 流入下游(wm 快照闸只看 ok=True 即放行);工具路径 :1372 有完整防护,两分支不对称 | 临时环境复现(哑 mock HTTP 网关 200+choices:[]、哑令牌、临时 job 目录,测毕清理):`python hive/exec.py <job>` → rc=0、result.json {ok:True, content:'', model:…}——空回包记成功实锤。读码:_empty_turn docstring 明言「不冒充有效终答」但全文件仅一处调用(轮内);:1542-1548 无条件 ok=True | **已修**(随 F2,不重复占坑) |
115
+ | v2 N13(同对象) | hive/orch.py:422 | medium | 【=orch 区同对象条目】编排工具对模型可控参数裸 int(),非数字字符串抛 ValueError/TypeError 逃出工具处理器;异常直达 main 兜底以 EXIT_API 判死整个编排 job,已派发子任务无人收口(详 F3) | 本会话临时环境复现(拦截 _hm._submit 哑捕获桩 + _EXTRA_TOOLS 挂抛错哑 handler):'600s'/'20k'/[600]/'2k' 各形态异常逃出实证;execute_tool 分派无捕获、run_with_tools 调用点无 try 的逃逸链读码核实 | **已修**(随 F3,不重复占坑) |
116
+ | v2 N8 | hive/exec.py:955 | medium | 【复测成立→本轮修复;编号为本报告会话经 v2.md:116 条目核实补齐】_worker_scope 对 spec.read_roots 单串形态 list() 逐字符切分——docstring 声称的「单串」支持完全失效;且切出的单字符路径分隔符经 realpath 归一为当前盘根混入 scope_roots——worker 读白名单被意外扩到全盘(详 F5) | 本会话复现(测毕清理):单串入 → 11 个垃圾根含当前盘根(realpath 归一);以该组 roots 作 scope_roots 调 tool_read_file 读仓库外同盘哑探针 → ok=True、全文回显(探针即删);空 tuple 对照 ok=False 拒读。可达面说明:MCP spawn 面 SPAWN_ALLOWED_KEYS 不含 read_roots,触发需手写 spec.json(安全审计文档明文该字段面向 worker 定制) | **已修**(F5) |
117
+ | v8 N68(同对象) | hive/orch.py:417-420 | medium | 【=orch 区同对象条目】_spawn 白名单键元组透传 mdcg_root——不可信 LLM 指定认知图读写面落点,任意目录可被创建图结构并写入模型可控内容 | 临时环境复现(哑 evil_root 临时目录,测毕清理):orch_handler spawn 透传实证;下游端到端 tool_lingshu_cg(write) → ok=True 且 evil_root 下实拍落盘 _audit.jsonl、_keys.json、hippocampus/inbox.jsonl(+.lock) 等 12 项 | 留档(随 orch 区条目处置,不重复占坑) |
118
+ | v8 N69(同对象) | hive/orch.py:408-411 | medium | 【=orch 区同对象条目】context_files 通道绕过 read_file 工具面全部敏感文件防线——scope_roots 白名单+_sensitive_read 凭据拒读+PII 脱敏三道防线在 spec.context_files 通道零检查 | 临时环境双通道对照复现(伪造哑私钥/.env 哑标记,测毕清理):build_messages 后私钥正文与哑秘密均原样入 user 消息且无脱敏占位;同两路径 tool_read_file 均被拒。读码:三道防线均只挂 tool_read_file;_context_block 文本分支全文读入无任何检查 | 留档(随 orch 区条目处置,不重复占坑) |
119
+
120
+ ### 跨区重复条目合并说明(5 组,25 条目 → 20 独立缺陷)
121
+
122
+ - `mcp_server.py` 入口崩溃:servemcp 区 v2 N16(:566)+ legacy 区(:565-566)——同对象,随 F1 修复;
123
+ - `exec.py` 空包假成功:servemcp 区 v2 N7(:1541)+ legacy 区(:1540-1548)——同对象,随 F2 修复;
124
+ - `orch.py` 裸 int():orch 区 v2 N13(:422)+ legacy 区(:422)——同对象,随 F3 修复;
125
+ - `orch.py` mdcg_root 透传:orch 区 v8 N68 + legacy 区(:417-420)——同对象,留档合并处置(材料注明「输入含两条同对象条目,合并处置」);
126
+ - `orch.py` context_files 绕防线:orch 区 v8 N69 + legacy 区(:408-411)——同对象,留档合并处置(同上)。
127
+
128
+ ---
129
+
130
+ ## 四、验证(门禁结果)
131
+
132
+ 以下「本报告会话实跑」均为本报告写作会话在仓库根目录实际运行(第一手);「材料口径」为编排/修复会话已跑、本会话未重跑(如实区分):
133
+
134
+ | 命令 | 结果 | 来源 |
135
+ |------|------|------|
136
+ | `python -X utf8 scripts/run_tests.py --jobs 4`(全量,本会话**两跑**) | **首跑**:`SUMMARY 183/184 通过,5 跳过`——`md_cg.test_p0` 失败(md_cg 面本轮零代码改动,与 hive 修复无涉);单独复跑 `python -X utf8 -m md_cg.test_p0` → **通过 25 / 失败 0**;**再跑全量**:`===== SUMMARY 184/184 通过,5 跳过(依赖缺失/平台不符) =====`——与材料口径一致,首跑失败判定为偶发(并行资源争用形态),三跑全程如实记录 | **本会话实跑**(2 次全量 + 1 次单套) |
137
+ | `python -X utf8 -m hive.test_mcp_entry_guard` | `结果: 0 fail`(=材料修后绿态 20 OK;材料红证 15 FAIL + git stash 复验) | **本会话实跑** |
138
+ | `python -X utf8 -m hive.test_exec_empty_response` | `结果: 12 pass / 0 fail`(材料红证 4 pass / 8 fail) | **本会话实跑** |
139
+ | `python -X utf8 -m hive.test_orch_int_args` | `结果: 13 pass / 0 fail`(材料红证 6 pass / 7 fail + stash 复验) | **本会话实跑** |
140
+ | `python -X utf8 -m hive.test_wm_traversal` | `结果: 10 pass / 0 fail`(材料红证 4 pass / 6 fail) | **本会话实跑** |
141
+ | `python -X utf8 -m hive.test_worker_scope` | `结果: 9 pass / 0 fail`(材料红证 5 pass / 4 fail) | **本会话实跑** |
142
+ | `python -X utf8 scripts/check_publish_artifact.py`(`npm run gate` 第 2 环单独复现) | R1 凭据/密钥面 PASS(文件面=0 内容面=0)、R2 私有数据面 PASS、R3 隐私文本 PASS、**R4 非追踪件面 PASS(非追踪=24,允许=24)**,`VERDICT=PASS`——与材料「npm run gate:通过」一致。**临界注明**:五个新守卫 untracked 状态已计入非追踪面,恰触允许上限,提交前 `git add` 登记后余量更足 | **本会话实跑** |
143
+ | `npm run gate`(全链) | 材料口径**通过**;本会话未重跑全链、仅单独复现 gate 的第 2 环检查器(上 row,VERDICT=PASS) | 材料 + 本会话部分复现 |
144
+ | `cargo test` | **未运行**——Rust 面零改动(本会话 git status 证实改动面为 hive/ 与一件 md_cg json,rust/ 与 swarm/ 未动;N92 的 Rust 面证据为材料读码+平台实验,构建复现按材料留修复员) | 双方一致 |
145
+ | `npm test` | **未运行**——TS 面零改动(src/ 与 test/ 未动;本轮缺陷与修复全部在 python 面) | 双方一致 |
146
+
147
+ **上游会话已运行、本会话未重跑的验证**(材料原文,如实区分):五项修复的守卫红证(修前各一跑:mcp_entry_guard 15 fail(含 stash 复验)、exec_empty_response 8 fail、orch_int_args 7 fail(含 stash 复验)、wm_traversal 6 fail、worker_scope 4 fail);修复会话的递进回归(`python -X utf8 scripts/run_tests.py hive --jobs 1` → SUMMARY 7/7 → 8/8 → 9/9 → 10/10 → 11/11,每修一项自动发现一个新守卫);`python -X utf8 hive/hive_mcp/smoke_test.py` → 21 pass/0 fail(隔离 serve:临时 jobs+假执行器+丢弃端口 config,结束后 Get-Process 确认无 serve 残留)×5 轮;四区复核的全部攻击/竞态/越权复现(临时目录/临时 jobs/哑令牌环境,测毕清理)亦为上游会话执行(材料原文)。
148
+
149
+ **git 工作树核对**(本会话 `git status --porcelain` / `git diff --stat` + 逐处读核):改动面 = **四个修复文件**(hive/exec.py +79(F2 三处 + F3 兜底 + F5 包裹)、hive/hive_mcp/mcp_server.py +30(F1 三层)、hive/orch.py +24(F3 两参数 + cap)、hive/wm.py +10(F4 闸))+ **五个新守卫文件**(untracked:hive/test_mcp_entry_guard.py / test_exec_empty_response.py / test_orch_int_args.py / test_wm_traversal.py / test_worker_scope.py)——与五项修复一一对应。另有一件非本轮修复的改动如实注明:`md_cg/whitebox_kb/wisdom/code_solidified.json`(+2/-1,本会话 diff 读核:仅删除一行「缓存命中(指纹 …)」记录)——v9 报告已注明为该轮之前已存在的工作区变更,非本轮触点,未动。未做任何 commit。
150
+
151
+ ---
152
+
153
+ ## 五、遗留清单(15 项:新 11 + legacy 4;medium 8 / low 7)
154
+
155
+ ### medium(8 项)
156
+
157
+ | # | where(缺陷时点) | 问题 | 留档理由 / 处置线索(材料口径) |
158
+ |---|------|------|------------------------------|
159
+ | N82 | hive/exec.py:117 | write_result 固定共享 tmp 名:重投双写者并发重叠 → FileNotFoundError 逃出重试面 → main 顶层兜底把成功终态改写为 error 终态;双 open 交错写产生撕裂非法 JSON 终态(40 轮对撞 6 轮撕裂、fatal 模式 40/40 改写) | v8 F5(结果原子写)的次生缺口非重复修复;修复方向=唯一临时名(mkstemp)+ FileNotFoundError 并入重试面/顶层兜底不覆写已有成功终态,可下轮带 |
160
+ | N83 | hive/wm.py:161 | cmd_snapshot staging 残留绕闸:artifacts 早退在拷入之后 try/finally 之外,残留被后续任务 add jobs 全量扫进自己的分支随 merge 直达 main——失败任务产物绕过自己的三级闸 | 修复=早退前清残留(或 staging 移入 try/finally 回滚),改动面小可下轮带 |
161
+ | N84 | scripts/bootstrap_loop.py:289 | run_channel_b 首条前置拒绝路径不标 status=failed 不计 stats——坏条目永久 pending 反复重扫,占满 queue 首部时饿死真任务,监控面 stats 全零 | 材料注明 owner 规则强制降级(where 非 hive/ 前缀,本轮修复面限 hive);修复=补一条 item['status']='failed' + stats 计数(同族 :301/:314/:332 已有模板) |
162
+ | N87 | hive/orch.py:597-603 | 装载点求值顺序断裂:_load_children() 在 _CFG.update 前求值读到空 job_dir → CWD 相对路径——接管者恒视为无子任务全量重复派发,max_subtasks 从 0 重计;CWD 恰有清单文件时读进他人 children 污染越权读边界 | 修复=装载移到 update 之后(或 _children_path 显式传 job_dir);与 v8 N70 叠加构成复合根因,建议同轮处置 |
163
+ | N89 | hive/hive_mcp/mcp_server.py:85 | jobs 池双源分叉:MCP 面只读 env、serve_start 合并环境 config 键胜出——config 设 HIVE_JOBS_DIR 时任务写 env 池 serve 跑 config 池永久 pending;routes/doctor 同读 env 池三观测面与实况相悖 | 修复=统一池真源(_jobs_dir 与 serve_start 同一解析链 + routes 采用 start 返回的真实 jobs_dir),涉及部署语义决策(config 与 env 优先序),风险中等坑满顺延 |
164
+ | N92 | hive/serve_start.py:210 | stop 段不杀进程树(Windows 无 /T、unix 无 killpg):强杀 serve 后 worker 子进程成孤儿继续烧 API 配额、晚落产物形成矛盾终态;同仓 rust 侧 exec.rs kill_tree 带 /T + 守卫测试在位,python 侧漏 | 修复=stop 改用同仓杀树模式(taskkill /T /F 与 killpg);平台语义实验已由材料完成(无 /T 父亡子孤、带 /T 双亡),修复面小可下轮带 |
165
+ | v8 N68 | hive/orch.py:417-420 | _spawn 白名单透传 mdcg_root:编排者模型(或提示注入)可控认知图读写落点,任意目录建图写内容(12 项图结构实拍) | 修复需语义决策(完全移除键 vs 根白名单约束——spec.mdcg_root 兜底是 exec.py:694 的合法部署形态),坑满顺延 |
166
+ | v8 N69 | hive/orch.py:408-411 | context_files 通道绕过 read_file 全部敏感防线(scope 白名单/凭据拒读/PII 脱敏零检查),凭据文件全文注入子代理 prompt 发往外部网关 | 修复涉及拦截策略设计决策(拒绝整 spawn vs 跳过文件+标注),风险高于纯接线项,坑满顺延 |
167
+
168
+ ### low(7 项)
169
+
170
+ | # | where(缺陷时点) | 问题 | 留档理由 / 处置线索 |
171
+ |---|------|------|---------------------|
172
+ | N85 | hive/verify_runner.py:102 | iter_id 白名单放行裸 '..'(及 '.'/'...'):frozen_fp/out_fp 拼接后指向 interop 上一级;姊妹入口 md_cg/interop.py 同一 regex | 写步需 frozen 读步先行且该文件不存在 → 写步不可达,读步越级只诚实退出 rc=4;修复=regex 排除纯点串形态('..' / '.' / 全点),两入口同 patch |
173
+ | N86 | hive/exec.py:927 | _redact_pii 手机号模式只认 ASCII 词边界裸 11 位——+86/分隔符/中文数字/紧邻汉字形态全漏;_redact_deep 不脱 dict 键名 | exec.py 注释自declare「概率防线非密码学保证」;修复=补变体模式集 + CJK 邻接边界处理(\b 换 (?<!\d)/(?!\d) 类断言)+ 键名同脱 |
174
+ | N88 | hive/orch.py:618-622 | spec 补全写回裸 open("w")+json.dump 覆盖写:写中途 OSError 留半截 spec,重投读同一坏 spec → EXIT_SPEC 永久失败,任务契约不可恢复 | 同文件 _save_children 已有 tmp+os.replace 模板,接线即修,可下轮顺手带 |
175
+ | N90 | hive/hive_mcp/mcp_server.py:386 | 单个畸形 job 文件(result content 非 str / result 或 status 顶层非 dict)打崩 hive_poll 列表与 hive_doctor 整面;serve_start.status() 同族缺口 | 修复=条目级 try/except 降级跳过 + _result_view 对非 str content / 非 dict 顶层容错(两处同 patch) |
176
+ | N91 | hive/serve_start.py:64 | resolve() 对 str 直值空串/纯空白 fail-open:空串键不触发 fail fast 且 merged 时静默覆盖宿主真实值——serve 带残缺 env 上岗每任务烧一次调度才落 error | 修复=str 直值形态同 env 形态归 None(`or None` 两形态对称),一行级 |
177
+ | v8 N70 | hive/orch.py:269-276 | _save_children except OSError: pass 静默吞写盘失败 + _load_children 吞 ValueError——清单丢失/损坏静默返回 [],与 N87 叠加构成「清单丢失→接管者重复派发」复合根因 | 修复=写失败 log + 重试(或至少 log 违约可见)+ 损坏清单诚实报错;与 N87 建议同轮处置 |
178
+ | v7 N58 | hive/orch.py:445-460 | _poll 每轮全量重读+重解析全部子任务 status.json 与完整 result.json(json.load 占 poll 成本 93.9%)只为渲染 200 字卡片;children 线性扫 + 列表扫 O(C²) | low 性能项坑满顺延;修复=终态短路 + 读缓存 + known 改 set |
179
+
180
+ **优先级建议**(据材料处置线索汇总):N82/N83/N88 为「原子写/残留清理」小改动(模板均在位)可同轮速收;N87+v8 N70 为编排接管复合根因建议同轮处置;N92 杀树与 N91 resolve 对称化为低风险单点修;N89 池真源统一与 v8 N68/N69 需部署/拦截语义设计决策,建议下轮专项;N84 待 scripts 面轮次;N85/N86/N90 各自单点。
181
+
182
+ ---
183
+
184
+ ## 六、纪律合规声明
185
+
186
+ 1. **定位先读索引**:本报告写作前已读 WORKSPACE_INDEX.md(按职责定位 docs/eval 为报告归域、hive/ 为蜂巢并发引擎、scripts/ 为工程管线),未做全盘浏览。
187
+ 2. **结论引证**:所有修复与缺陷均引 path:line(缺陷时点快照行号;本轮 hive/exec.py +79 行使材料口径的修复落点行号漂移,涉及处另注本会话读核现行行号——F2 call_llm 守卫材料称 :1207、读核实为现行 :1221,以读核值为准);第三节证据要点摘自任务输入的四区复核材料(上游会话读码+实跑);第四节「本会话实跑」九项为第一手命令与输出原文(两次全量+一次单套、五守卫、gate 第 2 环、git 核对),材料口径与未跑项(cargo/npm test/gate 全链/守卫红证重跑/攻击复现重跑)均如实标注来源,无一冒充。
188
+ 3. **修复落盘核验**:五项修复的现行代码本报告会话逐处读核——F1 mcp_server.py:569-572/:594-597/:626-631 三层守卫、F2 exec.py:1217-1222/:1431-1436/:1556-1574、F3 orch.py:427-432/:479-482 + exec.py:1154-1157、F4 wm.py:252-259、F5 exec.py:958-960;五个新守卫文件存在性(ls 核实)与 `scripts/run_tests.py:52` 自动发现机制(本会话读核在位)均确认;15 项遗留的现状沿材料读码口径(其中 v8 N67/v2 N8 编号经 v8.md:111 / v2.md:116 grep 核实补齐)。
189
+ 4. **安全测试纪律**:材料中全部复现均在临时目录/临时 jobs 目录/哑令牌环境(不触真实 hive serve 进程、真实 ~/.mdcg 令牌库与真实 jobs 目录;smoke 用临时 jobs+假执行器+丢弃端口 config,结束后进程检查无残留),哑数据以占位描述(哑标记/哑私钥/哑 evil_root 等),测毕清理(材料逐项声明);本报告会话只运行守卫套件与门禁检查器,未做任何攻击/竞态复现。
190
+ 5. **已修项不重复报**:本轮 legacy 项全部为历轮留档的**复测记录**(v2 N7/N8/N13/N16、v7 N58、v8 N67/N68/N69/N70),复测成立者修复(5 项)、维持者留档(4 项),不作为新缺陷重复立项;2 项 rejected 均为历轮已修面的复测留档成立(第 8 轮 verify_runner 三修复、批次 34/35 run_channel_b 族),其邻接缺口已单列 confirmed 不重复计;第 1-9 轮已修清单(v1~v9 第二节)未再报;N82 为 v8 F5 结果原子写的**次生缺口**(固定共享 tmp 名的双写者形态,v8 修复未覆盖),非重复修复。
191
+ 6. **隐私脱敏**:全文只写仓库相对路径;材料的本机绝对路径(盘符/用户目录/临时区路径)一律转录为「系统临时区/临时目录/仓外哑探针」等占位描述;哑令牌/哑密钥样例以占位描述,无任何 key/token 字面量;环境变量名与标识符(HIVE_JOBS_DIR/MDCG_ROOT 等)为源码标识符非凭据值,为证据必需而保留;定稿前经机械扫描复查(见下方自查)。
192
+
193
+ ---
194
+
195
+ ## 七、跳过项及原因
196
+
197
+ - **cargo test 未运行**:Rust 面零改动(本会话 git status 证实 rust/ 与 swarm/ 未动;N92 的 Rust 面证据为材料读码+平台语义实验,材料明示「构建复现留修复员」)。
198
+ - **npm test 未运行**:TS 面零改动(src/ 与 test/ 未动,本轮缺陷与修复全部在 python 面)。
199
+ - **`npm run gate` 全链未于本会话重跑**:材料口径通过;本会话以 gate 的第 2 环 `scripts/check_publish_artifact.py` 单独复现 VERDICT=PASS(R1-R4 全 PASS、R4 非追踪=24=允许 24 临界)——五个新守卫 untracked 已计入非追踪面恰触上限,提交前 `git add` 登记后余量更足,处置归编排会话提交前裁决,本会话未擅自登记/提交。
200
+ - **守卫红证未在本会话重跑**(含 F1/F3 的 git stash 回退旧码跑法):上游修复会话已跑且逐项留痕(修前红/修后绿数字见第二节),本会话重跑会反复 stash/unstash 工作树,风险大于收益——以修复落盘读核 + 修后绿态实跑 + 全量回归替代佐证,如实标注。
201
+ - **四区复核的攻击/竞态/越权复现未在本会话重复**:上游复核会话已在临时环境执行并逐项声明「测毕清理」,本报告会话未重跑(第三节证据来源均标注为材料原文)。
202
+ - **N92 全链实验未做**:按纪律未对真实 hive serve 进程做强杀实验,生命周期结论=材料读码+临时进程平台语义实验;材料自身声明的读码推演部分(如 N7 二次后果下游链)照实转录未升格为实证。
203
+ - **全量回归首跑的 `md_cg.test_p0` 偶发失败未深挖**:该套件所在 md_cg 面本轮零代码改动(git diff 证实唯一 md_cg 改动为 wisdom json 数据件且非本轮触点),单独复跑 25/0、全量复跑 184/184——判定偶发(并行资源争用形态)如实记录,未作根因分析(超出本轮范围)。
204
+ - **git 未提交**:commit 需任务方指令;工作树保持四补丁 + 五守卫原状(及一件先前会话遗留的 wisdom json 变更)。
205
+
206
+ ---
207
+
208
+ *报告依据:任务输入的第 10 轮材料(四区复核 25 confirmed + 2 rejected 明细及证据、五项修复的 where/问题/修复/前后对比/守卫/verified_by、留档未修 15 条、门禁结果);本报告会话的修复落盘读核(五补丁共 11 处现行行号锚点)、五个新守卫文件存在性与发现机制核实、五套新守卫实跑(0 fail / 12 pass / 13 pass / 10 pass / 9 pass)、全量回归实跑(首跑 183/184 偶发 → 单套 25/0 → 复跑 184/184,退出码 0)、gate 第 2 环复现(VERDICT=PASS、R4 临界注明)、git 工作树核对、报告脱敏机械扫描。*
209
+
210
+ *自查双清单:①材料覆盖——四区 27 条目全部入文(recent 5+2 / orch 7 / servemcp 6 / legacy 7),confirmed 25 与剔除 2 一一对应,跨区重复 5 组合并说明单列,去重后 20 独立缺陷(新 N82-N92 共 11 + legacy 复测 9)数目吻合,5 补丁逐项五要素齐全(where/问题/修复/前后对比/守卫),修 5 + 留档 15 = 20 无多无少,legacy 项全部标注原轮次(v2 N7/N8/N13/N16、v7 N58、v8 N67/N68/N69/N70,其中 N67/N8 编号经历轮报告 grep 核实补齐并注明),门禁四项(python/cargo/npm test/gate)与跳过原因一一对应,材料与实跑不一致处(全量首跑 183/184)如实记录并三跑定谳;②纪律——全部结论引 path:line 或注明材料来源,九项第一手实跑命令与输出在第四节(两次全量+一次单套、五守卫、gate 第 2 环、git 核对),未跑项(cargo/npm test/gate 全链/红证/攻击复现/N92 全链)无一冒充为已跑,材料口径行号与读核现行行号的漂移(F2 :1207→:1221)如实注明,工作树一件非修复改动(先前会话 wisdom json)如实注明,全文无本机绝对路径、无 key/token 字面量(机械扫描盘符/用户目录/token 形态零命中)。*