dsh-vibe-math 2.8.3 → 2.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.en.md +19 -4
  2. package/README.md +19 -4
  3. package/cordis.patch.yml +8 -8
  4. package/docs/COMPAT-AUDIT-ROUND2.md +27 -0
  5. package/docs/final-paper.md +13 -0
  6. package/docs/formal-verification.md +6 -6
  7. package/docs/release-notes/README.en.md +2 -0
  8. package/docs/release-notes/README.md +2 -0
  9. package/docs/release-notes/RELEASE-NOTES-2.8.4.en.md +48 -0
  10. package/docs/release-notes/RELEASE-NOTES-2.8.4.md +48 -0
  11. package/docs/release-notes/RELEASE-NOTES-2.8.5.en.md +75 -0
  12. package/docs/release-notes/RELEASE-NOTES-2.8.5.md +75 -0
  13. package/package.json +7 -3
  14. package/prompt-corpus-persona/persona-corpus.json +9 -9
  15. package/prompt-corpus-persona/persona-corpus.md +17 -17
  16. package/prompt-corpus-v2/formal-verify-v2.json +109 -109
  17. package/prompt-corpus-v2/formal-verify-v2.md +216 -216
  18. package/prompt-corpus-v3/formal-verify-v3.json +77 -77
  19. package/prompt-corpus-v3/formal-verify-v3.md +147 -147
  20. package/prompt-corpus-v4/formal-verify-v4.json +10 -10
  21. package/prompt-corpus-v4/formal-verify-v4.md +40 -40
  22. package/prompt-corpus-v5/prompt-corpus-v5.json +61 -61
  23. package/prompt-corpus-v5/prompt-corpus-v5.md +613 -186
  24. package/tests/audit-artifact-docs.mjs +38 -2
  25. package/tests/audit-artifact-docs.mutants.mjs +66 -1
  26. package/tests/audit-engine-faces.mjs +2 -2
  27. package/tests/audit-persona-surface.test.mjs +4 -1
  28. package/tests/audit-prompt-invariants.mjs +292 -2
  29. package/tests/e2e-v5-round2.test.mjs +248 -2
  30. package/tests/formal-verify-v2.test.mjs +6 -5
  31. package/tests/formal-verify-v3.test.mjs +6 -5
  32. package/tests/formal-verify-v4.test.mjs +4 -4
  33. package/tests/prompt-v5-integrity.test.mjs +6 -6
  34. package/tests/run-tests.mjs +18 -2
  35. package/tests/v4-final-paper.mutants.mjs +14 -0
  36. package/tests/v4-final-paper.test.mjs +18 -0
  37. package/tests/v5-institute-fixes.mutants.mjs +115 -0
  38. package/vibe-math-v2/agent.cordis.yml +2 -2
  39. package/vibe-math-v2/math-computation.js +5 -5
  40. package/vibe-math-v2/vibe-math-v2.js +66 -17
  41. package/vibe-math-v3/agent.cordis.yml +2 -2
  42. package/vibe-math-v3/math-computation.js +5 -5
  43. package/vibe-math-v3/vibe-math-v3.js +64 -15
  44. package/vibe-math-v4/agent.cordis.yml +6 -6
  45. package/vibe-math-v4/math-computation.js +5 -5
  46. package/vibe-math-v4/vibe-math-v4.js +71 -20
  47. package/vibe-math-v5/agent.cordis.yml +6 -6
  48. package/vibe-math-v5/math-computation.js +5 -5
  49. package/vibe-math-v5/vibe-math-v5.js +385 -34
  50. package/vibe-math-v5//345/256/236/347/216/260/346/226/271/346/241/210.md +55 -2
package/README.en.md CHANGED
@@ -168,14 +168,22 @@ Two installation methods, choose either one (they can also coexist):
168
168
 
169
169
  ### Method A: one-click install as a plugin package (recommended, installs all four presets at once)
170
170
 
171
- On the desktop app, install `dsh-vibe-math` from **Settings → Plugins**; on the command line, use a profile:
171
+ On the desktop app, install `dsh-vibe-math` from **Settings → Plugins**; on the command line, use a profile (**always pin a version**):
172
172
 
173
173
  ```sh
174
- dsh plugin --profile <your profile> add dsh-vibe-math
174
+ # Prerequisite: DSH forwards plugin installs to pnpm (it does not bundle pnpm) - check it first:
175
+ pnpm --version
176
+
177
+ # Install this package (with an explicit version; without one you may stay on an OLD version, see below):
178
+ dsh plugin --profile <your profile> add dsh-vibe-math@<version>
175
179
  # Or install directly from GitHub:
176
180
  dsh plugin --profile <your profile> add github:ChongCyrus/Vibe-Mathematics
177
181
  ```
178
182
 
