Found while checking a review finding on #104, not while looking for it.
What is the case
.github/workflows/ci.yml carries a merge_group trigger, and the comment above it records exactly why:
A merge queue builds main plus the queued pull requests together and merges only if that combination is green. […] The reason it exists: #81 and #83 were each green and merged four minutes apart, and their combination broke the net48 leg on main (#85). Neither pull request was ever built against the other.
The trigger has never fired. Filtering CI runs by event: merge_group returns total_count: 0. Every merge to main, including #100 and #101 today, went in as a plain merge commit.
So the workflow half is done and the repository-settings half is not: GitHub's merge queue has to be turned on in the branch protection / ruleset for main before the trigger can ever be reached.
Why it matters
The failure it was built for is not hypothetical — #85 already happened, from two green pull requests merged four minutes apart. The workflow change that was supposed to prevent a repeat is inert, and nothing surfaces that: an unused trigger looks identical to a working one in the file.
It also affects a rule being added in #104. One pull request open at a time has two justifications — supervision cost, and the base merges that a merge to main forces on everything else in flight. The second one is only true while the queue is off. With the queue on, a queued branch is tested against current main on a temporary ref, with no base merge and no new head. Worth knowing so the rule is not later dismissed on the grounds that "we have a merge queue" when in practice we do not.
What to check when picking this up
- Whether the queue was deliberately left off (it interacts with required checks, and every required check must also run on
merge_group, which this workflow does handle).
- Whether the
version job's GitVersion behaviour on a gh-readonly-queue/... ref is really tolerated — the comment claims it is, but that claim has never been executed, so it is unverified rather than known.
- That
concurrency: ci-${{ github.workflow }}-${{ github.ref }} gives each queue entry its own group, as the comment states.
Low priority, no user-visible effect. But it is a guard that is currently only decorative, which is worse than not having it, because it reads as protection that is not there.
Refs #81, #83, #85, #104.
Found while checking a review finding on #104, not while looking for it.
What is the case
.github/workflows/ci.ymlcarries amerge_grouptrigger, and the comment above it records exactly why:The trigger has never fired. Filtering CI runs by
event: merge_groupreturnstotal_count: 0. Every merge tomain, including #100 and #101 today, went in as a plain merge commit.So the workflow half is done and the repository-settings half is not: GitHub's merge queue has to be turned on in the branch protection / ruleset for
mainbefore the trigger can ever be reached.Why it matters
The failure it was built for is not hypothetical — #85 already happened, from two green pull requests merged four minutes apart. The workflow change that was supposed to prevent a repeat is inert, and nothing surfaces that: an unused trigger looks identical to a working one in the file.
It also affects a rule being added in #104. One pull request open at a time has two justifications — supervision cost, and the base merges that a merge to
mainforces on everything else in flight. The second one is only true while the queue is off. With the queue on, a queued branch is tested against currentmainon a temporary ref, with no base merge and no new head. Worth knowing so the rule is not later dismissed on the grounds that "we have a merge queue" when in practice we do not.What to check when picking this up
merge_group, which this workflow does handle).versionjob's GitVersion behaviour on agh-readonly-queue/...ref is really tolerated — the comment claims it is, but that claim has never been executed, so it is unverified rather than known.concurrency: ci-${{ github.workflow }}-${{ github.ref }}gives each queue entry its own group, as the comment states.Low priority, no user-visible effect. But it is a guard that is currently only decorative, which is worse than not having it, because it reads as protection that is not there.
Refs #81, #83, #85, #104.