Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 28 additions & 31 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ metadata:
| arg | 含义 | 默认 |
|---|---|---|
| `triage` | 以**分诊座位**身份运行(只扫/分类/路由,永不认领) | — |
| `steward` | 以**队列管家**身份运行(只守入队后的落地) | — |
| `<domain>`(如 `spec`、`skills`) | 以该 `domain:*` 车道的**执行座位**身份运行 | — |
| `epic:#<n>` | 以父单 #n 的 **epic PM** 身份运行(见「Epic 子树车道」) | — |
| `label:<name>` | backlog 过滤标签;`label:all` = 全部 open 未认领 | `pm:queue` |
Expand Down Expand Up @@ -156,13 +155,17 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout
正文留档分叉窗口,且 ⛔ pin bump 不做 rider(走专用 bump 脚本连带 override 与 lockfile)。
3. **联动杂事立单,不靠记忆。** 已验收 PR 的产物流向另一仓时,由**接受那个 PR 的执行座位**立即
在消费仓立后续单(带 `Blocked-by:`);`domain:*` 仍由分诊补。
4. **纵向拆分:一个分诊 PM + N 个执行 PM,一人一车道双射**(维护者 2026-08-05 拍板)。分诊座位全
仓唯一,只扫/分类/打标签/拆分/查重/转仓,⛔ 永不认领、永不派发、永不写代码;执行座位信任标签
、只在本车道认领,误标**不自行改**、留言上报。⛔ 借调已删除:突发积压调频率或 `batch`,持续
积压拆域走 PR。姊妹仓是整仓座位(`repo:*`),是本仓 backlog 的唯一分诊/定级生产者。**维护者
直派通道** (2026-08-10 常设授权):维护者当面指挥的 PM 会话直接路由,审计评论逐字引用授权指
令,只对明示指挥的卡成立。分诊空缺时会话型执行 PM 可**代扫**(只做分诊动作,不跨车道认领,座
位贴注明),座位有主立即停止 —— 两个分类生产者并存,单一生产者的保障当场归零。
4. **纵向拆分:一个分诊 PM + N 个执行 PM,一人一车道双射**(维护者 2026-08-05 拍板;2026-08-16 裁
定分诊统一收归一座)。分诊座位**三仓唯一**:objectstack、objectui、cloud 全部 backlog 的分诊/
定级/路由/type 由它一座生产,只扫/分类/打标签/拆分/查重/转仓,⛔ 永不认领、永不派发、永不写代
码。执行座位信任标签、只在本车道认领,误标**不自行改**、留言上报;姊妹仓 `repo:*` 座位收窄为**
执行座位**(在本仓认领/派发/复核/落地,同一套执行座位纪律,⛔ 不产 `domain:*`/type/定级;skills
车道 finding 自分诊例外照旧)。**拆分触发条件预登记**:单轮时长逼近 fire 周期,或某仓在优先级
全序下持续断粮 ⇒ 按仓拆回多席 —— 扩容是记录在案的出口,不是重设计。⛔ 借调已删除:突发积压调
频率或 `batch`,持续积压拆域走 PR。**维护者直派通道**(2026-08-10 常设授权):维护者当面指挥
的 PM 会话直接路由,审计评论逐字引用授权指令,只对明示指挥的卡成立。分诊空缺时会话型执行 PM 可
**代扫**(只做分诊动作,不跨车道认领,座位贴注明),座位有主立即停止 —— 两个分类生产者并存,单
一生产者的保障当场归零。
5. **一块板,不设第二跟踪器(one board, no second tracker)。** pm 标签就是状态机;org Project 只是维护者的聚合视图,权威层坚持 issue 正文 + REST。

**跨座位转移**:工作跨座位线,PM 永不跨(唯一豁免:简单阻塞项直接接手,见「候选与批次」)—— 落到
Expand Down Expand Up @@ -242,7 +245,9 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout

## 分诊座位职责

