dsh-vibe-math 2.3.11 → 2.3.13
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.
- package/README.md +17 -40
- package/{AUDIT-CHECKLIST.md → docs/AUDIT-CHECKLIST.md} +323 -304
- package/docs/COMPAT-AUDIT-ROUND2.md +325 -0
- package/docs/generate_framework_diagram_v2.py +114 -0
- package/docs/generate_framework_diagram_v3.py +127 -0
- package/{RELEASE-NOTES-2.1.0.md → docs/release-notes/RELEASE-NOTES-2.1.0.md} +143 -143
- package/{RELEASE-NOTES-2.2.0.md → docs/release-notes/RELEASE-NOTES-2.2.0.md} +266 -266
- package/{RELEASE-NOTES-2.2.1.md → docs/release-notes/RELEASE-NOTES-2.2.1.md} +43 -43
- package/{RELEASE-NOTES-2.2.2.md → docs/release-notes/RELEASE-NOTES-2.2.2.md} +88 -88
- package/{RELEASE-NOTES-2.3.0.md → docs/release-notes/RELEASE-NOTES-2.3.0.md} +207 -207
- package/{RELEASE-NOTES-2.3.1.md → docs/release-notes/RELEASE-NOTES-2.3.1.md} +134 -134
- package/{RELEASE-NOTES-2.3.10.md → docs/release-notes/RELEASE-NOTES-2.3.10.md} +105 -105
- package/{RELEASE-NOTES-2.3.11.md → docs/release-notes/RELEASE-NOTES-2.3.11.md} +57 -57
- package/docs/release-notes/RELEASE-NOTES-2.3.12.md +80 -0
- package/docs/release-notes/RELEASE-NOTES-2.3.13.md +137 -0
- package/{RELEASE-NOTES-2.3.2.md → docs/release-notes/RELEASE-NOTES-2.3.2.md} +145 -145
- package/{RELEASE-NOTES-2.3.3.md → docs/release-notes/RELEASE-NOTES-2.3.3.md} +115 -115
- package/{RELEASE-NOTES-2.3.4.md → docs/release-notes/RELEASE-NOTES-2.3.4.md} +69 -69
- package/{RELEASE-NOTES-2.3.5.md → docs/release-notes/RELEASE-NOTES-2.3.5.md} +63 -63
- package/{RELEASE-NOTES-2.3.6.md → docs/release-notes/RELEASE-NOTES-2.3.6.md} +66 -66
- package/{RELEASE-NOTES-2.3.7.md → docs/release-notes/RELEASE-NOTES-2.3.7.md} +59 -59
- package/{RELEASE-NOTES-2.3.8.md → docs/release-notes/RELEASE-NOTES-2.3.8.md} +45 -45
- package/{RELEASE-NOTES-2.3.9.md → docs/release-notes/RELEASE-NOTES-2.3.9.md} +70 -70
- package/docs/test-timing.md +18 -17
- package/installer.js +258 -53
- package/package.json +50 -40
- package/{audit-formal-sensitivity.mjs → tests/audit-formal-sensitivity.mjs} +342 -342
- package/tests/audit-installer-compat.test.mjs +136 -0
- package/tests/audit-installer-policy.test.mjs +245 -0
- package/{audit-persona-sensitivity.mjs → tests/audit-persona-sensitivity.mjs} +249 -249
- package/{audit-persona-surface.test.mjs → tests/audit-persona-surface.test.mjs} +349 -349
- package/{audit-prompt-invariants.mjs → tests/audit-prompt-invariants.mjs} +508 -508
- package/{audit-spec-traceability.mjs → tests/audit-spec-traceability.mjs} +193 -193
- package/{audit-v5-integrity.mjs → tests/audit-v5-integrity.mjs} +448 -448
- package/{audit-v5-sensitivity.mjs → tests/audit-v5-sensitivity.mjs} +384 -384
- package/{e2e-v5-round2.test.mjs → tests/e2e-v5-round2.test.mjs} +521 -521
- package/{formal-verify-v2.test.mjs → tests/formal-verify-v2.test.mjs} +1315 -1315
- package/{formal-verify-v3.test.mjs → tests/formal-verify-v3.test.mjs} +1257 -1257
- package/{formal-verify-v4.test.mjs → tests/formal-verify-v4.test.mjs} +1082 -1082
- package/{formal-verify-v5.test.mjs → tests/formal-verify-v5.test.mjs} +708 -708
- package/{prompt-v5-integrity.test.mjs → tests/prompt-v5-integrity.test.mjs} +3 -3
- package/{run-tests.mjs → tests/run-tests.mjs} +121 -118
- package/{selfdrive-v5.mjs → tests/selfdrive-v5.mjs} +470 -470
- package/vibe-math-v4//345/256/236/347/216/260/346/226/271/346/241/210.md +1 -1
- package/vibe-math-v5//345/256/236/347/216/260/346/226/271/346/241/210.md +1 -1
- package/vibe-math-v5//346/236/266/346/236/204/345/233/276.md +1 -1
- package//347/244/272/344/276/213/345/233/276//345/256/236/351/231/205/344/275/277/347/224/250/347/244/272/344/276/213-/351/225/277/346/210/252/345/233/276.png +0 -0
- package//347/244/272/344/276/213/345/233/276//346/241/206/346/236/266/345/233/276-v2.png +0 -0
- package//347/244/272/344/276/213/345/233/276//346/241/206/346/236/266/345/233/276-v3.png +0 -0
- /package/{RELEASE-NOTES-2.0.22.md → docs/release-notes/RELEASE-NOTES-2.0.22.md} +0 -0
|
@@ -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`。
|
package/docs/test-timing.md
CHANGED
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
## 1. 怎么跑(并行是默认)
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
-
node run-tests.mjs # 全部 *.test.mjs
|
|
12
|
-
node run-tests.mjs --only formal # 只跑名字含 formal 的套件
|
|
13
|
-
node run-tests.mjs --concurrency=6 # 手动指定并发
|
|
14
|
-
node audit-formal-sensitivity.mjs # 49 条不变式探针,并行(--concurrency=N / --only=<preset> / --list)
|
|
15
|
-
node audit-persona-sensitivity.mjs # 11 条提示词面探针(串行,本身只要几秒)
|
|
16
|
-
node audit-prompt-invariants.mjs # 静态:四套的提示词/工具面不变式 + 扫描器自检(< 0.1s)
|
|
17
|
-
node audit-prompt-invariants.mjs --self-probe # 证明上面那 157 条不变式真的会变红(5 个自探针)
|
|
18
|
-
node audit-spec-traceability.mjs # 静态:规格/README ↔ 代码可追溯(< 0.1s)
|
|
19
|
-
node audit-v5-integrity.mjs # 静态:v5 完整性/理念门禁 + 扫描器解析级自检(≈0.5 s)
|
|
11
|
+
node tests/run-tests.mjs # 全部 *.test.mjs(在 tests/ 下),并行(并发 = min(4, CPU 核数);命令都从**仓库根**执行)
|
|
12
|
+
node tests/run-tests.mjs --only formal # 只跑名字含 formal 的套件
|
|
13
|
+
node tests/run-tests.mjs --concurrency=6 # 手动指定并发
|
|
14
|
+
node tests/audit-formal-sensitivity.mjs # 49 条不变式探针,并行(--concurrency=N / --only=<preset> / --list)
|
|
15
|
+
node tests/audit-persona-sensitivity.mjs # 11 条提示词面探针(串行,本身只要几秒)
|
|
16
|
+
node tests/audit-prompt-invariants.mjs # 静态:四套的提示词/工具面不变式 + 扫描器自检(< 0.1s)
|
|
17
|
+
node tests/audit-prompt-invariants.mjs --self-probe # 证明上面那 157 条不变式真的会变红(5 个自探针)
|
|
18
|
+
node tests/audit-spec-traceability.mjs # 静态:规格/README ↔ 代码可追溯(< 0.1s)
|
|
19
|
+
node tests/audit-v5-integrity.mjs # 静态:v5 完整性/理念门禁 + 扫描器解析级自检(≈0.5 s)
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
两个并行 runner 都会打印**每项耗时 + 汇总(wall / sum / speed-up / 最慢几项)**。跑完请读这几行。
|
|
@@ -25,14 +25,15 @@ node audit-v5-integrity.mjs # 静态:v5 完整性/理念门禁 +
|
|
|
25
25
|
|
|
26
26
|
| 脚本 | 串行(sum) | 并行(wall) | 实测输出 |
|
|
27
27
|
|---|---|---|---|
|
|
28
|
-
| `run-tests.mjs`(
|
|
28
|
+
| `tests/run-tests.mjs`(26 个套件) | 225.8 s | **109.7 s**(并发 4,speed-up x2.06) | 关键路径 = `e2e-v4-fixes` 95.9 s |
|
|
29
|
+
| `tests/audit-installer-policy.test.mjs` | ≈ 1 s | — | 在临时 DSH_HOME 里驱动真实安装器(复制 4 套预设 × 2 个版本) |
|
|
29
30
|
| `audit-formal-sensitivity.mjs`(49 探针) | 612.0 s | **154.6 s**(并发 4,speed-up x3.96) | 关键路径 = 12 个 v2 探针(每个 ≈32 s) |
|
|
30
31
|
| `audit-persona-sensitivity.mjs`(11 探针) | ≈ 5 s | — | 本身很快,不需要并行 |
|
|
31
32
|
| `audit-prompt-invariants.mjs`(157 条,含 X5–X8b 扫描器自检) | 0.4 s | — | 静态 |
|
|
32
33
|
| `audit-prompt-invariants.mjs --self-probe`(5 探针) | 1.5 s | — | 每个探针 = 一次自我重跑(0.3 s) |
|
|
33
34
|
| `audit-spec-traceability.mjs`(94 条) | 0.3 s | — | 静态 |
|
|
34
35
|
| `audit-v5-integrity.mjs` | ≈ 0.5 s | — | 静态审计(含扫描器自检) |
|
|
35
|
-
| `prompt-v5-integrity.test.mjs` | 1.6 s | — | 虚拟时钟下生成 v5
|
|
36
|
+
| `prompt-v5-integrity.test.mjs` | 1.6 s | — | 虚拟时钟下生成 v5 语料(语料字节稳定;**stdout 里的会议成员顺序仍是运行间随机的**,只有落盘语料是逐字节确定的) |
|
|
36
37
|
|
|
37
38
|
> 优化前:全量回归 ≈ 5.5 min(串行,`formal-verify-v2` 单独 186 s);
|
|
38
39
|
> 探针脚本 ≈ **38 min**(49 条串行,其中 12 条 × `formal-verify-v2` 162 s)。
|
|
@@ -90,12 +91,12 @@ node audit-v5-integrity.mjs # 静态:v5 完整性/理念门禁 +
|
|
|
90
91
|
|
|
91
92
|
| 目的 | 跑什么 | 预期 |
|
|
92
93
|
|---|---|---|
|
|
93
|
-
| 改了某个架构的插件 | `node run-tests.mjs --only <vN>` + `node audit-formal-sensitivity.mjs --only=vN` | 30 s – 2 min |
|
|
94
|
-
| 改了提示词/人设 | `node run-tests.mjs --only persona --only prompt` + `node audit-persona-sensitivity.mjs` | ≈ 15 s |
|
|
95
|
-
| **改了任何工具的参数 schema / 参数处理** | `node audit-prompt-invariants.mjs --self-probe` + `node run-tests.mjs --only formal` | ≈ 40 s(v2 套件占大头) |
|
|
96
|
-
| 改了共享契约 / 发版前 | `node run-tests.mjs` + `node audit-formal-sensitivity.mjs` + `node audit-persona-sensitivity.mjs` + `node audit-prompt-invariants.mjs --self-probe` + `node audit-spec-traceability.mjs` + `node audit-v5-integrity.mjs` | ≈ 4.5 min |
|
|
97
|
-
| 只想快速看提示词/文档有没有漂移 | `node audit-prompt-invariants.mjs && node audit-spec-traceability.mjs` | **< 0.5 s** |
|
|
98
|
-
| 只想知道"快不快" | `node run-tests.mjs --json` | 读 `wallSeconds` / `slowest` |
|
|
94
|
+
| 改了某个架构的插件 | `node tests/run-tests.mjs --only <vN>` + `node tests/audit-formal-sensitivity.mjs --only=vN` | 30 s – 2 min |
|
|
95
|
+
| 改了提示词/人设 | `node tests/run-tests.mjs --only persona --only prompt` + `node tests/audit-persona-sensitivity.mjs` | ≈ 15 s |
|
|
96
|
+
| **改了任何工具的参数 schema / 参数处理** | `node tests/audit-prompt-invariants.mjs --self-probe` + `node tests/run-tests.mjs --only formal` | ≈ 40 s(v2 套件占大头) |
|
|
97
|
+
| 改了共享契约 / 发版前 | `node tests/run-tests.mjs` + `node tests/audit-formal-sensitivity.mjs` + `node tests/audit-persona-sensitivity.mjs` + `node tests/audit-prompt-invariants.mjs --self-probe` + `node tests/audit-spec-traceability.mjs` + `node tests/audit-v5-integrity.mjs` | ≈ 4.5 min |
|
|
98
|
+
| 只想快速看提示词/文档有没有漂移 | `node tests/audit-prompt-invariants.mjs && node tests/audit-spec-traceability.mjs` | **< 0.5 s** |
|
|
99
|
+
| 只想知道"快不快" | `node tests/run-tests.mjs --json` | 读 `wallSeconds` / `slowest` |
|
|
99
100
|
|
|
100
101
|
**每次跑完都要看那几行 timing**:如果某个套件突然比基线慢很多,先怀疑新增的固定等待,
|
|
101
102
|
再怀疑它是否在等一个永远不会发生的条件(这正是 v2 套件 186 s 的成因)。
|