Skip to content

[p0-suspect] Governed Surface Queue Guard is not in the required check set — a zero-review governed PR (#12402, .claude/agents/os-dev.md) merged through the queue while the guard's refusal ran as advisory #12427

Description

@os-steve

Filed by the skills seat (session_01JANH3y7qe3MD8aLaLXci8N), root-caused from primary readings during the 2026-08-26 landing window. Anchor card for this check per the one-anchor convention (landing-operations B); later discoverers comment here.

What happened (all readings primary, none inferred)

PR #12402 (diff = .claude/agents/os-dev.md — governed: .claude/**) merged to main at 02:06:12Z with ZERO approving reviews:

  • GET /pulls/12402/reviews → []; issue timeline carries no reviewed event. Two independent sources agree.
  • Timeline: ready_for_review (01:51:45) → added_to_merge_queue (01:51:49) → removed_from_merge_queue by github-merge-queue[bot] (02:06:11) → merged (02:06:12). Actor for flip/enqueue: the shared seat identity (which session performed it is a separate, open process question — this card is about the machine).

The guard worked as designed — and its verdict is not wired to anything

Job log of the guard run at 01:51:50 (job 98033157381, run 32920552012), verbatim:

Governed Surface Queue Guard — pull_request — 1 governed pull request(s), … ⛔ NO approving review (0 review(s) read, none decisive-APPROVED) … ⚠️ EARLY WARNING, not a failure — this run is on the pull request, and this check is deliberately GREEN here. … If it IS enqueued anyway, the merge-queue run of this same check will REFUSE it unless every governed pull request above carries an APPROVED review by then.

So detection was correct and loud. But PR #12402's check set contains NO merge_group run of the guard at all — only the two pull_request runs (01:38:52 and 01:51:50, both deliberately green). The queue merged the PR ~14 minutes after enqueue.

Cross-reading that pins the mechanism: the sibling measurement on the check-set decision card (2026-08-25) found exactly four workflows carry merge_group as a trigger and all six required contexts live in ci.yml + lint.yml — the Governed Surface Queue Guard is not a required context. The merge queue waits only for required checks, so the guard's refusal — the entire PREVENTION half of the #11704 regime — is advisory at the only moment it exists for. The guard's own header describes the retired gate's failure in the same words: "it sat outside the required set, so it never blocked anything anyway." The prevention half has inherited the disease it was built to replace.

Ruled out by measurement

The remedy (maintainer-only, one Settings visit)

Add the Governed Surface Queue Guard check context to the required set on the main ruleset. PR-level runs are green by design, so requiring it costs routine traffic nothing; the merge_group run then actually blocks a zero-review governed enqueue — the behaviour every reader of the guard's header already believes exists. ⚠️ This pairs naturally with the already-ruled queue-enforcement Settings change (the 2026-08-26 「同意」 on the merge-queue requirement card): one ruleset visit, two toggles.

Same-window instances of the same shape: PR #12406 and #12407 were also flipped+enqueued by the shared identity at 02:05Z (the #12406 diff is likewise governed, zero reviews at enqueue time). Content risk in all three cases is nil — each had a recorded fable-tier seat ACCEPT — the hole is the missing machine backstop, which exists precisely for the day that is not true.

Refs: the guard's own header (scripts/pm/check-governed-queue-guard.mjs) · job 98033157381 · the check-set parity measurement card · the queue-requirement decision card (ruled A, 2026-08-26) · the label-carrier finding #12409 (adjacent detection-side gap).

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

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions