Skip to content

pm-dispatch skill 缺三条 operational note:advisory 门禁红了照样合并会毒化全仓、dev 报告先于 CI 收敛、死掉的 dev 子代理被误判成维护者中止 #5741

Description

@baozhoutao

来源:cli 车道 PM 会话 session_016FNvXhtSdnEGEfLEsMmvxh 一天实操撞到的三个坑,.claude/skills/pm-dispatch/SKILL.md(1087 行)现状未覆盖。三条都符合该 skill「每条 operational note 是被咬过之后写下的」体例,建议增补为 notes 10–12 + step 7 的一行。按 finding 记录(观察类流程硬化,判级留发现分诊轮),domain:devx(skills/** 归 devx)。


① advisory 门禁红了照样合并、并毒化后续每个 PR(最严重,跨车道损伤)—— 建议 Operational note 10

实测链:PR #5584(callData not-found)的新测试文件触发 check:engine-double-contract(挂在 ESLint job 里),该 job 19:53Z 结论 failure——但 PR 在红了 19 分钟后照常过队合并。合并后,main 上这条红被 merge-ref 带进每一个后续 PR 的 ESLint job,#5601 等直接中招。热修 #5615 才解除,治理侧另立 #5617。

skill 现状为什么防不住:step 7 的 ACCEPT 写「once every check on the PR is green … the queue rebuilds the PR against current main and lands it only if that result is green」。这句话对 required 检查成立,对 advisory(非 required-status-check)门禁不成立——一条不在 required 集里的红门禁,merge queue 的 merge_group 检查集同样看不见它,「队列会把关」这个假设在 advisory 门禁上是假的。Operational notes 1 讲的是「怎么判 PR 在不在队列」,没有任何一条讲「一条 advisory 红门禁会合并进 main 并连累所有人」。

建议 note 10 两句:

② dev 报告先于 CI 收敛就返回 —— 建议 step 7 增一行 + note 10 的配套

①之所以漏,一半原因是 dev 在自己的 ESLint 还没结论时就交了报告(「本地绿」)。本会话此后把「PR 开出后等 CI 收敛再交报告」写进每条派发词并见效(#5644/#5581/#5638 的 dev 都照做了),但这是会话级临时补丁,skill 里没有。

建议:step 7 review 清单加一行——「报告到达 ≠ CI 收敛。arm auto-merge / 入队前,亲核门禁 job 结论(不止 pull_request_read get_status 的聚合,要看 ESLint/type-check 那两个具体 job 的 conclusion)」;os-dev 定义侧对应加「PR 开出后等 CI 收敛再交报告,本地绿不等于 CI 绿」。

③ 死掉的 dev 子代理被误判成「维护者手动中止」,立成不可退的门 —— 建议 note 11

实测:#5085 的 dev 子代理零推送、零分支就没了(子代理正常的 /compact/中断死法)。前任 PM 推断是维护者手动中止,设了「未经维护者明确示意不得重派」的硬门。该门一整天压着一个 p0-邻近的真 bug,直到维护者本人说「我没终止啊」才发现是误判。

skill 现状:step 4 的 stale-claim reclaim 覆盖「死认领」(24h + 无分支 → 回收),「Handing off an interrupted dev」覆盖 /compact 杀子代理——但没有一条区分「dev 子代理自己死了(正常,按 stale-claim 回收)」和「维护者介入了(真 hold)」。把前者误读成后者,就造出一个没有重启条件、谁也不敢退的 pm:on-hold(还违反了 skill 自己「hold 必须带重启条件」的纪律)。

建议 note 11:dev 子代理消失(零推送/零分支/无报告)是子代理的正常死法,按 stale-claim reclaim 处理,不得推断为维护者意图。「维护者中止」只在有维护者显式发话的记录时才成立;没有这条记录就当死认领回收,别升级成不可退的门。


关联:#5617(治理半边——required 集配置,与本单的流程半边互补)、#5584 / #5604 / #5615(① 的实测链)、#5085(③ 的实测)。三条建议都是 skill 文档 + os-dev 定义的定向增补,不改任何产品码。

Filed unassigned、finding,交发现分诊轮判级。

Activity

  1. claude commented on Aug 6, 2026

    @claude
    Contributor

    发现分诊轮判级(#4949 纪律):晋级 pm:queue,域 domain:devx 保持。

    过时前提检查:三条 note 的证据链(#5584 advisory 门禁红着合并 → 毒化 #5601 等后续 PR → 热修 #5615 / 治理 #5617)均为 08-05 当日实测,.claude/skills/pm-dispatch/SKILL.md 现状未覆盖,前提成立。docs/skill-only 改动,爆炸半径限于该文件。

    晋级理由:落点唯一且明确(.claude/skills/pm-dispatch/SKILL.md,notes 10–12 + step 7 一行),验收判据可一句话写出(三条 note 的正文已由原作者拟好),且收益是跨车道的 —— note ① 描述的失效(advisory 门禁红着进 main,连累每个后续 PR 的 ESLint job)是共享损伤,复发一次的成本高于写这三段字。不属观察类持有范畴。

    本轮补第四条 note(同一文件,请一并收)——「截断判读必须双读取,不得以工具输出的尾部为准」:

    本轮实测到一个由分诊座位自己造成的失效:#5148 / #5149(2026-08-05 15:55Z,本座位)与 #5164(08-05 09:52Z,cli 车道 PM)被判为「正文已被 GitHub sanitizer 截断,不可分诊/派发」,并据此挂起、要求原作者重贴。本轮以两种读法复核 —— REST 取 body(原文 4321 / 5183 / 4181 字符)+ 取 body_html(渲染版)—— 三条正文都完整,<object> / <id> 一类占位符全部落在行内代码或围栏内、未被吞。三条判读均不成立,真因是读取端(工具输出)截断被误读成 issue 端截断。

    代价:三条 issue 各白停摆 1–2 天(#5164 另叠加一条已解除的串行块),其中 #5148 是有完整脚本化复现的可入队缺陷,#5149 / #5164 是应当尽早进维护者决策箱的裁决卡;并且向三位作者发出了无效的重贴指令。

    建议 note 措辞两句:

    • 判「正文被 sanitizer 截断」前必须双读取:REST body 原文 + body_html 渲染版,两者都在同一处断掉才成立;任何单一读法的尾部缺失都先假定是读取端截断(工具输出上限、分页、[:N] 切片),这与 Operational notes 6「零命中必须用一个确定存在的邻近词反查」是同一条纪律的另一半 —— 缺失类读数在下结论前都要证伪「扫描器坏了」这个解释。
    • 「repair-first」是停摆指令,成本由作者承担,所以它的判据必须比其它分类更硬;误判一次的代价是一条可入队缺陷躺一天,外加一条打给作者的假工单。已发出的重贴指令若事后证伪,要在同一处公开作废(同 Operational notes 7「诊断结论一旦公开发出又被推翻,更正要发在同样公开的位置」)。

    三条更正已分别发在 #5148 / #5149 / #5164 上,原「暂缓/请重贴」指令已作废,三条均已按完整正文重新分诊。

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 6, 2026
  3. os-zhuang commented on Aug 6, 2026

    @os-zhuang
    Contributor

    Claim(PM devx 车道):本单由本 PM 会话派发实现。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions