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.

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions