docs: 写明"边界"指什么;唯一约束改为有编号、只发生一次的八种记录

用户 2026-10-02 同意:CLAUDE.md"罕见情况怎么办"第 2 条写明边界是模型的提交、用户的配置、外部服务的返回,模块之间的调用不算边界;哪些记录加唯一约束属于账本设计,写在结构.md 第四部分(阶段开关、运行登记、确认启动、运行结果、模型调用开始结束、消融结算),前后顺序由 flow 的同一入口保证。任务书 03 同步。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 06:25:16 -04:00
parent 595b275a10
commit 493ea6d89d
3 changed files with 7 additions and 10 deletions
+5 -8
View File
@@ -11,7 +11,7 @@
第一版要求 ledger 做三件事:判断"谁在什么时候能看到什么"(快照加截止序号),给每条记录配唯一键,同样内容重写时当作已经写过。用户指出这三件都是过度设计:
- "这个任务能看到哪些材料"由 materials 按任务定。第一条消息里直接给,还是等模型用查询工具去读,是同一份材料的两种给法。ledger 不判断谁能看什么,所以也没有截止序号。
- 恢复时只核对、不重做写入(CLAUDE.md"中断后怎么恢复"),所以记录照写就是,不需要通用的去重。只在方法要求"只能有一次"的地方加唯一约束。
- 恢复时只核对、不重做写入(CLAUDE.md"中断后怎么恢复"),所以记录照写就是,不需要通用的去重。只给有自己编号、按定义只发生一次的记录加唯一约束。
- Jev 是一个判别器,和程序检查地位相同,不单独成一种记录。
已经写好的代码里,存储、禁改触发器、提交内容检查、作者自评拆成封存,都还用得上。
@@ -22,7 +22,7 @@
- `src/ledger/visibility.ts` 和 `tests/ledger-visibility.test.ts`:整个删掉。
- `snapshot`、`Viewer`、截止序号:从代码、导出和测试里删掉。
- 通用唯一键(`keyOf`、`joinKey` 一类)、"同样内容重写当作已经写过"的处理和它的测试:删掉,只留第一部分说的三处唯一约束。
- 通用唯一键(`keyOf`、`joinKey` 一类)、"同样内容重写当作已经写过"的处理和它的测试:删掉,只留第一部分列出的唯一约束。
- `jev` 这种记录:删掉,改为写进"退回"和"决定"的内容里。
- 第一版之后加出来、不在第三部分四种里的写入前提检查:删掉,测试一并删掉。
- 注释里提到快照、截止序号、可见性、"同内容重写"的地方:按这一版改写或删掉。
@@ -58,12 +58,9 @@
- 内容:JSON;
- 内容的哈希:用 vocab 的 `canonical` 和 `hash`。
- **整张表禁止修改、禁止删除**,用两条触发器实现。
- **唯一约束只加在三处**,都是方法要求"只能有一次"的地方。重复了就报错,不当作已经写过:
- 一次运行的确认启动;
- 一次运行的结果;
- 一次消融的结算。
- **唯一约束**:有自己编号、按定义只发生一次的记录,按编号加数据库唯一约束,重复了就报错,不当作已经写过(结构.md 第四部分):阶段开、阶段关、运行登记、确认启动、运行结果、模型调用开始、模型调用结束、消融结算。
其余记录照写,不设唯一键。
其余记录照写,不设唯一键。前后顺序(启动前要先登记、结束前要先开始)由 flow 的同一个入口保证,ledger 不查。
- 打开数据库时:
- 新文件就建表;
- 旧文件核对一个表结构版本号,对不上就报错。
@@ -145,7 +142,7 @@
用真实的数据库文件,放在临时目录里,每个测试自己建、自己删。重点:
- 用 SQL 直接执行 UPDATE、DELETE,被触发器拒绝。
- 三处唯一约束:同一次运行确认启动两次、写两个结果、同一次消融结算两次,都报错。
- 八处唯一约束各有一条测试:同一个编号写第二次就报错。
- 第三部分的四种拒收各有一条测试;同时测对应的正常情况能写进去。
- 写提案时作者自评拆成封存,提案记录里不带它。
- 事务中途出错,一条都没写进去。