@furongjun1999/dsh-memory 0.4.8 → 0.4.9

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 (231) hide show
  1. package/README.md +54 -26
  2. package/codebuddy/CODEBUDDY.md +196 -195
  3. package/codebuddy/README.md +13 -1
  4. package/codebuddy/mcp.json +9 -0
  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 -0
  6. package/docs/README.md +1 -1
  7. package/docs/discipline/harnesses.yaml +18 -7
  8. package/docs/discipline/templates/full.md.tmpl +4 -3
  9. package/docs/experiments/linkref_backfill/candidates_20260917.json +726 -0
  10. package/docs/experiments/linkref_backfill/candidates_internal_20260917.json +602 -0
  11. package/docs/experiments/linkref_backfill/candidates_internal_v2.json +603 -0
  12. package/docs/experiments/linkref_backfill/candidates_secret_20260917.json +884 -0
  13. package/docs/experiments/linkref_backfill/candidates_secret_v2.json +789 -0
  14. package/docs/hive//345/244/232/347/253/257harness/351/200/232/344/277/241/345/245/221/347/272/246_v0.1.md +42 -0
  15. 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 -0
  16. 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 -0
  17. package/docs/hive//347/234/237/345/256/236/345/272/223/347/253/257/345/210/260/347/253/257/345/256/236/346/265/213_S1b/344/270/216/345/217/254/345/233/236/346/235/203/350/241/241_v0.1.md +57 -0
  18. package/docs/hive//347/234/237/345/256/236/345/272/223/347/253/257/345/210/260/347/253/257/345/256/236/346/265/213_S7/345/200/222/346/216/222/345/200/231/351/200/211/345/261/202_v0.1.md +126 -0
  19. 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 +503 -0
  20. package/docs/mdcg/D_meta_/345/267/245/347/250/213/345/214/226/346/226/271/346/241/210_v0.2.md +216 -0
  21. package/docs/mdcg/README/350/257/246/347/273/206/347/211/210_v0.4.5.md +631 -625
  22. package/docs/mdcg//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_/345/245/221/347/272/246_v0.1.md +82 -0
  23. 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 -0
  24. 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 +47 -45
  25. package/docs/mdcg//345/255/220/344/273/243/347/220/206/351/205/215/347/275/256/346/240/207/345/207/{206_v0.4.md → 206_v0.5.md} +92 -4
  26. 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 -0
  27. package/docs/mdcg//347/216/257/344/272/214_/347/231/275/347/256/261/345/241/253/345/205/205/346/265/201/346/260/264/347/272/277_v0.1.md +31 -0
  28. package/docs/mdcg//350/267/250/347/253/257/351/252/214/350/257/201/344/270/216/345/220/214/346/255/245/345/215/217/350/256/256_v0.1.md +93 -0
  29. 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 +2 -2
  30. 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 +3 -3
  31. 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 +2 -2
  32. 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 +434 -433
  33. package/docs//347/201/265/346/236/242/350/207/252/346/210/221/346/224/271/350/277/233/345/267/245/344/275/234/350/256/241/345/210/222_/345/244/226/351/203/250/347/240/224/347/251/266/347/263/273/345/210/227/345/220/270/346/224/266_v1_20260919.md +286 -0
  34. package/dsh/README.md +33 -0
  35. package/dsh/cordis.yml.example +13 -7
  36. package/dsh/hive-mcp-probe.mjs +94 -0
  37. package/dsh/hive-mcp.example.yml +62 -0
  38. package/dsh/update-lingshu.bat +11 -0
  39. package/dsh/update-lingshu.ps1 +337 -0
  40. package/lib/hooks.d.ts +3 -0
  41. package/lib/hooks.js +17 -23
  42. package/lib/index.d.ts +4 -2
  43. package/lib/index.js +29 -6
  44. package/lib/lib/datapath.d.ts +76 -1
  45. package/lib/lib/datapath.js +199 -13
  46. package/lib/lib/mdcg_client.d.ts +6 -3
  47. package/lib/lib/mdcg_client.js +6 -5
  48. package/lib/lib/mutual.js +4 -4
  49. package/lib/lib/token_store.js +4 -5
  50. package/md_cg/audit.py +17 -2
  51. package/md_cg/autonomy.py +86 -15
  52. package/md_cg/backfill.py +36 -1
  53. package/md_cg/backfill_bigdomain.py +34 -0
  54. package/md_cg/bench6_arms.py +28 -1
  55. package/md_cg/bench6_common.py +10 -1
  56. package/md_cg/bench6_competitors.py +6 -1
  57. package/md_cg/bench_axis_domain.py +9 -1
  58. package/md_cg/bench_blind_comp.py +7 -1
  59. package/md_cg/bench_en_atoms_public.py +9 -0
  60. package/md_cg/bench_governance.py +348 -0
  61. package/md_cg/bench_lme_zh.py +16 -1
  62. package/md_cg/bench_locomo.py +2 -1
  63. package/md_cg/bench_locomo_zh.py +16 -1
  64. package/md_cg/bench_locomo_zh_public.py +4 -1
  65. package/md_cg/bench_longmem.py +2 -1
  66. package/md_cg/bench_membench.py +27 -1
  67. package/md_cg/bench_p0.py +4 -1
  68. package/md_cg/bench_progressive.py +13 -1
  69. package/md_cg/bench_role_views.py +238 -0
  70. package/md_cg/bench_task_ab.py +8 -1
  71. package/md_cg/bench_task_ab_llm.py +13 -1
  72. package/md_cg/bench_unified_en.py +6 -1
  73. package/md_cg/bench_zh_mad.py +20 -1
  74. package/md_cg/blindspot_tickets.py +123 -0
  75. package/md_cg/branches.py +12 -1
  76. package/md_cg/build_postings.py +73 -0
  77. package/md_cg/ccgc.py +67 -2
  78. package/md_cg/census.py +5 -1
  79. package/md_cg/chain.py +24 -3
  80. package/md_cg/codeindex.py +134 -17
  81. package/md_cg/coldverify.py +265 -0
  82. package/md_cg/comment_gate.py +338 -0
  83. package/md_cg/cond_compose.py +190 -0
  84. package/md_cg/cond_facts.py +155 -0
  85. package/md_cg/cond_template.json +107 -0
  86. package/md_cg/condition_anchor.py +143 -0
  87. package/md_cg/conformance.py +69 -4
  88. package/md_cg/consistency.py +24 -1
  89. package/md_cg/consolidate.py +53 -2
  90. package/md_cg/corpus.py +4 -0
  91. package/md_cg/crosscheck.py +42 -2
  92. package/md_cg/crypto.py +35 -1
  93. package/md_cg/d_meta.py +310 -0
  94. package/md_cg/datapath.py +201 -26
  95. package/md_cg/docindex.py +122 -1
  96. package/md_cg/eval_common.py +29 -1
  97. package/md_cg/evidence.py +27 -1
  98. package/md_cg/evolution.py +21 -1
  99. package/md_cg/export.py +11 -1
  100. package/md_cg/forgetting.py +23 -1
  101. package/md_cg/fsutil.py +18 -1
  102. package/md_cg/hotcache.py +214 -0
  103. package/md_cg/hyperedge.py +251 -0
  104. package/md_cg/identity.py +18 -1
  105. package/md_cg/insight.py +17 -1
  106. package/md_cg/lexicon/build_cedict_en_zh.py +9 -0
  107. package/md_cg/lexicon/build_standard_en.py +171 -168
  108. package/md_cg/lexicon/expand_en_zh.py +6 -0
  109. package/md_cg/lifecycle.py +12 -1
  110. package/md_cg/linkref.py +281 -0
  111. package/md_cg/links.py +29 -1
  112. package/md_cg/mcp_server.py +362 -43
  113. package/md_cg/md_whitebox.py +53 -1
  114. package/md_cg/mdcg.py +1003 -27
  115. package/md_cg/mdcos.py +558 -36
  116. package/md_cg/metacognition.py +37 -2
  117. package/md_cg/migrate.py +4 -0
  118. package/md_cg/migrate_aeis.py +221 -213
  119. package/md_cg/migrate_roleplay.py +8 -0
  120. package/md_cg/migrate_wisdom_graph.py +14 -1
  121. package/md_cg/mreview/__main__.py +3 -0
  122. package/md_cg/mreview/bundle.py +8 -0
  123. package/md_cg/mreview/candidates.py +9 -0
  124. package/md_cg/mreview/govern.py +21 -1
  125. package/md_cg/mreview/locate.py +34 -0
  126. package/md_cg/mreview/pipeline.py +29 -1
  127. package/md_cg/mreview/ruleset.py +16 -1
  128. package/md_cg/nodefile.py +233 -3
  129. package/md_cg/pooling.py +23 -1
  130. package/md_cg/postings.py +298 -0
  131. package/md_cg/predict.py +89 -9
  132. package/md_cg/progressive.py +3 -0
  133. package/md_cg/protect.py +14 -1
  134. package/md_cg/protocol.py +372 -0
  135. package/md_cg/provenance.py +262 -0
  136. package/md_cg/reach.py +453 -0
  137. package/md_cg/refindex.py +47 -2
  138. package/md_cg/refine.py +20 -1
  139. package/md_cg/roleviews.py +89 -0
  140. package/md_cg/routing.py +76 -0
  141. package/md_cg/scrub.py +63 -2
  142. package/md_cg/security.py +26 -1
  143. package/md_cg/self_state.py +64 -1
  144. package/md_cg/selfreport.py +151 -0
  145. package/md_cg/semantic/canonical.py +5 -0
  146. package/md_cg/semantic/en_normalizer.py +364 -355
  147. package/md_cg/semantic/zh_en_atoms.py +139 -136
  148. package/md_cg/signer.py +41 -1
  149. package/md_cg/sources.py +583 -547
  150. package/md_cg/statushdr.py +179 -0
  151. package/md_cg/stg.py +59 -18
  152. package/md_cg/subgraph.py +23 -0
  153. package/md_cg/sustain.py +56 -1
  154. package/md_cg/tasks.py +26 -2
  155. package/md_cg/test_autonomy.py +26 -0
  156. package/md_cg/test_bench_governance.py +102 -0
  157. package/md_cg/test_blindspot_tickets.py +166 -0
  158. package/md_cg/test_ccgc.py +10 -0
  159. package/md_cg/test_codeindex.py +338 -0
  160. package/md_cg/test_comment_gate.py +187 -0
  161. package/md_cg/test_cond_compose_anchors.py +76 -0
  162. package/md_cg/test_condition_anchor.py +82 -0
  163. package/md_cg/test_d_meta.py +412 -0
  164. package/md_cg/test_datapath_root.py +188 -0
  165. package/md_cg/test_gain_gate.py +47 -1
  166. package/md_cg/test_hot_cold.py +187 -0
  167. package/md_cg/test_hyperedge.py +245 -0
  168. package/md_cg/test_linkref.py +306 -0
  169. package/md_cg/test_md_access_parity.py +15 -3
  170. package/md_cg/test_mr_m1.py +108 -18
  171. package/md_cg/test_mr_m3.py +8 -1
  172. package/md_cg/test_p26_refindex.py +49 -20
  173. package/md_cg/test_p27_docindex.py +236 -2
  174. package/md_cg/test_p2_mcp.py +1 -1
  175. package/md_cg/test_p31_insight.py +24 -0
  176. package/md_cg/test_p44_md_whitebox.py +14 -1
  177. package/md_cg/test_protocol.py +243 -0
  178. package/md_cg/test_reach.py +378 -0
  179. package/md_cg/test_reach_keys.py +201 -0
  180. package/md_cg/test_reach_meta_exits.py +145 -0
  181. package/md_cg/test_read_clip.py +8 -4
  182. package/md_cg/test_retr_s1.py +340 -0
  183. package/md_cg/test_retr_s1b.py +209 -0
  184. package/md_cg/test_retr_s3.py +194 -0
  185. package/md_cg/test_retr_s4.py +163 -0
  186. package/md_cg/test_retr_s5.py +200 -0
  187. package/md_cg/test_retr_s6.py +157 -0
  188. package/md_cg/test_retr_s7.py +385 -0
  189. package/md_cg/test_retr_s8_time.py +316 -0
  190. package/md_cg/test_retr_s9_edges.py +286 -0
  191. package/md_cg/test_retr_s9_entity_ctx.py +175 -0
  192. package/md_cg/test_review_conformance.py +59 -2
  193. package/md_cg/test_role_views.py +354 -0
  194. package/md_cg/test_trust.py +361 -0
  195. package/md_cg/test_units_poll.py +71 -0
  196. package/md_cg/test_v14_fixes.py +397 -0
  197. package/md_cg/test_validity_filter.py +280 -0
  198. package/md_cg/test_wisdom_md_store.py +7 -3
  199. package/md_cg/test_writepipe.py +5 -1
  200. package/md_cg/theory.py +16 -1
  201. package/md_cg/tokens.py +40 -8
  202. package/md_cg/tool_face.py +13 -2
  203. package/md_cg/trust.py +943 -0
  204. package/md_cg/twophase.py +12 -1
  205. package/md_cg/units.py +129 -10
  206. package/md_cg/vision_evidence.py +24 -1
  207. package/md_cg/weights.py +24 -1
  208. package/md_cg/whitebox.py +32 -1
  209. package/md_cg/whitebox_kb/data/verify_cache.json +21210 -365
  210. package/md_cg/whitebox_kb/data/verify_savings.jsonl +5078 -0
  211. package/md_cg/whitebox_kb/wisdom/audit_log/chain_heat.json +10 -10
  212. package/md_cg/whitebox_kb/wisdom/code_compose.py +113 -6
  213. package/md_cg/whitebox_kb/wisdom/code_solidified.json +1 -1
  214. package/md_cg/whitebox_kb/wisdom/verifier.py +340 -55
  215. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db +0 -0
  216. package/md_cg/writelimit.py +18 -4
  217. package/md_cg/writepipe.py +178 -7
  218. package/package.json +2 -2
  219. package/skills/skills/designer-perspective/scripts/__pycache__/designer.cpython-310.pyc +0 -0
  220. package/skills/skills/designer-perspective/scripts/designer.py +17 -1
  221. package/skills/skills/designer-perspective/tests/selftest.py +3 -1
  222. package/src/hooks.ts +17 -21
  223. package/src/index.ts +33 -6
  224. package/src/lib/datapath.ts +211 -13
  225. package/src/lib/mdcg_client.ts +12 -8
  226. package/src/lib/mutual.ts +411 -411
  227. package/src/lib/token_store.ts +4 -5
  228. package/zcode/AGENTS.md +196 -195
  229. package/zcode/README.md +4 -0
  230. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db-shm +0 -0
  231. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db-wal +0 -0
