Skip to content

fix(queue): a Dependent-suites no-verdict is infrastructure (steward re-queues) + the freeze RCA - #5801

Merged
rbuergi merged 4 commits into
mainfrom
docs/merge-queue-dependent-suites-starvation
Sep 27, 2026
Merged

rbuergi merged 4 commits into
mainfrom
docs/merge-queue-dependent-suites-starvation

Conversation

@rbuergi

@rbuergi rbuergi commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

What

1. A Dependent-suites NO-VERDICT is infrastructure, and the steward re-queues it (capped)

Five core PRs (#5789, #5791, #5792, #5793, #5795) were queue-rejected on 2026-09-27 for one reason only: MeshWeaver.Plugins did not answer within 42 min (no verdict yet). The dependent's candidate legs never got a runner. Every candidate that did run that morning was green. The steward treated that job as a gate/build failure ("never a flake") and left the PRs out.

  • await-dependent-verdict.py: silence now exits with EXIT_NO_VERDICT = 3. It is still red and never a pass. Every red that comes from a verdict still exits 1.
  • dotnet-test.yml: the wait step passes exit 3 to its own failing step, No verdict in time: the dependent's suites did not report (infrastructure).
  • merge-queue-steward.py: a Dependent suites (MeshWeaver.Plugins) job that failed only on that step counts as starved, not failed.
    • It is re-queued as kind infra, capped at 2 per head sha, with the marker comment.
    • When a build failure or an uncatalogued assertion sits next to it, the entry is still rejected.
    • A red verdict is still rejected.
    • There are 9 new self-test rows, and the self-test passes all 66 rows. The waiter self-test is clean and actionlint is clean.

The five PRs already rejected will not be re-queued by this change, because the steward acts only on new dequeued events. They need a human re-queue once the queue flows.

2. MergeQueue.md (+ the waiter row in CrossRepoPairGate.md): the RCA of the freeze

  • Symptom: between 09:00 and 11:00Z, entries failed on Dependent suites alone, with no verdict, when the waiter hit its 42-min deadline (inside the job's 45-min cap).
  • Cause: the candidate legs share aks-silos-dind with PR and satellite work, and that queue is served FIFO. The legs ran 5–14 min but waited 20–50 min. The set was at a cap that the hardware quota imposes.
  • Fix: Systemorph/Memex#587 adds the gate lane aks-silos-dind-gate with PriorityClass arc-runner-gate, which never preempts. It is applied and live, with max 12. Systemorph/MeshWeaver.Plugins#2444 moves the legs onto that lane and makes a leg stand down once its core run has finished.

Pairs-with: none — no public surface changes (workflow, scripts and docs only).

🤖 Generated with Claude Code

…IFO on the shared dind label

Three queue entries in a row failed only on `Dependent suites (MeshWeaver.Plugins)`: the waiter hit
its 45-min cap with NO verdict, while the Plugins candidate legs (5-14 min of work) waited 20-50 min
for an `aks-silos-dind` runner behind PR and bake work. Records the measurement, the root cause (no
order between gate work and PR work on one FIFO label at a hardware-bound cap), the fix in the repos
that own it (Memex#587 gate lane with a higher PriorityClass; Plugins#2444 legs on that lane + stand
down once the requesting core run has finished), and that the steward correctly REJECTS such an
entry rather than re-queueing it into the same line.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 27, 2026 11:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Correct the waiter deadlines, utilization definition, and steward timeout-versus-failure behavior.

Review effort: Lite
Findings: 1 Low severity

Open (1)
What changed in this PR

Docs-only update documenting the 2026-09-27 merge-queue freeze, its runner-starvation cause, and remediation.

Changes:

  • Records incident measurements and affected runs.
  • Documents the dedicated gate lane and stand-down behavior.
  • Clarifies steward handling and queue-size controls.
File Description
src/​MeshWeaver.Documentation/​Data/​Architecture/​MergeQueue.md Adds the incident analysis, measurements, fixes, and operational guidance.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.


The paragraph above predicted it, and on 2026-09-27 09:00–11:00Z it happened: nothing merged for two
hours. Three entries in a row (core runs 36307979031, 36308367885, 36311194922) failed on ONE job,
`Dependent suites (MeshWeaver.Plugins)`. Each time its waiter hit the 45-minute cap **with no verdict**.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. Fixed in the next push: the text now distinguishes the waiter's 42-minute verdict deadline (await-dependent-verdict.py --deadline-minutes 42) from the job's 45-minute timeout-minutes.

…45-min cap (review)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

1 690 tests  ±0   1 690 ✅ ±0   4m 14s ⏱️ +5s
    2 suites ±0       0 💤 ±0 
    2 files   ±0       0 ❌ ±0 

Results for commit 5edbc7a. ± Comparison against base commit 2bb14d8.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

    5 files  ±0      5 suites  ±0   13m 59s ⏱️ -4s
4 258 tests ±0  4 256 ✅ ±0  2 💤 ±0  0 ❌ ±0 
4 262 runs  ±0  4 260 ✅ ±0  2 💤 ±0  0 ❌ ±0 

Results for commit 5edbc7a. ± Comparison against base commit 2bb14d8.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

460 tests  ±0   460 ✅ ±0   56s ⏱️ +2s
  3 suites ±0     0 💤 ±0 
  3 files   ±0     0 ❌ ±0 

Results for commit 5edbc7a. ± Comparison against base commit 2bb14d8.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

    3 files  ±0      3 suites  ±0   6m 24s ⏱️ +2s
2 176 tests ±0  2 176 ✅ ±0  0 💤 ±0  0 ❌ ±0 
2 177 runs  ±0  2 177 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit 5edbc7a. ± Comparison against base commit 2bb14d8.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

762 tests  ±0   571 ✅ ±0   7m 8s ⏱️ -16s
  3 suites ±0   191 💤 ±0 
  3 files   ±0     0 ❌ ±0 

Results for commit 5edbc7a. ± Comparison against base commit 2bb14d8.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

  1 files  ±0    1 suites  ±0   3m 19s ⏱️ +5s
348 tests ±0  348 ✅ ±0  0 💤 ±0  0 ❌ ±0 
352 runs  ±0  352 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit 5edbc7a. ± Comparison against base commit 2bb14d8.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results

   17 files  ±0     17 suites  ±0   36m 2s ⏱️ -6s
9 694 tests ±0  9 501 ✅ ±0  193 💤 ±0  0 ❌ ±0 
9 703 runs  ±0  9 510 ✅ ±0  193 💤 ±0  0 ❌ ±0 

Results for commit 5edbc7a. ± Comparison against base commit 2bb14d8.

♻️ This comment has been updated with latest results.

@meshweaver-cloud
meshweaver-cloud Bot added this pull request to the merge queue Sep 27, 2026
@rbuergi
rbuergi removed this pull request from the merge queue due to a manual request Sep 27, 2026
…ward re-queues it, capped

Five core PRs (#5789 #5791 #5792 #5793 #5795) sat queue-rejected on 2026-09-27 for one reason:
'MeshWeaver.Plugins did not answer within 42 min (no verdict yet)' — the dependent's legs never got
a runner, while every candidate that did run was green. The steward classed that as a gate/build
failure ('never a flake') and left them out.

- await-dependent-verdict.py: silence exits EXIT_NO_VERDICT=3 (still red, never a pass); every
  verdict-shaped red stays exit 1.
- dotnet-test.yml: the wait step hands exit 3 to its own failing step, 'No verdict in time: the
  dependent's suites did not report (infrastructure)'.
- merge-queue-steward.py: a Dependent-suites job that failed ONLY on that step is starved, not
  failed — re-queue kind=infra, capped 2 per head sha with the marker comment; beside a build
  failure or an uncatalogued assertion it still rejects; a verdict red still rejects. Nine new
  self-test rows (66 ok).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@meshweaver-cloud

Copy link
Copy Markdown
Contributor

ℹ️ Merge-queue steward: no action — removed from the queue with reason MANUAL — the steward takes no action for this reason.

…a; steward table row

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@rbuergi rbuergi changed the title docs(merge-queue): the Dependent-suites freeze — FIFO starvation on the shared dind label fix(queue): a Dependent-suites no-verdict is infrastructure (steward re-queues) + the freeze RCA Sep 27, 2026
@meshweaver-cloud
meshweaver-cloud Bot added this pull request to the merge queue Sep 27, 2026
@rbuergi
rbuergi enabled auto-merge September 27, 2026 16:46
@rbuergi
rbuergi merged commit c573144 into main Sep 27, 2026
43 checks passed
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.

2 participants