Skip to content

pm-dispatch SKILL:spec 车道串行接力一夜(10 PR)沉淀的六条缺口 —— 接力模式、锚点措辞、裁决传播扫描、停摆纠偏、飞行中重叠、预期红停放 #5441

Description

@os-zhuang

2026-08-04/05 夜 spec 车道以串行接力连落 10 个 PR(#5304#5306#5308#5318#5319#5321#5314#5312#5323#5365),全程按 pm-dispatch SKILL 执行。现行 SKILL 的合并队列判读、os-regen 四步、跟到 MERGED、限流规程等条目全部命中、无需改;但以下六个情形是 SKILL 没有覆盖、本夜靠现场即兴的,各有实付学费,建议按序补进(每条已注明落点章节)。查重:与 #5095(域表)、#5130(决策轴)不重叠。

1. 串行接力模式(新小节,平行于「入队与落地」)

现行 batch 模型假设同批 file-disjoint 并行;而「多个已实现 PR 全碰 packages/spec 生成物」的形态只能串行接力:一次只放行一个,每合并一个即向下一棒发接力指令(merge main + §9 重建 + 全套验证 + 兄弟断言复核 → PM 复核回报 → 转 ready + 挂 auto-merge)。要点:

2. authorable-surface 锚点断言的正确措辞(补进「入队与落地 A」)

#5304 落地树内基线锚点后,接力模板曾用错误断言「baseRev == merge-base」派发,后棒实测证伪并修正。正确措辞(本夜后八棒全部沿用,零误报):

断言 check:authorable-surface 绿即可——锚点 authenticity 的定义是 baseRev 是 origin/main 的祖先 且其 keys 与该 commit 的 surface 逐行一致;baseRev 允许滞后,gen:schema 仅在 keys 漂移时才推进它;⛔ 禁止为凑相等手改锚点文件(那正是 #4650 堵住的攻击本身);不得要求 baseRev == merge-base。

配套两个新陷阱(已立单,SKILL 引用即可):#5370(merge 未 commit 就跑 gen:schema 会把锚点静默倒退回旧 merge-base,全部门放行——四步序必须是「先 commit merge,再整体重生成」)、#5371(gen:schema 的 rmSync 顺手抹掉 gen:openapi 产物,rest 随后 503 假红)。

3. 裁决传播 = 全仓 pin 扫描(补进 step 5 派发词 + step 7 review)

维护者裁决翻转公共语义时(实例:#5322 空组合子从拒收改单位元),旧立场的 pin 不止存在于改动包——消费层(REST 信封测试、objectql、runtime)各有拷贝。#5365 首轮只翻了 service-analytics 层,REST 层 analytics-filter-refusal-envelope.test.ts 的拷贝在 CI 上红(expected 200 to be 400),补一轮才清零。规则两条:

  • 实施裁决的派发词必须含「全仓扫描同语义 pin(grep 错误码/错误消息,如 INVALID_FILTER)并一次翻完」;
  • 翻 pin 必须保留承重:断言新语义的实质(行数/译文),不是删掉旧断言了事;真正无效形状的拒收断言原样保留,守卫点覆盖不缩。

4. subagent 停摆纠偏(补进 step 6 Collect 的 subagent 半边)

os-dev 以「后台 watcher 会唤醒我」为由中途停止时,watcher 永不触发(完成通知本身即意味着无存活子任务)——本夜四个 agent 共停摆 6 次,全靠 PM 手动唤醒。两条:

  • 长验证管线的派发/接力指令写明「前台(阻塞)同步执行全部步骤,中途不停止、不把构建/测试挂后台等唤醒」;
  • 完成通知携带的是中途状态("build still in progress"、"I'll resume when...")即为停摆信号:立即 SendMessage 恢复并附上述指令,不等 50 分钟阈值。第三次停摆视为不可靠,重派新 agent 接管分支(接手协议同「Handing off an interrupted dev」)。
  • 同一修正应同步落到 .claude/agents/os-dev.md(生产端修复优于 PM 端补救,PD Add comprehensive test suite for Zod schema validation #12)。

5. 飞行中范围重叠拦截(补进 step 5「same-day churn」段的姊妹段)

现行「same-day churn goes INTO the prompt」只管派发时刻;main 一天 ~18 合并,飞行中同样会撞。实例:#5322 的 agent 23:17Z 起飞,#5335(同两个编译器、四格中两格)00:0xZ 合入——PM 例行核查读 main log 发现重叠,立即 SendMessage 预警(合 main 重测矩阵、读对方 diff 定边界、只补未覆盖部分、被完全覆盖则停下回报勿硬造 diff)。agent 两次收窄范围、弃自研方案改在对方体系上最小 diff 重放。规则:PM 每轮核查 git log origin/main 时,对每个在飞 dispatch 做一次「新落地 PR × 在飞范围」的相交判断,相交即发预警——晚一轮就是一次返工。

6. 依赖 PR 的「预期红」停放(补进「入队与落地 B」)

串行链中后棒先行实现、依赖前棒才能转绿的 PR(实例:#5365 四条进表依赖 #5323 的 mongodb 归约):draft 停放,PR body 写明精确的预期红清单(失败测试名 + 报错签名)与解除条件(依赖 PR 合入);每个 CI-failure webhook 到达时与该签名比对——匹配则静默跳过,新签名才是真问题(#5365 的 REST 红正是靠这个对比识别为新问题的);依赖合入后走「最后一轮同步 → 红清 → ready + auto-merge」。这是 notes 2「flaky 签名」纪律在故意红上的对偶,现行文本只覆盖了前者。


六条的实付学费:错误锚点断言若未纠正会教唆手改锚点(#4650 攻击自身);#5365 的 REST 红多花一轮 CI;6 次停摆合计拖慢约 1.5-2 小时;#5335 重叠若晚发现即重写返工。均为一次性成本,固化进 SKILL 后消失。

关联:#5370#5371#5388(裁决传播的边缘残留实例)、#5095#5130(同文件待改事项,可合并施工)。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions