Repository navigation
ci: read the gui backlog eight runs at a time in late placement - #15207
Conversation
late_placement.py counted queued gui jobs by reading up to 30 in-flight runs' job lists one by one. Under load that outran the step's one-minute timeout in 10 of the last 21 PR runs; the step then wrote no placement, so every shard stayed queued on the owned gui runners instead of moving its overflow to Blacksmith. Reads now go eight at a time, oldest batch first, stopping once the count reaches what decide() compares against. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (2)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 1 remain after this review. 📝 WalkthroughWalkthrough
ChangesGUI backlog reading
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Bug fix Merge Risk: ⚪ Minimal · up to The bounded concurrent reads appear mergeable after normal checks; no actionable risk remains from the reviewed change. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The change keeps the existing runner-selection rules and access boundaries, while making backlog reads concurrent. It may improve placement timeliness, but the effect of eight simultaneous requests on API limits has not been measured. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 24 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (24 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
All contributors have signed the CLA ✍️ ✅ |
|
Dogfood build of cmux DEV pr-15207-ca95bb7e.app The link opens this exact commit in the cmux dev menu bar app. The build starts on each push and the page waits until it is ready; a newer push replaces it. It signs in against production, so Cloud or backend changes still need a tagged build with a development backend. |
CI failure attributionCI passes on Written by |
… a failed read Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
|
Merge receipt for |
1b55596 Move saved sessions between cmux installs: restore-session --from / --export (manaflow-ai#14861) 0e1ab96 ci: force relay rollover renewal in release gate (manaflow-ai#15212) a3d6070 Fix Cloud projection reads mutating observation state (manaflow-ai#15126) 5171e34 docs: say Cloud turns on per Mac through a staged rollout (manaflow-ai#15194) 53395a8 Recover a missing team scope instead of failing Mac pairing (manaflow-ai#15083) 454f191 ci: read the gui backlog eight runs at a time in late placement (manaflow-ai#15207) 147a616 ci: cmux-tui's release-path macOS builds take the owned side lane first (manaflow-ai#15184) c74b646 License the cmux server software under the Business Source License 1.1 (manaflow-ai#15206) 0bb41fa test: restore the first responder before the dictation paste test's Cmd+V (manaflow-ai#15201) b17bc18 ui-tests: empty Diagnostics Reporter's queue before closing it (manaflow-ai#15189) d5f71c5 ci: iOS picker charges runs by their live jobs, not their titles (manaflow-ai#15188) 3c2cb96 Pane focus memory and New Pane (Auto Layout) (manaflow-ai#15125) 89519d8 ci: expand an empty E2E -only-testing list under bash 3.2 (manaflow-ai#15208) f225777 Ghostty config live reload: keep saves during a reload, reload a theme preview once, watch XDG_CONFIG_HOME (manaflow-ai#15191) 714ec53 ci: stop at a full disk on clonefile, and never nest a seed clone (manaflow-ai#15199) 48d662a ci: ui-tests dispatches UI tests with main's dispatcher (manaflow-ai#15193) 3412812 Restore the Cloud template terminal in place after a daemon restart (manaflow-ai#15200) # Conflicts: # .github/workflows/ci-macos.yml # .github/workflows/ci.yml # .github/workflows/cmux-tui-build-package.yml # .github/workflows/cmux-tui.yml
What
After admission, late placement counts the gui jobs already queued so it can move the shards that would wait more than one round to the retry runner.
gui_backlogread up to 30 in-flight runs' job lists one request at a time. Under load that outran the step'stimeout-minutes: 1:runnersoutput, so nothing moves. Every shard stays queued on the owned gui runners, one per runner. In run 36385188925 the seven shards started 8 to 30 minutes after admission, and shard 1 waited until the rescue re-run.Reads now run eight at a time (
BACKLOG_READERS), oldest batch first. They stop once the count reachesenough, the only valuedecide()compares against, so any extra counted past it changes nothing. Up to 30 reads now take about four request round trips instead of thirty.Tests
test_backlog_reads_runs_concurrently_oldest_batch_first_and_stops_when_enough: 20 runs. Athreading.Barriermakes all eight reads of a batch be in flight at once, and only the oldest batch is read.test_a_failed_backlog_read_raises_so_nothing_moves: a reader thread's error still reachesdecide(), which warns and moves nothing.tests/test_ci_late_placement.py: 32 OK. The concurrency test and the updated backlog test fail on main.scripts/check-test-determinism.pyis clean.🤖 Generated with Claude Code