@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,202 @@
1
+ # 安全审计实锚记录 v0.1
2
+
3
+ 外部审查报告(33 项)的逐项处置实锚。报告原文未随仓库分发,本文档是
4
+ **处置状态真源**:每项记「实锚证据 → 裁定 → 载体」。
5
+
6
+ ## 已修复(批次 24,提交 2a57c2a)
7
+
8
+ | 项 | 处置 | 载体 |
9
+ |---|---|---|
10
+ | P0-1 node_id 任意文件写入 | 三层纵深:白名单 + realpath 纵深闸 + schema pattern | `md_cg/mdcg.py` `_NODE_ID_RE`、`md_cg/mcp_server.py` |
11
+ | P1-1 mdcg_* 绕过 ops_allow | `_MDCG_OP_REQUIRE` 映射 + `_dispatch` 单点闸 + 完备性守卫 | 同上;守卫 `test_security_audit.py` 13 项 |
12
+ | P2-1 负记忆死调用双倍 IO | 删除死调用 + 注释改写 | `md_cg/mdcg.py` |
13
+ | P1-8 tarfile 解包越界 | `extractall(..., filter="data")` | `scripts/criteria_fingerprint.py` |
14
+
15
+ 字符集裁定(偏离报告建议的理由):白名单**不含冒号**——NTFS 文件名 `:` 是
16
+ 备用数据流(ADS)分隔符,`a:b.md` 实际写 `a` 主文件错位,Windows 硬约束;
17
+ **含 `@`**——无路径语义且存量在用(`mem_a@exp1` 形态)。
18
+
19
+ ## 本批实锚(批次 25)
20
+
21
+ ### P1-6 read_file 收敛 —— 部分分歧 + 增量已修(批次 26)
22
+
23
+ 实锚:`hive/exec.py` `tool_read_file` 已有 **`HIVE_READ_ROOTS`** 白名单机制
24
+ (`read_roots()` + `_under()` 前缀判定,越界即拒),默认放开是
25
+ **2026-09-19 使用者裁定**(docstring 留痕)。
26
+
27
+ **批次 25 裁定勘误**:本文件曾据此判「已闭环」——报告原文到手后确认报告
28
+ **明确建议默认收敛到 workdir**,与 2026-09-19 裁定构成真实分歧,不是闭环。
29
+ 处置(批次 26):默认放开维持使用者裁定不动;采纳报告建议 3 的增量——
30
+ **敏感凭据路径拒读**(`_sensitive_read`:SSH 私钥/云凭据/浏览器 Cookie/
31
+ dot-env/密钥扩展,内容回喂外部 LLM 网关前拦截),不受根白名单配置影响。
32
+ 分歧余项(默认是否收敛)留使用者决策。
33
+
34
+ ### P1-7 自举循环 exec —— 批次 25 实锚错误,批次 26 已修
35
+
36
+ **批次 25 裁定勘误**:曾把本项错锚到 hive 执行器并判「不适用」——报告原文
37
+ 确认真实载体是 `scripts/bootstrap_loop.py:228`:`exec(compile(code, ...), ns)`
38
+ 的 `code` 来自 LLM 返回 / `channel_b_queue.json`(模型可控输入),未沙箱。
39
+
40
+ 处置(批次 26):`_safe_exec_gen` AST denylist 沙箱——禁 import 面、危险
41
+ 内建名(eval/exec/compile/open/__import__/反射面)、dunder 属性逃逸链;
42
+ 命名空间 `__builtins__` 收窄到纯计算内建(双层防御)。自举循环的合法产出
43
+ (排序/查找类纯函数)不受影响,冒烟 10 恶意样本全拒。
44
+
45
+ ### P1-2 / P1-3 / P1-4 / P1-5 —— 报告原文到手后批次 26 已修
46
+
47
+ 批次 25 曾判「待报告原文」(记忆载体落空)——使用者提供原文
48
+ (`D:\program\dsh-memory-代码审查报告.md`)后对齐施工:
49
+
50
+ - **P1-2** `src/lib/roleplay_web.ts` `requireEditKey` **fail-closed**:未配置
51
+ `ROLEPLAY_EDIT_KEY` → 写操作一律 403(`editKeyHint()` 引导配置)。此前
52
+ 「未配置=开放」的 README 如实化被报告正确指出不够——网页面板是唯一
53
+ 浏览器开放面,默认必须关。
54
+ - **P1-3** 原型污染:角色 id 白名单 `validRoleId`(`^[A-Za-z0-9_.-]{1,64}$`
55
+ + 显式拒 `__proto__`/`constructor`/`prototype`)+ meta 字典统一 **null
56
+ 原型**(`toNullProto`——存量文件已含危险键也只是普通 own 属性)+
57
+ `/meta` 与 `setTranslations` 入口校验。
58
+ - **P1-4** 路径根白名单 `check_path_root`(`md_cg/security.py`):ingest /
59
+ export / link(export/import) / mdcg_ingest 五处接线;
60
+ `MDCG_INGEST_ROOT` / `MDCG_EXPORT_ROOT` **设置即 fail-closed**、未设置
61
+ 保持现状(与 HIVE_READ_ROOTS 同构的部署开关语义);`mdcg_ingest` 的
62
+ 权限闸已由批次 24 `_MDCG_OP_REQUIRE`(write)补上。
63
+ - **P1-5** `MDCG_LEGACY_ENV_AUTH` 身份不再能自授 admin:需
64
+ `MDCG_LEGACY_ENV_ADMIN=1` **显式二次开关**,只设 `MDCG_CAN_ADMIN` 时
65
+ 降级 recorder + stderr 提示(不静默)。
66
+
67
+ ### P0-1 同类残留扫 —— 清零确认
68
+
69
+ 对 `mdcg.py` / `mcp_server.py` / `mdcos.py` 全部 `os.path.join` 面(49 处)
70
+ 逐点核查:外部可控输入**仅 node_id 一处**(已三层闸);其余均为内部常量
71
+ 构造(`_index.json` / `_audit.jsonl` / 分片名 `%06d` 格式化串)或只读探测
72
+ (sessions 目录 `os.listdir` 枚举名 + `isdir` 探测,不落盘)。
73
+
74
+ ## 读权限分级(批次 27,使用者需求落地;表述经使用者 2026-09-24 澄清)
75
+
76
+ **private 的体系语义正名**:private ≠ 个人隐私保密,而是**错误处置标记**——
77
+ 工作区内容因错误相关、验证未过、待排查而被标记私有,目的是限制向平级/
78
+ 下级扩散。可见性是**故意的冲突设计**:平级/下级限读,但错误处置链路
79
+ (**设计者、上级节点、验证单元**)必须可读。缺口已于批次 28 按使用者裁定
80
+ **分型治本**:新增 `restricted` 档(阶梯
81
+ public<internal<**restricted**<private<secret),错误处置标记用 restricted
82
+ ——可见性按**错误处置链路角色集**(designer/orchestr/verify,或
83
+ can_admin)判定而非纯 rank;**不加密**(不在 ENCRYPTED_LEVELS——链路要
84
+ 明文读)。private 回归纯隐私/会话绑定语义(加密、仅归属会话+设计者
85
+ 豁免);verify 的初版 cap=private 豁免被分型取代、回滚 internal——
86
+ 验证单元不读真隐私。
87
+
88
+ **新发现——信封加密的第二层墙(批次 28 实验实锤)**:private/secret 节点
89
+ 落盘即加密(encrypted_levels),provision_dek 为每个 actor 发独立 DEK、
90
+ 节点用**写入者 DEK** 加密——跨 actor 读取解密失败静默空(实验:另一
91
+ designer 读 seed 的 private 节点亦空)。即 cap 豁免只过密级闸,跨 actor
92
+ 的 private 实际可读还需 **DEK 共享机制**,三选项待裁定:①DEK 信封共享
93
+ (写者 DEK 用读者身份再包信封——改 seal/envelope 结构);②设计者代查
94
+ 通道(designer 解密后受控转述);③private 分型(错误标记 vs 隐私加密
95
+ 拆开)。不在本批擅自改加密结构。
96
+
97
+ | 身份 | 文件读面(read_file) | 认知图读面(lingshu_cg read) |
98
+ |---|---|---|
99
+ | 设计者/主代理 | 全路径(2026-09-19 裁定)+ 部署可选 `HIVE_READ_ROOTS`;文本内容过 **PII 脱敏**(跳过个人敏感信息不入明文) | 其密级上限内全量(designer=secret:public/internal/private) |
100
+ | 子代理(worker) | **fail-closed 白名单**:工作区(job_dir)+ 定制工作目录(`spec.workdir`)+ 额外定制目录(`spec.read_roots`,新增)——其他会话/越界拒读;无根即无文件读权限 | 默认密级 **internal**(原 secret 降级):可读 public/internal,**错误处置标记(private)与 secret 拒读**——平级不消费未证实/已知有误内容 |
101
+
102
+ 实现:`hive/exec.py` `_worker_scope`/`tool_read_file(scope_roots=)`/`_redact_pii`
103
+ (邮箱/手机号/身份证/私钥块/API key 样式;正则脱敏是概率防线,新增类别在
104
+ `_PII_PATTERNS` 扩展)。编排器派生令牌(`_PRINCIPAL_FACTORY`)身份由调用方
105
+ 给定,不受默认密级影响。
106
+
107
+ ## 剩余项总览
108
+
109
+ - **P1 面已全清**(P1-1/2/3/4/5/6增量/7/8);
110
+ - P1-6 余项分歧:读默认是否从「放开」收敛到 workdir——留使用者决策
111
+ (2026-09-19 裁定 vs 报告建议,增量黑名单已先行);
112
+ - P2 剩余 13 项(性能 9 + 安全/健壮性 4,P2-1 已修):按报告优先序渐进;
113
+ - 部署建议:生产设 `HIVE_READ_ROOTS` / `MDCG_INGEST_ROOT` /
114
+ `MDCG_EXPORT_ROOT`(三组根开关的消费侧)。
115
+
116
+
117
+ ## P2-14 根源分析(批次 32,使用者要求查明根源)
118
+
119
+ **堆积链路**:新版 Windows 移除 wmic.exe → ind_bootstrap_procs 的
120
+ subprocess 抛 FileNotFoundError → except: pass 吞掉返回 [] → main
121
+ 停转分支把 [] 解读为「确认无进程」→ **不 kill 旧 loop 直接 restart** →
122
+ 每轮叠加一个新进程(堆积)。
123
+
124
+ **三层根源**:
125
+ 1. 组件层:wmic 已从新版 Windows 移除(本机实测 wmic.exe 存在且可运行
126
+ ——堆积在本机未发生;风险面向新部署);
127
+ 2. **语义层(真根因)**:探测失败(未知)被压平为「确认无进程」——
128
+ fail-open 的错误处理。修复 = 三态探测:成功返回 list / 失败返回
129
+ **None(未知)**,调用方对 None 跳过 kill/restart(fail-safe:不确定
130
+ 就不动);
131
+ 3. 历史层(实证):watchdog 日志 1316 条 100% 是 no_log——
132
+ ind_bootstrap_procs 在本机历史中从未执行过(bootstrap_log.jsonl
133
+ 不存在,no_log 分支短路),堆积从未发生。
134
+
135
+ **报告断言修正**:①「taskkill 模糊匹配误杀」不成立——kill_procs 是
136
+ /PID 精确击杀,find 的行过滤也必须含 bootstrap_loop.py;②「判活恒失败」
137
+ 在 wmic 存在的机器不成立(no_log 短路根本不进判活)。
138
+
139
+ **修复落地(批次 32)**:find_bootstrap_procs 升级 CIM 枚举
140
+ (Get-CimInstance+CSV,wmic 依赖消除)+ 三态返回(None=探测未知);
141
+ main 两个分支(degraded/停转)对 None 一律跳过 kill/restart、状态记
142
+ probe_unknown。行为验证:CIM 实测 [](当前无 loop 进程)、枚举故障
143
+ mock → None。顺带发现:loop 未部署的机器上 watchdog 每 10 分钟刷一条
144
+ no_log 噪声日志(1316 条)——调度侧应停用未部署机器的 watchdog 任务。
145
+
146
+
147
+ ## P2 面清账终态(批次 30/31/32 + 本批裁定,33 项报告收官)
148
+
149
+ P2 共 24 项,终态:**23 项修复/闭环 + 1 项裁定保留**。
150
+
151
+ | 项 | 终态 | 批次 |
152
+ |---|---|---|
153
+ | P2-1 死调用 | 修 | 24 |
154
+ | P2-2 检索双遍历 / P2-3 残留拷贝 / P2-4 重复打分 | 修(单遍双收集/回写自愈/pre_scored) | 31 |
155
+ | P2-5 候选无缓存 | 闭环(批次 21 readcache 先于报告) | 21 |
156
+ | P2-6~8 budget/列目录/context | 修(增量/先截断/读前查大小) | 31 |
157
+ | P2-9~11 transcript/原子写/meta 锁 | 修(尾 500 条/tmp+rename/同步段注记) | 31 |
158
+ | P2-12 UTF-8 截断 / P2-13 日志轮转 / P2-14 watchdog | 修(Buffer/轮转/根源修复三态+CIM) | 31/32 |
159
+ | P2-15~20 安壮面 | 修(fd/timeout/resp 上限/test_cmd env 化/验证器白名单/读路径单点收拢) | 30 |
160
+ | P2-22 schema 薄 | 示范点渐进(node_id pattern 等) | 24/30 |
161
+ | P2-23 role_id 白名单 / P2-24 笔误 | 修 | 30 |
162
+ | **P2-21 自研 ChaCha20-Poly1305** | **裁定保留(本批)** | — |
163
+
164
+ **P2-21 裁定记录**:报告建议长期换 cryptography 库,使用者裁定
165
+ **不引入第三方依赖**——保留自研实现。依据:报告自标「未见弱密钥或时序
166
+ 侧信道」;实现与 RFC 8439 逐段核查一致;仓库测试面(test_p13_encryption)
167
+ 覆盖正确性。残余风险如实登记:自研密码学无第三方审计背书,后续若引入
168
+ 依赖管理体系可重议。
169
+
170
+ **P2-13 PS 侧校正**:报告称 dsh-watchdog.ps1「日志追加无轮转」——实锚
171
+ 现状为**时间戳分片**(每次运行生成 dsh-\.out.log 新文件),天然无追加
172
+ 无轮转需求,主张与现状不符(登记不改)。观察项(报告未提):时间戳分片
173
+ 无限累积,可考虑启动时清理 30 天前旧分片(低优先级,未施工)。
174
+
175
+
176
+ ## V21 缺陷挖掘报告处置(批次 34/35,提交 1fd4b36+)
177
+
178
+ 第 21 轮对抗式缺陷挖掘(对象 00a2c70b)8 项全修:4 P0 + 4 P1。
179
+
180
+ | 项 | 级别 | 归属 | 处置 |
181
+ |---|---|---|---|
182
+ | V21-1 editKeyHint 无限自递归 | P0 | 批次 26 引入 | 两分支终止文案;附带修 verify_web mock 缺 ctx.get(空跑) |
183
+ | V21-2 _readable 密级回填 fail-open | P0 | 历史遗留 | 密级未知按最高档 secret(fail-closed) |
184
+ | V21-3 _NODE_ID_RE 只允许 ASCII | P0 | 批次 24 引入 | 放行中文+逗号;5 官方红同源转绿;P0-1 防线不变 |
185
+ | V21-4 run_channel_b 主体被掏空 | P0 | 批次 26 插入错位 | 沙箱段归位模块级,主体恢复 |
186
+ | V21-5 P2-3 回写永久 no-op | P1 | 批次 31 引入 | 就地剥离自愈(s1 断言随语义翻转) |
187
+ | V21-6 P2-4 不可哈希死代码 | P1 | 批次 31 引入 | doc_key[0] 取 node_id 作键 |
188
+ | V21-7 lingshu_cg 不过 PII 脱敏 | P1 | 批次 27 缺口 | _redact_deep 递归脱敏统一接线 |
189
+ | V21-8 _sensitive_read 改名即免检 | P1 | 批次 26 增量的界 | 族匹配(id_* 前缀/credential 子串/.env 后缀) |
190
+
191
+ 流程项落地:
192
+ - **check_unreachable.py** 进 gate 首位——AST 判终止语句后同块后继,
193
+ 一次拦住 s5(批次 33)与 V21-4 同族缺陷;反向样例验证两形态命中;
194
+ - **run_channel_b 全链路冒烟**并入 V21-4 守卫(队列→沙箱→verifier→
195
+ verified_units/队列回写/rejected_log 五断言)——首跑即暴露两个潜伏
196
+ 缺陷:verified 初始化空串(文件不存在时 TypeError)与前置拒绝路径
197
+ 不标 status(卡队列,与 2026-08-28 同型)——无测试覆盖模块的静默
198
+ 潜伏实证,已修。
199
+
200
+ 基线对照(报告第五节):旧 5 红(branches/en_pipeline/identity_attribution/
201
+ p32_backfill/semantic_canonical)与新 5 红(V21-3 同源)**全部清零**
202
+ (批次 34/35 实测:37 套 + en_pipeline 48 + semantic_canonical 33 全绿)。
@@ -1,43 +1,43 @@
1
- # 检索收敛口径实测与 S1b 设计(真实库 12,149 节点,只读)
2
-
3
- > 目的:为「重接检索线路」的价值边界提供**实测**依据,并据此确定下一个核心任务(S1b)。
4
- > 全部为只读测量(`MdCG(真实库)` + 抽样分类),未对真实库做任何写入。
5
-
6
- ## 1. 两条收敛口径的实测对比
7
-
8
- | 口径 | 键 | 覆盖率 | 收敛强度 | 证据 |
9
- | --- | --- | --- | --- | --- |
10
- | **粗:14 大域**(本轮 S1 已落地) | `big_domain_classify`(关键词表) | 已标注 **58.3%**;无域信号 41.7% | 域内 ∪ 未标注 ≈ **44%~52% kept(约 2 倍)** | 240 节点抽样:binary 140 / tier2 +6 / 仍无标签 94 |
11
- | **细:路由桶**(写入侧已建好) | `bucket_dir(route_key(...))` | **91.1% 节点有非 orphan 桶**(11,063 / 12,149) | **期望扫描 2.1%**(1,066 桶,最大桶 10.1%) | 全库统计 |
12
-
13
- 细口径的桶形如 `cond_感知系统_d94e90d2`、`cond_letta-code_f5190c71`、`cond_graphrag_f0f8d2e7` —— 是
14
- **来源/项目级域**(来自 `domain:` 标签或 `observation_position`),比 14 大域精细得多。
15
-
16
- ## 2. 现状(代码事实)
17
-
18
- `MdCG.search()` **已经有 T0/T1 桶路**:当调用方传入 `context` 时,
19
- `route_bucket = bucket_dir(route_key(ctx, ctx.get("tags")))`,优先只在同桶内 LIKE 检索(T0),
20
- 不足再桶内全扫(T1),仍不足才落 T2/T3 全库。
21
-
22
- **缺的只有一环**:不传 `context` 的普通 `search(q)` 没有桶 → 直接全表扫描。
23
- (审计「偏差 5:桶路由依赖人工标签」在**自动沉淀的库**上成立;本真实库 91% 有桶,桶路是健康的。)
24
-
25
- ## 3. S1b 设计(下一个核心任务)
26
-
27
- **目标**:让 `search(q)` 在**没有 context** 时也能吃到细口径收敛。
28
-
29
- 1. **桶规模表**(索引内即可构建,缓存):`bucket → 节点数`(本库 1,066 桶)。
30
- 2. **query 侧键推断**:把 query 扩展词与每个桶的可读前缀做 `domain_similarity`(已有:包含取长度比 + bigram Jaccard),
31
- 取 top-k 个键(`MDCG_BUCKET_TOPK`,默认 3)且要求 `sim ≥ MDCG_BUCKET_MIN_SIM`。
32
- 3. **收敛**:候选 = 命中桶内节点 ∪ **orphan/无桶节点**(召回安全,本库 orphan 仅 8.9%)∪ 未标桶节点。
33
- 4. **兜底**:命中不足 `min_results` → 回退全库(与 S1 同款规则)。
34
- 5. **开关**:`MDCG_GATE_S1B_BUCKET`(默认 0、显式 =1);审计 `meta.gates.s1b = {keys, kept, dropped}`。
35
-
36
- **预期收益(按本库实测推算)**:query 命中具体桶时 kept ≈ 该桶(期望 2.1%) + orphan(8.9%) ≈ **11%**
37
- → 约 **9 倍**;命中大桶时 ~19% → 5 倍;命中不到任何桶时自动回退(不劣化)。
38
-
39
- ## 4. 边界
40
-
41
- - 不改写入侧(桶已由 `route_key` 在写入时建好);
42
- - 不放松召回安全:orphan/无桶节点恒留兜底,命中不足即回退;
43
- - 与 S1(14 大域)可叠加:S1 先按大域收敛,S1b 再按桶收敛(两者都有兜底)。
1
+ # 检索收敛口径实测与 S1b 设计(真实库 12,149 节点,只读)
2
+
3
+ > 目的:为「重接检索线路」的价值边界提供**实测**依据,并据此确定下一个核心任务(S1b)。
4
+ > 全部为只读测量(`MdCG(真实库)` + 抽样分类),未对真实库做任何写入。
5
+
6
+ ## 1. 两条收敛口径的实测对比
7
+
8
+ | 口径 | 键 | 覆盖率 | 收敛强度 | 证据 |
9
+ | --- | --- | --- | --- | --- |
10
+ | **粗:14 大域**(本轮 S1 已落地) | `big_domain_classify`(关键词表) | 已标注 **58.3%**;无域信号 41.7% | 域内 ∪ 未标注 ≈ **44%~52% kept(约 2 倍)** | 240 节点抽样:binary 140 / tier2 +6 / 仍无标签 94 |
11
+ | **细:路由桶**(写入侧已建好) | `bucket_dir(route_key(...))` | **91.1% 节点有非 orphan 桶**(11,063 / 12,149) | **期望扫描 2.1%**(1,066 桶,最大桶 10.1%) | 全库统计 |
12
+
13
+ 细口径的桶形如 `cond_感知系统_d94e90d2`、`cond_letta-code_f5190c71`、`cond_graphrag_f0f8d2e7` —— 是
14
+ **来源/项目级域**(来自 `domain:` 标签或 `observation_position`),比 14 大域精细得多。
15
+
16
+ ## 2. 现状(代码事实)
17
+
18
+ `MdCG.search()` **已经有 T0/T1 桶路**:当调用方传入 `context` 时,
19
+ `route_bucket = bucket_dir(route_key(ctx, ctx.get("tags")))`,优先只在同桶内 LIKE 检索(T0),
20
+ 不足再桶内全扫(T1),仍不足才落 T2/T3 全库。
21
+
22
+ **缺的只有一环**:不传 `context` 的普通 `search(q)` 没有桶 → 直接全表扫描。
23
+ (审计「偏差 5:桶路由依赖人工标签」在**自动沉淀的库**上成立;本真实库 91% 有桶,桶路是健康的。)
24
+
25
+ ## 3. S1b 设计(下一个核心任务)
26
+
27
+ **目标**:让 `search(q)` 在**没有 context** 时也能吃到细口径收敛。
28
+
29
+ 1. **桶规模表**(索引内即可构建,缓存):`bucket → 节点数`(本库 1,066 桶)。
30
+ 2. **query 侧键推断**:把 query 扩展词与每个桶的可读前缀做 `domain_similarity`(已有:包含取长度比 + bigram Jaccard),
31
+ 取 top-k 个键(`MDCG_BUCKET_TOPK`,默认 3)且要求 `sim ≥ MDCG_BUCKET_MIN_SIM`。
32
+ 3. **收敛**:候选 = 命中桶内节点 ∪ **orphan/无桶节点**(召回安全,本库 orphan 仅 8.9%)∪ 未标桶节点。
33
+ 4. **兜底**:命中不足 `min_results` → 回退全库(与 S1 同款规则)。
34
+ 5. **开关**:`MDCG_GATE_S1B_BUCKET`(默认 0、显式 =1);审计 `meta.gates.s1b = {keys, kept, dropped}`。
35
+
36
+ **预期收益(按本库实测推算)**:query 命中具体桶时 kept ≈ 该桶(期望 2.1%) + orphan(8.9%) ≈ **11%**
37
+ → 约 **9 倍**;命中大桶时 ~19% → 5 倍;命中不到任何桶时自动回退(不劣化)。
38
+
39
+ ## 4. 边界
40
+
41
+ - 不改写入侧(桶已由 `route_key` 在写入时建好);
42
+ - 不放松召回安全:orphan/无桶节点恒留兜底,命中不足即回退;
43
+ - 与 S1(14 大域)可叠加:S1 先按大域收敛,S1b 再按桶收敛(两者都有兜底)。
@@ -0,0 +1,85 @@
1
+ # 检索算法口径对照 v0.1(批次 15)
2
+
3
+ > 2026-09-23 使用者口径定案:**统一翻译为中文 → 中文归一化到标准中文集(atoms 词表)→ 检索**。
4
+ > 本文是该口径的两侧实现对照与残留差距真源——两侧实现以本文为准,改动检索口径先改本文。
5
+
6
+ ## 一、统一管线(两侧同构)
7
+
8
+ ```
9
+ query(任意语言)
10
+ │ MDCG_UNIFY_QUERY=0 可整体关回退(默认开 = 口径定案转正)
11
+ ▼
12
+ [统一归一层 unify]
13
+ ├─ 纯中文 → 原样(bigrams 去空白后与原文等价,零变更纪律)
14
+ ├─ 含英文 → en 形态归一(小写/停用词/时态归零)
15
+ │ → en→zh 词表映射(en_zh_map.json,28478 词,CEDICT 全链派生)
16
+ │ → 未登录词原样保留(unknown_keep = 词表边界,非错误)
17
+ ├─ 中文段 → segment 贪心最长匹配(zh_keys 204 标准原子,键长降序)
18
+ ▼
19
+ 标准原子序列(空格 join,如 "我 吃 牛肉 昨天")
20
+ ▼
21
+ 检索各路(lexical / bucket / entity / graph,RRF 融合)
22
+ —— doc 侧正文不动(真源+原始双保留纪律),只有 query 侧归一
23
+ ```
24
+
25
+ ## 二、词表真源单侧化(架构决策)
26
+
27
+ | 资产 | 真源 | 产物 | Rust 消费 |
28
+ |---|---|---|---|
29
+ | en→zh 映射 | `md_cg/semantic/en_normalizer.py`(EN_ZH 人工层 + COMPOUND_ZH + CEDICT 链) | `en_zh_map.json`(`export_en_zh_map.py` 生成,28478 词条) | `rust/src/atoms.rs` 查表 |
30
+ | 标准原子键 | `md_cg/semantic/zh_en_atoms.py`(ZH_EN,204 键) | 同上文件 `zh_keys` 字段 | segment 贪心匹配 |
31
+ | OOV 审计基准 | `md_cg/semantic/atoms.json`(815 标准概念,zh+en 双语条目) | —— | (写入侧摘要合法性,检索不消费) |
32
+
33
+ **为何不移植词典到 Rust**:双词典真源 = 版本敏感漂移(同词面不同版本映射不同 →
34
+ 两侧分数漂移)——正是弃用外部分词器(jieba 等)的原因。词表更新后重跑
35
+ `python -m md_cg.semantic.export_en_zh_map` 再生成,两侧永不漂移。
36
+
37
+ **为何不用标准分词器**:中文无空格分词天然标准;jieba 词典版本敏感且 rust 侧
38
+ 无同源实现。bigram + 词表映射零依赖、确定性、可逐位对拍。
39
+
40
+ ## 三、两侧实现对照
41
+
42
+ | 环节 | Python | Rust | 对齐守卫 |
43
+ |---|---|---|---|
44
+ | 统一归一入口 | `semantic/unify.py::unify_query`(三处 search 入口接线) | `atoms.rs::Atoms::unify`(`engine.search` 单点接线) | rank_parity 逐位对拍 |
45
+ | en 形态归一 | `en_normalizer.strip_tense` | `text.rs::strip_tense_en`(golden 对齐测试) | golden_python_alignment |
46
+ | en→zh 查表 | normalize_en_query 查链(extra→EN_ZH→CEDICT) | en2zh 查表(键=strip 后原形,lower) | 同一 en_zh_map.json |
47
+ | segment | `zh_en_atoms.segment` | `atoms.rs::segment`(键长降序贪心) | atoms 三测 + rank_parity |
48
+ | 词法打分 | bigram 集合交(`inter/len(qb)`) | `text.rs::bigrams`+`overlap_count` | golden 对齐 |
49
+ | 融合 | `search_rrf`(RRF_K/PATH_TAKE/weights) | `retrieval.rs::fuse` | rank_parity |
50
+
51
+ ## 四、A/B 转正证据(2026-09-23,`scripts/rank_parity.py --dataset --ab`)
52
+
53
+ 数据集:`scripts/retrieval_dataset.json`(30 节点中英混合 + 10 query,两侧同源)。
54
+
55
+ | query tag | unify=off top-1 | unify=on top-1 | 判定 |
56
+ |---|---|---|---|
57
+ | beef noodles lunch | ds_en_02(错位) | **ds_zh_00 牛肉面** | 跨语修复 |
58
+ | soul hub hot cache | ds_en_02(错位) | **ds_zh_02 灵枢热缓存** | 跨语修复 |
59
+ | token verification / database migration / piano practice | 英文原文档 | 中文同义文档 | 同义翻转(无退化) |
60
+
61
+ 结论:跨语增益真实(off 的跨语 top-1 全部错位);单语场景排序有 tie 翻转
62
+ (中英文档同义时 top-1 可能互换)——**口径变更的如实代价**,靠 judge 终排与
63
+ path_weights 调优消化。
64
+
65
+ ## 五、登记残留(未施工,按优先序)
66
+
67
+ 1. **S1b 中文 query 桶收敛失效**(批次 15 发现):桶键英文(如
68
+ `swarm-dispatch`)时,中文 query 经 `bucket_key_readable`+`domain_similarity`
69
+ 恒 no_key_match → 不收敛。恰击中 S1b 设计目标场景(真实库 91.1% 中文节点)。
70
+ 方向:桶键双语化 / domain_similarity 中文面。
71
+ 2. **对拍逐位残留**(issue #29 未清项的精确化):unify=0 基线 9/10、unify=1
72
+ 8/10。差异集中于两侧 terms 展开对英文保留词的处理与 graph 路种子——两侧
73
+ lexical 路细节差,归一层无关(基线态已现)。
74
+ 3. **CEDICT 低置信错译**:dispatch→「结果」类第一义项直译(LoCoMo 报告发现 5
75
+ 同模式)。en_zh_map 保留 CEDICT 层(覆盖面)+ low_confidence 观测,错译随
76
+ 用随修进 EN_ZH 人工层。
77
+ 4. en 归一规则差:Python en_normalizer 有内嵌短语扫描(COMPOUND_ZH_PHRASES),
78
+ Rust 端短语经 map 键直接覆盖("soul hub" 等已入键),长句内嵌扫描未移植。
79
+
80
+ ## 六、变更纪律
81
+
82
+ - `MDCG_UNIFY_QUERY` 默认 "1"(转正);`=0` 显式关回退,两侧同一 env。
83
+ - 词表再生成:`python -m md_cg.semantic.export_en_zh_map` → 两侧自动同源。
84
+ - 对拍命令:`python scripts/rank_parity.py --dataset scripts/retrieval_dataset.json --ab`
85
+ (A/B 证据)+ 同命令去 `--ab`(逐位对拍)。
@@ -1,102 +1,102 @@
1
- # 检索路径与认知结构契约 v0.1
2
-
3
- > 立约动因:外部审计(2026-09-19)发现「认知结构全部入库,但检索路径不调用它们」——
4
- > 五条偏差经本侧逐行核对**全部成立**(证据见 §1)。缺的不是能力,是**「结构如何参与检索」的契约**。
5
- > 本文件就是把这份契约写下来,作为重接线路(retrieval rewire)的判据。
6
-
7
- ## 1. 审计核对(本侧逐行验证,origin/main 口径)
8
-
9
- | # | 审计结论 | 核对证据 | 判定 |
10
- | --- | --- | --- | --- |
11
- | 1 | edges 图建了但检索不走图 | `md_cg/mdcg.py::search()` 候选 = `self.index["nodes"].values()` 全枚举(L1506-1511)→ `_read_many` 全读(L1574/L1601-1613)→ `_like` 子串 + bigram;全路径**零** edges 引用 | 成立 |
12
- | 2 | condition_space 是后置过滤 | `judge_qualification` 只在 `_emit` 内、且对 `scored[:k]` **排序后**逐条判定(L1670-1679);扫描与打分已全部付出 | 成立 |
13
- | 3 | 五层只是分类标签 | `layer` 仅作候选构建时的等值过滤(L1507);打分不含层级先验;负记忆只在结果尾部附加条目(L1681-1692),不抑制正候选 | 成立 |
14
- | 4 | 大域先验只进元数据 | `big_domain_classify` / `big_domain_score_breakdown` 算出后只传入 `_emit` 的 meta(L1542-1543 → L1711-1712),不参与候选收敛 | 成立 |
15
- | 5 | 桶路由依赖人工标签 | `routing.route_key`:tags 首个 `domain:` → 否则 `observation_position` 归一化 → 否则 `ORPHAN`(L55-67);DSH 自动沉淀不打 `domain:` → 多落 orphan | 成立(observation_position 一档属降级回退) |
16
-
17
- 共同主线:**认知结构被实现成「数据结构」而不是「计算路径」** —— 存进去、建起来,但检索时不用。
18
-
19
- ## 2. 目标形态:检索 = 六阶段逐级收敛(而非全扫后过滤)
20
-
21
- ```
22
- 情境输入(query, context)
23
- ↓ S1 大域先验收敛 terms → big_domain_classify → 域集合;候选 = 该域节点 ∪ ORPHAN 兜底
24
- ↓ S2 条件空间前置门控 condition_space 硬槽(time_window/observation_position/存在约束)不匹配 → 不进候选
25
- ↓ S3 图扩散激活 以 (S1∩S2) 命中为种子,沿 edges 双向扩散 N 跳、按跳数衰减;不走全表
26
- ↓ S4 层级激活优先级 anchor/self 初始激活值加成(认知优先级,不是过滤)
27
- ↓ S5 负记忆抑制 rejected/unresolved 命中 → 对相关正候选乘性降权(抑制信号)
28
- ↓ S6 一致性交叉验证 对最终 top-k 做 crosscheck(复用 md_cg/crosscheck.py)
29
- 输出: 激活子集 + 分阶段审计计数
30
- ```
31
-
32
- **每一步都在缩小范围**:触碰节点数应从「N(全库)」降到「域内 ∩ 条件匹配 ∩ 邻域」。
33
-
34
- ## 3. 各阶段契约(输入 / 输出 / 不变量 / 失败模式)
35
-
36
- ### S1 大域先验收敛
37
- - 输入:`terms`(`expand_query_terms` 结果)、节点 frontmatter 的**域标签**
38
- - 输出:`domains`(top-1 或 top-m,由 `big_domain_score_breakdown` 阈值决定)
39
- - 依赖:**节点侧域标签**。现状只有 query 侧分类器,节点侧无域字段 → 需写入侧推断并持久化 `big_domain`(内容 → `big_domain_classify`),历史节点由回填器补齐
40
- - 不变量:域收敛**不得丢召回**——ORPHAN/未标域节点必须留在兜底池;域内候选 < `min_results` 时自动放行兜底
41
- - 失败模式:域分类错误 → 兜底路径必须能救回
42
-
43
- ### S2 条件空间前置门控
44
- - 输入:`condition_space`(每节点已存)、`context`(调用方情境)
45
- - 输出:通过门控的候选(**不读正文**即可判定:只用 frontmatter)
46
- - 只前移**可判定的硬槽**:`time_window` / `observation_position` / 存在约束;语义类判定仍留 `judge_qualification`(后置,因需正文)
47
- - 不变量:只剔除「明确不匹配」;**信息不足一律放行**(宁多勿漏)
48
-
49
- ### S3 图扩散激活
50
- - 输入:种子集合、`edges`(出边在 `fm.edges`;白箱 KB 的 `edges` 表按 source/target 双索引)
51
- - 输出:激活集合 + 激活值(种子 1.0,第 n 跳 × 衰减^n)
52
- - 不变量:扩散**不得引入未通过 S2 门控**的节点;边方向/关系类型权重可配
53
- - 失败模式:图稀疏(实测 142 节点 / 87 边)→ 覆盖不足,必须保留域内 LIKE 兜底
54
-
55
- ### S4 层级激活优先级
56
- - 初始激活值加成:`anchor`/`self` > `structural` > `knowledge` > `contextual`(顺序可配)
57
- - 不变量:只影响初始值/排序,不把不合格节点拉回
58
-
59
- ### S5 负记忆抑制
60
- - `rejected`/`unresolved` 命中查询 → 对与其 `edges` 相邻或词面高度重叠的正候选乘性降权(`w ← w × (1-λ)`)
61
- - 保留现有行为:负记忆仍作为结果条目返回(便于调用方感知),但不再与正候选同权
62
-
63
- ### S6 一致性交叉验证
64
- - 复用 `md_cg/crosscheck.py`;对 top-k 输出 verdict 摘要,不进主排序
65
-
66
- ## 4. 开关与回退(缺一不可)
67
-
68
- | 开关 | 默认 | 作用 |
69
- | --- | --- | --- |
70
- | `MDCG_RETRIEVAL_PIPELINE` | **0** | 总开关;关 = 与现状等价(回归必须全绿) |
71
- | `MDCG_GATE_S1_DOMAIN` | 0 | 大域收敛 |
72
- | `MDCG_GATE_S2_COND` | 0 | 条件前置门控 |
73
- | `MDCG_GATE_S3_SPREAD` | 0 | 图扩散(`MDCG_SPREAD_HOPS`、`MDCG_SPREAD_DECAY`) |
74
- | `MDCG_GATE_S4_LAYER` | 0 | 层级优先级(`MDCG_LAYER_BOOST`) |
75
- | `MDCG_GATE_S5_NEG` | 0 | 负记忆抑制(`MDCG_NEG_LAMBDA`) |
76
-
77
- 规则:**默认关**;每阶段可单独开,便于逐项验证与归因;总开关关时 `search()` 走原路径。
78
-
79
- ## 5. 验收判据(每阶段都要过)
80
-
81
- 1. **等价性**:开关关 → `scripts/run_tests.py md_cg` 全绿,且返回与现状一致(快照对比);
82
- 2. **有效性**:开关开 → `meta.scanned` 显著下降(阶段目标:S1 ≤1/10,S2 再砍,S3 只碰邻域),既有召回用例不劣化;
83
- 3. **可审计**:`meta` 增加分阶段计数(`domains/gate_in/gate_out/spread_hops/activated/suppressed`),供编外复核端逐项核对;
84
- 4. **落地判据不变**:内部独立复核 ACCEPT ∧ 零删除 ∧ 干净树回归绿 ∧ 逐候选可回退提交。
85
-
86
- ## 6. 里程碑与分支纪律
87
-
88
- - 每阶段独立分支、独立复核、独立落地;落地后在 `origin/main` 打 `core-*` 标签;
89
- - 探索分支随任务完结即回收(≤10 条,见 `hive/interop/note-branch-discipline.md`)。
90
-
91
- ## 7. 边界(不做的事)
92
-
93
- - **不**用 FTS5/倒排表替代认知路径(那会让灵枢退化为普通搜索引擎,并掩盖机制失效);倒排只可作 S1/S3 之后的**候选内**加速;
94
- - **不**改写入侧语义(只补 `big_domain` 域标签这类检索所需的最小元数据);
95
- - **不**在默认路径上启用新行为(先 flag 化、逐项验证、再讨论默认开启)。
96
-
97
- ## 8. 首期范围(S1 + S2)
98
-
99
- 1. 写入侧:`add()` / `_write_node` 存 `big_domain`(内容 → `routing.big_domain_classify`);新增幂等回填器 `md_cg/backfill_bigdomain.py`(支持 `--dry-run`);
100
- 2. 读路径:`search()` 增加 S1 收敛与 S2 门控(flag 控),输出分阶段审计计数;
101
- 3. 测试:等价性快照 + 收敛率(`scanned` 下降)+ 召回不劣化;
102
- 4. S3~S5 依次跟进(各自独立落地)。
1
+ # 检索路径与认知结构契约 v0.1
2
+
3
+ > 立约动因:外部审计(2026-09-19)发现「认知结构全部入库,但检索路径不调用它们」——
4
+ > 五条偏差经本侧逐行核对**全部成立**(证据见 §1)。缺的不是能力,是**「结构如何参与检索」的契约**。
5
+ > 本文件就是把这份契约写下来,作为重接线路(retrieval rewire)的判据。
6
+
7
+ ## 1. 审计核对(本侧逐行验证,origin/main 口径)
8
+
9
+ | # | 审计结论 | 核对证据 | 判定 |
10
+ | --- | --- | --- | --- |
11
+ | 1 | edges 图建了但检索不走图 | `md_cg/mdcg.py::search()` 候选 = `self.index["nodes"].values()` 全枚举(L1506-1511)→ `_read_many` 全读(L1574/L1601-1613)→ `_like` 子串 + bigram;全路径**零** edges 引用 | 成立 |
12
+ | 2 | condition_space 是后置过滤 | `judge_qualification` 只在 `_emit` 内、且对 `scored[:k]` **排序后**逐条判定(L1670-1679);扫描与打分已全部付出 | 成立 |
13
+ | 3 | 五层只是分类标签 | `layer` 仅作候选构建时的等值过滤(L1507);打分不含层级先验;负记忆只在结果尾部附加条目(L1681-1692),不抑制正候选 | 成立 |
14
+ | 4 | 大域先验只进元数据 | `big_domain_classify` / `big_domain_score_breakdown` 算出后只传入 `_emit` 的 meta(L1542-1543 → L1711-1712),不参与候选收敛 | 成立 |
15
+ | 5 | 桶路由依赖人工标签 | `routing.route_key`:tags 首个 `domain:` → 否则 `observation_position` 归一化 → 否则 `ORPHAN`(L55-67);DSH 自动沉淀不打 `domain:` → 多落 orphan | 成立(observation_position 一档属降级回退) |
16
+
17
+ 共同主线:**认知结构被实现成「数据结构」而不是「计算路径」** —— 存进去、建起来,但检索时不用。
18
+
19
+ ## 2. 目标形态:检索 = 六阶段逐级收敛(而非全扫后过滤)
20
+
21
+ ```
22
+ 情境输入(query, context)
23
+ ↓ S1 大域先验收敛 terms → big_domain_classify → 域集合;候选 = 该域节点 ∪ ORPHAN 兜底
24
+ ↓ S2 条件空间前置门控 condition_space 硬槽(time_window/observation_position/存在约束)不匹配 → 不进候选
25
+ ↓ S3 图扩散激活 以 (S1∩S2) 命中为种子,沿 edges 双向扩散 N 跳、按跳数衰减;不走全表
26
+ ↓ S4 层级激活优先级 anchor/self 初始激活值加成(认知优先级,不是过滤)
27
+ ↓ S5 负记忆抑制 rejected/unresolved 命中 → 对相关正候选乘性降权(抑制信号)
28
+ ↓ S6 一致性交叉验证 对最终 top-k 做 crosscheck(复用 md_cg/crosscheck.py)
29
+ 输出: 激活子集 + 分阶段审计计数
30
+ ```
31
+
32
+ **每一步都在缩小范围**:触碰节点数应从「N(全库)」降到「域内 ∩ 条件匹配 ∩ 邻域」。
33
+
34
+ ## 3. 各阶段契约(输入 / 输出 / 不变量 / 失败模式)
35
+
36
+ ### S1 大域先验收敛
37
+ - 输入:`terms`(`expand_query_terms` 结果)、节点 frontmatter 的**域标签**
38
+ - 输出:`domains`(top-1 或 top-m,由 `big_domain_score_breakdown` 阈值决定)
39
+ - 依赖:**节点侧域标签**。现状只有 query 侧分类器,节点侧无域字段 → 需写入侧推断并持久化 `big_domain`(内容 → `big_domain_classify`),历史节点由回填器补齐
40
+ - 不变量:域收敛**不得丢召回**——ORPHAN/未标域节点必须留在兜底池;域内候选 < `min_results` 时自动放行兜底
41
+ - 失败模式:域分类错误 → 兜底路径必须能救回
42
+
43
+ ### S2 条件空间前置门控
44
+ - 输入:`condition_space`(每节点已存)、`context`(调用方情境)
45
+ - 输出:通过门控的候选(**不读正文**即可判定:只用 frontmatter)
46
+ - 只前移**可判定的硬槽**:`time_window` / `observation_position` / 存在约束;语义类判定仍留 `judge_qualification`(后置,因需正文)
47
+ - 不变量:只剔除「明确不匹配」;**信息不足一律放行**(宁多勿漏)
48
+
49
+ ### S3 图扩散激活
50
+ - 输入:种子集合、`edges`(出边在 `fm.edges`;白箱 KB 的 `edges` 表按 source/target 双索引)
51
+ - 输出:激活集合 + 激活值(种子 1.0,第 n 跳 × 衰减^n)
52
+ - 不变量:扩散**不得引入未通过 S2 门控**的节点;边方向/关系类型权重可配
53
+ - 失败模式:图稀疏(实测 142 节点 / 87 边)→ 覆盖不足,必须保留域内 LIKE 兜底
54
+
55
+ ### S4 层级激活优先级
56
+ - 初始激活值加成:`anchor`/`self` > `structural` > `knowledge` > `contextual`(顺序可配)
57
+ - 不变量:只影响初始值/排序,不把不合格节点拉回
58
+
59
+ ### S5 负记忆抑制
60
+ - `rejected`/`unresolved` 命中查询 → 对与其 `edges` 相邻或词面高度重叠的正候选乘性降权(`w ← w × (1-λ)`)
61
+ - 保留现有行为:负记忆仍作为结果条目返回(便于调用方感知),但不再与正候选同权
62
+
63
+ ### S6 一致性交叉验证
64
+ - 复用 `md_cg/crosscheck.py`;对 top-k 输出 verdict 摘要,不进主排序
65
+
66
+ ## 4. 开关与回退(缺一不可)
67
+
68
+ | 开关 | 默认 | 作用 |
69
+ | --- | --- | --- |
70
+ | `MDCG_RETRIEVAL_PIPELINE` | **0** | 总开关;关 = 与现状等价(回归必须全绿) |
71
+ | `MDCG_GATE_S1_DOMAIN` | 0 | 大域收敛 |
72
+ | `MDCG_GATE_S2_COND` | 0 | 条件前置门控 |
73
+ | `MDCG_GATE_S3_SPREAD` | 0 | 图扩散(`MDCG_SPREAD_HOPS`、`MDCG_SPREAD_DECAY`) |
74
+ | `MDCG_GATE_S4_LAYER` | 0 | 层级优先级(`MDCG_LAYER_BOOST`) |
75
+ | `MDCG_GATE_S5_NEG` | 0 | 负记忆抑制(`MDCG_NEG_LAMBDA`) |
76
+
77
+ 规则:**默认关**;每阶段可单独开,便于逐项验证与归因;总开关关时 `search()` 走原路径。
78
+
79
+ ## 5. 验收判据(每阶段都要过)
80
+
81
+ 1. **等价性**:开关关 → `scripts/run_tests.py md_cg` 全绿,且返回与现状一致(快照对比);
82
+ 2. **有效性**:开关开 → `meta.scanned` 显著下降(阶段目标:S1 ≤1/10,S2 再砍,S3 只碰邻域),既有召回用例不劣化;
83
+ 3. **可审计**:`meta` 增加分阶段计数(`domains/gate_in/gate_out/spread_hops/activated/suppressed`),供编外复核端逐项核对;
84
+ 4. **落地判据不变**:内部独立复核 ACCEPT ∧ 零删除 ∧ 干净树回归绿 ∧ 逐候选可回退提交。
85
+
86
+ ## 6. 里程碑与分支纪律
87
+
88
+ - 每阶段独立分支、独立复核、独立落地;落地后在 `origin/main` 打 `core-*` 标签;
89
+ - 探索分支随任务完结即回收(≤10 条,见 `hive/interop/note-branch-discipline.md`)。
90
+
91
+ ## 7. 边界(不做的事)
92
+
93
+ - **不**用 FTS5/倒排表替代认知路径(那会让灵枢退化为普通搜索引擎,并掩盖机制失效);倒排只可作 S1/S3 之后的**候选内**加速;
94
+ - **不**改写入侧语义(只补 `big_domain` 域标签这类检索所需的最小元数据);
95
+ - **不**在默认路径上启用新行为(先 flag 化、逐项验证、再讨论默认开启)。
96
+
97
+ ## 8. 首期范围(S1 + S2)
98
+
99
+ 1. 写入侧:`add()` / `_write_node` 存 `big_domain`(内容 → `routing.big_domain_classify`);新增幂等回填器 `md_cg/backfill_bigdomain.py`(支持 `--dry-run`);
100
+ 2. 读路径:`search()` 增加 S1 收敛与 S2 门控(flag 控),输出分阶段审计计数;
101
+ 3. 测试:等价性快照 + 收敛率(`scanned` 下降)+ 召回不劣化;
102
+ 4. S3~S5 依次跟进(各自独立落地)。
@@ -0,0 +1,47 @@
1
+ # 蜂巢 M6 ingest 实施计划 v0.1
2
+
3
+ > 真源:`D:\2_ai\蜂巢记忆架构设计.md` §5(M6 规格已细化到可施工)+ §5.5 层归属纪律。
4
+ > 本计划 = 施工蓝图 + 判定单。开工依据:使用者指令(2026-09-23,P2 接线开工)。
5
+
6
+ ## 〇 条件空间声明
7
+
8
+ | 维 | 值 |
9
+ |---|---|
10
+ | 观测位置 | 主代理(CodeBuddy),融合裁决位 |
11
+ | 观测工具 | 设计稿 §5 规格 + `md_cg/sources.py` 既有管线(Source/Ingestor/mine_fix_pairs)+ hive/jobs 真实数据面 |
12
+ | 时间窗口 | 2026-09-23 批次 4 |
13
+ | 存在约束 | 复用既有管线(不重造 watermark);ingest 产物只落 contextual(§5.5 硬性);knowledge 层零污染 |
14
+
15
+ ## 一、任务分解与判定单
16
+
17
+ ### T1 HiveJobsSource(sources.py 注册蜂巢事件源)
18
+
19
+ - **依据**:§5.1 事件源注册表(source_id=hive_jobs;progress.jsonl 五类条目 + result.json 终态权威确认;job_id 名升序=时间序)。
20
+ - **条件**:复用 `Source` 基类协议(events() → {t, seq, role, text, session, cwd},t=epoch 秒);session=`hive:<job_id>`(ingest 去重键)。
21
+ - **错后**:progress 解析失败跳过该行并计入 skipped(不终杀批次);result.json 缺失任务按 progress 现状处理(不伪造终态)。
22
+ - **裁决**:ACCEPT。
23
+ - **映射**(§5.3):start→任务开始事件|tool→跳过(防流水账爆炸)|final/handoff/error→事件|result 终态→权威确认(progress 缺 final 时补位)。error 终态 text 前缀「任务失败」保证 fix-pair 启发式命中。
24
+
25
+ ### T2 层归属与密级(§5.5 硬性)
26
+
27
+ - **依据**:ingest 产物只落 contextual;valid_from=事件时间;密级默认 internal。
28
+ - **条件**:`Ingestor(cg, layer="contextual")`;knowledge 层节点数在 ingest 前后不变(反向对照判据)。
29
+ - **错后**:error 节点建议 private 的 per-event 密级——Ingestor 现不支持事件级密级,**DEFER**(诚实边界,不硬凑)。
30
+ - **裁决**:ACCEPT(含一项 DEFER)。
31
+
32
+ ### T3 验收回放(§5.6 四条)
33
+
34
+ 1. 失败→重试成功任务:contextual 出现事件节点 + fix-pair 产出 + **knowledge 层节点数不变**;
35
+ 2. 中断重跑:watermark 断点续跑,无重复节点;
36
+ 3. 强杀任务:result.json 终态补位;
37
+ 4. 真实 jobs 目录回放(`hive/jobs/` 现存 50+ 任务即真实语料)。
38
+
39
+ ### T4 MCP/CLI 暴露口
40
+
41
+ - **裁决**:DEFER 到下一小批——先以 Python API + 测试闭环(`Ingestor(cg, layer="contextual").ingest(HiveJobsSource(root))`),MCP `ingest` 面接入需动 `mcp_server` 工具 schema(独立改动面),不与本批耦合。
42
+
43
+ ## 二、验证判据
44
+
45
+ - 单测:事件映射/终态补位/watermark 幂等/contextual-only(新建 `md_cg/test_hive_ingest.py`);
46
+ - 真实回放:本机 `hive/jobs/`(50+ 任务含 12 error)全量 ingest dry-run 与实跑对照;
47
+ - gate 全绿 + 提交点(回滚边界)。