You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Observed live on 2026-09-10 while promoting the first change through the three-tier branch model.
What happened
PR #66 promoted integration into main. Merging it deleted the integration branch, and GitHub then fired automatic_base_change_succeeded on PR #64, silently retargeting it from integration to main. A pull request that touches .github/, tools/, and tests/ was moved onto the branch the base-branch guard forbids those paths from targeting.
Causal chain
delete_branch_on_merge was true at the repository level.
A promotion pull request uses integration as its head, so merging it triggers head-branch deletion. Every other pull request in this repository uses a disposable feature branch as head, which is the case that setting was designed for.
protect-integration carries a deletion rule that should have blocked it. The merge used --admin, and the ruleset grants RepositoryRole 5 an always-bypass, so the deletion went through.
With the base branch gone, GitHub retargeted the open pull request built on it.
The admin bypass exists so a single maintainer can merge without a second reviewer. That same bypass defeated the deletion protection it sits beside.
Fixed already
delete_branch_on_merge set to false. A permanent branch used as a pull request head is incompatible with auto-delete, and promotion is routine under this model rather than exceptional.
integration recreated from main, which already contained everything it held.
Nothing enforces this. If someone re-enables auto-delete, the next promotion deletes integration again and the failure is silent until a contributor is confused by a retargeted pull request. Options worth weighing: a scheduled check asserting integration exists and that delete_branch_on_merge is false, or promoting by fast-forwarding main rather than by pull request so no head branch is consumed.
Observed live on 2026-09-10 while promoting the first change through the three-tier branch model.
What happened
PR #66 promoted
integrationintomain. Merging it deleted theintegrationbranch, and GitHub then firedautomatic_base_change_succeededon PR #64, silently retargeting it fromintegrationtomain. A pull request that touches.github/,tools/, andtests/was moved onto the branch the base-branch guard forbids those paths from targeting.Causal chain
delete_branch_on_mergewastrueat the repository level.integrationas its head, so merging it triggers head-branch deletion. Every other pull request in this repository uses a disposable feature branch as head, which is the case that setting was designed for.protect-integrationcarries adeletionrule that should have blocked it. The merge used--admin, and the ruleset grantsRepositoryRole 5an always-bypass, so the deletion went through.The admin bypass exists so a single maintainer can merge without a second reviewer. That same bypass defeated the deletion protection it sits beside.
Fixed already
delete_branch_on_mergeset tofalse. A permanent branch used as a pull request head is incompatible with auto-delete, and promotion is routine under this model rather than exceptional.integrationrecreated frommain, which already contained everything it held.integration.Still open
Nothing enforces this. If someone re-enables auto-delete, the next promotion deletes
integrationagain and the failure is silent until a contributor is confused by a retargeted pull request. Options worth weighing: a scheduled check assertingintegrationexists and thatdelete_branch_on_mergeis false, or promoting by fast-forwardingmainrather than by pull request so no head branch is consumed.Blocked on the branch model landing in #64.