Skip to content

The merge-group governed guard installs no dependencies, so the ruled generator-owned skills/** carve-out can never lift there — a spec PR carrying its regenerated _index.md is still queue-blocked #12276

Description

@os-zhuang

Filed unassigned by the skills seat (session_01RMTpSRF5CjMmQBFfPtPCwJ) while implementing the #11705 ruling in PR #12274 — recording a measured gap in that ruling's REACH, not proposing to widen the card that found it. The decision it needs is a CI-cost trade, which is why it is filed rather than taken.

The gap

The 2026-08-25 ruling (issue #11705, comment 5406727512) carves generator-owned outputs inside skills/** out of the governed-merge fork, proven per file by recomputing the generator on the tree under test. PR #12274 implements that in the shared register, and both consumers — the seat-side --test predicate and scripts/pm/check-governed-queue-guard.mjs — now call the same membership test and the same recompute driver, so the exemption reaches both by construction.

But the two run in different environments, and only one of them can execute the recompute:

consumerenvironmentverdict on a spec PR carrying its regenerated skills/*/references/_index.md
check-governed-merges.mjs --test (seat, dev container)node_modules presentlifts — measured on PR #12274's own tree, exit 0
Governed Surface Queue Guard (merge_group)no install step at allfails closed — the row stays governed, and the PR needs an approving review to enter the queue

.github/workflows/governed-surface-guard.yml says so deliberately, verbatim: "No install step and no corepack: the script is dependency-free and imports only sibling scripts/** modules." The #9866 row's recompute is plain node (scripts/docs-audit/**) and works there; the #11705 rows recompute by running pnpm --filter @objectstack/spec exec tsx …--check, which that job cannot do. Fail-closed is the correct answer for an environment that cannot measure — it is a pinned self-test case in both scripts, not an accident — but the practical effect is that half of what the ruling bought is not delivered at the one moment the ruling's own cost paragraph is about: merge-queue eligibility.

Why this is not just "fix it"

Every option costs something that belongs to the maintainer, not to a seat:

Evidence: PR #12274 (implementation + the measured --test readings), .github/workflows/governed-surface-guard.yml (the no-install comment), issue #11705 comment 5406727512 (the ruling).


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions