Repository navigation
ci(cmux-next): swift-test runs on a pull request only with full-ci - #36468
Conversation
On every PR push the job gave no signal: of 78 PR check runs (Nov 2-5) 37 were cancelled (17 by the PR merging first, 10 by a newer push, 10 by a re-run at the same head), 37 skipped, 4 failed and none passed. The base verdict already comes from main's tip suite dispatch, which runs the job on the feat-cmux-next tip whenever Swift changed. A PR now runs it only with full-ci (or a dispatch); without it, path routing folds the generated files check into daemon-test or the generated-files job, and the Mac placement cascade no longer counts it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
web and size checks: green Shipped in:
|
|
Owned by an agent session · session |
teamleaderleo
left a comment
There was a problem hiding this comment.
Review (codex gpt-6-astra high, next-review, since=20261105T113014Z): BLOCK at bbe9b66
BLOCK at bbe9b66
Visual verdict: unchanged by this diff
-
- [P1] [blocking] [category:reliability] [finding:F1] [outcome:pending]
.github/workflows/cmux-next.yml:1479removesswift-testfromCASCADE_RUNS, butJOBSat line 1520 still includes it.side_lane_placement.decide()assigns idle minis fromJOBSwithout consultingCASCADE_RUNS, so an unlabeled PR can assign an idle runner to the skippedswift-test; that runner remains unused while laterdaemon-test/generated-filesjobs queue on the side lane.
- [P1] [blocking] [category:reliability] [finding:F1] [outcome:pending]
-
- [P1] [blocking] [category:tests] [finding:F2] [outcome:pending] The new condition at
.github/workflows/cmux-next.yml:3681removes the same-repository exception, buttests/test_cmux_next_route.py:579still asserts that exception.python3 tests/test_cmux_next_route.pyfails (1 of 127), and this test is run by the workflow’s tier-routing checks.
- [P1] [blocking] [category:tests] [finding:F2] [outcome:pending] The new condition at
…ry PR Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
This comment has been minimized.
This comment has been minimized.
|
Review (codex, router-review): SHIP at 1de2648 Reviewer: codex gpt-6-astra high, fast tier. SHIP at 1de2648 Visual verdict: no images; Leo tries the build Reviewed the workflow expressions, generated-file routing, cascade placement, and focused test suites. All 706 focused tests passed. Follow-ups: none |
The PR check skipped CmuxNext because cmux-next.yml's swift test job built its test targets on every same-repository PR. That job now runs on a PR only with full-ci, so without this a PR's CmuxNext test-target compile break would show only on the tip. The advisory fleet compile is the one compile of those targets again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
|
Review (codex, router-review): SHIP at 6dad1da Reviewer: codex gpt-6-astra high, fast tier. SHIP at 6dad1da Visual verdict: no images; Leo tries the build Targeted workflow, routing, generated-fold, compile-plan, cascade, and base-red tests passed. The guard-wiring test requires Git metadata absent from the review fixture. Follow-ups: none |
A newer verdict blocks 68f81b3 (no independent SHIP at the head).
Leo, 2026-11-05: "we're kind of pushing a lot of frontiers here. We are at the same time, like doing a lot of goofy stuff and, like, keeping around a lot of baggage."
Problem
cmux-next swift testran on every same-repository PR push and almost never finished. Of 78 sampled PR check runs (PRs opened Nov 2 to 5): 37 cancelled, 37 skipped, 4 failed, 0 passed. Its estimated cost over 14 days was about 373,000 runner-minutes.Why the runs never finished:
timeout-minutes; the longest lasted 97 minutes.cancel-in-progresson pull requests).skipped.Choice
The base already gets its Swift verdict another way. A feat-cmux-next push skips this job, because push CI is the app build only (Lawrence, 2026-10-10; the jobs comment). On main,
cmux-next-tip-swift-suite-dispatch.ymlwas added after a Swift red stayed hidden on the base for a day (2026-10-21; #23687, #26015). Every 30 minutes it dispatches atip_swift_suiterun on the feat-cmux-next tip whenever Swift changed. That run'scmux-next swift testis the base verdict thatscripts/ci/base_red_excuse.pyreads. Those dispatch runs do finish (for example, "cmux-next tip Swift suite" runs today).I did not move the job onto the feat-cmux-next push. That would undo the app-build-only rule, and the tip dispatch already batches the same work at the tip with a retry cap. I also did not remove the job: the dispatch and
full-cistill need it. So this takes option (b):swift-testonly withfull-ci(same-repository or fork), the documented opt-in. A dispatch on any ref still runs it, and so does the tip suite dispatch.path_route'sgenerated_hostno longer picksswift-teston a PR withoutfull-ci. It falls through todaemon-test(when the tree is ready) or to thegenerated-filesjob's own build, so the generated files are still checked exactly once.CASCADE_RUNS) stops countingswift-testfor a PR withoutfull-ci, so placement does not reserve a mini for a job that won't run.fleet/test-compile (advisory)compiles CmuxNext's test targets on PRs again. It had skipped CmuxNext since 2026-10-30 becauseswift-testalready built those targets on every same-repository PR (tests/test_ci_compile_test_plan.pypinned that dependency). Withswift-testbehindfull-ci, the advisory fleet compile is again the one PR-side compile of those targets. It is a compile-only step with a 25-minute run cap, againstswift-test's runs of up to 97 minutes.generated-verdict,push-attributionand the push-only job that needsswift-testare unchanged. They already handle a skippedswift-test.Not changed: required checks, the merge policy, the push concurrency, and the job's steps.
Tests
tests/test_cmux_next_generated_fold.py: the exhaustive matrix gains afull-cilabel axis. It asserts that a PR withoutfull-cinever runsswift-testor routes generated files to it, and that the generated files are still checked exactly once. The spelled-out host cases now cover PRs with and without the label.tests/test_cmux_next_checks_workflow.py:swift-testjoins the heavy compiles behindfull-ci. The same-repository PR tier set and the cascade set drop it without the label.tests/test_cmux_next_route.pyandtests/test_ci_compile_test_plan.py: their pins of the oldswift-testcondition and of the fleet-test-compileSKIPnow pin the new behavior.test_cmux_next_generated_fold,test_cmux_next_checks_workflow,test_cmux_next_tip_swift_suite,test_ci_next_macos_cascade,test_ci_workflow_guards_are_wired,test_base_red_excuse(579 tests, all pass); then, at the final head,test_ci_compile_test_plan,test_cmux_next_route,test_ci_display_suites,test_ci_linux_single_size,test_ci_overflow_pick_reads_pooland the files above (all pass).Changelog
none
🤖 Generated with Claude Code
Agent session: agent session