feat: 配置 config 模块(任务书 04)

- src/config:research.json 的字段定义(TypeBox,全部必填、不认识的字段报错,每个字段带中文说明和类别)、一次列出全部错误的校验、步骤清单纯函数。
- 流程写成完整流程 / 朴素循环两选一,第零轮、消融写成开 / 关两选一,冲突组合写不出来,不另写检查。
- 规则名取自 rules 登记表,config 改为依赖 rules(结构.md 第二部分、.dependency-cruiser.cjs)。
- ledger 顺手两处(结构.md 第四部分):消融结算按轮次唯一、去掉消融编号;私人笔记去掉版本号;表结构版本号升到 2。
- 结构.md 第八部分补 config 对外内容、更新 ledger 一节;WORK_LOG 更新。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 08:08:18 -04:00
parent 4dc7ac9d62
commit d2bfb971ab
13 changed files with 1045 additions and 20 deletions
+6 -3
View File
@@ -14,6 +14,7 @@
- 任务书 01(工具链 + vocab):npm 包、TypeScript、`node --test`、dependency-cruiser 规则全写,临时违规实测 14 条都报错;vocab 1030 行,`npm run check` 通过,`npm test` 24 条通过。结构.md 第八部分补了 vocab 对外内容。
- 任务书 02(rules):src/rules 13 个文件、1761 行,`npm test` 192 条通过。预期值来源有三个:方法.md 的手算例;`tests/fixtures/rules/` 下不看实现写的 Python 脚本(重跑后 JSON 逐字节相同);参考项目 calc15、calc14b 里与现行方法一致的部分。审阅做了两轮,每轮都换一个全新上下文的子 Agent。结构.md 第八部分补了 rules 对外内容。
- 任务书 03(ledger):src/ledger 5 个文件、584 行,`npm test` 226 条通过(ledger 34 条)。一张只追加的表,两条禁改禁删触发器,8 处唯一约束(阶段开、阶段关、运行登记、确认启动或确认没启动、运行结果、模型调用开始、结束、消融结算),写入时只查四种拒收,提案的作者自评拆成封存另存。按第一版写过可见性和通用唯一键,按新版全部清掉了。全新上下文的审阅做了三轮。结构.md 第八部分补了 ledger 对外内容。
- 任务书 04(config):src/config 4 个文件、453 行,`npm test` 246 条通过(config 19 条)。流程用联合类型(完整流程 / 朴素循环),规则名取自 rules 登记表,config 改为依赖 rules。ledger 顺手两处:结算按轮次唯一、笔记去掉版本号,表结构版本号升到 2,全新上下文审阅一轮无问题。结构.md 第八部分补了 config 对外内容。
## 关键决定(用户原话见各提交说明)
@@ -56,14 +57,16 @@
14. 消融核验覆盖每个因子。
- 答案路径、保障名字"在不在位置表里"的对表,由以后拿得到位置表的模块现算(多半是 materials 或 flow)。
- 核验提交 `body` 的字段说明要补一句:同一行同时出现在因子和保障里时,在说明里写一句提醒(方法.md 4.3 ⑨)。写 submissions 时一并改。
- 给 config:每批上限必须 ≥ 1(为 0 时 R̂ 是无穷大,选格会卡住)。
- 给 flow:同一轮里选批和选格都用随机规则时,传不同的"版本"算种子,否则两次抽取用同一串随机数。
- 给 materials:被退回的提案原样存在退回记录里,作者自评没有拆成封存,所以不能把别人的退回记录给研究者看。方法.md 第三部分"作者自评从交上来那一刻起就封存"和"被退回的提交原样记"之间怎么处理,待用户定。
- 给 flow:确认启动前要先登记运行;模型调用要先开始再结束;阶段要先开再关;ledger 都不查。
- ledger 待顺手改(下一份涉及 ledger 的任务书带上):结算的唯一约束改按轮次(每轮最多一次消融,结构.md 第四部分已改),去掉 `ablation` 编号;私人笔记去掉版本号,以最后写入的一条为准(序号就是先后,版本号是程序推得出的栏目)。
- 给 materials:别人的"退回"记录不放进任何研究者的材料(退回的提案原样带着作者自评,不另拆封存)。
- 给 agents:模型的思考档位必须写明,不用参考项目"写 null 表示用 Pi 自己的默认"那种写法。
- 给 agents、runner:"整个环境的用量"(实验员会话的 CPU、内存等)写这两个模块时再定记录种类。
- 任务书 04 留下、待用户定的:(1) 关掉消融时"解释"做不做:结构.md 第三部分把它放在〔开关:消融〕下,方法.md 第十一部分说照样写文字,代码按方法.md 写(照做);(2) 挑刺与回应关掉、或朴素循环里,判重合并后的候选由谁写统一的协议(方法.md 4.3 ⑥ 的统一在回应阶段);(3) u、衰减只在消融开、且选格规则用信息价值时才用到,要不要挪进"消融开"那一支。
- 给 rules / flow:`selectUniformRandom` 的输入 `BatchInput` 要 λ 和每个候选的第二次预测范围,朴素循环两样都没有,配置里也写不进 λ。
- 给 submissions / vocab:朴素循环"不预测",提案的作者自评(必填的三个数)要不要交,待定。
- 给 flow:步骤清单没有单列"轮末动作"(解封作者自评、入选未跑的候选出池),朴素循环里收尾跳过时 flow 也要做这些。
- 写 plugin 时实测:源码导入路径带 `.ts` 扩展名,Pi 加载插件能否接受。
## 工作方式(用户 2026-10-01 定)
@@ -77,4 +80,4 @@
## 下一步
任务书 03(ledger)已核对通过(716f4b8)。`任务书/04-config.md` 已写好(含 ledger 两处顺手改),等用户另开 Agent 执行,监督者核对。
任务书 04(config)已完成并提交,等监督者核对;"未完成"里任务书 04 留下的三个问题待用户定。