dsh-vibe-math 2.7.1 → 2.7.3
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.en.md +682 -690
- package/README.md +19 -27
- package/cordis.patch.yml +112 -16
- package/docs/AUDIT-CHECKLIST.md +744 -518
- package/docs/COMPAT-AUDIT-ROUND2.md +35 -9
- package/docs/COMPAT-AUDIT-ROUND3.md +154 -154
- package/docs/final-paper.md +172 -172
- package/docs/formal-verification.md +588 -588
- package/docs/math-computation.md +194 -163
- package/docs/parameter-schema.md +37 -0
- package/docs/release-notes/README.en.md +49 -0
- package/docs/release-notes/README.md +48 -0
- package/docs/release-notes/RELEASE-NOTES-2.7.2.en.md +72 -0
- package/docs/release-notes/RELEASE-NOTES-2.7.2.md +72 -0
- package/docs/release-notes/RELEASE-NOTES-2.7.3.en.md +67 -0
- package/docs/release-notes/RELEASE-NOTES-2.7.3.md +67 -0
- package/docs/release-notes/TEMPLATE.md +126 -0
- package/docs/status-report-fields.md +167 -0
- package/docs/test-timing.md +157 -154
- package/installer.js +27 -17
- package/package.json +55 -3
- package/prompt-corpus-persona/persona-corpus.json +9 -9
- package/prompt-corpus-persona/persona-corpus.md +225 -33
- package/prompt-corpus-v2/formal-verify-v2.json +305 -113
- package/prompt-corpus-v2/formal-verify-v2.md +2399 -279
- package/prompt-corpus-v3/formal-verify-v3.json +134 -110
- package/prompt-corpus-v3/formal-verify-v3.md +409 -141
- package/prompt-corpus-v4/formal-verify-v4.json +18 -18
- package/prompt-corpus-v4/formal-verify-v4.md +49 -44
- package/prompt-corpus-v5/prompt-corpus-v5.json +82 -82
- package/prompt-corpus-v5/prompt-corpus-v5.md +513 -259
- package/scripts/update-doc-counts.mjs +71 -0
- package/tests/audit-artifact-docs.mjs +72 -0
- package/tests/audit-artifact-docs.mutants.mjs +58 -0
- package/tests/audit-installer-assertions.mutants.mjs +63 -0
- package/tests/audit-installer-compat.test.mjs +52 -4
- package/tests/audit-installer-policy.test.mjs +41 -8
- package/tests/audit-math-computation-contract.mjs +107 -9
- package/tests/audit-math-computation-contract.mutants.mjs +106 -0
- package/tests/audit-math-computation-parity.mjs +164 -3
- package/tests/audit-math-computation-sensitivity.mjs +6 -4
- package/tests/audit-package-membership.mjs +57 -0
- package/tests/audit-package-membership.mutants.mjs +28 -0
- package/tests/audit-participant-set-parity.mjs +160 -0
- package/tests/audit-path-discipline.mjs +83 -0
- package/tests/audit-path-discipline.mutants.mjs +51 -0
- package/tests/audit-persona-sensitivity.mjs +14 -0
- package/tests/audit-persona-surface.mutants.mjs +69 -0
- package/tests/audit-persona-surface.test.mjs +63 -22
- package/tests/audit-prompt-duplication.mjs +143 -0
- package/tests/audit-prompt-duplication.mutants.mjs +50 -0
- package/tests/audit-prompt-invariants.mjs +43 -5
- package/tests/audit-readme-bilingual.test.mjs +152 -0
- package/tests/audit-readme-counts.mjs +95 -0
- package/tests/audit-readme-counts.mutants.mjs +52 -0
- package/tests/audit-registration.mjs +78 -0
- package/tests/audit-status-report-fields.mjs +172 -0
- package/tests/audit-status-report-fields.mutants.mjs +64 -0
- package/tests/audit-v3-registration-parity.mjs +156 -0
- package/tests/audit-v5-integrity.mjs +300 -13
- package/tests/audit-v5-lean-abstention.mjs +392 -0
- package/tests/audit-v5-lean-abstention.mutants.mjs +106 -0
- package/tests/audit-v5-prompt-duplication.mjs +88 -0
- package/tests/audit-v5-prompt-duplication.mutants.mjs +34 -0
- package/tests/audit-v5-sensitivity.mjs +15 -8
- package/tests/e2e-identity-a6.mutants.mjs +65 -0
- package/tests/e2e-v5-round2.test.mjs +566 -12
- package/tests/formal-verify-v2.test.mjs +91 -5
- package/tests/formal-verify-v3.mutants.mjs +117 -0
- package/tests/formal-verify-v3.test.mjs +85 -6
- package/tests/formal-verify-v4.mutants.mjs +152 -0
- package/tests/formal-verify-v4.test.mjs +628 -9
- package/tests/formal-verify-v5.test.mjs +68 -9
- package/tests/helpers/doc-counts-format.mjs +41 -0
- package/tests/helpers/math-computation-fake-seam.mjs +4 -0
- package/tests/math-computation-a1.mutants.mjs +72 -0
- package/tests/math-computation-archive-rerun.mutants.mjs +65 -0
- package/tests/math-computation-discovery.mutants.mjs +76 -0
- package/tests/math-computation-shared.test.mjs +396 -2
- package/tests/math-computation-v2.test.mjs +767 -0
- package/tests/math-computation-v3.test.mjs +759 -0
- package/tests/math-computation-v4.mutants.mjs +133 -0
- package/tests/math-computation-v4.test.mjs +739 -0
- package/tests/prompt-v5-integrity.test.mjs +13 -2
- package/tests/run-tests.mjs +139 -9
- package/tests/run-tests.mutants.mjs +70 -0
- package/tests/selfdrive-v5.mjs +53 -1
- package/tests/selfdrive-v5.mutants.mjs +132 -0
- package/tests/v2-fix-probes.mutants.mjs +100 -0
- package/tests/v2-fix-probes.test.mjs +1039 -0
- package/tests/v2-list-agents-and-next-step.mutants.mjs +106 -0
- package/tests/v3-fix-probes.mutants.mjs +95 -0
- package/tests/v3-fix-probes.test.mjs +891 -0
- package/tests/v5-institute-fixes.mutants.mjs +190 -0
- package/vibe-math-v2/agent.cordis.yml +62 -6
- package/vibe-math-v2/math-computation.js +229 -29
- package/vibe-math-v2/math-engines.js +12 -12
- package/vibe-math-v2/vibe-math-v2.js +458 -119
- package/vibe-math-v2//345/256/236/347/216/260/346/226/271/346/241/210.md +5 -1
- package/vibe-math-v3/agent.cordis.yml +72 -6
- package/vibe-math-v3/math-computation.js +229 -29
- package/vibe-math-v3/math-engines.js +12 -12
- package/vibe-math-v3/vibe-math-v3.js +482 -139
- package/vibe-math-v4/agent.cordis.yml +44 -8
- package/vibe-math-v4/math-computation.js +229 -29
- package/vibe-math-v4/math-engines.js +12 -12
- package/vibe-math-v4/vibe-math-v4.js +245 -52
- package/vibe-math-v4//345/256/236/347/216/260/346/226/271/346/241/210.md +2 -0
- package/vibe-math-v5/agent.cordis.yml +46 -12
- package/vibe-math-v5/math-computation.js +229 -29
- package/vibe-math-v5/math-engines.js +12 -12
- package/vibe-math-v5/vibe-math-v5.js +1307 -243
- package/vibe-math-v5//345/256/236/347/216/260/346/226/271/346/241/210.md +1728 -1655
- package/vibe-math-v5//346/236/266/346/236/204/345/233/276.md +693 -693
package/docs/test-timing.md
CHANGED
|
@@ -1,154 +1,157 @@
|
|
|
1
|
-
# 测试与脚本耗时基线(决定每次跑什么、怎么跑)
|
|
2
|
-
|
|
3
|
-
> **为什么要写下来**:这套仓库的测试耗时极不均匀(一个套件 100 s,大多数不到 2 s;探针脚本要
|
|
4
|
-
> 把同一套件跑十几遍)。不看数据就会犯两种错:要么每次都全量顺序跑(浪费 30 分钟),要么为了
|
|
5
|
-
> 省时间去砍测例(降低覆盖)。**先看基线,再选策略**;每次跑完把实测时间跟本表对一下,偏差大
|
|
6
|
-
> 就更新本表。
|
|
7
|
-
|
|
8
|
-
## 1. 怎么跑(并行是默认)
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
node tests/run-tests.mjs # 全部套件 + 全部探针(tests/ 下每个 .mjs),并行(并发 = min(4, CPU 核数);命令都从**仓库根**执行)
|
|
12
|
-
node tests/run-tests.mjs --only formal # 只跑名字含 formal 的项(套件与探针一起筛)
|
|
13
|
-
node tests/run-tests.mjs --concurrency=6 # 手动指定并发
|
|
14
|
-
node tests/run-tests.mjs --json # 机器可读汇总(含 skippedNeedsArgs / devCheckout)
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
`run-tests.mjs` 的收集规则(Round B 起):`tests/` 下**每个** `.mjs` 都会被跑——
|
|
18
|
-
|
|
19
|
-
- `*.test.mjs` 是**套件**;其余 `.mjs` 是**探针/审计**(灵敏度变异、注册面、自驱动守卫);
|
|
20
|
-
- 只有登记在 runner 的 `NEEDS_ARGS` 里的脚本才会被跳过(当前只有 `audit-tool-exec.mjs`:它必须带
|
|
21
|
-
`<preset-js> <tool-name>` 才能跑)。跳过项**每次运行都会打印出来**;在开发检出(存在 `.git`)里
|
|
22
|
-
该登记失效会**直接报错退出**,所以改名不可能悄悄把一条守卫踢出发布门禁;
|
|
23
|
-
- 需要参数的变体登记在 `VARIANTS`:`audit-registration.mjs` 四个预设各跑一次(裸跑只查 v3)、
|
|
24
|
-
`audit-prompt-invariants.mjs --self-probe`、以及 `audit-v3-registration-parity.mjs --self-probe`
|
|
25
|
-
(这条**成功 = 退出码 1**:它注入真实变异并要求守卫变红,runner 用 `expectExit` 表达)。
|
|
26
|
-
|
|
27
|
-
### 1.1 随包发布 vs 仅仓库(`npm pack --dry-run --json`)
|
|
28
|
-
|
|
29
|
-
`package.json` 的 `files` 只发 `tests/` 的一个**子集**(发布物共 **119** 个文件,其中 `tests/` **23** 项),
|
|
30
|
-
所以安装用户跑 `node tests/run-tests.mjs` 得到的是子集的结果——runner 会把缺失的跳过项打印出来,
|
|
31
|
-
不会静默少跑:
|
|
32
|
-
|
|
33
|
-
- **随包(23 项)**:`run-tests.mjs`、`audit-formal-sensitivity.mjs`、`audit-persona-sensitivity.mjs`、
|
|
34
|
-
`audit-prompt-invariants.mjs`、`audit-spec-traceability.mjs`、`audit-v5-integrity.mjs`、
|
|
35
|
-
`audit-v5-sensitivity.mjs`、`selfdrive-v5.mjs`、`audit-math-computation-parity.mjs`、
|
|
36
|
-
`audit-math-computation-contract.mjs`、`audit-math-computation-sensitivity.mjs`、
|
|
37
|
-
`helpers/math-computation-fake-seam.mjs`;套件 **11** 个:`audit-installer-compat`、
|
|
38
|
-
`audit-installer-policy`、`audit-persona-surface`、`audit-preset-rows`、`e2e-v5-round2`、
|
|
39
|
-
`formal-verify-v2`、`formal-verify-v3`、`formal-verify-v4`、`formal-verify-v5`、`prompt-v5-integrity`、
|
|
40
|
-
`math-computation-shared`。
|
|
41
|
-
- **仅仓库(不发)**:其余
|
|
42
|
-
`math-computation-v2|v3|v4|v5`、`audit-fuzz-helpers` 之外的若干 `audit-*`……)与 7 个脚本(`audit-fuzz-helpers`、
|
|
43
|
-
`audit-registration`、`audit-roundtrip-idempotence`、`audit-tool-exec`、
|
|
44
|
-
`audit-v3-registration-parity`、`selfdrive-v3`、`selfdrive-v4`)。
|
|
45
|
-
- 因此**完整门禁只能在开发检出里跑**;发布物里的子集是"用户可自查"的一部分,不是全部证据。
|
|
46
|
-
(`audit-fuzz-helpers.mjs` 在 2.3.13 时曾随包发布;现在不在 `files` 里。)
|
|
47
|
-
|
|
48
|
-
## 2. 基线(本机:4 核 / Windows,实测)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
|
53
|
-
|
|
54
|
-
| `tests/
|
|
55
|
-
| `tests/audit-
|
|
56
|
-
| `tests/audit-
|
|
57
|
-
| `tests/audit-
|
|
58
|
-
| `tests/audit-
|
|
59
|
-
| `tests/audit-
|
|
60
|
-
| `tests/audit-
|
|
61
|
-
| `tests/audit-
|
|
62
|
-
| `tests/
|
|
63
|
-
| `tests/
|
|
64
|
-
| `tests/
|
|
65
|
-
| `tests/
|
|
66
|
-
| `tests/
|
|
67
|
-
| `tests/
|
|
68
|
-
| `tests/
|
|
69
|
-
| `tests/
|
|
70
|
-
| `tests/
|
|
71
|
-
| `tests/
|
|
72
|
-
| `tests/math-computation-
|
|
73
|
-
| `tests/math-computation-
|
|
74
|
-
| `tests/
|
|
75
|
-
| `tests/
|
|
76
|
-
| `tests/
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
|
89
|
-
|
|
90
|
-
| `e2e-
|
|
91
|
-
| `formal-verify-
|
|
92
|
-
| `e2e-
|
|
93
|
-
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
- `
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
`
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
`
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
- `audit-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
|
148
|
-
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
1
|
+
# 测试与脚本耗时基线(决定每次跑什么、怎么跑)
|
|
2
|
+
|
|
3
|
+
> **为什么要写下来**:这套仓库的测试耗时极不均匀(一个套件 100 s,大多数不到 2 s;探针脚本要
|
|
4
|
+
> 把同一套件跑十几遍)。不看数据就会犯两种错:要么每次都全量顺序跑(浪费 30 分钟),要么为了
|
|
5
|
+
> 省时间去砍测例(降低覆盖)。**先看基线,再选策略**;每次跑完把实测时间跟本表对一下,偏差大
|
|
6
|
+
> 就更新本表。
|
|
7
|
+
|
|
8
|
+
## 1. 怎么跑(并行是默认)
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
node tests/run-tests.mjs # 全部套件 + 全部探针(tests/ 下每个 .mjs),并行(并发 = min(4, CPU 核数);命令都从**仓库根**执行)
|
|
12
|
+
node tests/run-tests.mjs --only formal # 只跑名字含 formal 的项(套件与探针一起筛)
|
|
13
|
+
node tests/run-tests.mjs --concurrency=6 # 手动指定并发
|
|
14
|
+
node tests/run-tests.mjs --json # 机器可读汇总(含 skippedNeedsArgs / devCheckout)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`run-tests.mjs` 的收集规则(Round B 起):`tests/` 下**每个** `.mjs` 都会被跑——
|
|
18
|
+
|
|
19
|
+
- `*.test.mjs` 是**套件**;其余 `.mjs` 是**探针/审计**(灵敏度变异、注册面、自驱动守卫);
|
|
20
|
+
- 只有登记在 runner 的 `NEEDS_ARGS` 里的脚本才会被跳过(当前只有 `audit-tool-exec.mjs`:它必须带
|
|
21
|
+
`<preset-js> <tool-name>` 才能跑)。跳过项**每次运行都会打印出来**;在开发检出(存在 `.git`)里
|
|
22
|
+
该登记失效会**直接报错退出**,所以改名不可能悄悄把一条守卫踢出发布门禁;
|
|
23
|
+
- 需要参数的变体登记在 `VARIANTS`:`audit-registration.mjs` 四个预设各跑一次(裸跑只查 v3)、
|
|
24
|
+
`audit-prompt-invariants.mjs --self-probe`、以及 `audit-v3-registration-parity.mjs --self-probe`
|
|
25
|
+
(这条**成功 = 退出码 1**:它注入真实变异并要求守卫变红,runner 用 `expectExit` 表达)。
|
|
26
|
+
|
|
27
|
+
### 1.1 随包发布 vs 仅仓库(`npm pack --dry-run --json`)
|
|
28
|
+
|
|
29
|
+
`package.json` 的 `files` 只发 `tests/` 的一个**子集**(发布物共 **119** 个文件,其中 `tests/` **23** 项),
|
|
30
|
+
所以安装用户跑 `node tests/run-tests.mjs` 得到的是子集的结果——runner 会把缺失的跳过项打印出来,
|
|
31
|
+
不会静默少跑:
|
|
32
|
+
|
|
33
|
+
- **随包(23 项)**:`run-tests.mjs`、`audit-formal-sensitivity.mjs`、`audit-persona-sensitivity.mjs`、
|
|
34
|
+
`audit-prompt-invariants.mjs`、`audit-spec-traceability.mjs`、`audit-v5-integrity.mjs`、
|
|
35
|
+
`audit-v5-sensitivity.mjs`、`selfdrive-v5.mjs`、`audit-math-computation-parity.mjs`、
|
|
36
|
+
`audit-math-computation-contract.mjs`、`audit-math-computation-sensitivity.mjs`、
|
|
37
|
+
`helpers/math-computation-fake-seam.mjs`;套件 **11** 个:`audit-installer-compat`、
|
|
38
|
+
`audit-installer-policy`、`audit-persona-surface`、`audit-preset-rows`、`e2e-v5-round2`、
|
|
39
|
+
`formal-verify-v2`、`formal-verify-v3`、`formal-verify-v4`、`formal-verify-v5`、`prompt-v5-integrity`、
|
|
40
|
+
`math-computation-shared`。
|
|
41
|
+
- **仅仓库(不发)**:其余 **27** 个套件(v2/v3/v4 的 e2e、`selfdrive-v3`/`v4`、v2/v3 修复探针、
|
|
42
|
+
`math-computation-v2|v3|v4|v5`、`audit-fuzz-helpers` 之外的若干 `audit-*`……)与 7 个脚本(`audit-fuzz-helpers`、
|
|
43
|
+
`audit-registration`、`audit-roundtrip-idempotence`、`audit-tool-exec`、
|
|
44
|
+
`audit-v3-registration-parity`、`selfdrive-v3`、`selfdrive-v4`)。
|
|
45
|
+
- 因此**完整门禁只能在开发检出里跑**;发布物里的子集是"用户可自查"的一部分,不是全部证据。
|
|
46
|
+
(`audit-fuzz-helpers.mjs` 在 2.3.13 时曾随包发布;现在不在 `files` 里。)
|
|
47
|
+
|
|
48
|
+
## 2. 基线(本机:4 核 / Windows,实测)
|
|
49
|
+
|
|
50
|
+
> **最后一次复核:`167b52d`**。表中"串行/并行"是**该次复核**的实测值:套件行在**重测前**视为"上次复核值",引用前请重测或写明复核点;**变异族行**一律引用族自己打印的 `TOTAL WALL TIME` 行(不估算、不跨运行拼接)。这与 §1.1/runner 计数由 `--counts` 派生的口径一致。
|
|
51
|
+
|
|
52
|
+
| 脚本 | 串行(sum) | 并行(wall) | 实测输出 |
|
|
53
|
+
|---|---|---|---|
|
|
54
|
+
| `tests/run-tests.mjs`(**101 项作业**(job count)= 44 套件 + 57 探针/变体;**由 `--counts` 派生**) | ≈ 424 s(历史基线) | **≈ 121 s**(历史基线;当前实测墙钟 ≈ 200 s,并发 4) | `TOTAL 101 PASS 101 FAIL 0 (suites 44 · probes 57)`;实测 `wall 120.7s · sum 424.2s`,关键路径 = `e2e-v4-fixes`(≈ 98 s) |
|
|
55
|
+
| `tests/audit-formal-sensitivity.mjs`(49 探针,自带并发 4;v2 12 / v3 12 / v4 12 / v5 13) | ≈ 1035 s | **260.7 s**(实测,x3.97) | 关键路径 = v2/v3 的 `require` 探针(各 ≈75 s);全 49 条按预期变红、0 问题 |
|
|
56
|
+
| `tests/audit-v5-sensitivity.mjs`(39 探针,串行) | ≈ 101 s | — | 每条 = 一次被测套件重跑 |
|
|
57
|
+
| `tests/audit-persona-sensitivity.mjs`(16 探针) | ≈ 4.4 s | — | 本身很快,不需要并行 |
|
|
58
|
+
| `tests/audit-prompt-invariants.mjs`(157 条) | ≈ 1.9 s | — | 静态 |
|
|
59
|
+
| `tests/audit-prompt-invariants.mjs --self-probe`(5 探针) | ≈ 7.4 s | — | 每个探针 = 一次自我重跑 |
|
|
60
|
+
| `tests/audit-spec-traceability.mjs`(94 条) | ≈ 0.2 s | — | 静态 |
|
|
61
|
+
| `tests/audit-v5-integrity.mjs` | ≈ 0.6 s | — | 静态审计(含扫描器自检) |
|
|
62
|
+
| `tests/audit-registration.mjs`(4 个预设各一次) | ≈ 1.0 s | — | 裸跑只查 v3,所以 runner 跑四个变体 |
|
|
63
|
+
| `tests/audit-v3-registration-parity.mjs`(+ `--self-probe`) | ≈ 0.3 s | — | 自探针**成功 = exit 1**(变异后守卫必须变红) |
|
|
64
|
+
| `tests/prompt-v5-integrity.test.mjs` | ≈ 2.2 s | — | 虚拟时钟下生成 v5 语料(语料字节稳定;**stdout 里的会议成员顺序仍是运行间随机的**,只有落盘语料是逐字节确定的) |
|
|
65
|
+
| `tests/e2e-v5-round2.test.mjs` | **≈ 16.3 s**(`167b52d` 实测,ALL GREEN;**断言条数不写在这里** —— 它随轮次变化,跑一次即知) | — | v5 e2e:邮箱/唤醒、轮次计数(§[47] 失败唤醒仍 pending、§[51] 重建后仍 `轮次 2`)、预置快照不被覆盖、命名研究所、失败轮次等;**早先此处记 ≈3.2 s 是旧口径**,正文小节也已随轮次更新 |
|
|
66
|
+
| `tests/v5-institute-fixes.mutants.mjs`(**变异族**) | — | **族自报 `TOTAL WALL TIME` ≈300 s**(本轮 298959 ms;复核方 299649 / 295216 ms —— ~1.5% 机器差异,**不要合成单点数字**) | 11/11 族具名变红、`hangs=[]`、`skipped=[]`、`ALL MUTANTS RED AS REQUIRED`;900 s 覆盖(见 `docs/AUDIT-CHECKLIST.md` 的跑测超时行) |
|
|
67
|
+
| `tests/host-failure-paths.test.mjs` | ≈ 6.3 s | — | 真实宿主的失败路径(`kind:'error'`、`/v4 set` 键校验、失败轮次不算进展) |
|
|
68
|
+
| `tests/v4-mailbox-stall.test.mjs` | ≈ 7.1 s | — | `sendMessage` 拒绝后必须重投并唤醒(control + treatment 各一个 host) |
|
|
69
|
+
| `tests/v2-fix-probes.test.mjs` | ≈ 8.6 s | — | v2 的 flat 等权均值 / ≥2 名验证者 / runShell 失败分支(26 条) |
|
|
70
|
+
| `tests/v2-path-escape.test.mjs` | ≈ 2.2 s | — | 验证日志路径逃逸(7 条) |
|
|
71
|
+
| `tests/v2-tool-cap.test.mjs` | ≈ 0.4 s | — | 能力表来自真实组合、*MaxToolCalls 只是提示(10 条) |
|
|
72
|
+
| `tests/math-computation-v2.test.mjs` | ≈ 1.7 s | — | v2 接线:六参数/双注册层/回执/归档→编辑→重跑/跨会话隔离(含 mutant 说明在文件头) |
|
|
73
|
+
| `tests/math-computation-v3.test.mjs` | ≈ 1.7 s | — | v3 同上(dual-layer + `TOOL_DESC` 描述 parity) |
|
|
74
|
+
| `tests/math-computation-v4.test.mjs` | ≈ 2.5 s | — | v4:每会话一个模块实例 + 隔离断言 + `vibe_v4_set` 闭集 + 单点注册 |
|
|
75
|
+
| `tests/math-computation-v5.test.mjs` | ≈ 1.4 s | — | v5:闭集 `vibe_v5_set`、研究所根回执、会话隔离(7 个 mutant) |
|
|
76
|
+
| `tests/math-computation-shared.test.mjs` | ≈ 0.1 s | — | 共享模块契约(参数/失败码/argv/回执/归档/并发/override/路径守卫),走假 subprocess seam |
|
|
77
|
+
| `tests/audit-math-computation-parity.mjs` | ≈ 0.1 s | — | 四份副本字节一致 + canonical 一致 + 两条安装线 + 描述符不变式(44 条) |
|
|
78
|
+
| `tests/audit-math-computation-contract.mjs` | ≈ 0.2 s | — | 跨预设接线(含 set-schema **属性级**检查与 defaults 漂移检查) |
|
|
79
|
+
| `tests/audit-math-computation-sensitivity.mjs` | ≈ 25 s | — | 21 个模块级变异,每条都要求具名断言变红(控制组必须绿) |
|
|
80
|
+
|
|
81
|
+
> 上表 `run-tests` 的 `≈424 s / ≈121 s` 两列是 **当时的门禁规模**(44 个套件、21 个探针/变体) 时的实测(2026 年 math_computation
|
|
82
|
+
> P1/P2a + 审计修复轮之后)。`audit-formal-sensitivity`(49 探针,实测 wall 260.7 s)与 `e2e-v4-fixes`(≈ 98 s)
|
|
83
|
+
> 是两条最长的独立路径;两者都不在 `run-tests` 的默认集合里时,整轮 wall 由 `e2e-v4-fixes` 决定。
|
|
84
|
+
> 数字**形状**(`TOTAL <n> … suites <s> · probes <p>`;具体值以 runner 每次运行的输出为准,本文件**不复述**)——本文件里出现的每个 `TOTAL <n>` 都由 `tests/audit-readme-counts.mjs` 与 `--counts` 对账(历史数字只出现在冻结的 `docs/release-notes/**` 里,按名排除)。
|
|
85
|
+
|
|
86
|
+
单套件耗时(并行时的关键路径按此排序):
|
|
87
|
+
|
|
88
|
+
| 套件 | 耗时 | 备注 |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| `e2e-v4-fixes.test.mjs` | **≈ 104 s** | 9 个用例是**轮次采样**型(如 T13 采样 400 轮、T19/T25 多轮);时间 ≈ 轮数 × 框架自身的 40 ms 计时粒度 |
|
|
91
|
+
| `formal-verify-v2.test.mjs` | **≈ 43 s** | 曾为 186 s:见 §3 |
|
|
92
|
+
| `e2e-v3.test.mjs` | ≈ 21 s | |
|
|
93
|
+
| `e2e-regression.test.mjs` | ≈ 14 s | |
|
|
94
|
+
| `formal-verify-v3.test.mjs` | ≈ 13 s | |
|
|
95
|
+
| `e2e-business.test.mjs` / `e2e-d9-d13.test.mjs` | ≈ 13 s | |
|
|
96
|
+
| 其余套件 | ≤ 10 s | 其中绝大多数 < 2 s |
|
|
97
|
+
|
|
98
|
+
> 优化前:全量回归 ≈ 5.5 min(串行,`formal-verify-v2` 单独 186 s);
|
|
99
|
+
> 探针脚本 ≈ **38 min**(49 条串行,其中 12 条 × `formal-verify-v2` 162 s)。
|
|
100
|
+
> 现在:**一套 `node tests/run-tests.mjs` ≈ 3.5 min 覆盖套件 + 探针**(探针单独跑仍是 ≈2.6 min)。
|
|
101
|
+
|
|
102
|
+
## 3. 已经做过的优化(别再重复踩)
|
|
103
|
+
|
|
104
|
+
1. **v2 套件 186 s → 32 s**(5.8×,断言数不变 261):
|
|
105
|
+
- 插件用 `setInterval(..., 1000)` 轮询调度器,套件的每次 `tick()` 都得等满 1 秒;
|
|
106
|
+
套件现在**只把 `setInterval` 快进到 25 ms**(自己的 `sleep` 用 `setTimeout`,不受影响),
|
|
107
|
+
插件内部"该不该 tick"仍按真实 200 ms 下限判断,**生产代码零改动**;
|
|
108
|
+
- `verifyWithDebate` 的 16 次循环**从不提前退出**(判据是 `autoDone` 之类永远不会发生的条件),
|
|
109
|
+
于是每次调用都烧满 16×1.3 s ≈ 21 s。现在按"连续 3 轮没有新 followup"提前退出。
|
|
110
|
+
2. **v4-fixes 的 12 个轮询循环加了"安静即停"**(105 s → 98 s):原判据
|
|
111
|
+
`autoDone || running===false` 对活着的 run 永远不成立,循环只是空转;
|
|
112
|
+
现在连续 100 次无待答 followup 就停(`V4_IDLE_POLLS` 可调)。
|
|
113
|
+
**再往下压就要砍采样深度了**——那 9 个慢用例(T13/T19/T22/T23/T25/T27/T2/T9/T20)是在
|
|
114
|
+
观察"多轮之后某个指令**没有**泄漏/重复",轮数是它们的不变式本体,不要再动。
|
|
115
|
+
3. **两个 runner 并行**(Round A):探针 38 min → 2.6 min(sum 612 s,wall 154.6 s,x3.96);
|
|
116
|
+
全量回归 5.5 min → 1.9 min(sum 221.5 s,wall 111.5 s,x1.99)。
|
|
117
|
+
4. **虚拟时钟**(`prompt-v5-integrity.test.mjs`):v5 研究所由 `ctx.timeout` + `Date.now()`
|
|
118
|
+
驱动,真实时钟下"哪个成员被心跳/会议唤醒"取决于负载与毫秒差 → **随包语料每跑一次都变**(无法 diff,
|
|
119
|
+
真实缺陷会被淹没)。套件现在把 `ctx.timeout` 接到**虚拟时钟**、`sleep(n)` 推进虚拟时间:
|
|
120
|
+
套件 **7–9 s → 1.7 s**,且语料连续 6 次运行**字节一致**。语料写入端另加**全序排序**
|
|
121
|
+
(kind → owner → prompt),使文件成为"记录集合"的纯函数——只按 kind 排序时,同 kind 内仍会随
|
|
122
|
+
异步 drain 顺序变化(真实事故:两条会议提示词顺序互换)。
|
|
123
|
+
> 想给别的套件套用同一手法前请注意:若套件的等待助手用 `Date.now()` 做**超时判据**、又用
|
|
124
|
+
> `setInterval` 轮询(例如 `e2e-v4-fixes.test.mjs` 的 `waitFor`),冻结时钟会让判据永不超时;
|
|
125
|
+
> 那种情况必须连**轮询定时器**一起虚拟化,不能只改 `sleep`。
|
|
126
|
+
5. **语料里的随机 id 也要归一化**(Round B,`formal-verify-v4.test.mjs`):v4 的
|
|
127
|
+
`propose_task` 用 `Math.random` 造 `t-<8 位 hex>`,语料把 `[YOU CLAIMED TASK t-…]` 逐字写盘,
|
|
128
|
+
于是**每次跑测试都会改写随包语料**(`git status` 永远有 `prompt-corpus-v4/*`,且违反
|
|
129
|
+
`AUDIT-CHECKLIST` §2.4"连续两次哈希相同")。`scrub()` 现在把它归一化成 `<TASKID>`,并断言
|
|
130
|
+
"语料里既没有裸 id、也真的有 `<TASKID>`"。连续两次运行哈希相同(`d3381886…` / `e6c4e445…`)。
|
|
131
|
+
|
|
132
|
+
## 4. 并行安全(为什么可以并发)
|
|
133
|
+
|
|
134
|
+
- 每个套件/探针都自建 `mkdtempSync` 工作区,互不共享状态;
|
|
135
|
+
- **会写语料的套件必须给不同的语料目录**:`V2_CORPUS_DIR` / `V3_CORPUS_DIR` / `V4_CORPUS_DIR` /
|
|
136
|
+
`V5_CORPUS_DIR`。探针 runner 为**每个探针**分配独立目录,否则同一套件的并发实例会互相覆盖语料;
|
|
137
|
+
- `audit-v5-sensitivity.mjs` 现在**自己**把 `V5_CORPUS_DIR` 指向临时目录:被变异的插件绝不能把
|
|
138
|
+
自己的提示词倒进随包语料;
|
|
139
|
+
- `audit-persona-sensitivity.mjs` 用 `PERSONA_ROOT` 指向变异副本,且在覆盖模式下**不写**语料;
|
|
140
|
+
- `audit-formal-sensitivity.mjs` 同样给每个探针独立的 `V{2,3,4,5}_CORPUS_DIR`;
|
|
141
|
+
- `audit-prompt-invariants.mjs --self-probe` 用 `PROMPT_INVARIANTS_MUTATE`(JSON `[rel, from, to]`)
|
|
142
|
+
在**内存里**变异一个文件并自我重跑,**不碰磁盘**,因此可与任何东西并发;
|
|
143
|
+
变异串里不要用 NUL 分隔(环境变量不允许 NUL 字节)。
|
|
144
|
+
|
|
145
|
+
## 5. 策略建议(按目的选最小代价的组合)
|
|
146
|
+
|
|
147
|
+
| 目的 | 跑什么 | 预期 |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| 改了某个架构的插件 | `node tests/run-tests.mjs --only <vN>` + `node tests/audit-formal-sensitivity.mjs --only=vN` | 30 s – 3.5 min |
|
|
150
|
+
| 改了提示词/人设 | `node tests/run-tests.mjs --only persona --only prompt` + `node tests/audit-persona-sensitivity.mjs` | ≈ 20 s |
|
|
151
|
+
| **改了任何工具的参数 schema / 参数处理** | `node tests/run-tests.mjs --only audit-prompt-invariants --only formal` | ≈ 60 s(v2 套件占大头) |
|
|
152
|
+
| 改了 `tests/` 下的 runner/守卫 | `node tests/run-tests.mjs`(**必须**:它现在同时跑套件与探针,任何一条守卫变红都会让门禁失败) | **≈ 3.5 min** |
|
|
153
|
+
| 只想快速看提示词/文档有没有漂移 | `node tests/audit-prompt-invariants.mjs && node tests/audit-spec-traceability.mjs` | **< 3 s** |
|
|
154
|
+
| 只想知道"快不快" | `node tests/run-tests.mjs --json` | 读 `wallSeconds` / `slowest` |
|
|
155
|
+
|
|
156
|
+
**每次跑完都要看那几行 timing**:如果某个套件突然比基线慢很多,先怀疑新增的固定等待,
|
|
157
|
+
再怀疑它是否在等一个永远不会发生的条件(这正是 v2 套件 186 s 的成因)。
|
package/installer.js
CHANGED
|
@@ -219,8 +219,14 @@ function withTimeout(promise, ms) {
|
|
|
219
219
|
})
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
async function detectDshVersion(ctx) {
|
|
223
|
-
|
|
222
|
+
export async function detectDshVersion(ctx) {
|
|
223
|
+
// Installer review (finding): several sources can report this host's version, and "first available
|
|
224
|
+
// wins" hid a CONFLICTING host state (the same lesson the `engines.dsh`-vs-`dshReleases` rule already
|
|
225
|
+
// records below). Probe them ALL, keep the first available authoritative (priority unchanged), and
|
|
226
|
+
// record the rest so a disagreement is visible instead of silent.
|
|
227
|
+
const probes = []
|
|
228
|
+
const add = (source, version) => { const v = (version === undefined || version === null) ? '' : String(version).trim(); if (v) probes.push({ source: source, version: v }) }
|
|
229
|
+
try { add('DSH_VERSION', process.env.DSH_VERSION) } catch (e) {}
|
|
224
230
|
try {
|
|
225
231
|
const pm = (ctx && ctx.get) ? ctx.get('pluginManager') : undefined
|
|
226
232
|
if (pm && typeof pm.listBundles === 'function') {
|
|
@@ -228,21 +234,24 @@ async function detectDshVersion(ctx) {
|
|
|
228
234
|
// stalling this row's activation (non-fatal either way — see the constant's comment).
|
|
229
235
|
const bundles = await withTimeout(pm.listBundles(), LIST_BUNDLES_TIMEOUT_MS)
|
|
230
236
|
const host = (bundles || []).find((b) => b && (b.name === '@deepseek-ai/dsh-base' || b.name === '@deepseek-ai/dsh'))
|
|
231
|
-
if (host && host.version)
|
|
237
|
+
if (host && host.version) add('pluginManager:' + host.name, host.version)
|
|
232
238
|
}
|
|
233
239
|
} catch (e) { /* no such service, or it cannot list yet */ }
|
|
234
240
|
try {
|
|
235
241
|
const boot = await import('@deepseek-ai/dsh-app-boot')
|
|
236
|
-
if (boot && typeof boot.getDshRuntimeVersion === 'function')
|
|
237
|
-
return { version: String(boot.getDshRuntimeVersion()), source: 'dsh-app-boot' }
|
|
238
|
-
}
|
|
242
|
+
if (boot && typeof boot.getDshRuntimeVersion === 'function') add('dsh-app-boot', boot.getDshRuntimeVersion())
|
|
239
243
|
} catch (e) { /* host packages are not reachable from this plugin's module scope */ }
|
|
240
244
|
try {
|
|
241
245
|
const p = __require.resolve('@deepseek-ai/dsh/package.json')
|
|
242
|
-
|
|
243
|
-
if (v) return { version: v, source: '@deepseek-ai/dsh/package.json' }
|
|
246
|
+
add('@deepseek-ai/dsh/package.json', JSON.parse(readFileSync(p, 'utf8')).version || '')
|
|
244
247
|
} catch (e) { /* not a global install layout — rely on the capability check */ }
|
|
245
|
-
return undefined
|
|
248
|
+
if (!probes.length) return undefined
|
|
249
|
+
const first = probes[0]
|
|
250
|
+
const conflicts = probes.slice(1).filter((x) => x.version !== first.version)
|
|
251
|
+
const out = { version: first.version, source: first.source, probes: probes.slice() }
|
|
252
|
+
// Assemble the disagreement slot ONLY when there is one (no empty slot for agreeing hosts).
|
|
253
|
+
if (conflicts.length) out.disagreement = { primary: first.source, conflicts: conflicts.slice() }
|
|
254
|
+
return out
|
|
246
255
|
}
|
|
247
256
|
|
|
248
257
|
/**
|
|
@@ -524,7 +533,7 @@ async function checkHostCapabilities(ctx, logger) {
|
|
|
524
533
|
if (problems.length > 0) {
|
|
525
534
|
logger?.warn?.('[dsh-vibe-math] 宿主自检:' + problems.length + ' 项不满足(' + problems.join(';') + ')。v2/v3/v4/v5 预设依赖这些宿主服务/API,旧版或未经声明兼容的 DSH 可能无法挂载' + (dshVersion ? '(当前检测到 DSH v' + dshVersion + ',来源 ' + versionSource + ',本包适配 ' + (supported.length ? supported.join(' / ') : '(未声明)') + ')' : '') + '。')
|
|
526
535
|
} else {
|
|
527
|
-
logger?.info?.('[dsh-vibe-math]
|
|
536
|
+
logger?.info?.('[dsh-vibe-math] 宿主自检通过(“自检通过” ≠ “兼容”:这里只证明服务/API 的**形状**,不证明**行为**语义):subagents / agents / tools / commands / fs 服务及关键 API 均可用' + (degradations.length === 0 ? ',可选服务 subprocess / sandboxPolicy / compaction 亦齐备' : '(可选服务有缺失,见上方警告)') + (dshVersion ? '(当前 DSH v' + dshVersion + ',来源 ' + versionSource + ';本包已声明兼容 ' + supported.join(' / ') + ')' : '') + '。')
|
|
528
537
|
}
|
|
529
538
|
return { dshVersion, versionSource, mechanism }
|
|
530
539
|
}
|
|
@@ -729,7 +738,8 @@ export async function apply(ctx) {
|
|
|
729
738
|
if (unreadableStale.length > 0) cleanupNotes.push(unreadableStale.length + ' 个文件**无法读取**(既不能证明是本安装器写入的,也无法备份),已跳过删除并保留原文件:' + unreadableStale.join(', '))
|
|
730
739
|
if (keptUserFiles > 0) cleanupNotes.push(keptUserFiles + ' 个记为用户所有的文件被保留(' + [...keptUserDirs].join(', ') + '),要清理请手动删除')
|
|
731
740
|
if (removedFiles > 0 || removedDirs.length > 0 || cleanupNotes.length > 0) {
|
|
732
|
-
|
|
741
|
+
// 约定:安装器面向用户的日志统一中文(英文片段混进中文句子会让用户读到半句话)。
|
|
742
|
+
logger?.info?.('[dsh-vibe-math] 预设清理:从 ' + removedDirs.length + ' 个已不再随包发布的过期预设目录(' + removedDirs.map(d => d.split(/[\\/]/).pop()).join(', ') + ') 中删除 ' + removedFiles + ' 个文件' +
|
|
733
743
|
(cleanupNotes.length > 0 ? ';' + cleanupNotes.join(';') : '') + '。')
|
|
734
744
|
}
|
|
735
745
|
|
|
@@ -751,12 +761,12 @@ export async function apply(ctx) {
|
|
|
751
761
|
: ''
|
|
752
762
|
|
|
753
763
|
if (isUpgrade) {
|
|
754
|
-
logger?.info?.('[dsh-vibe-math]
|
|
764
|
+
logger?.info?.('[dsh-vibe-math] 预设自动更新:版本 ' + fromVersion + ' → ' + pkgVersion +
|
|
755
765
|
' — 新增 ' + installed + ' 个文件,更新 ' + updated + ' 个文件。' +
|
|
756
766
|
editClause + unknownClause +
|
|
757
767
|
'新版本 preset 将在新会话生效。')
|
|
758
768
|
} else if (isBaseline) {
|
|
759
|
-
logger?.info?.('[dsh-vibe-math]
|
|
769
|
+
logger?.info?.('[dsh-vibe-math] 预设基线:已刷新 ' + (installed + updated) + ' file(s) to v' + pkgVersion +
|
|
760
770
|
(replacedEdits.length > 0
|
|
761
771
|
? ',其中 ' + replacedEdits.length + ' 个原有文件与随包版本不同' +
|
|
762
772
|
(backupFailures.length === 0 ? ',原文已备份在 ' + backupsDir
|
|
@@ -768,16 +778,16 @@ export async function apply(ctx) {
|
|
|
768
778
|
// SAME VERSION, and BOTH facts are reported: a missing file being restored must not hide the
|
|
769
779
|
// drift notice (the audit's repro: the log said "restored 1" and never mentioned the drift).
|
|
770
780
|
const parts = []
|
|
771
|
-
if (installed > 0) parts.push('
|
|
781
|
+
if (installed > 0) parts.push('还原了 ' + installed + ' 个缺失的预设文件')
|
|
772
782
|
if (kept > 0) {
|
|
773
|
-
parts.push(kept + '
|
|
783
|
+
parts.push(kept + ' 个文件与随包副本不同,已保持原样(v' + pkgVersion + ' 未变)' +
|
|
774
784
|
(userEditedKept > 0 ? ',其中 ' + userEditedKept + ' 个是安装之后的改动(记为用户所有:弃用 preset 的清理不会删除它们)' : '') +
|
|
775
785
|
';下一次版本变更会先备份原文再替换')
|
|
776
786
|
}
|
|
777
|
-
logger?.info?.('[dsh-vibe-math]
|
|
787
|
+
logger?.info?.('[dsh-vibe-math] 预设文件:' + parts.join(';') + '。')
|
|
778
788
|
}
|
|
779
789
|
/* the host self-check ran at the top of apply() — it also decides the preset mechanism */
|
|
780
790
|
} catch (err) {
|
|
781
|
-
logger?.warn?.('[dsh-vibe-math]
|
|
791
|
+
logger?.warn?.('[dsh-vibe-math] 预设安装/更新失败:' + String((err && err.message) || err))
|
|
782
792
|
}
|
|
783
793
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-vibe-math",
|
|
3
3
|
"description": "Multi-agent mathematical problem-solving & verification frameworks for DeepSeek Harness — FOUR agent presets in one install: vibe-math-v2 (probability-driven, classic: qs.json + Propos knowledge base + explorer→solver→review/debate verdict), vibe-math-v3 (THIRD-generation, classic: paper-style Markdown knowledge base with Problems/Progress/Propos/Methods/Verified + planner-agent scheduling that decides the next N actions + universal theory/method invention library + agents write their own Markdown directly via a per-file write lock), and vibe-math-v4 (FOURTH-generation: persistent self-organizing resident subagents that message & meet to decide all tasks, verify only by unanimous consensus, /compact at a context threshold, and stop only when all agree the problem is solved), and vibe-math-v5 (FIFTH-generation research institute: an academician as the organizational centre who decomposes and ASSIGNS work and chairs meetings; permanent researchers who hold the vote and may hire/fire their own temp workers; temp workers with no vote; a group chat and meetings; a durable per-recipient mailbox; a compare-and-set task DAG; and a boolean m-vote consensus rule where an object enters Verified/ only when at least m voting members agree AND every one of them returns exactly 1 or exactly 0). Installing this bundle auto-installs all four presets (v1 was removed at v2.0.0). Each preset also writes a FINAL PAPER by default when its run concludes — and does so BEFORE the run is marked complete: on v4/v5 the team co-authors its parts, merges them, cross-reviews, and the editor named by paperEditor finalises; the output is Paper/<run or institute id>/{paper.md,paper.tex,paper.pdf when a LaTeX engine is detected,paper.meta.json,paper.log.md} (params finalPaper/paperFormat/paperLanguage/paperCompilePdf/paperLatexCommand, plus paperEditor on v4/v5; see docs/final-paper.md).",
|
|
4
|
-
"version": "2.7.
|
|
4
|
+
"version": "2.7.3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": "^22.19.0 || >=24.0.0",
|
|
@@ -36,8 +36,51 @@
|
|
|
36
36
|
"docs/formal-verification.md",
|
|
37
37
|
"docs/final-paper.md",
|
|
38
38
|
"docs/math-computation.md",
|
|
39
|
+
"docs/parameter-schema.md",
|
|
40
|
+
"docs/status-report-fields.md",
|
|
39
41
|
"tests/audit-math-computation-parity.mjs",
|
|
42
|
+
"tests/audit-participant-set-parity.mjs",
|
|
43
|
+
"tests/audit-readme-bilingual.test.mjs",
|
|
44
|
+
"tests/audit-v3-registration-parity.mjs",
|
|
45
|
+
"tests/audit-registration.mjs",
|
|
46
|
+
"tests/math-computation-v2.test.mjs",
|
|
47
|
+
"tests/math-computation-v3.test.mjs",
|
|
48
|
+
"tests/math-computation-v4.test.mjs",
|
|
49
|
+
"tests/v2-fix-probes.test.mjs",
|
|
50
|
+
"tests/v3-fix-probes.test.mjs",
|
|
51
|
+
"tests/audit-prompt-duplication.mjs",
|
|
52
|
+
"tests/audit-prompt-duplication.mutants.mjs",
|
|
53
|
+
"tests/audit-v5-lean-abstention.mjs",
|
|
54
|
+
"tests/audit-v5-lean-abstention.mutants.mjs",
|
|
55
|
+
"tests/audit-v5-prompt-duplication.mutants.mjs",
|
|
56
|
+
"tests/v3-fix-probes.mutants.mjs",
|
|
57
|
+
"tests/v2-fix-probes.mutants.mjs",
|
|
58
|
+
"tests/audit-package-membership.mjs",
|
|
59
|
+
"tests/audit-package-membership.mutants.mjs",
|
|
60
|
+
"tests/audit-v5-prompt-duplication.mjs",
|
|
61
|
+
"tests/math-computation-a1.mutants.mjs",
|
|
62
|
+
"tests/e2e-identity-a6.mutants.mjs",
|
|
63
|
+
"tests/v5-institute-fixes.mutants.mjs",
|
|
64
|
+
"tests/formal-verify-v4.mutants.mjs",
|
|
65
|
+
"tests/formal-verify-v3.mutants.mjs",
|
|
66
|
+
"tests/math-computation-v4.mutants.mjs",
|
|
67
|
+
"tests/selfdrive-v5.mutants.mjs",
|
|
68
|
+
"tests/audit-readme-counts.mjs",
|
|
69
|
+
"tests/audit-readme-counts.mutants.mjs",
|
|
70
|
+
"tests/helpers/doc-counts-format.mjs",
|
|
71
|
+
"tests/audit-artifact-docs.mjs",
|
|
72
|
+
"tests/audit-artifact-docs.mutants.mjs",
|
|
73
|
+
"tests/audit-status-report-fields.mjs",
|
|
74
|
+
"tests/audit-status-report-fields.mutants.mjs",
|
|
75
|
+
"tests/audit-installer-assertions.mutants.mjs",
|
|
76
|
+
"tests/audit-persona-surface.mutants.mjs",
|
|
77
|
+
"tests/math-computation-discovery.mutants.mjs",
|
|
78
|
+
"tests/math-computation-archive-rerun.mutants.mjs",
|
|
79
|
+
"tests/v2-list-agents-and-next-step.mutants.mjs",
|
|
80
|
+
"tests/audit-path-discipline.mutants.mjs",
|
|
81
|
+
"tests/audit-path-discipline.mjs",
|
|
40
82
|
"tests/audit-math-computation-contract.mjs",
|
|
83
|
+
"tests/audit-math-computation-contract.mutants.mjs",
|
|
41
84
|
"tests/audit-math-computation-sensitivity.mjs",
|
|
42
85
|
"tests/math-computation-shared.test.mjs",
|
|
43
86
|
"tests/helpers/math-computation-fake-seam.mjs",
|
|
@@ -67,6 +110,7 @@
|
|
|
67
110
|
"prompt-corpus-v5/prompt-corpus-v5.md",
|
|
68
111
|
"tests/prompt-v5-integrity.test.mjs",
|
|
69
112
|
"tests/run-tests.mjs",
|
|
113
|
+
"tests/run-tests.mutants.mjs",
|
|
70
114
|
"screenshots.json",
|
|
71
115
|
"tests/selfdrive-v5.mjs",
|
|
72
116
|
"vibe-math-v2/实现方案.md",
|
|
@@ -135,11 +179,19 @@
|
|
|
135
179
|
"tests/audit-installer-compat.test.mjs",
|
|
136
180
|
"tests/audit-installer-policy.test.mjs",
|
|
137
181
|
"scripts/build-preset-rows.mjs",
|
|
182
|
+
"scripts/update-doc-counts.mjs",
|
|
138
183
|
"preset-declaration.js",
|
|
139
184
|
"tests/audit-preset-rows.test.mjs",
|
|
140
185
|
"docs/COMPAT-AUDIT-ROUND3.md",
|
|
141
186
|
"docs/release-notes/RELEASE-NOTES-2.7.1.md",
|
|
142
|
-
"docs/release-notes/RELEASE-NOTES-2.7.1.en.md"
|
|
187
|
+
"docs/release-notes/RELEASE-NOTES-2.7.1.en.md",
|
|
188
|
+
"docs/release-notes/TEMPLATE.md",
|
|
189
|
+
"docs/release-notes/README.md",
|
|
190
|
+
"docs/release-notes/README.en.md",
|
|
191
|
+
"docs/release-notes/RELEASE-NOTES-2.7.2.md",
|
|
192
|
+
"docs/release-notes/RELEASE-NOTES-2.7.2.en.md",
|
|
193
|
+
"docs/release-notes/RELEASE-NOTES-2.7.3.md",
|
|
194
|
+
"docs/release-notes/RELEASE-NOTES-2.7.3.en.md"
|
|
143
195
|
],
|
|
144
196
|
"license": "MIT",
|
|
145
197
|
"keywords": [
|
|
@@ -169,7 +221,7 @@
|
|
|
169
221
|
},
|
|
170
222
|
"minVersion": "0.1.2-alpha.4",
|
|
171
223
|
"testedVersion": "0.2.0-rc.2",
|
|
172
|
-
"compatNote": "v2.7.1
|
|
224
|
+
"compatNote": "v2.7.3 补丁版:只含修复与验证加固,既有行为契约不变。① v5 邮袋:确认(ack)只在发送成功后发生,未确认的消息下次仍会重投(此前失败唤醒可能丢信);同一轮不重复 prepend。② v5 入会与恢复:入会提示带真实轮次(从 轮次 1 起,不再出现 轮次 0),失败启动不消耗轮次;失败恢复不再清空既有编号(重建后从原编号继续)。③ v5 论文定稿:必需产物(paper.md/paper.tex/paper.meta.json/paper.log.md)写失败会具名告警一次并说明后果与补偿路径,产物清单只列真正落盘者,重跑幂等补写且不重复告警。④ v5 任务 CAS:被拒的陈旧 expected_revision 不改变任务(回读 revision/ownerId/status 不变)。⑤ v5 成员库路径契约:文档根与框架实际根不一致会被具名指出,且该提示会进入 report() 诊断。⑥ v4:Lean 库索引写失败具名一次(带 lib=/proved= 与 STALE until the next successful rebuild),覆盖全部调用点且不改变工具返回值;当前项目标记(.current)写失败同样具名一次。⑦ 安装器用户可见输出只用中文标签,每个动作只报一次;备份与既有文件判定改为报告级。⑧ 文档中 8 处仍描述「先 ack 再构造」的旧顺序已改正,并新增文↔码配对检查防止回流。参数名与默认值、数据格式、目录结构均未变;DSH 支撑窗口不变;无需迁移。",
|
|
173
225
|
"compatibility": {
|
|
174
226
|
"dshReleases": {
|
|
175
227
|
"0.1.2-alpha.4": "compatible",
|