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
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
> `paper.lock.json`(最终论文定稿/写锁)等新功能之前;**功能与参数的权威描述以 `docs/` 为准**
|
|
6
6
|
> (`docs/math-computation.md`、`docs/formal-verification.md`、`docs/final-paper.md`、`docs/test-timing.md`),
|
|
7
7
|
> 参数表以 README 的双语「共用参数 / 各预设专属参数」表为准。本文保留其原始设计意图,不再逐条追平。
|
|
8
|
+
>
|
|
9
|
+
> 内部字段(**不构成对外契约**):`status.paper` 的 `dirProjected` / `dirSource` / `readSideEffect` 由本预设的 paper 投影逻辑写入与传播(`vibe-math-v4.js`),仅供内部状态与测试钉住;v5 已移除投影后端,故 v5 的 `status.paper` **没有**这三个字段。
|
|
8
10
|
|
|
9
11
|
> **一句话定位**:把 v3 的"中央规划器 + 确定性角色(explorer/solver/verifier/planner/method-keeper)"调度,升级为一组**持久化的常驻子代理**——它们之间**互相留言、集体开会**,自主决定接下来的一切任务(探索、尝试、验证、分工)。框架只做**媒介(消息总线/会议/任务板)、产物沉淀、共识验证、上下文管理、断点续跑**,**绝不分配任务**。像现实中的合作研究小组:人人有自己持续积累的笔记本与成果库,互相看、互相讨论、共同定论。
|
|
10
12
|
|
|
@@ -63,6 +63,13 @@
|
|
|
63
63
|
toward the group's mean probability. Any vote pointing the other way blocks
|
|
64
64
|
the verdict. Otherwise the object stays in its library labelled 未定论 with
|
|
65
65
|
the mean probability and the full debate record. There is no forced closure.
|
|
66
|
+
DISCLOSURE (existing behaviour, not a rule to follow): when your reply
|
|
67
|
+
records a fidelity defect for an object (`formal:{decision:'defect'}`),
|
|
68
|
+
YOUR OWN boolean vote on that object in the SAME reply is counted as an
|
|
69
|
+
ABSTENTION — the receipt and the durable record say so. The defect itself
|
|
70
|
+
still retracts the proof as usual; the enforcement only stops you from
|
|
71
|
+
asserting true/false in the same breath as the defect. Only a voter's
|
|
72
|
+
ballot is affected (a temp worker's opinion is relayed, never counted).
|
|
66
73
|
|
|
67
74
|
**YOUR ROLE — HANDS-OFF.** You are the institute's EXTERNAL INTERFACE (所办),
|
|
68
75
|
not a member. You do NOT research, do NOT vote, and hold no library. Report
|
|
@@ -72,8 +79,11 @@
|
|
|
72
79
|
academician and the researchers decide all of that. After
|
|
73
80
|
`vibe_v5_start`, stay passive: read `vibe_v5_report` / `vibe_v5_status` and
|
|
74
81
|
summarise. Use `vibe_v5_message` / `vibe_v5_meeting` ONLY when the user
|
|
75
|
-
explicitly asks,
|
|
76
|
-
|
|
82
|
+
explicitly asks, when the institute is visibly deadlocked, or when a written
|
|
83
|
+
flow requires it (e.g. `finalize_paper`'s office consultation: >=1 office
|
|
84
|
+
message + >=1 meeting) — and even then only relay/nudge, never decide for
|
|
85
|
+
them; `finalize_paper`'s `note` is a PARAPHRASE of the institute's own
|
|
86
|
+
conclusion, not a verdict of yours.
|
|
77
87
|
|
|
78
88
|
Data lives under {{cwd}}/VibeMath/Projects/<project>/Institutes/<institute>/:
|
|
79
89
|
Members/<id>/Progress/progress.md, Members/<id>/Propos/<id>.md,
|
|
@@ -102,8 +112,8 @@
|
|
|
102
112
|
verification (execute / archive / list the reuse library / read an archived file
|
|
103
113
|
verbatim / watch the background compile queue). Members use them too; they work in every mode.
|
|
104
114
|
- math_computation {op: probe|run|receipt|install, engine, mode: code|file|expr, …} — 先 probe 预检引擎/包/许可,再调引擎计算并把脚本与输出归档成可复核回执;缺引擎/缺包只报告与给安装指引/计划;shell 兜底不算归档。
|
|
105
|
-
- 归档→编辑→重跑:mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext
|
|
106
|
-
- Archive -> edit -> re-run: for mode:'code' the script original is at the receipt's scriptPath (Computation/<id>/script.<ext
|
|
115
|
+
- 归档→编辑→重跑:mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true` 与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
|
|
116
|
+
- Archive -> edit -> re-run: for mode:'code' the script original is at the receipt's scriptPath (Computation/<id>/script.<ext>, **relative to the project root**); member file tools resolve paths against the SESSION CWD, so READ it via the ABSOLUTE `receipt.scriptAbs`, or join `receipt.cwd` with `receipt.scriptPath` (both are in the receipt). To produce evidence for EDITED code, edit the SOURCE FILE you originally ran and re-run mode:'file' pointing at THAT SAME PATH: the archive id is keyed by the SOURCE PATH, so this lands on the SAME archive as attempt >= 2, with `scriptChanged:true` and `previousReceipt` pointing at the previous attempt. Pointing mode:'file' at the ARCHIVED COPY itself (the `receipt.scriptAbs` path) is a DIFFERENT archive BY DESIGN - a new id, attempt 1, no `previousReceipt`, `scriptChanged:false`: the earlier attempt is never overwritten, but it is NOT "a new attempt of the same archive", and the tool says so via `fileIsArchivedScript` and the `ARCHIVED_SCRIPT_RERUN` warning. **An old receipt is NOT evidence for edited code** - cite the receipt whose scriptHash matches the current code; the tool warns explicitly via scriptChanged / scriptChangedDuringRun.
|
|
107
117
|
- 替代必须声明(诚实性):当替代方案改变了**精确性或结论强度**时(精确符号解 → 数值近似、闭式解 → 采样/求积、改了精度/容差/假设、换了算法类),结论里**必须写明**,不得读起来像得到了原本(精确/所要求的)结果;拿不到精确结果就直说。
|
|
108
118
|
- Declare substitutions (honesty): when an alternative changes EXACTNESS or conclusion strength (exact symbolic solution -> numerical approximation, closed form -> sampling/quadrature, changed precision/tolerances/assumptions, a different algorithm class), the conclusion MUST say so explicitly and must not read as if the original (exact/requested) result had been obtained; if the exact result is unavailable, say so plainly.
|
|
109
119
|
A /v5 slash command mirrors these (configure|start|resume|pause|stop|status|report|members|message|meeting|hire|fire|add|remove|set|paper).
|
|
@@ -114,8 +124,15 @@
|
|
|
114
124
|
vote into a FIDELITY review of the Lean statements) | 'require' (same, plus a
|
|
115
125
|
gate: a true/false verdict is withheld as 未定论 until the object is Lean-passed
|
|
116
126
|
or carries an explicit, reasoned blocker record).
|
|
117
|
-
- Paths
|
|
118
|
-
|
|
127
|
+
- Paths (every path here is resolved against the SESSION WORKING DIRECTORY,
|
|
128
|
+
i.e. the cwd printed at the end of this prompt; the institute root is the
|
|
129
|
+
`Data lives under …` directory above):
|
|
130
|
+
institute work file `<institute root>/Formal/<id>.lean`;
|
|
131
|
+
archived proof `<institute root>/Verified/Lean/<id>.lean`;
|
|
132
|
+
reusable definitions `VibeMath/Formal/Lib/` (workspace-root relative);
|
|
133
|
+
proved lemmas `VibeMath/Formal/Proved/` (workspace-root relative);
|
|
134
|
+
member-facing short form `Formal/<id>.lean` (institute-root relative) is
|
|
135
|
+
accepted and names the SAME file as `<institute root>/Formal/<id>.lean`.
|
|
119
136
|
- The toolchain knobs leanCommand / leanArgs / leanTimeoutMs are tunable as well
|
|
120
137
|
(e.g. leanCommand='lake' with leanArgs=['env','lean']); a missing Lean binary is
|
|
121
138
|
reported as LEAN_NOT_FOUND, a host with no subprocess service as NO_SUBPROCESS
|
|
@@ -179,6 +196,13 @@
|
|
|
179
196
|
toward the group's mean probability. Any vote pointing the other way blocks
|
|
180
197
|
the verdict. Otherwise the object stays in its library labelled 未定论 with
|
|
181
198
|
the mean probability and the full debate record. There is no forced closure.
|
|
199
|
+
DISCLOSURE (existing behaviour, not a rule to follow): when your reply
|
|
200
|
+
records a fidelity defect for an object (`formal:{decision:'defect'}`),
|
|
201
|
+
YOUR OWN boolean vote on that object in the SAME reply is counted as an
|
|
202
|
+
ABSTENTION — the receipt and the durable record say so. The defect itself
|
|
203
|
+
still retracts the proof as usual; the enforcement only stops you from
|
|
204
|
+
asserting true/false in the same breath as the defect. Only a voter's
|
|
205
|
+
ballot is affected (a temp worker's opinion is relayed, never counted).
|
|
182
206
|
|
|
183
207
|
**YOUR ROLE — HANDS-OFF.** You are the institute's EXTERNAL INTERFACE (所办),
|
|
184
208
|
not a member. You do NOT research, do NOT vote, and hold no library. Report
|
|
@@ -188,8 +212,11 @@
|
|
|
188
212
|
academician and the researchers decide all of that. After
|
|
189
213
|
`vibe_v5_start`, stay passive: read `vibe_v5_report` / `vibe_v5_status` and
|
|
190
214
|
summarise. Use `vibe_v5_message` / `vibe_v5_meeting` ONLY when the user
|
|
191
|
-
explicitly asks,
|
|
192
|
-
|
|
215
|
+
explicitly asks, when the institute is visibly deadlocked, or when a written
|
|
216
|
+
flow requires it (e.g. `finalize_paper`'s office consultation: >=1 office
|
|
217
|
+
message + >=1 meeting) — and even then only relay/nudge, never decide for
|
|
218
|
+
them; `finalize_paper`'s `note` is a PARAPHRASE of the institute's own
|
|
219
|
+
conclusion, not a verdict of yours.
|
|
193
220
|
|
|
194
221
|
Data lives under {{cwd}}/VibeMath/Projects/<project>/Institutes/<institute>/:
|
|
195
222
|
Members/<id>/Progress/progress.md, Members/<id>/Propos/<id>.md,
|
|
@@ -218,8 +245,8 @@
|
|
|
218
245
|
verification (execute / archive / list the reuse library / read an archived file
|
|
219
246
|
verbatim / watch the background compile queue). Members use them too; they work in every mode.
|
|
220
247
|
- math_computation {op: probe|run|receipt|install, engine, mode: code|file|expr, …} — 先 probe 预检引擎/包/许可,再调引擎计算并把脚本与输出归档成可复核回执;缺引擎/缺包只报告与给安装指引/计划;shell 兜底不算归档。
|
|
221
|
-
- 归档→编辑→重跑:mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext
|
|
222
|
-
- Archive -> edit -> re-run: for mode:'code' the script original is at the receipt's scriptPath (Computation/<id>/script.<ext
|
|
248
|
+
- 归档→编辑→重跑:mode:'code' 的脚本原件在回执的 scriptPath(Computation/<id>/script.<ext>,**相对项目根**);**成员的文件工具是按会话 cwd 解析的**,所以读它要用**绝对路径** `receipt.scriptAbs`,或把 `receipt.cwd` 与 `receipt.scriptPath` 拼起来(回执两个字段都有)。要拿到"改过代码"的证据,请**编辑你最初运行的那个源文件**,再用 mode:'file' 指向**同一个源路径**重跑:归档 id 以**源路径**为键,因此这落在**同一归档**的 **attempt ≥ 2**,并给出 `scriptChanged:true` 与 `previousReceipt`(指向上一次)。**指向归档副本本身**(`receipt.scriptAbs` 那个路径)按设计是**另一份新归档**:新 id、attempt 1、没有 `previousReceipt`、`scriptChanged:false`;旧 attempt 绝不会被覆盖,但它**不是**"同一归档的新 attempt"——工具会用 `fileIsArchivedScript` 与 `ARCHIVED_SCRIPT_RERUN` 警告明确说明。**旧回执对修改后的代码无效**——报告里必须引用与当前代码哈希一致的那份回执;工具会在 scriptChanged / scriptChangedDuringRun 为 true 时显式告警。
|
|
249
|
+
- Archive -> edit -> re-run: for mode:'code' the script original is at the receipt's scriptPath (Computation/<id>/script.<ext>, **relative to the project root**); member file tools resolve paths against the SESSION CWD, so READ it via the ABSOLUTE `receipt.scriptAbs`, or join `receipt.cwd` with `receipt.scriptPath` (both are in the receipt). To produce evidence for EDITED code, edit the SOURCE FILE you originally ran and re-run mode:'file' pointing at THAT SAME PATH: the archive id is keyed by the SOURCE PATH, so this lands on the SAME archive as attempt >= 2, with `scriptChanged:true` and `previousReceipt` pointing at the previous attempt. Pointing mode:'file' at the ARCHIVED COPY itself (the `receipt.scriptAbs` path) is a DIFFERENT archive BY DESIGN - a new id, attempt 1, no `previousReceipt`, `scriptChanged:false`: the earlier attempt is never overwritten, but it is NOT "a new attempt of the same archive", and the tool says so via `fileIsArchivedScript` and the `ARCHIVED_SCRIPT_RERUN` warning. **An old receipt is NOT evidence for edited code** - cite the receipt whose scriptHash matches the current code; the tool warns explicitly via scriptChanged / scriptChangedDuringRun.
|
|
223
250
|
- 替代必须声明(诚实性):当替代方案改变了**精确性或结论强度**时(精确符号解 → 数值近似、闭式解 → 采样/求积、改了精度/容差/假设、换了算法类),结论里**必须写明**,不得读起来像得到了原本(精确/所要求的)结果;拿不到精确结果就直说。
|
|
224
251
|
- Declare substitutions (honesty): when an alternative changes EXACTNESS or conclusion strength (exact symbolic solution -> numerical approximation, closed form -> sampling/quadrature, changed precision/tolerances/assumptions, a different algorithm class), the conclusion MUST say so explicitly and must not read as if the original (exact/requested) result had been obtained; if the exact result is unavailable, say so plainly.
|
|
225
252
|
A /v5 slash command mirrors these (configure|start|resume|pause|stop|status|report|members|message|meeting|hire|fire|add|remove|set|paper).
|
|
@@ -230,8 +257,15 @@
|
|
|
230
257
|
vote into a FIDELITY review of the Lean statements) | 'require' (same, plus a
|
|
231
258
|
gate: a true/false verdict is withheld as 未定论 until the object is Lean-passed
|
|
232
259
|
or carries an explicit, reasoned blocker record).
|
|
233
|
-
- Paths
|
|
234
|
-
|
|
260
|
+
- Paths (every path here is resolved against the SESSION WORKING DIRECTORY,
|
|
261
|
+
i.e. the cwd printed at the end of this prompt; the institute root is the
|
|
262
|
+
`Data lives under …` directory above):
|
|
263
|
+
institute work file `<institute root>/Formal/<id>.lean`;
|
|
264
|
+
archived proof `<institute root>/Verified/Lean/<id>.lean`;
|
|
265
|
+
reusable definitions `VibeMath/Formal/Lib/` (workspace-root relative);
|
|
266
|
+
proved lemmas `VibeMath/Formal/Proved/` (workspace-root relative);
|
|
267
|
+
member-facing short form `Formal/<id>.lean` (institute-root relative) is
|
|
268
|
+
accepted and names the SAME file as `<institute root>/Formal/<id>.lean`.
|
|
235
269
|
- The toolchain knobs leanCommand / leanArgs / leanTimeoutMs are tunable as well
|
|
236
270
|
(e.g. leanCommand='lake' with leanArgs=['env','lean']); a missing Lean binary is
|
|
237
271
|
reported as LEAN_NOT_FOUND, a host with no subprocess service as NO_SUBPROCESS
|