diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 3c1f0fed2f..1281fe3f6f 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -514,6 +514,43 @@ notes 6 的对照反查),等读数回贴再派;⛔ 不因「查不了」就当 - 代价参照:#6034 首例在识别出签名之前静默停摆约 1 小时。工具行为在平台侧,仓内 能做的就是把签名与处方钉在这里,免得每个新 PM 会话重踩一遍。 +**22. 踢出但 Actions 里找不到属于该 PR 自己的 merge_group run = 队列重建误伤, +受理一次带回执的重投;notes 21 的翻转处方在规模上成立。** services 车道 +2026-08-10 单班续证两件事。其一,全绿 PR 的空字段武装签名 + 翻转一次,本班命中 +该签名的每一例(6+)翻转后全部入队落地 —— 处方从「三例三中」升级为跨车道稳定 +复现,可当默认动作。其二,新增一个踢出签名:PR 被移出队列,但 Actions 里 +**没有属于它自己的 merge_group run**(同批同伴的 run 全 success)—— 这是队列 +重建把它顺带取消的误伤,不是它红了(#7311 实测:翻转重投一次即落地)。处置: +PM 当场翻转重投**一次**,并在 PR 上留一条签名判读回执(读了哪些 run、为何判 +重建误伤),供管家台账对账;同一 PR **第二次**被踢 ⇒ 停手移交队列管家 +(#5810)走签名台账。⛔ 不无回执地反复重投 —— 无回执的重投在管家看来与 +flaky 硬重试不可区分,污染它的查表。 + +**23. 同账号多会话的认领竞态 —— 仲裁只认 claim 评论里的会话 ID 与时间戳, +输方让出并留交接。** 所有座位共用一个 GitHub 身份,assignee 字段在两个会话 +之间零信息量 —— 它同时「在双方名下」。#7145 实测:两个会话相隔 69 秒各自 +assign + 贴 claim,唯一可判的先后是双方 claim 评论的时间戳与会话 ID —— +先贴者得,与 assignee 无关。输方的义务不止于撤手:把自己已做过的判读(同包 +在飞 PR 的 region 声明、结对纪律等)整理成交接评论贴在卡上再走,让赢方不必 +重扫一遍。这是 CLAUDE.md「re-read the comments」条款的 PM 对 PM 版:座位 +之间同样会撞,撞了以评论时间戳裁,⛔ 不以「assignee 是我」续作。 + +**24. 生产者强制的面外文件是合法搭载,不是 REWORK —— 三判据齐备再收,收了 +补跨席声明。** #7102(PR #7224)铸新错误码,ADR-0112 D3 要求错误码台账行与 +铸码**同 PR** 落地,而台账在 `packages/spec` —— 派发面之外。受理判据三条 +**齐备**才算:(1) dev 在报告与 PR 正文**高声申报**(落点、依据条款、为何无 +替代);(2) 有 ADR/注册表条款把搭载定为**强制**,不是「顺手也改了」;(3) 不 +存在不破坏原子性的拆分方案(拆开会让 main 出现悬空半态)。三条齐备 ⇒ ACCEPT, +PM 按 #6532 先例补跨席声明(spec 面恒归 spec 座位,声明不是走过场);缺任何 +一条 ⇒ 按面外改动正常打回。与前文 #5586 的「生产者在别包」同族异型:那条管 +**落点换包**,本条管**多出一个包**。 + +**25. 本执行环境的 Bash 每次调用重置 cwd —— 一切 git 操作一律 +`git -C <绝对路径>`,⛔ 不依赖 `cd`。** 不止跨仓 grep(前文已有):本班实测 +`cd` 之后的**下一条** Bash 调用已回到主目录,git 命令落在错误的仓/工作树上 +并静默给出「干净」读数 —— 正是 notes 6「缺失类读数」的形状,且不报任何错。 +每条 git 命令自带 `-C` 成本为零,消除整类误读。 + The product spans three repos with a fixed dependency direction: `objectstack` (backend; `packages/spec` is the single contract) → `objectui` (frontend; its build flows back via `pnpm objectui:refresh`) and