Skip to content

pm-dispatch: tier the governed surface — the rules layer stays hand-merged, .claude/skills/pm-dispatch/references/** lands through the queue after in-seat contract-tier review (maintainer ruling 2026-09-13) #17950

Description

@claude

Filed by the domain:skills seat (session session_01DAcomhvR9kKizeYgg89Vo8, GitHub os-project-manager) at 2026-09-13T07:49Z, routed and graded into this lane under the maintainer's 2026-09-13 self-routing ruling (recorded on #17942). This is an EXECUTION card: the ruling is already made; nothing here is a decision request.

The ruling (live chat with this seat, 2026-09-13T07:2xZ–07:4xZ, verbatim, untranslated)

Maintainer: 「③ 受管面手合本身也是一条队列。能否简化我的审核步骤,比如我召唤项目总监时可以批量决定?」
Seat: proposed (a) a director-seat batch presentation of governed drafts and (b) tiering the governed surface, recommending (a) now plus (b).
Maintainer: 「收窄受管面,但是 skills 是不是还是应该我来确认?」
Seat, the boundary put to the maintainer, verbatim:

规则层(你确认):所有 SKILL.md 级的规则文本——发布的 skills/**(两个仓)、.claude/skills/*/SKILL.md(含 pm-dispatch 本体和内部 playbook)、core-rules.md.claude/agents/**、hooks、settings、AGENTS.mdCLAUDE.md、ADR。
事实层(席内契约复审档复核后入队):只有 .claude/skills/pm-dispatch/references/**——平台读数表、runbook、契约复核细则、车道文件、状态机细则。
Maintainer: 「我点头」

⇒ Ruled: published skills/** (both repos), every .claude/skills/*/SKILL.md, core-rules.md, .claude/agents/**, .claude/hooks/**, .claude/settings*, AGENTS.md, CLAUDE.md and docs/adr/** keep the human hand merge exactly as today. Only .claude/skills/pm-dispatch/references/** changes: a PR whose governed paths are all under that directory lands through the merge queue after the skills seat's in-seat contract-tier review (served tier verified per references/contract-review.md), with the ratchets unchanged and the post-merge audit still listing it.

Governing text

  • AGENTS.md Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14: the governed surfaces are named there and 「The register is the GOVERNED_SURFACES table in scripts/pm/check-governed-merges.mjs; adding a surface is an edit there, never here, and pnpm check:pm-governed-prose reds per-PR when this paragraph names fewer surfaces than the register — or more.」
  • .claude/skills/pm-dispatch/SKILL.md 〈复核〉: 「governed 面统一定义:docs/adr/** + .claude/**(全量,含 agents/hooks/settings)+ skills/**」 and 「路径面一条命中 ⇒ ACCEPT 换终局四件套」.
  • references/contract-review.md: 「受管面人工合并 ⛔ 不替代复核,两道保障叠加」 and 落地前检③ 「受管面不适用,draft-only 终局不变」.
  • references/lanes/skills.md 常设承诺: 「受管面 PR 恒 draft 等人合;flip 或 arm 前跑 check-governed-merges --test 带路径」.
  • The queue guard: scripts/pm/check-governed-queue-guard.mjs (Governed Surface Queue Guard, the seventh required context) refuses an unpinned governed diff in the merge group; GOVERNED_APPROVERS lives there.

Work items (one PR; it touches AGENTS.md and SKILL.md, so it is itself hand-merged by the maintainer)

  1. scripts/pm/check-governed-merges.mjs: the register distinguishes LANDING from AUDIT — the .claude/** row keeps auditing everything under .claude/, but .claude/skills/pm-dispatch/references/** is marked as landing through the queue after seat review (a per-row landing field, or a carve-out row — the dev measures which shape the existing --test / --pr / --branch readers and the self-test support with the smallest diff). --test on a references path prints a verdict that names the tier; --test on .claude/skills/pm-dispatch/SKILL.md, .claude/skills/spec-property-retirement/SKILL.md, .claude/agents/os-dev.md, .claude/hooks/*.sh, AGENTS.md, docs/adr/*.md, skills/** stays GOVERNED. Self-test cases in both directions.
  2. scripts/pm/check-governed-queue-guard.mjs: the merge-group leg reads the same predicate (import, not a copy) so a references-only diff passes the queue without an authorized approval, and a mixed diff (references plus any rules-layer path) stays refused. Self-test both directions. objectui's scripts/check-governed-queue-guard.mjs: measure whether objectui has any .claude/skills/pm-dispatch/references/ path at all; if none, no change there — say so.
  3. AGENTS.md Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 paragraph: name the carve-out in one sentence so check:pm-governed-prose stays green (measure it before and after; the gate's own rule is the authority on what the paragraph must name).
  4. .claude/skills/pm-dispatch/SKILL.md 〈复核〉 governed-face definition line and the ACCEPT fork; references/contract-review.md 落地前检③; references/lanes/skills.md 常设承诺 — each states the tier in one clause: references-only PRs = in-seat contract-tier review (served tier verified) → ready → auto-merge / queue; everything else unchanged. All at ceiling (812 / 60 / lane file) ⇒ paid by density, ⛔ re-wrap is not currency, ⛔ no ceiling raise.
  5. The round report's governed-merge audit section keeps listing references merges (with merged_by), so the maintainer still sees every one after the fact.

Acceptance

  • node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/platform-readings.md ⇒ a verdict that says the path lands through the queue after seat review (NOT the GOVERNED / human-merge verdict); the same command on .claude/skills/pm-dispatch/SKILL.md ⇒ GOVERNED (unchanged). Both quoted in the PR body.
  • Queue-guard self-test: a references-only fixture passes with zero approvals; a references-plus-SKILL.md fixture is refused; the existing fixtures unchanged.
  • pnpm check:pm-governed-prose green on the branch; pnpm check:pm-skill-ratchet green (no ceiling moved); pnpm check:pm-governed-merges self-test green.
  • The audit (check-governed-merges.mjs --since-ref …) still lists a references-only merge — shown by running it over a window that contains one (e.g. PR docs(pm): rest-channel.md rows 1–2 name the ccr REST routes for the draft flip and auto-merge #17823 / docs(pm): platform-readings.md undraft rows name the ccr REST route beside MCP #17828 of 2026-09-12) with the row present.

Not in scope

  • ⛔ Published skills/** in either repo: stays the maintainer's, by the maintainer's own word.
  • ⛔ Any other surface, any change to GOVERNED_APPROVERS, any change to the ratchets.
  • The director-seat batch presentation of governed drafts is its own card (filed alongside this one).

Why p1

Maintainer-directed; today two of the five drafts waiting on the maintainer in this lane alone (PR #17803, PR #17515) are references-plus-script diffs, and references rows were the majority of this lane's hand-merged PRs on 2026-09-11 / 09-12 — the single human terminal is the longest queue in the lane.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions