Skip to content

fix(ci): drain the merge queue oldest-first, not newest-first - #128

Merged
github-actions[bot] merged 1 commit into
mainfrom
fix/merge-queue-fifo
Aug 6, 2026
Merged

fix(ci): drain the merge queue oldest-first, not newest-first#128
github-actions[bot] merged 1 commit into
mainfrom
fix/merge-queue-fifo

Conversation

@catomean

@catomean catomean commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

gh pr list returns newest-first, and the sweep merges the first eligible PR then stops. So the newest green PR wins every sweep, and an older one can wait indefinitely.

Observed in maonakamoto/fleetcrown on 2026-08-06: two consecutive sweeps merged the two newest PRs while three older green ones sat untouched and were never even evaluated. With several agent sessions opening PRs continuously that is starvation — and it starves the worst candidate, since the longest-waiting PR is the one whose checks were proven against the most now-stale base.

-for number in $(printf '%s' "$prs_json" | jq -r '.[].number'); do
+for number in $(printf '%s' "$prs_json" | jq -r 'sort_by(.number) | .[].number'); do

PR numbers increase monotonically with creation, so sorting ascending is FIFO. The ordering was never a decision — just whatever gh happened to return.

Fixed upstream first (fleetcrown #182) and verified in production there: the sweep immediately after it landed correctly took the oldest open PR rather than the newest. This is that same one-line change applied across the fleet. Nothing else changes — same eligibility rules, same one-merge-per-sweep pacing, same green-base guard.

🤖 Generated with Claude Code

`gh pr list` returns newest-first, and the sweep merges the first eligible PR
then stops. So the newest green PR wins every sweep, and an older one can wait
indefinitely.

Observed in maonakamoto/fleetcrown on 2026-08-06: two consecutive sweeps merged
the two newest PRs while three older green ones sat untouched and were never
even evaluated. With several agent sessions opening PRs continuously that is
starvation — and it starves the worst candidate, since the longest-waiting PR
is the one whose checks were proven against the most now-stale base.

PR numbers increase monotonically with creation, so sorting ascending is FIFO.
The ordering was never a decision, just whatever gh happened to return.

Fixed upstream first (fleetcrown #182) and verified in production there: the
sweep immediately after it landed correctly took the oldest open PR rather than
the newest. This is that one-line change, applied to the fleet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions
github-actions Bot merged commit 647513c into main Aug 6, 2026
2 checks passed
@github-actions
github-actions Bot deleted the fix/merge-queue-fifo branch August 6, 2026 13:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant