diff --git a/WORK_LOG.md b/WORK_LOG.md index 33986ff..1f5cebc 100644 --- a/WORK_LOG.md +++ b/WORK_LOG.md @@ -50,6 +50,7 @@ - materials 与 submissions 一起设计、分两份任务书(09 materials 先、10 submissions 后):materials 对每个任务产出"给模型看的材料 + 对号清单 + 能读的代码版本",整份存进"模型调用开始"记录,submissions 只拿清单对号;谁能看什么每种任务一个函数,不写通用判定;提示词以参考项目为底稿只做必要改动;materials 预期 1200–1800 行,submissions 500–800 行。用户原话:"我建议submissions和materials一起做你觉得可以吗?"、"可以"、"都同意"。 - 中断的模型调用,恢复时补写"出错、原因'进程中断'、墙钟时间测不到"(`callEnded` 的墙钟时间用 `Measured`)。用户原话:"墙钟时间改用 Measured,恢复时写出错加测不到(原因'进程中断')"。 - materials(任务书 09)开工前用户定的四件事(2026-10-03,用户选了推荐项):vocab 上限改 1150,只放对号清单 `Checklist`,任务材料其余类型放 materials;冻结协议、位置表、判重合并输出、决定种类和编号规则由 materials 定义并导出,flow 照着写,ledger 不改;实验员、核验员不给信念本,方法.md 4.3 ① 改为"研究者任务";合并而成的候选按原提案挑刺。 +- 消融格核验不通过重做时,实验员从上一次交的这一格代码接着改,和正向修复一样(方法.md 4.3 ⑯)。用户选"接着改"。export 先不做,先收尾已完成模块,flow 由用户和监督者一点点过。用户原话:"export先不做,我们就先把已经完成了但是又有些问题的模块收尾一下,然后我会和你说如何开flow"。 - 核验不通过、修复次数用完时:正向候选不跑(不扣次数,记事件写明原因);消融格和正向一样可以退回实验员重做,次数用同一个修复上限,用完仍不通过这一格不跑、不扣次数、记"证据不足"(方法.md 4.3 ⑨ ⑯、6.6)。用户原话:"同意"。 - 冻结协议只放方法.md 4.3 ⑥ 列的几项(2026-10-03)。用户原话:"冻结协议只放方法.md 4.3 ⑥ 列的几项,FrozenProtocol 去掉 replies 和 replyBody;第二次预测要的"挑刺与答复"从这个候选已公开的回应或统一提交里读;submissions 交回的冻结协议主体也不带答复。" - 解释的 `cells` 只按完整流程全开实现,一律要求交(用户选"只按全开实现");做步骤开关时再补"关掉消融时不交"。 @@ -87,4 +88,4 @@ ## 下一步 -任务书 10(submissions)已完成,等监督者核对;之后是指标加候选前缀那件事,再做 flow。 +任务书 10 已核对通过(09c4403)。用户定:export 先不做,先把已完成模块收尾,再一起过 flow。任务书 11(收尾:指标名加候选前缀、消融重做接着改、判重说明补关键设定,`任务书/11-收尾.md`)已写好,等用户另开新 Agent 执行。 diff --git a/docs/方法.md b/docs/方法.md index 509d91c..131b9f1 100644 --- a/docs/方法.md +++ b/docs/方法.md @@ -309,7 +309,7 @@ - 交"这一格跑不起来:原因"。这一格不启动,也不扣次数; - 报告还需要一起关掉哪个因子,这一格就同时关掉它们,并写明。 - 核验员只查一件事:是不是只关了指定的因子。 -- 核验不通过时,和正向一样退回实验员重做,次数用同一个修复上限;用完了仍不通过,这一格不跑、不扣次数,记"证据不足:原因"。(用户 2026-10-03 定) +- 核验不通过时,和正向一样退回实验员重做,从上一次交的这一格代码接着改,次数用同一个修复上限;用完了仍不通过,这一格不跑、不扣次数,记"证据不足:原因"。(用户 2026-10-03 定) - 运行的规矩和正向运行相同。 - 完整代码和基线的分数,直接取本批已有的运行结果,不重跑。 diff --git a/任务书/11-收尾.md b/任务书/11-收尾.md new file mode 100644 index 0000000..e009f67 --- /dev/null +++ b/任务书/11-收尾.md @@ -0,0 +1,93 @@ +# 任务书 11:已完成模块的收尾 + +把已完成的几个模块里剩下的问题改掉,然后再开始写 flow。一共三件: + +1. 假设专用指标的名字加候选前缀; +2. 消融重做时,实验员从上一次交的代码接着改; +3. 判重问题的说明里补上"关键设定"。 + +本任务书已由用户和监督者在 2026-10-03 一起确定。下面说的"监督者",是在参考项目目录里和用户讨论设计的另一个会话。 + +## 开工前先读 + +- `CLAUDE.md`:全部,尤其是"罕见情况怎么办"、"不设默认值"、"测试"。 +- `docs/方法.md`: + - 第五部分"指标":登记、引用、测不到时怎么办; + - 4.3 ⑥:冻结协议包括什么; + - 4.3 ⑨ ⑯:修复、消融重做。 +- `docs/结构.md` 第八部分:vocab、materials、submissions、tasks、jev 各节。 +- `WORK_LOG.md`:"未完成"里"同一轮两位研究者可能给假设专用指标起同一个编号"那条,以及"给 flow:消融格核验不通过……"那条。 + +## 一、假设专用指标的名字加候选前缀 + +**问题**:同一轮里,研究者之间互相看不到提案,会给假设专用指标起同一个名字、定义却不同。两份都会收下,下一轮有人引用这个名字时,程序取第一条定义,悄悄用错。 + +参考项目的真实账本里出过 5 次,都是同一轮、不同研究者: +- 11-real-1 第 1 轮 min-radius; +- 15-real-1 第 1 轮 lp-polish-gain; +- 15-tight-2 第 2 轮 final-radius-spread 和 last-improve-elapsed; +- 16-real-1 第 2 轮 restart-gain。 + +监督者核对过 16-real-1 那两条:一条算"重启段内最好 Σr 减进入重启段时的 Σr",另一条算"最终 Σr 减池阶段最好 Σr",是两样东西。 + +**改法**(用户 2026-10-03 选"冻结时加候选前缀"): +- 研究者在提案、回应、统一里登记新指标时,只写短名。短名恢复"不能含 `.`"这一条,写进 vocab 的字段定义和字段说明。 +- 冻结时,冻结协议里新登记的指标改用全名"候选编号.短名",例如 `r2-c1.restart-gain`。候选编号判重合并之后才有,所以只能在冻结时加。 +- 冻结之后一律用全名: + - materials 的已登记指标清单、能引用的清单(对号清单的 `reusableMetrics`); + - 研究者引用别人的指标时,`metrics.reused` 写的全名; + - 实验员材料里"要实现的指标定义";候选代码在结果文件里也用全名当键写取值; + - jev 查代码改动时对照的指标。 +- 已占用的名字(对号清单的 `takenMetricIds`)只剩最终指标、常规辅助指标、两个保留键。全名都带 `.`,短名不带,两者不可能撞,所以已登记的那些不用再放进来。 +- 加前缀只写在一处:在 materials 里,和 `FrozenProtocol` 放在一起写一个函数,输入 submissions 交回的冻结协议主体、候选编号、轮次、基线、合并了哪些原提案,交回 `FrozenProtocol`。flow 写冻结协议时调用它。 +- tasks 读结果文件是按指标的 `id` 取值的,传进来的就是全名,按理不用改。改完后用一个带全名指标的测试确认一下。 + +同一个候选里,新登记的短名和引用的全名不会撞:一个带 `.`,一个不带。 + +## 二、消融重做从上一次交的代码接着改 + +用户 2026-10-03 定:消融格没通过核验、退回重做时,实验员从上一次交的这一格代码接着改,和正向修复一样。 + +举例:格 p2 第一次交上来,核验员说 p3 也被误关了。实验员拿上一次交的那份代码,只把 p3 恢复回来。 + +- materials 现在写的是"你的工作目录是完整代码的副本",改成"上一次交的这一格代码的副本"。能读的代码版本里加上这一份,完整代码照旧列出,作为对照。 +- 重做时消融核验看的改动全文,仍然是"这一格的代码相对完整代码"。这是 flow 传进来的,materials 不用管。 +- 删掉 WORK_LOG"给 flow"那条里"实验员从哪份代码出发,方法没写"那半句,改写成:flow 重做时,把上一次这一格的提交取出来当工作目录。 +- 方法.md 4.3 ⑯ 由监督者补写,你不用改。 + +## 三、判重问题的说明补上关键设定 + +任务书 10 已经把关键设定加进了判重的材料,但问题说明里还写着"每个因子有 `name` 和 `method`"(`src/jev/questions.ts` 第 33 行附近)。补上 `keySettings`,用一句话说明它是什么,其余措辞不动。 + +问题的指纹会因此变,这是预期中的:Jev 还没有校准过(WORK_LOG"Jev 校准"),没有旧数据需要对得上。 + +## 四、测试 + +- **前缀**: + - 同一轮两个候选各登记一个同短名、不同定义的指标,冻结后是两个不同的全名;下一轮的能引用清单里两个都有,各自对应自己的定义; + - 短名带 `.` 时退回; + - 引用写短名而不是全名时退回,退回原因里列出能引用的全名; + - tasks 用全名读结果文件,读得到值。 +- **消融重做**:重做材料里写的工作目录是上一次的这一格代码,能读的版本里有它,也有完整代码。 +- **判重说明**:jev 的不花钱测试里,问题文字里出现 `keySettings`。 +- 改了 jev 的问题文字,跑一次 `npm run test:jev -- jev-latest`,确认判重那一问照常拿回概率。 + +不另派子 Agent 审阅:这三件都是按已经定好的写法改,范围小。 + +## 五、规模与文档 + +- materials 目前 1850 行,正好在上限上。尽量不超;超了就在报告里说明多在哪几处,监督者再和用户商量。 +- 完成后更新: + - `docs/结构.md` 第八部分:vocab、materials、jev 各节改了的地方;materials 一节补上加前缀的函数; + - `WORK_LOG.md`:在"已完成"补一条;删掉"未完成"里指标重名那条;按第二部分改写"给 flow"那条。 +- 不新建 md 文件。 + +## 六、验收与报告 + +做完后本地提交,然后在回复里交一份报告,监督者会对着实际文件逐项核对: + +1. 提交号,修改的文件列表,每个文件的行数,materials、submissions、vocab 的总行数。 +2. `npm run check`、`npm test` 的完整输出,`npm run test:jev -- jev-latest` 里判重那一问的结果。 +3. 一份冻结协议加前缀前后的样子:两个候选登记同一个短名的例子。 +4. 你和这份任务书、结构.md、方法.md 不一致的地方,以及为什么。 +5. **规则不清楚的地方**:哪里让你犹豫、哪里你是靠猜的。没有就写"没有"。没有真实证据的可能情况,在这里提一句就够,不写进 WORK_LOG。