@furongjun1999/dsh-memory 0.7.0 → 0.7.2

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 (78) hide show
  1. package/README.md +8 -6
  2. package/codebuddy/CODEBUDDY.md +5 -5
  3. package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +223 -0
  4. package/docs/eval/cons200_/345/206/262/347/252/201/346/243/200/346/265/213/351/200/211/351/235/242_/345/256/236/346/226/275/350/256/260/345/275/225_v1.1.md +340 -0
  5. package/docs/eval/issue50_/345/205/203/346/225/260/346/215/256/351/200/217/344/274/240/344/270/216/345/205/234/345/272/225_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +437 -0
  6. package/docs/eval/issue50_/345/215/212/351/207/215/345/244/215/345/276/205/345/256/232/345/244/215/346/240/270_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +488 -0
  7. package/docs/eval/issue50_/345/276/205/345/256/232/345/244/215/346/240/270/345/205/245/351/230/237_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +428 -0
  8. package/docs/eval/issue50_/350/257/273/351/235/242/344/277/235/346/212/244/345/217/252/350/256/244/346/230/276/345/274/217/346/235/245/346/272/220_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +271 -0
  9. package/docs/eval/issue50_/351/207/215/350/246/201/345/272/246/345/220/214/346/272/220/344/270/216/344/277/235/346/212/244/350/257/255/344/271/211_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +306 -0
  10. package/docs/eval/issue51_/344/270/200/351/224/256/345/256/211/350/243/205/345/244/261/350/264/245_/345/275/222/345/261/236/345/210/244/345/256/232_v1.0.md +58 -0
  11. package/docs/eval/issue52_/346/235/241/344/273/266/345/205/210/350/241/214/344/270/216/346/210/252/346/226/255/345/217/257/350/247/202/346/265/213_/344/277/256/345/244/215/350/256/260/345/275/225_v1.0.md +360 -0
  12. package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/241/346/241/243/344/275/215/345/215/225/344/270/200/345/205/245/345/217/243_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +651 -0
  13. package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/242/345/217/230/346/233/264/345/215/225/344/270/216/345/233/236/346/273/232/345/216/237/350/257/255_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +439 -0
  14. package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/243/345/207/206/345/205/245/350/257/273/346/225/260_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +1337 -0
  15. package/docs/eval//344/270/211/346/241/243/350/207/252/346/262/273_/346/255/245/351/252/244/342/221/244/346/224/266/345/256/230/344/270/216/345/205/250/351/223/276/351/252/214/346/224/266_/350/220/275/347/240/201/350/256/260/345/275/225_v1.0.md +1817 -0
  16. package/docs/eval//345/217/221/345/270/20309_/346/243/200/347/264/242/351/235/242/344/270/211/346/211/271/346/224/266/345/217/243_v1.0.md +66 -0
  17. package/docs/eval//345/217/221/345/270/20310_/350/257/273/351/235/242/346/215/237/345/235/217UTF8/345/256/266/346/227/217/346/224/266/345/217/243_v1.0.md +71 -0
  18. package/docs/eval//347/254/2543/345/261/202stg/347/273/223/346/236/204/347/264/242/345/274/225_/345/256/236/346/226/275/350/256/260/345/275/225_v1.0.md +250 -0
  19. 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 +25 -25
  20. package/docs/plans/stg/346/235/241/344/273/266/345/214/226/344/270/216/347/273/223/346/236/204/347/264/242/345/274/225_/350/256/276/350/256/241_v0.1.md +124 -0
  21. package/docs/plans//350/256/260/345/277/206/350/207/252/345/244/204/347/220/206/344/270/211/346/241/243/350/207/252/346/262/273_/350/256/276/350/256/241_v0.2.md +207 -0
  22. 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 +4 -4
  23. package/md_cg/admission.py +718 -0
  24. package/md_cg/autonomy_modes.py +642 -0
  25. package/md_cg/bench6_arms.py +10 -6
  26. package/md_cg/census.py +2 -1
  27. package/md_cg/consistency.py +133 -8
  28. package/md_cg/forgetting.py +38 -6
  29. package/md_cg/freshness.py +17 -1
  30. package/md_cg/lifecycle.py +30 -2
  31. package/md_cg/mcp_server.py +63 -7
  32. package/md_cg/mdcg.py +157 -31
  33. package/md_cg/mdcos.py +675 -19
  34. package/md_cg/mreview/locate.py +1 -1
  35. package/md_cg/protect.py +79 -4
  36. package/md_cg/provenance.py +1 -1
  37. package/md_cg/review_cli.py +31 -2
  38. package/md_cg/rollback.py +420 -0
  39. package/md_cg/rollback_cli.py +104 -0
  40. package/md_cg/routing.py +10 -1
  41. package/md_cg/stg.py +400 -50
  42. package/md_cg/stgidx.py +281 -0
  43. package/md_cg/test_autonomy_admission.py +1098 -0
  44. package/md_cg/test_autonomy_modes.py +1972 -0
  45. package/md_cg/test_b1_auto_id_multiproc.py +7 -0
  46. package/md_cg/test_b1b2_write_face.py +7 -0
  47. package/md_cg/test_b3_merge_keeps_content.py +7 -0
  48. package/md_cg/test_cons200_scan_selection.py +791 -0
  49. package/md_cg/test_corrupt_utf8_read_surfaces.py +451 -0
  50. package/md_cg/test_generation_guard.py +15 -9
  51. package/md_cg/test_health_corrupt_utf8.py +37 -0
  52. package/md_cg/test_i50a_half_dup_defer.py +408 -0
  53. package/md_cg/test_i50b_defer_to_review_queue.py +545 -0
  54. package/md_cg/test_i50c_meta_passthrough.py +608 -0
  55. package/md_cg/test_i50d_importance_source.py +531 -0
  56. package/md_cg/test_i50e_readside_protection.py +656 -0
  57. package/md_cg/test_index_crossprocess_reload.py +39 -24
  58. package/md_cg/test_issue39_utf8_stdio.py +9 -1
  59. package/md_cg/test_issue52_scan_condition_first.py +677 -0
  60. package/md_cg/test_issue53_cipher_health_hash.py +385 -0
  61. package/md_cg/test_linkref.py +7 -0
  62. package/md_cg/test_mode_parity.py +1393 -0
  63. package/md_cg/test_mutation_rollback.py +805 -0
  64. package/md_cg/test_n204_n205_n226_n227_n228_n229_exit_gates.py +1 -1
  65. package/md_cg/test_n214_n215_n221_n222_write_face_gates.py +7 -0
  66. package/md_cg/test_p2_mcp.py +8 -0
  67. package/md_cg/test_p9_forget_protect.py +7 -0
  68. package/md_cg/test_p9c_dedup_hints.py +7 -0
  69. package/md_cg/test_policy_required_ccg.py +5 -1
  70. package/md_cg/test_protocol.py +7 -0
  71. package/md_cg/test_stgidx_index_parity.py +1020 -0
  72. package/md_cg/test_writelimit.py +36 -9
  73. package/md_cg/test_writepipe.py +5 -2
  74. package/md_cg/weights.py +15 -1
  75. package/md_cg/writepipe.py +101 -2
  76. package/package.json +1 -1
  77. package/skills/plugin.json +1 -1
  78. package/zcode/AGENTS.md +5 -5
@@ -262,30 +262,45 @@ def main():
262
262
  a4.close()
263
263
 
264
264
  # ---------- ⑥ 性能粗测:无跨进程写入时逐读开销 ----------
265
- print("\n【⑥】性能粗测(无跨进程写入,接线态 vs 重载桩空转态)")
266
- N = 300
267
- a2c = MdCGSecure(root3, principal=_principal())
268
- for _ in range(5):
269
- a2c.get("own_0")
270
- t0 = time.perf_counter()
271
- for _ in range(N):
272
- a2c.get("own_0")
273
- t_on = (time.perf_counter() - t0) / N * 1e6
274
- orig = a2c._maybe_reload_index
275
- a2c._maybe_reload_index = lambda: False
276
- for _ in range(5):
277
- a2c.get("own_0")
278
- t0 = time.perf_counter()
279
- for _ in range(N):
280
- a2c.get("own_0")
281
- t_off = (time.perf_counter() - t0) / N * 1e6
282
- a2c._maybe_reload_index = orig
283
- a2c.close()
284
- print(" 接线态 %.1f µs/读 · 桩空转态 %.1f µs/读 · 增幅 %.1f%%"
285
- % (t_on, t_off, (t_on - t_off) / max(t_off, 1e-9) * 100))
286
- check("性能上界:接线态 ≤ 桩空转态×3 + 30µs(stat 微秒级;宽松防抖)",
287
- t_on <= t_off * 3 + 30.0,
288
- "on=%.1f off=%.1f" % (t_on, t_off))
265
+ # 并行豁免 + 3 轮中位数(2026-10-03 外部报告核验新增):
266
+ # · 并行全量下 CPU 争抢使本断言假红(报告机器实测 on 242.0µs / off 35.6µs,
267
+ # 单独跑 3 次 41~42µs 全 PASS——接线态是 syscall 密集面,争抢长尾远重于
268
+ # 空转桩态)⇒ 并行时**明示豁免**(run_tests 经 MDCG_RUN_TESTS_PARALLEL
269
+ # 传信号;串行(--jobs 1,含 CI)照测——语义断言不受本豁免影响);
270
+ # · 串行下采样改 3 轮取中位(抗偶发长尾),阈值口径不变(仍防真回归)。
271
+ _parallel = os.environ.get("MDCG_RUN_TESTS_PARALLEL") == "1"
272
+ if _parallel:
273
+ print("\n【⑥】性能粗测(无跨进程写入,接线态 vs 重载桩空转态)")
274
+ print(" [SKIP] 性能上界断言(并行豁免):CPU 争抢下本断言假红(外部报告"
275
+ "实测 on 242.0µs vs off 35.6µs;单跑 41~42µs)——串行(--jobs 1,含 CI)照测")
276
+ else:
277
+ print("\n【⑥】性能粗测(无跨进程写入,接线态 vs 重载桩空转态;3 轮取中位)")
278
+ N = 300
279
+ a2c = MdCGSecure(root3, principal=_principal())
280
+
281
+ def _probe():
282
+ for _ in range(5):
283
+ a2c.get("own_0")
284
+ t0 = time.perf_counter()
285
+ for _ in range(N):
286
+ a2c.get("own_0")
287
+ return (time.perf_counter() - t0) / N * 1e6
288
+
289
+ on_runs = [_probe() for _ in range(3)]
290
+ orig = a2c._maybe_reload_index
291
+ a2c._maybe_reload_index = lambda: False
292
+ off_runs = [_probe() for _ in range(3)]
293
+ a2c._maybe_reload_index = orig
294
+ a2c.close()
295
+ t_on = sorted(on_runs)[1]
296
+ t_off = sorted(off_runs)[1]
297
+ print(" 接线态 %.1f µs/读(3 轮 %s)· 桩空转态 %.1f µs/读(3 轮 %s)· 增幅 %.1f%%"
298
+ % (t_on, "/".join("%.1f" % v for v in on_runs),
299
+ t_off, "/".join("%.1f" % v for v in off_runs),
300
+ (t_on - t_off) / max(t_off, 1e-9) * 100))
301
+ check("性能上界:接线态(3 轮中位)≤ 桩空转态(3 轮中位)×3 + 30µs(中位抗长尾)",
302
+ t_on <= t_off * 3 + 30.0,
303
+ "on=%.1f off=%.1f" % (t_on, t_off))
289
304
  finally:
290
305
  for r_ in roots:
291
306
  shutil.rmtree(r_, ignore_errors=True)
@@ -241,9 +241,17 @@ def _pool_listing() -> list | None:
241
241
 
242
242
  c5 的自证面:成功趟前后各取一次,清单必须逐字节一致——守卫的池是 HIVE_JOBS_DIR
243
243
  指针指向的临时目录,在役池不该因本守卫增减任何一项。
244
+ **排除在役 serve 的心跳产物**(`_serve*`:`_serve.json` / `_serve.log` /
245
+ `_serve.tmp<pid>`——与 `scripts/test_utf8_boot_guard.py::_pool_listing` 同口径,
246
+ 该处 2026-10-01 已按同一归因修复):心跳的原子写协议是 tmp→rename,
247
+ `_serve.tmp<pid>` 存续窗口实测约 0.35s、占空比约一半(2026-10-02 探针 45s/448
248
+ 采样:含 `_serve*` 口径变化 62 次,排除后 0 次)——不排除则两个采样点之间必被
249
+ 闪现命中而假红(全量实测随机红,两次跑一红一绿)。排除后其余任何新增(含意外
250
+ 落池)照旧判违规——判据强度不变。
244
251
  """
245
252
  try:
246
- return sorted(os.listdir(os.path.join(ROOT, "hive", "jobs")))
253
+ return sorted(n for n in os.listdir(os.path.join(ROOT, "hive", "jobs"))
254
+ if not n.startswith("_serve"))
247
255
  except OSError:
248
256
  return None
249
257