(执行座位 ⛔ 跳过本节动作 —— 读到标签当既成事实。)
(执行座位 ⛔ 跳过本节动作 —— 读到标签当既成事实。)本节全部职责**对三仓统一执行**(维护者
2026-08-16 裁定):sweep、首触定级、发版板、查重/shadow 检查与代裁通道逐仓各跑一遍;**代裁权限唯
一归本座位**,任何执行座位(含姊妹仓 `repo:*`)⛔ 不代裁。

**Backlog sweep(常设职责,不等请求)。** 每轮扫任一析取命中的卡:① 全裸(无`pm:*`、
无 `needs-user-decision`、无 `domain:*`);② 有 `pm:queue` 无 `domain:*`(**仅限主仓** —— 姊妹
Expand All @@ -252,6 +257,9 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout
状恰是「带域标签无 pm-state」)、全部 `pm:seat` 贴;存量大时每轮限量、优先最新。**紧急卡直接分诊**
(维护者 2026-08-13):维护者点名或 p0 嫌疑 ⇒ 立即起 `claude-fable-5` 分诊子代理,不等 Routine 班
次;授权面 = 分诊本身(定级/路由/标签/既有评论格式),⛔ 不写码不认领;产出落卡,与 Routine 分诊同格式同效力(细则见 `references/dispatch-runbook.md`)。
**跨仓 pin 链的窗口级兜底也在本 sweep**(联动单第一产者仍是接受座位;⛔ 只立单不执行 bump):
objectui pin 落后且其队列已空 ⇒ 在本仓立/刷新 console bump 单;见新 tag 族发布 ⇒ 在 cloud 立
`.objectstack-sha` bump 单;单张封顶(先查同题 open 单,已有就追评刷新),工具链新形态只提请不扩面。

**分类动作**(每张三选一 + 一个修复通道):**`pm:queue`** —— 有具名落点或复现的具体缺陷、范围明确
的工具/门禁修复、恢复不变量的 finding、test-only pin,无可问之事;**`needs-user-decision`** —— 设
Expand Down Expand Up @@ -288,7 +296,7 @@ hold 评论纪律见状态模型,hold 重验只在 `Restart-when:` 命中时发
做优先级渐变 —— 渐变没人维护):「不修它,当前 RC 能不能发?」判阻塞四类:① 用户今天就撞的已发布
面缺陷;② 公开契约 declared≠enforced;③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉
的。拆分/分票时 `target:*` 随工作走,对每一半重跑二元判据,默认继承,不继承按四类写明理由。**每
个 backlog 恰好一个生产者**,⛔ 谁都不扫别人的 backlog;「归零 = 可发版」指三张板都空。鲜度每
张板同归本座位生产**(每板恰好一个生产者的不变量不变);「归零 = 可发版」指三张板都空。鲜度每
~5 轮;**发版时刻 = 清板不是重扫**;清板三选一与 pin 前置细则见 references。

