Error decorrelation
不同 route / architecture 攻击同一 claim。D023 异构性与 capability floor 继续保留:不是多 agent 投票,而是让错误不相关。
XMM Proposal Agent · 并行传送带 · D049 / D050
一个 planner 决定 K 件互不冲突的工作,K 个独立进程并发执行,一个 reduce 单写者提交账本。 D049/D050 保住了并发安全;D051 的任务是把这套安全机构从“高频评审”转成“持续产出可提交 proposal”。
01 — 两根轴
理解整个架构只需要一件事:工作单元不是「一个 idea」也不是「一个 role」,而是一次 shift —— 某个 role 在某个 idea 上干一件有界的活,末尾留一行 3-line handoff。 没有 worker 端到端拥有一个 idea。
于是全局状态是一张矩阵:行是 47 个 idea,列是 pipeline 的 12 个 role。 每次 batch,planner 从这张矩阵里挑出 K 个互相独立的格子并发点掉。
| idea | M0 | R1 | R2 | R3 | R4 | R5 | R6 | R7 |
|---|---|---|---|---|---|---|---|---|
| I021 M101 | · | · | ✓ | ✓ | ✓ | wk1 | · | · |
| I017 M83 | · | · | ✓ | wk2 | · | · | · | · |
| I024 M31 | · | · | wk3 | · | · | · | · | · |
| I039 NGC 5907 | · | · | wk4 | · | · | · | · | · |
| I018 M83 ULX | ✓ | wk5 | ✓ | ✓ | · | · | · | · |
| I005 NGC 4631 | · | · | ✓ | ✓ | ✓ | ✓ | · | · |
| …另 41 个 | · | · | · | · | · | · | · | · |
历史 shift 已完成 该批次的 5 个并发格子 未触及
并行规划 prompt 要求同一 batch 内任意两个 shift 满足全部四条:
第 1 条是所有设计后果的源头。它把并行度的上界钉在「当前有多少个可推进且互不相干的 idea」上, 而不是「后端能承受多少并发」上。
02 — 时序
PLAN 是串行的、昂贵的、LLM 的;COMPOSE 是确定性的、毫秒级的;MAP 是唯一并行的部分; REDUCE 是全局唯一写者。PREFETCH 想把下一批的 PLAN 藏到 MAP 底下。
planner 永远是一次 hermes 调用(默认 nim-large),它不看 route。
worker 是 K 个真并发的独立进程,引擎由 packet 的 route 加配额门共同决定,
失败沿链回退:
03 — 与 pipeline 的关系
这是全部张力的所在:proposal 的交付依赖单个 idea 走完整条链的延迟, 而 batch 并行的是不同 idea 的不同位置。
这就是架构层面的核心问题
并行度加到 10,推进的是横向:更多 seed 拿到 R3 冻结。 但 proposal 需要的是纵向:某一个 idea 走到 R6 → R7。 而纵向的临界路径长度(R2→R3→R4→R5→repair→R6→R7,每步一个 shift) 完全不受 K 影响 —— 因为独立性谓词第 1、2 条禁止同一 idea 在一批里前进两步。
04 — 实测
单写者不变式、idea 级互斥锁、frag proof-of-work、摘要 sidecar、引擎链回退 —— 全部按设计工作。 5 个 worker 并发写各自的 idea 文件没有冲突;reduce 正确合并;校准日志记全了含 noop 的 5 条。
重复出现的 idea 不是 bug:同一个 idea 再次被调度是 R2→R3→R4→R5 的角色推进。
失败模式没有被任何机制接住。「说完但没写文件」发生三次, 驱动只能看见文件的有无,于是一次记 strike、一次记 noop、一次静默丢弃 39 分钟。 已修:write-first 协议 + 把 harness 的工具调用上限从 250 提到 500。
AIMD 在测一个恒为零的信号。共享后端 30 分钟窗口 255 请求、0 个 429、0 失败, 于是自适应并行度的 decrease 分支结构性永不触发,K 只会 3→4→…→上限 12。 而真正的约束是栅栏尾延迟和独立 shift 的供给 —— 两者都不在这个信号里。
lint 假阳性能抢占整个并行池。gate-drift 检查把某个 idea 正文里的 「is not resolved here」匹配成状态词 RESOLVED;而该修复是 serial-only, 于是 K = 6 塌成只调度 1 个,花掉 12 min 规划 + 322s 工作去改一个否定句。
05 — D051 机构重构
图 1–6 的测量揭示的不是某个 model 不够强,而是调度器事实上决定了组织结构: 便宜且总是 eligible 的 review shift 在 stage-FIFO 下结构性过产,而把一个 idea 送到 R6、R7 的证据和生产工作被饿死。 D051 是 owner-endorsed 的制度修订;它保留 D049/D050 的并发安全不变式,但改变槽位预算、裁决条件与产品所有权。
D051 的诊断
我们建成了一个评审官僚体系,却在处理研究问题。问题不是 K 不够大,也不是需要一个端到端的“更聪明 agent”。问题是 stage-FIFO、anti-polish quota 和 review 的低成本/常 eligibility,共同让评审成为默认产出,而 evidence contact 与 production 没有受保护的预算。
不同 route / architecture 攻击同一 claim。D023 异构性与 capability floor 继续保留:不是多 agent 投票,而是让错误不相关。
分歧只能由可检查的外部锚点解决:独立重算、archive refetch、rerun/hash check,或 feasibility/power number;不能由“同意”解决。
每个正确增量必须落入 ledger,不能丢失。Gate ledger、graveyard、TRUST_TABLE、SHIFTS、frag+reduce 仍是制度记忆,不是聊天历史。
D051 采用 Mayo 式 severity clause:一个 R4/R5 event 只有在给出可重放的 checkable anchor 时才允许移动 gate。 无锚点的 reviewer prose 仍可保留为 note,但信息量为零,不可作为 FATAL、REFRAME、CORRECTION 或 lifecycle 变更的依据。
实测例子:I026 的 FATAL 来自 XSA footprint 重算;I035 的 REFRAME 来自 rank arithmetic 与 HEAVY hash mismatch;I005 的 PARK 来自 power 0.060/0.073 ≪ 0.8。 与之相对,同日无锚点 prose 贡献了 8/17 个 NO_NEW_SHOT。
M0 / R0 / R1 / R3-data / HEAVY pilots 获得受保护的多数 slots。HEAVY 改为 owner 设定规模的 weekly pre-authorized budget,champions 优先。
full R6 + R7 living draft。每个 champion 保存一份 shared/drafts/ living draft;空 feasibility table 是诚实 TODO。R8 攻击 draft,而不是 idea prose。
R4 / R5 / R8 / L 只花证据来阻止错误证据。连续 2 轮无 FATAL+REFRAME 且无新 evidence 文件,即触发 yield circuit-breaker:该 idea 的 review 暂停,直到新证据到达。
广度增长,产品链停在 seed。11 个同日 R2 seeds 却得到 17 个 R5 adjudications。
serves:Elo/score 只调度,不构成科学成功。唯一允许的成功主张是 R8 对 living draft 的 verdict 与 AO submission。
| 序 | 改动 | 状态 | 目的 |
|---|---|---|---|
| 0a | write-first protocol;hermes agent.max_turns 250→500 | LIVE | 阻断“做完但未落盘” |
| 0b | write-set gate + parallel reduce frags + orphan lock guard | LIVE | one file / one writer 的机械执行 |
| 1 | R4/R5 severity clause;gate-drift negation-aware matching | DECIDED | 只有锚定 review 能移动 gate |
| 2 | plan_constraints.py yield circuit-breaker | DECIDED | 零产出 review 不再无限循环 |
| 3 | champions.py + milestone contracts + serves: | DECIDED | 把多数预算压到产品临界路径 |
| 4 | deterministic schedule_next.py;LLM 仅写 task | DECIDED | 移除 20–24 min PLAN 与 prose-no-file failure |
| 5 | parallel.sh rolling replenishment | DECIDED | 消除全栅栏造成的 52% slot utilization |
| 6 | champion full-R6 + shared/drafts/ living drafts | DECIDED | 启动真实 proposal production chain |
| 7 | north-star / velocity / yield / utilization metrics | DECIDED | 指标只服务调度,受 Goodhart guard 约束 |
| 8 | weekly HEAVY budget(N×3h/week) | OWNER INPUT | 需 owner 决定 N;champions 优先 |
Goodhart guard 与唯一 north star
proposal-ready count 是唯一 north star:feasibility closed ∧ no open FATAL ∧ draft sections complete。Velocity 是每个 champion-week 的 decisive-evidence delta;review efficiency 是 (FATAL+REFRAME)/R4-shift。它们可以影响调度,不能取代科学判断,更不能成为 proposal 成功的声明。