dsh-vibe-math 2.3.2 → 2.3.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/AUDIT-CHECKLIST.md +14 -0
- package/README.md +2 -2
- package/RELEASE-NOTES-2.3.3.md +115 -0
- package/audit-prompt-invariants.mjs +51 -6
- package/audit-spec-traceability.mjs +20 -0
- package/docs/formal-verification.md +4 -3
- package/docs/test-timing.md +5 -5
- package/formal-verify-v2.test.mjs +46 -0
- package/formal-verify-v3.test.mjs +54 -0
- package/formal-verify-v4.test.mjs +21 -0
- package/formal-verify-v5.test.mjs +23 -0
- package/package.json +3 -2
- package/prompt-corpus-v2/formal-verify-v2.json +30 -0
- package/prompt-corpus-v2/formal-verify-v2.md +341 -0
- package/prompt-corpus-v3/formal-verify-v3.json +36 -0
- package/prompt-corpus-v3/formal-verify-v3.md +404 -0
- package/vibe-math-v2/vibe-math-v2.js +14 -3
- package/vibe-math-v2//345/256/236/347/216/260/346/226/271/346/241/210.md +5 -1
- package/vibe-math-v3/vibe-math-v3.js +7 -2
- package/vibe-math-v3//345/256/236/347/216/260/346/226/271/346/241/210.md +1 -1
- package/vibe-math-v4//345/256/236/347/216/260/346/226/271/346/241/210.md +3 -3
- package/vibe-math-v5//345/256/236/347/216/260/346/226/271/346/241/210.md +5 -1
|
@@ -3085,10 +3085,15 @@ export function apply(ctx) {
|
|
|
3085
3085
|
if (decision === 'used') {
|
|
3086
3086
|
const prev = formalOf(target)
|
|
3087
3087
|
const file = String(f.file || ('Formal/' + target + '.lean'))
|
|
3088
|
-
|
|
3088
|
+
// 契约 §4:`used` 只说"这一轮碰了形式化",**不得**撤销已成立的证明,也不得把一条显式阻塞
|
|
3089
|
+
// (blocked,本身就是放行门禁的记录)打回 attempted 而重新关门。只有 `defect` 能撤销证明。
|
|
3090
|
+
// 只保留 `passed` 是不够的:`blocked` 同样是"门禁已放行"的状态(v2/v4/v5 两者都保留)。
|
|
3091
|
+
const keepStatus = (prev.status === 'passed' || prev.status === 'blocked') ? prev.status : 'attempted'
|
|
3092
|
+
await putFormal(target, Object.assign({}, prev, { status: keepStatus, decision: 'used', file: file, updatedAt: now() }))
|
|
3089
3093
|
await upsertFormalAnchor(target)
|
|
3090
3094
|
await rebuildLeanLibIndexes()
|
|
3091
|
-
await formalAnnounce('【形式化】' + who + ' 通过回执记录 ' + target + ' 形式化草稿:' + file
|
|
3095
|
+
await formalAnnounce('【形式化】' + who + ' 通过回执记录 ' + target + ' 形式化草稿:' + file
|
|
3096
|
+
+ (keepStatus === 'attempted' ? '' : '(保留已有的 ' + keepStatus + ' 状态:一次 used 回执不撤销已成立的证明/已记录的阻塞)'))
|
|
3092
3097
|
return
|
|
3093
3098
|
}
|
|
3094
3099
|
await formalAnnounce('【形式化】' + who + ' 的 formal.decision 只能是 \'used\'、\'blocked\' 或 \'defect\'(收到 ' + String(f.decision) + '),已忽略。')
|
|
@@ -530,7 +530,7 @@ VibeMath/ # 工作区级
|
|
|
530
530
|
|
|
531
531
|
**卡片锚点**:对象 md 卡(`Problems/`、`Propos/`、`Verified/`)在非 off 模式且该对象**有形式化记录**时,头部锚点块里多一行 `- 形式化: <状态>`(`Lean 通过(…)` / `阻塞(…)` / `已尝试未通过`),位置紧随 `- 概率:`(无概率锚点时紧随 `- 状态:`),不影响调度器只读头部锚点的既有解析。锚点用**文本级插入/替换**维护(不整卡重写),因此代理按"直接写 md"协议写进卡片的正文不会被抹掉;off 模式或状态为 `none` 时不写这一行。
|
|
532
532
|
|
|
533
|
-
**回执通道**(契约 §6.3):非 `off` 模式下,验证回执的 JSON 契约里带 `"formal":{...}`(由 `handleVerifier` 处理),solver / explorer / 重派生提示词的**回执说明**里也给出同一字段(`handleSolver` / `handleExplorer` 通过 `absorbFormalFromReply` 接受顶层 `formal` 与 `meta.formal` 两种写法)。因此代理即使一次 Lean 工具都没调用,也能留下显式、可审计的难度判断;`decision='blocked'` 而 `note` 为空一律**拒绝记录**并公告,`decision='used'` 只记 `attempted`(不足以打开 require
|
|
533
|
+
**回执通道**(契约 §6.3):非 `off` 模式下,验证回执的 JSON 契约里带 `"formal":{...}`(由 `handleVerifier` 处理),solver / explorer / 重派生提示词的**回执说明**里也给出同一字段(`handleSolver` / `handleExplorer` 通过 `absorbFormalFromReply` 接受顶层 `formal` 与 `meta.formal` 两种写法)。因此代理即使一次 Lean 工具都没调用,也能留下显式、可审计的难度判断;`decision='blocked'` 而 `note` 为空一律**拒绝记录**并公告,`decision='used'` 只记 `attempted`(不足以打开 require 门禁)——但**若该对象已是 `passed`/`blocked` 则保持原状**:一次"这一轮碰了形式化"的 `used` 回执不得撤销已成立的证明(撤销只有 `defect` 一条路,契约 §4)。
|
|
534
534
|
|
|
535
535
|
**门禁落点**(契约 §8 要求唯一收口点,不散落):
|
|
536
536
|
- 判定入口:`settleVerdict`(辩论/评审裁定,在**改对象之前**拦下)与 `processStatusUpdates`(自报概率 1 的第二条"宣告定论"入口);
|
|
@@ -773,12 +773,12 @@ else await closeVerify(vs,allTrue)
|
|
|
773
773
|
|
|
774
774
|
| 事件 | 迁移 |
|
|
775
775
|
|---|---|
|
|
776
|
-
| `lean_run` 成功/失败 | → `attempted`(记录运行结果;`passed`/`blocked`
|
|
776
|
+
| `lean_run` 成功/失败 | → `attempted`(记录运行结果;`passed`/`blocked` 不被红运行降级,也**不被随手运行撤销**) |
|
|
777
777
|
| `lean_archive{kind:'proof'}` + 该文件最近一次运行 `ok` | → `passed`,写 `Verified/Lean/<id>.lean` |
|
|
778
|
-
| `lean_archive{kind:'proof'}` + 红运行 | → `attempted`(**不**写 `Verified/Lean
|
|
778
|
+
| `lean_archive{kind:'proof'}` + 红运行 | → `attempted`(**不**写 `Verified/Lean/`),并**撤回**旧的归档证明(工作文件刚被新代码覆盖,旧证明已不对应任何代码) |
|
|
779
779
|
| `lean_archive{kind:'blocked', note}` | → `blocked`(`note` 空 → 拒绝) |
|
|
780
780
|
| 回执里 `formal:{target, decision:'blocked', note}` | → `blocked`(`note` 空则仅记日志、不建记录) |
|
|
781
|
-
| 回执里 `formal:{target, decision:'used', file}` | → `attempted
|
|
781
|
+
| 回执里 `formal:{target, decision:'used', file}` | → `attempted`(记录文件);**已是 `passed`/`blocked` 则保持原状**——只有 `defect` 能撤销证明(契约 §4) |
|
|
782
782
|
|
|
783
783
|
**状态存储**:v4 没有会话日志投影,故 `formal` 记录**用自己的持久化机制**
|
|
784
784
|
`State/formal.json`(`{records:{<id>:…}, todo:[…]}`),由 `saveAll()` 一起写、`loadAll()` 一起读,
|
|
@@ -1136,7 +1136,11 @@ Progress/,不要从头再来",**不得**复用 `【入职首轮】` 与"你
|
|
|
1136
1136
|
- 重新 `lean_archive kind='proof'` 但**运行未通过**时,`proof` 指针必须一并清空:工作文件已经被
|
|
1137
1137
|
这次失败的代码覆盖,旧指针指向的文件不再是该对象的证明(否则 `Formal/Index.md` 会同时报告
|
|
1138
1138
|
「运行 fail」和一条归档证明路径);
|
|
1139
|
-
- 只有表决者**独立于这份 Lean 代码**也能确定命题为假时才投 0
|
|
1139
|
+
- 只有表决者**独立于这份 Lean 代码**也能确定命题为假时才投 0;
|
|
1140
|
+
- **`decision='used'` 不得撤销已成立的证明**:`used` 只表示"这一轮碰了形式化/写了草稿",若该对象已经是
|
|
1141
|
+
`passed`/`blocked` 就保持原状态(`proof` 与归档文件都不动)。撤销证明只有 `defect` 一条路;
|
|
1142
|
+
无条件写 `attempted` 会让审查对象从忠实性退回"推导是否正确"、`require` 档对一份已跑通的证明重新关门
|
|
1143
|
+
(契约 §4;v2 曾经就是这样,四套现已一致)。
|
|
1140
1144
|
|
|
1141
1145
|
**提示词硬要求(契约 §6,四套一致)**:注入文本里的工具名**一律全称**
|
|
1142
1146
|
(`vibe_v5_lean_*`;缩写 `lean_archive` 不是注册名,代理照抄就调用了一个不存在的工具);
|