Skip to content

pm-dispatch: a governed PR at ACCEPT gets needs-user-decision + a Chinese 「维护者速读」 brief (dev draft, seat final) - #15908

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-15894-maintainer-brief-on-governed-prs
Sep 5, 2026
Merged

pm-dispatch: a governed PR at ACCEPT gets needs-user-decision + a Chinese 「维护者速读」 brief (dev draft, seat final)#15908
os-zhuang merged 1 commit into
mainfrom
claude/issue-15894-maintainer-brief-on-governed-prs

Conversation

@claude

@claude claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Fixes #15894

What this PR writes

The rule, once, in the file that governs the seat — .claude/skills/pm-dispatch/SKILL.md — plus the label description in scripts/pm/ensure-pm-labels.sh.

Governed endgame (复核 → 终局四件套, under ②) — five lines, folded in below the existing ② line:

  • 看得见 = at ACCEPT, in the same stroke, the seat adds needs-user-decision to the PR and posts the final 「维护者速读」 comment; ① (the English ACCEPT on the issue) stays the review record.
  • The brief has a fixed five-part shape: 改了什么 / 为什么改 / 风险与代价(含回滚) / 席位意见 / 你要做的(一个动作).
  • Draft half (seat addendum): every governed-surface PR body carries ## 维护者速读(草稿) — Chinese, business angle, 席位意见 left blank.
  • Final half: the seat checks the draft against its own diff read, fills 席位意见, and posts the comment; the maintainer reads the comment only.
  • On a PR the label means awaiting the maintainer's review — outside the six-state card set; together with the review request it is the awaiting-human-merge list, and it leaves with the merge or when the seat withdraws the verdict.

Decision box (分诊) — a needs-user-decision card carries the same brief above its four-facet block (same heading), business terms first, ending in the one-word answer asked (A/B/C or yes/no); box duty checks/completes both the four-facet block and the brief.

Language rule (全体座位的不变量) — Chinese keeps four channels; the fourth is ## 维护者速读 (on governed PRs and decision cards). The three existing channels are spelled unchanged on the next line.

ensure-pm-labels.sh:187 — the needs-user-decision description becomes Blocked on a maintainer decision — do not dispatch; on a PR: awaiting the maintainer's review93 code points (cap 100; check:pm-label-desc-cap measures code points, agreeing with GitHub). One comment line above it states the PR meaning.

Untouched by ruling: the state-model row (line 110, card meaning), the six-state exclusivity line (now 125), the dispatch ban in 红线 (line 29, about cards), CLAUDE.md / AGENTS.md, references/**, and the patrol row — #15895 remains open, blocked behind #15884.

Line-neutral proof (SKILL.md)

check-skill-line-ratchet before and after, same tree convention: 811 lines (ceiling 811; headroom 0) and widest table row 342 bytes (pin 342; headroom 0). Widest line I wrote: 119 bytes (LC_ALL=C awk length); every line I wrote is ≤ 120 bytes. The pre-existing 172-byte line 810 (a single long code span, the ratchet's unbreakable class) is on origin/main at 4f379125e3 unchanged.

Six lines were added and six retired; each retirement is content already stated elsewhere, not a re-wrap:

retired line (old text) already stated at
放行前亲核判据;收敛期补丁轮与本单等 CI 例外见 checklist references/review-checklist.md lines 39 and 42; 复核 lines 590/592 (亲核)
判据被测量推翻照 ACCEPT,证据要件在 checklist references/review-checklist.md line 71; 复核 line 597
⛔ 不从功能作者的座位读价值密度 folded into the preceding 价值密度 line (now 119 bytes)
等人合清单从此活在 GitHub 的 Review-requested 队列,合并自动消项 folded into the new label-meaning line (与请审同为等人合清单,随合并…离开)
混合 diff 一条命中就分叉,⛔ 不按比例判;要拆就让 dev 单独开 PR folded into the 四件套 lead line (now 115 bytes)
标准四棱卡面块是落卡与升级的必备件,每张 needs-user-decision 卡落卡即带 分诊 line 354 (决策卡落卡必带四棱卡面块…) and 升级与决策 line 762 (决策卡带选项、推荐、证据与四棱块)

Gates (all on 3b86d07a7b, exit codes captured before any pipe)

  • node scripts/pm/dispatch-gates.mjs --tier --repo objectstack-ai/objectstack → MANDATORY (clause ①, SKILL.md main file).
  • --commands derived 34 families from the committed change set (2 paths vs merge base 4f379125e); every command run; --ran✓ dispatch-gates --ran: 34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED. 33 green on first pass; pnpm --filter @objectstack/lint run check:doc-formula-expressions exited 3 = PREREQUISITE NOT MET (@objectstack/formula not built — not a measurement); after pnpm exec turbo run build --filter=@objectstack/lint (closure incl. @objectstack/formula, both under the verify lock) the re-run exits 0 — self-test 58 ✓ cases; the live run judges every registered expression slot and prints its deliberate skips (6 *When site(s) SKIPPED — layer not statically determinable, so NOT judged) rather than staying silent. Every one of the 34 is now a measurement.
  • check-skill-line-ratchet --self-test155 cases pass; live → the two SKILL.md lines quoted above, plus every other ceiling green.
  • check-skill-id-lint24 file(s) clean. check-skill-frame-sync2 copies … structurally isomorphic, 4 axes.
  • check-half-states --self-test2267 cases pass (no H-row pins a sentence I touched).
  • check-label-desc-cap --self-test → all cases passed; pnpm check:pm-label-desc-cap23 label descriptions … all ≤100 characters (longest: 100, repo:objectui).
  • bash -n scripts/pm/ensure-pm-labels.sh → exit 0. pnpm check:nul-bytesno raw ASCII control bytes.
  • Whole-repo pnpm lint through scripts/pm/os-verify-lock.sh (slot issue-15894) → VERDICT command-exit 0 · held the lock 84s · waited 0s.
  • check-governed-merges --test on the file list → exit 3: .claude/** hit — governed; this PR stays draft for the seat's contract-tier review and a human landing.

Follow-ups (not in this diff)

维护者速读(草稿)

改了什么:PM 手册(pm-dispatch SKILL.md)写进一条规则:受管面 PR(ADR、agent 规则、PM 协议、hook、skills)复核通过时,席位同一笔在 PR 上挂 needs-user-decision 标签,并贴一条中文「维护者速读」评论(改了什么/为什么改/风险与代价/席位意见/你要做的);dev 开 PR 时先在正文写草稿,席位复核后校正、填席位意见、贴终稿。决策卡也在四棱分析之上放同样的速读,末句只问你一个字。标签描述加上 PR 上的含义。手册行数不增(811/811),靠合并已在别处写过的行付账。

为什么改:你今天的指示,原文:「我看到有很多5小时之前积压的pr,单我从列表看不出来哪些是需要我审核的,对于需要我审核的任务,比如adr,应该由契约复审先帮我审核,用中文从业务角度写上分析和意见,然后我就可以快速确认。」今天 13:2xZ 起三个 PR、两张决策卡已按此做;这张 PR 把做法写进手册,以后每张受管 PR 都照做。

风险与代价(含回滚):只改 PM 手册与一个标签描述,不碰产品代码;手册行数与表宽度不变,34 个派生门禁 + 全仓 lint 全绿。代价:needs-user-decision 在 PR 上多一个含义(卡上 = 待裁决,PR 上 = 待你审阅),手册里两处分开写明。回滚 = 一次 revert。

席位意见:(草稿留空,席位复核后填)

你要做的:批准 + 入队,或人工直合。

🤖 Generated with Claude Code

https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox


Generated by Claude Code


Generated by Claude Code

…hinese maintainer brief

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 5, 2026
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Sep 5, 2026

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

ACCEPT — lands #15894 as ruled. Governed (.claude/**, predicate exit 3), so this PR stays draft at the governed terminal: both approvers requested, and, practising the rule it writes, needs-user-decision goes on the PR with the final 「维护者速读」 posted beneath this verdict.

What the seat verified, at head 3b86d07a7b, in its own compare worktree

  • Diff is 2 files, +14/−13. SKILL.md is line-neutral: six lines added, six retired, and every retirement traced to where its content already lives. The seat's one standing concern, the dropped 「判据被测量推翻照 ACCEPT」, is resolved by grep, not by the body's table: references/review-checklist.md:71 carries it in substance (「dev 用测量推翻字面判据、换上更强的不变量门禁照 ACCEPT」). 亲核 and the 收敛期 exceptions live at checklist 39/42 and SKILL.md 592–593; the 等人合清单 sentence is folded into the new label-meaning line; 混合 diff is folded into the 四件套 lead line; the four-facet must-carry stays at 分诊 line 354.
  • The three existing Chinese channels are spelled unchanged; the fourth is named for governed PRs and decision cards only.
  • Widest lines written: 119 / 116 / 116 bytes.
  • Seat's own runs on the head: check-skill-line-ratchet exit 0; check-skill-id-lint 24 files clean; check-label-desc-cap 23 descriptions all ≤100 (longest 100); bash -n ensure-pm-labels.sh clean; check-governed-merges --test exit 3; the decision-frame fingerprint appears in .claude/** only in the one watched copy.
  • CI, seat's read 14:2xZ: 37 check runs, 25 success, 12 skipped, none failing, none pending.
  • Body line 1 is Fixes #15894; skip-changeset present.

Open question answered: A. The published skills/objectstack-pm-dispatch/SKILL.md setup snippet keeps the card-only description. That protocol has no seat and no ACCEPT endgame, so a PR meaning there would declare a state it never produces.

Follow-up already placed: the dev-side line for .claude/agents/os-dev.md is in #15857's ruling, in flight now.

Implemented-by: os-dev executor, flight #15894, branch claude/issue-15894-maintainer-brief-on-governed-prs
Reviewed-by: pm-dispatch skills seat, https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox


Generated by Claude Code

@claude
claude Bot requested review from hotlong and os-zhuang September 5, 2026 14:15

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

维护者速读

改了什么:PM 手册(.claude/skills/pm-dispatch/SKILL.md)写进一条规则:受管面 PR(ADR、agent 规则、PM 协议、hooks、skills)复核通过时,席位同一笔在 PR 上挂 needs-user-decision 标签并贴一条中文「维护者速读」评论,固定五段:改了什么 / 为什么改 / 风险与代价(含回滚)/ 席位意见 / 你要做的。dev 开 PR 时先在正文写草稿,席位复核后对照自己读的 diff 校正、填席位意见、贴终稿;你只读终稿评论。决策卡在四棱分析之上放同样的速读,末句只问你一个字。标签描述加上 PR 上的含义(93 字符,上限 100)。手册行数不变(811/811):新增六行,退掉六行已在别处写明的内容。

为什么改:你今天的指示,原文:「我看到有很多5小时之前积压的pr,单我从列表看不出来哪些是需要我审核的,对于需要我审核的任务,比如adr,应该由契约复审先帮我审核,用中文从业务角度写上分析和意见,然后我就可以快速确认。」今天 13:2xZ 起已有三个 PR、两张决策卡照此做;这张 PR 把做法写进手册,以后每张受管 PR 都照做,不再靠席位记得。

风险与代价(含回滚):只改 PM 手册与一个标签描述,不碰产品代码;34 个派生门禁 + 全仓 lint 全绿,席位在自己的比对树上复跑了行数棘轮、编号 lint、标签描述上限、受管面判定。代价一:needs-user-decision 在 PR 上多一个含义(卡上 = 待裁决;PR 上 = 待你审阅),手册与标签描述各写明一次。代价二:退掉的六行,席位逐条核过归宿,其中「判据被测量推翻照 ACCEPT」在 references/review-checklist.md 第 71 行原样保留。回滚 = 一次 revert,不涉数据。

席位意见:建议批准。四轴:业务需求是你今天实测提出的,不是推测;长远上规则只住手册一处,派发令与 os-dev 规则(#15857 在飞)各引一句,不重复;防 AI 错:五段固定、草稿/终稿分工、席位校正,dev 写错由席位兜住;创业阶段:不加一行、不扩公开面,已发布的 skills/objectstack-pm-dispatch 副本不改(dev 提的问题,席位答 A:那份协议没有席位与终局,写上会声明一个它不产出的状态)。

你要做的:批准并入队,或人工直合。一字:是/否。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 5, 2026 15:22
@os-zhuang
os-zhuang enabled auto-merge September 5, 2026 15:22
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 5, 2026
Merged via the queue into main with commit 97afcb5 Sep 5, 2026
43 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-15894-maintainer-brief-on-governed-prs branch September 5, 2026 15:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation needs-user-decision size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants