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
- Delete
.claude/hooks/guard-governed-enqueue.sh and .claude/hooks/guard-governed-enqueue.selftest.sh.
- Remove both
settings.json hook registrations that name it ("$CLAUDE_PROJECT_DIR/.claude/hooks/guard-governed-enqueue.sh", two entries on origin/main).
- 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.
- 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.
- ⛔ 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
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. ⛔ Nodomain:*set by the filer; the surface is.claude/hooks/**+.claude/settings.json+ PM gate rosters, which the lane table anchors todomain:skills— triage confirms.Dedup terms:
guard-governed-enqueue·enqueue guard removal·PreToolUse hook·ccr/auto_merge route·check-governed-queue-guardRuling being executed (PR #18447, batch #143 item 4)
The hard line for 「受管面 PR 无授权批准时永不入队」 is
scripts/pm/check-governed-queue-guard.mjson themerge_groupbuild (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 hookguard-governed-enqueue.shexisted 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
.claude/hooks/guard-governed-enqueue.shand.claude/hooks/guard-governed-enqueue.selftest.sh.settings.jsonhook registrations that name it ("$CLAUDE_PROJECT_DIR/.claude/hooks/guard-governed-enqueue.sh", two entries onorigin/main).scripts/pm/dispatch-gates.mjsfamilies,check:pm-dispatch-gates, anycheck-*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.scripts/pm/check-governed-queue-guard.mjs, thesettings.jsondenyroster (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.jsonlists no family that runs the deleted self-test; every listed command exits 0 on the branch..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