diff --git a/CLAUDE.md b/CLAUDE.md index 4b237e8..9228d4b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -38,7 +38,7 @@ - 每条规则都有独立预期值的测试。 - **其余部分**:阶段推进、提示词、给模型的材料、任务适配、导出、配置对话。这部分写错了马上就能看出来,按研究原型的标准写:用最直接的写法;遇到罕见情况就停下来,把原因写清楚交给用户。 -只有冻结协议、预测、证据、运行与扣次这几张核心表,在数据库里加禁止修改和删除的约束。其余表照常读写。 +账本的全部记录都只追加,数据库里禁止修改和删除;怎么存见 `docs/结构.md` 第四部分。 ### 遇到问题先找原因 diff --git a/docs/结构.md b/docs/结构.md index b66215d..d76baab 100644 --- a/docs/结构.md +++ b/docs/结构.md @@ -5,6 +5,7 @@ 来源: - 用户 2026-10-01 认可"按负责一件事来切"、下面这套模块与可替换点,以及步骤清单和账本记录种类。 - 用户 2026-10-01 同意:提交的字段定义放 vocab,submissions 只判收不收;vocab 可放规范序列化和哈希两个函数,上限调到 600 行;执行后实际 1030 行,用户同意上限改为 1100 行。 +- 用户 2026-10-02 同意:"全部只追加":账本用一张只追加的表,12 种记录都不能改;ledger 预期 900–1400 行。 - 依据是两次开发调研。一次是模块切分,参考了 Parnas 1972 与 1979、Ousterhout、Cockburn 和同类项目的源码;一次是同类研究的实验设计。 --- @@ -110,26 +111,31 @@ 账本只存发生过的事。信念本、战绩、余额、"现在进行到哪一步"都不存,每次从记录现算。 -| # | 记录 | 内容 | 谁写入 | 禁止修改 | -|---|---|---|---|---| -| 1 | 研究配置 | 冻结的配置、步骤清单、每个决策点用哪条规则、方法参数、提示词哈希 | flow(内容由 config 生成) | 是 | -| 2 | 阶段 | 每个阶段的开和关、什么时候公开 | flow | 否 | -| 3 | 提交 | 各种提交的每一版:入口、讨论、志愿、提案、两次预测、挑刺、回应、解释、收尾、实现、核验。阶段关闭后以最后一版为准,此后不能再追加新版 | flow(经 submissions 收下后) | 替换时追加新版;阶段关闭后由 ledger 拒绝再写 | -| 4 | 冻结协议 | 每个候选的冻结版本:因子清单、保障清单、实现条款、指标登记 | flow | 是 | -| 5 | 作者自评 | 封存时的三个数;解封时追加一条解封记录 | flow | 是 | -| 6 | 冻结代码 | 每份候选代码和消融格代码的版本号,以及因子位置表 | flow(版本号由 workspace 给出) | 是 | -| 7 | 运行 | 每次正式运行三条:登记要跑;确认启动(扣次);结果(分数、合法化、指标、答案路径、资源) | flow(结果由 runner 与 tasks 给出) | 是 | -| 8 | 决定 | 程序做的每个决定:选批、采纳、选格、押的因子、入口分配、判重合并。每条存规则名、规则版本、方法参数、种子、全部输入、输出 | flow(由 rules 计算) | 是 | -| 9 | 结算 | 每格的结局、撑几成、配合关系标签、每条解释的确认或否定、世界比特、惊讶 | flow(由 rules 计算) | 是 | -| 10 | Jev 判别 | 每次问了什么、原始概率、结论 | 提问方(submissions 或 flow) | 否 | -| 11 | 用量 | 模型调用和整个环境的用量,只记录 | agents、runner | 否 | -| 12 | 事件 | 违规记录、"按配置跳过"、"没测"及原因、停下的原因 | flow | 否 | +**全部只追加。** 所有记录放在同一张表里,每一行是:序号(自动递增,就是时间先后)、种类、唯一键、内容(JSON)、内容的哈希。 -**为什么这几种禁止修改** -- CLAUDE.md 定的核心表是冻结协议、预测、证据、运行与扣次,分别对应第 4 种、第 3 种里的两次预测(阶段关闭后不再接受新版本)、第 7 和第 9 种、第 7 种。 -- 另外四种也禁止修改:研究配置、作者自评、冻结代码、决定。它们被改了以后,事后没人察觉得到:配置要在开始时冻结,作者自评要封存,代码冻结后才能启动运行,决定一经写入、恢复时就按原决定走。 +- 整张表禁止修改、禁止删除,由数据库触发器保证。要更正就追加一条新记录;"开"和"关"、"替换"也都写成新记录。 +- "种类 + 唯一键"不能重复。同一件事只记一次(确认启动、一格的结算、一条解释在一格上的账)靠这一条约束。 +- 同样的内容重写一次,当作已经写过;同一个键写进不同的内容,报错。中断恢复时重做一遍写入,不会记两次。 +- 唯一键怎么拼,只在 ledger 里定义。 -禁止修改的意思是:数据库里加约束,只能追加,不能改也不能删;要更正,就追加一条新记录。 +| # | 记录 | 内容 | 谁写入 | +|---|---|---|---| +| 1 | 研究配置 | 冻结的配置、步骤清单、每个决策点用哪条规则、方法参数、提示词哈希 | flow(内容由 config 生成) | +| 2 | 阶段 | 每个阶段开一条、关一条;关闭即公开 | flow | +| 3 | 提交 | 各种提交的每一版:入口、讨论、志愿、提案、两次预测、挑刺、回应、解释、收尾、实现、核验;私人笔记的每一版。阶段关闭后以最后一版为准,此后由 ledger 拒绝再写 | flow(经 submissions 收下后) | +| 4 | 冻结协议 | 每个候选的冻结版本:因子清单、保障清单、实现条款、指标登记 | flow | +| 5 | 作者自评 | 封存时的三个数;解封时追加一条解封记录 | flow | +| 6 | 冻结代码 | 每份候选代码和消融格代码的版本号,以及因子位置表 | flow(版本号由 workspace 给出) | +| 7 | 运行 | 每次正式运行三条:登记要跑(占名额);确认启动(扣次);结果(分数、合法化、指标、答案路径、资源) | flow(结果由 runner 与 tasks 给出) | +| 8 | 决定 | 程序做的每个决定:选批、采纳、选格、押的因子、入口分配、判重合并。每条存规则名、规则版本、方法参数、种子、全部输入、输出 | flow(由 rules 计算) | +| 9 | 结算 | 每格的结局、撑几成、配合关系标签、每条解释的确认或否定、世界比特、惊讶 | flow(由 rules 计算) | +| 10 | Jev 判别 | 每次问了什么、原始概率、结论 | 提问方(submissions 或 flow) | +| 11 | 用量 | 模型调用三条:开始、每次回复的用量、结束;整个环境的用量。只记录 | agents、runner | +| 12 | 事件 | 违规记录、"按配置跳过"、"没测"及原因、停下的原因 | flow | + +**写入时由 ledger 拒绝的几种情况**:阶段已关闭还要写提交;要替换的那一份不是本人在这个阶段刚交的;没有"确认启动"就写运行结果;这次消融已经有格启动了才冻结解释。 + +**谁能看到什么**只在 ledger 的一个函数里判断(方法.md 第三部分):研究者阶段的提交,本人交上就能看,别人在阶段关闭后能看;作者自评有解封记录后别人才能看;第一次预测和私人笔记只有本人能看;程序写的记录写入后所有人都能看。研究者在一个阶段里看到的内容,截止到这个阶段开始的那一刻。 --- @@ -180,7 +186,7 @@ | plugin | 600–1000 | | config | 300–600 | | flow | 2000–3500 | -| ledger | 1500–2500 | +| ledger | 900–1400 | | rules | 1500–2500 | | submissions | 600–1000 | | jev | 300–500 |