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
54 changes: 27 additions & 27 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- ⛔ PM 永不写代码、不写文件;唯一例外是维护者逐 PR 明示授权的 `.claude/` 内部工具 PR。
- ⛔ 该例外的 PR 不得自审自合:授权原话引在正文,复核由另一座位或维护者做。
- ⛔ 永不以任一账号对受管面 PR 提交批准 review,永不合并受管面 PR。
- ⛔ 受管面 PR 无授权批准时永不翻 ready、永不入队、永不挂 auto-merge。
- ⛔ 受管面 PR 无授权批准时永不翻 ready、入队或挂 auto-merge;批准在案后席位落地
- ⛔ 永不合自己的 PR,永不合红的或未复核的 PR,永不绕过合并队列。
- ⛔ 永不派发 assignee 是别人的卡;⛔ 永不派发带 `needs-user-decision` 或 `pm:retriage` 的卡。
- ⛔ 永不代维护者答产品或架构问题;唯一例外是已裁的代裁通道,不得宽于其置信门。
Expand Down Expand Up @@ -172,7 +172,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- dev 自己死了不等于维护者中止:子代理消失是正常死法,走死认领回收。
- 维护者中止只在有显式信号时成立:原话,或宿主回报 stopped by the user。
- ⛔ 不据推断立一道没有重启条件的门;判据是信号不是症状。
- 立单前查重:关键词、CVE/公告号、包名、报错串各搜一遍;空结果须有控制词背书
- 立卡者不查重,只附 3–5 个查重词;分诊按词查自有列表,零命中须控制词背书
- 共享基础设施修复入队前按症状复查 main,不按 issue 号。
- 真撞上重复,先比数值与作用域再决定关哪个。
- sweep 晋级与立卡的前提要对此刻的 main;dev 带证据的零实现停手是好产出,不当返工计。
Expand All @@ -190,7 +190,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 单车道仓 `cloud`、`objectos`、`hotcrm`、`www.objectos.ai`;未来新仓默认此类。
- 单车道仓 `repo:*` 席自理机械三务,⛔ 不产 `domain:*`;决策卡入本仓收件箱,不落 objectstack。
- 机械三务 = 自扫 sweep、自打 `type`、自做 `finding` 首触定级。
- 跨仓查重/shadow 检查恒归中央,全仓视图 ⛔ 不下放。
- 新仓登记是一张清单:座位贴、标签、类别归属、门禁盘点。
- 新仓准入判据一句:这个仓真的需要常设席位吗。
- hotcrm 收卡判据与宪章见 `references/lanes/hotcrm.md`。
Expand All @@ -217,18 +216,18 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 规则 3:联动杂事立单,不靠记忆。
- 已验收 PR 的产物流向另一仓,接受该 PR 的执行席立即在消费仓立后续单,带 `Blocked-by:`。
- 规则 4:纵向拆分,一个分诊 PM + N 个执行 PM,一人一车道双射。
- 分诊座位唯一:定级/路由/type 由它一座生产,只扫/分类/打标/拆分/查重/转仓
- 分诊座位唯一生产:定级/路由/type/查重/shadow/`duplicate_of`;执行席永不定级或路由裸卡
- 执行座位信任标签,只在本车道认领;误标 ⛔ 不自行改,挂 `pm:retriage` + 异议评论同笔。
- 单车道仓 `repo:*` 席 = 执行座位 + 机械三务自理;skills 车道 finding 自分诊例外照旧。
- 突发积压调频率或 `batch`,持续积压按仓拆席走 PR;⛔ 不跨车道借调。
- 维护者直派通道:当面指挥的 PM 会话直接路由,只对明示指挥的卡成立。
- 直派的审计评论逐字引用授权指令。
- 多车道仓分诊空缺时,会话型执行 PM 可代扫:只做分诊动作,不跨车道认领,贴上注明。
- 代扫在分诊座位有主时立即停止。
- 规则 5:一块板不设第二跟踪器:pm 标签就是状态机,org Project 只是维护者的聚合视图。
- 跨座位转移:工作跨座位线,PM 永不跨(唯一豁免:简单阻塞项直接接手)。
- 认领即跟到 MERGED:派发后发现的跨车道面(含 spec)不移卡,认领席借契约复审档隔离复核。
- 复核记录带 `Implemented-by:`/`Reviewed-by:`,自审机读可见;`pm:retriage` 改路由只对未派发卡。
- 转移落对方队列:目标仓立单带 `pm:queue`、出处行与一行可执行判据,依赖用 `Blocked-by:`。
- 凡触 `packages/spec` 一律转 `domain:spec` 座位,不论谁需要它。
- `packages/spec` 工作恒由 `domain:spec` 席收口,不论谁需要它;已派发卡 ⛔ 不因触 spec 转席
- 任何跨座位请求都是工作(要读数、要开卡、要授权):一律立卡进目标车道队列。
- ⛔ 座位贴敲门或裁决评论永不作跨座位请求的唯一载体;评论是加速器不是记录。
- 等待方同一笔把自卡翻 `pm:blocked` + `Blocked-by:` 指向请求卡;⛔ 不设新标签新 sweep。
Expand All @@ -252,12 +251,12 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报

