dsh-vibe-math 2.4.0 → 2.5.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.
- package/README.en.md +29 -29
- package/README.md +31 -30
- package/SECURITY.md +56 -0
- package/cordis.patch.yml +38 -15
- package/docs/AUDIT-CHECKLIST.md +518 -429
- package/docs/COMPAT-AUDIT-ROUND3.md +16 -1
- package/docs/release-notes/RELEASE-NOTES-2.4.1.md +129 -0
- package/docs/release-notes/RELEASE-NOTES-2.5.0.md +173 -0
- package/docs/test-timing.md +73 -40
- package/installer.js +225 -45
- package/package.json +6 -3
- package/preset-declaration.js +38 -7
- package/prompt-corpus-persona/persona-corpus.json +9 -9
- package/prompt-corpus-persona/persona-corpus.md +69 -23
- package/prompt-corpus-v2/formal-verify-v2.json +116 -92
- package/prompt-corpus-v2/formal-verify-v2.md +240 -93
- package/prompt-corpus-v3/formal-verify-v3.json +81 -81
- package/prompt-corpus-v3/formal-verify-v3.md +288 -1111
- package/prompt-corpus-v4/formal-verify-v4.json +38 -8
- package/prompt-corpus-v4/formal-verify-v4.md +157 -25
- package/prompt-corpus-v5/prompt-corpus-v5.json +17 -17
- package/prompt-corpus-v5/prompt-corpus-v5.md +32 -26
- package/tests/audit-installer-compat.test.mjs +70 -4
- package/tests/audit-installer-policy.test.mjs +229 -4
- package/tests/audit-persona-sensitivity.mjs +11 -4
- package/tests/audit-persona-surface.test.mjs +5 -1
- package/tests/audit-v5-sensitivity.mjs +47 -6
- package/tests/e2e-v5-round2.test.mjs +354 -0
- package/tests/formal-verify-v2.test.mjs +54 -2
- package/tests/formal-verify-v3.test.mjs +63 -2
- package/tests/formal-verify-v4.test.mjs +120 -4
- package/tests/run-tests.mjs +104 -23
- package/vibe-math-v2/agent.cordis.yml +11 -5
- package/vibe-math-v2/preset.yml +1 -1
- package/vibe-math-v2/vibe-math-v2.js +607 -160
- package/vibe-math-v2//345/256/236/347/216/260/346/226/271/346/241/210.md +20 -4
- package/vibe-math-v3/agent.cordis.yml +26 -10
- package/vibe-math-v3/vibe-math-v3.js +744 -305
- package/vibe-math-v3//345/256/236/347/216/260/346/226/271/346/241/210.md +5 -5
- package/vibe-math-v4/agent.cordis.yml +26 -6
- package/vibe-math-v4/vibe-math-v4.js +487 -89
- package/vibe-math-v4//345/256/236/347/216/260/346/226/271/346/241/210.md +91 -9
- package/vibe-math-v5/agent.cordis.yml +8 -4
- package/vibe-math-v5/vibe-math-v5.js +607 -160
- package/vibe-math-v5//345/256/236/347/216/260/346/226/271/346/241/210.md +73 -40
|
@@ -73,7 +73,22 @@ DSH 0.1.7 起 agent preset **只**由组合行声明;`$DSH_HOME/.agent-presets
|
|
|
73
73
|
|
|
74
74
|
宿主的 `CommandResult` 联合是 `{kind:'success',text?} | {kind:'error',text}`;四套预设的 `/vibe`、`/v4`、`/v5`
|
|
75
75
|
在**所有失败路径**上都返回 `{kind:'success', text:'{"ok":false,…}'}` → UI 永远显示不出"这条命令被拒绝了"。
|
|
76
|
-
|
|
76
|
+
|
|
77
|
+
**更正(据实收窄):这条修复不是一次"全仓"修复,而是分两批落地的,本节初稿把"打算做的"写成了"已经做完的"。**
|
|
78
|
+
|
|
79
|
+
- **2.4.0(`cc0c220`)只改了 v2 与 v3**(`vibe-math-v2.js` / `vibe-math-v3.js` 的命令 handler)。当时 v4 与 v5 的
|
|
80
|
+
handler 仍然无条件 `return {kind:'success', text:JSON.stringify(r,null,2)}`(各自的"无 session"分支也返回
|
|
81
|
+
`kind:'success'`)——所以"四套都修了"在 2.4.0 这个提交上是不成立的。
|
|
82
|
+
- **v4 与 v5 在 round-A(`8ec5a9c`)才各自补上同一形状**:v4 的命令 handler 改成
|
|
83
|
+
`const failed = !r || r.ok === false || (r.ok === undefined && !!r.error)` → `{kind: failed?'error':'success'}`;
|
|
84
|
+
v5 改成 `const failed = r !== null && typeof r === 'object' && r.ok === false` → 同样三元返回,并把"无 session"
|
|
85
|
+
分支一并改成 `kind:'error'`。判据:`git log -G "kind:\s*'error'" -- vibe-math-v4/vibe-math-v4.js`(及 v5 同)
|
|
86
|
+
**只命中 `8ec5a9c`**;round-C(`4eb3175`)与 round-D(`0dc6ee3`)都没有再碰这两个 handler(前者的 v4 hunk 在
|
|
87
|
+
1354/1854 行,后者的 v5 hunk 止于 4564 行,均在命令 handler 之外)。
|
|
88
|
+
- **仓库内的回归证据是 round-C(`4eb3175`)补进来的**:`tests/host-failure-paths.test.mjs` 在该提交首次入库,
|
|
89
|
+
它断言 `/v4 set` 未知键、`/v4` 未知子命令与 `/v5` 未知子命令都返回 `kind:'error'`。round-D(`0dc6ee3`)只是
|
|
90
|
+
把"本节仍把 `/v4` 的修复说成全仓,需据实收窄"记进了待办,没有改代码。
|
|
91
|
+
- 该联合在 0.1.5 上同样存在,故旧线安全。也就是说:**"四套最终一致"成立,"四套一次修完"不成立**。
|
|
77
92
|
|
|
78
93
|
### G-9 文档、镜像与工具描述与实现不符
|
|
79
94
|
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# dsh-vibe-math 2.4.1 — 发布说明(中文)
|
|
2
|
+
|
|
3
|
+
> 上一版:2.4.0。本版是**修复与合规版本**:四套预设的提示词、工具面、组合声明与参数默认值均未改变(仅 v2 人设里一句措辞由「新架构」改为「经典」),DSH 支撑窗口不变。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 概览
|
|
8
|
+
|
|
9
|
+
- 本包现已被 **[awesome-ai-plugins](https://github.com/hashgraph-online/awesome-ai-plugins)** 收录
|
|
10
|
+
(条目位于其 `### DeepSeek Harness Plugins` 小节,按字母序排列)。
|
|
11
|
+
- 为通过 `awesome-ai-plugins` 的**源仓库安全扫描**(要求评分 ≥80 且无 critical/high),移除了测试工具里的**动态代码执行**:
|
|
12
|
+
仓库里不再出现 `eval` / `new Function` / `node:vm`。该项此前是把收录 PR 拦下的唯一硬性原因。
|
|
13
|
+
- 随后做的一轮独立复查修掉 13 处不一致,其中两处是**文档里的不实声明**(安全策略与发布门禁的描述),
|
|
14
|
+
一处是中文 README 比英文版**承诺得更宽**。本次修订也一并落进本版。
|
|
15
|
+
|
|
16
|
+
## 变更
|
|
17
|
+
|
|
18
|
+
### 1. 移除测试中的动态代码执行(收录扫描的硬性要求)
|
|
19
|
+
|
|
20
|
+
- 两个审计套件过去把预设**源码文本**用 `new Function` 编译后执行;现在改为 `import()` 真实模块。
|
|
21
|
+
- 四个预设把纯函数**原样**上移到模块作用域(`apply()` 继续闭包同一批函数对象),并新增一个仅供测试使用的导出 `__testHelpers`。
|
|
22
|
+
- 结果:**行为不变**(独立复查做了逐 token 比对与数千次差分对照,结论完全一致;四个预设也已在真实 DSH 0.2.0-rc.2 上实测注册成功且零激活警告),
|
|
23
|
+
而安全扫描的该项由「不通过」变为「通过」。
|
|
24
|
+
|
|
25
|
+
### 2. 架构表述统一:四者同级,v2/v3 为「经典」
|
|
26
|
+
|
|
27
|
+
把此前只改到 README 的说法补齐到所有用户可见处:npm 包描述、v3 设计文档、**v2 的预设选择器描述与人设文本**
|
|
28
|
+
("NEW architecture" → "经典 / classic")、安装段的预设列举顺序(与选择器一致为 v2、v3、v4、v5)。
|
|
29
|
+
因涉及人设措辞,`prompt-corpus-persona` 语料随之更新;其余提示词与语料未变。
|
|
30
|
+
|
|
31
|
+
### 3. 文档与安全策略如实化
|
|
32
|
+
|
|
33
|
+
- `SECURITY.md`:明确安装器在旧目录线上使用 Node 自身 `fs` 写 `<DSH_HOME>/.agent-presets/`(含状态文件与备份副本),
|
|
34
|
+
不再声称"所有写入都经宿主 `fs` 服务";并修正支持版本表的自相矛盾——2.3.x 的真正限制是**不能用于 DSH 0.2.x**,
|
|
35
|
+
而不是"只支持 ≤0.1.6"(2.4.x 同样支持 ≤0.1.6)。
|
|
36
|
+
- `docs/AUDIT-CHECKLIST.md`:把 §9 的表格与同文件 §9.1/§9.2 对齐(本仓库**不配置** dependabot、**不引入**工作流),
|
|
37
|
+
并写明将来若确实需要 CI 时的前置条件(第三方 Action 必须钉 commit SHA 并保留版本注释)。
|
|
38
|
+
- 修掉 v3 设计文档里"本包仅含 v2/v3/v4"的事实错误(v5 自 2.1.0 起即在包内),以及中文 README 升级段缺失的
|
|
39
|
+
「仅 DSH ≤ 0.1.6 目录形式」这一限定(英文版原本已有)。
|
|
40
|
+
|
|
41
|
+
## 兼容性
|
|
42
|
+
|
|
43
|
+
- 四套预设的**提示词(除 v2 人设那一句)、工具面、组合声明、参数默认值与数据格式**均未变;
|
|
44
|
+
DSH 支撑窗口不变:**0.1.2-alpha.4 … 0.2.0-rc.2**。
|
|
45
|
+
- 无需迁移:`State/<研究所>.v5state.json`、项目目录结构、以及 DSH ≤ 0.1.6 的旧目录形式都照旧。
|
|
46
|
+
- `SECURITY.md` 现在随包发布(`package.json` 的 `files` 已包含它)。
|
|
47
|
+
|
|
48
|
+
## 升级
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
npm i dsh-vibe-math@latest
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
桌面版在「设置 → 插件」里更新;命令行 profile 用 `dsh plugin --profile <你的 profile> add dsh-vibe-math@latest`,
|
|
55
|
+
随后重启 DSH 即可。
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
# dsh-vibe-math 2.4.1 — Release Notes (English)
|
|
60
|
+
|
|
61
|
+
> Previous: 2.4.0. This is a **fix and compliance release**: the four presets' prompts, tool surface,
|
|
62
|
+
> composition declarations and parameter defaults are unchanged (only one wording in v2's persona moved
|
|
63
|
+
> from "new architecture" to "classic"), and the supported DSH window is unchanged.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Overview
|
|
68
|
+
|
|
69
|
+
- The package is now listed in **[awesome-ai-plugins](https://github.com/hashgraph-online/awesome-ai-plugins)**
|
|
70
|
+
(in its `### DeepSeek Harness Plugins` section, in alphabetical order).
|
|
71
|
+
- To pass `awesome-ai-plugins`'s **source-repository security scan** (score ≥ 80 with no critical/high
|
|
72
|
+
finding), **dynamic code execution was removed from the test tooling**: the repository no longer
|
|
73
|
+
contains `eval` / `new Function` / `node:vm`. That rule was the one hard blocker on the listing PR.
|
|
74
|
+
- A follow-up independent review fixed 13 inconsistencies, two of which were **false statements in the
|
|
75
|
+
documentation** (the security policy and the release-gate description) and one of which was the
|
|
76
|
+
Chinese README **promising more than the English one**. Those fixes are part of this release.
|
|
77
|
+
|
|
78
|
+
## Changes
|
|
79
|
+
|
|
80
|
+
### 1. Dynamic code execution removed from the tests (a hard requirement of the catalog scan)
|
|
81
|
+
|
|
82
|
+
- Two audit harnesses used to compile extracted preset **source text** with `new Function`; they now
|
|
83
|
+
`import()` the real modules.
|
|
84
|
+
- All four presets moved their pure helpers **verbatim** to module scope (`apply()` still closes over the
|
|
85
|
+
same function objects) and gained one test-only export, `__testHelpers`.
|
|
86
|
+
- The behaviour is unchanged — an independent review compared the declarations token by token and ran
|
|
87
|
+
thousands of differential comparisons with identical results, and the four presets were verified to
|
|
88
|
+
register on a real DSH 0.2.0-rc.2 host with zero activation warnings — while the security rule that
|
|
89
|
+
used to fail now passes.
|
|
90
|
+
|
|
91
|
+
### 2. One consistent framing: four peers, v2/v3 classic
|
|
92
|
+
|
|
93
|
+
The wording that had only reached the READMEs was completed everywhere a user can see it: the npm
|
|
94
|
+
package description, v3's design document, **v2's preset-picker description and persona text**
|
|
95
|
+
("NEW architecture" → "classic"), and the order in which the presets are listed in the install section
|
|
96
|
+
(now v2, v3, v4, v5, matching the picker). Because the persona wording changed, the
|
|
97
|
+
`prompt-corpus-persona` corpus was regenerated; no other prompt or corpus changed.
|
|
98
|
+
|
|
99
|
+
### 3. Documentation and security policy made truthful
|
|
100
|
+
|
|
101
|
+
- `SECURITY.md`: the installer is described accurately — on the legacy directory line it writes
|
|
102
|
+
`<DSH_HOME>/.agent-presets/` (including its state file and backup copies) with Node's own `fs`, so it
|
|
103
|
+
no longer claims that "every write goes through the host's `fs` service". The supported-version table
|
|
104
|
+
was corrected too: 2.3.x's real limitation is that it **cannot run on DSH 0.2.x**, not that it only
|
|
105
|
+
serves ≤ 0.1.6 (2.4.x also covers ≤ 0.1.6).
|
|
106
|
+
- `docs/AUDIT-CHECKLIST.md`: §9's table now agrees with §9.1/§9.2 in the same file (this repository
|
|
107
|
+
configures **no** Dependabot and **no** workflow), and it records the preconditions for ever adding CI
|
|
108
|
+
(third-party Actions must be pinned to a commit SHA with the version kept in the comment).
|
|
109
|
+
- v3's design document no longer claims "this package contains only v2/v3/v4" (v5 has shipped since
|
|
110
|
+
2.1.0), and the Chinese README's upgrade note gained the "DSH ≤ 0.1.6 directory form only" qualifier
|
|
111
|
+
the English version already had.
|
|
112
|
+
|
|
113
|
+
## Compatibility
|
|
114
|
+
|
|
115
|
+
- The four presets' **prompts (apart from that one persona wording), tool surface, composition
|
|
116
|
+
declarations, parameter defaults and data formats** are unchanged, and the supported DSH window is the
|
|
117
|
+
same: **0.1.2-alpha.4 … 0.2.0-rc.2**.
|
|
118
|
+
- No migration is needed: `State/<institute>.v5state.json`, the project directory layout, and the legacy
|
|
119
|
+
directory form on DSH ≤ 0.1.6 all behave as before.
|
|
120
|
+
- `SECURITY.md` now ships with the package (`files` in `package.json` includes it).
|
|
121
|
+
|
|
122
|
+
## Upgrade
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
npm i dsh-vibe-math@latest
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Desktop updates through Settings → Plugins; a CLI profile uses
|
|
129
|
+
`dsh plugin --profile <your profile> add dsh-vibe-math@latest`, then restart DSH.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# dsh-vibe-math 2.5.0 — 发布说明(中文)
|
|
2
|
+
|
|
3
|
+
> 上一版:2.4.1。本版是**深度审计后的修复版本**:四套预设的提示词、工具面、组合声明与数据格式未做破坏性变更,
|
|
4
|
+
> 但修复了多处"看起来能跑、实际目标功能不成立"的缺陷(含三处会丢数据或让运行停摆的问题),并新增多项守卫。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 概览
|
|
9
|
+
|
|
10
|
+
- 本轮对 v2/v3/v4/v5 四套预设 + 安装器 + 全部守卫做了多轮独立审计与交叉证伪(审计结论:**所有宿主接口/工具/命令调用在 DSH 0.2.0-rc.2 上均存在且调用形状正确**;问题集中在目标功能与内部逻辑)。
|
|
11
|
+
- 修复了 **3 处会造成实际损害的问题**:v5 的状态文件会被空研究所覆盖、v2 的验证日志文件名可越出项目目录、v4 的邮箱投递失败会让调度器永久停摆。
|
|
12
|
+
- 还修掉 **v4 的"真实 /compact"从未生效**、**v3 空闲时每 tick 空转派生 planner**、**v3 单票即可写入 `Verified/`**、**v5 同 tick 并发提议会丢提案**等。
|
|
13
|
+
- 在本机 DSH 0.2.0-rc.2 上做了**真实宿主端到端验证**:四个预设正常注册(order 20–23)、零激活警告、组合行线上不再写旧的 `.agent-presets` 目录。
|
|
14
|
+
- 测试与守卫大幅加强:全仓 **38 套件 + 18 探针**全部纳入自动门禁(此前有若干探针未被收集),并修正了一处测试抖动与一处语料非确定性。
|
|
15
|
+
|
|
16
|
+
## 变更
|
|
17
|
+
|
|
18
|
+
### 1. 数据安全与"运行不卡死"
|
|
19
|
+
|
|
20
|
+
- **v5 状态文件不再被覆盖**:状态后端改为**按路径锁存**,读取未成功即**拒绝写入**;对已存在的研究所改为**采纳**而非重置。此前会话里第一次工具调用会锁存默认路径,随后指定研究所的配置会把它覆盖成空研究所。
|
|
21
|
+
- **v2 路径逃逸**:验证日志文件名改用 `safeId` 归一化,`q.id="x/../../../../pwn"` 这类输入不再能把文件写出项目目录。
|
|
22
|
+
- **v4 调度器停摆**:邮箱投递失败的两条路径(立即投递失败、brainstorm 阶段无处重投)都会重排队并在后续 pass 重试,不再出现"心跳已清、永不重试"的静止状态。
|
|
23
|
+
- **v5 队列竞态**:验证队列的追加与取头改为在事件折叠内完成,同一 tick 内两个成员同时提议不再丢提案。
|
|
24
|
+
|
|
25
|
+
### 2. 目标功能真正可达
|
|
26
|
+
|
|
27
|
+
- **v4 的 `/compact`**:按 `subagent/start` 载荷认领活动 Agent,真实压缩调用(`compactNow`)首次真正生效。
|
|
28
|
+
- **v2 的"判断命题"链**:为判断问题补种可验证的解法入口,使"问题 → 判断问题 → 验证 → 收口"主线真正跑通。
|
|
29
|
+
- **v3 的空转**:空闲时不再每个 tick 派生 planner(实测由 41 次降到 13 次,并首次出现正常终止)。
|
|
30
|
+
- **v3 的项目锁**:改为**定时器续租**(此前的续租写在 tick 内,单次慢 tick 就会让别的会话无 override 夺锁)。
|
|
31
|
+
- **v3 的最小票数**:要求达到承诺的验证者数量、且**至少 2 票**才裁决,单票不再能把命题写成"已验证·真"。
|
|
32
|
+
|
|
33
|
+
### 3. 语义与表述对齐(含提示词面)
|
|
34
|
+
|
|
35
|
+
- **v4 验证契约**:人设与工具描述明确"**只有精确的 1 / 0 是绝对真/绝对假**;介于 0 与 1 之间是模型认为的概率,只有全 1 或全 0 才算全体一致,否则取**平均概率**更新布尔估计"(代码分支未改,此前示例与说明不足)。
|
|
36
|
+
- **v5 的 m-vote 表述**:文档/人设/README 改为与计票代码一致——"**至少 m 张布尔票且没有任何一张反对票**,默认名册下退化为全体一致",并删除"比全体一致更易收敛"这一**不实**说法。
|
|
37
|
+
- **四套同级**:v2/v3 改称"经典"、v4/v5 为"实验性",npm 描述、选择器描述、人设文本、v3 设计文档、安装段顺序全部对齐(此前只有 README 改了)。
|
|
38
|
+
- **v2 的侧信道**:推送汇报的消息来源由未声明的 `kind:'plugin'` 改为已声明的 `kind:'user'`;`solver/verifierMaxToolCalls` 改为如实标注为"仅提示、不强制"。
|
|
39
|
+
- **v5 的调用者授权**:`isOffice` 不再把空身份当所办;无法识别身份的成员调用一律拒绝(此前一个幽灵身份可以改优先级、甚至删掉真实任务)。
|
|
40
|
+
- **v5 的工具描述**:补齐会议 `kind` 枚举与 `target`、说明 `hire.term`。
|
|
41
|
+
|
|
42
|
+
### 4. 安装器、声明与守卫
|
|
43
|
+
|
|
44
|
+
- **形态判定改能力差**:旧线上"组合行 registry 包"根本不存在(已用 npm 元数据与包内容证实:0.1.6-alpha.2 无 `@deepseek-ai/dsh-agent-preset`,0.1.7-rc.2 才有),判定改用 `register` 能力,并新增可证伪守卫(把该行改回 `list` 只有新守卫会红)。
|
|
45
|
+
- **声明行补宿主 group 标记**:8 处嵌套 `!!js` 现在以表达式形式保留给 preset 作用域,而不是在声明域被就地求值。
|
|
46
|
+
- **安装器更安全**:preset 文件改**原子写**;删除 preset 前**先备份**用户改动过的文件;**读不出来**的文件不再被无备份删除;状态文件内容不变则跳过写、写失败会告警、`listBundles` 有超时兜底。
|
|
47
|
+
- **守卫扩面**:`run-tests` 现在收集**全部**测试与探针(此前有 2 套红探针被静默漏收),修正了一处测试抖动(v4 会议用例)与一处语料非确定性(v3),并新增安装器/声明/命令失败路径/宿主失败路径等守卫。
|
|
48
|
+
|
|
49
|
+
## 兼容性
|
|
50
|
+
|
|
51
|
+
- **DSH 支撑窗口不变**:`0.1.2-alpha.4 … 0.2.0-rc.2`;组合行(≥0.1.7)与目录(≤0.1.6)两条线都保留,且新增能力差判定后旧线不会再被误判。
|
|
52
|
+
- **数据与目录结构不变**:`State/<研究所>.v5state.json`、项目布局、镜像文件位置均照旧;无需迁移。
|
|
53
|
+
- **提示词**:除"v4 验证契约/闭包规则说明、v5 m-vote 表述、v2/v3/v4 人设补一行一致的闭包规则、v5 工具描述补字段"之外未改动;语料已按当前四套重新生成。
|
|
54
|
+
- **参数默认值**:未变(v2 每个待验证对象最多 `max(2, min(verifierCount, maxParallelThreshold-2))` 个验证者,默认配置下为 2;工具调用上限仍为提示性)。
|
|
55
|
+
|
|
56
|
+
## 升级
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
npm i dsh-vibe-math@latest
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
桌面版在「设置 → 插件」里更新;命令行 profile 用 `dsh plugin --profile <你的 profile> add dsh-vibe-math@latest`,随后重启 DSH。
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
# dsh-vibe-math 2.5.0 — Release Notes (English)
|
|
67
|
+
|
|
68
|
+
> Previous: 2.4.1. This release is the outcome of a deep, independently cross-checked audit: the four
|
|
69
|
+
> presets' prompts, tool surface, composition declarations and data formats have no breaking change, but
|
|
70
|
+
> several defects that "looked like they worked while the intended function did not" are fixed — three
|
|
71
|
+
> of them could lose data or stall a run — and the guard suite is substantially stronger.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Overview
|
|
76
|
+
|
|
77
|
+
- Multiple audit rounds with independent falsification covered the four presets, the installer and every
|
|
78
|
+
guard. Verdict: **every host interface, tool, command and service call exists on DSH 0.2.0-rc.2 with
|
|
79
|
+
the correct call shape**; the defects were in goals and internal logic.
|
|
80
|
+
- Three fixes prevent real damage: v5's state file being overwritten by an empty institute, v2's
|
|
81
|
+
verification-log filename escaping the project directory, and v4's scheduler stalling forever after a
|
|
82
|
+
failed mailbox delivery.
|
|
83
|
+
- Also fixed: v4's "real /compact" never firing, v3 spawning a planner on every idle tick, v3 finalising
|
|
84
|
+
a proposition on a single vote, and v5 losing a proposal when two members proposed in the same tick.
|
|
85
|
+
- Verified on a **real DSH 0.2.0-rc.2 host**: the four presets register (orders 20–23) with zero
|
|
86
|
+
activation warnings, and the row line no longer writes the legacy `.agent-presets` directory.
|
|
87
|
+
- Guards grew from 30 to **38 suites + 18 probes**, all collected by the gate (several probes used to be
|
|
88
|
+
silently skipped); one flaky test and one non-deterministic corpus were fixed.
|
|
89
|
+
|
|
90
|
+
## Changes
|
|
91
|
+
|
|
92
|
+
### 1. Data safety and "no run can stall"
|
|
93
|
+
|
|
94
|
+
- **v5 state file can no longer be overwritten**: the backend latches **per path** and **refuses to
|
|
95
|
+
write** when the read never succeeded; an existing institute is **adopted** instead of reset. The
|
|
96
|
+
first tool call of a session used to latch the default path, after which configuring a named institute
|
|
97
|
+
overwrote it with an empty one.
|
|
98
|
+
- **v2 path escape**: the verification-log filename is normalised with `safeId`, so an id such as
|
|
99
|
+
`x/../../../../pwn` can no longer write outside the project directory.
|
|
100
|
+
- **v4 scheduler stall**: both failed-mailbox paths (immediate delivery rejection, and the brainstorm
|
|
101
|
+
phase where nothing retried) now re-queue and retry on a later pass.
|
|
102
|
+
- **v5 queue race**: queue append and head-take now happen inside the event fold, so two members
|
|
103
|
+
proposing in the same tick can no longer lose a proposal.
|
|
104
|
+
|
|
105
|
+
### 2. The intended function actually happens
|
|
106
|
+
|
|
107
|
+
- **v4 `/compact`**: the live Agent is claimed from the `subagent/start` payload, so the real
|
|
108
|
+
`compactNow` finally fires.
|
|
109
|
+
- **v2's judge-problem chain**: the judge problem now carries a verifiable solution entry, so
|
|
110
|
+
problem → judge problem → verification → closure really runs.
|
|
111
|
+
- **v3 idle spawning**: no planner is spawned on every idle tick any more (measured 41 → 13) and a
|
|
112
|
+
normal termination was observed for the first time.
|
|
113
|
+
- **v3 project lock**: renewal moved to a timer (it used to live inside `tick()`, so one slow tick let
|
|
114
|
+
another session steal the lock without an override).
|
|
115
|
+
- **v3 minimum votes**: the promised verifier count and at least two votes are now required before a
|
|
116
|
+
verdict; a single vote can no longer write `Verified/`.
|
|
117
|
+
|
|
118
|
+
### 3. Semantics and wording aligned (including prompt-facing text)
|
|
119
|
+
|
|
120
|
+
- **v4 verdict contract**: the persona and tool description now state that **only an exact 1 / 0 is
|
|
121
|
+
absolutely true/false**; anything strictly between is the model's probability of truth, only an all-1
|
|
122
|
+
or all-0 set is unanimity, and otherwise the **mean** updates the boolean estimate (the code path is
|
|
123
|
+
unchanged; the example and explanation were insufficient).
|
|
124
|
+
- **v5 m-vote**: docs, persona and README now match the tally — "**at least m boolean votes with no
|
|
125
|
+
opposing vote**, which degenerates to unanimity on the default roster" — and the false claim that it
|
|
126
|
+
"converges more easily than unanimity" is gone.
|
|
127
|
+
- **Four peers**: v2/v3 are "classic", v4/v5 "experimental" — the npm description, picker descriptions,
|
|
128
|
+
persona text, v3's design doc and the install-section order were all brought in line (previously only
|
|
129
|
+
the READMEs).
|
|
130
|
+
- **v2 side channels**: the push report's message source is the declared `kind:'user'`; the
|
|
131
|
+
`solver/verifierMaxToolCalls` settings are now honestly described as advisory.
|
|
132
|
+
- **v5 caller authorisation**: `isOffice` no longer treats an empty identity as the office, and tool
|
|
133
|
+
calls from an unidentifiable caller are refused (a ghost identity could previously change priorities
|
|
134
|
+
and even delete a real task).
|
|
135
|
+
- **v5 tool descriptions**: the meeting `kind` enum plus `target`, and `hire.term`, are now documented.
|
|
136
|
+
|
|
137
|
+
### 4. Installer, declarations and guards
|
|
138
|
+
|
|
139
|
+
- **Mechanism detection by capability**: the row registry package does not exist on the old line
|
|
140
|
+
(proven from npm metadata and package contents: 0.1.6-alpha.2 has no
|
|
141
|
+
`@deepseek-ai/dsh-agent-preset`, 0.1.7-rc.2 adds it), so the decision now tests the `register`
|
|
142
|
+
capability, with a falsifiable guard (reverting that one line turns only the new guard red).
|
|
143
|
+
- **Declaration rows carry the host group marker**: the eight nested `!!js` expressions are preserved
|
|
144
|
+
for the preset scope instead of being evaluated in the declaring realm.
|
|
145
|
+
- **Safer installer**: preset files are written atomically; a user-edited file is backed up before its
|
|
146
|
+
preset is dropped; an unreadable file is no longer deleted without a backup; the state file is
|
|
147
|
+
skipped when unchanged, write failures warn, and `listBundles` has a timeout fallback.
|
|
148
|
+
- **Wider guards**: `run-tests` now collects **every** test and probe (two red probes used to be
|
|
149
|
+
silently skipped), one flaky test (v4 meetings) and one non-deterministic corpus (v3) were fixed, and
|
|
150
|
+
new guards cover the installer, the declaration row, command failure paths and host failure paths.
|
|
151
|
+
|
|
152
|
+
## Compatibility
|
|
153
|
+
|
|
154
|
+
- **Supported DSH window unchanged**: `0.1.2-alpha.4 … 0.2.0-rc.2`; both the composition-row (≥ 0.1.7)
|
|
155
|
+
and directory (≤ 0.1.6) lines are kept, and the capability-based verdict means the old line can no
|
|
156
|
+
longer be misclassified.
|
|
157
|
+
- **No data or layout change**: `State/<institute>.v5state.json`, the project layout and the mirror file
|
|
158
|
+
locations are unchanged; no migration needed.
|
|
159
|
+
- **Prompts**: unchanged except the v4 verdict-contract/clojure-rule wording, the v5 m-vote wording, one
|
|
160
|
+
consistent closure-rule line added to the v2/v3/v4 personas, and the added v5 tool-description fields;
|
|
161
|
+
corpora were regenerated for the current four presets.
|
|
162
|
+
- **Defaults**: unchanged (v2 caps reviewers per target at
|
|
163
|
+
`max(2, min(verifierCount, maxParallelThreshold-2))`, i.e. 2 on the default configuration; the tool-call
|
|
164
|
+
limits remain advisory).
|
|
165
|
+
|
|
166
|
+
## Upgrade
|
|
167
|
+
|
|
168
|
+
```sh
|
|
169
|
+
npm i dsh-vibe-math@latest
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Desktop updates through Settings → Plugins; a CLI profile uses
|
|
173
|
+
`dsh plugin --profile <your profile> add dsh-vibe-math@latest`, then restart DSH.
|
package/docs/test-timing.md
CHANGED
|
@@ -8,52 +8,77 @@
|
|
|
8
8
|
## 1. 怎么跑(并行是默认)
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
-
node tests/run-tests.mjs #
|
|
12
|
-
node tests/run-tests.mjs --only formal # 只跑名字含 formal
|
|
11
|
+
node tests/run-tests.mjs # 全部套件 + 全部探针(tests/ 下每个 .mjs),并行(并发 = min(4, CPU 核数);命令都从**仓库根**执行)
|
|
12
|
+
node tests/run-tests.mjs --only formal # 只跑名字含 formal 的项(套件与探针一起筛)
|
|
13
13
|
node tests/run-tests.mjs --concurrency=6 # 手动指定并发
|
|
14
|
-
node tests/
|
|
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)
|
|
14
|
+
node tests/run-tests.mjs --json # 机器可读汇总(含 skippedNeedsArgs / devCheckout)
|
|
20
15
|
```
|
|
21
16
|
|
|
22
|
-
|
|
17
|
+
`run-tests.mjs` 的收集规则(Round B 起):`tests/` 下**每个** `.mjs` 都会被跑——
|
|
23
18
|
|
|
24
|
-
|
|
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/` 的一个**子集**(发布物共 102 个文件,其中 `tests/` 18 项),
|
|
30
|
+
所以安装用户跑 `node tests/run-tests.mjs` 得到的是子集的结果——runner 会把缺失的跳过项打印出来,
|
|
31
|
+
不会静默少跑:
|
|
32
|
+
|
|
33
|
+
- **随包(18 项)**:`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`;套件 **10** 个:`audit-installer-compat`、
|
|
36
|
+
`audit-installer-policy`、`audit-persona-surface`、`audit-preset-rows`、`e2e-v5-round2`、
|
|
37
|
+
`formal-verify-v2`、`formal-verify-v3`、`formal-verify-v4`、`formal-verify-v5`、`prompt-v5-integrity`。
|
|
38
|
+
- **仅仓库(不发)**:其余 28 个套件(v2/v3/v4 的 e2e、`selfdrive-v3`/`v4`、v2/v3 修复探针、
|
|
39
|
+
`audit-fuzz-helpers` 之外的若干 `audit-*`……)与 7 个脚本(`audit-fuzz-helpers`、
|
|
40
|
+
`audit-registration`、`audit-roundtrip-idempotence`、`audit-tool-exec`、
|
|
41
|
+
`audit-v3-registration-parity`、`selfdrive-v3`、`selfdrive-v4`)。
|
|
42
|
+
- 因此**完整门禁只能在开发检出里跑**;发布物里的子集是"用户可自查"的一部分,不是全部证据。
|
|
43
|
+
(`audit-fuzz-helpers.mjs` 在 2.3.13 时曾随包发布;现在不在 `files` 里。)
|
|
44
|
+
|
|
45
|
+
## 2. 基线(本机:4 核 / Windows,实测)
|
|
25
46
|
|
|
26
47
|
| 脚本 | 串行(sum) | 并行(wall) | 实测输出 |
|
|
27
48
|
|---|---|---|---|
|
|
28
|
-
| `tests/run-tests.mjs
|
|
29
|
-
| `tests/audit-
|
|
30
|
-
| `tests/audit-
|
|
31
|
-
| `tests/audit-
|
|
32
|
-
| `tests/audit-
|
|
33
|
-
| `audit-
|
|
34
|
-
| `audit-
|
|
35
|
-
| `audit-
|
|
36
|
-
| `audit-
|
|
37
|
-
| `audit-
|
|
38
|
-
| `
|
|
39
|
-
| `
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
| `tests/run-tests.mjs`(**56 项** = 38 套件 + 18 探针/变体) | ≈ 629 s | **≈ 208 s**(并发 4,speed-up x3.02) | `TOTAL 56 PASS 56 FAIL 0 (suites 38 · probes 18)`;关键路径 = `audit-formal-sensitivity` 208 s |
|
|
50
|
+
| `tests/audit-formal-sensitivity.mjs`(49 探针,自带并发 4) | 803 s | **≈ 208 s** | 关键路径 = 12 个 v2 探针(每个 ≈42–60 s) |
|
|
51
|
+
| `tests/audit-v5-sensitivity.mjs`(39 探针,串行) | ≈ 101 s | — | 每条 = 一次被测套件重跑 |
|
|
52
|
+
| `tests/audit-persona-sensitivity.mjs`(11 探针) | ≈ 4.4 s | — | 本身很快,不需要并行 |
|
|
53
|
+
| `tests/audit-prompt-invariants.mjs`(157 条) | ≈ 1.9 s | — | 静态 |
|
|
54
|
+
| `tests/audit-prompt-invariants.mjs --self-probe`(5 探针) | ≈ 7.4 s | — | 每个探针 = 一次自我重跑 |
|
|
55
|
+
| `tests/audit-spec-traceability.mjs`(94 条) | ≈ 0.2 s | — | 静态 |
|
|
56
|
+
| `tests/audit-v5-integrity.mjs` | ≈ 0.6 s | — | 静态审计(含扫描器自检) |
|
|
57
|
+
| `tests/audit-registration.mjs`(4 个预设各一次) | ≈ 1.0 s | — | 裸跑只查 v3,所以 runner 跑四个变体 |
|
|
58
|
+
| `tests/audit-v3-registration-parity.mjs`(+ `--self-probe`) | ≈ 0.3 s | — | 自探针**成功 = exit 1**(变异后守卫必须变红) |
|
|
59
|
+
| `tests/prompt-v5-integrity.test.mjs` | ≈ 2.2 s | — | 虚拟时钟下生成 v5 语料(语料字节稳定;**stdout 里的会议成员顺序仍是运行间随机的**,只有落盘语料是逐字节确定的) |
|
|
60
|
+
| `tests/e2e-v5-round2.test.mjs` | ≈ 3.2 s | — | v5 e2e(含本轮新增的"预置快照不被覆盖""命名研究所被读取""失败轮次"三节) |
|
|
61
|
+
| `tests/host-failure-paths.test.mjs` | ≈ 6.3 s | — | 真实宿主的失败路径(`kind:'error'`、`/v4 set` 键校验、失败轮次不算进展) |
|
|
62
|
+
| `tests/v4-mailbox-stall.test.mjs` | ≈ 7.1 s | — | `sendMessage` 拒绝后必须重投并唤醒(control + treatment 各一个 host) |
|
|
63
|
+
| `tests/v2-fix-probes.test.mjs` | ≈ 8.6 s | — | v2 的 flat 等权均值 / ≥2 名验证者 / runShell 失败分支(26 条) |
|
|
64
|
+
| `tests/v2-path-escape.test.mjs` | ≈ 2.2 s | — | 验证日志路径逃逸(7 条) |
|
|
65
|
+
| `tests/v2-tool-cap.test.mjs` | ≈ 0.4 s | — | 能力表来自真实组合、*MaxToolCalls 只是提示(10 条) |
|
|
44
66
|
|
|
45
67
|
单套件耗时(并行时的关键路径按此排序):
|
|
46
68
|
|
|
47
69
|
| 套件 | 耗时 | 备注 |
|
|
48
70
|
|---|---|---|
|
|
49
|
-
| `e2e-v4-fixes.test.mjs` | **≈
|
|
50
|
-
| `formal-verify-v2.test.mjs` | **≈
|
|
71
|
+
| `e2e-v4-fixes.test.mjs` | **≈ 104 s** | 9 个用例是**轮次采样**型(如 T13 采样 400 轮、T19/T25 多轮);时间 ≈ 轮数 × 框架自身的 40 ms 计时粒度 |
|
|
72
|
+
| `formal-verify-v2.test.mjs` | **≈ 43 s** | 曾为 186 s:见 §3 |
|
|
73
|
+
| `e2e-v3.test.mjs` | ≈ 21 s | |
|
|
51
74
|
| `e2e-regression.test.mjs` | ≈ 14 s | |
|
|
52
|
-
| `
|
|
53
|
-
| `e2e-d9-d13.test.mjs` | ≈ 13 s | |
|
|
54
|
-
|
|
|
55
|
-
|
|
56
|
-
|
|
75
|
+
| `formal-verify-v3.test.mjs` | ≈ 13 s | |
|
|
76
|
+
| `e2e-business.test.mjs` / `e2e-d9-d13.test.mjs` | ≈ 13 s | |
|
|
77
|
+
| 其余套件 | ≤ 10 s | 其中绝大多数 < 2 s |
|
|
78
|
+
|
|
79
|
+
> 优化前:全量回归 ≈ 5.5 min(串行,`formal-verify-v2` 单独 186 s);
|
|
80
|
+
> 探针脚本 ≈ **38 min**(49 条串行,其中 12 条 × `formal-verify-v2` 162 s)。
|
|
81
|
+
> 现在:**一套 `node tests/run-tests.mjs` ≈ 3.5 min 覆盖套件 + 探针**(探针单独跑仍是 ≈2.6 min)。
|
|
57
82
|
|
|
58
83
|
## 3. 已经做过的优化(别再重复踩)
|
|
59
84
|
|
|
@@ -68,9 +93,9 @@ node tests/audit-v5-integrity.mjs # 静态:v5 完整性/理念门
|
|
|
68
93
|
现在连续 100 次无待答 followup 就停(`V4_IDLE_POLLS` 可调)。
|
|
69
94
|
**再往下压就要砍采样深度了**——那 9 个慢用例(T13/T19/T22/T23/T25/T27/T2/T9/T20)是在
|
|
70
95
|
观察"多轮之后某个指令**没有**泄漏/重复",轮数是它们的不变式本体,不要再动。
|
|
71
|
-
3. **两个 runner
|
|
96
|
+
3. **两个 runner 并行**(Round A):探针 38 min → 2.6 min(sum 612 s,wall 154.6 s,x3.96);
|
|
72
97
|
全量回归 5.5 min → 1.9 min(sum 221.5 s,wall 111.5 s,x1.99)。
|
|
73
|
-
4. **虚拟时钟**(`prompt-v5-integrity.test.mjs
|
|
98
|
+
4. **虚拟时钟**(`prompt-v5-integrity.test.mjs`):v5 研究所由 `ctx.timeout` + `Date.now()`
|
|
74
99
|
驱动,真实时钟下"哪个成员被心跳/会议唤醒"取决于负载与毫秒差 → **随包语料每跑一次都变**(无法 diff,
|
|
75
100
|
真实缺陷会被淹没)。套件现在把 `ctx.timeout` 接到**虚拟时钟**、`sleep(n)` 推进虚拟时间:
|
|
76
101
|
套件 **7–9 s → 1.7 s**,且语料连续 6 次运行**字节一致**。语料写入端另加**全序排序**
|
|
@@ -79,13 +104,21 @@ node tests/audit-v5-integrity.mjs # 静态:v5 完整性/理念门
|
|
|
79
104
|
> 想给别的套件套用同一手法前请注意:若套件的等待助手用 `Date.now()` 做**超时判据**、又用
|
|
80
105
|
> `setInterval` 轮询(例如 `e2e-v4-fixes.test.mjs` 的 `waitFor`),冻结时钟会让判据永不超时;
|
|
81
106
|
> 那种情况必须连**轮询定时器**一起虚拟化,不能只改 `sleep`。
|
|
107
|
+
5. **语料里的随机 id 也要归一化**(Round B,`formal-verify-v4.test.mjs`):v4 的
|
|
108
|
+
`propose_task` 用 `Math.random` 造 `t-<8 位 hex>`,语料把 `[YOU CLAIMED TASK t-…]` 逐字写盘,
|
|
109
|
+
于是**每次跑测试都会改写随包语料**(`git status` 永远有 `prompt-corpus-v4/*`,且违反
|
|
110
|
+
`AUDIT-CHECKLIST` §2.4"连续两次哈希相同")。`scrub()` 现在把它归一化成 `<TASKID>`,并断言
|
|
111
|
+
"语料里既没有裸 id、也真的有 `<TASKID>`"。连续两次运行哈希相同(`d3381886…` / `e6c4e445…`)。
|
|
82
112
|
|
|
83
113
|
## 4. 并行安全(为什么可以并发)
|
|
84
114
|
|
|
85
115
|
- 每个套件/探针都自建 `mkdtempSync` 工作区,互不共享状态;
|
|
86
116
|
- **会写语料的套件必须给不同的语料目录**:`V2_CORPUS_DIR` / `V3_CORPUS_DIR` / `V4_CORPUS_DIR` /
|
|
87
117
|
`V5_CORPUS_DIR`。探针 runner 为**每个探针**分配独立目录,否则同一套件的并发实例会互相覆盖语料;
|
|
118
|
+
- `audit-v5-sensitivity.mjs` 现在**自己**把 `V5_CORPUS_DIR` 指向临时目录:被变异的插件绝不能把
|
|
119
|
+
自己的提示词倒进随包语料;
|
|
88
120
|
- `audit-persona-sensitivity.mjs` 用 `PERSONA_ROOT` 指向变异副本,且在覆盖模式下**不写**语料;
|
|
121
|
+
- `audit-formal-sensitivity.mjs` 同样给每个探针独立的 `V{2,3,4,5}_CORPUS_DIR`;
|
|
89
122
|
- `audit-prompt-invariants.mjs --self-probe` 用 `PROMPT_INVARIANTS_MUTATE`(JSON `[rel, from, to]`)
|
|
90
123
|
在**内存里**变异一个文件并自我重跑,**不碰磁盘**,因此可与任何东西并发;
|
|
91
124
|
变异串里不要用 NUL 分隔(环境变量不允许 NUL 字节)。
|
|
@@ -94,11 +127,11 @@ node tests/audit-v5-integrity.mjs # 静态:v5 完整性/理念门
|
|
|
94
127
|
|
|
95
128
|
| 目的 | 跑什么 | 预期 |
|
|
96
129
|
|---|---|---|
|
|
97
|
-
| 改了某个架构的插件 | `node tests/run-tests.mjs --only <vN>` + `node tests/audit-formal-sensitivity.mjs --only=vN` | 30 s –
|
|
98
|
-
| 改了提示词/人设 | `node tests/run-tests.mjs --only persona --only prompt` + `node tests/audit-persona-sensitivity.mjs` | ≈
|
|
99
|
-
| **改了任何工具的参数 schema / 参数处理** | `node tests/
|
|
100
|
-
|
|
|
101
|
-
| 只想快速看提示词/文档有没有漂移 | `node tests/audit-prompt-invariants.mjs && node tests/audit-spec-traceability.mjs` | **<
|
|
130
|
+
| 改了某个架构的插件 | `node tests/run-tests.mjs --only <vN>` + `node tests/audit-formal-sensitivity.mjs --only=vN` | 30 s – 3.5 min |
|
|
131
|
+
| 改了提示词/人设 | `node tests/run-tests.mjs --only persona --only prompt` + `node tests/audit-persona-sensitivity.mjs` | ≈ 20 s |
|
|
132
|
+
| **改了任何工具的参数 schema / 参数处理** | `node tests/run-tests.mjs --only audit-prompt-invariants --only formal` | ≈ 60 s(v2 套件占大头) |
|
|
133
|
+
| 改了 `tests/` 下的 runner/守卫 | `node tests/run-tests.mjs`(**必须**:它现在同时跑套件与探针,任何一条守卫变红都会让门禁失败) | **≈ 3.5 min** |
|
|
134
|
+
| 只想快速看提示词/文档有没有漂移 | `node tests/audit-prompt-invariants.mjs && node tests/audit-spec-traceability.mjs` | **< 3 s** |
|
|
102
135
|
| 只想知道"快不快" | `node tests/run-tests.mjs --json` | 读 `wallSeconds` / `slowest` |
|
|
103
136
|
|
|
104
137
|
**每次跑完都要看那几行 timing**:如果某个套件突然比基线慢很多,先怀疑新增的固定等待,
|