183
+ > **Prerequisite**: `dsh plugin …` needs a working **`pnpm`** (DSH **forwards** installs to pnpm and does **not** bundle it). When it is missing the command ends with **`exit 1`**, while the **plugin market may show no reason** ⇒ attach `~/.dsh/profiles/<profile>/hub.log` (DSH's install log) so the failure can be located.
184
+ >
185
+ > **Why every example pins `@<version>`**: pnpm resolves a bare package name through the profile's `package.json` and `pnpm-lock.yaml` first, so **without a version you may stay on an OLD version**. Measured locally: `@latest`, `@^2`, `pnpm update --latest` and `pnpm add …@latest` **all four failed to move the install**; **only an explicit version** (e.g. `@2.8.5`) actually upgrades. Install and upgrade both use `add dsh-vibe-math@<version>` (use `add`, not `update`).
186
+
179
187
  Then start a new session and pick **Vibe Math V2** (v2, classic), **Vibe Math V3** (v3, classic), **Vibe Math V4** (v4, resident self-organization) or **Vibe Math V5** (v5, institute system) in the preset picker — the four architectures are peers, choose according to your actual needs (see "How to choose").
180
188
  **The two DSH generations land in different places, and this package adapts to both**:
181
189
 
@@ -199,7 +207,14 @@ Then start a new session and select **"Vibe Math V2"** / **"Vibe Math V3"** / **
199
207
  - **Supported range**: `0.1.2-alpha.4` … `0.2.0-rc.2` (11 versions declared `compatible`, tested target `0.2.0-rc.2`; `engines.node` is `^22.19.0 || >=24.0.0`) — per-version declarations, the `engines.dsh` range and `peerDependencies` live in `package.json` (`dsh.compatibility.dshReleases`).
200
208
  - **Delivery form**: DSH ≥ 0.1.7 uses **composition-row declarations** (the `agentPresets` service); DSH ≤ 0.1.6 uses the `~/.dsh/.agent-presets/<id>/` directory + preset picker — one bundle covers both lines.
201
209
  - **Hard constraint**: v5 keeps its institute state **only** in `State/<institute>.v5state.json` and **never** in the host session log — on an unknown event type DSH **refuses to load the whole session**, so it will not open on the next resume.
202
- - **Everything else** (host rows and required services, the startup self-check and capability gate, the live-resident cap, the three 2026 fixes, the `dsh.bundle.patch` constraint, the upgrade path and `peerDependencies`): see `docs/COMPAT-AUDIT-ROUND2.md`; to upgrade this package use `dsh plugin --profile <your profile> add dsh-vibe-math@latest` (use `add`, not `update`).
210
+ - **Everything else** (host rows and required services, the startup self-check and capability gate, the live-resident cap, the three 2026 fixes, the `dsh.bundle.patch` constraint, the upgrade path and `peerDependencies`): see `docs/COMPAT-AUDIT-ROUND2.md` (install/upgrade: its §9); to upgrade this package use `dsh plugin --profile <your profile> add dsh-vibe-math@<new version>` (**pin the version**; use `add`, not `update` — measured locally: `@latest` does not upgrade).
211
+
212
+ ### Install/upgrade troubleshooting (pnpm and versions)
213
+
214
+ - **Cannot install (`exit 1`)**: first check that `pnpm --version` runs — DSH's installer **forwards** installs to pnpm and does **not** bundle it; when it is missing the plugin market often shows only `exit 1` and no reason. Install pnpm, retry `add`, and attach `~/.dsh/profiles/<profile>/hub.log`.
215
+ - **Installed, but an OLD version**: measured locally, **`@latest` does not upgrade either** (all four spellings failed), because the profile's `package.json` / `pnpm-lock.yaml` win over the `latest` tag. Use an **explicit version**: `dsh plugin --profile <your profile> add dsh-vibe-math@<new version>`; or set the profile dependency to `latest` and `install`.
216
+ - **Check which version you actually have**: look at the profile's `package.json` (or run `pnpm list --depth 0` in that profile) instead of only checking that a preset appeared.
217
+ - **After upgrading**: **restart DSH** (see above for when the managed content is replaced).
203
218
 
204
219
  ---
205
220
 
@@ -520,7 +535,7 @@ All four presets default to `finalPaper=true`: once the respective closure signa
520
535
  | `leanAsync` | `true` | all four | Lean compile mode: `true` (default) = background queue — `lean_run` / `lean_archive{run:true}` enqueue and return `async.jobId` immediately without blocking the member; `false` = synchronous await (the previous semantics, verbatim) |
521
536
  | `leanJobsMaxParallel` | `1` | all four | Background-compile concurrency cap (default 1 = serial; raise it to compile in parallel) |
522
537
  | `leanInitiative` | `'normal'` | all four | **Daily formalization eagerness**: `off` / `normal` (default, formalize along the way) / `eager` (more proactive). A **separate knob** from `formalVerify` (which only says how strong verification must be) |
523
- | `leanSearchPaths` | `[]` | all four | Extra Lean search roots (injected first; the automatic `<VibeMath root>` is added after them; nothing is injected when `leanArgs` already sets `--search-path`/`-R`/`--root`) |
538
+ | `leanSearchPaths` | `[]` | all four | Extra Lean search roots (injected first; the automatic `<VibeMath root>` is added after them; nothing is injected when `leanArgs` already sets `-R`/`--root`) |
524
539
  | `finalPaper` | `true` | all four | **Final paper**: written automatically at closure (`false` disables only the automatic trigger; the manual command still works). Full contract: `docs/final-paper.md` |
525
540
  | `paperFormat` | `both` | all four | Which text versions to produce: `both` (md+tex) / `md` (skips compilation and must not warn about a missing tex) / `tex` |
526
541
  | `paperLanguage` | `zh` | all four | Paper language: `zh` (ctexart, engine prefers xelatex) / `en` (article, pdflatex first) |
package/README.md CHANGED
@@ -168,14 +168,22 @@ flowchart TB
168
168
 
169
169
  ### 方式 A:作为插件包一键安装(推荐,同时装出四个预设)
170
170
 
171
- 桌面版在「设置 → 插件」里安装 `dsh-vibe-math`;命令行 profile 用:
171
+ 桌面版在「设置 → 插件」里安装 `dsh-vibe-math`;命令行 profile 用(**务必带版本号**):
172
172
 
173
173
  ```sh
174
- dsh plugin --profile <你的 profile> add dsh-vibe-math
174
+ # 前置:DSH 的插件安装会调用 pnpm(它不自带 pnpm)——先确认它可用:
175
+ pnpm --version
176
+
177
+ # 安装本包(带显式版本;不带版本可能停在旧版,原因见下):
178
+ dsh plugin --profile <你的 profile> add dsh-vibe-math@<版本>
175
179
  # 或从 GitHub 直装:
176
180
  dsh plugin --profile <你的 profile> add github:ChongCyrus/Vibe-Mathematics
177
181
  ```
178
182
 
183
+ > **前置**:`dsh plugin …` 需要一个可用的 **`pnpm`**(DSH 把安装**转交 pnpm**,且**不自带**它)。缺失时命令以 **`exit 1`** 结束,而**插件市场可能不显示原因** ⇒ 请附 `~/.dsh/profiles/<profile>/hub.log`(DSH 的安装日志)来定位。
184
+ >
185
+ > **为什么示例都带 `@<版本>`**:pnpm 优先按 profile 的 `package.json` 与 `pnpm-lock.yaml` 解析裸包名,**不带版本可能装到旧版**;本机实测 `@latest`、`@^2`、`pnpm update --latest`、`pnpm add …@latest` **四种写法都拿不到新版**,**只有显式版本**(如 `@2.8.5`)会真的升级。安装与升级都用 `add dsh-vibe-math@<版本>`(用 `add` 而非 `update`)。
186
+
179
187
  之后新建会话,预设选择器里选择 **Vibe Math V2**(v2,经典)、**Vibe Math V3**(v3,经典)、**Vibe Math V4**(v4,常驻自组织)或 **Vibe Math V5**(v5,研究所体系)即可——四个架构同级,按实际需求自选(见「怎么选」)。
180
188
  **两个 DSH 世代的落点不同,本包自动适配**:
181
189
 
@@ -199,7 +207,14 @@ dsh plugin --profile <你的 profile> add github:ChongCyrus/Vibe-Mathematics
199
207
  - **支持范围**:`0.1.2-alpha.4` … `0.2.0-rc.2`(11 个版本声明为 `compatible`,实测目标 `0.2.0-rc.2`;`engines.node` 为 `^22.19.0 || >=24.0.0`)——逐版本声明、`engines.dsh` 区间与 `peerDependencies` 见 `package.json`(`dsh.compatibility.dshReleases`)。
200
208
  - **交付形态**:DSH ≥ 0.1.7 走**组合行声明**(`agentPresets` 服务),DSH ≤ 0.1.6 走 `~/.dsh/.agent-presets/<id>/` 目录 + preset picker——一份 bundle 同时兼容两条线。
201
209
  - **硬约束**:v5 研究所状态**只**写 `State/<研究所>.v5state.json`,**绝不**写宿主会话日志——DSH 遇到日志里不认识的事件类型会**拒绝加载整个会话**,会话下次恢复将打不开。
202
- - **其余细节**(宿主插件行与必需服务、启动自检与能力门槛、常驻数量上限、2026 的三处修复、`dsh.bundle.patch` 约束、升级路径与 `peerDependencies`):见 `docs/COMPAT-AUDIT-ROUND2.md`;升级本包用 `dsh plugin --profile <你的 profile> add dsh-vibe-math@latest`(用 `add` 而非 `update`)。
210
+ - **其余细节**(宿主插件行与必需服务、启动自检与能力门槛、常驻数量上限、2026 的三处修复、`dsh.bundle.patch` 约束、升级路径与 `peerDependencies`):见 `docs/COMPAT-AUDIT-ROUND2.md`(安装与升级见其 §9);升级本包用 `dsh plugin --profile <你的 profile> add dsh-vibe-math@<新版本>`(**给显式版本**,用 `add` 而非 `update`——本机实测 `@latest` 不升级)。
211
+
212
+ ### 安装/升级排查(pnpm 与版本)
213
+
214
+ - **装不上(`exit 1`)**:先确认 `pnpm --version` 能跑——DSH 的安装器把安装**转交 pnpm** 且**不自带**它;缺失时插件市场里往往只有 `exit 1`、没有原因。装好 pnpm 后重试 `add`,并附 `~/.dsh/profiles/<profile>/hub.log`。
215
+ - **装上了但是旧版**:本机实测**带 `@latest` 也不升级**(四种写法都无效),因为 profile 的 `package.json` / `pnpm-lock.yaml` 优先于 `latest` 标签。改用**显式版本**:`dsh plugin --profile <你的 profile> add dsh-vibe-math@<新版本>`;或先把 profile 依赖改成 `latest` 再 `install`。
216
+ - **确认实际版本**:看 profile 的 `package.json`(或在该 profile 下 `pnpm list --depth 0`),别只看预设选择器里有没有 preset。
217
+ - **升级之后**:**重启 DSH**(受管内容的替换时机见上文)。
203
218
 
204
219
  ---
205
220
 
@@ -520,7 +535,7 @@ v5 的完整架构(成员生命周期、一轮时序、共识状态机、会
520
535
  | `leanAsync` | `true` | 四套 | Lean 编译模式:`true`(默认)= 后台队列,`lean_run` / `lean_archive{run:true}` 入队即返回 `async.jobId`,成员不阻塞;`false` = 同步 await(旧语义逐字保留) |
521
536
  | `leanJobsMaxParallel` | `1` | 四套 | 后台编译并发上限(默认 1 = 串行;调大即并行) |
522
537
  | `leanInitiative` | `'normal'` | 四套 | **日常形式化主动性**:`off` / `normal`(默认,顺手形式化)/ `eager`(更主动)。与 `formalVerify`(验证时的要求强度)**是两件事** |
523
- | `leanSearchPaths` | `[]` | 四套 | 额外 Lean 搜索根(先注入它们、再注入自动的 `<VibeMath 根>`;`leanArgs` 里已有 `--search-path`/`-R`/`--root` 时不注入) |
538
+ | `leanSearchPaths` | `[]` | 四套 | 额外 Lean 搜索根(先注入它们、再注入自动的 `<VibeMath 根>`;`leanArgs` 里已有 `-R`/`--root` 时不注入) |
524
539
  | `finalPaper` | `true` | 四套 | **最终论文**:收口时自动撰写(`false` 只关自动触发,手动命令仍可用)。完整契约见 `docs/final-paper.md` |
525
540
  | `paperFormat` | `both` | 四套 | 论文产出格式:`both`(md+tex)/ `md`(跳过编译,且不报"缺 tex")/ `tex` |
526
541
  | `paperLanguage` | `zh` | 四套 | 论文语言:`zh`(ctexart,引擎优先 xelatex)/ `en`(article,pdflatex 优先) |
package/cordis.patch.yml CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  - math_computation {op: probe|run|receipt|install, engine, mode: code|file|expr, …} — 先 probe 预检引擎/包/许可,再调引擎计算并把脚本与输出归档成可复核回执;缺引擎/缺包只报告与给安装指引/计划;shell 兜底不算归档。
86
86
  - 替代必须声明(诚实性):当替代方案改变了**精确性或结论强度**时(精确符号解 → 数值近似、闭式解 → 采样/求积、改了精度/容差/假设、换了算法类),结论里**必须写明**,不得读起来像得到了原本(精确/所要求的)结果;拿不到精确结果就直说。
87
- - 归档→编辑→重跑:mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true` 与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
87
+ - 归档→编辑→重跑(**回执=一次 math_computation 调用的 JSON 结果**:先 probe 或 run 一次,它有哪些字段就一目了然):mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true`(脚本内容相对上一份回执变过)与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
88
88
 
89
89
  Final paper: strict termination writes Paper/<project>/{paper.md,paper.tex,paper.pdf,paper.meta.json,paper.log.md}
90
90
  automatically — a dedicated paper-writing child assembles the solved material (finalPaper=false disables only that
@@ -404,7 +404,7 @@
404
404
 
405
405
  - math_computation {op: probe|run|receipt|install, engine, mode: code|file|expr, …} — 先 probe 预检引擎/包/许可,再调引擎计算并把脚本与输出归档成可复核回执;缺引擎/缺包只报告与给安装指引/计划;shell 兜底不算归档。
406
406
  - 替代必须声明(诚实性):当替代方案改变了**精确性或结论强度**时(精确符号解 → 数值近似、闭式解 → 采样/求积、改了精度/容差/假设、换了算法类),结论里**必须写明**,不得读起来像得到了原本(精确/所要求的)结果;拿不到精确结果就直说。
407
- - 归档→编辑→重跑:mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true` 与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
407
+ - 归档→编辑→重跑(**回执=一次 math_computation 调用的 JSON 结果**:先 probe 或 run 一次,它有哪些字段就一目了然):mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true`(脚本内容相对上一份回执变过)与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
408
408
 
409
409
  A /vibe slash command mirrors the main controls (/vibe start [override]|resume [override]|pause|abort|status|report|mode
410
410
  <auto|manual>|setup|save|template [global|project]|add <id> <desc>|add-proposition <id> <概述>|list-propositions|methods|index|plan|lock|project [list|new <name>|<name>]|decisions|agents|paper [lang=zh|en] [format=both|md|tex] [force]).
@@ -722,8 +722,8 @@
722
722
  too; they work in every mode.
723
723
  - vibe_v4_formal_report — human-readable Lean formal-verification mirror (mode, Lean-passed
724
724
  - math_computation {op: probe|run|receipt|install, engine, mode: code|file|expr, …} — 先 probe 预检引擎/包/许可,再调引擎计算并把脚本与输出归档成可复核回执;缺引擎/缺包只报告与给安装指引/计划;shell 兜底不算归档。
725
- - 归档→编辑→重跑:mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true` 与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
726
- - Archive -> edit -> re-run: for mode:'code' the script original is at the receipt's scriptPath (Computation/<id>/script.<ext>, **relative to the project root**); member file tools resolve paths against the SESSION CWD, so READ it via the ABSOLUTE `receipt.scriptAbs`, or join `receipt.cwd` with `receipt.scriptPath` (both are in the receipt). To produce evidence for EDITED code, edit the SOURCE FILE you originally ran and re-run mode:'file' pointing at THAT SAME PATH: the archive id is keyed by the SOURCE PATH, so this lands on the SAME archive as attempt >= 2, with `scriptChanged:true` and `previousReceipt` pointing at the previous attempt. Pointing mode:'file' at the ARCHIVED COPY itself (the `receipt.scriptAbs` path) is a DIFFERENT archive BY DESIGN - a new id, attempt 1, no `previousReceipt`, `scriptChanged:false`: the earlier attempt is never overwritten, but it is NOT "a new attempt of the same archive", and the tool says so via `fileIsArchivedScript` and the `ARCHIVED_SCRIPT_RERUN` warning. **An old receipt is NOT evidence for edited code** - cite the receipt whose scriptHash matches the current code; the tool warns explicitly via scriptChanged / scriptChangedDuringRun.
725
+ - 归档→编辑→重跑(**回执=一次 math_computation 调用的 JSON 结果**:先 probe 或 run 一次,它有哪些字段就一目了然):mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true`(脚本内容相对上一份回执变过)与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
726
+ - Archive -> edit -> re-run (a RECEIPT is the JSON result of ONE math_computation call - run `probe` or `run` once and the fields below are right there in front of you): for mode:'code' the script original is at the receipt's scriptPath (Computation/<id>/script.<ext>, **relative to the project root**); member file tools resolve paths against the SESSION CWD, so READ it via the ABSOLUTE `receipt.scriptAbs`, or join `receipt.cwd` with `receipt.scriptPath` (both are in the receipt). To produce evidence for EDITED code, edit the SOURCE FILE you originally ran and re-run mode:'file' pointing at THAT SAME PATH: the archive id is keyed by the SOURCE PATH, so this lands on the SAME archive as attempt >= 2, with `scriptChanged:true` (the script content differs from the previous receipt) and `previousReceipt` pointing at the previous attempt. Pointing mode:'file' at the ARCHIVED COPY itself (the `receipt.scriptAbs` path) is a DIFFERENT archive BY DESIGN - a new id, attempt 1, no `previousReceipt`, `scriptChanged:false`: the earlier attempt is never overwritten, but it is NOT "a new attempt of the same archive", and the tool says so via `fileIsArchivedScript` and the `ARCHIVED_SCRIPT_RERUN` warning. **An old receipt is NOT evidence for edited code** - cite the receipt whose scriptHash matches the current code; the tool warns explicitly via scriptChanged / scriptChangedDuringRun.
727
727
  - 替代必须声明(诚实性):当替代方案改变了**精确性或结论强度**时(精确符号解 → 数值近似、闭式解 → 采样/求积、改了精度/容差/假设、换了算法类),结论里**必须写明**,不得读起来像得到了原本(精确/所要求的)结果;拿不到精确结果就直说。
728
728
  - Declare substitutions (honesty): when an alternative changes EXACTNESS or conclusion strength (exact symbolic solution -> numerical approximation, closed form -> sampling/quadrature, changed precision/tolerances/assumptions, a different algorithm class), the conclusion MUST say so explicitly and must not read as if the original (exact/requested) result had been obtained; if the exact result is unavailable, say so plainly.
729
729
  objects, recorded blockers, formalization TODO, library paths).
@@ -768,7 +768,7 @@
768
768
  `<project root>/Formal/<id>.lean`.
769
769
  - Reuse FIRST: call vibe_v4_lean_lib (and vibe_v4_lean_read for the verbatim text) BEFORE writing a new
770
770
  definition; reuse an archived file with `import Formal.Lib.<name>` / `import Formal.Proved.<name>`
771
- (the framework passes --search-path <VibeMath root>, so VibeMath is the module root).
771
+ (the framework passes -R <VibeMath root>, so VibeMath is the module root).
772
772
  - Choose WHAT to formalize with three criteria: (1) valuable or likely reusable, (2) rather key or
773
773
  necessary, (3) you are confident in the statement — when you are NOT confident, record blocked
774
774
  with the difficulty instead of hiding uncertainty behind a formalization.
@@ -1085,8 +1085,8 @@
1085
1085
  verification (execute / archive / list the reuse library / read an archived file
1086
1086
  verbatim / watch the background compile queue). Members use them too; they work in every mode.
1087
1087
  - math_computation {op: probe|run|receipt|install, engine, mode: code|file|expr, …} — 先 probe 预检引擎/包/许可,再调引擎计算并把脚本与输出归档成可复核回执;缺引擎/缺包只报告与给安装指引/计划;shell 兜底不算归档。
1088
- - 归档→编辑→重跑:mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true` 与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
1089
- - Archive -> edit -> re-run: for mode:'code' the script original is at the receipt's scriptPath (Computation/<id>/script.<ext>, **relative to the project root**); member file tools resolve paths against the SESSION CWD, so READ it via the ABSOLUTE `receipt.scriptAbs`, or join `receipt.cwd` with `receipt.scriptPath` (both are in the receipt). To produce evidence for EDITED code, edit the SOURCE FILE you originally ran and re-run mode:'file' pointing at THAT SAME PATH: the archive id is keyed by the SOURCE PATH, so this lands on the SAME archive as attempt >= 2, with `scriptChanged:true` and `previousReceipt` pointing at the previous attempt. Pointing mode:'file' at the ARCHIVED COPY itself (the `receipt.scriptAbs` path) is a DIFFERENT archive BY DESIGN - a new id, attempt 1, no `previousReceipt`, `scriptChanged:false`: the earlier attempt is never overwritten, but it is NOT "a new attempt of the same archive", and the tool says so via `fileIsArchivedScript` and the `ARCHIVED_SCRIPT_RERUN` warning. **An old receipt is NOT evidence for edited code** - cite the receipt whose scriptHash matches the current code; the tool warns explicitly via scriptChanged / scriptChangedDuringRun.
1088
+ - 归档→编辑→重跑(**回执=一次 math_computation 调用的 JSON 结果**:先 probe 或 run 一次,它有哪些字段就一目了然):mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true`(脚本内容相对上一份回执变过)与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
1089
+ - Archive -> edit -> re-run (a RECEIPT is the JSON result of ONE math_computation call - run `probe` or `run` once and the fields below are right there in front of you): for mode:'code' the script original is at the receipt's scriptPath (Computation/<id>/script.<ext>, **relative to the project root**); member file tools resolve paths against the SESSION CWD, so READ it via the ABSOLUTE `receipt.scriptAbs`, or join `receipt.cwd` with `receipt.scriptPath` (both are in the receipt). To produce evidence for EDITED code, edit the SOURCE FILE you originally ran and re-run mode:'file' pointing at THAT SAME PATH: the archive id is keyed by the SOURCE PATH, so this lands on the SAME archive as attempt >= 2, with `scriptChanged:true` (the script content differs from the previous receipt) and `previousReceipt` pointing at the previous attempt. Pointing mode:'file' at the ARCHIVED COPY itself (the `receipt.scriptAbs` path) is a DIFFERENT archive BY DESIGN - a new id, attempt 1, no `previousReceipt`, `scriptChanged:false`: the earlier attempt is never overwritten, but it is NOT "a new attempt of the same archive", and the tool says so via `fileIsArchivedScript` and the `ARCHIVED_SCRIPT_RERUN` warning. **An old receipt is NOT evidence for edited code** - cite the receipt whose scriptHash matches the current code; the tool warns explicitly via scriptChanged / scriptChangedDuringRun.
1090
1090
  - 替代必须声明(诚实性):当替代方案改变了**精确性或结论强度**时(精确符号解 → 数值近似、闭式解 → 采样/求积、改了精度/容差/假设、换了算法类),结论里**必须写明**,不得读起来像得到了原本(精确/所要求的)结果;拿不到精确结果就直说。
1091
1091
  - Declare substitutions (honesty): when an alternative changes EXACTNESS or conclusion strength (exact symbolic solution -> numerical approximation, closed form -> sampling/quadrature, changed precision/tolerances/assumptions, a different algorithm class), the conclusion MUST say so explicitly and must not read as if the original (exact/requested) result had been obtained; if the exact result is unavailable, say so plainly.
1092
1092
  A /v5 slash command mirrors these (configure|start|resume|pause|stop|status|report|members|message|meeting|hire|fire|add|remove|set|paper).
@@ -1116,7 +1116,7 @@
1116
1116
  small lemmas/propositions/definitions into the library even in ordinary rounds).
1117
1117
  - Reuse first: check vibe_v5_lean_lib BEFORE writing a definition, reuse archived
1118
1118
  content via `import Formal.Lib.<name>` / `import Formal.Proved.<name>` (the compile
1119
- gets `--search-path <VibeMath root>`, preceded by any leanSearchPaths), or copy the
1119
+ gets `-R <VibeMath root>`, preceded by any leanSearchPaths), or copy the
1120
1120
  exact text with vibe_v5_lean_read. Re-archiving identical content is de-duplicated.
1121
1121
  - Compiles are ASYNC by default (leanAsync=true, leanJobsMaxParallel default 1):
1122
1122
  vibe_v5_lean_run / vibe_v5_lean_archive enqueue and return at once; watch them with
@@ -352,3 +352,30 @@ e2e-f1-agent-detach CONFIRMED (drives the real AgentRegistry)
352
352
 
353
353
  - 本文件的 **`### 未修(需你决策,风险与取舍已说明)`** 一节(F-1…F-11;F-7 非缺陷、F-8 已知限制、F-9 已有 `tests/audit-corrupt-file-guard.test.mjs`、F-10/F-11 待定、**F-4c 已关闭**)是唯一权威的"未修 / 需决策"清单。
354
354
  - **按标题文本定位,不写行号**:行号会随编辑漂移,标题是稳定的;链接目标在本仓库内,且本文件随包发布(`files[]`),因此指针不会指向包外。
355
+
356
+ ## 9. 安装与升级(插件市场 · pnpm 前置 · 显式版本)
357
+
358
+ **背景**:issue #10 报告"经 DSH 插件市场安装失败(`exit 1`)"。复核结论:**两条根因都不在本插件包内**(不在本包的代码、参数或提示词里),但任何一条都会让用户卡住,所以写进本文档。
359
+
360
+ ### 9.1 前置:安装需要一个可用的 `pnpm`
361
+
362
+ DSH 的插件管理器把安装**转交 pnpm**,并且**不自带 pnpm**:`@deepseek-ai/dsh-plugin-manager/lib/index.js` 多处 `execa(options.command ?? "pnpm", …)`(L324/517/650/694/733)、`pnpmCommand` 默认 `"pnpm"`(L1354)、`bin.js:23` 注释 "forwarding to pnpm";`dsh/node_modules` 中含 `pnpm` 的条目为空。报告者环境 `pnpm: unknown` / `npm: unknown` ⇒ 必然失败。
363
+
364
+ - **复现(本机)**:把 PATH 里的 `pnpm` 剥掉后执行安装 ⇒ 同一条报错 + `exit 1`;恢复 `pnpm` 后同一命令成功。
365
+ - **表现与取证**:失败时插件市场 UI 可能**不显示原因**,只有一个 `exit 1`。定位请附 `~/.dsh/profiles/<profile>/hub.log`(DSH 的安装日志)。
366
+ - **修复**:装好 `pnpm`(`pnpm --version` 能跑)后重试安装。
367
+
368
+ ### 9.2 安装/升级:必须给**显式版本**
369
+
370
+ `install-spec.js` 只**校验** spec、**不注入版本**;裸包名交给 pnpm 后按 profile 的 `package.json`(首次 `add` 时由 pnpm 写下,例如 `"dsh-vibe-math": "^2.8.1"`)与 `pnpm-lock.yaml` 解析 ⇒ **可能停在旧版**。
371
+
372
+ - **实测(本机)**:`@latest`、`@^2`、`pnpm update --latest`、`pnpm add …@latest` **四种写法全部无效**;**只有显式 `@2.8.4` 成功升级**。
373
+ - **正确用法**:
374
+
375
+ ```sh
376
+ pnpm --version # 前置检查
377
+ dsh plugin --profile <profile> add dsh-vibe-math@<版本> # 安装与升级都写显式版本
378
+ ```
379
+
380
+ - **其他排查**:怀疑装成旧版时,可先把 profile 依赖改成 `latest` 再 `install`;升级后**重启 DSH**(受管内容的替换时机见本文件其余章节与 README 安装段)。
381
+ - **交叉引用**:README(中/英)安装段与 troubleshooting 小节给出同样的前置与显式版本要求,并由 `tests/audit-artifact-docs.mjs` 第 5 节静态守卫(含单点具名变异)。
@@ -125,6 +125,19 @@
125
125
  `consult = {messages: 0, meetings: 0}` 开始,**重启前的消息与会议不再计入**(这是设计,不是丢状态 ✗)。
126
126
  因此 `paperEditor="office"` 在 `force` 之后必须**重新**征询;`V5_PAPER_CONSULT_REQUIRED` 的响应会**具名**说明
127
127
  这一点(`restarted: true` + `forceReason`),不再让人靠猜。
128
+ - **会议何时会被放弃(看门狗)**:会议停滞超过 `2 × activityTimeoutMs`(默认 **240 s**)**且**没有任何被点名的成员
129
+ 仍在进行中时,才由看门狗放弃 ✗;若仍有被点名的成员在飞,则宽限到 **3 倍**(默认 720 s)再放弃 —— 成员的**一整轮**
130
+ 在真机上很容易超过软阈值,若此时就放弃,其发言只能退化成「会后补记」✗(实测一次真机运行出现 **1067** 次补记、
131
+ **863** 次定稿被拒 ✓)。放弃会写进纪要(`⚠ 本次会议因长时间无新发言而被放弃`)并在群聊具名一行 ✓;放弃**之后**
132
+ 到达的发言不会被丢弃,而是作为「**会后补记**」追加进纪要 ✓(见 §7 上一条)。
133
+ - **稿件(`paper_part`/`paper_review`)由论文阶段的专属轮次征集**:提示词只在这些轮次给出 schema(
134
+ `paperPartPrompt` / `paperReviewPrompt`),而**会议轮只征集 `input`(发言)**。采集端对轮次类型**不设限** ——
135
+ 会议轮里附带 `paper_part` 框架也会收 ✓ —— 但**不要指望用会议轮交稿**:会议轮的提示词不会列出稿件字段 ✓
136
+ (实测某次真机复测里,成员在会议轮连续"空交"三次并空转 ✗ ⇒ 这是**阶段边界**,不是丢稿 ✗)。
137
+ - **`consult` 的两个计数只在"真的发生"时增加**:所办消息在**实际送达**后计(`notePaperConsult('message')`),
138
+ 会议在**实际开始**且由所办召集时计(`notePaperConsult('meeting')`)。**因此**:被挂起(`pendingMeeting`)或被拒绝的
139
+ 会议请求**在开始之前不计入** ✓ —— 这是设计("记录在案"才算征询 ✓),不是计数滞后 ✗;如果你在这一窗口内定稿,
140
+ 会如实被 `V5_PAPER_CONSULT_REQUIRED` 挡住,直到那场会议真正开起来 ✓。
128
141
 
129
142
  ## 8. LaTeX 检测、编译与降级
130
143
 
@@ -60,7 +60,7 @@
60
60
  | `leanAsync` | 布尔 | `true` | `true` = 编译走**后台队列**(`lean_run` / `lean_archive{run:true}` 入队后立即返回 `{async:{jobId,state:'queued'}}`);`false` = **完全同步 await**(旧路径逐字保留)。只有 `settled(ok)` 才可能置 `passed`,见 §7.3 |
61
61
  | `leanJobsMaxParallel` | 正整数 | `1` | 后台编译并发上限(默认 1 = 串行;调大即并行,v2/v3 把合法范围夹在 1–8) |
62
62
  | `leanInitiative` | `'off'` \| `'normal'` \| `'eager'` | `'normal'` | **日常流程中的形式化主动性**:`off` 不主动(只在验证提示词里按 `formalVerify` 的要求做)/ `normal` 顺手把有价值且可能复用的东西形式化 / `eager` 更主动。**与 `formalVerify` 是两件事**:它不改变定论门禁 |
63
- | `leanSearchPaths` | 字符串数组 | `[]` | 额外编译搜索根:先注入它们、再注入自动的 `<VibeMath 根>`(去重、保持用户给的顺序);`leanArgs` 里已显式给 `--search-path`/`-R`/`--root` 时**不注入任何东西**,见 §7.6 |
63
+ | `leanSearchPaths` | 字符串数组 | `[]` | 额外编译搜索根:先注入它们、再注入自动的 `<VibeMath 根>`(去重、保持用户给的顺序);`leanArgs` 里已显式给 `-R`/`--root` 时**不注入任何东西**,见 §7.6 |
64
64
 
65
65
  - 非法值一律**回退到默认**(`formalVerify` 非三档之一 → `'off'`;`leanInitiative` 非三档之一 → `'normal'`;
66
66
  `leanTimeoutMs` 非正 → 默认;`leanJobsMaxParallel` < 1 → 1;`leanSearchPaths` 非数组 → `[]` 并去空串/去重)。
@@ -438,18 +438,18 @@
438
438
  并把作业标为 `interrupted`、把对象停在 `attempted`——**绝不因为"进程已经不在"而当作通过**。
439
439
  `interrupted` 的作业可以重跑(重跑会 `attempts+1`)。
440
440
 
441
- ### 7.6 `--search-path` 注入(四套一致)
441
+ ### 7.6 `-R` 注入(四套一致)
442
442
 
443
443
  编译器 argv 固定为:
444
444
 
445
445
  ```
446
- [exe, ...用户 leanArgs, --search-path <VibeMath 根>, <file>]
446
+ [exe, ...用户 leanArgs, -R <VibeMath 根>, <file>]
447
447
  ```
448
448
 
449
449
  - 自动根**只有一个**:`<VibeMath 根>`(`import Formal.Lib.<name>` 的模块根),插在
450
- **用户参数之后、文件名之前**——`lake env lean` 因此自然变成 `lake env lean --search-path <root> <file>`。
450
+ **用户参数之后、文件名之前**——`lake env lean` 因此自然变成 `lake env lean -R <root> <file>`。
451
451
  - `leanSearchPaths` 非空时,**先注入用户给的路径(按给定顺序),再注入自动根**,整体去重。
452
- - **用户显式给出搜索根就不注入**:`leanArgs` 里已有 `--search-path` / `-R` / `--root` 时完全尊重用户配置。
452
+ - **用户显式给出搜索根就不注入**:`leanArgs` 里已有 `-R` / `--root` 时完全尊重用户配置。
453
453
  - **不使用环境变量**:宿主的 `spawn` 没有 env 槽位,所以"注入"只能是参数注入;
454
454
  也不依赖 `LEAN_PATH` 之类的约定。
455
455
 
@@ -589,7 +589,7 @@
589
589
  恢复扫描 `Formal/Jobs/*.json`——`queued` 重入队、`running` 标记中断(哈希匹配则重入队、`attempts+1`)、
590
590
  `settled` 只在**同一构建上下文**下补写结论。
591
591
  15. **去重与搜索路径注入**:同内容 + 同构建上下文再归档 → `deduped:true` 且不重写不重编译;
592
- 编译器 argv 必须是 `[exe, ...用户 leanArgs, --search-path <VibeMath 根>, <file>]`,
592
+ 编译器 argv 必须是 `[exe, ...用户 leanArgs, -R <VibeMath 根>, <file>]`,
593
593
  用户已显式给出搜索根时**不注入**,`leanSearchPaths` 先于自动根且去重。
594
594
 
595
595
  ---
@@ -8,6 +8,8 @@ Chinese counterpart of this index is [`README.md`](./README.md) (中文索引).
8
8
 
9
9
  | Version | Key change | Notes |
10
10
  |---|---|---|
11
+ | 2.8.5 | Patch: the Lean formalization path **works again** (the search-root flag now uses Lean 4's `-R`; previously the compiler failed at argument parsing ⇒ a real-host run compiles, archives into `Verified/Lean/`, and another member reuses it); TeX engines that are installed but not on PATH are now found **within bounds** (documented locations only, no full-disk scan, no automatic install, `triedPaths` named); the prompts no longer demand impossible actions; v5 gains a **cooperation / management / work-experience feedback library** (`self`/`team` self-adjust, `interpersonal` needs an assessment plus a written-back verification; switch `feedback`); the install/upgrade docs state the `pnpm` prerequisite and an **explicit version**. | [中文](./RELEASE-NOTES-2.8.5.md) · [English](./RELEASE-NOTES-2.8.5.en.md) |
12
+ | 2.8.4 | Patch: v5's **meeting watchdog** no longer abandons a meeting while an ASKED member is still in flight (exempt within the soft bound; the 3× hard bound still closes it), so ordinary speeches return to the ordinary sections and "late notes" become an insurance policy again — before the fix one real run showed **1067** late notes and **863** refused finalisations. | [中文](./RELEASE-NOTES-2.8.4.md) · [English](./RELEASE-NOTES-2.8.4.en.md) |
11
13
  | 2.8.3 | Patch: a speech arriving **after the meeting closed** is no longer dropped silently (it becomes a named "late note" in the minutes, which stay append-only); an office finalisation refused after a `force` restart now **explains why** (`restarted: true` + `forceReason`, stating that the counters restarted with the new paper and that a fresh consultation is required); the docs now state "`force` = a new paper". | [中文](./RELEASE-NOTES-2.8.3.md) · [English](./RELEASE-NOTES-2.8.3.en.md) |
12
14
  | 2.8.2 | Patch: an explicit `paperLatexCommand` is now probed **alone**, so `triedPaths` no longer reports impossible paths of the form "known TeX root + absolute path"; v5's delivered `paper.md` / `paper.tex` now also **each state** the compile outcome (no engine detected / compilation failed), exactly once and without duplication on re-entry — matching v4 since 2.8.1. Both have real-host reproductions and named-red guards. | [中文](./RELEASE-NOTES-2.8.2.md) · [English](./RELEASE-NOTES-2.8.2.en.md) |
13
15
  | 2.8.1 | Patch: v4's delivered `paper.md` and `paper.tex` now each state the compile outcome (no engine detected → tex+md only, or PDF compilation failed with tex/md kept), **exactly once** and idempotently — resolving known limitation #3 of the 2.8.0 notes; added `scripts/release-check.mjs`, which runs the pre-release checks as one command (version triple, section order of both notes, manifest registration, declared-but-missing = 0, repository-only files not shipped, no CRLF in the package). | [中文](./RELEASE-NOTES-2.8.1.md) · [English](./RELEASE-NOTES-2.8.1.en.md) |
@@ -7,6 +7,8 @@
7
7
 
8
8
  | 版本 | 关键变化 | 说明 |
9
9
  |---|---|---|
10
+ | 2.8.5 | 补丁:Lean 形式化通道**恢复可用**(搜索根旗标改用 Lean 4 的 `-R`;此前编译器在参数解析阶段即失败 ⇒ 真机实测编译通过、归档 `Verified/Lean/` 并被另一成员复用);"装了但不在 PATH"的 TeX 引擎现在能**有界**发现(只查文档化位置、不扫全盘、不自动安装,`triedPaths` 具名);提示词不再要求成员做做不到的事;v5 新增**合作/管理/工作经验反馈库**(`self`/`team` 自我调整、`interpersonal` 需评估+事后回填,开关 `feedback`);安装/升级写明 `pnpm` 前置与**显式版本**。 | [中文](./RELEASE-NOTES-2.8.5.md) · [English](./RELEASE-NOTES-2.8.5.en.md) |
11
+ | 2.8.4 | 补丁:v5 **会议看门狗**不再在"被点名的成员仍在进行中"时放弃会议(软界内豁免、硬界 3 倍预算仍会放弃)⇒ 正常发言回到正常小节,「会后补记」退回为保险;修复前真机实测一次运行 **1067** 次补记、**863** 次定稿被拒。 | [中文](./RELEASE-NOTES-2.8.4.md) · [English](./RELEASE-NOTES-2.8.4.en.md) |
10
12
  | 2.8.3 | 补丁:会议**收束后到达的发言**不再静默丢弃(作为具名「会后补记」写入纪要、只增不覆盖);`force` 重启后 `paperEditor="office"` 的定稿拒绝**说明原因**(新增 `restarted:true` + `forceReason`,并写明"计数随新论文重置、需重新征询");文档明确「`force` = 一张新论文」。 | [中文](./RELEASE-NOTES-2.8.3.md) · [English](./RELEASE-NOTES-2.8.3.en.md) |
11
13
  | 2.8.2 | 补丁:显式 `paperLatexCommand` 改为**单独探测** ⇒ `triedPaths` 不再出现「已知 TeX 根 + 绝对路径」这类**不可能路径**;v5 交付的 `paper.md`/`paper.tex` 也**各自写明**编译结果(未检测到引擎/编译失败),恰好一次且重入不重复 ⇒ 与 2.8.1 的 v4 对齐。两处均有真机复现读数与具名红守卫。 | [中文](./RELEASE-NOTES-2.8.2.md) · [English](./RELEASE-NOTES-2.8.2.en.md) |
12
14
  | 2.8.1 | 补丁:v4 交付的 `paper.md`/`paper.tex` 现在各自写明编译结果(未检测到引擎 ⇒ 只产出 tex+md,或 PDF 编译失败并保留 tex/md),**恰好一次**且幂等 ⇒ 2.8.0 说明里的「已知限制」第 3 条已解决;新增 `scripts/release-check.mjs` 把发布前逐项核对做成一条命令(版本三处一致/两份说明章节顺序/清单登记/声明缺失=0/开发专用文件不随包/包内无 CRLF)。 | [中文](./RELEASE-NOTES-2.8.1.md) · [English](./RELEASE-NOTES-2.8.1.en.md) |
@@ -0,0 +1,48 @@
1
+ # dsh-vibe-math 2.8.4 — Release Notes
2
+
3
+ > Previous release: 2.8.3. This is a **patch release**: it fixes v5's **meeting watchdog**, which used to abandon a meeting while an ASKED member was still working — turning ordinary speeches into "late notes" and making `paperEditor="office"` finalisations fail again and again. Parameter names and defaults, data formats and the directory layout are **unchanged**, the DSH support window is unchanged, and **no migration is needed**.
4
+
5
+ ## Overview
6
+
7
+ - A meeting is **no longer** abandoned before an ASKED member still in flight hands its speech in: such members may hold the meeting open up to **3×** the stall budget, after which the hard bound still closes it (a genuinely wedged turn must not wedge the whole meeting).
8
+ - The practical effect is that **ordinary speeches land in the ordinary sections again**: one real run before the fix showed **1067** "late notes" and **863** refused finalisations; with the fix, meetings actually collect their speakers and the "late note" path goes back to being an **insurance policy** rather than the norm.
9
+ - The `paperEditor="office"` gate therefore becomes satisfiable in practice (it requires at least one office message and one **recorded** meeting for this paper).
10
+ - The documentation now states when a meeting is abandoned, how the abandonment is named, and what happens to speeches that arrive **after** it.
11
+
12
+ ## Added
13
+
14
+ - None. (Patch release: no new parameters, fields or tools.)
15
+
16
+ ## Changed
17
+
18
+ - Meeting stall decision: within the soft bound (`2 × activityTimeoutMs`, default 240 s) the meeting is kept open as long as an **asked member is still in flight**; past the **3×** hard bound (default 720 s) it is still abandoned.
19
+ - `docs/final-paper.md` §7 now documents "when a meeting is abandoned" (soft/hard bounds and their relation to the "late note" path).
20
+
21
+ ## Fixed
22
+
23
+ - Symptom: after members (including the **convener**) spoke in a meeting, the minutes only gained "late note" entries — one real run reached **1067** of them, and `paperEditor="office"` finalisations were refused by `V5_PAPER_CONSULT_REQUIRED` **863** times. Cause: the stall check measured only the time since the last INPUT and **ignored whether an asked member was still busy**; a member's turn on a real host frequently outlives the 240 s budget, so the meeting was abandoned by the watchdog and later speeches could only take the late-note path. Members that were asked and are still busy now hold the meeting open until the hard bound (3× the budget), so ordinary speeches return to the ordinary sections. Guards: `tests/e2e-v5-round2.test.mjs` (`★ [real1004-stall]`, a **source-level invariant** — this branch cannot be triggered deterministically inside the shipped suites, so the criterion is "source invariant + real-host re-test"), `tests/v5-institute-fixes.mutants.mjs` (**19/19** named reds).
24
+
25
+ ## Compatibility & Migration
26
+
27
+ - Breaking changes: **none**.
28
+ - Additive only: no new fields (behaviour and documentation only).
29
+ - Migration: none needed.
30
+ - The DSH support window is unchanged (see `engines.dsh` in `package.json`).
31
+
32
+ ## Known Limitations
33
+
34
+ - The **real-host** behaviour of the meeting watchdog can only be confirmed by a real-host re-test (inside the shipped suites the heartbeat delay is not controllable, so the branch cannot be triggered deterministically; the guard is therefore a **source-level invariant**, as stated in the test comments and the commit message).
35
+ - **TeX installed in a non-standard location is still not auto-discovered**: the default probe covers PATH and the documented common install roots.
36
+ - The shipped suites **do not cover host-level behaviour** (for example "the caller is dropped after an interrupt").
37
+ - **A root-agent question blocks the whole institute** (operational note, product unchanged): state the problem and acceptance criteria up front for unattended runs. See [`slv-playbook.md`](./slv-playbook.md) §5.
38
+
39
+ ## Verification
40
+
41
+ - `node tests/run-tests.mjs` — all green (**106** items: 44 suites + 62 probes).
42
+ - `node scripts/release-check.mjs` — exits 0; after publishing, add `--registry` to compare the registry shasum with the local tarball.
43
+ - This release's fix: `node tests/e2e-v5-round2.test.mjs` (`★ [real1004-stall]`, measured `passed=436 failed=0`) and `node tests/v5-institute-fixes.mutants.mjs` (**19/19** named reds).
44
+ - Real-host re-check recipe: install the exact published version (`-Pin <version>`) and run a **trimmed** meeting + paper task (no research), then count "late notes" (1067 before the fix) and refused finalisations (863 before the fix) — both should drop sharply.
45
+
46
+ ## Dependencies
47
+
48
+ - No new runtime dependencies; the DSH support window is unchanged.
@@ -0,0 +1,48 @@
1
+ # dsh-vibe-math 2.8.4 — 发布说明
2
+
3
+ > 上一版本:2.8.3。本版是**补丁版**:修正 v5 的**会议看门狗**——它此前会在"已被点名的成员仍在进行中"时就把会议放弃,导致成员的正常发言退化成「会后补记」,并让 `paperEditor="office"` 的定稿被反复拒绝。参数名与默认值、数据格式与目录结构**未变**,DSH 支撑窗口不变,**无需迁移**。
4
+
5
+ ## 概述
6
+
7
+ - 会议**不再**在"被点名、且仍在进行中"的成员交回发言之前被放弃:这类成员最多把会议续命到停滞预算的 **3 倍**,超过硬界才放弃(真正卡死的一轮仍不能拖住整场会议)。
8
+ - 结果是**正常发言回到正常小节**:真机实测修复前一次运行出现 **1067** 次「会后补记」、**863** 次定稿被拒;修复后会议能真正收齐发言,「会后补记」退回为**保险**而非常态。
9
+ - `paperEditor="office"` 的定稿闸门因此更容易被真正满足(它要求本张论文至少有 1 条所办消息与 1 次**记录在案**的会议)。
10
+ - 文档写明会议何时会被放弃、放弃如何具名、以及放弃**之后**到达的发言如何处置。
11
+
12
+ ## 新增
13
+
14
+ - 无。(本版为修复版:没有新增参数、字段或工具。)
15
+
16
+ ## 变更
17
+
18
+ - 会议停滞判定:软界(`2 × activityTimeoutMs`,默认 240 s)内,只要仍有**被点名的成员在进行中**就不放弃;超过 **3 倍**(默认 720 s)的硬界则照旧放弃。
19
+ - `docs/final-paper.md` §7 增补"会议何时会被放弃"的口径(含软界/硬界与「会后补记」的关系)。
20
+
21
+ ## 修复
22
+
23
+ - 症状:成员(含**召集人**)在会议里发言后,纪要里却只留下「会后补记」条目;一次真机运行累计 **1067** 次补记,并且 `paperEditor="office"` 的定稿被 `V5_PAPER_CONSULT_REQUIRED` 拒绝 **863** 次。原因:会议停滞只按"最后一次发言"计时,**不看被点名的成员是否仍在忙**;真机上成员的一整轮常常超过 240 s 的预算,于是会议在看门狗手里被放弃,随后到达的发言只能走补记通道。现在"被点名且仍在忙"的成员会把放弃推迟到硬界(3 倍预算),正常发言因此回到会议的正常小节。守卫:`tests/e2e-v5-round2.test.mjs`(`★ [real1004-stall]`,**源码级不变量**:该分支的真机行为无法在随包套件里确定性触发,故判据是"源码不变量 + 真机复测")、`tests/v5-institute-fixes.mutants.mjs`(**19/19** 具名红)。
24
+
25
+ ## 兼容性与迁移
26
+
27
+ - 破坏性变更:**无**。
28
+ - 纯新增:无新增字段(仅行为与文档变化)。
29
+ - 迁移:无需迁移。
30
+ - DSH 支撑窗口不变(见 `package.json` 的 `engines.dsh`)。
31
+
32
+ ## 已知限制
33
+
34
+ - 会议看门狗分支的**真机**行为只能由真机复测确认(随包套件里心跳延时不可控 ⇒ 该分支不能确定性触发;因此守卫是**源码不变量**,这一点已在测试注释与提交信息里写明)。
35
+ - **非标准位置的 TeX 仍不会被自动发现**:默认探测只覆盖 PATH 与文档化的常见安装根。
36
+ - 随包套件**不覆盖宿主层行为**(例如"中断后调用方被丢弃")。
37
+ - **根代理提问会阻塞整所流程**(运维注意项,不改产品):长跑时请把问题与验收条件一次说清。详见 [`slv-playbook.md`](./slv-playbook.md) §5。
38
+
39
+ ## 验证方式
40
+
41
+ - `node tests/run-tests.mjs` —— 全部通过(**106** 项:44 套件 + 62 探针)。
42
+ - `node scripts/release-check.mjs` —— 退出 0;发布后加 `--registry` 比对线上 shasum 与本地 tarball。
43
+ - 本版修复:`node tests/e2e-v5-round2.test.mjs`(`★ [real1004-stall]`,实测 `passed=436 failed=0`)与 `node tests/v5-institute-fixes.mutants.mjs`(**19/19** 具名红)。
44
+ - 真机复测配方:用 registry 上的精确版本(`-Pin <version>`)跑一个**精简**会议+论文任务(跳过研究),统计「会后补记」次数(修复前 1067 次)与定稿被拒次数(修复前 863 次)应显著下降。
45
+
46
+ ## 依赖
47
+
48
+ - 无新增运行时依赖;DSH 支撑窗口不变。
@@ -0,0 +1,75 @@
1
+ # dsh-vibe-math 2.8.5 — Release Notes
2
+
3
+ > Previous release: 2.8.4. This is a **patch release** (the version stays on the 2.8.x line): it is mostly **fixes** — the Lean formalization path could not compile by default, TeX engines that are installed but not on PATH are now found, plus several corrections to the member-facing prompts; it also carries one **purely additive** capability (the feedback library, on by default and changing no existing behaviour). Parameter names and defaults, data formats and the directory layout are **unchanged**, the DSH support window is unchanged, and **no migration is needed**.
4
+
5
+ ## Overview
6
+
7
+ - **The Lean formalization path works again**: the injected search-root flag was spelled for Lean 3, so the compiler failed at **argument parsing** (the file was never read) and formalization could never pass; the presets now inject `-R <root>`, and on a real host a minimal proof compiles, is archived, and can be read and reused by another member.
8
+ - **TeX engines that are installed but not on PATH are now found**: new **bounded**, documented candidate roots (still documented locations only, no full-disk scan, never an automatic install, never a write outside the workspace); when nothing is detected, `triedPaths` still **names** every path that was probed.
9
+ - **The prompts no longer demand things a member cannot do**: a missing engine is now reported to the office (or the group chat) instead of "asking the user"; the LaTeX guidance states **when it applies**; the "receipt" concept is given background; the empty engine table no longer contradicts itself; the member-facing notice frame is now **【研究所提示】**; and agent-facing text no longer contains drive-letter literals.
10
+ - **New cooperation / management / work-experience feedback library** (v5): record how the institute works and close the loop — the `self`/`team` routes are **self-adjustment with no approval**, while the `interpersonal` route requires an assessment and a **written-back verification** afterwards; switch `feedback` (default `on`).
11
+ - **The two install/upgrade traps are now documented**: `dsh plugin …` needs a working **`pnpm`**, and install/upgrade should **pin an explicit version** (a bare name can stay on an OLD version).
12
+ - Maintainer-facing: a set of static invariants and named-mutation self-checks across all four presets; the gate is **decoupled** from whether the host has TeX installed, so the suites give the same result on any machine.
13
+
14
+ ## Added
15
+
16
+ - Tool **`vibe_v5_feedback`** (v5, member-usable): `op` is `'add' | 'update' | 'list' | 'summary'`; `list` defaults to the **not-yet-closed** entries (filter by `category`/`route`; `all: true` shows everything); `summary` counts by category and route.
17
+ - Carrier: `Shared/Feedback/<category>.md` (`cooperation`|`management`|`process`|`obstacle`|`conflict`) plus a `Shared/Feedback/index.json` index; the authoritative data lives in the institute's **durable state**, so a restart does not lose it.
18
+ - Parameter **`feedback`** (v5): `'on'` (default) | `'off'`. With `'off'` the prompt section is **not injected** and **every** operation of the tool is **refused by name** (`V5_FEEDBACK_DISABLED`) — never a silent write.
19
+ - **Three routes** (stated in the prompt and the docs): `self` = your own way of working ⇒ **adjust it yourself, nobody has to adopt it**; `team` = organisation / workflow / how the team runs ⇒ **no approval either**, change it as soon as it looks wrong; `interpersonal` = **caused by someone else and only they can fix it** ⇒ the **only** route that requires an assessment first and a **written-back verification** afterwards (`outcome` must be filled in before it can close).
20
+ - Permissions: members and temp workers may `add`, and may `update` only the entries **they started**; the office may `update` any entry (mark it resolved / write the result back).
21
+ - Observability: entry count / not-yet-closed count / per-category / per-route counts appear in `vibe_v5_feedback {op:'summary'}`, `vibe_v5_report` and `vibe_v5_overview`.
22
+
23
+ ## Changed
24
+
25
+ - Prompts (the four affected presets): handling a missing engine changed from "ask the user" to "**report what happened to the office** (or the group chat)", and the office confirms with the user — members have no channel to the user.
26
+ - Prompts: the LaTeX guidance now says it **only applies while you are writing or compiling the paper**, instead of appearing as unexplained noise in every wake.
27
+ - Prompts: in `math_computation`'s "archive → edit → re-run" section, the **first** mention of a receipt now explains "**a receipt = the JSON result of one `math_computation` call** — run `probe` or `run` once and its fields are right there", with minimal glosses on the key fields.
28
+ - Prompts: the empty engine table changed from `math_computation:本机可用 (无)` to **`math_computation:可用引擎 无`** (English `available engines none`).
29
+ - Prompts: the member-facing notice frame changed from `【框架提示】` to **`【研究所提示】`**.
30
+ - Documentation: the install section and its troubleshooting note state the `pnpm` prerequisite and the "explicit version" rule; the README's old "upgrade with `@latest`" wording is corrected to an explicit version.
31
+ - Maintainer-facing: the shipped prompt corpus was regenerated together with the text above.
32
+
33
+ ## Fixed
34
+
35
+ - **Symptom**: Lean formalization almost never passed in v2/v3/v4/v5 — the log showed many Lean invocations while `formal.passed` stayed empty. **Cause**: the injected search-root flag was Lean 3's `--search-path`, while Lean 4 only accepts `-R` / `--root`, so the compiler exited with `rc=1` at **argument parsing** and the file was never read. **Fix**: all four presets inject `-R <root>`; if the user already set a search root in `leanArgs`, no second one is injected (semantics unchanged). **Verified**: on a real host the compiler is invoked correctly and reads the file; the minimal proof `theorem probe_true : True := trivial` compiles and is archived into `Verified/Lean/`, after which **another member reads that archived lemma and uses its statement as the premise of a new theorem** (reuse works). Guards: `tests/formal-verify-v2.test.mjs` / `tests/formal-verify-v3.test.mjs` / `tests/formal-verify-v4.test.mjs` / `tests/formal-verify-v5.test.mjs`, `tests/audit-prompt-invariants.mjs` (flag spelling plus "no preset text may teach `--search-path` again"), `tests/v5-institute-fixes.mutants.mjs` (named reds).
36
+ - **Symptom**: when TeX Live was installed at a location such as `texlive\<year>\bin\windows` (installed but not on PATH), all four presets reported "no LaTeX engine detected" and delivered tex+md only. **Cause**: the default probe covered PATH and MiKTeX's common roots only. **Fix**: new **bounded** candidate roots (Windows `texlive\<year>\bin\windows` under a drive root, `/usr/local/texlive` and `/opt/texlive` on Unix-like systems, `/Library/TeX/texbin` on macOS) with a **cap** on the total; still **documented locations only, no full-disk scan, never an automatic install, never a write outside the workspace**; when nothing is detected, `triedPaths` still **names** every path that was probed. **Verified**: on a real host an engine that is installed but not on PATH is found (the PATH lookup fails, a documented root hits); with those roots sandboxed, every candidate probe stays inside the allowed tree and the total stays under the cap. Guards: `tests/audit-prompt-invariants.mjs` (documented-root coverage / the cap / no bare drive root / every probe site must go through the sandboxable seam), `tests/e2e-v5-round2.test.mjs`, `tests/audit-math-computation-parity.mjs`.
37
+ - **Symptom**: members were asked to do something they cannot do ("ask the user"). **Fix**: changed to "report what happened to the office (or the group chat)". Guards: `tests/audit-prompt-invariants.mjs` (member-visible text may not demand an impossible action), `tests/e2e-v5-round2.test.mjs`.
38
+ - **Symptom**: agent-facing text contained host absolute paths (drive-letter literals), which are wrong guidance on another machine. **Fix**: rewritten portably (`texlive\<year>\bin\windows`, `/usr/local/texlive`, `/opt/texlive`, `/Library/TeX/texbin`). Guards: `tests/audit-prompt-invariants.mjs` (source-level drive-letter criterion plus the path criterion over the four prompt corpora), `tests/audit-path-discipline.mjs`.
39
+ - **Symptom**: the first time a member saw "the receipt fields `scriptPath` / `scriptAbs`" it had no idea what a receipt was and probed around for it. **Fix**: the "archive → edit → re-run" section now gives that background at its **first** mention. Guards: `tests/e2e-v5-round2.test.mjs` (module-level behaviour plus the member prompt end to end), `tests/v5-institute-fixes.mutants.mjs` (removing that sentence reddens by name).
40
+ - **Symptom**: with no engine, the prompt rendered `math_computation:本机可用 (无)`, which contradicts itself. **Fix**: it now reads "可用引擎 无" (English `available engines none`). Guards: `tests/e2e-v5-round2.test.mjs`, `tests/v5-institute-fixes.mutants.mjs` (restoring the old wording reddens by name).
41
+ - **Symptom**: member-facing text called the plugin "框架", which is ambiguous from an agent's point of view (the plugin? the host? the institute?). **Fix**: the notice frame is now **【研究所提示】**. Guards: `tests/e2e-v5-round2.test.mjs` (source level: `【框架提示】` no longer appears in agent-facing text), `tests/v5-institute-fixes.mutants.mjs`.
42
+
43
+ ## Compatibility & Migration
44
+
45
+ - Breaking changes: **none**.
46
+ - Additive only: the `vibe_v5_feedback` tool, the `feedback` parameter (default `'on'`), and the `Shared/Feedback/` directory with its index.
47
+ - Migration: **none needed**; existing parameter names and defaults, data formats and the directory layout are unchanged.
48
+ - The DSH support window is unchanged (see `engines.dsh` in `package.json`).
49
+ - **Upgrade**:
50
+
51
+ ```
52
+ dsh plugin --profile <your profile> add dsh-vibe-math@2.8.5
53
+ ```
54
+
55
+ - If you are still on an **OLD version** after upgrading: first check that `pnpm` works — the plugin management behind `dsh plugin …` needs a working `pnpm`; without it the install fails, and the **plugin market may show no reason** (attach `~/.dsh/profiles/<profile>/hub.log` to locate it).
56
+ - Then check whether that profile's `package.json` / `pnpm-lock.yaml` still points at the old version: they **win** over the `latest` tag, so **a bare name can stay on an OLD version**; retry with an explicit version.
57
+
58
+ ## Known Limitations
59
+
60
+ - The LaTeX engine probe still covers **documented locations only**: an engine in a non-standard directory will not be discovered; use the `paperLatexCommand` parameter to name the engine command by absolute path (the prompt tells you to probe again after setting it).
61
+ - The few behaviours that need a real engine/host can only be confirmed by a **real-host re-test**; the shipped suites protect them with **source-level invariants plus a sandboxable seam**, and do not claim to cover host-level behaviour (for example "the caller is dropped after an interrupt").
62
+ - **The feedback library produces no research evidence**: it records methodology and collaboration only (how work is organised, where it is stuck, friction between people); research conclusions still go to `Progress/` and `Verified/`.
63
+ - Install/upgrade: on this machine's toolchain `@latest`, `@^2`, `pnpm update --latest` and `pnpm add …@latest` all failed to guarantee an upgrade, so an **explicit version** is still recommended (see "Upgrade").
64
+ - A root-agent question blocks the whole institute (operational note, product unchanged): state the problem and the acceptance criteria up front for long runs.
65
+
66
+ ## Verification
67
+
68
+ - `node tests/run-tests.mjs` — all green (**106** items: 44 suites + 62 probes).
69
+ - `node scripts/release-check.mjs` — exits 0; after publishing, add `--registry` to compare the registry shasum with the local tarball.
70
+ - This release's suites: `node tests/e2e-v5-round2.test.mjs` (measured `passed=484 failed=0`), `node tests/v5-institute-fixes.mutants.mjs` (**33/33** named reds), `node tests/audit-prompt-invariants.mjs` (**211/0**; `--self-probe` **26/26**), `node tests/audit-artifact-docs.mjs` (**24/0**; its mutant harness **8/8**), `node tests/audit-math-computation-parity.mjs` (**108/0**).
71
+ - Real-host re-check recipe: ① **Lean** — on a host with Lean installed, send one object through `vibe_v5_lean_archive` (`kind:'proof'`); it should compile, the file should appear under `Verified/Lean/`, and another member should be able to `import` it; ② **TeX** — install the engine into a documented root but keep it off PATH; the paper flow should no longer report "no engine detected", and `triedPaths` should list the paths that were probed.
72
+
73
+ ## Dependencies
74
+
75
+ - No new runtime dependencies; the DSH support window is unchanged.