dsh-vibe-math 2.7.2 → 2.8.0

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 (153) hide show
  1. package/LICENSE +21 -21
  2. package/README.en.md +682 -681
  3. package/README.md +683 -682
  4. package/cordis.patch.yml +112 -16
  5. package/docs/AUDIT-CHECKLIST.md +755 -518
  6. package/docs/COMPAT-AUDIT-ROUND2.md +354 -328
  7. package/docs/COMPAT-AUDIT-ROUND3.md +154 -154
  8. package/docs/audit-methodology.md +93 -0
  9. package/docs/final-paper.md +172 -172
  10. package/docs/formal-verification.md +613 -588
  11. package/docs/generate_framework_diagram_v2.py +114 -114
  12. package/docs/generate_framework_diagram_v3.py +127 -127
  13. package/docs/math-computation.md +195 -187
  14. package/docs/parameter-schema.md +37 -0
  15. package/docs/release-notes/README.en.md +2 -0
  16. package/docs/release-notes/README.md +2 -0
  17. package/docs/release-notes/RELEASE-NOTES-2.0.22.md +112 -112
  18. package/docs/release-notes/RELEASE-NOTES-2.1.0.md +143 -143
  19. package/docs/release-notes/RELEASE-NOTES-2.2.0.md +266 -266
  20. package/docs/release-notes/RELEASE-NOTES-2.2.1.md +43 -43
  21. package/docs/release-notes/RELEASE-NOTES-2.2.2.md +88 -88
  22. package/docs/release-notes/RELEASE-NOTES-2.3.0.md +207 -207
  23. package/docs/release-notes/RELEASE-NOTES-2.3.1.md +134 -134
  24. package/docs/release-notes/RELEASE-NOTES-2.3.10.md +105 -105
  25. package/docs/release-notes/RELEASE-NOTES-2.3.11.md +57 -57
  26. package/docs/release-notes/RELEASE-NOTES-2.3.12.md +80 -80
  27. package/docs/release-notes/RELEASE-NOTES-2.3.2.md +145 -145
  28. package/docs/release-notes/RELEASE-NOTES-2.3.3.md +115 -115
  29. package/docs/release-notes/RELEASE-NOTES-2.3.4.md +69 -69
  30. package/docs/release-notes/RELEASE-NOTES-2.3.5.md +63 -63
  31. package/docs/release-notes/RELEASE-NOTES-2.3.6.md +66 -66
  32. package/docs/release-notes/RELEASE-NOTES-2.3.7.md +59 -59
  33. package/docs/release-notes/RELEASE-NOTES-2.3.8.md +45 -45
  34. package/docs/release-notes/RELEASE-NOTES-2.3.9.md +70 -70
  35. package/docs/release-notes/RELEASE-NOTES-2.7.2.en.md +2 -2
  36. package/docs/release-notes/RELEASE-NOTES-2.7.2.md +3 -3
  37. package/docs/release-notes/RELEASE-NOTES-2.7.3.en.md +67 -0
  38. package/docs/release-notes/RELEASE-NOTES-2.7.3.md +67 -0
  39. package/docs/release-notes/RELEASE-NOTES-2.8.0.en.md +65 -0
  40. package/docs/release-notes/RELEASE-NOTES-2.8.0.md +65 -0
  41. package/docs/release-notes/TEMPLATE.md +6 -0
  42. package/docs/release-playbook.md +103 -0
  43. package/docs/slv-playbook.md +117 -0
  44. package/docs/status-report-fields.md +167 -0
  45. package/docs/test-timing.md +158 -154
  46. package/docs//346/236/266/346/236/204/345/233/276.md +77 -77
  47. package/installer.js +793 -783
  48. package/package.json +260 -203
  49. package/prompt-corpus-persona/persona-corpus.json +9 -9
  50. package/prompt-corpus-persona/persona-corpus.md +225 -33
  51. package/prompt-corpus-v2/formal-verify-v2.json +295 -115
  52. package/prompt-corpus-v2/formal-verify-v2.md +2290 -282
  53. package/prompt-corpus-v3/formal-verify-v3.json +112 -112
  54. package/prompt-corpus-v3/formal-verify-v3.md +227 -143
  55. package/prompt-corpus-v4/formal-verify-v4.json +18 -18
  56. package/prompt-corpus-v4/formal-verify-v4.md +49 -44
  57. package/prompt-corpus-v5/prompt-corpus-v5.json +82 -82
  58. package/prompt-corpus-v5/prompt-corpus-v5.md +573 -207
  59. package/scripts/clean-temp.mjs +234 -0
  60. package/scripts/update-doc-counts.mjs +71 -0
  61. package/tests/audit-artifact-docs.mjs +72 -0
  62. package/tests/audit-artifact-docs.mutants.mjs +58 -0
  63. package/tests/audit-engine-faces.mjs +298 -0
  64. package/tests/audit-formal-sensitivity.mjs +345 -342
  65. package/tests/audit-installer-assertions.mutants.mjs +63 -0
  66. package/tests/audit-installer-compat.test.mjs +256 -208
  67. package/tests/audit-installer-policy.test.mjs +41 -8
  68. package/tests/audit-math-computation-contract.mjs +64 -8
  69. package/tests/audit-math-computation-contract.mutants.mjs +106 -0
  70. package/tests/audit-math-computation-parity.mjs +164 -3
  71. package/tests/audit-math-computation-sensitivity.mjs +5 -3
  72. package/tests/audit-package-membership.mjs +57 -0
  73. package/tests/audit-package-membership.mutants.mjs +28 -0
  74. package/tests/audit-participant-set-parity.mjs +160 -0
  75. package/tests/audit-path-discipline.mjs +83 -0
  76. package/tests/audit-path-discipline.mutants.mjs +51 -0
  77. package/tests/audit-persona-sensitivity.mjs +323 -309
  78. package/tests/audit-persona-surface.mutants.mjs +69 -0
  79. package/tests/audit-persona-surface.test.mjs +431 -390
  80. package/tests/audit-prompt-duplication.mjs +143 -0
  81. package/tests/audit-prompt-duplication.mutants.mjs +51 -0
  82. package/tests/audit-prompt-invariants.mjs +589 -508
  83. package/tests/audit-readme-bilingual.test.mjs +152 -0
  84. package/tests/audit-readme-counts.mjs +95 -0
  85. package/tests/audit-readme-counts.mutants.mjs +52 -0
  86. package/tests/audit-registration.mjs +78 -0
  87. package/tests/audit-spec-traceability.mjs +193 -193
  88. package/tests/audit-status-report-fields.mjs +172 -0
  89. package/tests/audit-status-report-fields.mutants.mjs +64 -0
  90. package/tests/audit-v3-registration-parity.mjs +156 -0
  91. package/tests/audit-v5-integrity.mjs +795 -508
  92. package/tests/audit-v5-lean-abstention.mjs +392 -0
  93. package/tests/audit-v5-lean-abstention.mutants.mjs +106 -0
  94. package/tests/audit-v5-prompt-duplication.mjs +88 -0
  95. package/tests/audit-v5-prompt-duplication.mutants.mjs +34 -0
  96. package/tests/audit-v5-sensitivity.mjs +433 -427
  97. package/tests/e2e-identity-a6.mutants.mjs +65 -0
  98. package/tests/e2e-v5-round2.test.mjs +2453 -1981
  99. package/tests/formal-verify-v2.test.mjs +1778 -1724
  100. package/tests/formal-verify-v3.mutants.mjs +117 -0
  101. package/tests/formal-verify-v3.test.mjs +1724 -1671
  102. package/tests/formal-verify-v4.mutants.mjs +152 -0
  103. package/tests/formal-verify-v4.test.mjs +2114 -1574
  104. package/tests/formal-verify-v5.test.mjs +790 -724
  105. package/tests/helpers/doc-counts-format.mjs +41 -0
  106. package/tests/helpers/math-computation-fake-seam.mjs +4 -0
  107. package/tests/math-computation-a1.mutants.mjs +72 -0
  108. package/tests/math-computation-archive-rerun.mutants.mjs +65 -0
  109. package/tests/math-computation-discovery.mutants.mjs +76 -0
  110. package/tests/math-computation-shared.test.mjs +392 -6
  111. package/tests/math-computation-v2.test.mjs +779 -0
  112. package/tests/math-computation-v3.test.mjs +771 -0
  113. package/tests/math-computation-v4.mutants.mjs +133 -0
  114. package/tests/math-computation-v4.test.mjs +739 -0
  115. package/tests/prompt-v5-integrity.test.mjs +1291 -1280
  116. package/tests/run-tests.mjs +393 -202
  117. package/tests/run-tests.mutants.mjs +70 -0
  118. package/tests/selfdrive-v5.mjs +560 -508
  119. package/tests/selfdrive-v5.mutants.mjs +132 -0
  120. package/tests/temp-hygiene.mutants.mjs +80 -0
  121. package/tests/v2-fix-probes.mutants.mjs +104 -0
  122. package/tests/v2-fix-probes.test.mjs +1040 -0
  123. package/tests/v2-list-agents-and-next-step.mutants.mjs +106 -0
  124. package/tests/v2v3-interrupt.mutants.mjs +111 -0
  125. package/tests/v3-fix-probes.mutants.mjs +99 -0
  126. package/tests/v3-fix-probes.test.mjs +892 -0
  127. package/tests/v4-final-paper.mutants.mjs +108 -0
  128. package/tests/v5-institute-fixes.mutants.mjs +218 -0
  129. package/vibe-math-v2/agent.cordis.yml +378 -322
  130. package/vibe-math-v2/math-computation.js +144 -53
  131. package/vibe-math-v2/math-engines.js +12 -12
  132. package/vibe-math-v2/preset.yml +2 -2
  133. package/vibe-math-v2/v2/347/232/204/351/242/235/345/244/226/350/246/201/346/261/202.txt +21 -21
  134. package/vibe-math-v2/vibe-math-v2.js +5097 -4755
  135. package/vibe-math-v2//345/256/236/347/216/260/346/226/271/346/241/210.md +491 -487
  136. package/vibe-math-v3/agent.cordis.yml +422 -356
  137. package/vibe-math-v3/math-computation.js +144 -53
  138. package/vibe-math-v3/math-engines.js +12 -12
  139. package/vibe-math-v3/preset.yml +2 -2
  140. package/vibe-math-v3/vibe-math-v3.js +6235 -5873
  141. package/vibe-math-v3//345/256/236/347/216/260/346/226/271/346/241/210.md +649 -649
  142. package/vibe-math-v4/agent.cordis.yml +438 -402
  143. package/vibe-math-v4/math-computation.js +144 -53
  144. package/vibe-math-v4/math-engines.js +12 -12
  145. package/vibe-math-v4/preset.yml +2 -2
  146. package/vibe-math-v4/vibe-math-v4.js +4490 -4269
  147. package/vibe-math-v4//345/256/236/347/216/260/346/226/271/346/241/210.md +1015 -1013
  148. package/vibe-math-v5/agent.cordis.yml +46 -12
  149. package/vibe-math-v5/math-computation.js +144 -53
  150. package/vibe-math-v5/math-engines.js +12 -12
  151. package/vibe-math-v5/vibe-math-v5.js +1266 -229
  152. package/vibe-math-v5//345/256/236/347/216/260/346/226/271/346/241/210.md +1728 -1660
  153. package/vibe-math-v5//346/236/266/346/236/204/345/233/276.md +693 -693
@@ -1,59 +1,59 @@
1
- # dsh-vibe-math 2.3.7 — 权威锚点必须自洽:手改过的状态文件不得劫持 id 映射
2
-
3
- > 上一版:2.3.6。本版是 round 8:把 2.3.6 新引入的"记录里持久化权威 `objectId`"这条机制**自己**审一遍。
4
- > 无破坏性变更,默认仍为 `formalVerify: 'off'`。
5
-
6
- ---
7
-
8
- ## 1. 2.3.6 引入的新机制里有一个可被污染的锚点
9
-
10
- 2.3.6 让 `formalObjectIdOf` 在任务表不可用时读记录里的 `objectId`(跨 resume 生效)。但**状态文件是
11
- 可编辑的**(`VibeMath_State/formal.json`,仓库里本来就有"文件被改坏也要能继续"的守卫测试):
12
-
13
- - 如果某条记录的 `objectId` 自己就是 **r 形**(`r-pX`),那么"验证 id → 对象 id"会映射到**它自己**;
14
- - 于是 `putFormalBothIds('r-pX', …)` 认为"两侧就是同一个 id",**只写验证侧**,对象侧仍然 `passed`
15
- —— 又回到"成对关系只做一半"的静默错位(门禁/卡片/提示词各读一侧)。
16
-
17
- **触发路径**(实测):**工作轮回执**(explorer/solver 的回执同样带 `formal` 字段)在**没有验证任务**
18
- 在内存里时走到"读记录锚点"这条兜底路径。以手改过的状态文件复现:修前该用例的断言变红
19
- (对象侧不降级),修后全绿。
20
-
21
- ## 2. 修法:锚点必须**自洽**才可用
22
-
23
- - `formalObjectIdOf` 读记录锚点时,要求 `formalObjectIdOfIsOwner(v)` 为真 —— 即该值**不以 `r-` 开头**、
24
- 不可能再被解析成别的 id;
25
- - 写入锚点的两处(`syncVerificationTarget`、`putFormalBothIds`)同样只在**确实是对象 id** 时写入,
26
- 不给未来留下污染源。
27
-
28
- > 说明(如实记录):写入侧的两道守卫**目前无法用用例证明其必要性**——现有写入者手里的值都来自
29
- > `formalObjectIdOf`,本身就不会是 r 形(我一度写了一个"归档写在 rId 上会污染锚点"的用例,实测发现它
30
- > **恒真**,已删除并换成下面这个真正敏感的用例)。因此这两道守卫按**纵深防御**保留并如此标注;
31
- > 真正被证明有效的是**读取侧**的守卫。
32
-
33
- ## 3. 新增断言(`formal-verify-v2.test.mjs` 第 14d 节,+5 条)
34
-
35
- - 状态文件里的 `r-pX` 记录带 `objectId: 'r-pX'`(手改出来的 r 形锚点),对象 `pX` 是 `passed`;
36
- - 一个**工作轮回执**(没有验证任务,因此走记录锚点这条路径)点名 `r-pX` 报 `defect`;
37
- - 断言:**对象侧必须被降级**(锚点被拒绝而不是被信任)、验证侧同样降级。
38
-
39
- **灵敏度实测**(`_oneoff/probe-v2-anchor-guard.mjs`):把读取侧的守卫去掉 → 该用例立刻变红
40
- (`exit=1`,失败断言正是这一条),装回 → 全绿。即这条守卫是**承重**的,不是摆设。
41
-
42
- ## 4. 验收(实测)
43
-
44
- | 项 | 2.3.6 | 2.3.7 |
45
- |---|---|---|
46
- | `formal-verify-v2.test.mjs` | 348 | **353** |
47
- | 读取侧守卫探针 | — | **红/绿各一次,符合预期** |
48
- | 全量并行回归 | 23/23 | 23/23 |
49
- | 49 条 formal 探针 | 全红 | 全红 |
50
- | 四套语料确定性 | 字节稳定 | 字节稳定 |
51
- | closing verification | 18/18 | 18/18 |
52
-
53
- ## 5. 升级
54
-
55
- ```
56
- npm i dsh-vibe-math@latest
57
- ```
58
-
59
- 无迁移。本版只改 v2 的锚点校验与断言;`off` 档行为不变,其余三套预设与上一版逐字节相同。
1
+ # dsh-vibe-math 2.3.7 — 权威锚点必须自洽:手改过的状态文件不得劫持 id 映射
2
+
3
+ > 上一版:2.3.6。本版是 round 8:把 2.3.6 新引入的"记录里持久化权威 `objectId`"这条机制**自己**审一遍。
4
+ > 无破坏性变更,默认仍为 `formalVerify: 'off'`。
5
+
6
+ ---
7
+
8
+ ## 1. 2.3.6 引入的新机制里有一个可被污染的锚点
9
+
10
+ 2.3.6 让 `formalObjectIdOf` 在任务表不可用时读记录里的 `objectId`(跨 resume 生效)。但**状态文件是
11
+ 可编辑的**(`VibeMath_State/formal.json`,仓库里本来就有"文件被改坏也要能继续"的守卫测试):
12
+
13
+ - 如果某条记录的 `objectId` 自己就是 **r 形**(`r-pX`),那么"验证 id → 对象 id"会映射到**它自己**;
14
+ - 于是 `putFormalBothIds('r-pX', …)` 认为"两侧就是同一个 id",**只写验证侧**,对象侧仍然 `passed`
15
+ —— 又回到"成对关系只做一半"的静默错位(门禁/卡片/提示词各读一侧)。
16
+
17
+ **触发路径**(实测):**工作轮回执**(explorer/solver 的回执同样带 `formal` 字段)在**没有验证任务**
18
+ 在内存里时走到"读记录锚点"这条兜底路径。以手改过的状态文件复现:修前该用例的断言变红
19
+ (对象侧不降级),修后全绿。
20
+
21
+ ## 2. 修法:锚点必须**自洽**才可用
22
+
23
+ - `formalObjectIdOf` 读记录锚点时,要求 `formalObjectIdOfIsOwner(v)` 为真 —— 即该值**不以 `r-` 开头**、
24
+ 不可能再被解析成别的 id;
25
+ - 写入锚点的两处(`syncVerificationTarget`、`putFormalBothIds`)同样只在**确实是对象 id** 时写入,
26
+ 不给未来留下污染源。
27
+
28
+ > 说明(如实记录):写入侧的两道守卫**目前无法用用例证明其必要性**——现有写入者手里的值都来自
29
+ > `formalObjectIdOf`,本身就不会是 r 形(我一度写了一个"归档写在 rId 上会污染锚点"的用例,实测发现它
30
+ > **恒真**,已删除并换成下面这个真正敏感的用例)。因此这两道守卫按**纵深防御**保留并如此标注;
31
+ > 真正被证明有效的是**读取侧**的守卫。
32
+
33
+ ## 3. 新增断言(`formal-verify-v2.test.mjs` 第 14d 节,+5 条)
34
+
35
+ - 状态文件里的 `r-pX` 记录带 `objectId: 'r-pX'`(手改出来的 r 形锚点),对象 `pX` 是 `passed`;
36
+ - 一个**工作轮回执**(没有验证任务,因此走记录锚点这条路径)点名 `r-pX` 报 `defect`;
37
+ - 断言:**对象侧必须被降级**(锚点被拒绝而不是被信任)、验证侧同样降级。
38
+
39
+ **灵敏度实测**(`_oneoff/probe-v2-anchor-guard.mjs`):把读取侧的守卫去掉 → 该用例立刻变红
40
+ (`exit=1`,失败断言正是这一条),装回 → 全绿。即这条守卫是**承重**的,不是摆设。
41
+
42
+ ## 4. 验收(实测)
43
+
44
+ | 项 | 2.3.6 | 2.3.7 |
45
+ |---|---|---|
46
+ | `formal-verify-v2.test.mjs` | 348 | **353** |
47
+ | 读取侧守卫探针 | — | **红/绿各一次,符合预期** |
48
+ | 全量并行回归 | 23/23 | 23/23 |
49
+ | 49 条 formal 探针 | 全红 | 全红 |
50
+ | 四套语料确定性 | 字节稳定 | 字节稳定 |
51
+ | closing verification | 18/18 | 18/18 |
52
+
53
+ ## 5. 升级
54
+
55
+ ```
56
+ npm i dsh-vibe-math@latest
57
+ ```
58
+
59
+ 无迁移。本版只改 v2 的锚点校验与断言;`off` 档行为不变,其余三套预设与上一版逐字节相同。
@@ -1,45 +1,45 @@
1
- # dsh-vibe-math 2.3.8 — 把 round 7/8 的结论写进契约与审计清单(文档版)
2
-
3
- > 上一版:2.3.7。本版**只改文档**(无代码、无预设字节变化):把 2.3.6/2.3.7 发现的边界与规则写进
4
- > 共享契约与强制审计流程,免得下一轮审计重新把它当"新问题"或按另一种方式改。
5
-
6
- ---
7
-
8
- ## 1. 契约 §4:补两条边界
9
-
10
- - **记录与归档文件同生共死(框架侧),但外部文件操作不会自动改记录**:框架撤回证明时记录降级与文件
11
- 撤回是**同一次操作**;反过来,**外部**删掉 `Verified/Lean/<id>.lean` **不会**自动把记录降级——
12
- `passed` 是状态文件里的权威状态,门禁查询是只读的,不会在每次取记录时做文件存在性探测(那会把门禁
13
- 变成 fs I/O,并在网络盘/权限异常时引入新的失败模式)。人工动过文件后请一并修正记录或重新归档。
14
- - **v2 的 id 映射同理**:记录里持久化的 `objectId` 是权威锚点,但必须**自洽**(不以 `r-` 开头)才被
15
- 采纳,否则回退到后缀解析——状态文件可编辑,里面的"权威值"要先校验。
16
-
17
- ## 2. `AUDIT-CHECKLIST` §1.10:补一条检查项
18
-
19
- > **从用户可编辑的状态文件里读出来的"权威值"是否先做了自洽校验?**
20
- > 真实事故(2.3.7):某条记录的 `objectId` 被写成 r 形时,"验证 id → 对象 id"映射到它自己,
21
- > "两套 id 一起写"退化成只写验证侧、对象侧仍是 `passed`。
22
-
23
- (§1.10 是 2.3.6 新增的章节「id 映射不许猜」,本版把它与 2.3.7 的教训合并成完整检查项。)
24
-
25
- ## 3. v2 实现方案 §9.3:同步自洽条件
26
-
27
- `formalObjectIdOf` 的权威度顺序里,第 ② 级(记录里的 `objectId`)补上"读出时要求自洽"的条件。
28
-
29
- ## 4. 验收
30
-
31
- | 项 | 结果 |
32
- |---|---|
33
- | 代码/预设字节变化 | **无**(四套 `.js` 与 2.3.7 逐字节相同) |
34
- | 全量并行回归 | 23/23 |
35
- | 静态守卫 | invariants 157/0(self-probe 5/5)、traceability 94/0、v5-integrity clean |
36
- | 四套语料确定性 | 字节稳定 |
37
- | closing verification | 18/18 |
38
-
39
- ## 5. 升级
40
-
41
- ```
42
- npm i dsh-vibe-math@latest
43
- ```
44
-
45
- 无迁移、无行为变更。
1
+ # dsh-vibe-math 2.3.8 — 把 round 7/8 的结论写进契约与审计清单(文档版)
2
+
3
+ > 上一版:2.3.7。本版**只改文档**(无代码、无预设字节变化):把 2.3.6/2.3.7 发现的边界与规则写进
4
+ > 共享契约与强制审计流程,免得下一轮审计重新把它当"新问题"或按另一种方式改。
5
+
6
+ ---
7
+
8
+ ## 1. 契约 §4:补两条边界
9
+
10
+ - **记录与归档文件同生共死(框架侧),但外部文件操作不会自动改记录**:框架撤回证明时记录降级与文件
11
+ 撤回是**同一次操作**;反过来,**外部**删掉 `Verified/Lean/<id>.lean` **不会**自动把记录降级——
12
+ `passed` 是状态文件里的权威状态,门禁查询是只读的,不会在每次取记录时做文件存在性探测(那会把门禁
13
+ 变成 fs I/O,并在网络盘/权限异常时引入新的失败模式)。人工动过文件后请一并修正记录或重新归档。
14
+ - **v2 的 id 映射同理**:记录里持久化的 `objectId` 是权威锚点,但必须**自洽**(不以 `r-` 开头)才被
15
+ 采纳,否则回退到后缀解析——状态文件可编辑,里面的"权威值"要先校验。
16
+
17
+ ## 2. `AUDIT-CHECKLIST` §1.10:补一条检查项
18
+
19
+ > **从用户可编辑的状态文件里读出来的"权威值"是否先做了自洽校验?**
20
+ > 真实事故(2.3.7):某条记录的 `objectId` 被写成 r 形时,"验证 id → 对象 id"映射到它自己,
21
+ > "两套 id 一起写"退化成只写验证侧、对象侧仍是 `passed`。
22
+
23
+ (§1.10 是 2.3.6 新增的章节「id 映射不许猜」,本版把它与 2.3.7 的教训合并成完整检查项。)
24
+
25
+ ## 3. v2 实现方案 §9.3:同步自洽条件
26
+
27
+ `formalObjectIdOf` 的权威度顺序里,第 ② 级(记录里的 `objectId`)补上"读出时要求自洽"的条件。
28
+
29
+ ## 4. 验收
30
+
31
+ | 项 | 结果 |
32
+ |---|---|
33
+ | 代码/预设字节变化 | **无**(四套 `.js` 与 2.3.7 逐字节相同) |
34
+ | 全量并行回归 | 23/23 |
35
+ | 静态守卫 | invariants 157/0(self-probe 5/5)、traceability 94/0、v5-integrity clean |
36
+ | 四套语料确定性 | 字节稳定 |
37
+ | closing verification | 18/18 |
38
+
39
+ ## 5. 升级
40
+
41
+ ```
42
+ npm i dsh-vibe-math@latest
43
+ ```
44
+
45
+ 无迁移、无行为变更。
@@ -1,70 +1,70 @@
1
- # dsh-vibe-math 2.3.9 — v4 架构图重绘为 SVG(零依赖生成器 + README 展示)
2
-
3
- > 上一版:2.3.8。本版把 v4 的架构图从"matplotlib 生成的位图"换成**零依赖 Node 生成的 SVG**,
4
- > 与 v5 同一套版式语言,并把它纳入随包发布(README 里的图在 GitHub 与 npm 上都能正常显示)。
5
- > 无代码行为变更,四套预设字节未变。
6
-
7
- ---
8
-
9
- ## 1. 为什么换
10
-
11
- | | 旧(`框架图-v4.png` + `generate_framework_diagram_v4.py`) | 新(`框架图-v4.svg` + `generate_framework_diagram_v4.mjs`) |
12
- |---|---|---|
13
- | 生成方式 | Python + matplotlib | **纯 Node,零依赖**(本仓库运行时自带 Node) |
14
- | 产物 | 位图,缩放糊、无法 diff | 纯文本 SVG,任意缩放、可评审、diff 友好 |
15
- | 信息量 | 5 个方框 + 若干小字 | 分带:定论门槛 / 常驻层 / 框架六面 / 数据面 / 哲学红线 + 图例 |
16
- | 版式校验 | 无(只能靠眼睛) | 生成时**估算文字宽度**,任何一行溢出容器即 WARN + 退出码 1 |
17
- | 随包发布 | 否(npm 上 README 图裂) | **是**(`files` 收录,GitHub 与 npm 均可显示) |
18
-
19
- 旧文件已删除(需要时可从 git 历史取);`README.md` 的图源链接与说明同步更新,
20
- `docs/generate_framework_diagram_v5.mjs` 头部注释里的"v2/v3/v4 用 matplotlib"也改成"v2/v3"。
21
-
22
- ## 2. 新图覆盖的内容(全部与实现逐项核对过)
23
-
24
- - **定论门槛**:全体一致为真(全 1)/ 一致为假(全 0)→ 写入 `Verified/`;
25
- **没有** forced / flat / 近共识收口;分歧 → 公开辩论重评;仍未全票 → 留库 + 平均概率 + 辩论录。
26
- - **常驻层**:`continuable` 持久会话、独立上下文、自主方向、只写自己的库 / 跨读他人库(只读)、
27
- 唤醒 = `subagents.sendMessage`、一轮 = 一次完整思考;起始 brainstorm 产出各自方向;全票"已解决"才停。
28
- - **框架六面**(逐条对齐代码/规格):
29
- - 消息总线·邮件箱:`vibe_v4_message(to|all)` → 入目标邮箱 → 空闲则唤醒;常驻之间不直接互调;
30
- - 会议 / 辩论:`vibe_v4_meeting(agenda)` → 全体发言 → `Shared/meetings/<id>.md` → 广播结论;
31
- 看门狗防死锁;与验证**互斥**(排队,不抢占);
32
- - 任务板(只搬运):提议/认领写在回执里 → `Shared/taskboard.md`;框架不决定谁做什么;
33
- - 共识验证(全票):回执字段 `propose_verify` → FIFO 排队 → 独立初评(互不可见)→ 公开辩论重评
34
- (最多 `verdictMaxRounds` 轮,默认 3);
35
- - 上下文 / compact:`contextPct ≥ compactThreshold`(默认 66)触发 DSH `/compact`,
36
- `compactAfterRounds` 默认 8,压缩后重申核心规则;
37
- - 活性 / 并发 / 恢复:`activityTimeoutMs` 心跳、`maxParallel` 并发闸、停滞 `stallAutoMeetingMs`
38
- (默认 6 min)自动开会、`resume` 用 `residents.json` + `progress.md` 重种化。
39
- - **回执字段**(**按代码里真正的解析字段列**,不是照抄记忆):
40
- `summary / solved / input / vote / propose_verify / propose_task / claim_task / task_done / voteSolved / formal / contextPct`。
41
- (核对时发现我第一版图里写了 `reject_assign` 与 `vote_solved` —— 前者是 **v5** 的字段、后者是拼错的
42
- 驼峰名,v4 实际是 `voteSolved`;已改正。)
43
- - **数据面**(真实路径核对过):
44
- `Progress/<r-id>/progress.md`、`Propos/<r-id>/<p-id>.md`、`Methods/<r-id>/<m-id>.md`、
45
- `Subproblems/<r-id>/<s-id>.md`(每条记录必填 价值程度 / 动机用途计划 / 自身概率估计);
46
- `Shared/meetings|debates`、`Shared/taskboard.md`、`Shared/meetings/brainstorm.md`、
47
- `Verified/命题|问题/<id>.md`、`Problems/<id>.md`;
48
- `State/residents.json`、`mailboxes.json`、`taskboard.json`、`decisions.json`、`session.json`、
49
- `settings.json`、`formal.json`;`fileOwner` 写锁 / `projectLock` / `processEpoch` / `abort → resume`。
50
- - **哲学红线**:框架绝不指派 / 定论必须全体一致 / 只有 `Verified/` 绝对可信 / 常驻不直接互调 /
51
- 人工干预不改变自组织。
52
-
53
- ## 3. 验收
54
-
55
- | 项 | 结果 |
56
- |---|---|
57
- | 生成器 | `node docs/generate_framework_diagram_v4.mjs` → `示例图/框架图-v4.svg`(23501 字节),**0 条溢出告警** |
58
- | 渲染校验 | 无头 Chrome 截图 1760×1300 逐带人工核对(无重叠、无截断;左侧控制通道不穿过常驻) |
59
- | 全量并行回归 | 23/23 |
60
- | 静态守卫 | invariants 157/0(self-probe 5/5)、traceability 94/0、v5-integrity clean、persona-surface 197/0 |
61
- | closing verification | 18/18(含"包内所有声明文件存在") |
62
- | 发布产物自证 | registry 取回 tarball 比对 sha1 + 包内跑随包套件(见发布记录) |
63
-
64
- ## 4. 升级
65
-
66
- ```
67
- npm i dsh-vibe-math@latest
68
- ```
69
-
70
- 无迁移。README 里的 v4 图现在读 `示例图/框架图-v4.svg`。
1
+ # dsh-vibe-math 2.3.9 — v4 架构图重绘为 SVG(零依赖生成器 + README 展示)
2
+
3
+ > 上一版:2.3.8。本版把 v4 的架构图从"matplotlib 生成的位图"换成**零依赖 Node 生成的 SVG**,
4
+ > 与 v5 同一套版式语言,并把它纳入随包发布(README 里的图在 GitHub 与 npm 上都能正常显示)。
5
+ > 无代码行为变更,四套预设字节未变。
6
+
7
+ ---
8
+
9
+ ## 1. 为什么换
10
+
11
+ | | 旧(`框架图-v4.png` + `generate_framework_diagram_v4.py`) | 新(`框架图-v4.svg` + `generate_framework_diagram_v4.mjs`) |
12
+ |---|---|---|
13
+ | 生成方式 | Python + matplotlib | **纯 Node,零依赖**(本仓库运行时自带 Node) |
14
+ | 产物 | 位图,缩放糊、无法 diff | 纯文本 SVG,任意缩放、可评审、diff 友好 |
15
+ | 信息量 | 5 个方框 + 若干小字 | 分带:定论门槛 / 常驻层 / 框架六面 / 数据面 / 哲学红线 + 图例 |
16
+ | 版式校验 | 无(只能靠眼睛) | 生成时**估算文字宽度**,任何一行溢出容器即 WARN + 退出码 1 |
17
+ | 随包发布 | 否(npm 上 README 图裂) | **是**(`files` 收录,GitHub 与 npm 均可显示) |
18
+
19
+ 旧文件已删除(需要时可从 git 历史取);`README.md` 的图源链接与说明同步更新,
20
+ `docs/generate_framework_diagram_v5.mjs` 头部注释里的"v2/v3/v4 用 matplotlib"也改成"v2/v3"。
21
+
22
+ ## 2. 新图覆盖的内容(全部与实现逐项核对过)
23
+
24
+ - **定论门槛**:全体一致为真(全 1)/ 一致为假(全 0)→ 写入 `Verified/`;
25
+ **没有** forced / flat / 近共识收口;分歧 → 公开辩论重评;仍未全票 → 留库 + 平均概率 + 辩论录。
26
+ - **常驻层**:`continuable` 持久会话、独立上下文、自主方向、只写自己的库 / 跨读他人库(只读)、
27
+ 唤醒 = `subagents.sendMessage`、一轮 = 一次完整思考;起始 brainstorm 产出各自方向;全票"已解决"才停。
28
+ - **框架六面**(逐条对齐代码/规格):
29
+ - 消息总线·邮件箱:`vibe_v4_message(to|all)` → 入目标邮箱 → 空闲则唤醒;常驻之间不直接互调;
30
+ - 会议 / 辩论:`vibe_v4_meeting(agenda)` → 全体发言 → `Shared/meetings/<id>.md` → 广播结论;
31
+ 看门狗防死锁;与验证**互斥**(排队,不抢占);
32
+ - 任务板(只搬运):提议/认领写在回执里 → `Shared/taskboard.md`;框架不决定谁做什么;
33
+ - 共识验证(全票):回执字段 `propose_verify` → FIFO 排队 → 独立初评(互不可见)→ 公开辩论重评
34
+ (最多 `verdictMaxRounds` 轮,默认 3);
35
+ - 上下文 / compact:`contextPct ≥ compactThreshold`(默认 66)触发 DSH `/compact`,
36
+ `compactAfterRounds` 默认 8,压缩后重申核心规则;
37
+ - 活性 / 并发 / 恢复:`activityTimeoutMs` 心跳、`maxParallel` 并发闸、停滞 `stallAutoMeetingMs`
38
+ (默认 6 min)自动开会、`resume` 用 `residents.json` + `progress.md` 重种化。
39
+ - **回执字段**(**按代码里真正的解析字段列**,不是照抄记忆):
40
+ `summary / solved / input / vote / propose_verify / propose_task / claim_task / task_done / voteSolved / formal / contextPct`。
41
+ (核对时发现我第一版图里写了 `reject_assign` 与 `vote_solved` —— 前者是 **v5** 的字段、后者是拼错的
42
+ 驼峰名,v4 实际是 `voteSolved`;已改正。)
43
+ - **数据面**(真实路径核对过):
44
+ `Progress/<r-id>/progress.md`、`Propos/<r-id>/<p-id>.md`、`Methods/<r-id>/<m-id>.md`、
45
+ `Subproblems/<r-id>/<s-id>.md`(每条记录必填 价值程度 / 动机用途计划 / 自身概率估计);
46
+ `Shared/meetings|debates`、`Shared/taskboard.md`、`Shared/meetings/brainstorm.md`、
47
+ `Verified/命题|问题/<id>.md`、`Problems/<id>.md`;
48
+ `State/residents.json`、`mailboxes.json`、`taskboard.json`、`decisions.json`、`session.json`、
49
+ `settings.json`、`formal.json`;`fileOwner` 写锁 / `projectLock` / `processEpoch` / `abort → resume`。
50
+ - **哲学红线**:框架绝不指派 / 定论必须全体一致 / 只有 `Verified/` 绝对可信 / 常驻不直接互调 /
51
+ 人工干预不改变自组织。
52
+
53
+ ## 3. 验收
54
+
55
+ | 项 | 结果 |
56
+ |---|---|
57
+ | 生成器 | `node docs/generate_framework_diagram_v4.mjs` → `示例图/框架图-v4.svg`(23501 字节),**0 条溢出告警** |
58
+ | 渲染校验 | 无头 Chrome 截图 1760×1300 逐带人工核对(无重叠、无截断;左侧控制通道不穿过常驻) |
59
+ | 全量并行回归 | 23/23 |
60
+ | 静态守卫 | invariants 157/0(self-probe 5/5)、traceability 94/0、v5-integrity clean、persona-surface 197/0 |
61
+ | closing verification | 18/18(含"包内所有声明文件存在") |
62
+ | 发布产物自证 | registry 取回 tarball 比对 sha1 + 包内跑随包套件(见发布记录) |
63
+
64
+ ## 4. 升级
65
+
66
+ ```
67
+ npm i dsh-vibe-math@latest
68
+ ```
69
+
70
+ 无迁移。README 里的 v4 图现在读 `示例图/框架图-v4.svg`。
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Overview
6
6
 
7
- - **More reliable discovery on real hosts**: discovery now runs PATH → runtimes shipped by the host → **the known per-OS install locations**, so an engine installed in its default directory but never added to `PATH` (R, for example) is found.
7
+ - **More reliable discovery on real hosts**: discovery runs PATH → runtimes shipped by the host → **the known per-OS install locations**, so an engine installed in its default directory but never added to `PATH` (R, for example) is found. The engines with known default locations are **R / Octave / Julia / MATLAB** (plus Python on Windows); Maple and Wolfram have no stable default layout and are not covered. A host may also supply the candidate roots through the optional `installRoots` interface, so discovery no longer depends on the plugin process's environment variables.
8
8
  - **No more unrunnable install commands**: `MATH_ENGINE_NOT_FOUND` only offers an executable command when that package manager really exists on this machine; otherwise it gives the suggested command, the official location and the reason.
9
9
  - **`probe` no longer reports only the good news**: besides the engines that resolved, it names the **configured but not found** engines and why.
10
10
  - **Complete failure evidence**: `MATH_TIMEOUT` carries the same fields as `MATH_NONZERO_EXIT`, and a timeout's partial output is available in **both the response and the receipt**.
@@ -20,7 +20,7 @@
20
20
  - Constraint policy fields: both a successful response and a "missing packages" failure carry **`versionPolicy`** and **`constraintsNotEnforced`** (the constraints that were **not** checked, or an empty array).
