Repository navigation
Releases: ChongCyrus/Vibe-Mathematics
Release list
dsh-vibe-math 2.8.5
dsh-vibe-math 2.8.5 — 发布说明
上一版本:2.8.4。本版是补丁版(版本号沿用 2.8.x 线):以修复为主——Lean 形式化通道此前默认无法编译,"装了但不在 PATH"的 TeX 引擎现在能找到,另有几处面向成员提示词的修正;并附带一个纯增量的新能力(反馈库,默认开启、默认行为不变)。参数名与默认值、数据格式与目录结构未变,DSH 支撑窗口不变,无需迁移。
概述
- Lean 形式化通道恢复可用:此前注入的搜索根旗标拼写对 Lean 4 无效,编译器在参数解析阶段就失败(要编译的文件从未被读取),形式化因此永远无法通过;现在注入
-R <root>,真机上最小证明可编译并归档,且能被另一名成员读取复用。 - TeX 引擎"装了但不在 PATH"现在能找到:新增有界的文档化候选根(仍然只查文档化位置、不扫全盘、绝不自动安装、绝不写工作区之外),未检测到时
triedPaths继续具名列出实际探测过的路径。 - 提示词不再要求成员做它做不到的事:缺引擎时改为"如实上报所办(或群聊)",由所办向用户确认;LaTeX 指引标注适用范围;"回执"概念补上背景;空引擎列表措辞不再自相矛盾;面向成员的框架回执标题改为 【研究所提示】;面向代理的文本不再出现盘符字面量。
- 新增合作/管理/工作经验反馈库(v5):把"怎么一起工作"记下来并闭环——
self/team路由自我调整即可、无需审批,interpersonal路由需要先评估、事后再回填验证;开关feedback(默认on)。 - 安装与升级的两个坑写清了:
dsh plugin …的插件管理需要一个可用的pnpm;安装/升级请给显式版本(不带版本可能装到旧版)。 - 维护者向:新增/加强了一批跨四套预设的静态不变式与具名变异自检;门禁与"宿主是否安装 TeX"解耦,套件在任何机器上结果一致。
新增
- 工具
vibe_v5_feedback(v5,成员可用):op取'add' | 'update' | 'list' | 'summary';list默认只列未闭环条目(可按category/route过滤,all: true看全部);summary按类别与路由计数。 - 载体:
Shared/Feedback/<类别>.md(cooperation合作|management管理|process流程|obstacle障碍|conflict矛盾)+Shared/Feedback/index.json索引;权威数据放在研究所的耐久状态里,重启不丢。 - 参数
feedback(v5):'on'(默认)|'off'。设为'off'时:提示词不再注入该段,且工具的每个操作都具名拒绝(V5_FEEDBACK_DISABLED,绝不静默写入)。 - 三条路由(写进提示词与文档):
self=你自己的做法 ⇒ 自己调整即可,无需谁采纳;team=组织/工作流/团队运行的调整 ⇒ 同样无需审批,觉得不好就及时调整;interpersonal=别人造成的、要别人改变才能解决 ⇒ 只有这条要先做评估,并在事后回填验证结果(outcome回填后才允许闭环)。 - 权限:成员与临时工可
add,且只能update自己发起的条目;所办可update任何条目(标记解决/回填结果)。 - 可观测:条目数/未闭环数/按类别/按路由计数出现在
vibe_v5_feedback {op:'summary'}、vibe_v5_report与vibe_v5_overview三处。
变更
- 提示词(受影响的四套预设):缺引擎的处置由"向用户询问"改为"如实上报所办(或群聊),由所办向用户确认"——成员没有直连用户的通道。
- 提示词:LaTeX 指引现在写明"仅在你参与论文写作或编译时适用",不再作为无解释的噪声出现在每次唤醒里。
- 提示词:
math_computation的"归档→编辑→重跑"段在首次提到"回执"处说明"回执=一次math_computation调用的 JSON 结果:先probe或run一次即可看到它的字段",并给关键字段加最小注解。 - 提示词:空引擎列表由
math_computation:本机可用 (无)改为math_computation:可用引擎 无(英文available engines none)。 - 提示词:面向成员的框架回执标题由
【框架提示】改为【研究所提示】。 - 文档:安装段与排查段写明
pnpm前置与"显式版本"口径;README 里"用@latest升级"的旧说法已改正为显式版本。 - 维护者向:随包的提示词语料随上述文本变化同步更新。
修复
- 症状:v2/v3/v4/v5 的 Lean 形式化几乎从不通过——日志里能看到大量 Lean 调用,但
formal.passed为空。原因:注入的搜索根旗标是 Lean 3 的--search-path,而 Lean 4 只认-R/--root,编译器在参数解析阶段即以rc=1退出,要编译的文件从未被读取。修正:四个预设统一注入-R <root>;若用户在leanArgs里已显式给出搜索根,则不再注入第二个(语义不变)。验证:真机上编译器被正确调用并读到文件;最小证明theorem probe_true : True := trivial编译通过并归档到Verified/Lean/,随后另一名成员读取该归档引理,并以它的陈述作为新定理的前提(复用成立)。守卫: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(旗标拼写 +"预设文本不得再教--search-path"),tests/v5-institute-fixes.mutants.mjs(具名红)。 - 症状:TeX Live 装在
texlive\<年份>\bin\windows这类"已安装但未加入 PATH"的位置时,四套预设都报"未检测到 LaTeX 引擎",只交付 tex+md。原因:默认探测只覆盖 PATH 与 MiKTeX 的常见安装根。修正:新增有界候选根(Windows 盘根下的texlive\<年份>\bin\windows、类 Unix 的/usr/local/texlive、/opt/texlive、macOS 的/Library/TeX/texbin),候选总数有上限;仍然只查文档化位置、不扫全盘、绝不自动安装、绝不写工作区之外;未检测到时triedPaths继续具名列出实际探测过的路径。验证:真实主机上"引擎装了但不在 PATH"的情形可被发现(PATH 查找失败 ⇒ 文档化根命中);把文档化根沙箱化后,所有候选探测都落在允许树内且总数不超上限。守卫:tests/audit-prompt-invariants.mjs(候选根覆盖文档化位置/有上限/不得出现裸盘根/探测点必须经过可沙箱化的接缝),tests/e2e-v5-round2.test.mjs,tests/audit-math-computation-parity.mjs。 - 症状:成员被要求做它做不到的事(例如"向用户询问")。修正:改为"如实上报所办(或群聊)"。守卫:
tests/audit-prompt-invariants.mjs(成员可见文本不得要求其做不到的动作),tests/e2e-v5-round2.test.mjs。 - 症状:面向代理的文本里出现宿主绝对路径(盘符字面量),换一台机器就是错误指引。修正:改为可移植表述(
texlive\<年份>\bin\windows、/usr/local/texlive、/opt/texlive、/Library/TeX/texbin)。守卫:tests/audit-prompt-invariants.mjs(源码级盘符判据 + 四份提示词语料的路径判据),tests/audit-path-discipline.mjs。 - 症状:成员第一次看到"回执字段
scriptPath/scriptAbs"时并不知道"回执"是什么,只能反复试探。修正:在"归档→编辑→重跑"段首次提到回执处补一句背景。守卫:tests/e2e-v5-round2.test.mjs(模块行为级 + 成员提示词端到端),tests/v5-institute-fixes.mutants.mjs(删掉该句 ⇒ 按名红)。 - 症状:无引擎时提示词渲染成
math_computation:本机可用 (无),字面自相矛盾。修正:改为"可用引擎 无"(英文available engines none)。守卫:tests/e2e-v5-round2.test.mjs,tests/v5-institute-fixes.mutants.mjs(改回旧措辞 ⇒ 按名红)。 - 症状:面向成员的文本自称"框架",在代理视角指代含糊(指插件?宿主?还是本研究所?)。修正:回执标题改为 【研究所提示】。守卫:
tests/e2e-v5-round2.test.mjs(源码级:面向代理文本里不再出现【框架提示】),tests/v5-institute-fixes.mutants.mjs。
兼容性与迁移
- 破坏性变更:无。
- 纯新增:
vibe_v5_feedback工具、参数feedback(默认'on')、Shared/Feedback/目录与其索引。 - 迁移:无需迁移;既有参数名与默认值、数据格式与目录结构均未变。
- DSH 支撑窗口不变(见
package.json的engines.dsh)。 - 升级方式:
dsh plugin --profile <你的 profile> add dsh-vibe-math@2.8.5
- 若升级后仍是旧版:先确认
pnpm可用——dsh plugin …的插件管理需要一个可用的pnpm;缺失时安装会失败,且插件市场可能不显示原因(可附~/.dsh/profiles/<profile>/hub.log定位)。 - 再检查该 profile 的
package.json/pnpm-lock.yaml是否仍指向旧版本:它们优先于latest标签,不带版本可能装到旧版;必要时显式指定版本重试。
已知限制
- LaTeX 引擎仍只探文档化位置:装在非标准目录时不会被自动发现;请用参数
paperLatexCommand指定引擎命令的绝对路径(提示词会引导"写入后再次探测")。 - 需要真实引擎/宿主的几处行为由真机复测确认;随包套件以源码级不变式+可沙箱化接缝保证不回归,但不宣称覆盖宿主层行为(例如"中断后调用方被丢弃")。
- 反馈库不产生研究证据:它只记方法论与协作层(怎么组织、哪里卡住、与人摩擦);研究结论仍然进
Progress/与Verified/。 - 安装/升级:本机工具链下
@latest、@^2、pnpm update --latest、pnpm add …@latest均不能保证升级,仍建议显式版本(见"升级方式")。 - 根代理提问会阻塞整所流程(运维注意项,产品不改):长跑时请把问题与验收条件一次说清。
验证方式
node tests/run-tests.mjs—— 全部通过(106 项:44 套件 + 62 探针)。node scripts/release-check.mjs—— 退出 0;发布后加--registry比对线上 shasum 与本地 tarball。- 本版相关套件:
node tests/e2e-v5-round2.test.mjs(实测passed=484 failed=0)、node tests/v5-institute-fixes.mutants.mjs(33/33 具名红)、node tests/audit-prompt-invariants.mjs(211/0,--self-probe26/26)、node tests/audit-artifact-docs.mjs(24/0,其变异器 8/8)、node tests/audit-math-computation-parity.mjs(108/0)。 - 真机复测配方:① Lean——在装有 Lean 的主机上让一个对象走
vibe_v5_lean_archive(kind:'proof'),应编译通过并在Verified/Lean/出现对应文件,另一名成员应能import到它;② TeX——把引擎装在文档化根但不加入 PATH,运行论文流程应不再报"未检测到引擎",且triedPaths里能看到实际探测过的路径。
依赖
- 无新增运行时依赖;DSH 支撑窗口不变。
v2.8.4
本页为 dsh-vibe-math 2.8.4 的双语发布说明(中文在前,English below)。
dsh-vibe-math 2.8.4 — 发布说明
上一版本:2.8.3。本版是补丁版:修正 v5 的会议看门狗——它此前会在"已被点名的成员仍在进行中"时就把会议放弃,导致成员的正常发言退化成「会后补记」,并让
paperEditor="office"的定稿被反复拒绝。参数名与默认值、数据格式与目录结构未变,DSH 支撑窗口不变,无需迁移。
概述
- 会议不再在"被点名、且仍在进行中"的成员交回发言之前被放弃:这类成员最多把会议续命到停滞预算的 3 倍,超过硬界才放弃(真正卡死的一轮仍不能拖住整场会议)。
- 结果是正常发言回到正常小节:真机实测修复前一次运行出现 1067 次「会后补记」、863 次定稿被拒;修复后会议能真正收齐发言,「会后补记」退回为保险而非常态。
paperEditor="office"的定稿闸门因此更容易被真正满足(它要求本张论文至少有 1 条所办消息与 1 次记录在案的会议)。- 文档写明会议何时会被放弃、放弃如何具名、以及放弃之后到达的发言如何处置。
新增
- 无。(本版为修复版:没有新增参数、字段或工具。)
变更
- 会议停滞判定:软界(
2 × activityTimeoutMs,默认 240 s)内,只要仍有被点名的成员在进行中就不放弃;超过 3 倍(默认 720 s)的硬界则照旧放弃。 docs/final-paper.md§7 增补"会议何时会被放弃"的口径(含软界/硬界与「会后补记」的关系)。
修复
- 症状:成员(含召集人)在会议里发言后,纪要里却只留下「会后补记」条目;一次真机运行累计 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 具名红)。
兼容性与迁移
- 破坏性变更:无。
- 纯新增:无新增字段(仅行为与文档变化)。
- 迁移:无需迁移。
- DSH 支撑窗口不变(见
package.json的engines.dsh)。
已知限制
- 会议看门狗分支的真机行为只能由真机复测确认(随包套件里心跳延时不可控 ⇒ 该分支不能确定性触发;因此守卫是源码不变量,这一点已在测试注释与提交信息里写明)。
- 非标准位置的 TeX 仍不会被自动发现:默认探测只覆盖 PATH 与文档化的常见安装根。
- 随包套件不覆盖宿主层行为(例如"中断后调用方被丢弃")。
- 根代理提问会阻塞整所流程(运维注意项,不改产品):长跑时请把问题与验收条件一次说清。详见
slv-playbook.md§5。
验证方式
node tests/run-tests.mjs—— 全部通过(106 项:44 套件 + 62 探针)。node scripts/release-check.mjs—— 退出 0;发布后加--registry比对线上 shasum 与本地 tarball。- 本版修复:
node tests/e2e-v5-round2.test.mjs(★ [real1004-stall],实测passed=436 failed=0)与node tests/v5-institute-fixes.mutants.mjs(19/19 具名红)。 - 真机复测配方:用 registry 上的精确版本(
-Pin <version>)跑一个精简会议+论文任务(跳过研究),统计「会后补记」次数(修复前 1067 次)与定稿被拒次数(修复前 863 次)应显著下降。
依赖
- 无新增运行时依赖;DSH 支撑窗口不变。
dsh-vibe-math 2.8.4 — Release Notes
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.
Overview
- 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).
- 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.
- The
paperEditor="office"gate therefore becomes satisfiable in practice (it requires at least one office message and one recorded meeting for this paper). - The documentation now states when a meeting is abandoned, how the abandonment is named, and what happens to speeches that arrive after it.
Added
- None. (Patch release: no new parameters, fields or tools.)
Changed
- 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. docs/final-paper.md§7 now documents "when a meeting is abandoned" (soft/hard bounds and their relation to the "late note" path).
Fixed
- 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 byV5_PAPER_CONSULT_REQUIRED863 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).
Compatibility & Migration
- Breaking changes: none.
- Additive only: no new fields (behaviour and documentation only).
- Migration: none needed.
- The DSH support window is unchanged (see
engines.dshinpackage.json).
Known Limitations
- 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).
- TeX installed in a non-standard location is still not auto-discovered: the default probe covers PATH and the documented common install roots.
- The shipped suites do not cover host-level behaviour (for example "the caller is dropped after an interrupt").
- 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§5.
Verification
node tests/run-tests.mjs— all green (106 items: 44 suites + 62 probes).node scripts/release-check.mjs— exits 0; after publishing, add--registryto compare the registry shasum with the local tarball.- This release's fix:
node tests/e2e-v5-round2.test.mjs(★ [real1004-stall], measuredpassed=436 failed=0) andnode tests/v5-institute-fixes.mutants.mjs(19/19 named reds). - 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.
Dependencies
- No new runtime dependencies; the DSH support window is unchanged.
v2.8.3
本页为 dsh-vibe-math 2.8.3 的双语发布说明(中文在前,English below)。
dsh-vibe-math 2.8.3 — 发布说明
上一版本:2.8.2。本版是补丁版,修两处 v5 的会议与定稿问题:会议收束后到达的发言不再被静默丢弃(改成具名的"会后补记");
force重启后paperEditor="office"的定稿拒绝会说明原因(计数已随新论文重置、需重新征询)。参数名与默认值、数据格式与目录结构未变,DSH 支撑窗口不变,无需迁移。
概述
- 成员的会议发言不会再无声消失:即使发言在会议收束(看门狗放弃停滞会议,或所办提前定稿)之后才到达,也会作为「会后补记」写进会议纪要,并在群聊里具名说明一次。
- 会议纪要只增不覆盖:先前发言者的内容一律保留。
force重启后的定稿拒绝可解释:响应新增restarted: true并写明forceReason,消息直接告诉你"计数随新论文重置、重启前的消息/会议不再计入、请重新征询"。- 文档明确:
force= 一张新论文(consult的两个计数随之从 0 开始),因此重启后必须重新征询。
新增
vibe_v5_finalize_paper在因征询不足被拒时,响应新增restarted字段(布尔;该论文是否由force重启而来)。
变更
- 会议纪要新增一种条目:「会后补记」(
### <成员>(会后补记:该发言到达时会议已收束))——针对会议已收束后到达的发言;同一段文本重复提交只记一次。 V5_PAPER_CONSULT_REQUIRED的文案在restarted时追加重置说明(行为逻辑不变,只是把原因说清)。docs/final-paper.md§7 增补一条「force= 一张新论文」的口径。
修复
- 症状:某位成员(真机实测中正是会议的召集人)的发言没有出现在会议纪要里——纪要在头部写着
- 发言顺序: r-1 → acad,正文却只有### r-1;同一张论文的consult.meetings一直为 0,定稿被连续拒绝。原因:成员结束块里的input只认「有活会议」这一条路径,而会议一旦停滞会被看门狗收束,之后到达的发言无处可去、静默丢弃。现在这类发言会作为「会后补记」写入纪要(具名、去重、追加而非覆盖)。守卫:tests/e2e-v5-round2.test.mjs(★ [real1004-minutes])、tests/v5-institute-fixes.mutants.mjs。 - 症状:
force重启论文后,所办按老流程定稿会被V5_PAPER_CONSULT_REQUIRED反复拒绝,而提示里没有任何线索说明"刚刚重启导致计数清零"(真机实测连续 11 次、只能靠成员自行推断)。原因:这一语义只存在于代码里,文档与拒绝文案都没写。现在拒绝会具名说明重置与"请重新征询",文档也把「force= 新论文」写清楚。守卫:tests/e2e-v5-round2.test.mjs(★ [real1004-consult])、tests/v5-institute-fixes.mutants.mjs(18/18 具名红)。
兼容性与迁移
- 破坏性变更:无。
- 纯新增:
restarted响应字段;纪要里一种新的条目类型。 - 迁移:无需迁移;既有
paper.meta.json、会议纪要与目录结构不变。 - DSH 支撑窗口不变(见
package.json的engines.dsh)。
已知限制
- 非标准位置的 TeX 仍不会被自动发现:默认探测只覆盖 PATH 与文档化的常见安装根;装在其它目录请用
paperLatexCommand指绝对路径。 - 随包套件不覆盖宿主层行为(例如「中断后调用方被丢弃」),这类行为需要真机才能观察。
- 根代理提问会阻塞整所流程(运维注意项,不改产品):答复到达前其余流程停摆;长跑时请把问题与验收条件一次说清。详见
slv-playbook.md§5。 - 会议「因长时间无新发言被看门狗放弃」之后,纪要里会留下放弃标记;放弃前的发言仍保留,之后到达的发言进「会后补记」。
验证方式
node tests/run-tests.mjs—— 全部通过(106 项:44 套件 + 62 探针)。node scripts/release-check.mjs—— 退出 0(版本三处一致/两份说明章节顺序/files[]登记/包内无 CRLF);发布后加--registry比对线上 shasum 与本地 tarball。- 本版两处修复:
node tests/e2e-v5-round2.test.mjs(★ [real1004-minutes]、★ [real1004-consult])与node tests/v5-institute-fixes.mutants.mjs(18/18 具名红)。 - 真机复测方式:用 registry 上的精确版本(
-Pin <version>)跑一个精简会议+论文任务(跳过研究),核对纪要是否含两位发言人、以及 force 重启后拒绝是否具名。
依赖
- 无新增运行时依赖;DSH 支撑窗口不变。
dsh-vibe-math 2.8.3 — Release Notes
Previous release: 2.8.2. This is a patch release fixing two v5 issues around meetings and finalisation: a speech that arrives after the meeting closed is no longer dropped silently (it becomes a clearly-marked late note), and an office finalisation refused after a
forcerestart now explains why (the counters restarted with the new paper, so a fresh consultation is required). Parameter names and defaults, data formats and the directory layout are unchanged, the DSH support window is unchanged, and no migration is needed.
Overview
- A member's meeting speech no longer disappears silently: even when it arrives after the meeting closed (the watchdog abandons a stalled meeting; the office may finalise early) it is written into the minutes as a clearly-marked "late note", with one named line in the group chat.
- Meeting minutes are append-only: earlier speakers are always preserved.
- A refusal after a
forcerestart is now explainable: the response carriesrestarted: trueplus theforceReason, and the message states that the counters restarted with the new paper, that earlier messages/meetings no longer count, and that a fresh consultation is required. - The documentation now states it plainly:
forcemeans a new paper (bothconsultcounters start at 0), so a restart requires a new consultation.
Added
- When
vibe_v5_finalize_paperis refused for insufficient consultation, the response now carriesrestarted(boolean: was this paper started by aforcerestart?).
Changed
- Meeting minutes gained one kind of entry:
### <member>(会后补记:该发言到达时会议已收束)— used for speeches that arrive after the meeting closed; identical text submitted again is recorded only once. - The
V5_PAPER_CONSULT_REQUIREDmessage appends the reset explanation whenrestarted(behaviour is unchanged; it only states the cause). docs/final-paper.md§7 gained the "force= a new paper" rule.
Fixed
- Symptom: a member's speech — on a real host, the convener's own speech — never appeared in the minutes: the header said
- 发言顺序: r-1 → acadwhile the body contained only### r-1; the paper'sconsult.meetingsstayed 0 and finalisation was refused repeatedly. Cause: a member's end-blockinputwas only consumed when a meeting was live, and a stalled meeting is closed by the watchdog — speeches arriving later had nowhere to go and were dropped silently. Such speeches are now appended as "late notes" (named, de-duplicated, appended rather than overwritten). Guards:tests/e2e-v5-round2.test.mjs(★ [real1004-minutes]),tests/v5-institute-fixes.mutants.mjs. - Symptom: after a
forcerestart of the paper, the office's usual finalisation was refused byV5_PAPER_CONSULT_REQUIREDwith no hint that the restart had reset the counters (on a real host: 11 consecutive refusals, leaving the members to infer it). Cause: that semantics existed only in the code — neither the docs nor the refusal message said it. The refusal now names the reset and asks for a fresh consultation, and the docs state "force= a new paper". Guards:tests/e2e-v5-round2.test.mjs(★ [real1004-consult]),tests/v5-institute-fixes.mutants.mjs(18/18 named reds).
Compatibility & Migration
- Breaking changes: none.
- Additive only: the
restartedresponse field; one new kind of minutes entry. - Migration: none needed; existing
paper.meta.jsonfiles, meeting minutes and the directory layout are unchanged. - The DSH support window is unchanged (see
engines.dshinpackage.json).
Known Limitations
- TeX installed in a non-standard location is still not auto-discovered: the default probe covers PATH and the documented common install roots; use an absolute path in
paperLatexCommandotherwise. - The shipped suites do not cover host-level behaviour (for example "the caller is dropped after an interrupt"); that needs a real host.
- A root-agent question blocks the whole institute (operational note, product unchanged): nothing else proceeds until the answer arrives — state the problem and acceptance criteria up front for unattended runs. See
slv-playbook.md§5. - After a meeting is abandoned by the watchdog, the minutes keep the abandonment marker and all earlier speeches; speeches that arrive later land in the "late note" section.
Verification
node tests/run-tests.mjs— all green (106 items: 44 suites + 62 probes).node scripts/release-check.mjs— exits 0 (version triple, section order of both notes,files[]registration, no CRLF in the package); after publishing, add--registryto compare the registry shasum with the local tarball.- The two fixes in this release:
node tests/e2e-v5-round2.test.mjs(★ [real1004-minutes],★ [real1004-consult]) andnode tests/v5-institute-fixes.mutants.mjs(18/18 named reds). - Real-host re-check recipe: install the exact published version (
-Pin <version>) and run a trimmed meeting + paper task (no research), then check that the minutes contain both speakers and that a refusal after aforcerestart is named.
Dependencies
- No new runtime dependencies; the DSH support window is unchanged.
v2.8.2
本页为 dsh-vibe-math 2.8.2 的双语发布说明(中文在前,English below)。
dsh-vibe-math 2.8.2 — 发布说明
上一版本:2.8.1。本版是补丁版,修两处 v5 的「交付物与诊断」问题:
triedPaths不再出现不可能路径;v5 交付的paper.md/paper.tex也会写明「未检测到引擎/编译失败」(2.8.1 只做了 v4,本版补齐)。参数名与默认值、数据格式与目录结构未变,DSH 支撑窗口不变,无需迁移。
概述
- 显式
paperLatexCommand现在被单独探测:paper.meta.json的compile.triedPaths不再出现「已知 TeX 根 + 你给的绝对路径」这种不可能路径。 - v5 交付的
paper.md与paper.tex现在各自写明编译结果(未检测到引擎 ⇒ 只产出 tex+md;编译失败 ⇒ 已保留 tex/md),恰好一次且定稿重入不重复 ⇒ 与 2.8.1 的 v4 行为对齐。 - 其余行为不变:本机 TeX 装在非标准位置时,仍请用
paperLatexCommand指定绝对路径。
新增
- 无。(本版为修复版:没有新增参数、字段或工具。)
变更
- v5 的
paper.md/paper.tex多一行结果说明(随paperLanguage中英各一)。除此之外,论文的章节顺序、固定文案与其它字段均未变。
修复
- 症状:把
paperLatexCommand设为绝对路径后,paper.meta.json的compile.triedPaths里出现…\MiKTeX\miktex\bin\x64\Z:/no/such/xelatex.exe这类不可能路径——而triedPaths正是「找过哪里」的字段,会误导用户。原因:显式值被当作命令名拿去和已知安装根拼候选。现在显式值被单独探测,triedPaths只记录真正探过的候选。真机实测(pin 到 2.8.1 后复现):坏路径 ⇒status="not-detected"、triedPaths=["Z:/…"];真引擎 ⇒status="compiled"、paper.pdf150,044 B。守卫:tests/e2e-v5-round2.test.mjs(★ [task-17/v5])、tests/v5-institute-fixes.mutants.mjs。 - 症状:v5 交付的
paper.md/paper.tex不说 PDF 为什么没有产出(此前只有compile元数据与日志里有)。原因:论文正文在编译之前组装。现在定稿在编译之后把结果补写进交付物(paper.md末尾一条要点;paper.tex在\end{document}之前插一行%注释),各恰好一次、重入不重复。守卫:tests/e2e-v5-round2.test.mjs(★ [task-18/v5])、tests/v5-institute-fixes.mutants.mjs(16/16 具名红)。
兼容性与迁移
- 破坏性变更:无。
- 纯新增:交付物里的一行结果说明(仅 v5)。
- 迁移:无需迁移;既有
paper.meta.json仍可读。 - DSH 支撑窗口不变(见
package.json的engines.dsh)。
已知限制
- 非标准位置的 TeX 仍不会被自动发现:默认探测只覆盖 PATH 与文档化的常见安装根;装在其它目录请用
paperLatexCommand指绝对路径。 - 随包套件不覆盖宿主层行为(例如「中断后调用方被丢弃」),这类行为需要真机才能观察。
- 根代理提问会阻塞整所流程(运维注意项,不改产品):答复到达前其余流程停摆;长跑时请把问题与验收条件一次说清。详见
slv-playbook.md§5。 - 缺少 Lean / LaTeX 等引擎的机器上,相关套件会响亮跳过,不会静默通过。
验证方式
node tests/run-tests.mjs—— 全部通过(106 项:44 套件 + 62 探针)。node scripts/release-check.mjs—— 退出 0(版本三处一致/两份说明章节顺序/files[]登记/包内无 CRLF);发布后node scripts/release-check.mjs --registry再比对线上dist.shasum与本地 tarball。- 本版两处修复:
node tests/e2e-v5-round2.test.mjs(★ [task-17/v5]、★ [task-18/v5])与node tests/v5-institute-fixes.mutants.mjs(16/16 具名红)。 - 真机复测方式:用 registry 上的精确版本(
-Pin <version>)跑一个精简论文任务(跳过研究),约 8 分钟,核对compile段与paper.pdf是否存在。
依赖
- 无新增运行时依赖;DSH 支撑窗口不变。
dsh-vibe-math 2.8.2 — Release Notes
Previous release: 2.8.1. This is a patch release fixing two v5 issues around diagnostics and deliverables:
triedPathsno longer reports impossible paths, and v5's deliveredpaper.md/paper.texnow state "no engine detected / compilation failed" (2.8.1 did this for v4 only). Parameter names and defaults, data formats and the directory layout are unchanged, the DSH support window is unchanged, and no migration is needed.
Overview
- An explicit
paperLatexCommandis now probed alone:compile.triedPathsinpaper.meta.jsonno longer contains impossible paths of the form "known TeX root + the absolute path you supplied". - v5's delivered
paper.mdandpaper.texnow each state the compile outcome (no engine detected → tex+md only; compilation failed → tex/md kept), exactly once and idempotently on re-entry, matching what v4 has done since 2.8.1. - Nothing else changed: with TeX in a non-standard location, keep pointing
paperLatexCommandat an absolute path.
Added
- None. (Patch release: no new parameters, fields or tools.)
Changed
- v5's
paper.md/paper.texcarry one extra outcome line (in the language ofpaperLanguage). Apart from that line, the paper's section order, fixed wording and other fields are unchanged.
Fixed
- Symptom: after setting
paperLatexCommandto an absolute path,compile.triedPathsinpaper.meta.jsoncontained impossible paths such as…\MiKTeX\miktex\bin\x64\Z:/no/such/xelatex.exe— andtriedPathsis precisely the "where did it look" field, so it misled the reader. Cause: the explicit value was treated as a command name and joined onto every known install root. It is now probed alone, sotriedPathsrecords only candidates that were really probed. Measured on a real host (reproduced with a build pinned to 2.8.1): bogus path →status="not-detected",triedPaths=["Z:/…"]; real engine →status="compiled",paper.pdf150,044 bytes. Guards:tests/e2e-v5-round2.test.mjs(★ [task-17/v5]),tests/v5-institute-fixes.mutants.mjs. - Symptom: v5's delivered
paper.md/paper.texdid not say why no PDF was produced (only thecompilemetadata and the log did). Cause: the paper body is composed before compilation. Finalisation now writes the outcome into the deliverables after compiling (a bullet at the end ofpaper.md; a%comment before\end{document}inpaper.tex), once each and without duplication on re-entry. Guards:tests/e2e-v5-round2.test.mjs(★ [task-18/v5]),tests/v5-institute-fixes.mutants.mjs(16/16 named reds).
Compatibility & Migration
- Breaking changes: none.
- Additive only: one outcome line inside the deliverables (v5 only).
- Migration: none needed; existing
paper.meta.jsonfiles remain readable. - The DSH support window is unchanged (see
engines.dshinpackage.json).
Known Limitations
- TeX installed in a non-standard location is still not auto-discovered: the default probe covers PATH and the documented common install roots; use an absolute path in
paperLatexCommandotherwise. - The shipped suites do not cover host-level behaviour (for example "the caller is dropped after an interrupt"); that needs a real host.
- A root-agent question blocks the whole institute (operational note, product unchanged): nothing else proceeds until the answer arrives — state the problem and acceptance criteria up front for unattended runs. See
slv-playbook.md§5. - On machines without Lean / LaTeX, the related suites skip loudly rather than passing silently.
Verification
node tests/run-tests.mjs— all green (106 items: 44 suites + 62 probes).node scripts/release-check.mjs— exits 0 (version triple, section order of both notes,files[]registration, no CRLF in the package); after publishing,node scripts/release-check.mjs --registryalso compares the registry shasum with the local tarball.- The two fixes in this release:
node tests/e2e-v5-round2.test.mjs(★ [task-17/v5],★ [task-18/v5]) andnode tests/v5-institute-fixes.mutants.mjs(16/16 named reds). - Real-host re-check recipe: install the exact published version (
-Pin <version>) and run a trimmed paper task (no research) — about 8 minutes — then inspect thecompileblock and whetherpaper.pdfexists.
Dependencies
- No new runtime dependencies; the DSH support window is unchanged.
v2.8.1
本页为 dsh-vibe-math 2.8.1 的双语发布说明(中文在前,English below)。
dsh-vibe-math 2.8.1 — 发布说明
上一版本:2.8.0。本版是补丁版:修掉 2.8.0 说明里如实写出的那条「已知限制」——v4 的最终文稿此前不会说明「本机没有 LaTeX 引擎」或「PDF 编译失败」;并把发布前的逐项核对做成一条命令。参数名与默认值、数据格式与目录结构未变,DSH 支撑窗口不变,无需迁移。
概述
- v4 交付的
paper.md与paper.tex现在各自写明编译结果:未检测到引擎(只产出 tex+md),或 PDF 编译失败并已保留 tex/md。 - 该说明只写一次(定稿可重入 ⇒ 幂等),不改变论文的章节结构与其它字段。
- 2.8.0 说明中的「已知限制」第 3 条(v4 收尾备注可能为空)已解决。
- 新增
scripts/release-check.mjs:把发布前必须逐项核对的检查做成一条命令。
新增
scripts/release-check.mjs:核对版本三处一致、当前版本两份发布说明的章节顺序、两份是否登记进package.json#files、dsh.compatNote是否提到当前版本、npm pack的声明了但缺失 = 0、开发专用文件是否不随包、包内文本是否无 CRLF;开关--skip-pack(只做静态检查)、--registry(发布后比对线上dist.shasum与本地 tarball)、--self-test(自证判据非空转)。
变更
- v4 的论文交付物多一条结果说明(细节见「修复」)。除该说明外,论文的章节顺序、固定文案与其它字段均未变。
修复
- 症状:v4 的用户读完
paper.md/paper.tex也不知道PDF 为什么没有产出——只有paper.log.md里留了一行。原因:论文正文在编译之前组装,因此正文里那两条依赖编译结果的条目在正常流程中恒空。现在定稿在编译之后把结果补写进交付物:paper.md末尾增一条要点,paper.tex在\end{document}之前插入一行注释(% …),两者各恰好一次(重入不重复)。守卫:tests/v4-final-paper.test.mjs(★ [deliverable/v4] … (once each; md=1 tex=1))、tests/v4-final-paper.mutants.mjs(3/3 具名红:把中文说明置空 ⇒ 该断言按名变红,实测md=0 tex=0)。 - 发布流程缺陷(工具面):发布前的逐项核对此前只能手工做、容易漏。现在由
scripts/release-check.mjs一条命令完成,并由 4 条单点变异保证它本身不是空转。守卫:tests/release-check.mutants.mjs(4/4 具名红)。
兼容性与迁移
- 破坏性变更:无。
- 纯新增:交付物里的一行结果说明;一个随包脚本。
- 迁移:无需迁移;既有
paper.meta.json与目录结构不变。 - DSH 支撑窗口不变(见
package.json的engines.dsh)。
已知限制
- 非标准位置的 TeX 仍不会被自动发现:默认探测只覆盖 PATH 与文档化的常见安装根;装在其它目录请用
paperLatexCommand指绝对路径。 - 随包套件不覆盖宿主层行为(例如「中断后调用方被丢弃」),这类行为需要真机才能观察。
- 缺少 Lean / LaTeX 等引擎的机器上,相关套件会响亮跳过,不会静默通过。
- 本版未在真机重跑完整研究流程。
验证方式
node tests/run-tests.mjs—— 全部通过(106 项:44 套件 + 62 探针)。node scripts/update-doc-counts.mjs --check—— 退出 0(文档派生计数与仓库一致)。node scripts/release-check.mjs—— 退出 0;发布后node scripts/release-check.mjs --registry再比对线上 shasum 与本地 tarball 的字节一致性。- v4 交付物说明:
node tests/v4-final-paper.test.mjs、node tests/v4-final-paper.mutants.mjs(3/3 具名红)。 - 发布检查本身:
node scripts/release-check.mjs --self-test(15 条)与node tests/release-check.mutants.mjs(4/4 具名红)。
依赖
- 无新增运行时依赖;DSH 支撑窗口不变。
dsh-vibe-math 2.8.1 — Release Notes
Previous release: 2.8.0. This is a patch release: it fixes the "known limitation" that 2.8.0 honestly disclosed — v4's final paper did not state that no LaTeX engine was detected, or that PDF compilation failed — and it turns the pre-release checklist into one command. Parameter names and defaults, data formats and the directory layout are unchanged, the DSH support window is unchanged, and no migration is needed.
Overview
- v4's delivered
paper.mdandpaper.texnow each state the compile outcome: no engine detected (tex+md only), or PDF compilation failed with tex/md kept. - The note is written exactly once (finalisation can be re-entered, so it is idempotent) and does not change the paper's section structure or any other field.
- Known limitation #3 of the 2.8.0 notes (v4's finalisation note could be empty) is resolved.
- Added
scripts/release-check.mjs: the pre-release checklist as a single command.
Added
scripts/release-check.mjs: checks the version triple, the section order of both release notes for the current version, that both are listed inpackage.json#files, thatdsh.compatNotenames the current version, thatnpm packhas declared-but-missing = 0, that repository-only files are not shipped, and that the packaged text contains no CRLF. Switches:--skip-pack(static checks only),--registry(after publishing: compare the registrydist.shasumwith the local tarball),--self-test(prove the predicates are not vacuous).
Changed
- v4's paper deliverables carry one extra outcome note (see "Fixed"). Apart from that note, the paper's section order, fixed wording and other fields are unchanged.
Fixed
- Symptom: after reading
paper.md/paper.tex, a v4 user still could not tell why no PDF was produced — onlypaper.log.mdhad a line. Cause: the paper body is composed before compilation, so the two body items that depend on the compile result were always empty in the normal flow. Finalisation now writes the outcome into the deliverables after compiling: a bullet at the end ofpaper.md, and a comment line (% …) inserted before\end{document}inpaper.tex, once each (re-entry does not duplicate it). Guards:tests/v4-final-paper.test.mjs(★ [deliverable/v4] … (once each; md=1 tex=1)),tests/v4-final-paper.mutants.mjs(3/3 named reds: blanking the Chinese note reddens that assertion by name, measuredmd=0 tex=0). - Release-process defect (tooling): the pre-release checks had to be done by hand and were easy to miss.
scripts/release-check.mjsnow does them in one command, with 4 single-site mutations proving the checker is not vacuous. Guard:tests/release-check.mutants.mjs(4/4 named reds).
Compatibility & Migration
- Breaking changes: none.
- Additive only: one outcome line in the deliverables; one shipped script.
- Migration: none needed; existing
paper.meta.jsonfiles and the directory layout are unchanged. - The DSH support window is unchanged (see
engines.dshinpackage.json).
Known Limitations
- TeX installed in a non-standard location is still not auto-discovered: the default probe covers PATH and the documented common install roots; use an absolute path in
paperLatexCommandotherwise. - The shipped suites do not cover host-level behaviour (for example "the caller is dropped after an interrupt"); that needs a real host.
- On machines without Lean / LaTeX, the related suites skip loudly rather than passing silently.
- This version did not re-run a full research workflow on a real host.
Verification
node tests/run-tests.mjs— all green (106 items: 44 suites + 62 probes).node scripts/update-doc-counts.mjs --check— exits 0 (documented derived counts match the repository).node scripts/release-check.mjs— exits 0; after publishing,node scripts/release-check.mjs --registryalso compares the registry shasum with the local tarball byte for byte.- v4 deliverable note:
node tests/v4-final-paper.test.mjs,node tests/v4-final-paper.mutants.mjs(3/3 named reds). - The checker itself:
node scripts/release-check.mjs --self-test(15 checks) andnode tests/release-check.mutants.mjs(4/4 named reds).
Dependencies
- No new runtime dependencies; the DSH support window is unchanged.
v2.8.0
本页为 dsh-vibe-math 2.8.0 的双语发布说明(中文在前,English below)。
dsh-vibe-math 2.8.0 — 发布说明
上一版本:2.7.3。本版是功能版:四套预设新增「检测不到 LaTeX 引擎时怎么办」的明确指引,并修正显式指定引擎的回退语义(此前 v4/v5 会静默改用另一个引擎)。四套预设的参数名与默认值、目录结构未变,数据格式仅新增一个字段,DSH 支撑窗口不变,无需迁移。
概述
- 显式
paperLatexCommand现在是「指定即只用它」:解析不到就按「未检测到」降级,不再悄悄改用别的引擎;四套预设与文档口径完全一致。 - 检测不到引擎时的具名警告变得可行动:说明已探测 PATH 与文档化的常见 TeX 根,并给出指定绝对路径的方法。
- 四套预设的提示词明确告诉代理四步做法(有界自查 → 把绝对路径写入
paperLatexCommand并重测 → 问用户一次 → 否则照旧降级)与三条硬边界(不自动安装、不写工作区之外、不把「未检测到」当失败)。 - 论文元数据新增
triedPaths:记录本次检测实际探测过哪些路径(成功与失败都记录)。 - 「宿主拒绝中断」的错误带上可执行的下一步,并纳入回归防护。
- 自行运行测试套件的人会看到更稳的门禁:默认并发降低、启动时自动清扫陈旧的测试临时目录、临时根优先使用更宽裕的盘、发现疑似遗留进程时只读告警。
- 仓库行尾统一为 LF:从本版起 npm 包内容与标签逐字节可复现。
新增
- 论文编译元数据
paper.meta.json的compile段新增triedPaths(字符串数组,本次检测过程中探测过的候选路径并集)。 - 四套预设的提示词新增「引擎缺失指引」块(同一段规范文本,逐字一致)。v5 以
paperHintBlock(lang)注入成员提示词。 - 中断工具失败响应新增
next: { kind: 'reason', tool: 'vibe_math_abort', hint },与其它失败诊断同形。 - 随包测试工具
scripts/clean-temp.mjs:列出疑似遗留进程(--ps,只读)与清扫陈旧测试临时目录(--dry-run/--age-hours=N)。
变更
- 显式引擎语义统一:
paperLatexCommand非空时只用它;解析不到 ⇒compile.status = 'not-detected',只交付paper.tex与paper.md。v4/v5 此前会把该命令并入候选表,在它不可用时回落到别的引擎,现与 v2/v3 以及docs/final-paper.md的既有口径一致。 - 未检测到引擎的警告文案:「未检测到 LaTeX 引擎(…):只产出 tex+md…已探测 PATH 与文档化的常见 TeX 根;可用
paperLatexCommand指定绝对路径。」 - 测试门禁的默认值(仅影响自行运行套件的人):默认并发
min(4, cpus)→min(2, cpus);启动时清扫mtime早于 6 小时、且前缀取自套件自身的陈旧临时目录;临时根优先指向D:\_tmp(不可用时回退,不报错);发现疑似遗留进程时只读告警,绝不自动结束进程。可用--concurrency=N、--no-temp-hygiene、--temp-dry-run等开关覆盖。 - 仓库新增
.gitattributes:文本文件一律 LF(二进制显式标记)。此前工作区 CRLF/LF 混合,而npm pack读工作区,包内可能出现 CRLF。
修复
- 症状:把
paperLatexCommand设成一个不存在的路径,v4/v5 仍会用系统里另一个引擎编译出 PDF(用户以为指定的引擎生效了)。现在按「未检测到」降级,并给出可行动警告。守卫:tests/v4-final-paper.test.mjs、tests/e2e-v5-round2.test.mjs。 - 症状:检测不到引擎时只报「未检测到」,用户不知道找过哪里。现在
triedPaths记录实际探测路径,警告说明探测范围。守卫:tests/v2-fix-probes.test.mjs、tests/v3-fix-probes.test.mjs、tests/v4-final-paper.test.mjs、tests/e2e-v5-round2.test.mjs。 - 症状:四套预设的「引擎缺失」指引缺失或彼此不一致。现在四套都有同一段规范文本,并有逐字一致性检查。守卫:
tests/audit-prompt-invariants.mjs(不变量 I15)。 - 回归防护补强(行为未变):把「宿主拒绝中断」这条失败路径纳入守卫(
VIBE_MATH_INTERRUPT_FAILED+next.tool = 'vibe_math_abort')。守卫:tests/v2v3-interrupt.mutants.mjs与两个数学套件的对应断言。 - 测试基础设施修复:套件被超时终止时无法自清,导致临时目录长期累积(实测顶层曾达 24 万项)。现在每次门禁启动自动清扫陈旧目录。守卫:
scripts/clean-temp.mjs --self-test、tests/temp-hygiene.mutants.mjs。 - 测试时序修复:个别套件在并行负载下会在「所等事件发生之前」结束(单跑全绿、门禁偶发红)。现在相关循环以墙钟截止、等待窗口设有下限,并有按实测定值的超时预算。守卫:
tests/run-tests.mutants.mjs(5/5)及上述套件自身的断言。
兼容性与迁移
- 破坏性变更:无。参数名与默认值、目录结构未变;
triedPaths是纯新增字段,旧paper.meta.json仍可读。 - 需要注意的行为变化:若你此前故意把
paperLatexCommand指向不可用的值并依赖「回落到可用引擎」,本版会改为按「未检测到」降级——这是与docs/final-paper.md一致的修正。想要自动选择引擎,请把该参数留空。 - 迁移:无需迁移。
- DSH 支撑窗口不变(见
package.json的engines.dsh)。
已知限制
- 非标准位置的 TeX 仍不会被自动发现:默认探测只覆盖 PATH 与文档化的常见安装根。装在其它的目录(例如把 TeX Live 装在盘符根下的自定义目录)请用
paperLatexCommand指定绝对路径;本机实测非标准位置默认探测不到。 - 随包套件不覆盖宿主层行为:「中断后调用方被丢弃」这类行为需要真机才能观察,未纳入随包断言。
- v4 的收尾备注存在一个已知小问题:最终文稿的「未检测到/编译失败」备注字段可能为空(备注在编译结果确定之前组装)。不影响定稿与降级行为,已记录待修。
- 缺少 Lean / LaTeX 等引擎的机器上,相关套件会响亮跳过,不会静默通过。
- 本版未在真机重跑完整研究流程;引擎探测面覆盖「有引擎」与「无引擎」两种情形。
验证方式
node tests/run-tests.mjs—— 全部通过(105 项:44 套件 + 61 探针)。node scripts/update-doc-counts.mjs --check—— 退出 0(文档派生计数与仓库一致)。- 跨预设提示词逐字一致:
node tests/audit-prompt-invariants.mjs(不变量 I15)与node tests/audit-prompt-invariants.mjs --self-probe(11/11)。 - 显式引擎语义:
node tests/v4-final-paper.test.mjs、node tests/e2e-v5-round2.test.mjs,以及node tests/v4-final-paper.mutants.mjs(2/2 具名红)。 - 中断失败诊断:
node tests/v2v3-interrupt.mutants.mjs(2/2 具名红)。 - 测试环境卫兵:
node scripts/clean-temp.mjs --self-test、node tests/temp-hygiene.mutants.mjs(4/4 具名红)。 - 打包一致性:
npm pack --dry-run的清单与package.json#files一致(声明了但缺失 = 0),且包内文本行尾统一为 LF。
依赖
- 无新增运行时依赖;DSH 支撑窗口不变。
dsh-vibe-math 2.8.0 — Release Notes
Previous release: 2.7.3. This is a feature release: all four presets now ship explicit guidance for "no LaTeX engine was detected", and the explicit-engine semantics were corrected (v4/v5 used to silently fall back to a different engine). Parameter names and defaults and the directory layout are unchanged, the data format is additive only, the DSH support window is unchanged, and no migration is needed.
Overview
- An explicit
paperLatexCommandnow means "use only this": if it cannot be resolved the run degrades as "not detected" instead of quietly switching engines. All four presets and the documentation now agree. - The named warning for a missing engine is actionable: it says PATH and the documented common TeX roots were probed, and how to pin an absolute path.
- The four presets tell the agent the four steps (bounded probe → write the absolute path into
paperLatexCommandand re-detect → ask the user once → otherwise degrade as before) and the three hard boundaries (never auto-install, never write outside the workspace, never treat "not detected" as a failure). - Paper metadata records
triedPaths: which paths this detection actually probed (on success and on failure). - A "host refused to interrupt" failure now carries an executable next step and is covered by a regression guard.
- People who run the test suites themselves get a steadier gate: lower default concurrency, stale test scratch directories swept at start-up, the roomier drive preferred for temp files, and a read-only warning when a leftover process is suspected.
- Repository line endings are unified on LF: from this version on, the npm package is byte-reproducible against the tag.
Added
- The paper compile metadata (
paper.meta.json,compilesection) gainstriedPaths(array of strings: the union of candidate paths probed during this detection). - All four presets gained a "missing engine guidance" block in their prompts (one canonical text, byte-identical across presets). v5 injects it as
paperHintBlock(lang). - The interrupt tool's failure response gains
next: { kind: 'reason', tool: 'vibe_math_abort', hint }, matching the other failure diagnostics. - A shipped test utility,
scripts/clean-temp.mjs: lists suspected leftover processes (--ps, read-only) and sweeps stale test scratch directories (--dry-run/--age-hours=N).
Changed
- Explicit-engine semantics unified: a non-empty
paperLatexCommandis used alone; if it cannot be resolved thencompile.status = 'not-detected'and onlypaper.texandpaper.mdare delivered. v4/v5 used to append that command to the candidate list and fall back to another engine when it was unusable; they now match v2/v3 and the existing wording ofdocs/final-paper.md. - Wording of the missing-engine warning: "未检测到 LaTeX 引擎(…):只产出 tex+md…已探测 PATH 与文档化的常见 TeX 根;可用
paperLatexCommand指定绝对路径。" - Test-gate defaults (affects only people running the suites): default concurrency
min(4, cpus)→min(2, cpus); at start-up, scratch directories older than 6 hours whose name prefix comes from the suites themselves are swept; the temp root prefersD:\_tmp(falling back without error when unavailable); a suspected leftover process produces a read-only warning and is never terminated automatically. Override with--concurrency=N,--no-temp-hygiene,--temp-dry-run. - The repository gained
.gitattributes: text files are always LF (binaries marked explicitly). Previously the working tree mixed CRLF and LF whilenpm packreads the working tree, so the package could contain CRLF.
Fixed
- Symptom: setting
paperLatexCommandto a non-existent path still produced a PDF compiled by another engine on the system (users believed the pinned engine was used). It now degrades as "not detected" with an actionable warning. Guards:tests/v4-final-paper.test.mjs,tests/e2e-v5-round2.test.mjs. - Symptom: when no engine was detected, the run only said "not detected" and the user could not tell where it had looked.
triedPathsnow records the paths actually probed and the warning states the scope. Guards:tests/v2-fix-probes.test.mjs,tests/v3-fix-probes.test.mjs,tests/v4-final-paper.test.mjs,tests/e2e-v5-round2.test.mjs. - Symptom: the "missing engine" guidance was absent or inconsistent across the four presets. All four now carry the same canonical text, with a byte-identity check. Guard:
tests/audit-prompt-invariants.mjs(invariant I15). - Regression coverage strengthened (behaviour unchanged): the "host refused to interrupt" failure path is now guarded (
VIBE_MATH_INTERRUPT_FAILED+next.tool = 'vibe_math_abort'). Guards:tests/v2v3-interrupt.mutants.mjsplus the corresponding assertions in the two math suites. - Test-infrastructure fix: a suite killed by a timeout cannot clean up after itself, so scratch directories accumulated for weeks (measured: 240k entries at the temp root). The gate now sweeps stale ones at start-up. Guards:
scripts/clean-temp.mjs --self-test,tests/temp-hygiene.mutants.mjs. - Test-timing fix: a few suites ended before the event they assert on when the gate ran jobs in parallel (green standalone, intermittently red in the gate). Those loops now stop on a wall-clock deadline, wait windows have a floor, and per-suite budgets are set from measurements. Guards:
tests/run-tests.mutants.mjs(5/5) and the suites' own assertions.
Compatibility & Migration
- Breaking changes: none. Parameter names and defaults and the directory layout are unchanged;
triedPathsis additive and olderpaper.meta.jsonfiles remain readable. - Behaviour to note: if you previously pointed
paperLatexCommandat a value that does not resolve and relied on the fallback to a working engine, this version degrades as "not detected" instead. That is the correction that matchesdocs/final-paper.md. Leave the parameter empty to get automatic detection. - Migration: none needed.
- The DSH support window...
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 (a...
dsh-vibe-math 2.7.2
dsh-vibe-math 2.7.2 — 发布说明
上一版本:2.7.1。本版是补丁版:只包含修复与附加(新增)响应字段,不改变任何既有行为契约——把真实引擎环境下的发现、证据与诊断补齐:装了但不在 PATH 的引擎能被发现、安装建议不再给出本机跑不了的命令、失败证据(超时/缺包/未校验约束)不再缺失或静默、归档身份与名册口径可直接核对。四套预设的参数默认值、数据格式与目录结构未变,DSH 支撑窗口不变,无需迁移。
概述
- 真实引擎发现更可靠:引擎发现顺序为 PATH → 宿主自带运行时 → 各操作系统的已知安装目录,因此在默认目录安装、但没有加进 PATH 的引擎(例如 R)也能被发现。
- 不再给出跑不了的安装命令:
MATH_ENGINE_NOT_FOUND只在本机的包管理器确实存在时才给出可执行命令,否则给出建议命令与官方地址,并说明原因。 probe不再"报喜不报忧":除了可用引擎,还会列出已配置但本机未发现的引擎及原因。- 失败证据完整:
MATH_TIMEOUT与MATH_NONZERO_EXIT携带同样的证据字段,超时的部分输出在响应与回执里都能拿到。 - 约束口径明说:版本约束只按存在性检查、从不校验,未校验的约束会被逐条列出,不再静默忽略。
- 归档身份可核对:运行响应直接给出归档 id 与 attempt;"编辑归档脚本后重跑"的语义有显式字段与警告解释。
- 名册口径统一(v4/v5):一次验证/会议冻结一份名册快照并记录版本号,所有视图读同一份数据;成员变化时版本号递增,读到的集合是否过期一目了然。
- 诊断更具体:成员级调用失败时给出错误码、当前状态与下一步建议(而不是一句"不存在")。
新增
math_computation的run响应新增runId与attempt(此前归档 id 只存在于回执里,调用方无法直接核对"是不是同一个归档")。probe响应新增configured(配置启用的引擎全集)与absent[]:每个未发现的引擎带why(not-found-on-this-machine或needs-a-caller-supplied-command)。- 新增约束口径字段:成功响应与"缺包"失败都带
versionPolicy与constraintsNotEnforced(本次未校验的约束逐条列出;没有约束时为空数组)。 MATH_TIMEOUT响应新增stdout/stderr(按上限截断);回执 JSON 新增partialStdout/partialStderr。MATH_ENGINE_NOT_FOUND的next新增suggestedCommand、packageManager、packageManagerAvailable、note(vendorUrl视引擎而定)。run响应新增fileIsArchivedScript,并在mode:'file'指向归档脚本时给出ARCHIVED_SCRIPT_RERUN警告。- v4:
status()新增rosterVersion与frozenParticipants;consensus/meeting/verify视图带各自的rosterVersion。 - v4:
paper视图新增dirProjected/dirSource/readSideEffect,明确该路径是投影还是真实状态。 - v2/v3:决策与子代理中断诊断新增
code与next(例如VIBE_MATH_DECISION_NOT_FOUND,并说明队列现状);v4 的成员级调用新增V4_NO_SUCH_RESIDENT(带当前编制与下一步建议)。
变更
- 引擎发现顺序:PATH → 宿主自带运行时 → 已知的每操作系统安装目录(Windows 的
%ProgramFiles%/%ProgramFiles(x86)%/%LOCALAPPDATA%\Programs,macOS 的 framework 路径,Linux 的/usr/lib/R、/opt/R等)。存在性一律靠列目录证明,从不假设路径存在。 - 安装建议:只有在本机能解析出对应包管理器时,
next.command才是可执行命令;否则为空,并给出note与官方地址。安装流程仍是"计划 →planToken确认 → 执行",作用域默认用户级。 - 归档 id 的键:
mode:'file'以源路径为键,mode:'code'/'expr'以脚本内容为键。因此编辑同一个源文件再跑会落到同一个归档(attempt ≥ 2、scriptChanged:true、previousReceipt指向上一次,且旧 attempt 绝不被覆盖);而指向另一个路径(例如上一份归档的副本)会写入新归档,此时attempt:1、scriptChanged:false、previousReceipt:null都是预期。归档 id 不含随机数。 - v4 名册冻结与修剪:验证/会议开始时冻结参与集合并记录
rosterVersion;移除成员会同时从冻结集合中剔除(否则在飞投票永远凑不齐),新增成员不进入已冻结集合,集合真正变化时rosterVersion递增。没有进行中的验证/会议时,status().frozenParticipants为显式null。 - v2/v3 票数与法定人数单一来源:每轮票数只由一个函数(
voteCount,读验证任务创建时记录的期望人数快照 + 轮次)给出,"是否够票、是否都报、共识、最终判定"四个读取点不再各自重算,因此调高/调低验证人数不会让各视图分叉。刻意保持不变:MIN_REVIEWERS下限与"全体一致"判据——正是这两条(而不是把判据简化成只看本轮)决定了什么时候能收束;把它们一起"简化"掉会让单审阅者的结论被过早采纳。 - 文档口径更新:计算工具的验证边界、已知差异与响应字段都写进了随包文档(含真机验证过的引擎版本与边界码)。
修复
- 装了却"看不见"的引擎:只扫描宿主进程 PATH 时,安装在默认目录但未加入 PATH 的引擎(实测:R 4.6.1)会被报成缺失;现在能从已知安装目录发现,并且版本探测与其他候选一致。
- 跑不了的安装命令:此前会给出本机并不存在的包管理器命令(例如
winget);现在只在管理器确实存在时给出命令,否则给出官方地址与说明。 - 超时证据不完整:
MATH_TIMEOUT之前缺少exit与stderr,部分输出只存在于磁盘上的stdout.txt;现在响应与回执都带截断后的部分输出,字段与MATH_NONZERO_EXIT对齐。 probe只报可用项:可用性一行此前可能只列出少数引擎而不解释其余配置项;现在点名"已配置但本机未发现"的引擎与原因。- 版本约束被静默忽略:现在明确说明"只按 base name 检查是否存在",并把本次未校验的约束逐条列出。
- 归档脚本"编辑后重跑"易被误读:新增显式字段与警告说明"指向归档副本 ⇒ 新归档、无历史"与"指向原源文件 ⇒ 同一归档 + 新的 attempt",并明确旧回执不能作为修改后代码的证据。
- v4
paper字段可能被误读:没有论文状态时该字段是投影路径;现在标注dirProjected/dirSource并声明读status无文件系统副作用。 - 成员可见材料的路径口径:四个预设的成员材料补齐说明——文件工具按会话 cwd 解析路径,列出的相对路径需拼项目根的绝对前缀;计算产物请用回执的绝对字段
receipt.scriptAbs,或把receipt.cwd与receipt.scriptPath拼起来。 - 成员级调用只回一句"不存在":v4 现在返回错误码、当前编制与下一步建议;v2/v3 的决策与中断诊断同样给出
code与next。
兼容性与迁移
- 破坏性变更:无。 四套预设的参数默认值、数据格式、目录结构均未改变。
- 纯新增:本版新增的响应字段都是附加的;遇到不认识的字段请忽略,不要据此报错。
- 迁移:无需迁移。
- DSH 支撑窗口与 2.7.1 相同(见
package.json的engines.dsh)。
已知限制
- Octave / Julia 未随包提供,在本次的验证机器上也未安装;相关模板与安装计划是静态校验过的,未经真机执行。
- 商业引擎(MATLAB / Maple / Wolfram)模板仍需在持证机器上确认,默认标记为
VERIFY。 - 版本约束只按存在性检查:具体版本求解仍由包管理器负责,本工具不解析约束。
- 插件无法强制禁网或限制写权限:
subprocess通道没有策略槽位,需要宿主侧沙箱。 - 2.7.0 之前的发布说明仅提供中文(英文历史索引见
README.en.md)。
验证方式
node tests/run-tests.mjs—— 全部通过(65 项:44 个套件 + 21 个灵敏度探针)。- 三个数学契约守卫:
tests/audit-math-computation-parity.mjs、-contract.mjs、-sensitivity.mjs。 - 真机验证(python 3.12.10 与 R 4.6.1):同一算式两边给出相同数值;原生路径与
cli逃生口数字一致且scriptHash相同;超时 →MATH_TIMEOUT,语法错误 →MATH_NONZERO_EXIT(带 stderr 与回执),缺包 →MATH_MISSING_PACKAGES(不写回执目录),引擎警告 → 正常退出并保留 stderr。
依赖
- 无新增运行时依赖;DSH 支撑窗口不变。
dsh-vibe-math 2.7.2 — Release Notes (English)
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
PATHis 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.
Overview
- More reliable discovery on real hosts: discovery now 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. - No more unrunnable install commands:
MATH_ENGINE_NOT_FOUNDonly 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. probeno longer reports only the good news: besides the engines that resolved, it names the configured but not found engines and why.- Complete failure evidence:
MATH_TIMEOUTcarries the same fields asMATH_NONZERO_EXIT, and a timeout's partial output is available in both the response and the receipt. - 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.
- 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.
- 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.
- More specific diagnostics: member-level failures return a code, the current state and a next step instead of a bare "no such resident".
Added
- The
math_computationrunresponse now carriesrunIdandattempt(previously the archive id existed only inside the receipt, so a caller could not verify "same archive"). - The
proberesponse now carriesconfigured(every engine enabled in the configuration) andabsent[], where each missing engine stateswhy(not-found-on-this-machineorneeds-a-caller-supplied-command). - Constraint policy fields: both a successful response and a "missing packages" failure carry
versionPolicyandconstraintsNotEnforced(the constraints that were not checked, or an empty array). MATH_TIMEOUTresponses carrystdout/stderr(capped); the receipt JSON carriespartialStdout/partialStderr.MATH_ENGINE_NOT_FOUND'snextcarriessuggestedCommand,packageManager,packageManagerAvailableandnote(plusvendorUrlwhere the engine has one).- The
runresponse carriesfileIsArchivedScript, and emits anARCHIVED_SCRIPT_RERUNwarning whenmode:'file'targets an archived script. - v4:
status()carriesrosterVersionandfrozenParticipants; theconsensus/meeting/verifyviews carry their ownrosterVersion. - v4: the
paperview carriesdirProjected/dirSource/readSideEffect, saying whether the path is a projection or real state. - v2/v3: decision and sub-agent interrupt diagnostics carry
codeandnext(for exampleVIBE_MATH_DECISION_NOT_FOUND, with the current queue state); v4 member-level calls carryV4_NO_SUCH_RESIDENTwith the current roster and a next step.
Changed
- 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. - Install guidance:
next.commandis an executable command only when the corresponding package manager resolves on this machine; otherwise it is empty and anoteplus the official location is given. Installation is still plan →planTokenconfirmation → execution, with user scope by default. - The archive key:
mode:'file'is keyed by the source path andmode:'code'/'expr'by the script content. Editing the same source file and re-running therefore lands on the same archive (attempt ≥ 2,scriptChanged:true,previousReceiptpointing 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, whereattempt:1,scriptChanged:falseandpreviousReceipt:nullare expected. The archive id contains no random value. - v4 roster freeze and prune: a verify/meeting freezes its participant set and records
rosterVersion; **removing a member also pr...
dsh-vibe-math 2.7.1
dsh-vibe-math 2.7.1 — 发布说明(中文)
上一版:2.7.0。本版是补丁版,两批改动一起发。第一批(诚实性与安装口径):替代方案若改变精确性或结论强度必须声明;python 安装按检测到的环境分派 conda/mamba/uv/pip;R/Octave/Julia 的系统级作用域拒绝给出每引擎理由;版本求解交给包管理器,本工具只查存在。第二批(首次真机端到端跑出来的七个缺陷):
probe回显请求的引擎、引擎发现新增 DSH 自带运行时、cli逃生口的包预检改用它自己那个解释器、mode:'code'真的把脚本传进去(调用方 argv 自带程序槽时以调用方为准)、版本报真值、探针 argv 不含 shell 元字符、探测不再依赖项目目录已存在。既有参数默认值、数据格式与目录结构未变,DSH 支撑窗口不变,无需迁移。
概览
- 替代必须声明:新规则行(中/英)说明"替代方案改变精确性/结论强度时必须写明",进入四套预设的两个 persona 文本块、规则段与工具描述;缺引擎/缺包时明确给替代方案或安装计划,安装一律
plan → planToken → confirm。 - python 包管理器分派:
conda/mamba(-y -c conda-forge)/uv(uv pip …)/ pip 回退(-m pip install --user);按解释器自身环境检测,不猜;歧义时回退 pip 并在计划/消息/审计里标明假设。 - 系统级作用域有理由:
system仍返回MATH_REFUSED+next.reason:'system-scope-unsupported',但消息现在说明每个引擎为什么(R→R_LIBS_USER、Octave→share/packages、Julia→JULIA_DEPOT_PATH,conda/mamba/uv 各自理由)。 - 版本约束口径:接受
名称/名称[extras]/名称<op>版本;其余写法显式拒绝(新 reasonunsupported-version-syntax)。版本求解是包管理器的事,本工具只按 base name 查存在、把规格原样透传。 - 随功能修掉一个真机缺陷:安装路径此前按引擎名解析解释器(
python)而不是候选顺序(python3→python→py),会让 conda 检测在真机上失效。
变更
1. 替代方案的诚实性
- 规则:当替代方案改变了精确性或结论强度时——精确符号解 → 数值近似、闭式解 → 采样/求积、改了精度/容差/假设、换了算法类——结论里必须写明,不得读起来像得到了原本(精确/所要求的)结果;拿不到精确结果就直说。
- 落点(中/英各一条常量):
MATH_SUBSTITUTION_RULE_LINE/MATH_SUBSTITUTION_RULE_LINE_EN,已并入MATH_RULE_LINES/_EN(因此mathAvailabilityLine()自动携带),工具描述也加了同义句;四套预设的两个 persona 文本块都逐字追加(追加,不替换既有规则行)。 - 缺引擎/缺包:仍然只报告,并明确给用户自装指引或代理代装计划;安装一律先出计划、再由
planToken确认(token 绑定计划内容,内容变了即失效),默认 user 作用域,system每次显式且不被记住。
2. Python 包管理器分派
python 的安装计划按解释器自身环境选择管理器,而不是固定 pip:
| 检测到的环境 | 计划里的命令 | 依据 |
|---|---|---|
解释器路径含 conda 标记(/envs/、/conda、/miniconda*、/anaconda*、/mambaforge、/miniforge)且 conda 可解析 |
conda install -y -c conda-forge <pkg>(卸载 conda remove -y <pkg>) |
路径标记 + 可解析确认 |
同上但只有 mamba |
mamba install -y -c conda-forge <pkg>(卸载 mamba remove -y <pkg>) |
同上 |
uv 与解释器同目录(uv 管理的 venv) |
uv pip install <pkg>(卸载 uv pip uninstall <pkg>) |
同目录才算 |
| 其它 | python -m pip install --user <pkg>(卸载 python -m pip uninstall -y <pkg>) |
文档化回退,计划标 managerAssumed |
- 检测,不猜:计划、返回消息与审计 JSON 都带
manager/managerAssumed/managerWhy;歧义时回退 pip 并明说"计划假设用 pip"。 - install 与 uninstall 成对:卸载命令来自同一个被选中的管理器(审计里带卸载模板;仍没有通用自动回滚)。
- 顺手修掉的真实缺陷:安装路径此前用引擎名(
python)解析解释器,而不是描述符的候选顺序(python3→python→py)——真机上 conda 的python3才是那个解释器,所以分派会看不到环境标记。现在与运行路径一致,按候选依次解析。
3. 每引擎系统级作用域策略
- R / Octave / Julia 只做用户级,
scope:'system'返回MATH_REFUSED+next.reason:'system-scope-unsupported',消息里给出该引擎的理由:- R:用户库是
R_LIBS_USER;系统级要写发行版包目录(需 root 或发行版包管理器)。 - Octave:
pkg install装进用户包目录;系统级要写 Octave 的share/packages(需 root)。 - Julia:
Pkg.add装进当前活动环境 / 用户 depot(JULIA_DEPOT_PATH);"系统级"不是 Julia 的概念。
- R:用户库是
- conda / mamba / uv 同样没有系统模板,各自带理由;python 走 pip 时仍保留真实的系统模板(不带
--user),由每次调用显式确认。
4. 版本约束口径
- 接受的写法:
名称、名称[extras]、名称<op>版本,其中<op>∈==>=<=~=!=><=(pip 风格的numpy==1.2、conda 风格的numpy=1.2)。 - 拒绝的写法:空格、
;、|、&、$、反引号、@、括号等 shell 危险或管理器不认识的语法 ⇒MATH_INVALID_ARGUMENT+next.reason:'unsupported-version-syntax'(不会把可疑字符串丢给 shell)。 - 分工:版本求解交给包管理器——本工具只按 base name 探测与报缺,安装计划把规格原样透传,并在计划里带
versionPolicy说明这一点。 - 词汇表:
unsupported-version-syntax是新增的机读 reason;词汇表现共 13 reason / 7next.kind/ 11 失败码,在tool-schema.json#refusalVocabulary、docs/math-computation.md§3 与 parity 守卫之间保持集合相等(守卫还要求每个reason:取值都是字符串字面量)。
5. 真机缺陷修复(一条根因、三个症状)
op:'probe'忽略请求的引擎:响应里engine是null(或"第一个允许的引擎"),失败路径总是指责params.mathEngines[0](python),于是probe{engine:'r'}回显 python 并让用户去装 python。现在解析并报告请求的引擎(名字/路径/版本);被请求且解析成功的引擎(包括cli)也算可用,请求的引擎缺失时错误与指引都指向它。- 引擎发现漏掉 DSH 自带的运行时:PATH 仍然优先;都没有时,若宿主声明了可选字段
runtimeRoots+listDirAbs,最后扫描<root>/dsh-runtimes/*/dependencies/<engine>/——树名通配(从不写死dsh-primary-runtime),且只接受描述符自己的候选名。找到的引擎会报真实版本,并且不再给安装指引(对已装的引擎给 winget 提示正是误导的来源)。 cli包预检忽略cli.command:通用cli描述符没有包探测,于是所有包看起来都缺、逃生口把自己堵死。现在按解析出的命令的族(python*/Rscript/octave/julia)用那个解释器探测;族不可识别时跳过预检并给出明确警告,而不是误报"缺包"。mode:'code'从不传脚本:cli只拿到命令,于是 python 掉进 REPL(exit=0、stdout 空——读起来像成功)。现在mode:'code'/'file'会把归档脚本路径追加到 argv;若调用方 argv 自带程序槽(-c/-m/-e/--eval/--command)则以调用方为准、不追加(否则脚本会被当成多余参数)。回执记录cli.scriptAppended,跳过时记录cli.scriptSkipped及原因。engine.version是"unknown":cli现在用族描述符的真实版本探测取版本(族不可识别时仍是"unknown")。- 探针 argv 含 shell 元字符:真实宿主对含
|(以及%)的 argv 会返回空 spawn。所有探针代码改为不含元字符(每包一行名称 ok|missing),解析器同时接受旧的名称:状态与新形态;python 仍是每包一个 argv 项。 - 根因:探测的 cwd 在全新工作区不存在。版本探测、包预检与许可探测用
projectRoot()作 cwd,而全新会话里该目录还不存在,宿主对这种 spawn 返回spawned:true, exit:null(重试无用:同 cwd 同结果)。这一条同时造成了"找到了却不可用"、误报"缺包"与version:"unknown"。现在探测走一定存在的 cwd(probeCwd:可选宿主字段 → OS 临时目录 → 项目根);真正的run仍用项目根——它本来就会先写回执,写盘会创建目录树。
6. 新增两条永久守卫
- §20 响应必须可 JSON 序列化:诊断对象曾出现自引用的
retryDiag,导致JSON.stringify(response)抛Converting circular structure to JSON,调用方看不到任何结果。现在诊断经jsonSafeDiag投影成纯字段,共享套件断言 13 种响应(probe/run/receipt/install,成功与失败,含重试后失败的retryDiag场景)都能序列化。 - §21 fresh-root 仿真:假 seam 模拟宿主("cwd 不存在 ⇒
exit:null",且writeText标记目录已创建),断言全新根上probe仍ok:true且版本是真值、没有任何探测报exit:null、包预检照常运行。
7. 审查与验证
- 同一套纪律:共享模块四份字节一致(
install-copies --check⇒COPIES OK);math-computation-shared278/0、四套预设 114/116/153/117、audit-math-computation-contract155/0、audit-math-computation-parity92/0、audit-math-computation-sensitivity22 探针 / 0 problems、变异证明 16 proved / 0 problems(每一个都把具名断言打红);门禁TOTAL 65 PASS 65 FAIL 0(44 套件 + 21 探针)。 - 真机证据(全新空工作区、第一个工具调用):
probe{engine:'python'}⇒ok:true、版本3.12.14、路径…/dsh-runtimes/dsh-primary-runtime/dependencies/python/python.exe、无exit:null;用cli+ 自带解释器run且packages:['numpy']⇒exit:0、stdout:"1.643935 -2.0"(k=1..1000 的 Σ1/k² 与 det([[1,2],[3,4]]))、packages.found.numpy:"present"、warnings:[]、回执 6 个文件。 - 仍然成立的诚实边界:引擎执行现在已通过
cli逃生口在 DSH 自带运行时上真机验证(这是本项目唯一被证明的真实引擎路径——内置引擎仍只通过假 subprocess seam 覆盖);session/follow的 token 级增量、多客户端与回合中cancel仍未验证;宿主subprocess.spawn没有 policy 槽,插件不能强制禁网/限权(需宿主 sandbox);Maple/MATLAB/Wolfram 的模板标VERIFY并提供mathEngineOverride;SageMath 属 P2;两个对照实验只是 run-book,本说明不含编造数字。
兼容性
- 既有参数默认值、数据格式与目录结构未变;新增的只是规则文本、安装计划的分派逻辑与一个机读 reason,无需迁移。
- 行为变化仅限安装计划:没有 conda/uv 标记的机器仍走 pip(与上一版一致);conda/mamba/uv 环境现在会得到该管理器的命令(这正是本版目的),卸载命令同样来自该管理器。
system作用域的返回码与next.reason未变(只是消息更有信息量);python+pip 的系统模板仍在。
升级
- 直接升级即可,无需迁移。
- 若希望安装计划总是用 pip:在非 conda/uv 的解释器上运行(或指向系统 python);本工具不会"猜"管理器,只在解释器自身环境给出标记时才分派。
- 七个真机缺陷全部修复(都来自首次真机端到端,且都在同一份字节上关闭):
probe对任何请求引擎都回显python;DSH 自带运行时发现不到;cli包预检忽略cli.command;mode:'code'从不传脚本;engine.version是"unknown";探针 argv 含|/%(真实宿主会以空 spawn 回应);探测用的 cwd 在全新工作区还不存在——这一条是"找到了却不可用"和"误报缺包"的共同根因。 - 新增两条永久守卫:§20 13 种响应必须可 JSON 序列化的横切不变量;§21 fresh-root 仿真(cwd 不存在时宿主返回
exit:null)。
dsh-vibe-math 2.7.0
dsh-vibe-math 2.7.0 — 发布说明(中文)
上一版:2.6.0。本版新增两块能力:Lean 增量形式化(异步编译 +
import复用) 与
math_computation数学计算工具(四套预设共享同一实现)。既有参数默认值、数据格式与目录结构
未变(只是新增参数与目录),DSH 支撑窗口不变,无需迁移。
概览
- Lean 增量形式化:
leanAsync(默认true)把编译放后台队列,入队即返回;新增并发上限
leanJobsMaxParallel(默认1)、日常主动性leanInitiative(off|normal|eager,默认normal)
与额外搜索路径leanSearchPaths(默认[])。新增只读工具lean_read/lean_job,
作业镜像写Formal/Jobs/<jobId>.json。 math_computation(新工具):先用op:'probe'预检引擎/包/许可,再op:'run'计算,
每次执行都归档成可复核回执;op:'install'走"计划 → 确认"两段式,op:'receipt'只读复核。- 引擎:
python/r/octave/julia/matlab/maple/wolfram/cli。
商业三家只探测与查许可,永不代装;cli默认开启(两个文档化的关闭路径)。 - 归档→编辑→重跑:回执带
scriptPath/scriptHash;改动脚本后必须用mode:'file'重跑,
旧回执对修改后的代码无效(scriptChanged/scriptChangedDuringRun显式告警)。 - 六个新参数:
mathComputation/mathMode/mathEngines/mathTimeoutMs/mathPackages/
mathInstallScope(README 双语参数表与docs/math-computation.md为准)。 - 本版经过四轮独立审查 + 冻结提交上的真机打包/启动认证;门禁
TOTAL 65 PASS 65 FAIL 0
(44 套件 + 21 探针)。
变更
1. Lean 增量形式化 + 异步编译 + import 复用
- 新参数(四套一致,默认值即"安全且不改变既有行为"):
leanAsync:默认true。true= 编译进每会话后台队列,入队即返回;false= 同步await(旧语义)。leanJobsMaxParallel:默认1(串行)。后台编译的并发上限。leanInitiative:off | normal | eager,默认normal。日常流程中的形式化主动性。leanSearchPaths:默认[]。额外的--search-path根;非空时先注入它们,再注入自动根。
- 队列状态机:作业有明确的状态迁移;只有
settled(ok)才算 passed——"入队成功/正在编译"
一律不计入通过,也不会被当成已证。 import复用:编译命令自动注入--search-path <VibeMath 根>,因此
import Formal.Lib.<name>与Formal.Proved.<name>可以直接工作(跨项目复用已归档的定义/引理)。- 新只读工具:
lean_read(读归档/库内容)与lean_job(查作业状态),都是只读,不会触发编译。 - 作业镜像:每个作业在
Formal/Jobs/<jobId>.json留一份镜像,进程重启后可恢复或显式中断。 - 诚实说明:
leanInitiative与formalVerify是两条独立的轴。
formalVerify:'off'关闭的是验证阶段,不会吞掉主动性轴:
off + normal⇒ 一个字都不提 Lean;off + eager⇒ 只出现日线(主动性提示),验证段仍然关闭。
2. 新工具 math_computation
- 六个冻结参数(名字不可改;四套、README 双语表、契约文档拼写一致):
参数 默认 说明 mathComputationautooff(真 no-op)/auto(探测到才工作)/onmathModetyped+shell提示词策略: typed不提 shell 且禁用engine:'cli'mathEngines[python,r,octave,julia,matlab,maple,wolfram,cli]允许/探测顺序;去掉 cli即关闭逃生口mathTimeoutMs60000单次上限(最小 1000);超时主动终止进程 mathPackages[]默认要求的包;缺包只报告 + 给计划,不自动装 mathInstallScopeuser安装作用域; system必须每次显式指定、不被记住 op:probe(预检引擎/版本/包/许可)、run(mode: code|file|expr)、receipt(只读复核)、
install(两段式安装)。- 失败码(11 个,冻结):
MATH_NOT_AVAILABLE、MATH_ENGINE_NOT_FOUND、MATH_ENGINE_LICENSE_REQUIRED、
MATH_ENGINE_UNUSABLE、MATH_MISSING_PACKAGES、MATH_TIMEOUT、MATH_NONZERO_EXIT、
MATH_ENGINE_BAD_ARGV、MATH_REFUSED、MATH_INVALID_ARGUMENT、MATH_NO_SUBPROCESS;
每个都带机读next(user-install/agent-install/vendor/enable/engine-override/
reason/note)。 - 确定性回执:
runId只由"预设 + 项目 + 引擎 + 模式 + 键 + 排序后的包"决定,不含墙钟;
argv在回执与返回体里双回显(可照抄复跑);stdout/stderr全量落盘、返回体截 64KB。 - 引擎:
python/r/octave/julia为自由引擎;matlab/maple/wolfram为商业——
只做探测与许可检查,永不代装(只给厂商指引);cli用你指定的命令执行,仍受本工具的超时、
输出上限、cwd 与回执约束。 - 两条安装路径:① 用户自装(逐 OS 命令 + 官方链接);② 代理代装
plan → planToken → confirm
(token 绑定计划内容,内容变了即失效)。默认 user 作用域,system每次都要显式确认;
每次执行写审计Computation/installs/<planToken>.json(含确切命令、退出码、before/after
与卸载命令模板)。包安装没有通用回滚——工具保证的是"命令与版本可核验 + 卸载模板",
不做自动回滚。 cli默认开启(它不比模型本来就有的宿主 shell 更大,但多了回执与上限);两个关闭路径:
mathMode:'typed',或把'cli'从mathEngines移除——两者都返回MATH_REFUSED。- 归档→编辑→重跑(完整性保证):
- 返回体与回执都带
scriptPath/scriptHash;脚本原件可以打开/编辑; - 编辑后用
mode:'file'重跑 ⇒ 新回执(新 attempt、新哈希);旧回执不代表修改后的代码; scriptChanged(与上一份回执的哈希不一致)、scriptChangedDuringRun(运行期间被改动)都会
显式告警并写进回执;- 归档是追加式的(
Computation/<id>/,第 n≥2 次进attempts/<n>/),已有文件永不覆盖; - 保留上限(20 attempt / 200 run)只告警、永不自动删除;手改状态文件里的未知参数键会被
报告(diagnostics),不静默丢弃。
- 返回体与回执都带
3. 诚实边界(务必读)
- 引擎执行只用假 subprocess seam 验证:本机没有跑过真实的 python/R/octave/julia/matlab/
maple/wolfram;真机验证需要一台装有这些引擎的机器(模板、许可探测与安装计划的静态面已被守卫冻结)。 - 插件不能强制禁网/限权:宿主
subprocess.spawn没有 policy 槽(env层只做凭据/DSH_*
清洗,不能限制网络或写盘);真强制需要宿主 sandbox 支持,列为待上游需求。 - 商业模板标
VERIFY:Maple(尤甚)、MATLAB、Wolfram 的 CLI 模板随版本变化,描述符带VERIFY
标记;每次运行都回显实际 argv,用法/选项错会返回MATH_ENGINE_BAD_ARGV并提示用
mathEngineOverride覆盖模板(而不是裸MATH_NONZERO_EXIT)。有许可的机器应自行验证这三个模板。 - SageMath 属于 P2:本版只有描述符占位,不接入。
- 两个对照实验以 run-book 形式给出(同步 vs 异步编译;不使用 vs 使用
import复用):
本说明不含任何编造的实测数字,也不声称已完成真实 Lean 语料的对比。
4. 审查与验证
本版经过 四轮独立审查(对抗性再证伪、交叉审计、用户上手路径、新视角复审),
并在冻结提交上完成真机打包/启动认证;门禁为 TOTAL 65 PASS 65 FAIL 0
(44 套件 + 21 探针),另有 22 个模块级变异探针要求"具名断言变红"。
兼容性
- 既有参数默认值、数据格式与目录结构未变;新增参数都取"不改变既有行为"的默认值
(leanAsync=true只是把编译改为后台队列,leanInitiative='normal'保持原有主动性)。 - 新增目录
Computation/与Formal/Jobs/;宿主的文本写会自动创建缺失的父目录,
无需预先手工建目录。 - DSH 支撑窗口不变(
>=0.1.7的 patch 行 +<=0.1.6的目录行两条安装线都随包发布共享模块)。
升级
- 直接升级即可,无需迁移:没有改名的参数、没有改格式的状态文件。
- 想关闭新能力:
mathComputation:'off'(真 no-op)、leanAsync:false(回到同步编译)、
leanInitiative:'off'(不主动形式化)。