From c41189e982d43dd6ba117fdb600ca78abf2c1010 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 6 Aug 2026 23:58:52 +0000 Subject: [PATCH] =?UTF-8?q?docs(pm-dispatch):=20=E5=8F=91=E7=89=88?= =?UTF-8?q?=E6=9D=BF=E5=8D=8F=E8=AE=AE=20=E2=80=94=E2=80=94=20target:=20=E4=BD=9C=E4=B8=BA=E5=8F=91=E7=89=88=E8=A7=86=E8=A7=92?= =?UTF-8?q?=E7=9A=84=E5=B8=B8=E8=AE=BE=E8=BD=B4(=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E8=80=85=202026-08-06=20=E6=8B=8D=E6=9D=BF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 维护者痛点:「想发版时,哪些优先,始终没有渠道知道」;历次一次性标注均因无生产 者/无消费者/无所有者而腐烂。本次把发版轴接进常设机器:二元判据四类(已发布面 缺陷/契约撒谎/存量数据/道歉级含首小时体验);分诊座位唯一生产(同 domain:* 纪律);三处消费者(维护者标签查询、step 3 批次优先、step 9 第四健康指标); 与发现分诊轮同节奏的鲜度复查;发版时刻 = 清板三选一(修/摘/明示接受留痕)。 存量 309 条已于 2026-08-06 全量清过(46 条上板),此后只有增量。 按 #5925-7 裁决的零混装纪律,本件不含任何搬移;瘦身另行纯搬移 PR。 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GcjbQLUQKysMU9uXB34iyv --- .claude/skills/pm-dispatch/SKILL.md | 36 ++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index cbc85f03cc..8cd778c20b 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -52,6 +52,7 @@ write state only through these signals: | label `needs-user-decision` | a decision is **pending** — never dispatch, never auto-answer; it sits in the maintainer's inbox and MAY be surfaced again in round reports | | label `pm:on-hold` | a decision was **made** and the answer is "not now" — never dispatch AND never nag; wait for the restart condition recorded in the hold comment | | label `pm:blocked` + body line `Blocked-by: #N` | waiting on another issue/PR — skip at selection; re-check when #N closes | +| label `target:`(如 `target:v17`) | 发版阻塞(发版板)—— 分诊座位唯一生产;step 3 优先、step 9 计数、维护者清单查询消费;详见「发版板」 | | label `pm:epic`(on a parent)| 整棵子树已委托给一个专职 epic PM(会话与文件领地写在**父单正文**;`label:pm:epic` 即全量索引,`pm:seat` 座位贴体系不重复记)— 其它 PM 一律不把该子树的 sub-issue 当候选(见「Epic 子树车道」) | | open PR referencing the issue | implemented, in review | | merged PR with `Fixes #n` | done (GitHub closes the issue) | @@ -787,6 +788,33 @@ Prime Directive #10 是一个强力生产者,而循环原本只有「修掉」 关系的发现挂进去等于让未分诊的东西静默入池;那种情况独立立单 + `Blocked-by:`(cloud#1045/#1046 之于 cloud#1050 即此形)。 +#### 发版板(`target:` —— 发版视角的常设轴,维护者 2026-08-06 拍板) + +维护者的原始痛点:「我想发版了,不可能清单上这么多问题都处理,哪些优先,我始终 +没有渠道知道」—— `pm:queue` 是工作蓄水池,不是发版清单;此前的历次一次性标注 +都因**无生产者、无消费者、无所有者**而腐烂。本节把发版轴接进常设机器: + +- **判据(二元;⛔ 不做 P1-P5 渐变 —— 渐变没人维护,一周就烂)**:对 defect 类 + issue 问一句「**不修它,当前 RC 能不能发?**」。判阻塞的四类:① 用户今天就会 + 撞的已发布面缺陷(数据错、静默丢、安全洞、跑不起来);② 公开契约的 + declared≠enforced(发出去就是撒谎的 API/schema);③ 存量数据/迁移形状 + (发布后修不回);④ 发布说明里需要为它道歉的(含「照文档抄即失败」的首小时 + 体验)。改进型、优化、重构、观察类 finding、内部工具、纯展示瑕疵默认**不 + 阻塞** —— 坐下一班车。 +- **生产者唯一 = 分诊座位**(与 `domain:*` 同款单一生产者纪律):step 0 分诊 + defect 类新单时顺手判;执行座位不打不摘 `target:`,误判走上报。存量 + 已于 2026-08-06 全量清过一次(309 条 → 46 条),此后只有增量,⛔ 永不再全量 + 重扫。 +- **消费者三处**(a label exists iff something reads it):维护者的发版清单 = + `label:target: is:open` 一条查询(与 `pm:seat` 状态板同构,标签即 + 看板);step 3 批次选择板上项优先;step 9 轮次报告第四健康指标。 +- **鲜度**:与发现分诊轮同节奏(每 ~5 轮)对板上 open 项做过时前提检查 —— + 已修/不成立的摘牌 + 一句评论(main 一天 ~18 合并,阻塞判断有半衰期)。 +- **发版时刻 = 清板,不是重扫**:板上每条三选一 —— 修掉 / 摘牌(不再成立)/ + **明示接受带病发布**(摘标签 + 一句 accepted-for-GA 评论留痕,进 release + notes 的 known issues)。姊妹仓同标签:objectui 随 console bundle 入板; + cloud 独立部署不入板,advisory 单列。 + ### 1. Fetch candidates List open issues matching the filter, excluding anything assigned or labeled @@ -935,6 +963,10 @@ an issue to a later round, record the known trap on it before the round ends. (assign + claim comment + race check 一步不少)。此前协议通篇没有这个标签的 消费者,违反「a label exists iff something reads it」—— 本段就是它的读取方。 +**发版板优先。** 批次选择时 `target:` 板上项排在普通队列项之前(仅次于 +`priority:p0` 插队;两者叠加 = 最高优先)。板上项照常受同文件串行与认领协议 +约束 —— 优先是排序,不是豁免。 + ### 4. Claim All agents share one GitHub identity, so the assignee alone says "some agent @@ -1764,7 +1796,9 @@ area; that is the loop working, not failing): - **dispatchable inventory** — open `pm:queue` unassigned, and its trend; - **decision inbox** — `needs-user-decision` count awaiting the maintainer; -- **finding median age** — aging findings mean the 发现分诊轮 is overdue. +- **finding median age** — aging findings mean the 发现分诊轮 is overdue; +- **release blockers** — open `target:` count and trend(归零 = 可发版; + 清板协议见「发版板」)。 **座位 Routine 没有交互通道。** fresh-session fire 没有对话对面的人,轮次报告 因此走 Routine 的**完成通知**(`notifications`,fresh-session Routine 专有;