@@ -5,7 +5,7 @@
5
5
  "初中数学知识点内容(按骨架填充)→小学数学知识点内容(按骨架填充)→高中数学知识点内容(按骨架填充)": 2,
6
6
  "单卡:初中数学知识点内容(按骨架填充)": 2,
7
7
  "单卡:小学数学知识点内容(按骨架填充)": 2,
8
- "单卡:高中数学知识点内容(按骨架填充)": 136,
8
+ "单卡:高中数学知识点内容(按骨架填充)": 240,
9
9
  "小学科学→数学→初中物理": 9,
10
10
  "单卡:小学科学": 9,
11
11
  "单卡:数学": 9,
@@ -14,15 +14,15 @@
14
14
  "单卡:数学物理方法": 9,
15
15
  "单卡:理论力学": 9,
16
16
  "单卡:物理学·综合": 9,
17
- "单卡:打喷嚏(健康与身体·通识知识卡)": 134,
18
- "单卡:质数(数学·通识知识卡)": 134,
19
- "常见家电的功率(物理学·通识知识卡)→日食与月食的成因(天文学·通识知识卡)": 134,
20
- "单卡:常见家电的功率(物理学·通识知识卡)": 134,
21
- "单卡:日食与月食的成因(天文学·通识知识卡)": 134,
22
- "数学分析知识点内容(按骨架填充)→高中数学知识点内容(按骨架填充)→测度论与物理离散性": 62,
23
- "单卡:数学分析知识点内容(按骨架填充)": 134,
24
- "单卡:测度论与物理离散性": 134,
25
- "高中数学知识点内容(按骨架填充)→数学分析知识点内容(按骨架填充)→测度论与物理离散性": 72,
17
+ "单卡:打喷嚏(健康与身体·通识知识卡)": 238,
18
+ "单卡:质数(数学·通识知识卡)": 238,
19
+ "常见家电的功率(物理学·通识知识卡)→日食与月食的成因(天文学·通识知识卡)": 238,
20
+ "单卡:常见家电的功率(物理学·通识知识卡)": 238,
21
+ "单卡:日食与月食的成因(天文学·通识知识卡)": 238,
22
+ "数学分析知识点内容(按骨架填充)→高中数学知识点内容(按骨架填充)→测度论与物理离散性": 114,
23
+ "单卡:数学分析知识点内容(按骨架填充)": 238,
24
+ "单卡:测度论与物理离散性": 238,
25
+ "高中数学知识点内容(按骨架填充)→数学分析知识点内容(按骨架填充)→测度论与物理离散性": 124,
26
26
  "协议-知识飞轮→白箱测试定义→价值理论与AI对齐": 1,
27
27
  "单卡:协议-知识飞轮": 1,
28
28
  "单卡:白箱测试定义": 1,
@@ -20,6 +20,11 @@ CODE_UNITS = {
20
20
  "task": "排序",
21
21
  "pattern": (
22
22
  "def {fn}(arr):\n"
23
+ " # 生效条件:arr 为可迭代且元素互相可比较(同构可排序);原地修改入参\n"
24
+ " # 子功能:① 相邻比较交换 ② 每轮把当前最大元素浮到尾部\n"
25
+ " # 执行:双层循环(外层 n 轮 × 内层 n-1-i),相邻逆序则原地交换\n"
26
+ " # 验证方式:样例驱动(4 组:乱序/逆序/单元素/空序列)\n"
27
+ " # 不适用条件:元素不可比较 / 需稳定排序 / 大规模数据(O(n²) 过慢)\n"
23
28
  " # 排序:冒泡法(相邻比较交换,较小元素浮到头部)\n"
24
29
  " n = len(arr)\n"
25
30
  " for i in range(n):\n"
@@ -35,6 +40,11 @@ CODE_UNITS = {
35
40
  "task": "去重",
36
41
  "pattern": (
37
42
  "def {fn}(arr):\n"
43
+ " # 生效条件:arr 为可迭代且元素可哈希(可放入 set);返回新列表不改入参\n"
44
+ " # 子功能:① 集合判重(seen)② 按首次出现顺序收集\n"
45
+ " # 执行:单层遍历 + 集合判重 + 列表追加(O(n) 时间 / O(n) 空间)\n"
46
+ " # 验证方式:样例驱动(3 组:含重复/空/全同)\n"
47
+ " # 不适用条件:元素不可哈希(list/dict/嵌套结构)/ 需保留末次出现\n"
38
48
  " # 去重:保留首次出现顺序(seen 集合判重)\n"
39
49
  " seen = set()\n"
40
50
  " out = []\n"
@@ -50,6 +60,11 @@ CODE_UNITS = {
50
60
  "task": "计数",
51
61
  "pattern": (
52
62
  "def {fn}(arr):\n"
63
+ " # 生效条件:arr 为可迭代且元素可哈希(Counter 内部用 dict 计数)\n"
64
+ " # 子功能:① 调 Counter 统计词频 ② 转回内建 dict 返回\n"
65
+ " # 执行:Counter(arr) 一次遍历计数 + dict() 类型转换\n"
66
+ " # 验证方式:样例驱动(3 组:混合值/空/同值)\n"
67
+ " # 不适用条件:元素不可哈希 / 需要按频率排序的输出\n"
53
68
  " # 计数:元素出现频率(Counter 统计)\n"
54
69
  " from collections import Counter\n"
55
70
  " return dict(Counter(arr))\n"),
@@ -60,6 +75,11 @@ CODE_UNITS = {
60
75
  "task": "最大",
61
76
  "pattern": (
62
77
  "def {fn}(arr):\n"
78
+ " # 生效条件:arr 为可索引序列且元素支持 > 比较;空序列有定义(返回 None)\n"
79
+ " # 子功能:① 空序列短路返回 None ② 线性扫描取最大\n"
80
+ " # 执行:以 arr[0] 为初值,单层遍历比较更新(O(n))\n"
81
+ " # 验证方式:样例驱动(4 组:乱序/单元素/空/全负)\n"
82
+ " # 不适用条件:元素不可比较 / 需同时返回下标 / 空序列需抛异常(本实现返 None)\n"
63
83
  " # 最大值:线性扫描取最大(空列表返回 None)\n"
64
84
  " if not arr:\n"
65
85
  " return None\n"
@@ -75,6 +95,11 @@ CODE_UNITS = {
75
95
  "task": "反转",
76
96
  "pattern": (
77
97
  "def {fn}(arr):\n"
98
+ " # 生效条件:arr 支持切片下标协议(list/str/tuple 等序列)\n"
99
+ " # 子功能:① 步长 -1 切片逆序 ② 返回新序列(不改入参)\n"
100
+ " # 执行:arr[::-1] 单次切片(O(n) 时间,非原地)\n"
101
+ " # 验证方式:样例驱动(3 组:整数/空/字符串)\n"
102
+ " # 不适用条件:不支持切片的对象(set/生成器/迭代器)/ 需要原地反转\n"
78
103
  " # 反转:切片逆序(倒序排列)\n"
79
104
  " return arr[::-1]\n"),
80
105
  "cases": [([1, 2, 3], [3, 2, 1]), ([], []), (["a", "b"], ["b", "a"])],
@@ -84,6 +109,11 @@ CODE_UNITS = {
84
109
  "task": "求和",
85
110
  "pattern": (
86
111
  "def {fn}(arr):\n"
112
+ " # 生效条件:arr 可迭代且元素支持 + 累加(数值或可拼接同构类型)\n"
113
+ " # 子功能:① 累加所有元素 ② 空序列返回 0(累加器初值)\n"
114
+ " # 执行:单层遍历累加(O(n))\n"
115
+ " # 验证方式:样例驱动(3 组:多元素/空/单元素)\n"
116
+ " # 不适用条件:元素不可相加 / 需 Kahan 补偿精度 / 超大数防溢出(无保护)\n"
87
117
  " # 求和:累加所有元素(空列表返回 0)\n"
88
118
  " total = 0\n"
89
119
  " for x in arr:\n"
@@ -96,6 +126,11 @@ CODE_UNITS = {
96
126
  "task": "最大公约数",
97
127
  "pattern": (
98
128
  "def {fn}(a, b):\n"
129
+ " # 生效条件:a、b 为非负整数(a=0 合法,返回 b);无除零风险(b=0 时循环不执行)\n"
130
+ " # 子功能:① 辗转相除迭代(a,b ← b,a%b)② 余数为 0 时返回当前 a\n"
131
+ " # 执行:while 循环取余,每次把问题规模缩到 (b, a mod b)\n"
132
+ " # 验证方式:样例驱动(4 组:互质/有公约数/含 0/常规对)\n"
133
+ " # 不适用条件:负数输入(Python 取模语义可跑但结果符号未定义)/ 非整数 / 浮点\n"
99
134
  " while b:\n"
100
135
  " a, b = b, a % b\n"
101
136
  " return a\n"),
@@ -106,6 +141,11 @@ CODE_UNITS = {
106
141
  "task": "斐波那契",
107
142
  "pattern": (
108
143
  "def {fn}(n):\n"
144
+ " # 生效条件:n 为整数;n <= 0 有定义(返回空列表)\n"
145
+ " # 子功能:① n<=0 短路返回 [] ② 迭代生成数列 ③ 截取前 n 项\n"
146
+ " # 执行:以 [0,1] 起,while len(fib) < n 迭代追加(O(n) 时间 / O(n) 空间)\n"
147
+ " # 验证方式:样例驱动(3 组:n=1 / n=5 / n=10)\n"
148
+ " # 不适用条件:极大 n(内存线性增长)/ 只取单个数值(本实现返回列表)/ n 非整数\n"
109
149
  " if n <= 0:\n"
110
150
  " return []\n"
111
151
  " fib = [0, 1]\n"
@@ -119,6 +159,11 @@ CODE_UNITS = {
119
159
  "task": "素数",
120
160
  "pattern": (
121
161
  "def {fn}(n):\n"
162
+ " # 生效条件:n 为整数;n < 2 有定义(返回 False,0/1 非素数)\n"
163
+ " # 子功能:① 小于 2 短路返回 False ② 从 2 试除至 √n\n"
164
+ " # 执行:while i*i <= n 试除,发现因子即返回 False(O(√n))\n"
165
+ " # 验证方式:样例驱动(6 组:素数 2/3/17、合数 4、边界 1/0)\n"
166
+ " # 不适用条件:大整数(√n 试除过慢,应用 Miller-Rabin)/ 非整数 / 需要因子分解\n"
122
167
  " if n < 2:\n"
123
168
  " return False\n"
124
169
  " i = 2\n"
@@ -152,6 +197,11 @@ RUST_UNITS = {
152
197
  "排序-冒泡": {
153
198
  "task": "排序", "lang": "rust",
154
199
  "pattern": ("fn {fn}(arr: &mut Vec<i32>) {\n"
200
+ " // 生效条件:arr 为 Vec<i32> 可变借用(原地排序,调用方保留所有权)\n"
201
+ " // 子功能:① 相邻比较交换 ② 每轮把当前最大元素浮到尾部\n"
202
+ " // 执行:双层 for 循环 + arr.swap 原地交换(O(n²))\n"
203
+ " // 验证方式:py_ref 等价实现跑样例(3 组:乱序/逆序/空)\n"
204
+ " // 不适用条件:非 i32 元素(需泛型 + Ord 约束)/ 需稳定排序\n"
155
205
  " let n = arr.len();\n"
156
206
  " for i in 0..n {\n"
157
207
  " for j in 0..n - 1 - i {\n"
@@ -171,13 +221,25 @@ RUST_UNITS = {
171
221
  },
172
222
  "求和": {
173
223
  "task": "求和", "lang": "rust",
174
- "pattern": "fn {fn}(arr: &[i32]) -> i32 {\n arr.iter().sum()\n}\n",
224
+ "pattern": ("fn {fn}(arr: &[i32]) -> i32 {\n"
225
+ " // 生效条件:arr 为 &[i32](不可变借用,不消耗所有权)\n"
226
+ " // 子功能:① 迭代求和(iter().sum())② 空切片自然返回 0(sum 单位元)\n"
227
+ " // 执行:一次迭代累加(O(n))\n"
228
+ " // 验证方式:py_ref 等价实现跑样例(3 组:多元素/空/单元素)\n"
229
+ " // 不适用条件:i32 溢出(大数组需 i64)/ 非 i32 / 浮点精度需求\n"
230
+ " arr.iter().sum()\n"
231
+ "}\n"),
175
232
  "cases": [([1, 2, 3], 6), ([], 0), ([5], 5)],
176
233
  "py_ref": "def solve(arr): return sum(arr)\n",
177
234
  },
178
235
  "最大值": {
179
236
  "task": "最大", "lang": "rust",
180
237
  "pattern": ("fn {fn}(arr: &[i32]) -> Option<i32> {\n"
238
+ " // 生效条件:arr 为 &[i32];空切片有定义(返回 None)\n"
239
+ " // 子功能:① 迭代取最大(max())② 空切片返回 None(Option 语义)\n"
240
+ " // 执行:iter().copied().max() 单次遍历(O(n))\n"
241
+ " // 验证方式:py_ref 等价实现跑样例(3 组:乱序/单元素/空)\n"
242
+ " // 不适用条件:非 i32 / 需要下标 / 空切片需 panic(本实现返回 None)\n"
181
243
  " arr.iter().copied().max()\n}\n"),
182
244
  "cases": [([3, 1, 2], 3), ([7], 7), ([], None)],
183
245
  "py_ref": "def solve(arr): return max(arr) if arr else None\n",
@@ -185,6 +247,11 @@ RUST_UNITS = {
185
247
  "去重-保序": {
186
248
  "task": "去重", "lang": "rust",
187
249
  "pattern": ("fn {fn}(arr: &[i32]) -> Vec<i32> {\n"
250
+ " // 生效条件:arr 为 &[i32];返回新 Vec 不改入参\n"
251
+ " // 子功能:① HashSet 判重 ② 按首次出现顺序收集\n"
252
+ " // 执行:filter + seen.insert 副作用判重 + collect 一次性构建\n"
253
+ " // 验证方式:py_ref 等价实现跑样例(3 组:含重复/空/全同)\n"
254
+ " // 不适用条件:非 Hash+Eq 元素(需泛型约束)/ 需保留末次出现\n"
188
255
  " let mut seen = std::collections::HashSet::new();\n"
189
256
  " arr.iter().copied().filter(|x| seen.insert(*x)).collect()\n}\n"),
190
257
  "cases": [([1, 2, 2, 3, 1], [1, 2, 3]), ([], []), ([1, 1, 1], [1])],
@@ -195,6 +262,11 @@ RUST_UNITS = {
195
262
  "反转": {
196
263
  "task": "反转", "lang": "rust",
197
264
  "pattern": ("fn {fn}(arr: &[i32]) -> Vec<i32> {\n"
265
+ " // 生效条件:arr 为 &[i32];返回新 Vec 不改入参\n"
266
+ " // 子功能:① 逆序迭代(rev)② 收集为新 Vec(collect)\n"
267
+ " // 执行:iter().rev().copied().collect()(O(n) 时间 / O(n) 空间)\n"
268
+ " // 验证方式:py_ref 等价实现跑样例(3 组:多元素/空/单元素)\n"
269
+ " // 不适用条件:非 i32 / 需要原地反转(应改用 Vec::reverse)\n"
198
270
  " arr.iter().rev().copied().collect()\n}\n"),
199
271
  "cases": [([1, 2, 3], [3, 2, 1]), ([], []), ([7], [7])],
200
272
  "py_ref": "def solve(arr): return arr[::-1]\n",
@@ -204,26 +276,54 @@ RUST_UNITS = {
204
276
  JS_UNITS = {
205
277
  "排序": {
206
278
  "task": "排序", "lang": "javascript",
207
- "pattern": "function {fn}(arr) {\n return arr.slice().sort((a, b) => a - b);\n}\n",
279
+ "pattern": ("function {fn}(arr) {\n"
280
+ " // 生效条件:arr 为数组且元素为数值;返回副本不改入参\n"
281
+ " // 子功能:① slice() 复制 ② 数值升序排序(显式比较器)\n"
282
+ " // 执行:sort((a, b) => a - b) 排副本(O(n log n))\n"
283
+ " // 验证方式:py_ref 等价实现跑样例(3 组:乱序/逆序/空)\n"
284
+ " // 不适用条件:非数值元素(默认字典序,须改写比较器)/ 需稳定排序\n"
285
+ " return arr.slice().sort((a, b) => a - b);\n"
286
+ "}\n"),
208
287
  "cases": [([3, 1, 2], [1, 2, 3]), ([5, 4, 3, 2, 1], [1, 2, 3, 4, 5]),
209
288
  ([], [])],
210
289
  "py_ref": "def solve(arr): return sorted(arr)\n",
211
290
  },
212
291
  "求和": {
213
292
  "task": "求和", "lang": "javascript",
214
- "pattern": "function {fn}(arr) {\n return arr.reduce((s, x) => s + x, 0);\n}\n",
293
+ "pattern": ("function {fn}(arr) {\n"
294
+ " // 生效条件:arr 为数组且元素可数值相加;空数组有定义(返回 0)\n"
295
+ " // 子功能:① reduce 累加 ② 空数组返回初值 0\n"
296
+ " // 执行:arr.reduce((s, x) => s + x, 0) 单次遍历(O(n))\n"
297
+ " // 验证方式:py_ref 等价实现跑样例(3 组:多元素/空/单元素)\n"
298
+ " // 不适用条件:非数值元素(字符串会被拼接)/ 需高精度(浮点误差累积)\n"
299
+ " return arr.reduce((s, x) => s + x, 0);\n"
300
+ "}\n"),
215
301
  "cases": [([1, 2, 3], 6), ([], 0), ([5], 5)],
216
302
  "py_ref": "def solve(arr): return sum(arr)\n",
217
303
  },
218
304
  "反转": {
219
305
  "task": "反转", "lang": "javascript",
220
- "pattern": "function {fn}(arr) {\n return arr.slice().reverse();\n}\n",
306
+ "pattern": ("function {fn}(arr) {\n"
307
+ " // 生效条件:arr 为真数组(具备 slice 方法);返回副本不改入参\n"
308
+ " // 子功能:① slice() 复制 ② reverse() 逆序副本\n"
309
+ " // 执行:arr.slice().reverse()(O(n) 时间 / O(n) 空间)\n"
310
+ " // 验证方式:py_ref 等价实现跑样例(3 组:多元素/空/单元素)\n"
311
+ " // 不适用条件:类数组对象(arguments/NodeList 须先 Array.from 转换)\n"
312
+ " return arr.slice().reverse();\n"
313
+ "}\n"),
221
314
  "cases": [([1, 2, 3], [3, 2, 1]), ([], []), (["a", "b"], ["b", "a"])],
222
315
  "py_ref": "def solve(arr): return arr[::-1]\n",
223
316
  },
224
317
  "去重": {
225
318
  "task": "去重", "lang": "javascript",
226
- "pattern": "function {fn}(arr) {\n return [...new Set(arr)];\n}\n",
319
+ "pattern": ("function {fn}(arr) {\n"
320
+ " // 生效条件:arr 为可迭代对象(元素可进 Set);返回新数组不改入参\n"
321
+ " // 子功能:① Set 去重 ② 展开为数组(保首次出现顺序)\n"
322
+ " // 执行:[...new Set(arr)] 一次遍历 + 展开(O(n))\n"
323
+ " // 验证方式:py_ref 等价实现跑样例(3 组:含重复/空/全同)\n"
324
+ " // 不适用条件:对象元素(Set 按引用判重,值相同不合并)/ 需保留末次出现\n"
325
+ " return [...new Set(arr)];\n"
326
+ "}\n"),
227
327
  "cases": [([1, 2, 2, 3, 1], [1, 2, 3]), ([], []), ([1, 1, 1], [1])],
228
328
  "py_ref": "def solve(arr):\n seen = set(); out = []\n"
229
329
  " for x in arr:\n if x not in seen: seen.add(x); out.append(x)\n"
@@ -231,7 +331,14 @@ JS_UNITS = {
231
331
  },
232
332
  "最大": {
233
333
  "task": "最大", "lang": "javascript",
234
- "pattern": "function {fn}(arr) {\n return arr.length ? Math.max(...arr) : null;\n}\n",
334
+ "pattern": ("function {fn}(arr) {\n"
335
+ " // 生效条件:arr 为数组;空数组有定义(返回 null)\n"
336
+ " // 子功能:① 长度判断 ② 展开取最大值(空数组返回 null)\n"
337
+ " // 执行:Math.max(...arr) 展开为参数列表(O(n))\n"
338
+ " // 验证方式:py_ref 等价实现跑样例(3 组:乱序/单元素/空)\n"
339
+ " // 不适用条件:超大数组(展开超参数上限,应改 reduce)/ 含 NaN / 非数值\n"
340
+ " return arr.length ? Math.max(...arr) : null;\n"
341
+ "}\n"),
235
342
  "cases": [([3, 1, 2], 3), ([7], 7), ([], None)],
236
343
  "py_ref": "def solve(arr): return max(arr) if arr else None\n",
237
344
  },
@@ -77,7 +77,7 @@
77
77
  "✔ L1语法 语法通过(1 个函数定义)",
78
78
  "✔ L2样例 3 组样例全部通过",
79
79
  "✔ L3边界 无额外边界用例",
80
- "✔ 规范符合性 结构规范 + 语义对齐 + 条件论注释通过",
80
+ "✔ 规范符合性 结构规范 + 语义对齐 + 条件论注释 R1/R2 通过(R3 三要素 1/1 达标)",
81
81
  "✔ 缓存命中(指纹 83a381e1f246)"
82
82
  ],
83
83
  "source": "domain_solidified",