@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,143 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """灵枢 · 检索读缓存(批次 21,issue #31 P2)——MdStore 理论落地认知图检索。
4
+
5
+ 理论早已有之(使用者裁定 2026-09-23 指认):智慧之书知识层的 `MdStore`
6
+ (whitebox_kb/wisdom/md_store.py)把 md 语料**懒装载为内存图常驻**
7
+ (`{id: STNode}` + 双向边索引),写方落盘后显式 `reload()` 丢弃快照——
8
+ 检索读面零磁盘 I/O。认知图检索面(`MdCGOS._read_many` → `_read`)此前
9
+ 每查询对每个候选 open+read+parse 一遍(567 池实测 572 次 open,~70-86%
10
+ 耗时,~230µs/节点线性退化)——「理论没有落地」。本模块即落地。
11
+
12
+ 与 `install_read_cache`(eval_common.py,benchmark 专用)的差异:
13
+ 1. **写失效哨兵(脏集精确失效,缺陷迭代第 14 轮)**:缓存条目携带
14
+ 缓存时的 `write_gen`,新鲜度按 `_DirtyDict.path_gen[path]`(该 path
15
+ 最近标脏代际)与 `broad_gen`(tombstone/无 path 可辨变更的整池兜底)
16
+ 判定——**写谁失效谁**,单节点写不再使全部条目同时 miss(此前整池
17
+ 共用一个全局代际,10k 池写读交替 38.4× 退化、线性于 N)。所有写路径
18
+ 必然标脏(flush 依赖 `_dirty`,add/_sync_edge_entry/负记忆化……无一
19
+ 例外),标脏即 `_dirty[nid]=entry`(带 path)——簿记在 _DirtyDict
20
+ 钩子内自动完成,写面零挂载点,天然覆盖未来新增写路径(不会有
21
+ 「漏挂失效」型陈旧读)。对 path-only 无失效的朴素实现能红(外部报告
22
+ 实测的陈旧读场景)。
23
+ 语义与 MdStore 的「写方落盘后 reload」同构,但**懒清**:检索高频写少,
24
+ 写后首次检索只重装被写节点,不必写时同步清。
25
+ 2. 缓存**解析产物** `(fm, content)`(benchmark 版只缓存原文,parse 仍逐次),
26
+ **并缓存文档侧检索派生物** `_doc_norm_bigrams`(归一化 bigram——批次 21
27
+ 实测本机热点 88% 在此而非 I/O:内容不变则派生物不变,随读缓存常驻;
28
+ Rust `load_docs` 预计算 stripped/db_len 同款理论);
29
+ 3. 进程内一致性边界(与 MdStore 相同的诚实边界):跨进程/外部直接改写
30
+ md 文件不保证可见——认知图的多进程形态(每智能体一进程)各持快照。
31
+
32
+ 开关:默认**开**(issue #31 后续——生产检索入口 MdCGOS.search 默认态每查询
33
+ 全池 open+realpath+parse,3300 池实测中位 ~602ms/查询、O(n) 线性;读缓存
34
+ 早已实现却默认关,生产恒不装配,故默认翻转);`MDCG_READ_CACHE=0` 显式
35
+ 关闭(opt-out 零变更退出阀——跨进程改写 md 文件须本进程立即可见的部署,
36
+ 或内存受限场景,可一关回到逐次读盘的旧行为)。
37
+ """
38
+ import os
39
+
40
+ # 生效条件:无 required 形参,锚定环境变量名 MDCG_READ_CACHE;未设或值为 "1" 时返回 True(默认开,issue #31 生产 O(n) 全池扫描修复),显式设为其它值(含 "0")时返回 False。
41
+ def enabled() -> bool:
42
+ """读缓存开关(默认开;=0 显式关闭——opt-out 退出阀)。"""
43
+ return os.environ.get("MDCG_READ_CACHE", "1") == "1"
44
+
45
+
46
+ # 生效条件:cg._read_uncached 属性存在时返回其以 entry 调用的结果(穿透读缓存的盘上真值直读),否则返回 cg._read(entry)(未装缓存时两者等价,零变更)。
47
+ def direct_read(cg, entry):
48
+ """治理/写前重查专用直读——穿透读缓存,读盘上当前真值。
49
+
50
+ 读缓存默认开(issue #31 后续)后 `cg._read` 是进程内快照;治理面的
51
+ 「写前重查」「回滚比对」语义上要求盘上真值——预演与执行之间节点
52
+ 可能被他人/外部进程改写(test_mr_m4 D12「被人改动→不覆盖」形态:
53
+ path-only 命中会让重查读到预演时装入的旧值,漏判 drift)。
54
+ """
55
+ fn = getattr(cg, "_read_uncached", None)
56
+ if fn is None:
57
+ return cg._read(entry)
58
+ return fn(entry)
59
+
60
+
61
+ # 生效条件:cg._read 可调用时以 (path → (缓存时 write_gen, 解析产物)) 常驻字典包装之——_dirty 带 path_gen 簿记(_DirtyDict 形态)时命中条件为「该 path 最近标脏代际(path_gen)与 broad_gen 均 ≤ 缓存时 write_gen」(脏集精确失效:单节点写只失效该节点),否则回落整代际相等校验(旧口径,非 _DirtyDict 防御);cg._doc_norm_bigrams 亦存在时同款包装其派生物(_score 热点:文档侧归一化 bigram 只依赖 content,随读缓存一并常驻);包装后 cg._read/_doc_norm_bigrams 为包装函数、cg._read_cache/_norm_bigrams_cache 为缓存字典、cg._read_uncached 为未被包装的原始 _read(direct_read 的真源);返回缓存字典。
62
+ def install(cg):
63
+ """把 `cg._read`(与派生物钩子)包成**脏集精确失效**的常驻缓存。
64
+
65
+ 失效口径(缺陷迭代第 14 轮,high):此前哨兵取全局单调 write_gen——
66
+ 整池共用一个代际值,任意一次单节点写使**全部**条目同时 miss,下一条
67
+ 查询全池重装(10k 池写读交替 3rep 中位 1677.6ms vs 稳态 43.7ms,
68
+ 38.4× 退化、线性于 N;生产暴露面:mcp_server 读 op=read 与写 op=write
69
+ 同一常驻实例)。`_DirtyDict` 现簿记 `path_gen`(path → 最近标脏时的
70
+ write_gen)与 `broad_gen`(无 path 可辨变更的整池兜底代际),本包装
71
+ 据此按 path 判新鲜:**写谁失效谁**,其余条目原对象复用。写路径不必
72
+ 再改一处(标脏即 `_dirty[nid]=entry` 带 path,簿记在 _DirtyDict 钩子
73
+ 内自动完成)。
74
+ """
75
+ cache = {}
76
+ # 重复 install(如显式再调)不叠加包装层,_read_uncached 恒指真原始。
77
+ orig = getattr(cg, "_read_uncached", None) or cg._read
78
+ cg._read_uncached = orig
79
+
80
+ def _fresh(p, hit):
81
+ """hit=(缓存时 write_gen, val) 对 path p 是否仍新鲜(不陈旧)。"""
82
+ dirty = cg._dirty
83
+ pg = getattr(dirty, "path_gen", None)
84
+ if pg is None:
85
+ # D-4 修复(批次 23 / v20):代际改读 _DirtyDict.write_gen(单调、
86
+ # 永不回退)——len(_dirty) 在 flush 清零后可被新写入凑回旧值,代际
87
+ # 巧合回退 → 陈旧读(v20_d4_repro stale=True 实测)。防御回落兼容
88
+ # 非 _DirtyDict 形态(整代际相等,旧口径)。
89
+ return hit[0] == getattr(dirty, "write_gen", len(dirty))
90
+ # 脏集精确失效(第 14 轮):该 path 最近标脏代际 ≤ 缓存代际即新鲜
91
+ # ——单节点写只失效该节点;broad_gen(tombstone/无 path 可辨变更)
92
+ # 高于缓存代际时整池保守失效(与旧整代际口径等价的安全兜底)。
93
+ # flush 的 clear() 不推进 broad_gen:flush 只落索引派生物,节点
94
+ # 文件变更已在各写路径 _dirty[nid]=entry(带 path)时精确失效,
95
+ # 且生产写路径每次写后 flush(writepipe._commit_visibility)——
96
+ # 整池失效会让精确失效在生产恒不生效;rebuild_index 收尾走
97
+ # clear(broad=True) 推进 broad_gen(盘面重扫口径:直写文件 +
98
+ # rebuild 收尾的写方靠它对读缓存可见)。
99
+ return (pg.get(p, 0) <= hit[0]
100
+ and dirty.broad_gen <= hit[0])
101
+
102
+ def _cached(entry):
103
+ p = entry["path"]
104
+ gen = getattr(cg._dirty, "write_gen", len(cg._dirty))
105
+ hit = cache.get(p)
106
+ if hit is not None and _fresh(p, hit):
107
+ return hit[1]
108
+ val = orig(entry)
109
+ cache[p] = (gen, val)
110
+ return val
111
+
112
+ cg._read = _cached
113
+ cg._read_cache = cache
114
+
115
+ nb_cache = {}
116
+ if hasattr(cg, "_doc_norm_bigrams"):
117
+ orig_nb = cg._doc_norm_bigrams
118
+
119
+ def _cached_nb(entry, c):
120
+ p = entry["path"]
121
+ gen = getattr(cg._dirty, "write_gen", len(cg._dirty))
122
+ hit = nb_cache.get(p)
123
+ if hit is not None and _fresh(p, hit):
124
+ return hit[1]
125
+ val = orig_nb(entry, c)
126
+ nb_cache[p] = (gen, val)
127
+ return val
128
+
129
+ cg._doc_norm_bigrams = _cached_nb
130
+ cg._norm_bigrams_cache = nb_cache
131
+ return cache
132
+
133
+
134
+ # 生效条件:cg._read_cache 与 cg._norm_bigrams_cache 均清空(写侧显式兜底;哨兵之外的强制手段),返回清空的条目总数;无缓存时返回 0。
135
+ def clear(cg) -> int:
136
+ """强制清空(外部批量改写文件后可手动调;正常写路径无需——哨兵自动失效)。"""
137
+ n = 0
138
+ for attr in ("_read_cache", "_norm_bigrams_cache"):
139
+ c = getattr(cg, attr, None)
140
+ if c:
141
+ n += len(c)
142
+ c.clear()
143
+ return n
@@ -0,0 +1,228 @@
1
+ # -*- coding: utf-8 -*-
2
+ """启动对账 reconcile v0(v0.3 T9 自稳定定理落地,落地清单 P0-3)。
3
+
4
+ **定位(与 twophase 的分工)**:`twophase.reconcile` 是**写账本清账**——只回答
5
+ 「有 intent 无 outcome 的那笔写入到底落盘没有」;本模块是它之上的**全量 diff
6
+ 对账**:索引(派生态)vs 盘面真源(节点 .md)逐条比对,把「索引与盘面背离」
7
+ 收敛回自稳定合法态(T9:任意瞬态扰动后仅凭真源与协议在有限步内回到合法态)。
8
+
9
+ **三类 diff(v0 判据面)**:
10
+ 1. **多索引条目**(幽灵):索引有条目、盘面无其文件(或该文件已归属他 id)
11
+ → 摘除条目(tombstone,与 `_unstage` 同口径);
12
+ 2. **缺索引条目**:盘面有节点文件、索引无条目(非合作写者/日志丢失)
13
+ → 以 `_node_entry` 重建条目补入(与 rebuild_index 逐字段同源);
14
+ 3. **内容漂移**:条目 path 与盘面落点不符、或 content_hash 与盘面重算不符
15
+ → 以盘面为真源重建条目(**增量 upsert**,不触发全量 rebuild)。
16
+
17
+ **T9 边界(结构合法 ≠ 内容正确)**:真源自身损坏——读失败(OSError,含
18
+ Windows 上 Defender/索引器持句柄的瞬态形态)、解码失败(非 UTF-8 字节)、
19
+ frontmatter 结构非法(`---` 无闭合)——**一律不自动改写**:既不据损坏文件
20
+ 建条目,也不因「读不出」摘除既有条目(瞬态读失败若被当「文件没了」就会把
21
+ 一次性抖动放大成索引面永久损伤,与 N134 同型——宁可漏修,不可误伤),只
22
+ stderr 告警 + `_reconcile.jsonl` 留痕,是否处置交人工/上层裁决。
23
+
24
+ **耗时可控**:清单 diff 是 O(n) 索引操作(os.walk 计数级);哈希核验对每个
25
+ 盘面 .md 恰一次顺序读 + 轻量 frontmatter 切分(`nodefile.loads` 是纯字符串
26
+ 切分,无 YAML/全文解析、无检索打分/嵌入)——不是 `rebuild_index` 式全量重扫,
27
+ 修复只对漂移条目做定向 upsert。整体 O(n);`MDCG_RECONCILE=0` 一键关闭
28
+ (缺省开)。**告警口径**:diff 非空才写 stderr 与留痕,干净库零输出零写盘。
29
+
30
+ **诚实边界(v0 不覆盖面)**:
31
+ · frontmatter **字段值**漂移(如盘上 importance 被直改、索引仍旧值)不在
32
+ v0 判据面——索引没有 fm 指纹可比(content_hash 刻意不含 frontmatter,见
33
+ nodefile.content_hash 文档串),该面仍由 rebuild_index 全量兜底(v1 候选);
34
+ · 对账是**增益**不是服务前提:本模块任何异常都不得阻塞启动(调用方
35
+ mcp_server.main 以 try/except 包裹,与两段式对账同风格)。
36
+ """
37
+ import os
38
+ import time
39
+
40
+ from . import nodefile
41
+ from .fsutil import append_jsonl
42
+
43
+ #: 关闭开关:仅当 `MDCG_RECONCILE` 的 strip 后取值**恰好为 "0"** 时关闭
44
+ #: (缺省开;其它取值一律视为开——开关只回答「关没关」,不承担配置语义)。
45
+ ENV_SWITCH = "MDCG_RECONCILE"
46
+
47
+ #: 留痕文件(root 下,append-only,与 `_write_2pc.jsonl` / `_protected_audit.jsonl`
48
+ #: 同一「独立审计文件」惯例;**仅在 diff 非空时写入**,干净库零写盘)。
49
+ TRACE_FILE = "_reconcile.jsonl"
50
+
51
+ #: 留痕/告警里每类异常的采样上限(防大库首轮修复把日志/告警撑成洪水)。
52
+ SAMPLE_CAP = 20
53
+
54
+
55
+ # 生效条件:读 MDCG_RECONCILE 环境变量(未设按空串),strip 后等于 "0" 返回 False,其余(含未设)返回 True。
56
+ def enabled() -> bool:
57
+ """对账开关(缺省开;`MDCG_RECONCILE=0` 关闭)。"""
58
+ return os.environ.get(ENV_SWITCH, "").strip() != "0"
59
+
60
+
61
+ # 生效条件:给定 cg 且其 root 属性可参与 os.path.join 时,恒返回 os.path.join(cg.root, TRACE_FILE),无分支与早退。
62
+ def trace_path(cg) -> str:
63
+ return os.path.join(cg.root, TRACE_FILE)
64
+
65
+
66
+ # 生效条件:text 为假值(None/"")时按空串处理,返回去尾换行后的字符串(仅剥 "\n")。
67
+ def _norm(text: str) -> str:
68
+ return (text or "").rstrip("\n")
69
+
70
+
71
+ # 生效条件:content(nodefile.loads 切出的盘面正文,含尾换行)非 None 时返回 (content_hash(content), content_hash(_norm(content))) 二元组——**双形态接受集**:add 写路径入索引的指纹按封存原文(mdcg.py `_stage` 面,正文不带尾换行时等于 norm 形态),rebuild 重建路径按 loads 读回原文(带尾换行)——两 producers 各自稳定,diff 两侧都认,否则无尾换行节点会在每次启动被误报漂移(假阳性洪水,twophase._norm 文档串同款教训)。
72
+ def _disk_hashes(content: str) -> tuple:
73
+ raw = nodefile.content_hash(content or "")
74
+ return raw, nodefile.content_hash(_norm(content))
75
+
76
+
77
+ # 生效条件:遍历 mdcg.LAYERS 各层目录树(os.walk,与 _scan_nodes 同序同口径),逐个 .md 读取并 nodefile.loads 切分;成功解析的以 nid(fm.get("id") 或文件名去 .md)登入 by_nid(同 nid 后到覆盖,与 _scan_nodes dict 覆盖语义一致)并登记 path_owner[relpath]=nid;读失败(OSError)/解码失败(UnicodeDecodeError)/frontmatter 无闭合(fm 为空且原文以 "---\n" 开头)的登入 problems(kind=read_error/decode_error/frontmatter_unterminated,附 relpath),不进 by_nid 与 path_owner;返回 (by_nid, path_owner, problems)。
78
+ def _scan_disk(cg):
79
+ by_nid = {}
80
+ path_owner = {}
81
+ problems = []
82
+ for layer in _layers():
83
+ base = os.path.join(cg.root, layer)
84
+ for dirpath, _dirs, files in os.walk(base):
85
+ for fn in files:
86
+ if not fn.endswith(".md"):
87
+ continue
88
+ p = os.path.join(dirpath, fn)
89
+ rel = os.path.relpath(p, cg.root).replace("\\", "/")
90
+ try:
91
+ with open(p, encoding="utf-8") as f:
92
+ text = f.read()
93
+ except OSError as exc: # 瞬态/持久读失败:不猜测
94
+ problems.append({"path": rel, "kind": "read_error",
95
+ "detail": str(exc)[:120]})
96
+ continue
97
+ except UnicodeDecodeError as exc: # 非 UTF-8 字节:真源损坏
98
+ problems.append({"path": rel, "kind": "decode_error",
99
+ "detail": str(exc)[:120]})
100
+ continue
101
+ fm, content = nodefile.loads(text)
102
+ if not fm and text.startswith("---\n"):
103
+ # 结构非法:有 frontmatter 起始符但无闭合——loads 无法切出
104
+ # 字段(正常节点必有 frontmatter;无 frontmatter 的裸文件
105
+ # 按 _scan_nodes 旧例仍以文件名登入,不判损坏)。
106
+ problems.append({"path": rel,
107
+ "kind": "frontmatter_unterminated",
108
+ "detail": "--- 无闭合"})
109
+ continue
110
+ nid = fm.get("id") or fn[:-3]
111
+ by_nid[nid] = {"path": rel, "abs": p, "layer": layer,
112
+ "fm": fm, "content": content}
113
+ path_owner[rel] = nid
114
+ return by_nid, path_owner, problems
115
+
116
+
117
+ # 生效条件:延迟导入 mdcg 取模块级 LAYERS 并返回(与 _scan_nodes 的遍历集合同一真源;函数内导入避免 mdcg ↔ reconcile 模块环)。
118
+ def _layers():
119
+ from .mdcg import LAYERS
120
+ return LAYERS
121
+
122
+
123
+ # 生效条件:把单条异常以 JSONL 追加进 trace_path(cg)(best-effort:OSError 吞掉不抛——留痕是增益,不得反过来炸启动序列),无返回值。
124
+ def _trace(cg, record: dict) -> None:
125
+ try:
126
+ append_jsonl(trace_path(cg), record)
127
+ except OSError:
128
+ pass
129
+
130
+
131
+ # 生效条件:向 stderr 写一行告警(try/except 全包——stderr 为 None/closed/断管时静默放弃,N136 教训:告警通道失效不得伪装成新异常炸穿调用方),无返回值。
132
+ def _warn(msg: str) -> None:
133
+ try:
134
+ import sys
135
+ sys.stderr.write("[mdcg-reconcile] %s\n" % msg)
136
+ except Exception: # noqa: BLE001 —— 告警失效不追责
137
+ pass
138
+
139
+
140
+ # 生效条件:cg.index 须含 "nodes" 映射;enabled() 为 False 时直接返回 {"skipped": True, "applied": False} 不触盘;否则 _scan_disk 后做三类 diff:①nid 不在盘面且其 entry.path 既非问题文件也非无主——判幽灵(apply 时逐条 _unstage);②盘面 nid 不在索引——判缺失(apply 时以 cg._node_entry 构条目 _stage);③两上面向交的 nid 中 entry.path 与盘面落点不符或 content_hash 不在盘面双形态接受集——判漂移(apply 时以盘面重建条目 _stage);apply 为真时收尾 cg.flush() 持久化;diff 非空时写 stderr 告警并 _trace 留痕(各类采样 ≤SAMPLE_CAP);返回含 skipped/applied/scanned/entries/ghost_entries/missing_entries/hash_drift/unwritable_source/repaired 的报告 dict,applied=bool(apply)。
141
+ def reconcile_state(cg, apply: bool = True) -> dict:
142
+ """索引(派生态)vs 盘面真源的三类 diff 对账(reconcile v0 主入口)。
143
+
144
+ `apply=False` 为 dry-run(只 diff 报告,不修复、不写盘)。返回报告:
145
+ `{"skipped","applied","scanned","entries","ghost_entries",
146
+ "missing_entries","hash_drift","unwritable_source","repaired"}`。
147
+ 幂等:修复后的索引面与盘面一致,二次扫描 diff 为空、零输出零写盘。
148
+ """
149
+ if not enabled():
150
+ return {"skipped": True, "applied": False}
151
+ index_nodes = cg.index.get("nodes") or {}
152
+ by_nid, path_owner, problems = _scan_disk(cg)
153
+
154
+ problem_paths = {p["path"] for p in problems}
155
+ ghost, missing, drift = [], [], []
156
+ kept_unreadable = [] # 条目在、真源暂不可读——保留只告警
157
+
158
+ # ①③ 以索引为基准走一遍:多索引条目 + 内容漂移
159
+ for nid, entry in index_nodes.items():
160
+ if nid not in by_nid:
161
+ ep = entry.get("path") or ""
162
+ if ep in problem_paths:
163
+ kept_unreadable.append(nid) # 真源读不出 ≠ 文件没了:不摘条目
164
+ else:
165
+ ghost.append(nid) # 盘面无其文件(或已归属他 id)
166
+ continue
167
+ d = by_nid[nid]
168
+ h_raw, h_norm = _disk_hashes(d["content"])
169
+ if entry.get("path") != d["path"] \
170
+ or entry.get("content_hash") not in (h_raw, h_norm):
171
+ drift.append(nid)
172
+
173
+ # ② 以盘面为基准走一遍:缺索引条目(仅成功解析的真源参与)
174
+ for nid in by_nid:
175
+ if nid not in index_nodes:
176
+ missing.append(nid)
177
+
178
+ repaired = {"unstaged": 0, "staged": 0}
179
+ if apply:
180
+ for nid in ghost:
181
+ cg._unstage(nid) # tombstone + 立即持久化
182
+ repaired["unstaged"] += 1
183
+ for nid in missing + drift:
184
+ d = by_nid[nid]
185
+ cg._stage(nid, cg._node_entry(d["abs"], d["layer"],
186
+ d["fm"], d["content"]))
187
+ repaired["staged"] += 1
188
+ if repaired["unstaged"] or repaired["staged"]:
189
+ cg.flush() # 启动期一次收尾落账(不赖 autoflush)
190
+
191
+ rep = {
192
+ "skipped": False,
193
+ "applied": bool(apply),
194
+ "scanned": len(by_nid) + len(problems),
195
+ "entries": len(index_nodes),
196
+ "ghost_entries": ghost,
197
+ "missing_entries": missing,
198
+ "hash_drift": drift,
199
+ "unwritable_source": problems,
200
+ "repaired": repaired,
201
+ }
202
+ if kept_unreadable:
203
+ rep["kept_unreadable"] = kept_unreadable
204
+
205
+ # 告警 + 留痕(diff 非空才发声;干净库零输出零写盘)
206
+ if ghost or missing or drift or problems or kept_unreadable:
207
+ _warn("启动对账 v0: 幽灵条目=%s 缺失条目=%s 哈希漂移=%s "
208
+ "真源损坏/不可读=%s(%s)"
209
+ % (len(ghost), len(missing), len(drift), len(problems),
210
+ "已按盘面增量修复索引面" if apply else "dry-run 未修复"))
211
+ for nid in ghost[:SAMPLE_CAP]:
212
+ _warn(" 幽灵条目(盘面无文件→摘除): %s" % (nid,))
213
+ for nid in kept_unreadable[:SAMPLE_CAP]:
214
+ _warn(" 条目保留(真源暂不可读,不猜测不摘除): %s" % (nid,))
215
+ for pr in problems[:SAMPLE_CAP]:
216
+ _warn(" 真源损坏/不可读(只告警不改写——T9 边界): %s [%s]"
217
+ % (pr["path"], pr["kind"]))
218
+ _trace(cg, {
219
+ "t": time.time(), "op": "reconcile_v0", "apply": bool(apply),
220
+ "scanned": rep["scanned"], "entries": rep["entries"],
221
+ "ghost": ghost[:SAMPLE_CAP], "ghost_n": len(ghost),
222
+ "missing": missing[:SAMPLE_CAP], "missing_n": len(missing),
223
+ "drift": drift[:SAMPLE_CAP], "drift_n": len(drift),
224
+ "problems": problems[:SAMPLE_CAP], "problems_n": len(problems),
225
+ "kept_unreadable": kept_unreadable[:SAMPLE_CAP],
226
+ "repaired": repaired,
227
+ })
228
+ return rep