From 3b86d07a7b3e40087bda0e2c27943f067d23511f Mon Sep 17 00:00:00 2001 From: os-steve Date: Sat, 5 Sep 2026 13:39:56 +0000 Subject: [PATCH] pm-dispatch: a governed PR at ACCEPT gets needs-user-decision and a Chinese maintainer brief MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At ACCEPT on a governed-surface PR the seat, in the same stroke, adds the needs-user-decision label to the PR and posts a Chinese 「维护者速读」 comment in a fixed five-part shape (what changed in business terms / why / risk and cost incl. rollback / the seat's recommendation / the one act asked). The brief is split: the dev drafts it in the PR body under `## 维护者速读(草稿)` with 席位意见 left blank; the seat finalizes it at ACCEPT against its own diff read and posts the final comment, which is what the maintainer reads. The English ACCEPT stays the review record. On a PR the label means "awaiting the maintainer's review", outside the six-state card set, and leaves with the merge or when the seat withdraws the verdict. Decision cards carry the same brief above their four-facet block, ending in the one-word answer asked. The brief is named as the fourth Chinese channel in the language rule; the three existing channels are unchanged. SKILL.md stays line-neutral (811/811, table pin 342): the additions are funded by folding lines already stated elsewhere in the file or in the review checklist. ensure-pm-labels.sh: the needs-user-decision description gains the PR meaning (93 characters, under the 100-character cap). Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox --- .claude/skills/pm-dispatch/SKILL.md | 24 ++++++++++++------------ scripts/pm/ensure-pm-labels.sh | 3 ++- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index a32af80219..4276150b89 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -93,8 +93,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 所有状态在 GitHub:只经 issue 标签、assignee、正文行与 `pm:seat` 座位贴读写。 - 循环必须能从全新会话恢复。 - PM 不写文件、不写代码;唯一例外及其全部条件见红线。 -- GitHub 上一切新内容用英文。 -- 中文只留三通道:轮次报告、派发令里的裁决引文、决策四维分析(评论与四棱块)。 +- GitHub 上一切新内容用英文;中文只留四通道,含 `## 维护者速读`(受管 PR 与决策卡)。 +- 另三通道:轮次报告、派发令里的裁决引文、决策四维分析(评论与四棱块)。 - 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。 - 先认领后动工;assignee 不是你 ⇒ 已被认领,永不碰。 - 一座位一车道双射:域 X 谁管、PM Y 管什么,各恰好一个答案。 @@ -351,11 +351,12 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - `pm:queue` 也收恢复不变量的 finding 与 test-only pin。 - `needs-user-decision` = 设计卡、feature/契约形状提案、需要 appetite 的多周程序。 - 碰存量数据迁移形状或删除已发布能力的卡也进决策箱。 -- 决策卡落卡必带四棱卡面块,⛔ 不留待有人接手再补。 +- 决策卡落卡必带四棱卡面块与其上的「维护者速读」,⛔ 不留待有人接手再补。 +- 决策卡的速读同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。 - `finding` = 观察类(死代码、未演练漂移、抛光;真实但今天没有用户撞上),待首次定级。 - 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。 - 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。 -- 决策箱勤务:落卡入箱时校验/补全标准四棱卡面块;存量卡低频子轮回填,语言按不变量。 +- 决策箱勤务:落卡入箱时校验/补全四棱块与速读;存量卡低频子轮回填,语言按不变量。 - 原生 issue 类型 Bug/Feature/Task 是分诊的固定产出。 - 分诊席是 `type` 字段的唯一权威生产者;立单者可预填,分诊校正。 - 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面 ⇒ `Feature`,其余 ⇒ `Task`。 @@ -592,13 +593,10 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - PR 形态与范围:draft、目标 `main`、`Fixes`/`Part of` 首行判据,翻 ready 前亲核。 - `Part of` 卡 MERGED 时点收口;changed files 范围与 changeset/`skip-changeset` 分流;测试证据。 - 报告在草稿 PR 时点到达,CI 收敛读数只属于复核侧:gate `in_progress` 是诚实读数。 -- 放行前亲核判据;收敛期补丁轮与本单等 CI 例外见 checklist。 - 绿色输出≠ 该绿证明了被测风险:拒收断言、全绿方向与时序、pin 翻转、边界后收益。 - 证伪是好运行:`premise_still_valid: false` 是再分诊输入;dev 纠正 PM 当众认。 -- 判据被测量推翻照 ACCEPT,证据要件在 checklist。 - 删除与二进制:死代码删除亲核引用面;`+0/-0` 先疑 NUL;sweep 范围外产出成组列出。 -- 触 `skills/**` 的 PR 加问整包价值密度:从整包加载的客户 agent 的座位上读。 -- ⛔ 不从功能作者的座位读价值密度。 +- 触 `skills/**` 的 PR 加问整包价值密度:从整包加载的客户 agent 座位读,⛔ 不从作者座位读。 - 超派发预算或小功能大扩写 ⇒ REWORK,⛔ 不因已经写好了放行。 - 判决 ACCEPT:issue 英文短评论,核对清单结论 + 抽查读数 + 偏差,链接 PR,⛔ 不复述其叙事。 - 判决 REWORK:逐项反馈,同认领重派;补丁轮优先 SendMessage 续派原 dev;最多 2 轮,第三次升级。 @@ -607,18 +605,21 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 路径面用 `get_files` 取,⛔ 不看报告自述;动手之前先分,不是事后对照。 - governed 面统一定义:`docs/adr/**` + `.claude/**`(全量,含 agents/hooks/settings)+ `skills/**`。 - governed 面同含 `AGENTS.md` + `CLAUDE.md`;agent 指令文件跨仓同判,仓集读 `GOVERNED_REPOS`,此处不列。 -- 路径面一条命中 ⇒ ACCEPT 换终局四件套。 +- 路径面一条命中 ⇒ ACCEPT 换终局四件套,混合 diff ⛔ 不按比例判;要拆让 dev 单独开 PR。 - ① 复核结论照常写在 issue 上;技能面 PR 的复核席须跑在契约复审档位。 - ② PR 留给维护者看得见地悬着;终局两条:人工直合即审核记录;授权批准 ⇒ 队列放行。 +- 看得见 = ACCEPT 同笔挂 `needs-user-decision` + 贴终稿「维护者速读」评论;①仍是审核记录。 +- 速读五段固定:改了什么/为什么改/风险与代价(含回滚)/席位意见/你要做的(一个动作)。 +- 草稿归 dev:受管面 PR 正文带 `## 维护者速读(草稿)`,中文、业务角度,席位意见留空。 +- 终稿 = 席位对照自己读的 diff 校正草稿、填席位意见后贴评论;维护者只读评论。 +- PR 上的标签 = 待维护者审阅,不入六态;与请审同为等人合清单,随合并或撤回判决离开。 - 批准判定单源 = 队列守卫常量 `GOVERNED_APPROVERS`:授权账户 APPROVED 即算,⛔ 不卡 `commit_id`。 - 批准后再推提交也不过期;无批准 ⛔ 不翻 ready、不入队、不挂 auto-merge。 - ③ 在 draft PR 上向两个授权批准账户 `os-zhuang` 与 `hotlong` 都 request review,主动推。 -- 等人合清单从此活在 GitHub 的 Review-requested 队列,合并自动消项。 - PR 作者身份即两账户之一的席位时,对该账户请审必失败(author-identity 422)。 - 该账户改为把 PR assign 给它替代通知,另一账户照常请审;轮次报告点名说明走了兜底。 - 请审走免碰 draft 位的专用 REST 端点,MCP 兜底显式带 `draft: true`;端点事实住 platform-readings。 - ④ 轮次报告单列 awaiting a human merge。 -- 混合 diff 一条命中就分叉,⛔ 不按比例判;要拆就让 dev 单独开 PR。 - 已入队才读到本条 ⇒ 转 draft 与 disable 都做;出队以阳性探针答,ref 缺席只旁证。 - skills 车道自有 PR 再按 diff 内容分流:diff 含任一 `.md` 文件 ⇒ 终局四件套照旧。 - 纯代码面(`scripts/pm/` 工具、`.claude/` hooks/workflows/settings、非 md 产物)⇒ skills 席自审。 @@ -755,7 +756,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 长远合理性权重恒 ≥50%:推荐以长远的读数领起,四轴冲突时其余各轴合起来投不翻它。 - 权重按缩小而非扩大特例与契约增生读,⛔ 不据它为投机扩张背书。 - 权重是推荐规则不是授权规则:50% 不把人工地板的事变成可派发的事。 -- 标准四棱卡面块是落卡与升级的必备件,每张 `needs-user-decision` 卡落卡即带。 - 收件箱由维护者定期消化,⛔ 不 assign 推送。 - 四维分析从业务的角度写;写法六项与四棱块固定形状见 `references/decision-analysis.md`。 - 推荐是输入,永不是放行,人工地板不变。 diff --git a/scripts/pm/ensure-pm-labels.sh b/scripts/pm/ensure-pm-labels.sh index 1d035a969e..df3cd1d67b 100644 --- a/scripts/pm/ensure-pm-labels.sh +++ b/scripts/pm/ensure-pm-labels.sh @@ -183,7 +183,8 @@ gh() { for R in objectstack-ai/objectstack objectstack-ai/objectui objectstack-ai/cloud objectstack-ai/objectos objectstack-ai/hotcrm; do gh label create pm:queue -R "$R" -c 0e8a16 -d "Ready for the PM dispatch loop" 2>/dev/null || true gh label create pm:dispatched -R "$R" -c 1d76db -d "Dispatched to a dev agent by /pm-dispatch" 2>/dev/null || true - gh label create needs-user-decision -R "$R" -c d93f0b -d "Blocked on a maintainer decision — do not dispatch" 2>/dev/null || true + # needs-user-decision on a PR means awaiting the maintainer's review (SKILL.md 复核, 终局四件套); on a card it is the ruling inbox. + gh label create needs-user-decision -R "$R" -c d93f0b -d "Blocked on a maintainer decision — do not dispatch; on a PR: awaiting the maintainer's review" 2>/dev/null || true gh label create pm:on-hold -R "$R" -c e4e669 -d "Decision made, deliberately deferred — no dispatch, no nag; restart condition in the hold comment" 2>/dev/null || true gh label create pm:blocked -R "$R" -c b60205 -d "Blocked by another issue/PR — body carries Blocked-by: #N" 2>/dev/null || true # pm:awaiting-maintainer — the state for a card whose remaining work is a