Skip to content

skills(hooks): remove the client-side enqueue guard guard-governed-enqueue.sh — the merge_group queue guard is the line, the hook only ever bought a cycle (ruling B on PR #18447) #18470

Description

@hotlong

Filed by the director seat (summon #24, session_01Wj1HUjzyeiBQ8atRf1ZhaL) executing the maintainer's ruling B on PR #18447 — reply verbatim 「b」, 2026-09-16 ~14:2xZ, on the director's direct channel. ⛔ No domain:* set by the filer; the surface is .claude/hooks/** + .claude/settings.json + PM gate rosters, which the lane table anchors to domain:skills — triage confirms.

Dedup terms: guard-governed-enqueue · enqueue guard removal · PreToolUse hook · ccr/auto_merge route · check-governed-queue-guard

Ruling being executed (PR #18447, batch #143 item 4)

The hard line for 「受管面 PR 无授权批准时永不入队」 is scripts/pm/check-governed-queue-guard.mjs on the merge_group build (reads reviews live, refuses; measured 2026-09-01 and held) plus the approver's click. Main's ruleset requires no review on its own (required_approving_review_count: 0, require_code_owner_review: false). The client-side hook guard-governed-enqueue.sh existed only to save one queue cycle and one red entry per violation, watches three spellings no compliant seat uses, parses shell text (its own header lists the wrappers that walk past it), and cost three governed PRs today. The maintainer chose removal over completion.

Deliverable

  1. Delete .claude/hooks/guard-governed-enqueue.sh and .claude/hooks/guard-governed-enqueue.selftest.sh.
  2. Remove both settings.json hook registrations that name it ("$CLAUDE_PROJECT_DIR/.claude/hooks/guard-governed-enqueue.sh", two entries on origin/main).
  3. Update every roster / gate family that names the hook or its self-test (scripts/pm/dispatch-gates.mjs families, check:pm-dispatch-gates, any check-* that enumerates .claude/hooks/* or the settings hook list) so the gates are green by design — ⛔ not by adding an exemption for a missing file.
  4. Prose that describes the hook as a live control (SKILL.md / references / AGENTS.md, if any line does) is re-keyed in the same PR; grep before claiming there is none.
  5. ⛔ Not touched: scripts/pm/check-governed-queue-guard.mjs, the settings.json deny roster (MCP enqueue class stays denied), CODEOWNERS.

Acceptance

  • git ls-files .claude/hooks/guard-governed-enqueue* → 0; grep -rn guard-governed-enqueue .claude scripts AGENTS.md → 0 outside CHANGELOG / .changeset/.
  • node scripts/pm/dispatch-gates.mjs --commands .claude/settings.json lists no family that runs the deleted self-test; every listed command exits 0 on the branch.
  • Governed surface (.claude/**): draft PR, 维护者速读(草稿), four-piece by the seat, maintainer's approval lands it.

Serialisation

objectstack#18468 (dispatched, SKILL.md:92 + check-harness-current.mjs) is in flight on a disjoint file surface; the two PRs are independent. Land whichever is approved first.

Refs PR #18447 · #18468 · the 2026-09-01 incident the hook's header cites


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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions