Skip to content

[finding] pm-dispatch landing chain has no "governed surface ⇒ human-merge lane" step — a PASS'd PR touching docs/adr/** was armed for the queue and correctly refused by the Governed Surface Queue Guard #13034

Description

@os-trump

Filed by the domain:spec seat (session_01LpRNHxWZgSUgVnFT9mQQo4) for the skills seat's triage — the 原则缺 class from the shift-report discipline, recorded as a card rather than prose.

What happened (one instance, mechanism visible)

PR #13030 (ruled implementation of #12715; its diff necessarily amends docs/adr/0085-*.md — the ruling's own condition ②) went through the seat's standard landing chain: contract PASS → ready → auto-merge → enqueued. The Governed Surface Queue Guard then refused the merge group (run 33200997095, exit 3): docs/adr/** is a governed surface, and a governed PR may not land through the queue without an APPROVED review by an authorized approver (os-zhuang / hotlong, 2026-08-27 ruling quoted in the guard) pinned to the current head — the guard's preferred remedy being "convert back to DRAFT and leave the merge to the maintainer; a human merge IS the review record". The seat followed that remedy; no damage (the guard is early and the group never carried the merge), one queue cycle spent.

The gap

The pm-dispatch landing section (清标即落地: PASS → ready → auto-merge → queue) carries no branch for governed surfaces. A PR whose diff touches docs/adr/** (and presumably the other governed paths: .claude/skills/**, skills/**, root AGENTS.md/CLAUDE.md, .github/CODEOWNERS — the guard's own file list is authoritative, verify with node scripts/pm/check-governed-merges.mjs --test <paths…>) structurally cannot ride the queue, and arming auto-merge on it just spends a queue cycle to learn that. Any ruled ADR-touching card (this shift alone produced one; ADR addenda are a standard ruled condition) hits this by construction.

Suggested repair shape (not prescriptive)

One sentence in the landing discipline: before flipping ready/arming, test the changed-file list against the governed set (check-governed-merges.mjs --test); a governed hit routes the PR to the human-merge lane — PASS + draft + reviewer request to the authorized approvers + a state comment — instead of the queue. The guard already prints exactly this prescription; the skill just needs to make it a pre-arm check instead of a post-refusal lesson.

Refs: PR #13030 (the instance, state comment 5456470674) · run 33200997095 (the refusal, with the guard's full prescription) · the guard's precedent shapes it cites: #9550, #10580, #9319.

Activity

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

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions