Skip to content

Commit babffa4

Browse files
os-steveclaude
andauthored
docs(pm-dispatch): write the two ruled main-red incident conventions into the protocol text (#12406)
Encodes the maintainer ruling (2026-08-25, verbatim 「同意」): a p0 fix-forward PR for a main-red gate may jump the merge queue (GitHub's queue supports jump-the-queue) or go to the maintainer for a break-glass one-line direct merge — an exception for MAIN-RED REPAIR ONLY, loosening nothing else; and a main-red incident is anchored on ONE card named by the failing check — first filer wins, later discoverers comment their readings on the anchor instead of filing. landing-operations.md §B gains the two-convention paragraph, each convention carrying the ruling's date + verbatim quote. SKILL.md gains two line-level pointers at zero net lines: the queue-only landing paragraph (whose incident anecdote already named fix-forward) and the stop-bleed-and-file line both now point at landing-operations B. Both files sit at a shrink-only line ceiling with zero headroom (1005/1005, 80/80). The addition is paid by cutting genuinely redundant content, each cut keeping another home: the os-regen driver's silent-drop sentence (home: SKILL.md's own pointing bullet + AGENTS.md #11), the four-step enumeration (home: os-regen-merge.sh, the named in-repo authority, + AGENTS.md #11), the MERGE-state trap's mechanism parenthetical (home: os-dev.md standard terms), the job-conclusion and timer-discipline parentheticals (homes: SKILL.md's own rows), the ready/auto-merge order sentence (homes: platform-readings + AGENTS.md #7), the mergeable_state lazy-read and enable-verification detail (home: platform-readings rows), and section C's context sentence + restated rationale (home: SKILL.md's signature-level summary row). Net bytes: SKILL.md +136, landing-operations.md -100. Claude-Session: https://claude.ai/code/session_01JANH3y7qe3MD8aLaLXci8N Co-authored-by: Claude <noreply@anthropic.com>
1 parent 2e24115 commit babffa4

2 files changed

Lines changed: 28 additions & 28 deletions

File tree

.claude/skills/pm-dispatch/SKILL.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,9 @@ fire 一轮烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位
165165
据(「若 X 则 Y」),其余指针化
166166
(座位贴为唯一状态源);⛔ 不写结论、不含未经重读即可执行的祈使句。
167167
- **放行认门禁 job 的结论,不认聚合读数**(承载门禁族的 job 须 `completed: success`,`in_progress`
168-
不算;聚合只作阴性筛查,放行按名定向读单条 job,⛔ 不拉全表);advisory 门禁红着合并进 main
169-
是共
170-
享损伤,任何车道发现都立即止血 + 立单;落地两个读数与踢出重投的签名纪律见事实表。
168+
不算;聚合只作阴性筛查,放行按名定向读单条 job,⛔ 不拉全表);advisory 门禁红着合并进
169+
main 是共享损伤,任何车道发现都立即止血 + 立单(main-red 跳队与锚卡两约定见
170+
landing-operations B);落地两个读数与踢出重投的签名纪律见事实表。
171171
- **dev 自己死了 ≠ 维护者中止**:子代理消失(零推送/零分支/无报告)是正常死法,走死认领回
172172
收;「维护者中止」只在有显式信号(原话,或宿主回报 stopped by the user)时成立 —— 判据是
173173
信号不是症状,⛔ 不得据推断立一道没有重启条件的门。
@@ -776,7 +776,7 @@ os-zhuang 审核。我的手机github 应该会收到推送消息吧」;当日
776776
队列强制的地板,不是 PM 放行的门槛;非必查门的红要么是真缺陷要么是坏门,两者都归 PM 入
777777
队前处置(实测:一张 required 全绿、非必查类型门与一个测试分片红着的 PR 经队列落地,该仓
778778
main 红了约一小时,逐 PR 连环红到 fix-forward 才止)。本段只适用本循环派发的 dev PR;PM 自己的
779-
工具 PR 留维护者。
779+
工具 PR 留维护者。main-red 修复的跳队例外与事故锚卡约定见 landing-operations B。
780780

781781
**入队与落地(细则见 `references/landing-operations.md`,落地窗口查阅)。** 原则:
782782

.claude/skills/pm-dispatch/references/landing-operations.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,12 @@
88
批次选择只保证同批 file-disjoint,管不到先后两单都碰生成物(协议变更几乎必然)。
99
`merge=os-regen` 路径清单**当场读**:`grep os-regen .gitattributes`(唯一权威清
1010
单,⛔ 不抄进派发令当常量 —— 散文没法被类型检查;文档产物同在清单、同样被吞)。
11-
该驱动 merge exit 0、零冲突标记,却**静默丢掉一侧改动** —— 只有重新生成才暴露。
1211

13-
四步序已机械化:`bash scripts/pm/os-regen-merge.sh` —— ① `git merge origin/main`
14-
(⛔ 禁 rebase / force-push);② 生成物 `git checkout origin/main -- <路径>`;③
15-
**先 commit 掉 merge**;④ 整链重生成 + 生成物门禁全绿。顺序防的陷阱:
12+
四步序已机械化:`bash scripts/pm/os-regen-merge.sh`(⛔ 禁 rebase / force-push;
13+
步骤以脚本自身为权威)。顺序防的陷阱:
1614

17-
- **MERGE 状态下跑 `gen:schema` 会把 authorable-surface 锚点静默倒退回旧分叉点**
18-
(HEAD 仍是合并前分支 tip),倒退后的锚点**依然 authentic**、全部门放行 ——「先
19-
commit 再重生成」的由来。
15+
- **MERGE 状态下跑 `gen:schema` 会把 authorable-surface 锚点静默倒退回旧分叉点**,
16+
且全部门放行 ——「先 commit 再重生成」的由来。
2017

2118
重生成后**断言所有兄弟单的条目都还在**;更硬的旁证是查**上一单的实现体**完好(带
2219
引号精确名 `git grep … origin/main -- <实现文件>`)—— 条目是索引,实现体才是被吞
@@ -27,19 +24,16 @@
2724
## B. 跟到 MERGED 为止;入队后的看护归车道 PM 落地窗口
2825

2926
车道 PM 的权责:验收(复核清单);**首次入队** —— ACCEPT 后挂 6–9 分钟 flip 定点,到点核门禁
30-
job 结论(承载门禁族的 job `completed: success`),绿即转 ready + 挂 auto-merge,未绿阶梯重挂;
31-
CI success webhook 不可靠,⛔ 不坐等不忙轮询;定点文本照定时器写法纪律(幂等开头、只写判
32-
据);确认 **MERGED** —— 每轮同时读队列分支与 `origin/main` 两个读数。ready 与 auto-merge 顺
33-
序不可反(转回 draft 会同时掉 auto-merge 与队列成员资格)。**契约复审链 PASS 落地的 PR 到窗
34-
口时已 ready + auto-merge 在挂**(清标与落地同一笔,见 `contract-review.md`)—— 窗口自身权责
35-
不变:跟到 MERGED、踢出处置、落地后对账。
36-
37-
**转 ready / 挂 auto-merge 之前先读 `mergeable_state`**:`dirty` ⇒ 先 merge `origin/main`
38-
(生成物在面上按 A 的固定序)再挂;`unknown` ⇒ 重读一次(惰性计算,事实行见平台读数)。
39-
**ready + 全绿 ≠ 已入队 —— 队列从不主动拉 PR,入队是显式动作。**`enqueued` 事件按序查:
40-
`mergeable_state` 是否 `dirty`;② enable-auto-merge 调用根本没落地(GraphQL、吃配额、回显
41-
两向不可靠,按既有陷阱行重发一次,以 timeline 事件验证,⛔ 不看 `auto_merge` 字段);③ PR
42-
`.github/workflows/**` 而 token 缺 workflows 权限。
27+
job 结论,绿即转 ready + 挂 auto-merge,未绿阶梯重挂;CI success webhook 不可靠,⛔ 不坐等不忙
28+
轮询;定点文本照定时器写法纪律;确认 **MERGED** —— 每轮同时读队列分支与 `origin/main` 两个
29+
读数。**契约复审链 PASS 落地的 PR 到窗口时已 ready + auto-merge 在挂**(清标与落地同一笔,见
30+
`contract-review.md`)—— 窗口自身权责不变:跟到 MERGED、踢出处置、落地后对账。
31+
32+
**转 ready / 挂 auto-merge 之前先读 `mergeable_state`**(事实行见平台读数):`dirty` ⇒ 先 merge
33+
`origin/main`(生成物在面上按 A 的固定序)再挂。**ready + 全绿 ≠ 已入队 —— 队列从不
34+
主动拉 PR,入队是显式动作。**`enqueued` 事件按序查:① `mergeable_state` 是否 `dirty`;
35+
② enable-auto-merge 调用根本没落地(重发与效果验证序列见平台读数);③ PR 碰
36+
`.github/workflows/**` 而 token 缺 workflows 权限。
4337

4438
**确认 MERGED 的同一动作里给 `Part of` 卡收口**(`Fixes` 卡 GitHub 代关、标签随
4539
卡离开在飞视图):`Part of` 卡开着不摘 `pm:dispatched`,就把无在飞物的卡永远算在
@@ -61,12 +55,18 @@ CI success webhook 不可靠,⛔ 不坐等不忙轮询;定点文本照定时器
6155
告已收复核,⛔ 合并前不归档(活会话是 dirty 自救的执行手;误归档可 unarchive,但
6256
容器现场已失,宁晚勿早);暂停/交接把在挂订阅清点进座位贴,⛔ 不留孤儿订阅。
6357

58+
**main-red 事故两条约定**:① **p0 fix-forward 允许跳队**(维护者 2026-08-25「同意」):main 红的
59+
止血 PR(p0、机械、根因已核实)可跳队(GitHub 队列自带 jump-the-queue),或按既有 governed
60+
例外由维护者人工直合一行修复 —— 排在事故自己堵住的队列后面是具名反模式;仅限
61+
main-red 修复,⛔ 不放宽其它任何 PR 的 queue-only 落地。② **一个失败 check 只锚一张卡**(维
62+
护者 2026-08-25「同意」):main-red 事故按失败 check 名锚一张卡,先立者赢;后见者把读数评论
63+
到锚卡上,⛔ 不另立。
64+
6465
## C. 依赖前棒才能转绿的 PR:draft 停放 + 签名级预期红清单
6566

66-
串行链里后棒常常先行实现。这种 PR **停在 draft**,PR body 写两样:**精确的预期红
67-
清单**(逐条失败测试名 + 报错签名 ——「几条测试会红」不够用)与**解除条件**(「依
68-
赖 PR #N 合入」)。每个 CI-failure 事件与清单比对 —— 签名匹配静默跳过,**新签名才
69-
是真问题**。依赖合入后:最后一轮同步 → 红清零 → 转 ready → 入队。
67+
这种 PR **停在 draft**,PR body 写两样:**精确的预期红清单**(逐条失败测试名 + 报错签名)与
68+
**解除条件**(「依赖 PR #N 合入」)。每个 CI-failure 事件与清单比对 —— 签名匹配静默跳过,
69+
**新签名才是真问题**。依赖合入后:最后一轮同步 → 红清零 → 转 ready → 入队。
7070

7171
## D. 串行接力:多个已实现 PR 全碰生成物时,一次只放行一个
7272

0 commit comments

Comments
 (0)