Use bypass_mode "exempt" — admins get the green Merge-when-ready button - #88
Merged
Conversation
The bypass list has three modes, not two, and they are not degrees of the
same behaviour:
always / pull_request the actor may OVERRIDE the rule at merge time.
GitHub offers "merge without waiting for requirements (bypass
rules)", which merges directly and SKIPS THE MERGE QUEUE. The green
"Merge when ready" never appears, because queue entry is gated on
the pull request satisfying the rules and an override is not
satisfaction.
exempt the rule is treated as NOT APPLICABLE to the
actor. The PR simply reads CLEAN for them, so the normal green
button appears and the PR goes through the queue like any other.
Verified on live PRs, same repo and same PR, one variable changed:
always -> BLOCKED
pull_request -> BLOCKED
exempt -> CLEAN, zero approvals, require_code_owner_review still
enabled, merge_queue still enforced via org-baseline
(which has no bypass), green button confirmed in the UI.
OrganizationAdmin is deliberately removed from org-codeowner-review: an
"always" actor there would re-offer the force-merge path. Break-glass
stays on org-baseline, which owns the queue, and is unchanged.
Comments asserting this was impossible are corrected. They were written
from an incomplete enumeration of the bypass modes.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Aswincloud-Bot
approved these changes
Aug 25, 2026
Aswincloud-Bot
left a comment
There was a problem hiding this comment.
Auto-approved: @Aswinmcw is a member of @Aswincloud/admins.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The bypass list has three modes, not two. I only ever enumerated
alwaysandpull_request, concluded the behaviour was impossible, and wrote that conclusion into the code comments.exemptis the one that does it.The distinction
always/pull_requestexemptQueue entry is gated on the pull request satisfying the rules. An override is not satisfaction, which is why the first two modes can only ever produce a force-merge.
Verified on live PRs
Same repo, same PR, one variable changed:
With
exempt: zero approvals,require_code_owner_reviewstill enabled on the ruleset,merge_queuestill enforced byorg-baseline(empty bypass list),viewerCanMergeAsAdmin: false— so this is definitively not the force-merge path. Green button confirmed in the UI.Changes
codeowner_payload()→bypass_mode: "exempt"OrganizationAdminremoved fromorg-codeowner-review— analwaysactor there would re-offer the force-merge path and defeat the point. Break-glass stays onorg-baseline, which owns the queue, unchanged.exemptback toalways.norm()includesbypass_modein the compare key, so the mode change registers as drift and every repo gets rewritten on the next enforce run.Note
shiptrackis currently the test bed and hasorg-baseline's bypass stripped for isolation. The enforce run after this merges will restore its break-glass and bring it in line with the other 20.🤖 Generated with Claude Code