Skip to content
Merged
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
10 changes: 5 additions & 5 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,13 +71,14 @@ references);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出

| issue 上的信号 | 含义 |
|---|---|
| open + 队列标签 + **无 assignee** | 可派发 |
| open + 队列标签 + **无 assignee** | 可派发(同卡带 `pm:retriage` 的除外 —— 异议未决不派) |
| **assignee 已设** | 已认领/在飞 —— 不是你的就永不碰 |
| `pm:dispatched` | 已派发(派发评论记轮次);与摘 `pm:queue` **同一次标签写入**成对落地 |
| `needs-user-decision` | 决定**待做** —— 永不派发、除已裁代裁通道外永不代答;维护者的收件箱 |
| `pm:on-hold` | 决定**已做**且答案是「不是现在」—— 不派发也不催;**仅当正文带机器可读行 `Restart-when: closed <owner/repo>#N`(由 `Blocked-by:` 的同一遍解锁扫描点火、同一正文单通道)或 `Restart-when: <一行可执行判据>` 时才合法**;hold 评论带日期、理由、出处(维护者裁或座位定级,⛔ 不设第二个标签区分);机会主义重启的触发文件走同族正典行 **`Restart-touch: <仓内相对路径>`**(一行一路径,大小写敏感、行锚定,与 `Blocked-by:`/`Restart-when:` 同一正文单通道;反引号/bullet 可容忍、值须为 tracked 文件)—— 喂半状态巡查 H17 的 on-hold 触发文件索引,抽取器已随巡查落地、采用即零代码;存量 hold ⛔ 不迁移、不产 finding,散文锚词抽取兜底旧卡;**放行双查(两查皆机械、零判断)**:① 只对**最近一次** `pm:on-hold`/`pm:blocked` 转换评论所载条件放行,⛔ 永不对线程里更早的 blocker —— 已放行过的条件是花掉的,再点火就把过期前提立成现行;② 该转换评论之后卡上有**更新的 merged PR** ⇒ 拒绝放行 —— 那是条件写下后卡已前进的信号(引用的事实可以为真而不再是现行条件) |
| `pm:blocked` + 正文行 `Blocked-by: #N` | 等上游 —— 选择期跳过,#N 关闭时由解锁扫描放回。**工已完、PR 被外部门禁缺陷卡住的卡同用本态,⛔ 不设新标签**:`Blocked-by:` 指向门禁缺陷卡,正文另加机器可读行 `Unlock-action: re-check PR #M` —— 解锁扫描读到它就把解锁动作从「回队重派」换成「重查该 PR 的落地」(回队前提检查见到已完工的 open PR 即按落地工作处理,⛔ 永不给完工卡重派 dev);停放的 PR 正文必须点名门禁卡,让链路从任一端可读、不依赖会被整篇改写的座位贴 |
| `pm:blocking` | 有 open 下游依赖者(分诊 sweep 自 `Blocked-by:` 索引推导的缓存,⛔ 不手工挂);进选择优先级全序 |
| `pm:retriage` | 等分诊改判(维护者 2026-08-19/20 裁定:「同意 并存」)—— 与现行 `pm:*` 标签**并存,⛔ 不摘原标**:原定级在改判前仍是权威,并存让「排队但有异议」在列表上可见;挂标者 = 提出异议的席位,挂标与**异议评论同笔**(证据 + 建议定级),无证据评论的裸挂标不合法;摘标者 = 分诊 Routine,每 fire 高优先重判、重判后摘标 —— 挂/摘分属两方、各自的转换不相交,这是本行的安全性;带本标签的 `pm:queue` 卡**跳过派发**(异议未决不派,即可派发行的除外项);标签须四仓存在(分诊四仓统一职责,首次应用时创建);老化兜底归半状态巡查(年龄谓词随巡查另行落地) |
| `finding` | 观察类记录,恒 = **待首次定级**(定级即离标:晋级换 `pm:queue` / 关闭 / hold 换 `pm:on-hold`;裸标签数即健康读数)—— 不占队列不进收件箱 |
| `target:<major>` | 发版阻塞 —— 每个 backlog 恰好一个生产者,见「发版板」 |
| `pm:epic`(父单) | 子树已委托 epic PM(会话与领地在父单正文;`label:pm:epic` 即全量索引)—— 其它 PM 不把其 sub-issue 当候选 |
Expand DownExpand Up@@ -108,8 +109,6 @@ references);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出
- **写后回读按风险定向;标签写恒为硬步骤 read-modify-write + 回读**(维护者 2026-08-18 裁定):① 先取现集 → ② 只增删目标标签 → ③ 写合并集 → ④ 写后回读核验 —— 整组 PUT 写的是本席快照,并发席落在你读与写之间的标签被静默剥掉,受害者常是你没打算碰的那枚;**承载闸门语义的标签**(如 `needs:contract-review`)挂与清两向同此四步,闸门被剥不是红灯是放行,「被剥」与「从未挂过」在证据上不可区分,回读是唯一察觉手段;
多席可写面恒读回(防竞态覆盖,不只防 sanitizer);正文/评论仅当含尖括号/HTML 注释才读回;「API 返回 200」≠「落地内容正确」。

**一次性建标签**:`bash scripts/pm/ensure-pm-labels.sh`(幂等;退役车道刻意不在脚本里 ⛔ 不加回,理由与对象清理以脚本头为权威)。

## 平台读数纪律

统一原则:**判据取命令的输出,不取 API 字段的字面值、不取本地工作树现状、不取「看起来相邻」的
Expand DownExpand Up@@ -291,6 +290,7 @@ hold 评论纪律见状态模型,hold 重验只在 `Restart-when:` 命中时发
/ hold;**判级发生在这里,不在立单时**。车道座位可附证据/前提重验,⛔ 不定级不改标(唯一例外:skills 车
道 finding 由该席自分诊,全仓轮跳过)。**自动集中轮**(常设授权,维护者 2026-08-13):`finding` >15 ⇒ 下
一 fire 跑域分批集中轮,sweep 打包晋级五条照用;原话、批量参数与五条细则见 `references/dispatch-runbook.md`。
**`pm:retriage` 重判每 fire 高优先处理**:按异议评论的证据与建议定级重裁,维持或改判皆由本座位同笔摘标(挂标归异议席,见状态模型)。

**发版板(`target:<major>`;鲜度节奏、清板三选一、pin 前置等运维细则见
`references/seat-post-protocol.md`)。** 判据二元(⛔ 不做优先级渐变 —— 渐变没人维护):「不修它,
Expand DownExpand Up@@ -324,7 +324,7 @@ hold 评论纪律见状态模型,hold 重验只在 `Restart-when:` 命中时发

**整车道一次读全,本地求交**(维护者 2026-08-11 接受):`list_issues` 带 `labels: [domain:X]` +
最小字段一次拿回全车道 open 集,各状态本地求交 —— 按单一 pm 状态切片的查询看不见其它状态,是结
构性盲区。候选 = open、未 assign、无`needs-user-decision`;已排队父单的 open sub-issue 自动是
构性盲区。候选 = open、未 assign、无`needs-user-decision`、无 `pm:retriage`;已排队父单的 open sub-issue 自动是
候选(`pm:epic` 父单的子树除外)。**每张候选读全文 + 全部评论**(裁决落在评论区,跳过评论就是跳
过裁决;评论还可能记着一半工作已交付);**派发前做前提过时检查(stale-premise check)—— 裁决同
罪**(裁决描述的也是当时的仓,写得权威、日期又近,恰恰更容易被当成现成事实),两半都查:**动作
Expand DownExpand Up@@ -676,6 +676,6 @@ grep <branch>`),复升级时逐条**跑**一遍,零命中/变形的就地改写
| `scripts/pm/check-governed-merges.mjs` | governed 面合并清单的 report-only 审计(事后防线;轮报载体,本地枚举零 API,仅归因走查询) |
| `scripts/pm/dispatch-gates.mjs` | 文件面 → 该跑的门禁族(派发令取数) |
| `scripts/pm/os-regen-merge.sh` | 碰生成物 PR 的 merge 四步序(防静默吞并与锚点倒退) |
| `scripts/pm/ensure-pm-labels.sh` | pm 标签词表的幂等创建 |
| `scripts/pm/ensure-pm-labels.sh` | pm 标签词表的幂等一次性创建;退役车道刻意不在 ⛔ 不加回,理由与对象清理以脚本头为权威 |
| `check:skill-frame-sync` / `-freshness` | 四维决策框架四份拷贝的同构与新鲜度 |
| `guard-main-checkout` / `guard-shared-stash` hooks | worktree-first 与 stash 禁令的机械面 |
Loading