**高置信决策卡的分诊代裁(维护者 2026-08-12 裁定)。** 出处原话:「让他帮我从实际业务需求出发,
Expand Down Expand Up @@ -503,12 +511,18 @@ not-reachable 是设计非故障(维护者 2026-08-11 裁定)⛔ 不复测;**接
merge 再重生成**,顺序防锚点静默倒退与`gen:openapi` 假红两个陷阱);重生成后断言兄弟单条目与
上一单**实现体**仍在;清单当场读 `grep os-regen .gitattributes` ⛔ 不抄进派发令当常量;⛔ 禁
止为凑相等手改锚点文件,⛔ 不得要求 `baseRev == merge-base`(允许滞后)。
- **跟到 MERGED 为止;入队后的看护归队列管家。** 车道 PM 管验收、首次入队(ACCEPT 后挂 6–9 分
flip 定点核门禁 job 结论,绿即转 ready + 挂 auto-merge —— CI success webhook 不可靠,
⛔ 不坐等不忙轮询)、确认 MERGED(两个读数);落地窗口给关键 PR 挂`subscribe_pr_activity`(
- **跟到 MERGED 为止;入队后的看护同归车道 PM 的落地窗口。** 车道 PM 管验收、首次入队(ACCEPT
挂 6–9 分钟 flip 定点核门禁 job 结论,绿即转 ready + 挂 auto-merge —— CI success webhook 不可
靠,⛔ 不坐等不忙轮询)、确认 MERGED(两个读数);落地窗口给关键 PR 挂`subscribe_pr_activity`(
⛔ 不订阅 dev 交报告前的 PR —— 双驾驶员互踩;**MERGED/关闭即退订 + 云
卡 `archive_session`**,⛔ 合并前不归档,不留孤儿订阅);落地后再核一次落地判据仍是车道 PM 的
活(队列合并同样走 os-regen 驱动)。
- **红/踢出处置在同一落地窗口内做**:机器输入是 merge-queue triage workflow 落在被踢 PR 上的分诊
评论(失败签名与计数,细节以该 workflow 头为权威);判据唯一来源是签名台账,优先于现场判断 ——
台账留在其锚点 issue 上作查表数据,**只有人工能升级**(疑似新 flaky 只留提请,⛔ 不自行加表;纯
计数不追记,只有改变修法作用域时才记)。四分支:已知 flaky ⇒ 原样重投;**已修签名再现 ⇒ ⛔ 不重
投**,判新问题重新诊断;基上缺已合修复 ⇒ merge main 推新提交(重跑无效);新签名 ⇒ ⛔ 不重投,
在 PR 与其 `Fixes` 卡各留完整签名与初判;每次处置留审计评论(重投写签名与台账依据)。
- **依赖前棒才能转绿的 PR:draft 停放 + 签名级预期红清单** + 解除条件(「几条测试会红」不够用
);CI-failure 事件与清单比对,新签名才是真问题;依赖合入后同步 → 红清零→ 转 ready → 入队。**
多个已实现 PR 全碰生成物 ⇒ 串行接力,一次只放行一个**:每一棒都是一整圈(每棒重走);相邻两棒交
Expand Down Expand Up @@ -538,23 +552,6 @@ not-reachable 是设计非故障(维护者 2026-08-11 裁定)⛔ 不复测;**接
队前 ref 重验与扇出索引更新;hold 侧读 `Restart-when:`)、在飞/已入队 PR 跟到 MERGED、决策箱仅在报告中列出 ⛔ 不 nag、跨
车道备忘跟进。退场只有两个入口:维护者交接令(走交接收尾清单),或被惰性回收。

## 队列管家职责

三仓一座,管**入队之后**的看护;授权面**只守落地**:⛔ 永不合并、永不 ready/draft 切换、永不把
没入过队的 PR 入队、不碰代码不动认领。

- **红/踢出的签名分诊四分支**(判据唯一来源是管家座位贴的签名台账,优先于现场判断):已知 flaky
⇒ 原样重投;已修签名再现 ⇒ ⛔ 不重投,判新问题通知车道重新诊断;基上缺已合修复 ⇒ 指引 merge
main 推新提交(重跑无效);新签名 ⇒ ⛔ 不重投,在 PR 与其`Fixes` 卡各留完整签名与初判。**台账
只有人工能升级**(疑似新 flaky 只在锚点单留提请,⛔ 不自行加表;纯计数不追记,只有改变修法作用
域时才记)。
- **双向让行**:处置任一 PR 前先读它最近 ~30 分钟评论,对方已在处置就让行留一行;双方每次动作都
留审计评论(重投写签名与台账依据)—— 让行判据始终是 GitHub 上的读数。
- **Pin 链观测的机械产出**(⛔ 只立单不执行 bump):objectui pin 落后且 objectui 队列已空(窗口
收口)⇒ 在本仓立/刷新 console bump 单;观测到新 tag 族发布 ⇒ 在 cloud 立`.objectstack-sha`
bump 单。三边界:单张封顶(先查同题 open 单,已有就追评刷新);联动单第一产者仍是接受座位,本条
是窗口级兜底;工具链新形态只提请不扩面。

## 断粮与跨墙恢复(5 小时用量墙)

出处:维护者 2026-08-11 提问(「首先项目经理能不能查到相关的数据,其次是到达时间窗口工作就会停,
Expand Down Expand Up @@ -677,7 +674,7 @@ pull(今天谁撞上;零拉动默认 defer/ remove);③ AI-agent error-resistanc
|:--|:--|
| `scripts/pm/check-skill-line-ratchet.mjs` | 本文件行数只降不升(`pnpm check:pm-skill-ratchet`);抬上限需维护者裁决引用在 PR 正文 |
| `scripts/pm/check-skill-id-lint.mjs` | 本技能与 os-dev 定义的操作文本 ⛔ 不引用 issue 编号(`pnpm check:pm-skill-id-lint`)—— 经验必须自含 |
| `scripts/pm/check-half-states.mjs` | label/assignee 半状态的 report-only 巡查 |
| `scripts/pm/check-half-states.mjs` | label/assignee/PR 半状态的 report-only 巡查(含已复核就绪却无人落地的孤儿 PR 检测) |
| `scripts/pm/dispatch-gates.mjs` | 文件面 → 该跑的门禁族(派发令取数) |
| `scripts/pm/os-regen-merge.sh` | 碰生成物 PR 的 merge 四步序(防静默吞并与锚点倒退) |
| `scripts/pm/ensure-pm-labels.sh` | pm 标签词表的幂等创建 |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
允许滞后(一行提示,不是错误);⛔ 禁止为凑「相等」手改锚点文件,⛔ 不得要求
`baseRev == merge-base` —— 那个等式不是任何门的判据。

## B. 跟到 MERGED 为止;入队后的看护归队列管家
## B. 跟到 MERGED 为止;入队后的看护归车道 PM 落地窗口

车道 PM 的权责:验收(复核清单);**首次入队** —— ACCEPT 后挂 6–9 分钟 flip 定
点,到点核门禁 job 结论(承载门禁族的 job `completed: success`),绿即转 ready +
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/references/platform-readings.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
复合入后**同一签名再现就不再是那条 flaky**,是新问题,必须重新诊断,⛔ 禁止条件
反射式重投。第三种签名:本 PR 名下**没有任何** `merge_group` run 且批次同伴的
run 全部 `success` = 队列重建的连带取消,不是红 —— 带签名读数收据重投一次(收据
留在 PR 上),⛔ 无收据不重投;同一 PR 第二次被踢移交队列管家
留在 PR 上),⛔ 无收据不重投;同一 PR 第二次被踢 ⇒ 停止重投,按签名四分支重判
- **实测吞吐参数两则**:合并队列落地延迟 ≈ 每 PR 15–30 分钟且串行(⛔ 不据「还没
落」提前判异常);单容器重验证(build+test)并发甜点 ≈3,排批按它定并发上限。

Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/pm-dispatch/references/seat-post-protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@
齐,几分钟内即可收班:① 每张在飞卡落**收单注记**(评审判据、落地步骤、当前状
态);② 座位贴正文刷新到当下;③ 每件在飞物**点名接手看护者** —— 默认下任座位
(在跑云会话用绑定会话 ID 的 poke 触发器投递,⛔ 非 `SendMessage` 直投,细则见
`dispatch-runbook.md`),已入队 PR 归队列管家。**评审判断不可外包**:管家授权只
守落地,热移交把评审交给下任座位,⛔ 不是跳过评审;会话内 `create_trigger` 的
`dispatch-runbook.md`),已入队 PR 的看护同样点名接手座位。**评审判断不可外包**
:看护只守落地,热移交把评审交给下任座位,⛔ 不是跳过评审;会话内 `create_trigger` 的
Routine 拿不到 GitHub 工具(下方细则),⛔ 不是逃生舱。
- **交接收尾清单(退场序列,漏一步就是留残缺现场)**:① 立即停止新派发;② 在手工
件逐件处置 —— 能收则收,收不完走上一条热移交(⛔ 不为清零而等);③ 全量枚举本车
Expand Down
Loading
Loading