21
21
  - `MATH_TIMEOUT` responses carry **`stdout`**/**`stderr`** (capped); the receipt JSON carries **`partialStdout`**/**`partialStderr`**.
22
22
  - `MATH_ENGINE_NOT_FOUND`'s `next` carries **`suggestedCommand`**, **`packageManager`**, **`packageManagerAvailable`** and **`note`** (plus `vendorUrl` where the engine has one).
23
- - The `run` response carries **`fileIsArchivedScript`**, and emits an **`ARCHIVED_SCRIPT_RERUN`** warning when `mode:'file'` targets an archived script.
23
+ - The `run` response carries **`fileIsArchivedScript`**: when `mode:'file'` targets an **archived copy**, it also emits the **`ARCHIVED_SCRIPT_RERUN`** warning explaining that this is a **new archive by design** (new id, attempt 1, no history). To get a **new attempt of the same archive with change detection**, edit the **original source file** and re-run `mode:'file'` pointing at **that same source path**.
24
24
  - v4: `status()` carries **`rosterVersion`** and **`frozenParticipants`**; the `consensus` / `meeting` / `verify` views carry their own `rosterVersion`.
25
25
  - v4: the `paper` view carries **`dirProjected`** / **`dirSource`** / **`readSideEffect`**, saying whether the path is a projection or real state.
26
26
  - v2/v3: decision and sub-agent interrupt diagnostics carry **`code`** and **`next`** (for example `VIBE_MATH_DECISION_NOT_FOUND`, with the current queue state); v4 member-level calls carry **`V4_NO_SUCH_RESIDENT`** with the current roster and a next step.
@@ -1,10 +1,10 @@
1
1
  # dsh-vibe-math 2.7.2 — 发布说明
2
2
 
3
- > 上一版本:2.7.1。本版是**补丁版:只包含修复与附加(新增)响应字段**,不改变任何既有行为契约——把真实引擎环境下的**发现、证据与诊断**补齐:装了但不在 PATH 的引擎能被发现、安装建议不再给出本机跑不了的命令、失败证据(超时/缺包/未校验约束)不再缺失或静默、归档身份与名册口径可直接核对。四套预设的**参数默认值、数据格式与目录结构未变**,DSH 支撑窗口不变,**无需迁移**。
3
+ > 上一版本:2.7.1。本版是**补丁版:只包含修复与附加(新增)响应字段**——把真实引擎环境下的**发现、证据与诊断**补齐:装了但不在 PATH 的引擎能被发现、安装建议不再给出本机跑不了的命令、失败证据(超时/缺包/未校验约束)不再缺失或静默、归档身份与名册口径可直接核对。**既有契约的冻结面未变**:失败码集合(11 个)、参数名与默认值、数据格式与目录结构均未改(由 `tests/audit-math-computation-contract.mjs` 与 `tests/audit-math-computation-parity.mjs` 断言);新增字段都是**附加**的,旧读者不受影响。DSH 支撑窗口不变,**无需迁移**。
4
4
 
