dsh-vibe-math 2.7.1 → 2.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +682 -690
- package/README.md +19 -27
- package/cordis.patch.yml +112 -16
- package/docs/AUDIT-CHECKLIST.md +744 -518
- package/docs/COMPAT-AUDIT-ROUND2.md +35 -9
- package/docs/COMPAT-AUDIT-ROUND3.md +154 -154
- package/docs/final-paper.md +172 -172
- package/docs/formal-verification.md +588 -588
- package/docs/math-computation.md +194 -163
- package/docs/parameter-schema.md +37 -0
- package/docs/release-notes/README.en.md +49 -0
- package/docs/release-notes/README.md +48 -0
- package/docs/release-notes/RELEASE-NOTES-2.7.2.en.md +72 -0
- package/docs/release-notes/RELEASE-NOTES-2.7.2.md +72 -0
- package/docs/release-notes/RELEASE-NOTES-2.7.3.en.md +67 -0
- package/docs/release-notes/RELEASE-NOTES-2.7.3.md +67 -0
- package/docs/release-notes/TEMPLATE.md +126 -0
- package/docs/status-report-fields.md +167 -0
- package/docs/test-timing.md +157 -154
- package/installer.js +27 -17
- package/package.json +55 -3
- package/prompt-corpus-persona/persona-corpus.json +9 -9
- package/prompt-corpus-persona/persona-corpus.md +225 -33
- package/prompt-corpus-v2/formal-verify-v2.json +305 -113
- package/prompt-corpus-v2/formal-verify-v2.md +2399 -279
- package/prompt-corpus-v3/formal-verify-v3.json +134 -110
- package/prompt-corpus-v3/formal-verify-v3.md +409 -141
- package/prompt-corpus-v4/formal-verify-v4.json +18 -18
- package/prompt-corpus-v4/formal-verify-v4.md +49 -44
- package/prompt-corpus-v5/prompt-corpus-v5.json +82 -82
- package/prompt-corpus-v5/prompt-corpus-v5.md +513 -259
- package/scripts/update-doc-counts.mjs +71 -0
- package/tests/audit-artifact-docs.mjs +72 -0
- package/tests/audit-artifact-docs.mutants.mjs +58 -0
- package/tests/audit-installer-assertions.mutants.mjs +63 -0
- package/tests/audit-installer-compat.test.mjs +52 -4
- package/tests/audit-installer-policy.test.mjs +41 -8
- package/tests/audit-math-computation-contract.mjs +107 -9
- package/tests/audit-math-computation-contract.mutants.mjs +106 -0
- package/tests/audit-math-computation-parity.mjs +164 -3
- package/tests/audit-math-computation-sensitivity.mjs +6 -4
- package/tests/audit-package-membership.mjs +57 -0
- package/tests/audit-package-membership.mutants.mjs +28 -0
- package/tests/audit-participant-set-parity.mjs +160 -0
- package/tests/audit-path-discipline.mjs +83 -0
- package/tests/audit-path-discipline.mutants.mjs +51 -0
- package/tests/audit-persona-sensitivity.mjs +14 -0
- package/tests/audit-persona-surface.mutants.mjs +69 -0
- package/tests/audit-persona-surface.test.mjs +63 -22
- package/tests/audit-prompt-duplication.mjs +143 -0
- package/tests/audit-prompt-duplication.mutants.mjs +50 -0
- package/tests/audit-prompt-invariants.mjs +43 -5
- package/tests/audit-readme-bilingual.test.mjs +152 -0
- package/tests/audit-readme-counts.mjs +95 -0
- package/tests/audit-readme-counts.mutants.mjs +52 -0
- package/tests/audit-registration.mjs +78 -0
- package/tests/audit-status-report-fields.mjs +172 -0
- package/tests/audit-status-report-fields.mutants.mjs +64 -0
- package/tests/audit-v3-registration-parity.mjs +156 -0
- package/tests/audit-v5-integrity.mjs +300 -13
- package/tests/audit-v5-lean-abstention.mjs +392 -0
- package/tests/audit-v5-lean-abstention.mutants.mjs +106 -0
- package/tests/audit-v5-prompt-duplication.mjs +88 -0
- package/tests/audit-v5-prompt-duplication.mutants.mjs +34 -0
- package/tests/audit-v5-sensitivity.mjs +15 -8
- package/tests/e2e-identity-a6.mutants.mjs +65 -0
- package/tests/e2e-v5-round2.test.mjs +566 -12
- package/tests/formal-verify-v2.test.mjs +91 -5
- package/tests/formal-verify-v3.mutants.mjs +117 -0
- package/tests/formal-verify-v3.test.mjs +85 -6
- package/tests/formal-verify-v4.mutants.mjs +152 -0
- package/tests/formal-verify-v4.test.mjs +628 -9
- package/tests/formal-verify-v5.test.mjs +68 -9
- package/tests/helpers/doc-counts-format.mjs +41 -0
- package/tests/helpers/math-computation-fake-seam.mjs +4 -0
- package/tests/math-computation-a1.mutants.mjs +72 -0
- package/tests/math-computation-archive-rerun.mutants.mjs +65 -0
- package/tests/math-computation-discovery.mutants.mjs +76 -0
- package/tests/math-computation-shared.test.mjs +396 -2
- package/tests/math-computation-v2.test.mjs +767 -0
- package/tests/math-computation-v3.test.mjs +759 -0
- package/tests/math-computation-v4.mutants.mjs +133 -0
- package/tests/math-computation-v4.test.mjs +739 -0
- package/tests/prompt-v5-integrity.test.mjs +13 -2
- package/tests/run-tests.mjs +139 -9
- package/tests/run-tests.mutants.mjs +70 -0
- package/tests/selfdrive-v5.mjs +53 -1
- package/tests/selfdrive-v5.mutants.mjs +132 -0
- package/tests/v2-fix-probes.mutants.mjs +100 -0
- package/tests/v2-fix-probes.test.mjs +1039 -0
- package/tests/v2-list-agents-and-next-step.mutants.mjs +106 -0
- package/tests/v3-fix-probes.mutants.mjs +95 -0
- package/tests/v3-fix-probes.test.mjs +891 -0
- package/tests/v5-institute-fixes.mutants.mjs +190 -0
- package/vibe-math-v2/agent.cordis.yml +62 -6
- package/vibe-math-v2/math-computation.js +229 -29
- package/vibe-math-v2/math-engines.js +12 -12
- package/vibe-math-v2/vibe-math-v2.js +458 -119
- package/vibe-math-v2//345/256/236/347/216/260/346/226/271/346/241/210.md +5 -1
- package/vibe-math-v3/agent.cordis.yml +72 -6
- package/vibe-math-v3/math-computation.js +229 -29
- package/vibe-math-v3/math-engines.js +12 -12
- package/vibe-math-v3/vibe-math-v3.js +482 -139
- package/vibe-math-v4/agent.cordis.yml +44 -8
- package/vibe-math-v4/math-computation.js +229 -29
- package/vibe-math-v4/math-engines.js +12 -12
- package/vibe-math-v4/vibe-math-v4.js +245 -52
- package/vibe-math-v4//345/256/236/347/216/260/346/226/271/346/241/210.md +2 -0
- package/vibe-math-v5/agent.cordis.yml +46 -12
- package/vibe-math-v5/math-computation.js +229 -29
- package/vibe-math-v5/math-engines.js +12 -12
- package/vibe-math-v5/vibe-math-v5.js +1307 -243
- package/vibe-math-v5//345/256/236/347/216/260/346/226/271/346/241/210.md +1728 -1655
- package/vibe-math-v5//346/236/266/346/236/204/345/233/276.md +693 -693
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# dsh-vibe-math 2.7.2 — Release Notes (English)
|
|
2
|
+
|
|
3
|
+
> Previous release: 2.7.1. This is a **PATCH release that contains fixes and additive response fields only** — no existing behaviour contract changes. It completes **engine discovery, evidence and diagnostics** on real hosts: an engine that is installed but not on `PATH` is now found, install guidance never hands over a command that cannot run, and failure evidence (timeout, missing packages, unenforced constraints) is neither absent nor silent. The archive identity and the participant-set semantics are directly checkable. Parameter 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
|
+
- **More reliable discovery on real hosts**: discovery runs PATH → runtimes shipped by the host → **the known per-OS install locations**, so an engine installed in its default directory but never added to `PATH` (R, for example) is found. The engines with known default locations are **R / Octave / Julia / MATLAB** (plus Python on Windows); Maple and Wolfram have no stable default layout and are not covered. A host may also supply the candidate roots through the optional `installRoots` interface, so discovery no longer depends on the plugin process's environment variables.
|
|
8
|
+
- **No more unrunnable install commands**: `MATH_ENGINE_NOT_FOUND` only offers an executable command when that package manager really exists on this machine; otherwise it gives the suggested command, the official location and the reason.
|
|
9
|
+
- **`probe` no longer reports only the good news**: besides the engines that resolved, it names the **configured but not found** engines and why.
|
|
10
|
+
- **Complete failure evidence**: `MATH_TIMEOUT` carries the same fields as `MATH_NONZERO_EXIT`, and a timeout's partial output is available in **both the response and the receipt**.
|
|
11
|
+
- **The constraint policy is stated**: version constraints are **checked for existence only and never enforced**, and the constraints that were not checked are listed instead of being dropped silently.
|
|
12
|
+
- **Checkable archive identity**: the run response carries the archive id and attempt, and the "edit an archived script, then re-run" semantics are explained by an explicit field and warning.
|
|
13
|
+
- **One participant set per verify/meeting (v4/v5)**: the roster is snapshotted with a version, every view reads the same snapshot, and the version increments when the set really changes so a stale set is detectable.
|
|
14
|
+
- **More specific diagnostics**: member-level failures return a code, the current state and a next step instead of a bare "no such resident".
|
|
15
|
+
|
|
16
|
+
## Added
|
|
17
|
+
|
|
18
|
+
- The `math_computation` `run` response now carries **`runId`** and **`attempt`** (previously the archive id existed only inside the receipt, so a caller could not verify "same archive").
|
|
19
|
+
- The `probe` response now carries **`configured`** (every engine enabled in the configuration) and **`absent[]`**, where each missing engine states **`why`** (`not-found-on-this-machine` or `needs-a-caller-supplied-command`).
|
|
20
|
+
- Constraint policy fields: both a successful response and a "missing packages" failure carry **`versionPolicy`** and **`constraintsNotEnforced`** (the constraints that were **not** checked, or an empty array).
|
|
21
|
+
- `MATH_TIMEOUT` responses carry **`stdout`**/**`stderr`** (capped); the receipt JSON carries **`partialStdout`**/**`partialStderr`**.
|
|
22
|
+
- `MATH_ENGINE_NOT_FOUND`'s `next` carries **`suggestedCommand`**, **`packageManager`**, **`packageManagerAvailable`** and **`note`** (plus `vendorUrl` where the engine has one).
|
|
23
|
+
- The `run` response carries **`fileIsArchivedScript`**: when `mode:'file'` targets an **archived copy**, it also emits the **`ARCHIVED_SCRIPT_RERUN`** warning explaining that this is a **new archive by design** (new id, attempt 1, no history). To get a **new attempt of the same archive with change detection**, edit the **original source file** and re-run `mode:'file'` pointing at **that same source path**.
|
|
24
|
+
- v4: `status()` carries **`rosterVersion`** and **`frozenParticipants`**; the `consensus` / `meeting` / `verify` views carry their own `rosterVersion`.
|
|
25
|
+
- v4: the `paper` view carries **`dirProjected`** / **`dirSource`** / **`readSideEffect`**, saying whether the path is a projection or real state.
|
|
26
|
+
- v2/v3: decision and sub-agent interrupt diagnostics carry **`code`** and **`next`** (for example `VIBE_MATH_DECISION_NOT_FOUND`, with the current queue state); v4 member-level calls carry **`V4_NO_SUCH_RESIDENT`** with the current roster and a next step.
|
|
27
|
+
|
|
28
|
+
## Changed
|
|
29
|
+
|
|
30
|
+
- **Discovery order**: PATH → runtimes shipped by the host → the known per-OS install locations (Windows `%ProgramFiles%`, `%ProgramFiles(x86)%`, `%LOCALAPPDATA%\Programs`; the macOS framework path; Linux `/usr/lib/R`, `/opt/R`, and similar). **Existence is always proven by listing a directory**, never assumed.
|
|
31
|
+
- **Install guidance**: `next.command` is an executable command only when the corresponding package manager resolves on this machine; otherwise it is empty and a `note` plus the official location is given. Installation is still plan → `planToken` confirmation → execution, with user scope by default.
|
|
32
|
+
- **The archive key**: `mode:'file'` is keyed by the **source path** and `mode:'code'`/`'expr'` by the script content. Editing the **same source file** and re-running therefore lands on the **same archive** (`attempt ≥ 2`, `scriptChanged:true`, `previousReceipt` pointing at the previous attempt, and the earlier attempt is never overwritten). Pointing at a **different path** (a copy of the archived script, say) writes a **new archive**, where `attempt:1`, `scriptChanged:false` and `previousReceipt:null` are **expected**. The archive id contains no random value.
|
|
33
|
+
- **v4 roster freeze and prune**: a verify/meeting freezes its participant set and records `rosterVersion`; **removing a member also prunes it from the frozen set** (otherwise in-flight votes could never close), **new members do not join a frozen set**, and `rosterVersion` increments whenever the set really changes. With no verify/meeting in progress, `status().frozenParticipants` is an explicit `null`.
|
|
34
|
+
- **v2/v3 single-source vote counting**: the per-round counts come from one function (`voteCount`, reading the **expectation recorded when the verify task was created** plus the round), so the four readers (enough votes, all reported, consensus, final verdict) no longer derive them separately — raising or lowering the verifier count can no longer make the views disagree. **Deliberately unchanged**: the `MIN_REVIEWERS` floor and the "everyone agrees" predicate. That combination — not a simplified predicate over the current round alone — is what decides when a verification may conclude; collapsing the two would let a single reviewer's verdict be accepted too early.
|
|
35
|
+
- **Documentation** now states the verification boundary, the known differences and the new response fields, including the engine versions verified on real hosts and the confirmed edge codes.
|
|
36
|
+
|
|
37
|
+
## Fixed
|
|
38
|
+
|
|
39
|
+
- **Installed but invisible engines**: scanning only the host process's PATH reported an engine installed in its default directory (measured: R 4.6.1) as missing; it is now discovered from the known install locations and version-probed like any other candidate.
|
|
40
|
+
- **Unrunnable install commands**: the tool used to suggest a package manager that does not exist on the machine (for example `winget`); it now only offers the command when the manager resolves, and otherwise gives the official location plus an explanation.
|
|
41
|
+
- **Incomplete timeout evidence**: `MATH_TIMEOUT` previously lacked `exit` and `stderr`, and its partial output existed only in the on-disk `stdout.txt`; the response and the receipt now both carry the capped partial output, aligned with `MATH_NONZERO_EXIT`.
|
|
42
|
+
- **`probe` listing only what worked**: the availability line could show a few engines without explaining the rest of the configuration; it now names the **configured but not found** engines and why.
|
|
43
|
+
- **Version constraints silently ignored**: the response now states that constraints are existence-only and lists every constraint it did **not** check.
|
|
44
|
+
- **Confusing "edit an archived script, then re-run"**: an explicit field and warning now distinguish "targeting a copy of an archive ⇒ a new archive with no history" from "targeting the original source ⇒ the same archive with a new attempt", and state that an old receipt is not evidence for edited code.
|
|
45
|
+
- **A misleading `paper` field in v4**: with no paper state the field is a **projected path**; it is now flagged via `dirProjected`/`dirSource` and declares that reading `status` has no filesystem side effect.
|
|
46
|
+
- **Path basis in member-visible material**: all four presets now state that member file tools resolve against the **session cwd**, that the listed relative paths need the **absolute project-root prefix**, and that computation artifacts should be opened via the absolute `receipt.scriptAbs` or by joining `receipt.cwd` with `receipt.scriptPath`.
|
|
47
|
+
- **Member-level calls answering only "not found"**: v4 now returns an error code, the current roster and a next step; v2/v3 decision and interrupt diagnostics likewise return `code` and `next`.
|
|
48
|
+
|
|
49
|
+
## Compatibility & Migration
|
|
50
|
+
|
|
51
|
+
- **Breaking changes: none.** Parameter defaults, data formats and the directory layout of all four presets are unchanged.
|
|
52
|
+
- **Additive only**: every field added in this release is additional; please ignore unknown fields rather than failing on them.
|
|
53
|
+
- **Migration: none needed.**
|
|
54
|
+
- The DSH support window is the same as 2.7.1 (see `engines.dsh` in `package.json`).
|
|
55
|
+
|
|
56
|
+
## Known Limitations
|
|
57
|
+
|
|
58
|
+
- **Octave / Julia are not shipped** and were not installed on the verification machine; their templates and install plans are statically validated but have not been executed on a real host.
|
|
59
|
+
- **Commercial engine templates (MATLAB / Maple / Wolfram)** still need confirmation on a licensed machine and remain marked `VERIFY` by default.
|
|
60
|
+
- **Version constraints are existence-only**: version solving still belongs to the package manager; this tool does not parse constraints.
|
|
61
|
+
- **The plugin cannot enforce network or write restrictions**: the subprocess channel has no policy slot; that requires a host-side sandbox.
|
|
62
|
+
- **Release notes before 2.7.0 are Chinese-only** (see the English history index in `README.en.md`).
|
|
63
|
+
|
|
64
|
+
## Verification
|
|
65
|
+
|
|
66
|
+
- `node tests/run-tests.mjs` — all green (65 items: 44 suites + 21 sensitivity probes).
|
|
67
|
+
- Three math-contract guards: `tests/audit-math-computation-parity.mjs`, `-contract.mjs`, `-sensitivity.mjs`.
|
|
68
|
+
- Real-host verification (python 3.12.10 and R 4.6.1): both engines produce the same numbers for the same computation; the native path and the `cli` escape hatch agree numerically and share the same `scriptHash`; timeout → `MATH_TIMEOUT`, syntax error → `MATH_NONZERO_EXIT` (with stderr and a receipt), missing package → `MATH_MISSING_PACKAGES` (no receipt directory written), an engine warning → a normal exit with stderr preserved.
|
|
69
|
+
|
|
70
|
+
## Dependencies
|
|
71
|
+
|
|
72
|
+
- **No new runtime dependencies**; the DSH support window is unchanged.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# dsh-vibe-math 2.7.2 — 发布说明
|
|
2
|
+
|
|
3
|
+
> 上一版本:2.7.1。本版是**补丁版:只包含修复与附加(新增)响应字段**——把真实引擎环境下的**发现、证据与诊断**补齐:装了但不在 PATH 的引擎能被发现、安装建议不再给出本机跑不了的命令、失败证据(超时/缺包/未校验约束)不再缺失或静默、归档身份与名册口径可直接核对。**既有契约的冻结面未变**:失败码集合(11 个)、参数名与默认值、数据格式与目录结构均未改(由 `tests/audit-math-computation-contract.mjs` 与 `tests/audit-math-computation-parity.mjs` 断言);新增字段都是**附加**的,旧读者不受影响。DSH 支撑窗口不变,**无需迁移**。
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
- **真实引擎发现更可靠**:引擎发现顺序为 PATH → 宿主自带运行时 → **各操作系统的已知安装目录**,因此在默认目录安装、但没有加进 PATH 的引擎(例如 R)也能被发现。当前纳入已知目录的引擎为 **R / Octave / Julia / MATLAB**(以及 Windows 上的 Python);Maple / Wolfram 的安装目录布局不固定,未纳入。宿主也可以用可选的 `installRoots` 接口自行提供候选根,发现逻辑不再依赖插件进程的环境变量。
|
|
8
|
+
- **不再给出跑不了的安装命令**:`MATH_ENGINE_NOT_FOUND` 只在本机的包管理器**确实存在**时才给出可执行命令,否则给出建议命令与官方地址,并说明原因。
|
|
9
|
+
- **`probe` 不再"报喜不报忧"**:除了可用引擎,还会列出**已配置但本机未发现**的引擎及原因。
|
|
10
|
+
- **失败证据完整**:`MATH_TIMEOUT` 与 `MATH_NONZERO_EXIT` 携带同样的证据字段,超时的部分输出在**响应与回执**里都能拿到。
|
|
11
|
+
- **约束口径明说**:版本约束**只按存在性检查、从不校验**,未校验的约束会被逐条列出,不再静默忽略。
|
|
12
|
+
- **归档身份可核对**:运行响应直接给出归档 id 与 attempt;"编辑归档脚本后重跑"的语义有显式字段与警告解释。
|
|
13
|
+
- **名册口径统一(v4/v5)**:一次验证/会议冻结一份名册快照并记录版本号,所有视图读同一份数据;成员变化时版本号递增,读到的集合是否过期一目了然。
|
|
14
|
+
- **诊断更具体**:成员级调用失败时给出错误码、当前状态与下一步建议(而不是一句"不存在")。
|
|
15
|
+
|
|
16
|
+
## 新增
|
|
17
|
+
|
|
18
|
+
- `math_computation` 的 `run` 响应新增 **`runId`** 与 **`attempt`**(此前归档 id 只存在于回执里,调用方无法直接核对"是不是同一个归档")。
|
|
19
|
+
- `probe` 响应新增 **`configured`**(配置启用的引擎全集)与 **`absent[]`**:每个未发现的引擎带 **`why`**(`not-found-on-this-machine` 或 `needs-a-caller-supplied-command`)。
|
|
20
|
+
- 新增约束口径字段:成功响应与"缺包"失败都带 **`versionPolicy`** 与 **`constraintsNotEnforced`**(本次**未校验**的约束逐条列出;没有约束时为空数组)。
|
|
21
|
+
- `MATH_TIMEOUT` 响应新增 **`stdout`**/**`stderr`**(按上限截断);回执 JSON 新增 **`partialStdout`**/**`partialStderr`**。
|
|
22
|
+
- `MATH_ENGINE_NOT_FOUND` 的 `next` 新增 **`suggestedCommand`**、**`packageManager`**、**`packageManagerAvailable`**、**`note`**(`vendorUrl` 视引擎而定)。
|
|
23
|
+
- `run` 响应新增 **`fileIsArchivedScript`**:当 `mode:'file'` 指向的是**归档副本**时,同时给出 **`ARCHIVED_SCRIPT_RERUN`** 警告,明确说明按设计那是一次**新归档**(新 id、attempt 1、没有历史回执)——要拿到"同一归档的新 attempt + 变更检测",请编辑**原来的源文件**并用 `mode:'file'` 指向**同一源路径**重跑。
|
|
24
|
+
- v4:`status()` 新增 **`rosterVersion`** 与 **`frozenParticipants`**;`consensus` / `meeting` / `verify` 视图带各自的 `rosterVersion`。
|
|
25
|
+
- v4:`paper` 视图新增 **`dirProjected`** / **`dirSource`** / **`readSideEffect`**,明确该路径是投影还是真实状态。
|
|
26
|
+
- v2/v3:决策与子代理中断诊断新增 **`code`** 与 **`next`**(例如 `VIBE_MATH_DECISION_NOT_FOUND`,并说明队列现状);v4 的成员级调用新增 **`V4_NO_SUCH_RESIDENT`**(带当前编制与下一步建议)。
|
|
27
|
+
|
|
28
|
+
## 变更
|
|
29
|
+
|
|
30
|
+
- **引擎发现顺序**:PATH → 宿主自带运行时 → 已知的每操作系统安装目录(Windows 的 `%ProgramFiles%` / `%ProgramFiles(x86)%` / `%LOCALAPPDATA%\Programs`,macOS 的 framework 路径,Linux 的 `/usr/lib/R`、`/opt/R` 等)。**存在性一律靠列目录证明**,从不假设路径存在。
|
|
31
|
+
- **安装建议**:只有在本机能解析出对应包管理器时,`next.command` 才是可执行命令;否则为空,并给出 `note` 与官方地址。安装流程仍是"计划 → `planToken` 确认 → 执行",作用域默认用户级。
|
|
32
|
+
- **归档 id 的键**:`mode:'file'` 以**源路径**为键,`mode:'code'`/`'expr'` 以脚本内容为键。因此编辑**同一个源文件**再跑会落到**同一个归档**(`attempt ≥ 2`、`scriptChanged:true`、`previousReceipt` 指向上一次,且旧 attempt 绝不被覆盖);而指向**另一个路径**(例如上一份归档的副本)会写入**新归档**,此时 `attempt:1`、`scriptChanged:false`、`previousReceipt:null` 都是**预期**。归档 id 不含随机数。
|
|
33
|
+
- **v4 名册冻结与修剪**:验证/会议开始时冻结参与集合并记录 `rosterVersion`;**移除成员会同时从冻结集合中剔除**(否则在飞投票永远凑不齐),**新增成员不进入已冻结集合**,集合真正变化时 `rosterVersion` 递增。没有进行中的验证/会议时,`status().frozenParticipants` 为显式 `null`。
|
|
34
|
+
- **v2/v3 票数与法定人数单一来源**:每轮票数只由一个函数(`voteCount`,读**验证任务创建时**记录的期望人数快照 + 轮次)给出,"是否够票、是否都报、共识、最终判定"四个读取点不再各自重算,因此调高/调低验证人数不会让各视图分叉。**刻意保持不变**:`MIN_REVIEWERS` 下限与"全体一致"判据——正是这两条(而不是把判据简化成只看本轮)决定了什么时候能收束;把它们一起"简化"掉会让单审阅者的结论被过早采纳。
|
|
35
|
+
- **文档口径更新**:计算工具的验证边界、已知差异与响应字段都写进了随包文档(含真机验证过的引擎版本与边界码)。
|
|
36
|
+
|
|
37
|
+
## 修复
|
|
38
|
+
|
|
39
|
+
- **装了却"看不见"的引擎**:只扫描宿主进程 PATH 时,安装在默认目录但未加入 PATH 的引擎(实测:R 4.6.1)会被报成缺失;现在能从已知安装目录发现,并且版本探测与其他候选一致。
|
|
40
|
+
- **跑不了的安装命令**:此前会给出本机并不存在的包管理器命令(例如 `winget`);现在只在管理器确实存在时给出命令,否则给出官方地址与说明。
|
|
41
|
+
- **超时证据不完整**:`MATH_TIMEOUT` 之前缺少 `exit` 与 `stderr`,部分输出只存在于磁盘上的 `stdout.txt`;现在响应与回执都带截断后的部分输出,字段与 `MATH_NONZERO_EXIT` 对齐。
|
|
42
|
+
- **`probe` 只报可用项**:可用性一行此前可能只列出少数引擎而不解释其余配置项;现在点名"已配置但本机未发现"的引擎与原因。
|
|
43
|
+
- **版本约束被静默忽略**:现在明确说明"只按 base name 检查是否存在",并把本次未校验的约束逐条列出。
|
|
44
|
+
- **归档脚本"编辑后重跑"易被误读**:新增显式字段与警告说明"指向归档副本 ⇒ 新归档、无历史"与"指向原源文件 ⇒ 同一归档 + 新的 attempt",并明确旧回执不能作为修改后代码的证据。
|
|
45
|
+
- **v4 `paper` 字段可能被误读**:没有论文状态时该字段是**投影路径**;现在标注 `dirProjected`/`dirSource` 并声明读 `status` 无文件系统副作用。
|
|
46
|
+
- **成员可见材料的路径口径**:四个预设的成员材料补齐说明——文件工具按**会话 cwd** 解析路径,列出的相对路径需拼**项目根的绝对前缀**;计算产物请用回执的绝对字段 `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来。
|
|
47
|
+
- **成员级调用只回一句"不存在"**:v4 现在返回错误码、当前编制与下一步建议;v2/v3 的决策与中断诊断同样给出 `code` 与 `next`。
|
|
48
|
+
|
|
49
|
+
## 兼容性与迁移
|
|
50
|
+
|
|
51
|
+
- **破坏性变更:无。** 四套预设的参数默认值、数据格式、目录结构均未改变。
|
|
52
|
+
- **纯新增**:本版新增的响应字段都是**附加**的;遇到不认识的字段请忽略,不要据此报错。
|
|
53
|
+
- **迁移:无需迁移。**
|
|
54
|
+
- DSH 支撑窗口与 2.7.1 相同(见 `package.json` 的 `engines.dsh`)。
|
|
55
|
+
|
|
56
|
+
## 已知限制
|
|
57
|
+
|
|
58
|
+
- **Octave / Julia 未随包提供**,在本次的验证机器上也未安装;相关模板与安装计划是静态校验过的,未经真机执行。
|
|
59
|
+
- **商业引擎(MATLAB / Maple / Wolfram)模板**仍需在持证机器上确认,默认标记为 `VERIFY`。
|
|
60
|
+
- **版本约束只按存在性检查**:具体版本求解仍由包管理器负责,本工具不解析约束。
|
|
61
|
+
- **插件无法强制禁网或限制写权限**:`subprocess` 通道没有策略槽位,需要宿主侧沙箱。
|
|
62
|
+
- **2.7.0 之前的发布说明仅提供中文**(英文历史索引见 `README.en.md`)。
|
|
63
|
+
|
|
64
|
+
## 验证方式
|
|
65
|
+
|
|
66
|
+
- `node tests/run-tests.mjs` —— 全部通过(65 项:44 个套件 + 21 个灵敏度探针)。
|
|
67
|
+
- 三个数学契约守卫:`tests/audit-math-computation-parity.mjs`、`-contract.mjs`、`-sensitivity.mjs`。
|
|
68
|
+
- 真机验证(python 3.12.10 与 R 4.6.1):同一算式两边给出相同数值;原生路径与 `cli` 逃生口数字一致且 `scriptHash` 相同;超时 → `MATH_TIMEOUT`,语法错误 → `MATH_NONZERO_EXIT`(带 stderr 与回执),缺包 → `MATH_MISSING_PACKAGES`(不写回执目录),引擎警告 → 正常退出并保留 stderr。
|
|
69
|
+
|
|
70
|
+
## 依赖
|
|
71
|
+
|
|
72
|
+
- **无新增运行时依赖**;DSH 支撑窗口不变。
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# dsh-vibe-math 2.7.3 — Release Notes (English)
|
|
2
|
+
|
|
3
|
+
> Previous release: 2.7.2. This is a **PATCH release containing fixes, wording corrections and verification depth only** — v5 institute **round numbering and mailbox delivery** no longer go wrong, paper finalisation and task compare-and-set failures now carry named consequences, v4 no longer fails silently when the Lean library index or the project marker cannot be written, installer output uses one language with exactly one line per action, and the **stale mailbox ordering** that survived in the documentation was corrected everywhere with an automated prose↔code pairing check. Parameter defaults, data formats and the directory layout are **unchanged** (asserted by `tests/audit-math-computation-contract.mjs` and `tests/audit-math-computation-parity.mjs`); every addition is **additive** or **test-surface only**, so existing readers are unaffected. There are **no breaking changes**, the DSH support window is unchanged, and **no migration is needed**.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
- **The mailbox no longer loses messages**: acknowledgement happens **only after a successful send**; an unacknowledged message stays pending and is re-delivered on the next successful wake. Duplicate suppression uses the **injection marks** (`inboxInjected` / `inboxSuppressed`), and a round never prepends the same message twice.
|
|
8
|
+
- **Predictable round numbers**: a founding prompt carries the round the member **actually starts** (from `轮次 1`, never `轮次 0`); a **failed** start consumes no round and no longer **erases or resets** an existing member's count (after the host loses a child session, a rebuilt prompt continues the numbering, e.g. `轮次 2`).
|
|
9
|
+
- **Paper finalisation failures are traceable**: a failed write of a **required** artifact (`paper.md` / `paper.tex` / `paper.meta.json` / `paper.log.md`) produces a **named warning exactly once**, naming the artifact and the recovery path; the artifact list contains **only what actually landed**; re-running finalisation refills missing artifacts **idempotently** without multiplying warnings.
|
|
10
|
+
- **A refused task compare-and-set leaves no half-state**: when `expected_revision` is stale the task is **unchanged** (verified by reading back `revision` / `ownerId` / `status`).
|
|
11
|
+
- **A member path-contract mismatch is named**: when the documented member-library root differs from the root the framework actually reads and writes, the mismatch is surfaced by name — and that note now **reaches `report()` diagnostics** (it used to be queued and never shown).
|
|
12
|
+
- **v4 index write failures have a named consequence**: a failed Lean library index write is named **exactly once**, with `lib=` / `proved=` and the consequence that the index is **stale until the next successful rebuild**; that single site covers every caller and **does not change the return value** (the tool still answers with its scanned counts).
|
|
13
|
+
- **v4 project-marker write failures have a named consequence**: a failed write of the current-project marker `.current` is named once, with the consequence that the next session may load the previous project.
|
|
14
|
+
- **The documentation no longer describes the message-losing order**: the stale mailbox ordering (acknowledge first, build later) in the plan, the architecture diagram, the pseudocode block and the guard checklist was corrected to "**build first; acknowledge only after a successful send; no duplicate prepend within a round**", backed by an automated **prose↔code pairing check** (the old wording fails it, and it requires the implementation anchor `if (ok && prompt.pending.length) await ackPending(`).
|
|
15
|
+
|
|
16
|
+
## Added
|
|
17
|
+
|
|
18
|
+
- A **per-preset machine-face field table** in the shipped `docs/status-report-fields.md` (columns: name / scope / which-views / meaning): v2 **20** rows, v3 **25** rows, v5 **43** rows (derived from each `status()`), while v4 states explicitly that it exposes **no** `fieldScopes`; the table is checked **in both directions** (every source field has a doc row; every doc row names a real source field).
|
|
19
|
+
- **Deeper verification in the gate**: it now runs **101 jobs = 44 suites + 57 probes/variants** (65 jobs = 44 + 21 at 2.7.2, recomputed from that tag's job-list rule), including shipped **mutant families** (`tests/*.mutants.mjs`) and `--self-probe` modes that run a **mutated copy** and require a **named** failure rather than only an exit code.
|
|
20
|
+
- **Audit seams that can target a copy**: several audits accept an environment variable pointing at a mutated copy (for example `MATH_COMPUTATION_MODULE`, `V5_PLUGIN`, `PERSONA_ROOT`, `INSTALLER_JS`), so evidence can be reproduced without editing repository files.
|
|
21
|
+
- **Documentation counts are derived and swept**: every `TOTAL <n>` in a live document must equal the value derived by `node tests/run-tests.mjs --counts`; timings must quote each family's **own** `TOTAL WALL TIME` line; **frozen historical release notes are exempt by name** (and that exemption list is itself asserted to be non-empty).
|
|
22
|
+
|
|
23
|
+
## Changed
|
|
24
|
+
|
|
25
|
+
- **Mailbox ordering wording**: the v5 plan, the architecture diagram and the guard checklist now state "**build first, acknowledge later**", and the plan spells out the searchable code order (take pending → compose the block → build the round prompt → send → acknowledge only on success).
|
|
26
|
+
- **Installer output uses one language and one line per action**: a user-facing log **label** must not be ASCII-only (an English domain word inside a Chinese label is still fine); restore and cleanup are each reported **exactly once**; and "a pre-existing backup is not a failure" is now judged at the **report level** instead of by matching log text.
|
|
27
|
+
- **More conservative validation wording**: constraints that are only checked for existence are still described exactly that way — no "simplification" that would change the verdict.
|
|
28
|
+
|
|
29
|
+
## Fixed
|
|
30
|
+
|
|
31
|
+
- **v5 mailbox: a failed wake could lose messages** → acknowledgement happens only after a successful send, unacknowledged messages stay queued for the next successful wake, and a round never prepends the same message twice. Guard: `tests/e2e-v5-round2.test.mjs` (a failed wake leaves the message pending) and the shipped family `tests/v5-institute-fixes.mutants.mjs`.
|
|
32
|
+
- **v5 round numbering** → the founding prompt carries the real round; a failed start neither consumes a round nor resets an existing count; a rebuild continues the numbering. Guard: `tests/e2e-v5-round2.test.mjs` (the rebuilt prompt reads `轮次 2`) and `tests/v5-institute-fixes.mutants.mjs` (two `spawnMember` families).
|
|
33
|
+
- **v5 paper finalisation** → a failed required-artifact write is named once (naming the artifact and the recovery path); the artifact list contains only what landed; re-running is idempotent and does not repeat the warning. Guard: the shipped suite `tests/e2e-v5-round2.test.mjs`.
|
|
34
|
+
- **v5 task compare-and-set** → after a stale `expected_revision` is refused the task is unchanged (verified by reading back `revision` / `ownerId` / `status`). Guard: `tests/v5-institute-fixes.mutants.mjs` (the CAS family).
|
|
35
|
+
- **v5 member path contract** → a mismatch between the documented root and the root actually used is named, and the note now **reaches `report()` diagnostics** (it used to be queued and never surfaced). Guard: `tests/e2e-v5-round2.test.mjs` and `tests/audit-v5-integrity.mjs`.
|
|
36
|
+
- **v4 Lean library index write failures were silent** → one named site, once, with `lib=` / `proved=` and the "stale until the next successful rebuild" consequence, covering every caller and leaving the return value untouched. Guard: the Lean-library-index section of `tests/formal-verify-v4.test.mjs` and the shipped family `tests/formal-verify-v4.mutants.mjs` (its 8th family reddens by name).
|
|
37
|
+
- **v4 `.current` marker write failures were silent** → named once, with the consequence that the next session may load the previous project. Guard: the current-project-marker section of `tests/formal-verify-v4.test.mjs` and `tests/formal-verify-v4.mutants.mjs`.
|
|
38
|
+
- **Rosters and verification surface** → the published **voter set** is asserted to agree with its `voterCount` and to have distinct ids; the **staff persona** is asserted to actually reach each member's persona and prompts. Guard: `tests/audit-participant-set-parity.mjs`, `tests/audit-persona-surface.test.mjs`.
|
|
39
|
+
- **Installer (see "Changed")** → restore and cleanup are each reported exactly once, and "a pre-existing backup is not a failure" is judged at report level. Guard: `tests/audit-installer-policy.test.mjs`, `tests/audit-installer-compat.test.mjs` and the shipped family `tests/audit-installer-assertions.mutants.mjs`.
|
|
40
|
+
- **Documentation drift** → all 8 places that still described the old mailbox order were corrected, plus a prose↔code pairing check. Guard: `tests/audit-v5-integrity.mjs`.
|
|
41
|
+
|
|
42
|
+
## Compatibility & Migration
|
|
43
|
+
|
|
44
|
+
- **Breaking changes: none.** Parameter defaults, data formats and the directory layout are unchanged across all four presets.
|
|
45
|
+
- **Additive only**: the new documentation and verification surface (the field table, the mutant families and self-probes, the copy-targeting audit seams) do not change any runtime contract; any new response field is **additive**.
|
|
46
|
+
- **Migration: none needed.**
|
|
47
|
+
- The DSH support window is the same as 2.7.2 (see `engines.dsh` in `package.json`).
|
|
48
|
+
|
|
49
|
+
## Known Limitations
|
|
50
|
+
|
|
51
|
+
- **This machine has no Lean / LaTeX engine, and none of Octave / Julia / MATLAB / Maple / Wolfram**: those faces were **not exercised locally**; the plugins report them honestly — `configured` lists the engines enabled by configuration, and `absent[]` (each entry carrying `why`) says why this machine does not have them.
|
|
52
|
+
- **The two scripted end-to-end live runs (v4 and v5) were bounded by resource limits (token cap / wall clock) and are recorded as non-results rather than passes**: behavioural coverage for **capacity refusal, interrupt, project-switch failure, the installer self-check and `/compact`** therefore rests on the **shipped suites**, while those runs served as placement and observability evidence.
|
|
53
|
+
- **Engine versions were not observed**: no supported engine is installed on this machine, so this release cannot report engine version readings.
|
|
54
|
+
- **Commercial engine templates** still need confirmation on a licensed machine and remain marked as requiring human confirmation.
|
|
55
|
+
- **Release notes before 2.7.0 are Chinese only** (see `README.en.md` for the English history index).
|
|
56
|
+
|
|
57
|
+
## Verification
|
|
58
|
+
|
|
59
|
+
- `node tests/run-tests.mjs` — expected `TOTAL 101 PASS 101 FAIL 0` (44 suites + 57 probes/variants).
|
|
60
|
+
- Targeted guard entry points: `node tests/audit-v5-integrity.mjs --self-probe` (8/8), `node tests/audit-participant-set-parity.mjs --self-probe` (6/6), `node tests/audit-math-computation-parity.mjs --self-probe` (8/8), `node tests/audit-persona-surface.test.mjs` (276/0).
|
|
61
|
+
- The shipped **mutant families** (`tests/*.mutants.mjs`) each require a **named** failure for a single-site mutation; the `--self-probe` modes run a mutated copy and require the named assertion to redden.
|
|
62
|
+
- Host: DSH **0.2.0-rc.2**.
|
|
63
|
+
- Real engines: **not installed, not executed** (see "Known Limitations"); engine existence is always proven by listing directories or probing, never assumed.
|
|
64
|
+
|
|
65
|
+
## Dependencies
|
|
66
|
+
|
|
67
|
+
- **No new runtime dependencies**; the DSH support window is unchanged.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# dsh-vibe-math 2.7.3 — 发布说明
|
|
2
|
+
|
|
3
|
+
> 上一版本:2.7.2。本版是**补丁版:只包含修复、口径纠正与验证深度**——v5 研究所的**轮次计数与邮箱投递**不再出错、论文定稿与任务 CAS 的失败有具名后果、v4 的 Lean 库索引与项目标记写失败不再静默、安装器对外输出统一为中文标签并做到"一个动作一行"、文档中残留的**旧邮箱顺序**全部纠正并有自动配对检查防止回潮。四套预设的**参数默认值、数据格式与目录结构未变**(由 `tests/audit-math-computation-contract.mjs` 与 `tests/audit-math-computation-parity.mjs` 断言);新增内容都是**附加**或**仅测试面**的,旧读者不受影响。**无破坏性变更**,DSH 支撑窗口不变,**无需迁移**。
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
- **邮箱不再丢消息**:确认(ack)改为**只在发送成功之后**发生;未被确认的消息保持 pending,会在下一次成功唤醒时重新投递。重复抑制由**注入标记**(`inboxInjected` / `inboxSuppressed`)负责,一轮之内不会把同一条消息 prepend 两遍。
|
|
8
|
+
- **轮次编号可预期**:新成员的创立提示词带上它**实际开始的轮次**(从 `轮次 1` 起,不再出现 `轮次 0`);**失败**的启动不再消耗轮次,也不会**抹掉或重置**既有成员的轮次计数(宿主丢失子会话后重建,提示词仍继续编号,例如 `轮次 2`)。
|
|
9
|
+
- **论文定稿失败可追溯**:必需产物(`paper.md` / `paper.tex` / `paper.meta.json` / `paper.log.md`)写入失败时给出**具名告警恰好一次**,点名产物与恢复途径;产物清单**只列真正落盘的**文件;重跑定稿**幂等**补齐缺失产物,且不会重复告警。
|
|
10
|
+
- **任务 CAS 拒绝不留半成品**:`expected_revision` 过期被拒时,任务**保持不变**(`revision` / `ownerId` / `status` 回读一致)。
|
|
11
|
+
- **成员路径契约不一致会被点名**:文档写的成员库根与框架实际读写的根不一致时按名给出提示,并且该提示**现在会进入 `report()` 的诊断**(此前只是入队、从不显现)。
|
|
12
|
+
- **v4 索引写失败有具名后果**:Lean 库索引写失败**恰好具名一次**,带 `lib=` / `proved=`,并说明"索引在下次成功重建前**是陈旧的**";该单点覆盖全部调用方,且**不影响返回值**(工具照旧返回扫描计数)。
|
|
13
|
+
- **v4 项目标记写失败有具名后果**:当前项目标记 `.current` 写失败**具名一次**,并说明后果——下一个会话可能加载到上一个项目。
|
|
14
|
+
- **文档不再描述会丢消息的顺序**:计划书、架构图、伪代码块与守卫清单中残留的旧邮箱顺序(先确认再构造)已全部改为"**先构造;仅在发送成功后确认;同一轮不重复 prepend**",并有自动的**文案↔代码配对检查**(旧措辞回来即失败,并要求实现锚点 `if (ok && prompt.pending.length) await ackPending(`)。
|
|
15
|
+
|
|
16
|
+
## 新增
|
|
17
|
+
|
|
18
|
+
- 随包文档 `docs/status-report-fields.md` 新增**逐预设机器面字段表**(name / scope / which-views / meaning 四列):v2 **20** 行、v3 **25** 行、v5 **43** 行(按 `status()` 的顶层键派生),v4 则**明确声明它不暴露 `fieldScopes`**;该表由守卫**双向**核对(每个源码字段都有文档行;每条文档行都指向真实源码字段)。
|
|
19
|
+
- 门禁的**验证深度**:现在运行 **101 项作业 = 44 个套件 + 57 个探针/变体**(上一版 2.7.2 为 **65 项 = 44 + 21**,按该标签树的作业清单规则复算),其中包含随包发布的**变异族**(`tests/*.mutants.mjs`)与 `--self-probe` 模式:它们对**变异后的副本**运行并要求出现**具名失败**,而不是只看退出码。
|
|
20
|
+
- **可指向副本的审计缝**:多个审计可通过环境变量指向变异副本(例如 `MATH_COMPUTATION_MODULE`、`V5_PLUGIN`、`PERSONA_ROOT`、`INSTALLER_JS`),无需修改仓库文件即可复现证据。
|
|
21
|
+
- **文档计数改为派生并全量扫描**:live 文档里出现的每个 `TOTAL <n>` 必须等于 `node tests/run-tests.mjs --counts` 的派生值;时间必须引用**各族自己打印**的 `TOTAL WALL TIME` 行;**冻结的历史发布说明按名豁免**(豁免清单本身也断言非空)。
|
|
22
|
+
|
|
23
|
+
## 变更
|
|
24
|
+
|
|
25
|
+
- **邮箱顺序口径**:v5 计划书、架构图与守卫清单统一为"**先构造、后确认**",并在计划书中以可检索的代码顺序给出(取待投递 → 组成框头块 → 构造本轮提示词 → 发送 → 仅成功时确认)。
|
|
26
|
+
- **安装器对外输出统一为中文标签**:面向用户的日志**标签**不得是纯 ASCII(英文领域词夹在中文标签里仍合规);**恢复与清理各自恰好报告一次**;"同一版本的既有备份不算失败"改为在**报告层**判定,而不是匹配日志文字。
|
|
27
|
+
- **校验口径更保守**:确认为"检查存在性"而非"求解版本"的约束保持原样,不引入会改变判定结果的"简化"。
|
|
28
|
+
|
|
29
|
+
## 修复
|
|
30
|
+
|
|
31
|
+
- **v5 邮箱:失败的唤醒会丢消息** → 确认只在发送成功后发生,未确认的消息留在队列里等下一次成功唤醒重投;同一轮不重复 prepend。守卫:`tests/e2e-v5-round2.test.mjs`(失败的唤醒后消息仍为 pending)与随包族 `tests/v5-institute-fixes.mutants.mjs`。
|
|
32
|
+
- **v5 轮次编号** → 创立提示词带真实轮次;失败启动不消耗轮次、不重置既有计数;重建继续编号。守卫:`tests/e2e-v5-round2.test.mjs`(重建后的提示词读作 `轮次 2`)与 `tests/v5-institute-fixes.mutants.mjs`(两条 `spawnMember` 族)。
|
|
33
|
+
- **v5 论文定稿** → 必需产物写失败具名一次(点名产物与恢复途径);产物清单只含真正落盘项;重跑幂等、不重复告警。守卫:随包套件 `tests/e2e-v5-round2.test.mjs`。
|
|
34
|
+
- **v5 任务 CAS** → 过期 `expected_revision` 被拒后任务保持原状(回读 `revision` / `ownerId` / `status` 验证)。守卫:`tests/v5-institute-fixes.mutants.mjs`(CAS 相关族)。
|
|
35
|
+
- **v5 成员路径契约** → 文档根与实际读写根不一致时按名提示,并**进入 `report()` 诊断**(此前入队后从不显现)。守卫:`tests/e2e-v5-round2.test.mjs` 与 `tests/audit-v5-integrity.mjs`。
|
|
36
|
+
- **v4 Lean 库索引写失败静默** → 单点具名一次,带 `lib=` / `proved=` 与"陈旧至下次成功重建"的后果,覆盖全部调用方,且不改变返回值。守卫:`tests/formal-verify-v4.test.mjs`(Lean 库索引那一段)与随包族 `tests/formal-verify-v4.mutants.mjs`(第 8 条族按名变红)。
|
|
37
|
+
- **v4 当前项目标记 `.current` 写失败静默** → 具名一次并说明后果(下一个会话可能加载上一个项目)。守卫:`tests/formal-verify-v4.test.mjs`(当前项目标记那一段)与 `tests/formal-verify-v4.mutants.mjs`。
|
|
38
|
+
- **名册与验证面** → 公布的**投票者集合**被断言与其 `voterCount` 一致且 id 互异;**职员人设**被断言确实进入每位成员的人设与提示词。守卫:`tests/audit-participant-set-parity.mjs`、`tests/audit-persona-surface.test.mjs`。
|
|
39
|
+
- **安装器(见"变更")** → 恢复/清理各恰好一次、"既有备份不算失败"在报告层判定。守卫:`tests/audit-installer-policy.test.mjs`、`tests/audit-installer-compat.test.mjs` 与随包族 `tests/audit-installer-assertions.mutants.mjs`。
|
|
40
|
+
- **文档口径漂移** → 8 处仍描述旧邮箱顺序的位置全部纠正,并加上文案↔代码配对检查。守卫:`tests/audit-v5-integrity.mjs`。
|
|
41
|
+
|
|
42
|
+
## 兼容性与迁移
|
|
43
|
+
|
|
44
|
+
- **破坏性变更:无。** 四套预设的参数默认值、数据格式、目录结构均未改变。
|
|
45
|
+
- **纯新增**:本版新增的文档与验证面(字段表、变异族与自探针、可指向副本的审计缝)都不改变运行时契约;新增响应字段若有也是**附加**的。
|
|
46
|
+
- **迁移:无需迁移。**
|
|
47
|
+
- DSH 支撑窗口与 2.7.2 相同(见 `package.json` 的 `engines.dsh`)。
|
|
48
|
+
|
|
49
|
+
## 已知限制
|
|
50
|
+
|
|
51
|
+
- **本机没有 Lean / LaTeX 引擎,也没有 Octave / Julia / MATLAB / Maple / Wolfram**:这些面**未在本机执行**;插件会如实报告——用 `configured` 列出配置启用的引擎,用 `absent[]`(每项带 `why`)说明本机为何没有。
|
|
52
|
+
- **两次脚本化的端到端真机运行(v4 与 v5)因资源上限(token 上限 / 墙钟)中止,按"非结果"记录,而不是通过**:因此**容量拒绝、打断、项目切换失败、安装器自检与 `/compact`** 的行为覆盖依靠**随包套件**;那两次运行提供的是**落位与可观测性**证据。
|
|
53
|
+
- **引擎版本号未观测**:因为本机没有安装任何受支持的引擎,本版无法给出引擎版本读数。
|
|
54
|
+
- **商业引擎模板**仍需在持证机器上确认,默认标记为需人工确认。
|
|
55
|
+
- **2.7.0 之前的发布说明仅提供中文**(英文历史索引见 `README.en.md`)。
|
|
56
|
+
|
|
57
|
+
## 验证方式
|
|
58
|
+
|
|
59
|
+
- `node tests/run-tests.mjs` —— 期望 `TOTAL 101 PASS 101 FAIL 0`(44 个套件 + 57 个探针/变体)。
|
|
60
|
+
- 针对性守卫入口:`node tests/audit-v5-integrity.mjs --self-probe`(8/8)、`node tests/audit-participant-set-parity.mjs --self-probe`(6/6)、`node tests/audit-math-computation-parity.mjs --self-probe`(8/8)、`node tests/audit-persona-surface.test.mjs`(276/0)。
|
|
61
|
+
- 随包**变异族**(`tests/*.mutants.mjs`)各自对单点变异要求**具名失败**;`--self-probe` 模式对变异副本运行并要求具名断言变红。
|
|
62
|
+
- 宿主机:DSH **0.2.0-rc.2**。
|
|
63
|
+
- 真机引擎:**未安装、未执行**(见"已知限制");引擎存在性一律以列目录/探测证明,绝不假设路径存在。
|
|
64
|
+
|
|
65
|
+
## 依赖
|
|
66
|
+
|
|
67
|
+
- **无新增运行时依赖**;DSH 支撑窗口不变。
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Release-notes template / 发布说明模板
|
|
2
|
+
|
|
3
|
+
This file defines the **single template** every `RELEASE-NOTES-<version>.md` (Chinese) and
|
|
4
|
+
`RELEASE-NOTES-<version>.en.md` (English) must follow. 本文件定义所有发布说明必须遵循的**唯一模板**。
|
|
5
|
+
|
|
6
|
+
- **File naming / 文件命名**:`RELEASE-NOTES-<version>.md`(中文)与 `RELEASE-NOTES-<version>.en.md`(English)。
|
|
7
|
+
Both files are required for every new release and both must be listed in `package.json#files`
|
|
8
|
+
(`tests/audit-market-metadata.test.mjs` enforces exactly that). 每个新版本**必须同时**有两份文件,且都列入
|
|
9
|
+
`package.json#files`(守卫 `tests/audit-market-metadata.test.mjs` 会检查)。
|
|
10
|
+
- **Heading order / 标题顺序**:the two languages use the **same order and the same section set**.
|
|
11
|
+
中英两份必须**顺序一致、章节一致**(见下)。
|
|
12
|
+
- **Audience / 读者**:someone reading a changelog. 面向读变更日志的用户。
|
|
13
|
+
**Never** write internal project vocabulary (audit rounds, task/agent names, session IDs, "we found during
|
|
14
|
+
our testing") — state what changed for the user and how it is verified. 不得出现内部工作词汇(审计轮次、
|
|
15
|
+
任务/成员名、会话编号、"我们在测试中发现"之类),只写对用户的变化与验证方式。
|
|
16
|
+
|
|
17
|
+
## Required sections (in this order) / 必需章节(按此顺序)
|
|
18
|
+
|
|
19
|
+
| # | 中文标题 | English heading | Content / 内容要求 |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| 1 | `# dsh-vibe-math <version> — 发布说明` | `# dsh-vibe-math <version> — Release Notes` | Title with the exact version. 标题带准确版本号。 |
|
|
22
|
+
| 2 | `> 上一版本:<prev>。…` | `> Previous release: <prev>. …` | One paragraph: **what kind of release this is** (patch/minor), the headline changes, and an explicit compatibility sentence (defaults/formats/directory layout unchanged? migration needed?). 一段话:版本类型、要点、以及明确的兼容性结论(默认值/数据格式/目录结构是否变化、是否需要迁移)。 |
|
|
23
|
+
| 3 | `## 概述` | `## Overview` | 3–8 bullets, user-visible outcomes only; each bullet = one change. 3–8 条要点,只写用户可见的结果,一条一个变化。 |
|
|
24
|
+
| 4 | `## 新增` | `## Added` | New capabilities/fields/parameters. State the **exact** field or parameter names in backticks. 新能力/字段/参数,字段名一律用反引号写准确。 |
|
|
25
|
+
| 5 | `## 变更` | `## Changed` | Behaviour or wording changes (including documentation that now states something new). 行为或文案变化(含文档口径变化)。 |
|
|
26
|
+
| 6 | `## 修复` | `## Fixed` | Each fix: the user-visible symptom → the corrected behaviour. Include how it was reproduced/verified. 每条:用户可见症状 → 修正后的行为,并说明如何复现/验证。 |
|
|
27
|
+
| 7 | `## 兼容性与迁移` | `## Compatibility & Migration` | Explicit: breaking changes (usually "无 / None"), additive-only additions, migration steps, DSH support window. 明确列出破坏性变更(通常"无")、纯新增项、迁移步骤、DSH 支撑窗口。 |
|
|
28
|
+
| 8 | `## 已知限制` | `## Known Limitations` | Honest limits, including "unverified" and "not shipped". 如实写限制,包括"未验证"和"未随包提供"。 |
|
|
29
|
+
| 9 | `## 验证方式` | `## Verification` | The commands a reader can run (`node tests/run-tests.mjs …`) and what was verified on real engines, with versions. 读者可自行运行的命令,以及真机验证过的内容与版本号。 |
|
|
30
|
+
| 10 | `## 依赖` | `## Dependencies` | New/changed runtime dependencies (usually "无新增" / "None added") and the host (DSH) requirement. 新增/变化的运行时依赖(通常"无新增")与宿主(DSH)要求。 |
|
|
31
|
+
|
|
32
|
+
Sections with nothing to report keep their heading and say `无。` / `None.` — never delete a section, so
|
|
33
|
+
readers can rely on the structure. 无内容的章节**保留标题**并写"无。",不要删除章节,保证结构稳定。
|
|
34
|
+
|
|
35
|
+
## Skeleton / 骨架
|
|
36
|
+
|
|
37
|
+
Chinese (`RELEASE-NOTES-<version>.md`):
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
# dsh-vibe-math <version> — 发布说明
|
|
41
|
+
|
|
42
|
+
> 上一版本:<prev>。本版是**补丁版 / 功能版**,<一句话要点>。四套预设的参数默认值、数据格式与目录结构**未变**,DSH 支撑窗口不变,**无需迁移**。
|
|
43
|
+
|
|
44
|
+
## 概述
|
|
45
|
+
- …
|
|
46
|
+
|
|
47
|
+
## 新增
|
|
48
|
+
- …
|
|
49
|
+
|
|
50
|
+
## 变更
|
|
51
|
+
- …
|
|
52
|
+
|
|
53
|
+
## 修复
|
|
54
|
+
- …
|
|
55
|
+
|
|
56
|
+
## 兼容性与迁移
|
|
57
|
+
- 破坏性变更:无。
|
|
58
|
+
- 纯新增:…
|
|
59
|
+
- 迁移:无需迁移。
|
|
60
|
+
|
|
61
|
+
## 已知限制
|
|
62
|
+
- …
|
|
63
|
+
|
|
64
|
+
## 验证方式
|
|
65
|
+
- `node tests/run-tests.mjs` —— 全部通过(<N> 项)。
|
|
66
|
+
- …
|
|
67
|
+
|
|
68
|
+
## 依赖
|
|
69
|
+
- 无新增运行时依赖;DSH 支撑窗口不变。
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
English (`RELEASE-NOTES-<version>.en.md`):
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
# dsh-vibe-math <version> — Release Notes
|
|
76
|
+
|
|
77
|
+
> Previous release: <prev>. This is a **PATCH / FEATURE** release that <one-line headline>. Parameter defaults, data formats and the directory layout are **unchanged**, the DSH support window is unchanged, and **no migration is needed**.
|
|
78
|
+
|
|
79
|
+
## Overview
|
|
80
|
+
- …
|
|
81
|
+
|
|
82
|
+
## Added
|
|
83
|
+
- …
|
|
84
|
+
|
|
85
|
+
## Changed
|
|
86
|
+
- …
|
|
87
|
+
|
|
88
|
+
## Fixed
|
|
89
|
+
- …
|
|
90
|
+
|
|
91
|
+
## Compatibility & Migration
|
|
92
|
+
- Breaking changes: none.
|
|
93
|
+
- Additive only: …
|
|
94
|
+
- Migration: none needed.
|
|
95
|
+
|
|
96
|
+
## Known Limitations
|
|
97
|
+
- …
|
|
98
|
+
|
|
99
|
+
## Verification
|
|
100
|
+
- `node tests/run-tests.mjs` — all green (<N> items).
|
|
101
|
+
- …
|
|
102
|
+
|
|
103
|
+
## Dependencies
|
|
104
|
+
- No new runtime dependencies; the DSH support window is unchanged.
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Rules / 写作规则
|
|
108
|
+
|
|
109
|
+
1. **Verify every claim against the code or docs before writing it.** If a behaviour is not in the shipped
|
|
110
|
+
bytes, it does not go in the notes. 每条声称在写之前都要对照代码/文档核实;没进包的行为不写。
|
|
111
|
+
2. **Patch vs minor must be stated and justified** in the summary line; the version number itself is chosen
|
|
112
|
+
by the maintainer. 概述里写明是补丁版还是功能版并给出理由;版本号由维护者决定。
|
|
113
|
+
3. **Name the exact API surface** (`field`, `next.reason`, parameter names) so users can grep for it.
|
|
114
|
+
接口一律写准确名字,便于用户检索。
|
|
115
|
+
4. **Do not machine-translate** the two versions: both are written by hand and kept structurally identical.
|
|
116
|
+
两份都必须手写并保持结构一致,不用机翻。
|
|
117
|
+
5. **English index**: every release also updates `README.en.md` (see below) so English readers can navigate
|
|
118
|
+
a history whose earlier entries are Chinese-only. 每个版本同时更新 `README.en.md`(英文历史索引)。
|
|
119
|
+
6. **Historical files are frozen**: older notes are not reformatted retroactively; the template applies from
|
|
120
|
+
the next release onward. 历史文件不改写;模板自下一版本起生效。
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
## 可追溯性要求(写新发布说明时必须遵守)
|
|
124
|
+
|
|
125
|
+
- 每条"修复/变更"条目**必须点名钉住它的守卫**(具体 `tests/*.mjs` 路径或套件名);没有守卫的条目要写明"未加守卫,原因:…"。
|
|
126
|
+
- 这样未来的发布说明不会重演历史缺口:守卫索引是权威的可追溯性来源,发布说明只是入口。
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# `status()` / `report()` 字段与作用域(v2 · v3)
|
|
2
|
+
|
|
3
|
+
> 本文件是 `vibe_math_status`(下称 **status**)、`vibe_math_report`(下称 **report**)以及 v3 的人读叙述报告
|
|
4
|
+
> (`Logs/报告.md`,由 `writeNarrativeReport()` 编译)的**字段契约**。v5 的同类说明在
|
|
5
|
+
> `vibe-math-v5/实现方案.md §14.9`;本文件补上 v2/v3 一直缺失的字段面文档(审查 F4)。
|
|
6
|
+
> 维护规则:**新增/改名一个字段,就在下表加/改一行**;`tests/v2-fix-probes.test.mjs`、`tests/v3-fix-probes.test.mjs`
|
|
7
|
+
> 的 `[F3] fieldScopes` / `[F1] pendingDecisions` / `[F5] 两面字段集` 断言会检查本表与代码一致。
|
|
8
|
+
|
|
9
|
+
## 1. 作用域(scope)语义
|
|
10
|
+
|
|
11
|
+
| scope | 含义 | 重启后 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `durable` | 落在**项目树**里(`State/`、`Formal/`、`Progress/`、`Propos/`、`Verified/` 等),本进程只是读取/更新它 | 仍在 |
|
|
14
|
+
| `session` | **本进程内存**(调度器/代理注册表/在飞任务/计数器);进程退出即消失,重启后从零开始 | 归零 |
|
|
15
|
+
|
|
16
|
+
`status().fieldScopes` 就是这张表的机器可读版本(`session`/`durable`/`note` 三个键);`status()` 里的字段名
|
|
17
|
+
必须能在该载荷里找到,否则 `[F3]` 守卫会红。
|
|
18
|
+
|
|
19
|
+
## 2. 字段表(v2 / v3)
|
|
20
|
+
|
|
21
|
+
| 字段 | 来源 | scope | status | report | 说明 |
|
|
22
|
+
|---|---|---|---|---|---|
|
|
23
|
+
| `ok` / `initialized` / `running` / `mode` | 内存(`rootAgent`/`scheduler`/`params`) | session | ✓ | 部分 | report 有 `running`/`mode`,无 `initialized` |
|
|
24
|
+
| `at` | `now()` 快照时间 | session | ✓ | ✓ | 两面都有(旧实现只有 report 有,审查 F5) |
|
|
25
|
+
| `project` / `projectExists` / `projects` | `currentProject` + 磁盘目录列举 | durable | ✓ | 部分 | report 只有 `project`/`projectExists` |
|
|
26
|
+
| `stateCommit` | 最近一次状态提交标记(`State/commit.json` 的投影) | durable | ✓ | ✗ | report 不含;要看提交历史读 `State/commit.json` |
|
|
27
|
+
| `stateWriteFailures` | 内存数组 `stateWriteFailures[]` 的 `{count,last}` | session | ✓ | ✓ | **重启归零**;不可当作"历史上没失败过" |
|
|
28
|
+
| `activeCount` / `maxParallelThreshold` | 由 `agentRegistry`/参数推导 | session | ✓ | ✓ | 空闲时 `0`,不是"没有代理定义" |
|
|
29
|
+
| `problems` / `propositions` | 卡片集合现算(v2 `已解决` 布尔;v3 `状态 === '已解决'`) | durable | ✓ | ✓ | 计数与列表同源(见 §3 的 F8 注) |
|
|
30
|
+
| `verifyTasks`(v2)/ `verifyPending`(v3) | 在飞验证任务投影 / 待验证候选数 | session / durable | ✓ | ✗ | 粒度不同:v2 是带票数的视图,v3 是计数 |
|
|
31
|
+
| `methods`(v3) | 方法卡集合大小 + 待沉淀发明台账 | durable + session | ✓ | ✓ | `pendingInventions` 是**当前批次**台账(会清空) |
|
|
32
|
+
| `pendingDecisions` | 待人工决策**计数** | session | ✓ | ✓ | 两面同形(数字);明细在 `pendingDecisionItems`(仅 report;审查 F1) |
|
|
33
|
+
| `pendingDecisionItems` | 待人工决策明细 `{id,node,context}` | session | ✗ | ✓ | 名字与计数分开,避免把数组当数字读 |
|
|
34
|
+
| `registeredAgents` | `agentRegistry` 键数 | session | ✓ | ✓ | 与 `activeCount` 不同:含空闲/已完成未回收的登记项 |
|
|
35
|
+
| `queuedPlanActions` / `plannerEnabled` / `plannerFails`(v3) | 计划队列长度 / 参数 / 连续失败计数 | session | ✓ | 部分 | `plannerFails` 是**会话**计数,重启归零 |
|
|
36
|
+
| `formal` | `Formal/*.json` + 参数(v2 内联、v3 `formalSummary()`) | durable | ✓ | ✓ | v2 的 `formal.paths` 见下行 |
|
|
37
|
+
| `formal.paths`(v2) | 路径表:`base`(项目根,绝对)+ 相对项(`project`/`proofs`)+ 绝对项(`lib`/`proved`) | durable | ✓ | ✓ | 审查 F6:基准不同,故显式给出 `base` 与 `note` |
|
|
38
|
+
| `paper` | `paperStatusView()`:`id/dir/inFlight*`(session)与 `finalizedAt/artifacts/compile`(durable) | 混合 | ✓ | ✓ | 审查 F3/F5:**同一对象两种耐久性**,逐字段见 `fieldScopes` |
|
|
39
|
+
| `params` | 参数快照 | session | ✓ | ✓ | 权威值在 `vibe_math_setting.json`(durable) |
|
|
40
|
+
| `recentActivity` | 活动日志尾部 | session | ✓ | ✓ | **上限**:`ACTIVITY_REPORT_MAX`(v2/v3 现为 30,见常量与参数描述);两面同一上限(审查 F2) |
|
|
41
|
+
| `fieldScopes` | 本表 §1 的机器可读版本 | — | ✓ | ✗ | v5 的 `*Scope` 模型移植(审查 F3) |
|
|
42
|
+
|
|
43
|
+
## 3. 两面差异与已知口径(有意为之,不是漂移)
|
|
44
|
+
|
|
45
|
+
- **`status` 独有**(守卫 `[F5]` 按本行逐字校验):`initialized`、`projects`、`stateCommit`、`stateWriteFailures`、`plannerEnabled`、`plannerFails`、`fieldScopes`。
|
|
46
|
+
- **`report` 独有**:`pendingDecisionItems`(明细)。`paper`/`at` 已对齐(两面都有)。
|
|
47
|
+
- **F8 口径注(未证明漂移)**:`problems.solved` 在 v2 取**存储布尔** `已解决`(写路径:`vibe-math-v2.js` 内
|
|
48
|
+
`q.已解决 = true` 的几处),在 v3 取 `状态 === '已解决'`。两者各自是唯一的写者,审查中**未构造出**
|
|
49
|
+
"只更新其一"的代码路径,故按"有意差异"记录;若将来发现漂移,应让 v2 也保留 `状态` 字段或统一判据。
|
|
50
|
+
- **v3 人读报告**(`Logs/报告.md`):布尔与方向状态已中文化(`运行中:是/否`、`d1:进行中(active)`),
|
|
51
|
+
代码 token 放在括号里备查(审查 F7)。
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
<!-- G-6-FIELD-TABLE-START -->
|
|
55
|
+
|
|
56
|
+
## 逐预设字段作用域表(G-6:由源码派生,`tests/audit-status-report-fields.mjs` 双向校验)
|
|
57
|
+
|
|
58
|
+
### v2 的字段与作用域(**源自源码派生**)
|
|
59
|
+
|
|
60
|
+
| 字段 | 作用域 | 视图 | 含义 |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| `project` | 耐久 | status()(report() 同源) | 当前项目 id/slug |
|
|
63
|
+
| `projects` | 耐久 | status()(report() 同源) | 项目列表 |
|
|
64
|
+
| `problems` | 耐久 | status()(report() 同源) | 问题清单与状态 |
|
|
65
|
+
| `propositions` | 耐久 | status()(report() 同源) | 命题/引理索引 |
|
|
66
|
+
| `stateCommit` | 耐久 | status()(report() 同源) | 状态提交(原子提交标记与世代) |
|
|
67
|
+
| `formal` | 耐久 | status()(report() 同源) | Lean 形式化验证面(作业/回执/结论) |
|
|
68
|
+
| `paper.finalizedAt` | 耐久 | status()(report() 同源) | 论文定稿时间戳 |
|
|
69
|
+
| `paper.artifacts` | 耐久 | status()(report() 同源) | 论文产物清单(md/tex/pdf 等) |
|
|
70
|
+
| `paper.compile` | 耐久 | status()(report() 同源) | LaTeX 编译结果/降级原因 |
|
|
71
|
+
| `stateWriteFailures` | 会话 | status()(report() 同源) | 状态写失败计数(耐久写不健康时可见) |
|
|
72
|
+
| `activeCount` | 会话 | status()(report() 同源) | 活跃子代理数(由注册表推导) |
|
|
73
|
+
| `pendingDecisions` | 会话 | status()(report() 同源) | 等待人工决策的节点 |
|
|
74
|
+
| `registeredAgents` | 会话 | status()(report() 同源) | 已注册子代理表 |
|
|
75
|
+
| `verifyTasks` | 会话 | status()(report() 同源) | 验证任务视图 |
|
|
76
|
+
| `recentActivity` | 会话 | status()(report() 同源) | 最近活动日志(环形缓冲) |
|
|
77
|
+
| `paper.inFlight` | 会话 | status()(report() 同源) | 论文撰写是否在途 |
|
|
78
|
+
| `paper.inFlightSince` | 会话 | status()(report() 同源) | 在途开始时间 |
|
|
79
|
+
| `paper.inFlightAgeMs` | 会话 | status()(report() 同源) | 在途已持续时间 |
|
|
80
|
+
| `paper.reapedThisRun` | 会话 | status()(report() 同源) | 本轮回收的论文撰写者数 |
|
|
81
|
+
| `paper.queued` | 会话 | status()(report() 同源) | 排队的论文撰写请求 |
|
|
82
|
+
|
|
83
|
+
### v3 的字段与作用域(**源自源码派生**)
|
|
84
|
+
|
|
85
|
+
| 字段 | 作用域 | 视图 | 含义 |
|
|
86
|
+
|---|---|---|---|
|
|
87
|
+
| `project` | 耐久 | status()(report() 同源) | 当前项目 id/slug |
|
|
88
|
+
| `projects` | 耐久 | status()(report() 同源) | 项目列表 |
|
|
89
|
+
| `problems` | 耐久 | status()(report() 同源) | 问题清单与状态 |
|
|
90
|
+
| `propositions` | 耐久 | status()(report() 同源) | 命题/引理索引 |
|
|
91
|
+
| `stateCommit` | 耐久 | status()(report() 同源) | 状态提交(原子提交标记与世代) |
|
|
92
|
+
| `formal` | 耐久 | status()(report() 同源) | Lean 形式化验证面(作业/回执/结论) |
|
|
93
|
+
| `methods.project` | 耐久 | status()(report() 同源) | 项目级方法库 |
|
|
94
|
+
| `methods.global` | 耐久 | status()(report() 同源) | 全局方法库 |
|
|
95
|
+
| `paper.finalizedAt` | 耐久 | status()(report() 同源) | 论文定稿时间戳 |
|
|
96
|
+
| `paper.artifacts` | 耐久 | status()(report() 同源) | 论文产物清单(md/tex/pdf 等) |
|
|
97
|
+
| `paper.compile` | 耐久 | status()(report() 同源) | LaTeX 编译结果/降级原因 |
|
|
98
|
+
| `stateWriteFailures` | 会话 | status()(report() 同源) | 状态写失败计数(耐久写不健康时可见) |
|
|
99
|
+
| `activeCount` | 会话 | status()(report() 同源) | 活跃子代理数(由注册表推导) |
|
|
100
|
+
| `pendingDecisions` | 会话 | status()(report() 同源) | 等待人工决策的节点 |
|
|
101
|
+
| `registeredAgents` | 会话 | status()(report() 同源) | 已注册子代理表 |
|
|
102
|
+
| `verifyPending` | 会话 | status()(report() 同源) | 待验证项 |
|
|
103
|
+
| `queuedPlanActions` | 会话 | status()(report() 同源) | 排队的计划动作 |
|
|
104
|
+
| `plannerFails` | 会话 | status()(report() 同源) | 规划器失败计数 |
|
|
105
|
+
| `methods.pendingInventions` | 会话 | status()(report() 同源) | 待发明的理论/方法 |
|
|
106
|
+
| `recentActivity` | 会话 | status()(report() 同源) | 最近活动日志(环形缓冲) |
|
|
107
|
+
| `paper.inFlight` | 会话 | status()(report() 同源) | 论文撰写是否在途 |
|
|
108
|
+
| `paper.inFlightSince` | 会话 | status()(report() 同源) | 在途开始时间 |
|
|
109
|
+
| `paper.inFlightAgeMs` | 会话 | status()(report() 同源) | 在途已持续时间 |
|
|
110
|
+
| `paper.reapedThisRun` | 会话 | status()(report() 同源) | 本轮回收的论文撰写者数 |
|
|
111
|
+
| `paper.queued` | 会话 | status()(report() 同源) | 排队的论文撰写请求 |
|
|
112
|
+
|
|
113
|
+
### v5 的字段与作用域(**源自 `status()` 字面量;v5 的 `fieldScopes` 只是粗分类**)
|
|
114
|
+
|
|
115
|
+
> v5 的 `fieldScopes` 只给出**类别**(对象里两个键 `session` / `durable`,各自装若干**类别描述**而不是逐字段),因此下表按 `status()` 的顶层键逐条派生;**不在 `fieldScopes` 分类里的键** 作用域写"未分类(语义见实现)"而不猜。派生由 `tests/audit-status-report-fields.mjs` 双向核对,并打印 `frozen / doc-rows / exceptions` 三个计数(`frozen` = 源码里的顶层键数,`doc-rows` = 本表行数,`exceptions` = 显式豁免数,当前为 0)。
|
|
116
|
+
|
|
117
|
+
| 字段 | 作用域 | 视图 | 含义 |
|
|
118
|
+
|---|---|---|---|
|
|
119
|
+
| `ok` | 会话 | status()(report() 同源) | 调用是否成功(机器面总开关) |
|
|
120
|
+
| `institute` | 会话/派生 | status()(report() 同源) | 研究所名与根 |
|
|
121
|
+
| `project` | 会话/派生 | status()(report() 同源) | 当前项目(会话根的项目标识) |
|
|
122
|
+
| `key` | 会话 | status()(report() 同源) | 本研究所的状态键(状态文件与隔离用) |
|
|
123
|
+
| `phase` | 耐久 | status()(report() 同源) | 研究所阶段(从状态文件派生) |
|
|
124
|
+
| `running` | 会话 | status()(report() 同源) | 调度器是否在跑(重建后由会话状态决定) |
|
|
125
|
+
| `autoDone` | 会话 | status()(report() 同源) | 自动模式是否已完成收口(phase 的会话镜像) |
|
|
126
|
+
| `runId` | 耐久 | status()(report() 同源) | 当前 run 的 id |
|
|
127
|
+
| `leanNotices` | 会话 | status()(report() 同源) | Lean 提示(会话内累积) |
|
|
128
|
+
| `leanNoticesScope` | 未分类(语义见实现) | status()(report() 同源) | leanNotices 的作用域声明 |
|
|
129
|
+
| `fieldScopes` | 未分类(语义见实现) | status()(report() 同源) | 本对象自身的字段↔作用域分类(机器可读) |
|
|
130
|
+
| `backend` | 会话/派生 | status()(report() 同源) | 持久化后端种类 |
|
|
131
|
+
| `diagnostics` | 未分类(语义见实现) | status()(report() 同源) | 跳过/畸形事件与状态加载问题 |
|
|
132
|
+
| `debug` | 会话 | status()(report() 同源) | 调度调试计数(passes/reschedule 等) |
|
|
133
|
+
| `quorum` | 未分类(语义见实现) | status()(report() 同源) | 共识/投票视图 |
|
|
134
|
+
| `members` | 未分类(语义见实现) | status()(report() 同源) | 成员名册(含会话态字段) |
|
|
135
|
+
| `tasks` | 未分类(语义见实现) | status()(report() 同源) | 共享任务板 |
|
|
136
|
+
| `failedMembers` | 未分类(语义见实现) | status()(report() 同源) | provisioning 失败的成员 |
|
|
137
|
+
| `failedMembersNote` | 未分类(语义见实现) | status()(report() 同源) | 失败成员的处理说明(重试口径) |
|
|
138
|
+
| `pendingSpawns` | 未分类(语义见实现) | status()(report() 同源) | 被宿主 live-child 上限拒绝、已登记待补建的成员 |
|
|
139
|
+
| `pendingSpawnsNote` | 未分类(语义见实现) | status()(report() 同源) | 待补建的口径说明(何时重试、何时清空) |
|
|
140
|
+
| `chat` | 未分类(语义见实现) | status()(report() 同源) | 邮箱计数(pending 未 ack / delivered 有上限的确认账本) |
|
|
141
|
+
| `chatScope` | 未分类(语义见实现) | status()(report() 同源) | chat 两个计数的作用域声明 |
|
|
142
|
+
| `officeRequests` | 未分类(语义见实现) | status()(report() 同源) | 所办请求(办公室收件) |
|
|
143
|
+
| `officeRequestsShown` | 未分类(语义见实现) | status()(report() 同源) | 本次展示的请求数 |
|
|
144
|
+
| `officeRequestsCap` | 未分类(语义见实现) | status()(report() 同源) | 展示上限 |
|
|
145
|
+
| `officeRequestsDropped` | 未分类(语义见实现) | status()(report() 同源) | 因上限被丢弃的请求数 |
|
|
146
|
+
| `officeRequestsTruncated` | 未分类(语义见实现) | status()(report() 同源) | 是否发生了截断 |
|
|
147
|
+
| `persistence` | 未分类(语义见实现) | status()(report() 同源) | 持久化状态(含 scope) |
|
|
148
|
+
| `meeting` | 未分类(语义见实现) | status()(report() 同源) | 会议视图 |
|
|
149
|
+
| `parkedMeeting` | 未分类(语义见实现) | status()(report() 同源) | 挂起的会议 |
|
|
150
|
+
| `verify` | 未分类(语义见实现) | status()(report() 同源) | 验证面(按对象) |
|
|
151
|
+
| `verifyQueue` | 未分类(语义见实现) | status()(report() 同源) | 验证队列 |
|
|
152
|
+
| `verified` | 未分类(语义见实现) | status()(report() 同源) | 已验证对象集合 |
|
|
153
|
+
| `verifiedTrue` | 未分类(语义见实现) | status()(report() 同源) | 验证为真的对象 |
|
|
154
|
+
| `concludedFalse` | 未分类(语义见实现) | status()(report() 同源) | 结论为假的对象 |
|
|
155
|
+
| `verifiedNote` | 未分类(语义见实现) | status()(report() 同源) | 验证面的说明/口径 |
|
|
156
|
+
| `undecided` | 未分类(语义见实现) | status()(report() 同源) | 未定论对象 |
|
|
157
|
+
| `solveVotes` | 未分类(语义见实现) | status()(report() 同源) | 求解投票 |
|
|
158
|
+
| `formal` | 未分类(语义见实现) | status()(report() 同源) | Lean 形式化验证面(作业/回执/结论) |
|
|
159
|
+
| `paper` | 未分类(语义见实现) | status()(report() 同源) | 论文面(状态/产物/编译) |
|
|
160
|
+
| `lastProgressAt` | 未分类(语义见实现) | status()(report() 同源) | 最近一次进展的时间戳(停滞判定用) |
|
|
161
|
+
| `params` | 未分类(语义见实现) | status()(report() 同源) | 规范化后的运行参数(会话内可写、耐久只存落盘值) |
|
|
162
|
+
|
|
163
|
+
### v4:**没有** `fieldScopes`
|
|
164
|
+
|
|
165
|
+
v4 的源码里**不存在** `fieldScopes`(0 命中,本表由源码派生而非声明)。v4 的机器面字段以 `tests/formal-verify-v4.test.mjs` 的行为断言为准;本表因此**不为 v4 编造行**。
|
|
166
|
+
|
|
167
|
+
<!-- G-6-FIELD-TABLE-END -->
|