From b02ba2dd5d4afb2de6a70005b339b85b8a44ae86 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 30 Oct 2026 01:32:47 +0000 Subject: [PATCH 1/2] pm-dispatch(contract-review): a FAIL on the current head, or a head move that changes the reviewed surface, disarms auto-merge at once MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An armed PR stayed in the merge queue after a delta contract review on its current head came back FAIL, and the queue landed that head. The rules said a PASS must name the current head before landing, but said nothing about a PR that is already armed when that stops being true. - contract-review.md: the head-move exception bullet now also carries the disarm. A non-exception head move, or a FAIL on the current head, while auto-merge is armed: the dispatching seat disarms on reading it, by the AGENTS.md disarm sentence (disable auto-merge and convert to draft; a queued PR goes to the maintainer for hand removal). The FAIL record names the disarm. Re-arming follows landing check ①. - Paid in place: the marker section's two restatements (the card-copy clause, implied by the single carrier; and the queue-only-reads-records clause, restating check ① and "not a gate") fold into one line. Line count stays 60. - landing-operations.md: the PASS/FAIL outcome line says FAIL disarms. - SKILL.md: the head-move clause in ③ says disarm, then wait. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_016WV4cwDXbDuhAz7Zn6Dv8i --- .claude/skills/pm-dispatch/SKILL.md | 2 +- .claude/skills/pm-dispatch/references/contract-review.md | 6 +++--- .claude/skills/pm-dispatch/references/landing-operations.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 0d4178a98b9..b1c85d4a92e 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -197,7 +197,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 批准后再推亦不过期;席位落地 = 过落地前检、清标、ready、auto-merge,踢出/变基同法。 - ③ 请审 = 席位交棒:ACCEPT 与现 head 同形 PASS 俱在案后,中继 `pr_request_reviewers` 请审批人。 - 作者是审批人 ⇒ `assign` 它、请其余(请它必 422);⛔ 永不派/请席位自身账号;Tier S 不交人。 -- `pr_create` 不请不派;`pr_ready` 只补交棒漏;PASS 后 head 移 ⇒ 回等复核;脱中继 PR 自读请/派。 +- `pr_create` 不请不派;`pr_ready` 只补交棒漏;PASS 后 head 移 ⇒ 撤挂回等;脱中继 PR 自读请/派。 - 速读「需要你做的」求批点名 PASS 评论 id+`Head-sha`;无 PASS ⇒ 写 contract review owed 不求批。 - ④ 轮次报告单列 awaiting a human merge。 - skills 车道自有 PR:纯代码面如 `scripts/pm/` 由本席按达档自审(清单不减)后落地。 diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 91ff51dfc0a..30c5ad974ac 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -46,7 +46,8 @@ - ④ 恒由起草者之外的 agent 达档跑,起草已达档不免;喂入同上,⛔ 不喂起草者的结论。 - 轮次报告设复审清单专节,与呈裁清单同为强制审计。 - 请审/求批与落地前检两条,过则 Tier S 入队、Tier H 等人批:① 现 head 同形达档 PASS 在案。 -- 例外:纯重生成或只动上列散文面的 head 后移原记录继续管;PR 落 `Regen-provenance:` 行。 +- head 后移:纯重生成或只动散文面则原记录续管,落 `Regen-provenance:` 行;余移或现 head 落 FAIL + 而已挂 auto-merge ⇒ 派发席读到即照 AGENTS.md disarm 句撤挂,FAIL 记录点名撤挂;重挂照 ①。 - ② PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。 - 签名 = 失败步 + 首错行,读 base check runs 的 API ⛔ 不凭口述;主干红止血立单不变。 - 落地时仍欠复核的 PR 在落地 head 复审,车道席或分诊按 (a)(b)(c) 接;FAIL ⛔ 不修已关 PR。 @@ -54,7 +55,6 @@ ## 等复核标记 `needs:contract-review` -- 只作等复核标记,⛔ 不是闸门;单载体 = PR,卡上副本在规则外、不是要求。 +- 只作等复核标记,⛔ 不是闸门:无 check、workflow 或队列守卫读它与认领/hold 行;单载体 = PR。 - 挂:ACCEPT 时条款②任一肢命中而现 head 无同形 PASS 在案 ⇒ 派发席同笔挂于 PR。 - 摘:现 head 同形 PASS 在案 ⇒ 写记录的席同笔摘;PR 合并或关闭 ⇒ 派发席摘;FAIL 不摘。 -- ⛔ 无 check、workflow 或队列守卫读标记与认领/hold 行;入队只认同形记录,标记有无不改判。 diff --git a/.claude/skills/pm-dispatch/references/landing-operations.md b/.claude/skills/pm-dispatch/references/landing-operations.md index cd2c2fe7873..194b317b808 100644 --- a/.claude/skills/pm-dispatch/references/landing-operations.md +++ b/.claude/skills/pm-dispatch/references/landing-operations.md @@ -9,7 +9,7 @@ - 路径肢 = diff 触及契约面 `packages/spec/src/**` 非测试,含 error-code-ledger、`*.zod.ts` 契约 schema。 - 声明肢 = 认领评论声明 `Clause-②: yes`,与路径无关;错误的 `no` 是可审计的假申报。 - 子代理起不来 ⇒ 复核缺席,PR 带 `needs:contract-review` 留 draft 队列外;旁路仅维护者逐次亲审 -- PASS ⇒ Tier S ready、auto-merge;Tier H 经 SKILL.md ③ 交棒请审;FAIL ⇒ 补丁轮;⛔ 免复核不放行。 +- PASS ⇒ Tier S ready、auto-merge;Tier H 经 SKILL.md ③ 交棒;FAIL ⇒ 撤挂,补丁轮;⛔ 免复核不放行。 - 落地后才见欠复核 ⇒ 按 `contract-review.md` 复审落地 head、发现立新卡,⛔ 不修已关 PR。 - DELIBERATE CORRECTION 红(`check-empty-changeset`)⛔ 不等维护者;确认件皆须点名每个被改 note: - diff 只改 release 文字或注释者:派发席 ACCEPT 确认,逐句引改前与改后,免第二次同 head 复核。 From 5855983ea638542cd6fb4c3a67d1846892a51395 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 30 Oct 2026 01:57:10 +0000 Subject: [PATCH 2/2] pm-dispatch(contract-review): fold the review's three should-fixes into the disarm rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - landing-operations.md: the dirty-merge step (merge origin/main and push at once) is the act that moves an armed PR's head, so it now points at the contract-review head-move bullet for the disarm and re-arm. Paid in the same file by deleting the Part-of rationale line, a consequence statement whose rule the lines beside it already carry. - SKILL.md:200 names the exception: a non-exception head move disarms, so a byte-exact regeneration read from SKILL.md alone no longer reads as one. - contract-review.md: the bullet is now spelled as the head-move exception (so SKILL.md's 非例外 resolves to it), and the FAIL record names the disarm as owed, since the review seat writes before the owning seat acts. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_016WV4cwDXbDuhAz7Zn6Dv8i --- .claude/skills/pm-dispatch/SKILL.md | 2 +- .claude/skills/pm-dispatch/references/contract-review.md | 4 ++-- .claude/skills/pm-dispatch/references/landing-operations.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index b1c85d4a92e..475f8fd1a8a 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -197,7 +197,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 批准后再推亦不过期;席位落地 = 过落地前检、清标、ready、auto-merge,踢出/变基同法。 - ③ 请审 = 席位交棒:ACCEPT 与现 head 同形 PASS 俱在案后,中继 `pr_request_reviewers` 请审批人。 - 作者是审批人 ⇒ `assign` 它、请其余(请它必 422);⛔ 永不派/请席位自身账号;Tier S 不交人。 -- `pr_create` 不请不派;`pr_ready` 只补交棒漏;PASS 后 head 移 ⇒ 撤挂回等;脱中继 PR 自读请/派。 +- `pr_create` 不请不派;`pr_ready` 只补交棒漏;非例外 head 移 ⇒ 撤挂回等;脱中继 PR 自读请/派。 - 速读「需要你做的」求批点名 PASS 评论 id+`Head-sha`;无 PASS ⇒ 写 contract review owed 不求批。 - ④ 轮次报告单列 awaiting a human merge。 - skills 车道自有 PR:纯代码面如 `scripts/pm/` 由本席按达档自审(清单不减)后落地。 diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 30c5ad974ac..2ee3a4dfdcd 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -46,8 +46,8 @@ - ④ 恒由起草者之外的 agent 达档跑,起草已达档不免;喂入同上,⛔ 不喂起草者的结论。 - 轮次报告设复审清单专节,与呈裁清单同为强制审计。 - 请审/求批与落地前检两条,过则 Tier S 入队、Tier H 等人批:① 现 head 同形达档 PASS 在案。 -- head 后移:纯重生成或只动散文面则原记录续管,落 `Regen-provenance:` 行;余移或现 head 落 FAIL - 而已挂 auto-merge ⇒ 派发席读到即照 AGENTS.md disarm 句撤挂,FAIL 记录点名撤挂;重挂照 ①。 +- head 后移例外:纯重生成或只动散文面原记录续管,落 `Regen-provenance:` 行;余移或现 head 落 FAIL + 而已挂 auto-merge ⇒ 派发席读到即照 AGENTS.md disarm 句撤挂,FAIL 记录点名欠撤挂;重挂照 ①。 - ② PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。 - 签名 = 失败步 + 首错行,读 base check runs 的 API ⛔ 不凭口述;主干红止血立单不变。 - 落地时仍欠复核的 PR 在落地 head 复审,车道席或分诊按 (a)(b)(c) 接;FAIL ⛔ 不修已关 PR。 diff --git a/.claude/skills/pm-dispatch/references/landing-operations.md b/.claude/skills/pm-dispatch/references/landing-operations.md index 194b317b808..7fb4e974850 100644 --- a/.claude/skills/pm-dispatch/references/landing-operations.md +++ b/.claude/skills/pm-dispatch/references/landing-operations.md @@ -61,7 +61,6 @@ - ② enable-auto-merge 调用根本没落地,重发与效果验证序列见 `platform-readings.md`。 - ③ PR 碰 `.github/workflows/**`:令牌常驻 `workflows: write`(裁决评论 6104822731),仍拒即授权漂移。 - 确认 MERGED 同一动作里给 `Part of` 卡收口、`Fixes` 卡代关但标也须摘,⛔ 不拆到下轮巡检。 -- `Part of` 卡开着不摘 `pm:dispatched`,无在飞物的卡就永远算进 `label:pm:dispatched is:open`。 - 摘标换回 `pm:queue` 或按剩余物定级,加一条写清交付了什么、剩下归谁的评论。 - 同刻读相关卡 `closed_by_pull_requests`,确认没有卡被正文闭合关键词误关。 - 每次合并后重拉一次车道盘点与预期状态对账,⛔ 不留给下轮巡检。 @@ -70,6 +69,7 @@ - MERGED 不是终点:发版后义务见 `release-aftercare.md`。 - PR 开出至 MERGED,每看一眼(唤醒/巡检/报告前)同读检查与 `mergeable_state`;`unknown` 即重读。 - `dirty` ⇒ 当即合 `origin/main` 推新提交,⛔ 不等冲突通知;未见非 `dirty` ⛔ 不报无需你做。 + 这一移 head 的撤挂与重挂照 `contract-review.md` head 后移例外条。 - MERGED 或关闭即退订,同刻把 `mode:cloud` 派的会话 `archive_session`。 - 触发条件是卡终局且报告已收复核;⛔ 合并前不归档,误归档可 unarchive 但容器现场已失。 - 暂停或交接时把在挂订阅清点进座位贴,⛔ 不留孤儿订阅。