- 表未覆盖的包首次分诊时归类并走 PR 更新本表;新增或退役 `domain:*` 必须同批改本表。
- 座位在编情况以 `label:pm:seat` 索引为准,每个 `domain:*` 与 `repo:*` 恰一张座位贴。
- `domain:*` 只由分诊席产出;打标签不等于认领,未打标签的 issue ⛔ 任何人不得认领
- `domain:*` 只由分诊席产出,例外仅在飞卡衍生 sub-issue 承父卡域;无标签的卡 ⛔ 不得认领
- 跨域例外路径:拆不动的跨域单 PR 由分诊席指定一个车道 PM 认领,认领评论申报文件面。
- 只在跨域例外路径上跑定向在飞检查,范围 = 该单文件面触及的那几个域的在飞单。
- 定向在飞检查读各在飞单认领评论的文件面申报,要求不相交,相交即让行。
- 日常同域批次选择不跑全局在飞检查,同域独立性由本域批次选择保证。
- 跨域相交只从两条越界通道进来:跨域例外路径,与简单阻塞项直接接手
- 跨域相交只经三条越界通道:跨域例外路径、认领席跟到底的越界面、接手无主阻塞项
- 合并队列是共享串行资源:车道买到的是并行编写,不是并行落地。
- 谁发现 flake 谁修或立单,⛔ 不绕行。

Expand All @@ -284,7 +283,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 平台事实变化 → references 事实表改一行。
- 三类以 `finding` 入 skills 车道由该席分诊;三类之外默认关 not planned。
- 接管/移交 = 改正文 + 审计评论(只作审计);收尾清单等细则见 `references/seat-post-protocol.md`。
- epic 委托不入座位贴体系;`packages/spec` 恒归 spec 座位。
- epic 委托不入座位贴体系;`packages/spec` 工作恒归 spec 座位。

## Epic 子树车道

Expand All @@ -297,9 +296,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 离开子树(交车道或转 spec 座位)同一笔标签写摘 `pm:epic` 加 `pm:queue`。
- `pm:epic` + `pm:queue` 同卡 = 半状态(保留兼移交);后者即已移交,取回走全套认领协议含重读。
- 单车道仓(无 `domain:*`)开卡即认领合法;多车道仓域标签前置照旧,子树标记即保留。
- 衍生问题三分,判据:不修它 epic 验收过不过得去;in-scope ⇒ 挂父单 sub-issue 下轮自动入队。
- 触 `packages/spec`/公共契约(sub-issue 或衍生)⇒ 照旧转 spec 座位队列,epic 侧写 `Blocked-by:`。
- 顺带发现 ⇒ 独立立单进修复落地仓,查重先行;⛔ 不借 sub-issue 通道塞未分诊卡进池子。
- 新立 spec/公共契约 sub-issue 照旧转 spec 座位队列,epic 侧写 `Blocked-by:`;衍生按三分留席。
- 顺带发现 ⇒ 独立立单进修复落地仓,附查重词;⛔ 不借 sub-issue 通道塞未分诊卡进池子。
- 每次分流留一行审计评论;父单维护 checklist 汇总评论,决策仍锚在具体 sub-issue。
- 收尾四步、僵尸回收与领地防撞细则见 `references/seat-post-protocol.md`。

Expand All @@ -313,6 +311,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- ⛔ 分诊 fresh session 开局不做泛关键词 ToolSearch;可验判据:空转轮 ~4 万 token 以内。
- 工具加载纪律只约束分诊 fresh session 的开局;执行座位与 dev 不受约束。
- 两级盘点:小时轮以 `since` 窗口读增量,锚 = 座位贴上一份收班简报的时间戳。
- 查重缓存住席内:新会话全量拉,其后 `since` 增量;⛔ 不建分支、不共享、不依赖备份。
- 每日一 fire 跑全仓全量对账并归集日频职责。
- 选层按 fire 时刻,⛔ 不用计数器;简报写明本轮跑的层。
- 从不更新的卡不入窗;老化欠账归半状态巡查不归小时轮。
Expand All @@ -321,9 +320,9 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- Backlog sweep 是常设职责,每 fire 扫任一析取命中的卡。
- 析取 ①:全裸(无 `pm:*`、无 `needs-user-decision`、无 `domain:*`)。
- 析取 ②:有 `pm:queue` 无 `domain:*`(仅多车道仓);析取 ③:有 `domain:*` 无 pm-state。
- ②③ 只取 `updated_at` 早于 ~2 分钟的卡
- 析取 ④:有 `pm:queue` 与 `domain:*` 而无 `priority:*`;②③④ 只取 `updated_at` 早于 ~2 分钟
- 排除 `tracking`、`status:parked`、全部 `pm:seat` 贴、`qa-run` 记录。
- 半状态治愈积压 ②③ 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。
- 半状态治愈积压 ②③ 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。
- 首触定级与三析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。
- 窗口耗尽未跑完的,下一 fire 从标签状态断点续跑。
- 排序:队列每轮清空时最新优先;清不空的那一刻起改最老优先。
Expand Down Expand Up @@ -451,10 +450,10 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 阻塞解除后给延后单重新定价:派发前一单时带必答项。
- 必答项:你的改动让 #X 变简单、变难、变得不必要还是无影响。
- 派发后一单前用该回答重读它的选项与成本,⛔ 不沿用立单时那份。
- 跨车道简单阻塞项直接接手:本车道卡被他车道卡挡住,且阻塞项机械、规格清楚、S 级
- 命中即被挡座位直接接手做掉,⛔ 不持续等待
- 接手在他车道卡上走完整认领、尊重其热文件串行队、完工留收单注记
- 带设计判断/语义权衡的仍归属地车道;接手细则见 `references/dispatch-runbook.md`
- 在飞卡衍生三分:不修它验收过不过;in-scope ⇒ 父卡 sub-issue,认领席自有、优先级继承
- 该 sub-issue 带父卡域与优先级直接派发,唯一绕过分诊;sweep 事后扫,重复关 `duplicate`
- 阻塞项无主 ⇒ 被挡席认领做掉,不限大小;在该卡走完整认领、尊重其热文件串行队。
- 阻塞项在飞 ⇒ 等:`pm:blocking` 在其车道排最前、等待者写该卡;p0/p1 优先级沿链传递
- 取卡全序:`priority:p0` > `pm:blocking` > `target:` 板上项 > p1 > p2 > p3 > 无级;同级先 `Bug` 再卡龄。
- `pm:blocking` 级内先按解锁扇出(从 `Blocked-by:` 反向索引现算,⛔ 扇出数不落标签)。
- 全序每级取既有信号现读/现算,零逐卡维护;优先是排序不是豁免;无级卡轮报记分诊缺口。
Expand Down Expand Up @@ -606,25 +605,25 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 路径面用 `get_files` 取,⛔ 不看报告自述;动手之前先分,不是事后对照。
- governed 面统一定义:`docs/adr/**` + `.claude/**`(全量,含 agents/hooks/settings)+ `skills/**`。
- governed 面同含 `AGENTS.md` + `CLAUDE.md`;agent 指令文件跨仓同判,仓集读 `GOVERNED_REPOS`,此处不列。
- 路径面一条命中 ⇒ ACCEPT 换终局四件套,混合 diff ⛔ 不按比例判;要拆让 dev 单独开 PR。
- 路径面命中规则层 ⇒ ACCEPT 换终局四件套,混合 diff ⛔ 不按比例判;要拆让 dev 单独开 PR。
- ① 复核结论照常写在 issue 上;技能面 hunk 须由契约复审档的席复核,档外席先交 skills 席。
- ② PR 留给维护者看得见地悬着;终局两条:人工直合即审核记录;授权批准 ⇒ 队列放行
- ② PR 留给维护者看得见地悬着;终局两条:人工直合即审核记录;授权批准 ⇒ 席位落地
- 看得见 = ACCEPT 同笔挂 `needs-user-decision` + 贴终稿「维护者速读」评论;①仍是审核记录。
- 速读五段固定:改了什么/为什么改/风险与代价(含回滚)/席位意见/你要做的(一个动作)。
- 草稿归 dev:受管面 PR 正文带 `## 维护者速读(草稿)`,中文、业务角度,席位意见留空。
- 终稿 = 席位对照自己读的 diff 校正草稿、填席位意见后贴评论;维护者只读评论。
- PR 上的标签 = 待维护者审阅,不入六态;与请审同为等人合清单,随合并或撤回判决离开。
- 批准判定单源 = 队列守卫常量 `GOVERNED_APPROVERS`:授权账户 APPROVED 即算,⛔ 不卡 `commit_id`。
- 批准后再推提交也不过期;无批准 ⛔ 不翻 ready、不入队、不挂 auto-merge。
- 批准后再推亦不过期;席位落地 = 过落地前检、清标、ready、auto-merge,踢出/变基同法
- ③ 在 draft PR 上向两个授权批准账户 `os-zhuang` 与 `hotlong` 都 request review,主动推。
- PR 作者身份即两账户之一的席位时,对该账户请审必失败(author-identity 422)。
- 该账户改为把 PR assign 给它替代通知,另一账户照常请审;轮次报告点名说明走了兜底。
- 请审走免碰 draft 位的专用 REST 端点,MCP 兜底显式带 `draft: true`;端点事实住 platform-readings。
- ④ 轮次报告单列 awaiting a human merge。
- 已入队才读到本条 ⇒ 转 draft 与 disable 都做;出队以阳性探针答,ref 缺席只旁证。
- skills 车道自有 PR 再按 diff 内容分流:diff 含任一 `.md` 文件 ⇒ 终局四件套照旧
- 纯代码面(`scripts/pm/`、`.claude/` hooks/workflows/settings、非 md 产物)⇒ 复核席为 skills 席自审
- skills 席自审按契约复审档、清单不减,然后直接落地(ready → 入队),⛔ 不推维护者
- skills 车道自有 PR:纯代码面如 `scripts/pm/` 由本席按达档自审(清单不减)后落地
- 受管面两层:事实层仅本技能 `references/`,其余为规则层(含发布 `skills/**` 与 SKILL.md)
- 规则层四件套等人合;事实层 PR(受管路径全在该目录)经席内达档复核后 ready → 入队。
- 路径面干净的才转 ready → 入队;队列是唯一被认可的落地路径,⛔ 永不队列外合并。
- 入队资格 = PR 上每一个 check 全绿,⛔ 不是 required 子集;required 集是队列强制的地板。
- 非必查红是真缺陷或坏门,归 PM 入队前处置;第三种按设计而红,三条全立才可带红入队:
Expand Down Expand Up @@ -678,7 +677,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 健康指标五个:可派发库存(open `pm:queue` 未认领及趋势);决策箱(待维护者数)。
- 决策箱指标还要点名带开放下游依赖的决策卡,从 `Blocked-by:` 反向索引现算。
- finding 数与中位年龄:裸标签数即未定级数,hold 已换标不在内。
- 裸卡数与中位年龄:sweep 析取①,老化 = 首触欠账。
- 裸卡数与中位年龄:sweep 析取①,未定级数另计析取④;老化 = 首触欠账。
- 发版阻塞 = 三仓 `target:<major>` 之和,归零 = 三张板都空;总 open 数刻意不在指标内。
- Version Packages PR 默认永不催,挂着的发布 PR 是常态,⛔ 不进维护者摘要。
- 唯一例外 = 重要修复已合 main 在等发布;提醒必须点名该修复与不发版的用户可见后果。
Expand Down Expand Up @@ -765,6 +764,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- 每问必带推荐项,被 Skip 或长挂即转卡通道,⛔ 不重弹。
- 项目总监席:维护者在所在仓召唤,入口 `/pm-dispatch director`;⛔ 无 Routine 无 cron。
- 四职 = `needs:contract-review` 事后审计、决裁勤务、维护者动作台账、governed 合并审计。
- 每场召唤把带席内 ACCEPT 的受管草稿呈为一批 ≤5 行决裁;批准与合并仍是维护者的点击。
- 总监席档位由维护者按项目人工定,每场记入摘要台账;⛔ 无档位硬门、无免档整理态。
- 总监席是唯一裁决者:决策箱、代裁与一类自裁只出自本席,⛔ 无子代理无自述。
- 总监席不占 `domain:*`,永不认领 backlog、永不写码;章程见 `references/lanes/director.md`。
Expand All @@ -775,7 +775,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- ⛔ 本文不抄终报形状的第二份。
- `premise_still_valid: false` + `pr: null` 是合法终报,当再分诊输入复核,永不当失败派发。
- `status: needs_decision` 时 `open_questions` 必须非空。
- `out_of_scope_findings` 只列三类立卡与 `noted, not filed`;立卡查重先行、归挂、立在修复仓。
- `out_of_scope_findings` 只列三类立卡与 `noted, not filed`;立卡附查重词、归挂、立在修复仓。
- 席位在 ACCEPT 读 PR `## Acceptance notes`,实属三类的由席位补立;三类外已立的卡关 not planned。
- PM 核验它们存在,并把同轮并行报告互相对读:两个 dev 同一小时审相邻代码会立出孪生卡。

Expand Down
Loading
Loading