5
5
  ## 概述
6
6
 
7
- - **真实引擎发现更可靠**:引擎发现顺序为 PATH → 宿主自带运行时 → **各操作系统的已知安装目录**,因此在默认目录安装、但没有加进 PATH 的引擎(例如 R)也能被发现。
7
+ - **真实引擎发现更可靠**:引擎发现顺序为 PATH → 宿主自带运行时 → **各操作系统的已知安装目录**,因此在默认目录安装、但没有加进 PATH 的引擎(例如 R)也能被发现。当前纳入已知目录的引擎为 **R / Octave / Julia / MATLAB**(以及 Windows 上的 Python);Maple / Wolfram 的安装目录布局不固定,未纳入。宿主也可以用可选的 `installRoots` 接口自行提供候选根,发现逻辑不再依赖插件进程的环境变量。
8
8
  - **不再给出跑不了的安装命令**:`MATH_ENGINE_NOT_FOUND` 只在本机的包管理器**确实存在**时才给出可执行命令,否则给出建议命令与官方地址,并说明原因。
9
9
  - **`probe` 不再"报喜不报忧"**:除了可用引擎,还会列出**已配置但本机未发现**的引擎及原因。
10
10
  - **失败证据完整**:`MATH_TIMEOUT` 与 `MATH_NONZERO_EXIT` 携带同样的证据字段,超时的部分输出在**响应与回执**里都能拿到。
@@ -20,7 +20,7 @@
20
20
  - 新增约束口径字段:成功响应与"缺包"失败都带 **`versionPolicy`** 与 **`constraintsNotEnforced`**(本次**未校验**的约束逐条列出;没有约束时为空数组)。
21
21
  - `MATH_TIMEOUT` 响应新增 **`stdout`**/**`stderr`**(按上限截断);回执 JSON 新增 **`partialStdout`**/**`partialStderr`**。
22
22
  - `MATH_ENGINE_NOT_FOUND` 的 `next` 新增 **`suggestedCommand`**、**`packageManager`**、**`packageManagerAvailable`**、**`note`**(`vendorUrl` 视引擎而定)。
23
- - `run` 响应新增 **`fileIsArchivedScript`**,并在 `mode:'file'` 指向归档脚本时给出 **`ARCHIVED_SCRIPT_RERUN`** 警告。
23
+ - `run` 响应新增 **`fileIsArchivedScript`**:当 `mode:'file'` 指向的是**归档副本**时,同时给出 **`ARCHIVED_SCRIPT_RERUN`** 警告,明确说明按设计那是一次**新归档**(新 id、attempt 1、没有历史回执)——要拿到"同一归档的新 attempt + 变更检测",请编辑**原来的源文件**并用 `mode:'file'` 指向**同一源路径**重跑。
24
24
  - v4:`status()` 新增 **`rosterVersion`** 与 **`frozenParticipants`**;`consensus` / `meeting` / `verify` 视图带各自的 `rosterVersion`。
25
25
  - v4:`paper` 视图新增 **`dirProjected`** / **`dirSource`** / **`readSideEffect`**,明确该路径是投影还是真实状态。
26
26
  - v2/v3:决策与子代理中断诊断新增 **`code`** 与 **`next`**(例如 `VIBE_MATH_DECISION_NOT_FOUND`,并说明队列现状);v4 的成员级调用新增 **`V4_NO_SUCH_RESIDENT`**(带当前编制与下一步建议)。
