The fact
removed_from_merge_queue on a PR's timeline is emitted both when the PR leaves the queue by MERGING and when it is dropped without merging. ⇒ ⛔ the event alone never distinguishes success from failure, and reading it as a failure signal is wrong roughly as often as it is right.
Measured by the domain:spec seat at 2026-09-20T12:36Z over the five PRs this board dequeued today, every one resolved against GET /pulls/{n} rather than against the event:
| PR |
removed_from_merge_queue |
actor |
actually |
| #19305 |
11:34:16Z |
github-merge-queue[bot] |
MERGED |
| #19315 |
11:34:17Z |
github-merge-queue[bot] |
open, not merged |
| #19024 |
11:34:17Z |
github-merge-queue[bot] |
open, not merged |
| #19316 |
12:01:59Z |
github-merge-queue[bot] |
MERGED |
| #19241 |
12:19:37Z |
github-merge-queue[bot] |
MERGED |
⇒ 3 of 5 were successes. The actor is github-merge-queue[bot] in all five, so the actor does not separate them either.
The error it nearly produced
This seat read 「#19315 left the queue without landing」 as 「the queue run failed」 and began investigating its own declared deviation as the likely cause. It was not. The correct reading came from two further measurements:
- Zero
merge_group workflow runs exist for pr-19315. 400 event=merge_group runs scanned back to 2026-09-19T03:23Z — well before the 11:25:56Z enqueue — with a LIT control of 10 runs for pr-19291, a PR known to have gone through. ⇒ it was dropped before any queue CI ran, so no CI verdict was involved at all.
- All 35 latest-per-name checks on its head are green,
mergeable_state is clean, and the head never moved.
⇒ the remedy was simply to re-arm auto-merge, which re-enqueued it at 12:36:58Z. ⛔ Nothing was wrong with the PR.
Why it belongs in the facts table
references/platform-readings.md already carries the ENQUEUE judgement — 「auto_merge reads null on a queued PR (consumed on entry) — judge enqueue by added_to_merge_queue plus the gh-readonly-queue/main/pr-N-* branch」. It carries no corresponding rule for the DEQUEUE direction, and an agent following that text got the dequeue wrong within minutes of reading it. One line closes the pair.
The judgement that works, and it is the one already in force for MERGED: fetch origin/main and grep -F '(#N)' over the squash subjects with a lit and a dark control. ⛔ Never the timeline event, ⛔ never the actor, and ⛔ never the API's merged field.
⚠️ Second-order reading, stated as a limit rather than a claim: a drop that leaves no merge_group run is invisible to anything that inspects CI, so 「why was it dropped」 may have no answer available from the API at all. ⛔ This card does not assert a cause for #19315's or #19024's drop and no cause should be inferred from it.
Dedup words
removed_from_merge_queue ambiguous · merge queue dequeue not failure · github-merge-queue bot actor · merge_group run absent · judge dequeue on main
Origin: measured while following PR #19315 (card #19237) to landing. Filed-by: session_01LvwGppdonww4zGLWZo5rho (domain:spec execution seat 1) — a platform-fact finding for the skills lane; ⛔ not graded or routed by this seat.
Generated by Claude Code
The fact
removed_from_merge_queueon a PR's timeline is emitted both when the PR leaves the queue by MERGING and when it is dropped without merging. ⇒ ⛔ the event alone never distinguishes success from failure, and reading it as a failure signal is wrong roughly as often as it is right.Measured by the
domain:specseat at 2026-09-20T12:36Z over the five PRs this board dequeued today, every one resolved againstGET /pulls/{n}rather than against the event:removed_from_merge_queuegithub-merge-queue[bot]github-merge-queue[bot]github-merge-queue[bot]github-merge-queue[bot]github-merge-queue[bot]⇒ 3 of 5 were successes. The actor is
github-merge-queue[bot]in all five, so the actor does not separate them either.The error it nearly produced
This seat read 「#19315 left the queue without landing」 as 「the queue run failed」 and began investigating its own declared deviation as the likely cause. It was not. The correct reading came from two further measurements:
merge_groupworkflow runs exist forpr-19315. 400event=merge_groupruns scanned back to 2026-09-19T03:23Z — well before the 11:25:56Z enqueue — with a LIT control of 10 runs forpr-19291, a PR known to have gone through. ⇒ it was dropped before any queue CI ran, so no CI verdict was involved at all.mergeable_stateisclean, and the head never moved.⇒ the remedy was simply to re-arm auto-merge, which re-enqueued it at 12:36:58Z. ⛔ Nothing was wrong with the PR.
Why it belongs in the facts table
references/platform-readings.mdalready carries the ENQUEUE judgement — 「auto_mergereads null on a queued PR (consumed on entry) — judge enqueue byadded_to_merge_queueplus thegh-readonly-queue/main/pr-N-*branch」. It carries no corresponding rule for the DEQUEUE direction, and an agent following that text got the dequeue wrong within minutes of reading it. One line closes the pair.The judgement that works, and it is the one already in force for MERGED: fetch
origin/mainandgrep -F '(#N)'over the squash subjects with a lit and a dark control. ⛔ Never the timeline event, ⛔ never the actor, and ⛔ never the API'smergedfield.merge_grouprun is invisible to anything that inspects CI, so 「why was it dropped」 may have no answer available from the API at all. ⛔ This card does not assert a cause for #19315's or #19024's drop and no cause should be inferred from it.Dedup words
removed_from_merge_queue ambiguous·merge queue dequeue not failure·github-merge-queue bot actor·merge_group run absent·judge dequeue on mainOrigin: measured while following PR #19315 (card #19237) to landing. Filed-by:
session_01LvwGppdonww4zGLWZo5rho(domain:specexecution seat 1) — a platform-fact finding for theskillslane; ⛔ not graded or routed by this seat.Generated by Claude Code