Filed by the director seat, summon #25 (session_012GcsUbuqFGBibkEDMRC1eE), answering the maintainer's question in chat: 「19024 我已经合并了很多次,查查什么原因没成功,我可以管理员强制合并吗」. ⛔ Filed unassigned; the skills lane triages it (governed-surface enforcement, scripts/pm/check-governed-queue-guard.mjs + .github/workflows/governed-surface-guard.yml). ⛔ No domain:* / priority:* / type applied. ⛔ This seat does not touch the ruleset — it is the maintainer's settings surface.
What was measured (REST, read at the time of filing)
The ruleset (GET /repos/objectstack-ai/objectstack/rulesets/12119582, name main, enforcement active, target ~DEFAULT_BRANCH):
- rules:
deletion, non_fast_forward, merge_queue (SQUASH, ALLGREEN, max 5), pull_request (0 required approvals), required_status_checks — seven contexts, one of them Governed Surface Queue Guard.
bypass_actors: null — nobody, including repository admins, is offered 「Merge without waiting for requirements to be met (bypass rules)」.
The guard (check-governed-queue-guard.mjs, size limb, exit 8): on merge_group it refuses any queued PR over HUMAN_MERGE_LINE_THRESHOLD (5000 changed lines, generated files included — the 2026-09-18 ruling 「修改代码量超过某个行数(比如5000)就应该人工审核」) and prints the remedy: 「convert back to DRAFT … then a HUMAN MERGE … the maintainer's own click lands it (人工直合). ⛔ An authorized APPROVED review does NOT lift this limb」. Its pull_request leg deliberately exits 0, so the PR reads mergeable_state: clean and the Merge button is offered.
PR #19024 (239,275 changed lines, +119 / −239,156; CI green on 499c4791d6; os-zhuang APPROVED twice; contract review PASS): three added_to_merge_queue events, each followed by removed_from_merge_queue by github-merge-queue[bot]:
| enqueued by |
at |
removed at |
guard run |
| os-bill |
2026-09-18T14:34:34Z |
2026-09-18T15:16:38Z |
(size limb; the 2026-09-18 ruling landed that day) |
| os-steve |
2026-09-20T10:22:06Z |
2026-09-20T10:43:37Z |
refused on the size limb (the seat's own record, PR comment 5749315132) |
os-zhuang (a GOVERNED_APPROVERS account, the maintainer's) |
2026-09-20T11:22:09Z |
2026-09-20T11:34:17Z |
workflow run 35507643546, merge_group, gh-readonly-queue/main/pr-19024-81e12e18…, conclusion failure |
⇒ Under this ruleset the only Merge button anyone sees is 「Merge when ready」 = enqueue; the guard is required and refuses on size in the merge group; there is no bypass path. The guard's prescribed terminal (人工直合) is unreachable by construction. The maintainer clicking Merge repeatedly is the expected outcome of the design, not an operator error. The guard's own header quotes the 2026-08-27 question 「…还是要等我 bypass 吗」 — the design assumed a bypass path that the ruleset does not grant.
What this card asks — one of two, the maintainer's choice, then the text follows
- (a) Ruleset grants the bypass the guard assumes: add a bypass actor to ruleset
main (the Repository admin role, or the GOVERNED_APPROVERS accounts) — bypass mode 「for pull requests only」 keeps the deletion / non-fast-forward rules intact. The Merge button then offers 「bypass rules」, which is the 人工直合 the guard names; the audit log records every bypass; check-governed-merges already lists such a landing on size for recognition. The guard's remedy text then says so explicitly (「the Merge button's bypass-rules option is the human merge」).
- (b) The guard stops prescribing a terminal the ruleset cannot reach: the size limb passes a merge group when the PR carries a
GOVERNED_APPROVERS APPROVED review and a human-merge marker the maintainer sets (the same ACCEPT / needs-user-decision / 速读 shape it already prescribes), so the queue lands it. ⚠️ This widens the limb past the 2026-09-18 ruling's literal 「人工审核」 → the guard's own text says that widening is 「the maintainer's one-line decision in the sibling」 — it needs that line, ⛔ not a seat's judgement.
Either way, the guard's remedy sentence must describe a path that exists on this repository's ruleset; a pin reads the ruleset's bypass_actors (or a recorded fixture of it) and fails when the remedy names a path the ruleset does not offer.
Not this card
Dedupe words: human merge unreachable bypass_actors null · Governed Surface Queue Guard size limb merge queue mandatory · 人工直合 ruleset bypass · PR 19024 removed_from_merge_queue three times · HUMAN_MERGE_LINE_THRESHOLD terminal ruleset
Generated by Claude Code
Filed by the director seat, summon #25 (
session_012GcsUbuqFGBibkEDMRC1eE), answering the maintainer's question in chat: 「19024 我已经合并了很多次,查查什么原因没成功,我可以管理员强制合并吗」. ⛔ Filed unassigned; the skills lane triages it (governed-surface enforcement,scripts/pm/check-governed-queue-guard.mjs+.github/workflows/governed-surface-guard.yml). ⛔ Nodomain:*/priority:*/ type applied. ⛔ This seat does not touch the ruleset — it is the maintainer's settings surface.What was measured (REST, read at the time of filing)
The ruleset (
GET /repos/objectstack-ai/objectstack/rulesets/12119582, namemain, enforcementactive, target~DEFAULT_BRANCH):deletion,non_fast_forward,merge_queue(SQUASH, ALLGREEN, max 5),pull_request(0 required approvals),required_status_checks— seven contexts, one of themGoverned Surface Queue Guard.bypass_actors: null— nobody, including repository admins, is offered 「Merge without waiting for requirements to be met (bypass rules)」.The guard (
check-governed-queue-guard.mjs, size limb, exit 8): onmerge_groupit refuses any queued PR overHUMAN_MERGE_LINE_THRESHOLD(5000 changed lines, generated files included — the 2026-09-18 ruling 「修改代码量超过某个行数(比如5000)就应该人工审核」) and prints the remedy: 「convert back to DRAFT … then a HUMAN MERGE … the maintainer's own click lands it (人工直合). ⛔ An authorized APPROVED review does NOT lift this limb」. Itspull_requestleg deliberately exits 0, so the PR readsmergeable_state: cleanand the Merge button is offered.PR #19024 (239,275 changed lines, +119 / −239,156; CI green on
499c4791d6; os-zhuang APPROVED twice; contract review PASS): threeadded_to_merge_queueevents, each followed byremoved_from_merge_queuebygithub-merge-queue[bot]:GOVERNED_APPROVERSaccount, the maintainer's)merge_group,gh-readonly-queue/main/pr-19024-81e12e18…, conclusion failure⇒ Under this ruleset the only Merge button anyone sees is 「Merge when ready」 = enqueue; the guard is required and refuses on size in the merge group; there is no bypass path. The guard's prescribed terminal (人工直合) is unreachable by construction. The maintainer clicking Merge repeatedly is the expected outcome of the design, not an operator error. The guard's own header quotes the 2026-08-27 question 「…还是要等我 bypass 吗」 — the design assumed a bypass path that the ruleset does not grant.
What this card asks — one of two, the maintainer's choice, then the text follows
main(theRepository adminrole, or theGOVERNED_APPROVERSaccounts) — bypass mode 「for pull requests only」 keeps the deletion / non-fast-forward rules intact. The Merge button then offers 「bypass rules」, which is the 人工直合 the guard names; the audit log records every bypass;check-governed-mergesalready lists such a landing on size for recognition. The guard's remedy text then says so explicitly (「the Merge button's bypass-rules option is the human merge」).GOVERNED_APPROVERSAPPROVED review and a human-merge marker the maintainer sets (the same ACCEPT /needs-user-decision/ 速读 shape it already prescribes), so the queue lands it.Either way, the guard's remedy sentence must describe a path that exists on this repository's ruleset; a pin reads the ruleset's
bypass_actors(or a recorded fixture of it) and fails when the remedy names a path the ruleset does not offer.Not this card
Governed Surface Queue Guardfrom the required set — that reopens the three incidents the guard exists for (incident: the devx PM seat armed and enqueued a governed-surface PR 19 minutes after #9495 widened the governed set — it survived only on a merge conflict #9550, Incident: governed-surface PR #10483 (.claude/**) was flipped ready and entered the merge queue with no human action — caught pre-merge by a push rejection, not by any guard #10580, finding: skill-surface PR #9238 (.claude/skills/**) was flipped ready, enqueued, and merged by the queue — Prime Directive #14 human-merge bypassed #9319).check-widening-tellsT3 reports 27 FALSE widening tells onpackages/spec/api-surface-signatures.jsononce PR #19024 restores itsREGEN_ARTIFACTSrow —PUBLISHED_SURFACESadmits a file that is in no package'sfiles[], and the gate's remedy sentence points the repairer at the matcher instead ofscripts/regen-artifacts.mjs#19341).Dedupe words:
human merge unreachable bypass_actors null·Governed Surface Queue Guard size limb merge queue mandatory·人工直合 ruleset bypass·PR 19024 removed_from_merge_queue three times·HUMAN_MERGE_LINE_THRESHOLD terminal rulesetGenerated by Claude Code