@@ -0,0 +1,67 @@
1
+ # dsh-vibe-math 2.7.3 — Release Notes (English)
2
+
3
+ > Previous release: 2.7.2. This is a **PATCH release containing fixes, wording corrections and verification depth only** — v5 institute **round numbering and mailbox delivery** no longer go wrong, paper finalisation and task compare-and-set failures now carry named consequences, v4 no longer fails silently when the Lean library index or the project marker cannot be written, installer output uses one language with exactly one line per action, and the **stale mailbox ordering** that survived in the documentation was corrected everywhere with an automated prose↔code pairing check. Parameter defaults, data formats and the directory layout are **unchanged** (asserted by `tests/audit-math-computation-contract.mjs` and `tests/audit-math-computation-parity.mjs`); every addition is **additive** or **test-surface only**, so existing readers are unaffected. There are **no breaking changes**, the DSH support window is unchanged, and **no migration is needed**.
4
+
5
+ ## Overview
6
+
7
+ - **The mailbox no longer loses messages**: acknowledgement happens **only after a successful send**; an unacknowledged message stays pending and is re-delivered on the next successful wake. Duplicate suppression uses the **injection marks** (`inboxInjected` / `inboxSuppressed`), and a round never prepends the same message twice.
8
+ - **Predictable round numbers**: a founding prompt carries the round the member **actually starts** (from `轮次 1`, never `轮次 0`); a **failed** start consumes no round and no longer **erases or resets** an existing member's count (after the host loses a child session, a rebuilt prompt continues the numbering, e.g. `轮次 2`).
9
+ - **Paper finalisation failures are traceable**: a failed write of a **required** artifact (`paper.md` / `paper.tex` / `paper.meta.json` / `paper.log.md`) produces a **named warning exactly once**, naming the artifact and the recovery path; the artifact list contains **only what actually landed**; re-running finalisation refills missing artifacts **idempotently** without multiplying warnings.
10
+ - **A refused task compare-and-set leaves no half-state**: when `expected_revision` is stale the task is **unchanged** (verified by reading back `revision` / `ownerId` / `status`).
11
+ - **A member path-contract mismatch is named**: when the documented member-library root differs from the root the framework actually reads and writes, the mismatch is surfaced by name — and that note now **reaches `report()` diagnostics** (it used to be queued and never shown).
12
+ - **v4 index write failures have a named consequence**: a failed Lean library index write is named **exactly once**, with `lib=` / `proved=` and the consequence that the index is **stale until the next successful rebuild**; that single site covers every caller and **does not change the return value** (the tool still answers with its scanned counts).
13
+ - **v4 project-marker write failures have a named consequence**: a failed write of the current-project marker `.current` is named once, with the consequence that the next session may load the previous project.
14
+ - **The documentation no longer describes the message-losing order**: the stale mailbox ordering (acknowledge first, build later) in the plan, the architecture diagram, the pseudocode block and the guard checklist was corrected to "**build first; acknowledge only after a successful send; no duplicate prepend within a round**", backed by an automated **prose↔code pairing check** (the old wording fails it, and it requires the implementation anchor `if (ok && prompt.pending.length) await ackPending(`).
15
+
16
+ ## Added
17
+
18
+ - A **per-preset machine-face field table** in the shipped `docs/status-report-fields.md` (columns: name / scope / which-views / meaning): v2 **20** rows, v3 **25** rows, v5 **43** rows (derived from each `status()`), while v4 states explicitly that it exposes **no** `fieldScopes`; the table is checked **in both directions** (every source field has a doc row; every doc row names a real source field).
19
+ - **Deeper verification in the gate**: it now runs **101 jobs = 44 suites + 57 probes/variants** (65 jobs = 44 + 21 at 2.7.2, recomputed from that tag's job-list rule), including shipped **mutant families** (`tests/*.mutants.mjs`) and `--self-probe` modes that run a **mutated copy** and require a **named** failure rather than only an exit code.
20
+ - **Audit seams that can target a copy**: several audits accept an environment variable pointing at a mutated copy (for example `MATH_COMPUTATION_MODULE`, `V5_PLUGIN`, `PERSONA_ROOT`, `INSTALLER_JS`), so evidence can be reproduced without editing repository files.
21
+ - **Documentation counts are derived and swept**: every `TOTAL <n>` in a live document must equal the value derived by `node tests/run-tests.mjs --counts`; timings must quote each family's **own** `TOTAL WALL TIME` line; **frozen historical release notes are exempt by name** (and that exemption list is itself asserted to be non-empty).
22
+
23
+ ## Changed
24
+
25
+ - **Mailbox ordering wording**: the v5 plan, the architecture diagram and the guard checklist now state "**build first, acknowledge later**", and the plan spells out the searchable code order (take pending → compose the block → build the round prompt → send → acknowledge only on success).
26
+ - **Installer output uses one language and one line per action**: a user-facing log **label** must not be ASCII-only (an English domain word inside a Chinese label is still fine); restore and cleanup are each reported **exactly once**; and "a pre-existing backup is not a failure" is now judged at the **report level** instead of by matching log text.
27
+ - **More conservative validation wording**: constraints that are only checked for existence are still described exactly that way — no "simplification" that would change the verdict.
28
+
29
+ ## Fixed
30
+
31
+ - **v5 mailbox: a failed wake could lose messages** → acknowledgement happens only after a successful send, unacknowledged messages stay queued for the next successful wake, and a round never prepends the same message twice. Guard: `tests/e2e-v5-round2.test.mjs` (a failed wake leaves the message pending) and the shipped family `tests/v5-institute-fixes.mutants.mjs`.
32
+ - **v5 round numbering** → the founding prompt carries the real round; a failed start neither consumes a round nor resets an existing count; a rebuild continues the numbering. Guard: `tests/e2e-v5-round2.test.mjs` (the rebuilt prompt reads `轮次 2`) and `tests/v5-institute-fixes.mutants.mjs` (two `spawnMember` families).
33
+ - **v5 paper finalisation** → a failed required-artifact write is named once (naming the artifact and the recovery path); the artifact list contains only what landed; re-running is idempotent and does not repeat the warning. Guard: the shipped suite `tests/e2e-v5-round2.test.mjs`.
34
+ - **v5 task compare-and-set** → after a stale `expected_revision` is refused the task is unchanged (verified by reading back `revision` / `ownerId` / `status`). Guard: `tests/v5-institute-fixes.mutants.mjs` (the CAS family).
35
+ - **v5 member path contract** → a mismatch between the documented root and the root actually used is named, and the note now **reaches `report()` diagnostics** (it used to be queued and never surfaced). Guard: `tests/e2e-v5-round2.test.mjs` and `tests/audit-v5-integrity.mjs`.
36
+ - **v4 Lean library index write failures were silent** → one named site, once, with `lib=` / `proved=` and the "stale until the next successful rebuild" consequence, covering every caller and leaving the return value untouched. Guard: the Lean-library-index section of `tests/formal-verify-v4.test.mjs` and the shipped family `tests/formal-verify-v4.mutants.mjs` (its 8th family reddens by name).
37
+ - **v4 `.current` marker write failures were silent** → named once, with the consequence that the next session may load the previous project. Guard: the current-project-marker section of `tests/formal-verify-v4.test.mjs` and `tests/formal-verify-v4.mutants.mjs`.
38
+ - **Rosters and verification surface** → the published **voter set** is asserted to agree with its `voterCount` and to have distinct ids; the **staff persona** is asserted to actually reach each member's persona and prompts. Guard: `tests/audit-participant-set-parity.mjs`, `tests/audit-persona-surface.test.mjs`.
39
+ - **Installer (see "Changed")** → restore and cleanup are each reported exactly once, and "a pre-existing backup is not a failure" is judged at report level. Guard: `tests/audit-installer-policy.test.mjs`, `tests/audit-installer-compat.test.mjs` and the shipped family `tests/audit-installer-assertions.mutants.mjs`.
40
+ - **Documentation drift** → all 8 places that still described the old mailbox order were corrected, plus a prose↔code pairing check. Guard: `tests/audit-v5-integrity.mjs`.
41
+
42
+ ## Compatibility & Migration
43
+
44
+ - **Breaking changes: none.** Parameter defaults, data formats and the directory layout are unchanged across all four presets.
45
+ - **Additive only**: the new documentation and verification surface (the field table, the mutant families and self-probes, the copy-targeting audit seams) do not change any runtime contract; any new response field is **additive**.
46
+ - **Migration: none needed.**
47
+ - The DSH support window is the same as 2.7.2 (see `engines.dsh` in `package.json`).
48
+
49
+ ## Known Limitations
50
+
51
+ - **This machine has no Lean / LaTeX engine, and none of Octave / Julia / MATLAB / Maple / Wolfram**: those faces were **not exercised locally**; the plugins report them honestly — `configured` lists the engines enabled by configuration, and `absent[]` (each entry carrying `why`) says why this machine does not have them.
52
+ - **The two scripted end-to-end live runs (v4 and v5) were bounded by resource limits (token cap / wall clock) and are recorded as non-results rather than passes**: behavioural coverage for **capacity refusal, interrupt, project-switch failure, the installer self-check and `/compact`** therefore rests on the **shipped suites**, while those runs served as placement and observability evidence.
53
+ - **Engine versions were not observed**: no supported engine is installed on this machine, so this release cannot report engine version readings.
54
+ - **Commercial engine templates** still need confirmation on a licensed machine and remain marked as requiring human confirmation.
55
+ - **Release notes before 2.7.0 are Chinese only** (see `README.en.md` for the English history index).
56
+
57
+ ## Verification
58
+
59
+ - `node tests/run-tests.mjs` — expected `TOTAL 101 PASS 101 FAIL 0` (44 suites + 57 probes/variants).
60
+ - Targeted guard entry points: `node tests/audit-v5-integrity.mjs --self-probe` (8/8), `node tests/audit-participant-set-parity.mjs --self-probe` (6/6), `node tests/audit-math-computation-parity.mjs --self-probe` (8/8), `node tests/audit-persona-surface.test.mjs` (276/0).
61
+ - The shipped **mutant families** (`tests/*.mutants.mjs`) each require a **named** failure for a single-site mutation; the `--self-probe` modes run a mutated copy and require the named assertion to redden.
62
+ - Host: DSH **0.2.0-rc.2**.
63
+ - Real engines: **not installed, not executed** (see "Known Limitations"); engine existence is always proven by listing directories or probing, never assumed.
64
+
65
+ ## Dependencies
66
+
67
+ - **No new runtime dependencies**; the DSH support window is unchanged.
@@ -0,0 +1,67 @@
1
+ # dsh-vibe-math 2.7.3 — 发布说明
2
+
3
+ > 上一版本:2.7.2。本版是**补丁版:只包含修复、口径纠正与验证深度**——v5 研究所的**轮次计数与邮箱投递**不再出错、论文定稿与任务 CAS 的失败有具名后果、v4 的 Lean 库索引与项目标记写失败不再静默、安装器对外输出统一为中文标签并做到"一个动作一行"、文档中残留的**旧邮箱顺序**全部纠正并有自动配对检查防止回潮。四套预设的**参数默认值、数据格式与目录结构未变**(由 `tests/audit-math-computation-contract.mjs` 与 `tests/audit-math-computation-parity.mjs` 断言);新增内容都是**附加**或**仅测试面**的,旧读者不受影响。**无破坏性变更**,DSH 支撑窗口不变,**无需迁移**。
4
+
5
+ ## 概述
6
+
7
+ - **邮箱不再丢消息**:确认(ack)改为**只在发送成功之后**发生;未被确认的消息保持 pending,会在下一次成功唤醒时重新投递。重复抑制由**注入标记**(`inboxInjected` / `inboxSuppressed`)负责,一轮之内不会把同一条消息 prepend 两遍。
8
+ - **轮次编号可预期**:新成员的创立提示词带上它**实际开始的轮次**(从 `轮次 1` 起,不再出现 `轮次 0`);**失败**的启动不再消耗轮次,也不会**抹掉或重置**既有成员的轮次计数(宿主丢失子会话后重建,提示词仍继续编号,例如 `轮次 2`)。
9
+ - **论文定稿失败可追溯**:必需产物(`paper.md` / `paper.tex` / `paper.meta.json` / `paper.log.md`)写入失败时给出**具名告警恰好一次**,点名产物与恢复途径;产物清单**只列真正落盘的**文件;重跑定稿**幂等**补齐缺失产物,且不会重复告警。
10
+ - **任务 CAS 拒绝不留半成品**:`expected_revision` 过期被拒时,任务**保持不变**(`revision` / `ownerId` / `status` 回读一致)。
11
+ - **成员路径契约不一致会被点名**:文档写的成员库根与框架实际读写的根不一致时按名给出提示,并且该提示**现在会进入 `report()` 的诊断**(此前只是入队、从不显现)。
12
+ - **v4 索引写失败有具名后果**:Lean 库索引写失败**恰好具名一次**,带 `lib=` / `proved=`,并说明"索引在下次成功重建前**是陈旧的**";该单点覆盖全部调用方,且**不影响返回值**(工具照旧返回扫描计数)。
13
+ - **v4 项目标记写失败有具名后果**:当前项目标记 `.current` 写失败**具名一次**,并说明后果——下一个会话可能加载到上一个项目。
14
+ - **文档不再描述会丢消息的顺序**:计划书、架构图、伪代码块与守卫清单中残留的旧邮箱顺序(先确认再构造)已全部改为"**先构造;仅在发送成功后确认;同一轮不重复 prepend**",并有自动的**文案↔代码配对检查**(旧措辞回来即失败,并要求实现锚点 `if (ok && prompt.pending.length) await ackPending(`)。
15
+
16
+ ## 新增
17
+
18
+ - 随包文档 `docs/status-report-fields.md` 新增**逐预设机器面字段表**(name / scope / which-views / meaning 四列):v2 **20** 行、v3 **25** 行、v5 **43** 行(按 `status()` 的顶层键派生),v4 则**明确声明它不暴露 `fieldScopes`**;该表由守卫**双向**核对(每个源码字段都有文档行;每条文档行都指向真实源码字段)。
19
+ - 门禁的**验证深度**:现在运行 **101 项作业 = 44 个套件 + 57 个探针/变体**(上一版 2.7.2 为 **65 项 = 44 + 21**,按该标签树的作业清单规则复算),其中包含随包发布的**变异族**(`tests/*.mutants.mjs`)与 `--self-probe` 模式:它们对**变异后的副本**运行并要求出现**具名失败**,而不是只看退出码。
20
+ - **可指向副本的审计缝**:多个审计可通过环境变量指向变异副本(例如 `MATH_COMPUTATION_MODULE`、`V5_PLUGIN`、`PERSONA_ROOT`、`INSTALLER_JS`),无需修改仓库文件即可复现证据。
21
+ - **文档计数改为派生并全量扫描**:live 文档里出现的每个 `TOTAL <n>` 必须等于 `node tests/run-tests.mjs --counts` 的派生值;时间必须引用**各族自己打印**的 `TOTAL WALL TIME` 行;**冻结的历史发布说明按名豁免**(豁免清单本身也断言非空)。
22
+
23
+ ## 变更
24
+
25
+ - **邮箱顺序口径**:v5 计划书、架构图与守卫清单统一为"**先构造、后确认**",并在计划书中以可检索的代码顺序给出(取待投递 → 组成框头块 → 构造本轮提示词 → 发送 → 仅成功时确认)。
26
+ - **安装器对外输出统一为中文标签**:面向用户的日志**标签**不得是纯 ASCII(英文领域词夹在中文标签里仍合规);**恢复与清理各自恰好报告一次**;"同一版本的既有备份不算失败"改为在**报告层**判定,而不是匹配日志文字。
27
+ - **校验口径更保守**:确认为"检查存在性"而非"求解版本"的约束保持原样,不引入会改变判定结果的"简化"。
28
+
29
+ ## 修复
30
+
31
+ - **v5 邮箱:失败的唤醒会丢消息** → 确认只在发送成功后发生,未确认的消息留在队列里等下一次成功唤醒重投;同一轮不重复 prepend。守卫:`tests/e2e-v5-round2.test.mjs`(失败的唤醒后消息仍为 pending)与随包族 `tests/v5-institute-fixes.mutants.mjs`。
32
+ - **v5 轮次编号** → 创立提示词带真实轮次;失败启动不消耗轮次、不重置既有计数;重建继续编号。守卫:`tests/e2e-v5-round2.test.mjs`(重建后的提示词读作 `轮次 2`)与 `tests/v5-institute-fixes.mutants.mjs`(两条 `spawnMember` 族)。
33
+ - **v5 论文定稿** → 必需产物写失败具名一次(点名产物与恢复途径);产物清单只含真正落盘项;重跑幂等、不重复告警。守卫:随包套件 `tests/e2e-v5-round2.test.mjs`。
34
+ - **v5 任务 CAS** → 过期 `expected_revision` 被拒后任务保持原状(回读 `revision` / `ownerId` / `status` 验证)。守卫:`tests/v5-institute-fixes.mutants.mjs`(CAS 相关族)。
35
+ - **v5 成员路径契约** → 文档根与实际读写根不一致时按名提示,并**进入 `report()` 诊断**(此前入队后从不显现)。守卫:`tests/e2e-v5-round2.test.mjs` 与 `tests/audit-v5-integrity.mjs`。
36
+ - **v4 Lean 库索引写失败静默** → 单点具名一次,带 `lib=` / `proved=` 与"陈旧至下次成功重建"的后果,覆盖全部调用方,且不改变返回值。守卫:`tests/formal-verify-v4.test.mjs`(Lean 库索引那一段)与随包族 `tests/formal-verify-v4.mutants.mjs`(第 8 条族按名变红)。
37
+ - **v4 当前项目标记 `.current` 写失败静默** → 具名一次并说明后果(下一个会话可能加载上一个项目)。守卫:`tests/formal-verify-v4.test.mjs`(当前项目标记那一段)与 `tests/formal-verify-v4.mutants.mjs`。
38
+ - **名册与验证面** → 公布的**投票者集合**被断言与其 `voterCount` 一致且 id 互异;**职员人设**被断言确实进入每位成员的人设与提示词。守卫:`tests/audit-participant-set-parity.mjs`、`tests/audit-persona-surface.test.mjs`。
39
+ - **安装器(见"变更")** → 恢复/清理各恰好一次、"既有备份不算失败"在报告层判定。守卫:`tests/audit-installer-policy.test.mjs`、`tests/audit-installer-compat.test.mjs` 与随包族 `tests/audit-installer-assertions.mutants.mjs`。
40
+ - **文档口径漂移** → 8 处仍描述旧邮箱顺序的位置全部纠正,并加上文案↔代码配对检查。守卫:`tests/audit-v5-integrity.mjs`。
41
+
42
+ ## 兼容性与迁移
43
+
44
+ - **破坏性变更:无。** 四套预设的参数默认值、数据格式、目录结构均未改变。
45
+ - **纯新增**:本版新增的文档与验证面(字段表、变异族与自探针、可指向副本的审计缝)都不改变运行时契约;新增响应字段若有也是**附加**的。
46
+ - **迁移:无需迁移。**
47
+ - DSH 支撑窗口与 2.7.2 相同(见 `package.json` 的 `engines.dsh`)。
48
+
49
+ ## 已知限制
50
+
51
+ - **本机没有 Lean / LaTeX 引擎,也没有 Octave / Julia / MATLAB / Maple / Wolfram**:这些面**未在本机执行**;插件会如实报告——用 `configured` 列出配置启用的引擎,用 `absent[]`(每项带 `why`)说明本机为何没有。
52
+ - **两次脚本化的端到端真机运行(v4 与 v5)因资源上限(token 上限 / 墙钟)中止,按"非结果"记录,而不是通过**:因此**容量拒绝、打断、项目切换失败、安装器自检与 `/compact`** 的行为覆盖依靠**随包套件**;那两次运行提供的是**落位与可观测性**证据。
53
+ - **引擎版本号未观测**:因为本机没有安装任何受支持的引擎,本版无法给出引擎版本读数。
54
+ - **商业引擎模板**仍需在持证机器上确认,默认标记为需人工确认。
55
+ - **2.7.0 之前的发布说明仅提供中文**(英文历史索引见 `README.en.md`)。
56
+
57
+ ## 验证方式
58
+
59
+ - `node tests/run-tests.mjs` —— 期望 `TOTAL 101 PASS 101 FAIL 0`(44 个套件 + 57 个探针/变体)。
60
+ - 针对性守卫入口:`node tests/audit-v5-integrity.mjs --self-probe`(8/8)、`node tests/audit-participant-set-parity.mjs --self-probe`(6/6)、`node tests/audit-math-computation-parity.mjs --self-probe`(8/8)、`node tests/audit-persona-surface.test.mjs`(276/0)。
61
+ - 随包**变异族**(`tests/*.mutants.mjs`)各自对单点变异要求**具名失败**;`--self-probe` 模式对变异副本运行并要求具名断言变红。
62
+ - 宿主机:DSH **0.2.0-rc.2**。
63
+ - 真机引擎:**未安装、未执行**(见"已知限制");引擎存在性一律以列目录/探测证明,绝不假设路径存在。
64
+
65
+ ## 依赖
66
+
67
+ - **无新增运行时依赖**;DSH 支撑窗口不变。