← 工作原理 · 原文件 notes/plan/tasks/G39-G43_plan_2026-10-03.md(Markdown 源文件已渲染;链接到其他文档的会跳转,指向源码的只显示路径)
G39–G43:D 线收敛、T2/T3 重排与 P3 准备(2026-10-03)
本文第 0 节核对 ABCD 轨迹报告(abcd_screen_trajectories_2026-10-03.md)的结论哪些成立、哪些要补充;第 1–5 节是五个任务书;第 6 节是时间表与依赖。所有"官网分"以 submissions.tsv 为准;外部参照是一支 Human 赛道队伍的公开方法日志(GitHub,逐条记了官网分),只当外部校准,不当结论。
0. 对报告结论的核对
0.1 逐条判定
| 报告结论 | 判定 | 核对依据 | 是否要改 |
|---|---|---|---|
| 1. B 落后主要怪选父(岛内均匀随机、迁移 0 次、父是第 1 名的只有 3/15) | 成立 | 上游 database.py 的 random.choice;选父日志;A 10/17、D 9/18 | B 已于 10-03 决定停止投入,剩下的只是从默认配置和文档里删掉(G39.8)。n = 1,"B 一定输 2.5 分"不成立,报告自己也这么写 |
| 2. C 落后是生成方式(3 轮太浅、40% 无效轮、参考程序无用) | 成立 | 215 轮里 85 轮 invalid_diff;C #5/#10 对正确方法族下了错误否定 | C 已停。不修它的无效轮;只借一条原则:"新机制先过谷底再判死"(G39.5) |
| 3. D 赢 A 不是靠调参 | 成立,且比报告更强 | 报告只查了 T1 初筛(8 个 tune,0 接受)。本次补查 Spark 上全部 D 组:T2 四个 D run 共 25 个 tune 节点全部 no_gain(最大增益 0.98、0.58、0.53、0.39,门槛 1.0);正在跑的 r2-D(3 h 时):s0 4 个 tune 全部 gen_empty,s1 5 个里 1 个被接受(#16,把组成外推的截断 2.0 → 1.5,节点分 54.8,父节点 54.0),其余 4 个 gen_empty;多个 tune 节点因 query_cap(18 次查分)只跑了 2 轮。r2-D 结束时(14:10):s0 4 个 tune 全部 gen_empty,s1 6 个里 1 个接受(#16)。合计 43 个 tune 节点 1 次接受。T2 心脏插值 D-s1 的 29 个节点里 6 个是 tune,约 1/4 的槽位 | 要改:tune.p 默认 0。"三个榜 D 都高 1.4–2.8"只能解释为同一 search_seed 下的随机差异 |
| 4a. 终选前 5 是同一程序的副本 | 成立,已修一半 | scr-D 5/5、A 4/5;工作树里未提交的 agent/search/candidates.py 已按可执行代码树哈希给终选去重(final.py 的 candidates()),但:没提交、没进 r2-D 的代码快照;晋级(scoring_def.promotion_candidates)没有去重;没按预测哈希去重(B #8/#11 代码不同、三 seed 分数逐位相同的情况抓不到) | 要改,见 G39.2 |
| 4b. PLAN 被证否后原样回退,占槽位 21% | 成立 | 无变化节点 D 6 个、A 5 个;现在只在 FUTS 里记一次无收益访问,Researcher 看得到兄弟节点摘要但看不到"该父节点已被证否的方向" | 要改,见 G39.3 |
| 4c. draft 3/4 撞 30 min 上限、没写 METHOD 被判失败 | 成立 | controller.py 只有一个 engineer_minutes(现行配置 30);缺 METHOD.md 直接 gen_failed(第 1712 行附近)。另外要核实 drafts.py 里失败的 draft 是否已占用该方法族的覆盖名额(一次超时就烧掉一个族) | 要改,见 G39.4 |
| 4d. 新机制至少 6 次查分才判无效 | 成立 | A/D 冠军谱系都是第 8–15 次查分才过谷底;现行上限 20 次足够,只缺规则 | 要改,写进 search_spec.md(G39.5) |
| 建议:改造版 tune(只在超时或查分少的节点触发) | 证据不足 | 报告自己注明 C 在 draft 上的修改轮只有 2 个样本且都是负的 | 不做;列为可选的离线回放实验(G39.1) |
| 建议:现在跑的 r2-D 两组不动 | 同意 | 09:34 启动,4.5 h,约 14:05 结束;结束后把它们的 tune 统计补进 §0.1 第 3 行 | — |
0.2 报告没说、但本次核对补上的三件事
- T2 决赛口径:官网任务页写明心脏测试只有 E12.5 外推、插值测试只在全胚(E7.75)。最终 T2 只计全胚插值 + 心脏外推两个榜;我们本地分最好、重复跑了三次的心脏插值榜在决赛不计分。这决定了 G40 的资源分配。
- T3 的可行路线:公开日志里 T3 66.6 的做法是把真实 Mab21l2 KO 细胞混进 WT E8.75 输出(celltype^β 压缩 β≈0.55,WT 稀释 k=65),全局位移迁移 41、文献先验 45.8、逐基因编辑 39–43 全部失败。这和我们 10-03 的 T3 校准结论一致(lgo875 是唯一把 3 个官网点排对的尺子,它奖励"沿 E8.75→E9.5 发育方向走")。我们三次 agent 模式 run 都锚在 self_zero + 先验上(45.9 / 53.4 / 41.0)。见 G41。
- 本地尺子看不到"新细胞状态":X3 / X1 / X4–X6 的目标里新类型占比都是 0%,官方 E10.5 约一半细胞属于新名字的类型。搜索在结构上只能在"重采样已有细胞"里找分;r2-D 两组到目前为止的节点几乎全是 composition_trend 的 improve/tune。见 G42。
0.3 需要用户拍板
| # | 事项 | 建议 |
|---|---|---|
| 1 | 工程仍叫 D,下一轮 tune.p 默认 0,做 G39 的四处小修 | 同意;tune 代码保留、配置模板写 p: 0 |
| 2 | 停掉心脏插值榜的新 run(决赛不计分),算力转到全胚插值与心脏外推 | 同意(G40) |
| 3 | 心脏外推用官网配额预注册地扫坐标 RMS 缩放因子(3–4 份锁定 run 各出一份) | 同意,规则 §10 明文允许"试参数、看分、再试"(G40.3) |
| 4 | T3 方法卡 v2 以"KO 细胞混合 + β 压缩 + WT 稀释"为主线;输出里含训练 KO 的真实细胞,提交时披露 | 同意(G41)。Mab21l2 KO 是官方训练数据,不触及任何禁用条款 |
| 5 | 知识口径放宽到官网规则:允许带 DOI 的教科书发育事件(谱系、时间线、标记程序),仍禁保留阶段数据集的测量值 | 同意(G42.2);这是 10-03"按官网要求就好"的落地 |
| 6 | X7 尺子的数据路线(Qiu 原始矩阵下载慢;Imaz 本地已有但只有 1 个目标胚胎) | 先用 Imaz 做 X7 原型,Qiu 版在后台下载(G42.1) |
1. G39:搜索循环修正(tune 关闭 + 四处小修 + 两处加固)
目标:下一轮 T1/T2 run 开始前合入。所有改动用 fake 后端跑通,并在 scr-A/B/D 和四个 T2 D run 的 archive.sqlite 副本上回放验证。
| # | 改动 | 具体做法 | 验收 |
|---|---|---|---|
| 39.1 | tune 默认关 | 所有现行配置 tune.p: 0;tune.py 保留;文档 10 §4.7 标注"默认关闭,证据见轨迹报告"。可选(不排期):离线回放"改造版 tune"(只在 Engineer 超时或查分 < 6 的节点上、带前次 tune 记忆、每父节点 1 次、min_gain 0.5 + 新 seed 配对),接受率 < 20% 就彻底删 | 配置加载测试:tune.p == 0 时与 A 决策逐位一致(已有测试) |
| 39.2 | 候选去重 | 候选键 = candidates.runtime_key(可执行代码树) 或 目标视图 seed-0 预测 digest(proxy_json[...].digest 已有)二者任一相同即视为同一候选。用在三处:终选 candidates()(已有,改键)、晋级 promotion_candidates(新增)、FUTS 的无进展访问(已有)。合入 candidates.py 并补测试 | 回放 scr-D:终选前 5 从 1 个不同程序变为 ≥ 3 个;回放 B:#8/#11 合并 |
| 39.3 | 原样回退必须换备选机制 | ① search_spec.md:PLAN 被证否时必须交一个备选机制;确实没有可交的,METHOD 首行写 NO_CHANGE: <被证否的方向>。② 控制器:输出与父节点相同的节点记 refuted_direction(取 PLAN.name + METHOD 首行);Researcher / Engineer 的父节点块加"该父节点下已被证否的方向"列表。③ Analyst 的 lessons 已有,不改 | 下一轮 T1 run 的无变化节点槽位时间 < 10%(现 19–21%) |
| 39.4 | draft 的时限与 METHOD | ① 配置 engineer_minutes_by_op: {draft: 45},其余沿用 30;budget.py 的 call_minutes 按算子取值。② Engineer 会话开始时 harness 预写 solution/METHOD.md 占位(PLAN 的 name / approach / family_id,标 [auto: Engineer 未完成]);超时但 solution/run.py 存在且 vec-check 通过 → 照常执行打分,节点标 method_auto: true,这类节点晋级和进终选前必须 Reviewer 通过。③ 核实 drafts.py:gen_failed 的 draft 不占该方法族的覆盖名额(n[f] 只数 scored 的) | 回放 scr-D:3 个超时 draft 中至少 2 个能被打分;coverage_report 里失败族可再抽 |
| 39.5 | 查分规则 | search_spec.md §5 加一条:"新机制至少试 3 种解码 / 幅度组合、查分 ≥ 6 次之后才能判无效;判无效要写出每次的分项"。max_queries_per_node 保持 20。Analyst 多记一项 queries_before_refute | 下一轮统计该字段 |
| 39.6 | 相同代码树不执行 | Engineer 提交的 solution/ 的 runtime_key 与父节点相同 → 直接 gen_empty,不执行、不打分(省执行与查分) | 单元测试 |
| 39.7 | harness 强制"关闭机制"对照 | CONTRACT.md 加可选参数 --ablate <name>(名字由 PLAN 的 mechanism_off_control 给);权威执行后在目标视图上再跑一次 --ablate,比较输出 digest 与分项,写 mechanism_active: yes/no/unclear 进节点记录;Analyst 读这个字段而不是自己猜。不支持 --ablate 的程序记 unclear | fake 端到端;现有种子加 --ablate |
| 39.8 | 删 B/C 的默认入口 | 配置模板与 experiments/ 不再含 search.strategy: population、generator: openevolve_native;openevolve_adapter/ 保留可复现,README 标"已停";doc 10 §11 已写 | check_paths 链接不失效 |
顺序:39.1、39.6、39.2 最便宜(半天);39.3、39.4、39.5 一起改提示词和控制器(一天);39.7 一天;39.8 顺手。全部由 Opus 子 agent 实现,Claude 审查。
2. G40:T2 重排——全胚插值与心脏外推
依据:决赛 T2 = 全胚 E7.75 插值 + 心脏 E12.5 外推(官网任务页)。当前官网:全胚插值 61.7(前十最好 75.3),心脏外推 49.6(62.4),心脏插值 63.9(决赛不计)。
| # | 改动 | 具体做法 | 验收 |
|---|---|---|---|
| 40.1 | 资源重排 | 心脏插值不再开新 run(正在跑的 D-s2 让它跑完、照常提交一次);每天的 T2 算力:全胚插值 1 个 run + 心脏外推 1 个 run | — |
| 40.2 | 全胚插值的人写种子 | 把方向库 T2EI-01 / 03 做成种子:按类型(或经表达配对的"类型族")同源配对;型内表达做 McCann 插值并保留细胞残差;坐标取近端真实细胞的邻域块、只沿配对位移走一小步(pos_f ≈ 0.15 作起点);尺度按 log-RMS 对时间插值并校准(公开日志:仅尺度校准到位 +0.8)。目标仍是本榜 proxy(本地 → 官网 61.5→60.0、62.4→61.7,可信) | 种子在 proxy 上细胞状态组 > 50(mix 是 36),邻域组不低于 mix;final 格式检查过 |
| 40.3 | 心脏外推:尺度扫描 | 方法冻结为:表达 = copy_last(可加组成趋势),坐标形状不变、只乘一个 RMS 缩放 s(公开日志:改形态的 14 族全部 ≤ 52,scale_only 54.5、尺寸项满分)。本地尺子测不到 s(proxy_noscale 把尺寸项固定),所以用官网配额扫:3–4 个锁定 run,每个只换种子参数 log s ∈ {0.15, 0.30, 0.45, …},终选规则改为"该榜护栏 = proxy_noscale 非劣(LCB > −1)"而不是严格增益,否则尺度程序永远被退回 copy_last。扫描值与预期在提交前写进 decisions.tsv | 校准账本多 3–4 个 T2 外推点;尺寸项由 4.2 分向 8.3 分靠近 |
| 40.4 | P3 衔接 | E8.5、E10.5 心脏公布后:三点(E8.75、E9.5、E10.5)拟合 log-RMS 与细胞数的增长,外推 E12.5(两天);全胚 E7.75 用与 E7.5 相同的插值程序。契约见 G43 | — |
3. G41:T3 方法卡 v2 与候选批
依据:T3 校准报告(lgo / lgo10 与官网完全反序;lgo875 顺序正确但 n = 3);公开日志 15 个方法族 42 次提交的结果;官网 T3 任务页"从一个观察到的扰动学响应形状"。
| # | 改动 | 具体做法 | 验收 |
|---|---|---|---|
| 41.1 | 方法卡 v2 | 主线:输出 = 真实 Mab21l2 KO 细胞(按同义名映射到 WT 类型,celltype^β 压缩组成,β 起点 0.55)+ WT E8.75 载体细胞(稀释比例 k 起点 65%),被敲基因置零只作部件;坐标各自保留;总数按 max_cells 分层抽样。写清为什么:Mab21l2 KO 相对评分器 WT 的差里有"沿 E8.75→E9.5 方向"的成分,lgo875 与官网一致;severity_slope 是唯一看幅度的项,混合比例就是幅度旋钮。禁做:全局位移迁移、逐基因编辑、稠密化(护栏已有) | check_knowledge 通过;方法卡不含任何官网分数与 Gata4 测量值 |
| 41.2 | 合规与披露 | Mab21l2 KO 是官方训练数据;方法说明写明"输出含训练 KO 的真实细胞及其比例"。CONTRACT.md 里"外部细胞不得直接输出"的条款只针对 external/,不改 | 方法摘要英文版加一段 |
| 41.3 | 候选批 | agent 模式不变、不设本地目标;3 天内跑 4–6 个 run(提示里给 β、k 的不同起点或不同 search_seed),每个终选一份,T3 配额每天 6 次;每份记进"官网 vs 本地"账本,本地只记 lgo875 和 svc 作参考 | 至少 1 份官网 > 60 |
| 41.4 | P3(10-20 起) | ① 观察到的扰动换成 Gata4 KO @E8.75(与 β-catenin 测试同阶段、同一份匹配 WT),Mab21l2 作第二个样本;② 建留一 KO 尺子"用 Mab21l2 预测 Gata4"选方法;③ β-catenin 广泛表达、效应弥散,组成压缩可能不如 Gata4 有效,加一条可开关的 Wnt 靶基因先验通道(Axin2、Lef1、Sp5、T、Msgn1、Tbx6、Notum,教科书知识,披露) | G43 的 T3 视图与尺子 |
4. G42:T1——带新类型的尺子、知识口径、部件库
| # | 改动 | 具体做法 | 验收 |
|---|---|---|---|
| 42.1 | X7 尺子 | 两输入外推、目标含新类型:Imaz 2024 原型(本地已有,E8.0 + 14 体节 → 24 体节 的全胚或心脏中心子集,看新类型占比能到多少);Qiu 版(E8.0–8.25 + E8.5 → E9.5,心脏中心取材子集)后台下载。T1 禁窗是 (9.5, 13.5],E8.0–8.5 对 T1 允许;Qiu 整簇原始文件因 T2 心脏窗移出了 Spark,需按任务分窗重新策展(只把 ≤ E9.5 的细胞放回)。校准:对账本里 11 个有官网分的程序配对打分,看符号一致率与 ρ 是否不低于 X3 | 新类型占比 > 30%;ρ ≥ X3 则进目标(权重待定) |
| 42.2 | 知识口径修订(更正:心外膜、EndMT、小梁 / 致密、神经嵴、肝芽、心外膜 EMT 的条目 k048–k060 已经存在,缺的不是条目而是被 G22 审计删掉的时序 / 顺序行和使用许可;所以本项不新建 k064–k070,改为:恢复这些条目里带 DOI 的发育顺序行;按官网规则复审被排除的 k057(冠状内皮)、k059(原始 / 定型红系切换)、k061(类型比例,仍应排除)) | 11 号文 §2、ideas_T1__val.md 合规段、researcher_spec.md、search_spec.md §4:允许带 DOI 的教科书发育事件(谱系去向、大致时间线、细胞状态的标记程序),禁止的仍是保留阶段数据集的测量值(比例、表达量、类型清单、调色板)。新增知识条目 k064–k070:心外膜由前心外膜覆盖心肌(Wt1 / Tbx18 / Tcf21 / Upk3b)、房室管与流出道 EndMT 生成垫间充质(Snai1 / Twist1 / Sox9 / Postn)、小梁与致密心肌(Nppa / Bmp10 对 Hey2 / Mycn)、心脏神经嵴进入流出道、肝芽扩张、心外膜 EMT。每条经 Claude 审核 | check_knowledge 通过;决策记入 decisions.tsv |
| 42.3 | 部件库与新状态种子 | modeling/src/task1_temporal/parts/:局部 OT 配对、经验贝叶斯收缩、残差保留解码、模块投影、基因开启规则、--ablate 开关。lineage_branching 种子:亲本细胞沿型内程序轴(42.2 的标记程序打分)生成少量子状态,比例是向零收缩的超参,保留残差;从 reference_only 升为 exploration(它在尺子上与 copy_last 相同、在 final 上改动约 1200 个细胞,所以准入只能看契约与机制,不能看尺子) | 种子过视图盲检查与 --ablate 对照 |
| 42.4 | 预注册官网 A/B | 2 份 T1 配额:同一程序"开新状态生成"对"关新状态生成",其余逐位相同;预期写在提交前 | 账本多 1 对受控比较 |
| 42.5 | Engineer 按算子路由 | draft 用更强模型(等 Astra / Opus 小试结论),improve / debug 用 qwen3.8-max;models.engineer_by_op | 配置加载测试 |
5. G43:P3 准备(10-20 前)
| # | 改动 | 具体做法 |
|---|---|---|
| 43.1 | 契约 | T1 程序必须支持 ≥ 2 个输入、任意 Δt(E8.5 + E9.5 + E10.5 → E12.5,两天);T2 心脏支持三阶段生长拟合;T3 支持多个观察扰动(Mab21l2 @E9.5 + Gata4 @E8.75)。现有种子逐个核对 |
| 43.2 | 尺子 | G26 的 R1–R5 用官方验证真值:T1 R1 = E8.5 + E9.5 → 官方 E10.5(第一把同分布尺子,1 天步长);T3 R5 = Mab21l2 → Gata4 留一;外部数据分配按 10-02 暂定(Qiu E9.25 进训练,E9.5 继续测试),10-20 前定 |
| 43.3 | 演练 | 用占位文件把 p3 status、p3-rulers、--phase p3 的 fake run 全部跑通;每榜"预期分"的写法与 12 号文 §3 对齐 |
| 43.4 | 两枪策略 | 按 12 号文:第一枪最稳(11-20 前),第二枪方法上最不同的候选(11-28 前);预期先写进 decisions.tsv |
6. 时间表与依赖
| 日期 | 事项 | 依赖 |
|---|---|---|
| 10-03 晚 | r2-D 两组结束后补 tune 统计;用户拍板 §0.3 | — |
| 10-04 | G39.1 / 39.6 / 39.2 合入并回放;G40.1 生效;G41.1 方法卡 v2 | 拍板 1、2、4 |
| 10-05 | G39.3–39.5 合入;G41.3 第一批 2 个 T3 run;G40.3 第一个尺度 run | G39 |
| 10-06 | G39.7;G40.2 全胚插值种子;G42.2 口径修订与知识条目 | 拍板 5 |
| 10-07 – 10-09 | 新一轮 T1 run(G39 全部 + 42.2);G42.1 X7 原型与校准;G42.3 部件库 | G39、G42.2 |
| 10-10 – 10-15 | G42.4 预注册 A/B;G40.3 完成尺度扫描;G41.3 收尾;G43.1 契约 | 校准账本 |
| 10-16 – 10-19 | G43.2 / 43.3 演练;冻结 P3 配置 | G43.1 |
| 10-20 | P3 数据公布,按 12 号文执行 | — |
不做的事:不再跑 A/B/C 对照;不改造 tune;不借 OpenEvolve 的 inspirations / 迁移 / MAP-Elites;心脏插值榜不再投入。
7. 用户追加的五个想法(2026-10-03 下午):判断与并入
7.1 现有角色一览与"轨迹分析 agent"(→ 新任务 G44)
现在 run 内有四个 LLM 角色和一个非 LLM 算子,run 外有两个只读工具:
| 名字 | 什么时候跑 | 看什么 | 产出 | 不能做什么 |
|---|---|---|---|---|
| Researcher(调研员) | 每个 draft / improve / debug 节点开始时,单轮 | 父节点 METHOD、分项分、ANALYSIS、全树实验表、兄弟节点摘要、方法族库、知识库 BM25 前 3 条 | PLAN.json | 看不到数据,没有工具;lit-search 现行配置全关 |
| Engineer(工程师) | Researcher 之后,opencode 会话 30 min | PLAN、任务书、方法卡、契约、评分简报、视图数据 | solution/(代码 + METHOD.md) | 出不了沙箱,网络只到 LLM,查分 ≤ 20 次(A 半) |
| Analyst(分析员) | 权威执行打分之后 | 变化量表(含分项)、PLAN、diff、Engineer 末条消息、stderr | ANALYSIS.json(教训、下一步、机制是否生效) | 不写代码 |
| Reviewer(审查员) | 节点进前 10% 且超过最好种子时 | 源码、PLAN、视图清单、评分器陷阱 | REVIEW.json(pass / fail:越界、硬编码、钻漏洞、不确定、禁窗信息、只在 proxy 成立) | 不改代码;fail 的节点不能当父、不能进终选 |
| tune | 抽签到 tune 时(现行 p 0.25,G39 改为 0) | 父节点 run.py + 分项反馈 | ≤ 3 轮 SEARCH/REPLACE | 不是 agent,是纯文本调参算子;35 个节点 0 次被接受 |
报告写手(agent/report,G28) | run 结束后,run 外 | 事实包(collect.py 从 archive 只读抽取) | notes/reports/runs/<run>.md | 单轮、无工具、只能复述事实包里的数字 |
记录工具(agent/records,G27) | run 外 | archive、ledger、轨迹包 | runs.tsv、工程效率、配对消融、轨迹完整性 | 纯脚本,无 LLM |
要做的"轨迹分析 agent"(G44,锁外、只读、给人看):这次 Codex 手工做的 ABCD 轨迹分析(scripts/abcd_traj_extract.py + 报告)就是它的样板。设计:
- 输入:一个或多个已结束 run 的
archive.sqlite、events(选父 rationale)、nodes/<id>/{PLAN,ANALYSIS,REVIEW,engineer.jsonl,tune/}、scoring_log.jsonl、SELECTION.md、官网台账。全部只读复制到 scratch 再读(和report/collect.py一样)。 - 第一步纯脚本(不用 LLM,把
abcd_traj_extract.py固化进agent/records/trajectory_facts.py):槽位时间去向(有变化 / 无变化 / 失败 / tune)、父节点排名分布、每族 draft 的状态与深化次数、PLAN 被证否的比例与备选机制使用率、Engineer 查分次数分布与"过谷底"曲线、重复节点、终选前 5 的去重数、官网分 vs 尺子分。这些是报告里每条结论的数字来源。 - 第二步一次 LLM 调用(qwen3.8-max 或 Opus,
thinking_budget大),输入事实包 + 现行提示词 / 方向库 / 配置 + 上一轮的建议清单,输出固定格式:findings(每条带数字和节点 id)、proposals(每条写明改哪个文件、改什么、预期收益、怎么验证、风险)、rejected_ideas(为什么不改)。提示词专门写"只许引用事实包里的数字"(沿用报告写手的数字后检查)。 - 输出落点:
notes/reports/runs/<date>_meta_<run>.md,并把proposals追加到 dev board 的待定区。人拍板后由 Opus 子 agent 实施。这与 2026-09-30"取消自动化第二层、改人工每日复盘"的决定一致:agent 出分析和提案,人做决定;规则 §9 允许锁前由任何人或 agent 改 harness,所以将来要全自动也不违规,只是先不这么做(评估贵、噪声大)。 - 验收:对 scr-A/B/D 和两个 r2-D run 跑一遍,findings 与 ABCD 轨迹报告的 §0 结论一致;每条 proposal 能对应到 G39 里的某一项或者是新的。
7.2 让 harness 长时间跑(→ 新任务 G45)
先纠正一个读法:r2-D 停在 61 分不是"收敛了停下来",是配置里的 4.5 h 墙钟到了(budget.wall_clock_hours)。现有机制里已经有两样:崩溃后同配置自动续跑(resume,不算新 run);跨 run 接续 --continue-from(G18:导入节点、评测指纹相同就不重评、祖先链轨迹进证据)。所以 7×24 在工程上是"锁定 run 的链",不是一个无限长的 run。
真正的约束不是算力:① 每个榜每天只有 8 次官网校准机会,本地尺子又只能部分预测官网(X3 的迁移比约 0.4),跑得越久越可能过拟合本地尺子;② Token Plan 的速率是 Engineer 的瓶颈(会话 77–83% 时间在等模型),Spark 与他人共用;③ 规则 §9:锁内不能改配置,所以"总结问题、优化自身"只能发生在 run 之间。
G45 的做法:
| # | 改动 | 说明 |
|---|---|---|
| 45.1 | run 链:每个榜每天 1–2 个 12 h 锁定 run,--continue-from 上一个 run 的存档;每天固定时刻结束、打包、提交 | 比一个 24 h+ 的 run 好:每天有一次官网校准点,也有一次人(或 G44)介入改配置的机会。A 的轨迹里 3 小时内一直在爬(58.6 → 63.2),12 h 够用,再长主要在刷尺子 |
| 45.2 | 平台期策略(run 内,不违规):连续 N 个(建议 8)已打分节点没有刷新前 5 名时,控制器把 draft.p 临时提到 0.5、优先抽还没覆盖或只有失败 draft 的方法族,并把 reference_only 以外所有已准入种子重新放回父节点池 | 现在 FUTS 的探索项 c 是固定的;B 的"72 分钟后不动"和 D 的"后半程全是同一程序副本"都是平台期没有换方向 |
| 45.3 | 接续时的新鲜度:--continue-from 导入的节点带上"上一轮已证否方向列表"(G39.3 的输出),Researcher 不再重提;导入的前 5 名重新过视图盲检查 | 已有的机制是导入节点与祖先链,没有导入教训 |
| 45.4 | 自动化程度:G44 的 proposals 由人拍板后,用一条命令生成新配置并启动下一环(harness.py launch --continue-from <上一环> --apply-proposals <id>)。全自动留作选项,不做默认 | 符合 09-30 的决定;要改回全自动只需去掉拍板一步 |
| 45.5 | 配额对齐:run 链每天产出的不同候选数 ≤ 该榜当天配额(T1 8、T3 6、T2 待核),终选输出之外的次优候选记录在 SELECTION.md 供人挑 | 否则跑出来也交不上 |
| 45.6 | 跨环续做(2026-10-03 已实现,agent/search/carryover.py;设计 notes/architecture/18 §5,按 Codex 审阅修订):环的交接点(cutoff − node_tail)切断的 Engineer 会话若没留下可执行程序,或搜索阶段截止切断的执行,封存为不可变快照 nodes/<id>/carryover/(逐文件 sha256 的 SEAL.json、HANDOFF.json、原始轨迹、账本登记),节点记 carried_over;下一环 --continue-from 只复制校验通过的快照,进 resume 队列(优先于 improve,每环 ≤ 4):新 Engineer 会话 + 新环完整提示 + 原 PLAN + 交接摘要 + 只读历史轨迹,保留真实父节点,查分额度按各段累计,证据按有序 segments[] | 复杂方法的会话常被环的边界切断;不续同一 opencode 会话(审阅:旧路径、旧提示、旧实验表风险);会话被切但留下可执行程序的照常立即执行(G39 的即时验收不丢) |
| 45.7 | 执行上限、健康监督与权重复用(2026-10-03 已实现;设计 18 §1–§4):搜索配置 limits(按榜进锁、写进视图 manifest,默认 28 GB / 360 min 兜底);exec_health 健康监督(每分钟读、5 分钟汇总,按进程归属 GPU,先只观测不杀,enforce 后 30 min 无活动判 hung);ARTIFACTS.json 的 per_view 权重:每视图第一次权威执行训练并不可变登记,之后晋级 / 护栏 / 续跑按(代码树、训练种子、视图内容、环境、--ablate)缓存键回放;终选预留按实测(复核、晋级缺口、护栏全部任务、final 冷启动)只前移 cutoff;链级已暴露护栏 seed 不复用;配置了护栏却缺基线时拒绝候选替换;T1 链改 24 h | 训练型候选被重复执行约 9 次(权威、对照、晋级 2、护栏 5);30 min 固定上限对 OT / CFM / VAE 太紧;--seeds 批量接口、每节点提前三 seed、前五名固定重训按审阅后置 |
7.3 调研员与"搜索更多数据集"(→ 新任务 G46,锁外)
调研员在每个节点开始时进入,只在节点内起作用;它看不到数据,不能下载任何东西;lit-search(PubMed / OpenAlex / arXiv / bioRxiv / Exa / Tavily / 开放全文)只返回文字,而且现行配置全部关闭(怕检索出禁窗阶段的测量值)。所以"agent 在 run 内搜数据集、下载、分析、拟合"现在做不到,也不该在 run 内做:沙箱没有外网(只放行 LLM 域名,这是 G4 的合规边界),外部数据要删禁窗、核许可、写披露(catalog.yaml、check_catalog),这些是锁前的人工策展流程(G3 / G11 / G12)。
两条事实也要先说清:① 现在挂进视图的外部训练数据(Qiu E8.75 / E9.0、MOSTA E9.5)几乎没被中选程序真正用到(方法摘要的 TODO 里还写着"核实各中选程序是否读了外部数据");② 对 T1 收益最大的"新数据"是 10-20 公布的验证答案,不是再找一个图谱。所以"更多数据 → 更好泛化"在本项目还没有证据,先把它做成锁外的数据侦察 agent:
| # | 内容 |
|---|---|
| 46.1 | Data Scout(锁外、只读、给人看):一次性或每周跑,工具 = lit-search 全部来源 + GEO / CELLxGENE / ArrayExpress 的元数据 API(可选 BioMCP 的文献与基因工具,见 7.5)。任务:按榜找候选数据集,输出 catalog 草案(来源、阶段 / 体节 / Theiler 换算、禁窗判定、许可、细胞数、平台、与官方面板的基因交集),不下载数据 |
| 46.2 | 人审核后走现有策展流程(删窗 → 哈希 → check_catalog → 视图挂载 → 披露文本) |
| 46.3 | 先要找的东西(按价值):T1 的 X7 原料(Qiu / Imaz E8.0–8.5 心脏中心子集);T1 > E13.5 的程序供体(Qiu E14+ 已有);T2 全胚插值现在没有任何外部数据(原肠期 3D 空间数据:Stereo-seq / MERFISH 的 E6.5–E8.0 公开样本,须排除 (7.25, 8.0));T3 主办方已明确允许的 GSE208162(E12.5 心室 Gata4 条件敲除,只限 T3)一直没用 |
| 46.4 | 验收:每个候选都有禁窗判定与许可条目;T2 全胚至少找到 1 个合规样本或明确结论"没有" |
| 46.5 | 第一轮已做(2026-10-03,人工):见 data_scout_2026-10-03.md。T2 全胚找到 GSE278603(Stereo-seq 3D,E8.0 两个胚胎允许,E7.5 / E7.75 四个胚胎必须下载后立即删除);心脏外推可加 GSE197353 的 E9.0(Slide-seq);T3 的 GSE208162(Cdh5-CreERT2 Gata4 KO,E12.5 心室)与 GSE156001(GATA4 bioChIP-seq)主办方已允许仅限 T3;是否下载待用户决定 |
7.4 官方 KG(已核实,→ 并入 G42.2 的知识策展,不进 run)
核实结果(2026-10-03 读 virtualembryo.ai 首页、/kg、/about,以及官网 Data 页快照第 291–293 行):
- 是什么:Virtual Embryo 站点的知识图谱,节点四类:Anatomy(EMAPA)、Gene(MGI)、Cell type(CL)、Stage(Theiler),另有 dataset 与 paper 节点;关系来自 EMAPA / CL / MGI 本体、Bgee 的基因表达事实(联邦查询)、以及"agent 从 PubMed 抽取的 claims"。提供 FastAPI 路由和一个 MCP server(15 个工具:
kg_search、kg_entity、只读kg_cypher等;写入需要管理员 key),Claude Code 一条命令可接。 - 合规:它锚在 Theiler 阶段上,覆盖 TS8–TS23(约 E5.5–E15),也就是包含 T1 / T2 的全部保留阶段;Bgee 的表达事实和 PubMed claims 都会带着 E10.5–E12.5 的"哪些基因在哪些细胞表达"。官网 Data 页原话:atlas "spans the same window as the benchmark, so some of what it contains sits at target time points; using it there is using the answer, however it is routed"。KG 和 atlas 是同一站点的"data and knowledge layer",这句话同样适用。
- 结论:不能作为 run 内角色的工具挂进 harness(无法按阶段可靠过滤,一次
kg_cypher就可能把 E10.5 的表达事实带进 PLAN)。可以做的是在锁外用它的 MCP 做知识策展(G42.2):只取不带阶段的边——基因 → 解剖位置(EMAPA)、细胞类型谱系(CL 的 develops_from)、基因功能注释——由人审核后写成agent/knowledge/k0xx条目,经check_knowledge扫描;任何带 Theiler ≥ TS16 的 claim 不收。在方法说明里披露"使用了 Virtual Embryo KG 的本体层信息"。
7.5 BioMCP(已核实,→ 不配给 run 内角色;可选给 G46 的 Data Scout)
核实结果(GitHub genomoncology/biomcp,2026-10-03):MIT 许可的 MCP server,70+ 数据源,重心是人类临床与肿瘤:PubMed / PubTator3 / Europe PMC / Semantic Scholar、MyGene / MyVariant / ClinVar / gnomAD / AlphaGenome、ClinicalTrials.gov / OncoKB / cBioPortal / OpenFDA、Reactome / STRING / KEGG / WikiPathways / Enrichr 等;文档没有模式生物支持的说明;各来源条款不同(KEGG 区分学术与非学术)。
判断:
- run 内不配。原因与 KG 相同:角色在沙箱里,网络只到 LLM;文献工具会返回禁窗阶段的测量值(这正是
lit-search被关掉的原因);它的临床与肿瘤工具对小鼠胚胎发育没有用处。 - 与现有能力重叠:文献部分
agent/research的lit-search已经有(PubMed、OpenAlex、bioRxiv、arXiv、开放全文、两家网页搜索);通路 / 调控 / 互作部分prior/已离线有 Reactome、GO、CollecTRI、STRING、MSigDB、MGI,而且已按保留基因型过滤。 - 可选用途:给 G46 的 Data Scout 和 G42.2 的知识策展(锁外、人看)加上 BioMCP 的
search article(PubTator3 实体标注比纯 PubMed 检索好用)和 MyGene(基因别名 / 同源映射)。接入成本约半天;收益不确定,排在 G46 之后。
7.6 并入时间表
| 任务 | 排期 | 依赖 |
|---|---|---|
| G44 轨迹分析 agent | 10-05 脚本层(固化 abcd_traj_extract);10-07 LLM 层,对 scr 与 r2-D 跑一遍 | 无;产出供 10-07 新一轮 T1 run 前的复盘用 |
| G45 run 链与平台期策略 | 45.1 / 45.5 随 10-07 的新一轮一起启用;45.2 / 45.3 与 G39.3 同一批合入 | G39 |
| G46 Data Scout | 10-08 起,每周一次;T2 全胚与 GSE208162 优先 | lit-search 服务(已有) |
| KG 知识策展 | 并入 G42.2(10-06) | — |
| BioMCP | 不排期;G46 跑过一轮后再决定 | G46 |
8. 与 10-03 会议行动要点(E01–E11)的对照
来源:会议行动要点与执行分析。下表是唯一的编号映射,两边不再各建一套任务。
| 会议编号 | 本文任务 | 差异与补充 |
|---|---|---|
| E01 尺子可信度(按任务) | G40(T2)、G41(T3)、G42.1(T1 X7);"目标 / 护栏 / 只记录 / 盲区"清单已在 doc 10 §5 和 14 号文,本轮只补 X7 与 T3 的 lgo875 条目 | 会议要求的"同一程序本地 / 官网可对账"= 校准账本(已有,ruler_calibration.py) |
| E02 trace 复盘与搜索浪费 | G39(修正)+ G44(把复盘做成可重复的 agent) | — |
| E03 停止原因 | G45 新增 45.6:stop_manifest.json 加 stop_reason ∈ {budget, plateau, infra, agent_early_exit, operator},看板与报告显示;r2-D 的 61 分是 budget | 会议问"为什么提前结束":搜索模式下控制器用满预算,不存在 agent 主动收工;只有 agent 模式(T3)会提前结束,已记录在 run2 的教训里 |
| E04 版本与回滚 | 新增 G47:harness 改动的回滚演练。已有:每个 run 的只读代码快照 + 锁 v8 + 账本(证据可追溯到原版本);缺的是一次实际演练:在 Spark 上 git revert + sync_spark.sh 回到上一可用版本、用 fake 后端跑通、写入操作记录 | 半天,10-06 与 G39 合入一起做 |
| E05 新状态评测与建模 | G42(X7、知识口径、部件库、lineage_branching 种子、预注册 A/B) | 会议强调"标签变化 ≠ 状态变化":X7 的新类型占比要按表达距离(到输入阶段最近邻的距离分布)核,不只按名字 |
| E06 Report 反馈接通 | G44 第 3–4 步(proposals 进 dev board,人拍板后生成下一环配置);agent/report 现有链路(run 结束 → 事实包 → 报告 → 官网出分更新)要验收一次自动触发 | — |
| E07 Find Data 与缓存 | G46(锁外 Data Scout);下载缓存 = 现有 data/external/_raw/ + catalog 哈希(已有),补"按哈希复用、不重复下载"的检查 | — |
| E08 角色专属工具 | §7.4 / §7.5 的结论:官方 KG 的 MCP 与 BioMCP 只配给锁外的 Data Scout / 知识策展,run 内四个角色不配;lit-search 维持关闭。权限表写进 doc 10 §4.11 | 会议"Bayo MCP" 核实为 BioMCP(genomoncology/biomcp) |
| E09 跨 run 持续运行 | G45(run 链、平台期策略、接续时导入教训、配额对齐) | 会议提的"独立 Docker 长时试跑"不需要:正式 run 已在 Spark 的 bwrap + systemd 用户单元里,隔离验收在 G4 做过;长跑验收 = 连续 3 环 run 链无人工干预完成 |
| E10 数据驱动 + 机制建模 | 不排期;G42.3 的部件库是它的前置 | — |
| E11 会议材料交付 | 新增 G48:轨迹对比报告(已有 abcd_screen_trajectories)、框架压缩包(OpenCode 环境 + harness,不含数据)、架构图(doc 10 §3 的 mermaid 改成角色 / 评测 / 工具边界图)、官方咨询记录(KG 中未来阶段类型信息的使用范围,并入 11 号文 §4 待问清单第 4 条) | 10-08 前 |
与会议结论可能冲突、需要用户定的两点:
- 会议说"运行模型统一使用千问";本文 G42.5 建议 draft 节点用更强模型(等 Astra / Opus 小试)。若坚持统一千问,G42.5 删除,机制完成率只能靠部件库(G42.3)和强制对照(G39.7)来补。
- 会议建议"设置高目标分和本地排行榜驱动持续优化";本文的判断是本地分已证实不能单独预测官网,所以目标分只能用于 run 链的停止 / 换向规则(G45.2),不能用于"追到目标分为止"。排行榜用现有看板加"官网 vs 本地 vs 版本"视图,不另建表。
9. 2026-10-03 下午 grilling 后的定稿(覆盖前文冲突处)
决定全文见 decisions.tsv 2026-10-03 的 12 行;流程图 harness_D_v2.drawio。与前文的差异:
| 条目 | 前文 | 定稿 |
|---|---|---|
| Engineer 时长 | 30 min;draft 45 | 不设固定时限,健康即继续(停顿 180 s 计一次,3 次终止),只受 run 截止约束 |
| run 长度与并行 | 4.5 h;T1 一条链 | 四个任务各一条 12 h 链同时跑(T1、T2 全胚插值、T2 心脏外推、T3 agent 模式),每 run 并发 2、memory_max 32G |
| lit-search | 继续关闭 | 打开(每节点 10 次),加 Compliance 角色审 PLAN 与检索文本 |
| 数据抓取 | 锁外 Data Scout,挂载前人点一次 | run 内 Data agent(多轮)按 PLAN 的 data_requests 下载 → 隔离区 → 删窗 → Compliance → 挂 external/dynamic/,永久存 data/external/;run 外同一代码的 Scout 模式每日跑,Opus 判定后自动挂载;不设额度 |
| 外层循环 | 人拍板 | 全自动(白名单自动应用;黑名单:评分器与尺子、视图与禁窗、合规器、锁与账本、提交流程、预算、ERA 核心、官网规则) |
| 强模型 | Opus API key 在 Spark | VM 上的凭据中继,Spark 只连中继;draft 节点用 Opus;回退链 Token Plan → 百炼按量 → Opus |
| 花费 | 设日上限 | 只统计:看板用量与花费页;邮件通知(2 h 健康、run 结果、额度耗尽) |
| 提交 | 人工上传、人工填分 | Claude Code 在 VM 用 Playwright 上传并读分;选 run 仍由人点一次 |
| 知识 | 恢复条目顺序行 | 另加 T1 发育事件表固定附件;Reviewer 第 5 条改写;11 号文 §2 按官网改 |
新增任务编号:G49 LLM 中继与回退链(VM);G50 轨迹审计 agent(提交门);G51 用量看板与邮件通知;G52 Compliance 角色 + Data agent + vec-data 服务;G13 提交自动化(Playwright,VM)。G46 改为 Scout 模式。
邮件通道的事实(2026-10-03):VM 到 smtp.gmail.com 的 TLS 被本机网络切断(465 / 587 都在握手处 EOF),Spark 完全连不上 Gmail;smtp.qq.com 和 smtp.163.com 从 Spark 与 VM 都可达。gopass 里只有 Gmail 账号和一个未标明账号的 smtp-password,没有 QQ 邮箱授权码。结论:用 QQ 邮箱 SMTP 发送(需要用户生成授权码),发件放在 VM 中继(若 VM 到 qq 的 TLS 通)或 Spark 用户级配置文件(不进任何 run 目录)。
9.1 G53:官方 KG 的使用(2026-10-03 下午补充,纠正 §7.4)
§7.4 写"锁外只取本体边"时还没摸到接口。实测 api.virtualembryo.ai(REST + 只读 Cypher,不需装 MCP)的内容:本体层(EMAPA 8.9k、CL 3.6k、MGI 75k、通路 1.8k、DEVELOPS_FROM 411);文献抽取层 75 篇(GIVES_RISE_TO 181、DERIVES_FROM 225、MARKER_FOR 486、FIRST_APPEARS_AT 132、REGULATES 318、REQUIRED_FOR 288、EXPRESSED_IN 17k 带 Theiler 阶段);Dataset 节点 231 个带 COVERS_STAGES(含 digiembryo_e7_5/e7_75/e8_0 = GSE278603、MOSTA 各切片、e9_5_heart、e11_5_heart);PubMed 发现接口带摘要。
- G53a(已开工,Opus agent):锁外抽取,按任务分窗过滤:本体边与无阶段文献边全允许;FIRST_APPEARS_AT 作"出现顺序";EXPRESSED_IN 等带阶段的边按任务删保留阶段(T1 保留 ≤ TS15 与 ≥ TS23;T2 心脏剔 TS13、TS16–22;T2 全胚保留 ≤ TS11 与 TS12 的 E8.0;T3 剔除 Gata4 / Ctnnb1 敲除来源);不写任何数量。产出
data/external/prior/vekg/、k064 起的条目(我逐条审)、发育事件表增补、Data Scout 的数据集清单。披露"使用了 Virtual Embryo KG 的本体与文献抽取层"。 - G53b(等 G52 的 Compliance 就位):文献与数据服务加
kg-search,服务端先按任务删阶段再返回给 Researcher,与 lit-search 同样过 Compliance;§7.4 的"run 内不接"改为"run 内只接过滤代理"。 - 组委会第 8 问继续问;答复前按上述过滤口径执行。