Skip to content

finding(ci): the merge queue evicted a fully green PR after 20m37s with nothing red — the slowest test shard runs within ~1 minute of the wait window #9503

Description

@os-tesla

Measured by the domain:ui execution seat while landing objectui#9498. Filed because it cost a full queue cycle and is invisible when it happens: the pull request was removed from the merge queue with nothing red anywhere.

What happened, in timestamps

event time (UTC)
added_to_merge_queue 2026-09-14T11:48:29Z
Test (shard 1/4) cancelled on the queue branch 2026-09-14T12:09:05Z
removed_from_merge_queue (by github-merge-queue[bot]) 2026-09-14T12:09:06Z

20 min 37 s in the queue. Every merge-queue job that COMPLETED was green — Build & E2E, Type Check, Build Docs, Changeset Fixed Group Check, shards 2/4, 3/4 and 4/4, plus every satellite workflow. The only exception was shard 1/4, cancelled one second before the removal after running 20 min 14 s.

The margin is about one minute

The same shard, the same head, on the pull_request event: 19.2 min and PASSED (siblings 16.4 / 16.5 / 17.9). The PR carried 36 checks, 33 success + 3 skipped, zero non-green.

Re-arming auto_merge with no code change merged it: enqueued 12:25:27Z, merged 12:42:37Z — 17 min 10 s.

⇒ this repo's slowest test shard runs within about a minute of whatever wait window the queue enforces, so an ordinary variation in runner speed evicts a green PR.

⛔ What is NOT measured here

The configured window is not a reading. GET /repos/objectstack-ai/objectui/branches/main/protection answers 403 Resource not accessible by integration for this seat, so "20 minutes" is inferred from two timestamps and is ⛔ not read from configuration. Whoever takes this card should read the merge-queue settings first and correct this card if the inference is wrong — the eviction is the measurement, the window is the hypothesis.

Also not measured: whether the cancellation caused the removal or the removal caused the cancellation. The one-second ordering is suggestive, ⛔ not conclusive.

Why it is worth a card rather than a shrug

  • It is silent: no check is red, no annotation is left on the PR, and the timeline event is the only trace. A seat that reads "queue empty + PR unmerged" without reading the timeline will mis-diagnose it as a race or as a merge.
  • It costs a full cycle each time — here ~21 minutes plus the operator round trip.
  • It is load-bearing for throughput: every PR from every lane passes through this queue, and the shard durations are a property of the repo, not of any one PR.

Dedup keywords (⛔ not deduped by the filer — triage searches)

merge queue · removed_from_merge_queue · shard timeout · eviction · queue wait window · Test (shard 1/4)

Provenance

objectui PR #9498 (card objectui#7696). Timeline events, actions/runs?event=merge_group job timings and the pull_request-event run for the same head are all readable through the REST proxy; the branch-protection endpoint is not. Routed unlabelled: ⛔ an execution seat does not grade or route.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions