Repository navigation
dsh-vibe-math 2.7.3
dsh-vibe-math 2.7.3 — 发布说明
上一版本:2.7.2。本版是补丁版:只包含修复、口径纠正与验证深度——v5 研究所的轮次计数与邮箱投递不再出错、论文定稿与任务 CAS 的失败有具名后果、v4 的 Lean 库索引与项目标记写失败不再静默、安装器对外输出统一为中文标签并做到"一个动作一行"、文档中残留的旧邮箱顺序全部纠正并有自动配对检查防止回潮。四套预设的参数默认值、数据格式与目录结构未变(由
tests/audit-math-computation-contract.mjs与tests/audit-math-computation-parity.mjs断言);新增内容都是附加或仅测试面的,旧读者不受影响。无破坏性变更,DSH 支撑窗口不变,无需迁移。
概述
- 邮箱不再丢消息:确认(ack)改为只在发送成功之后发生;未被确认的消息保持 pending,会在下一次成功唤醒时重新投递。重复抑制由注入标记(
inboxInjected/inboxSuppressed)负责,一轮之内不会把同一条消息 prepend 两遍。 - 轮次编号可预期:新成员的创立提示词带上它实际开始的轮次(从
轮次 1起,不再出现轮次 0);失败的启动不再消耗轮次,也不会抹掉或重置既有成员的轮次计数(宿主丢失子会话后重建,提示词仍继续编号,例如轮次 2)。 - 论文定稿失败可追溯:必需产物(
paper.md/paper.tex/paper.meta.json/paper.log.md)写入失败时给出具名告警恰好一次,点名产物与恢复途径;产物清单只列真正落盘的文件;重跑定稿幂等补齐缺失产物,且不会重复告警。 - 任务 CAS 拒绝不留半成品:
expected_revision过期被拒时,任务保持不变(revision/ownerId/status回读一致)。 - 成员路径契约不一致会被点名:文档写的成员库根与框架实际读写的根不一致时按名给出提示,并且该提示现在会进入
report()的诊断(此前只是入队、从不显现)。 - v4 索引写失败有具名后果:Lean 库索引写失败恰好具名一次,带
lib=/proved=,并说明"索引在下次成功重建前是陈旧的";该单点覆盖全部调用方,且不影响返回值(工具照旧返回扫描计数)。 - v4 项目标记写失败有具名后果:当前项目标记
.current写失败具名一次,并说明后果——下一个会话可能加载到上一个项目。 - 文档不再描述会丢消息的顺序:计划书、架构图、伪代码块与守卫清单中残留的旧邮箱顺序(先确认再构造)已全部改为"先构造;仅在发送成功后确认;同一轮不重复 prepend",并有自动的文案↔代码配对检查(旧措辞回来即失败,并要求实现锚点
if (ok && prompt.pending.length) await ackPending()。
新增
- 随包文档
docs/status-report-fields.md新增逐预设机器面字段表(name / scope / which-views / meaning 四列):v2 20 行、v3 25 行、v5 43 行(按status()的顶层键派生),v4 则明确声明它不暴露fieldScopes;该表由守卫双向核对(每个源码字段都有文档行;每条文档行都指向真实源码字段)。 - 门禁的验证深度:现在运行 101 项作业 = 44 个套件 + 57 个探针/变体(上一版 2.7.2 为 65 项 = 44 + 21,按该标签树的作业清单规则复算),其中包含随包发布的变异族(
tests/*.mutants.mjs)与--self-probe模式:它们对变异后的副本运行并要求出现具名失败,而不是只看退出码。 - 可指向副本的审计缝:多个审计可通过环境变量指向变异副本(例如
MATH_COMPUTATION_MODULE、V5_PLUGIN、PERSONA_ROOT、INSTALLER_JS),无需修改仓库文件即可复现证据。 - 文档计数改为派生并全量扫描:live 文档里出现的每个
TOTAL <n>必须等于node tests/run-tests.mjs --counts的派生值;时间必须引用各族自己打印的TOTAL WALL TIME行;冻结的历史发布说明按名豁免(豁免清单本身也断言非空)。
变更
- 邮箱顺序口径:v5 计划书、架构图与守卫清单统一为"先构造、后确认",并在计划书中以可检索的代码顺序给出(取待投递 → 组成框头块 → 构造本轮提示词 → 发送 → 仅成功时确认)。
- 安装器对外输出统一为中文标签:面向用户的日志标签不得是纯 ASCII(英文领域词夹在中文标签里仍合规);恢复与清理各自恰好报告一次;"同一版本的既有备份不算失败"改为在报告层判定,而不是匹配日志文字。
- 校验口径更保守:确认为"检查存在性"而非"求解版本"的约束保持原样,不引入会改变判定结果的"简化"。
修复
- v5 邮箱:失败的唤醒会丢消息 → 确认只在发送成功后发生,未确认的消息留在队列里等下一次成功唤醒重投;同一轮不重复 prepend。守卫:
tests/e2e-v5-round2.test.mjs(失败的唤醒后消息仍为 pending)与随包族tests/v5-institute-fixes.mutants.mjs。 - v5 轮次编号 → 创立提示词带真实轮次;失败启动不消耗轮次、不重置既有计数;重建继续编号。守卫:
tests/e2e-v5-round2.test.mjs(重建后的提示词读作轮次 2)与tests/v5-institute-fixes.mutants.mjs(两条spawnMember族)。 - v5 论文定稿 → 必需产物写失败具名一次(点名产物与恢复途径);产物清单只含真正落盘项;重跑幂等、不重复告警。守卫:随包套件
tests/e2e-v5-round2.test.mjs。 - v5 任务 CAS → 过期
expected_revision被拒后任务保持原状(回读revision/ownerId/status验证)。守卫:tests/v5-institute-fixes.mutants.mjs(CAS 相关族)。 - v5 成员路径契约 → 文档根与实际读写根不一致时按名提示,并进入
report()诊断(此前入队后从不显现)。守卫:tests/e2e-v5-round2.test.mjs与tests/audit-v5-integrity.mjs。 - v4 Lean 库索引写失败静默 → 单点具名一次,带
lib=/proved=与"陈旧至下次成功重建"的后果,覆盖全部调用方,且不改变返回值。守卫:tests/formal-verify-v4.test.mjs(Lean 库索引那一段)与随包族tests/formal-verify-v4.mutants.mjs(第 8 条族按名变红)。 - v4 当前项目标记
.current写失败静默 → 具名一次并说明后果(下一个会话可能加载上一个项目)。守卫:tests/formal-verify-v4.test.mjs(当前项目标记那一段)与tests/formal-verify-v4.mutants.mjs。 - 名册与验证面 → 公布的投票者集合被断言与其
voterCount一致且 id 互异;职员人设被断言确实进入每位成员的人设与提示词。守卫:tests/audit-participant-set-parity.mjs、tests/audit-persona-surface.test.mjs。 - 安装器(见"变更") → 恢复/清理各恰好一次、"既有备份不算失败"在报告层判定。守卫:
tests/audit-installer-policy.test.mjs、tests/audit-installer-compat.test.mjs与随包族tests/audit-installer-assertions.mutants.mjs。 - 文档口径漂移 → 8 处仍描述旧邮箱顺序的位置全部纠正,并加上文案↔代码配对检查。守卫:
tests/audit-v5-integrity.mjs。
兼容性与迁移
- 破坏性变更:无。 四套预设的参数默认值、数据格式、目录结构均未改变。
- 纯新增:本版新增的文档与验证面(字段表、变异族与自探针、可指向副本的审计缝)都不改变运行时契约;新增响应字段若有也是附加的。
- 迁移:无需迁移。
- DSH 支撑窗口与 2.7.2 相同(见
package.json的engines.dsh)。
已知限制
- 本机没有 Lean / LaTeX 引擎,也没有 Octave / Julia / MATLAB / Maple / Wolfram:这些面未在本机执行;插件会如实报告——用
configured列出配置启用的引擎,用absent[](每项带why)说明本机为何没有。 - 两次脚本化的端到端真机运行(v4 与 v5)因资源上限(token 上限 / 墙钟)中止,按"非结果"记录,而不是通过:因此容量拒绝、打断、项目切换失败、安装器自检与
/compact的行为覆盖依靠随包套件;那两次运行提供的是落位与可观测性证据。 - 引擎版本号未观测:因为本机没有安装任何受支持的引擎,本版无法给出引擎版本读数。
- 商业引擎模板仍需在持证机器上确认,默认标记为需人工确认。
- 2.7.0 之前的发布说明仅提供中文(英文历史索引见
README.en.md)。
验证方式
node tests/run-tests.mjs—— 期望TOTAL 101 PASS 101 FAIL 0(44 个套件 + 57 个探针/变体)。- 针对性守卫入口:
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)。 - 随包变异族(
tests/*.mutants.mjs)各自对单点变异要求具名失败;--self-probe模式对变异副本运行并要求具名断言变红。 - 宿主机:DSH 0.2.0-rc.2。
- 真机引擎:未安装、未执行(见"已知限制");引擎存在性一律以列目录/探测证明,绝不假设路径存在。
依赖
- 无新增运行时依赖;DSH 支撑窗口不变。
dsh-vibe-math 2.7.3 — Release Notes (English)
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.mjsandtests/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.
Overview
- 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. - 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). - 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. - A refused task compare-and-set leaves no half-state: when
expected_revisionis stale the task is unchanged (verified by reading backrevision/ownerId/status). - 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). - 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). - v4 project-marker write failures have a named consequence: a failed write of the current-project marker
.currentis named once, with the consequence that the next session may load the previous project. - 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().
Added
- 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 eachstatus()), while v4 states explicitly that it exposes nofieldScopes; the table is checked in both directions (every source field has a doc row; every doc row names a real source field). - 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-probemodes that run a mutated copy and require a named failure rather than only an exit code. - 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. - Documentation counts are derived and swept: every
TOTAL <n>in a live document must equal the value derived bynode tests/run-tests.mjs --counts; timings must quote each family's ownTOTAL WALL TIMEline; frozen historical release notes are exempt by name (and that exemption list is itself asserted to be non-empty).
Changed
- 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).
- 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.
- More conservative validation wording: constraints that are only checked for existence are still described exactly that way — no "simplification" that would change the verdict.
Fixed
- 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 familytests/v5-institute-fixes.mutants.mjs. - 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) andtests/v5-institute-fixes.mutants.mjs(twospawnMemberfamilies). - 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. - v5 task compare-and-set → after a stale
expected_revisionis refused the task is unchanged (verified by reading backrevision/ownerId/status). Guard:tests/v5-institute-fixes.mutants.mjs(the CAS family). - 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.mjsandtests/audit-v5-integrity.mjs. - 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 oftests/formal-verify-v4.test.mjsand the shipped familytests/formal-verify-v4.mutants.mjs(its 8th family reddens by name). - v4
.currentmarker write failures were silent → named once, with the consequence that the next session may load the previous project. Guard: the current-project-marker section oftests/formal-verify-v4.test.mjsandtests/formal-verify-v4.mutants.mjs. - Rosters and verification surface → the published voter set is asserted to agree with its
voterCountand 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. - 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.mjsand the shipped familytests/audit-installer-assertions.mutants.mjs. - 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.
Compatibility & Migration
- Breaking changes: none. Parameter defaults, data formats and the directory layout are unchanged across all four presets.
- 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.
- Migration: none needed.
- The DSH support window is the same as 2.7.2 (see
engines.dshinpackage.json).
Known Limitations
- 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 —
configuredlists the engines enabled by configuration, andabsent[](each entry carryingwhy) says why this machine does not have them. - 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
/compacttherefore rests on the shipped suites, while those runs served as placement and observability evidence. - Engine versions were not observed: no supported engine is installed on this machine, so this release cannot report engine version readings.
- Commercial engine templates still need confirmation on a licensed machine and remain marked as requiring human confirmation.
- Release notes before 2.7.0 are Chinese only (see
README.en.mdfor the English history index).
Verification
node tests/run-tests.mjs— expectedTOTAL 101 PASS 101 FAIL 0(44 suites + 57 probes/variants).- 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). - The shipped mutant families (
tests/*.mutants.mjs) each require a named failure for a single-site mutation; the--self-probemodes run a mutated copy and require the named assertion to redden. - Host: DSH 0.2.0-rc.2.
- Real engines: not installed, not executed (see "Known Limitations"); engine existence is always proven by listing directories or probing, never assumed.
Dependencies
- No new runtime dependencies; the DSH support window is unchanged.