Skip to content

ci: run the suites that mention an app-source change - #14418

Merged
teamleaderleo merged 4 commits into
mainfrom
ci/reverse-selected-suites-run
Sep 25, 2026
Merged

teamleaderleo merged 4 commits into
mainfrom
ci/reverse-selected-suites-run

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

A pull request that changes app code but no cmuxTests/ file runs no app-host behavior test (hq#603). This morning #14044, #12822 and #13055 each passed CI and broke suites they never ran.

choose_ci_suite.py now takes the app diff (--app-diff-from, written by the changes job) and adds the suites reverse_test_impact.py names (#14367, #14387) to the changed-suites run:

  • Only adds. No readable diff, or any selector error, adds nothing and the run routes exactly as before.
  • Stays one worker. Suites are added only while the 10 min changed-suites budget has room beside the suites the PR edited. A suite that would overflow it, or that would leave the changed-suites lane, is dropped. It never turns the run into seven shards.
  • Skips suites with known-main failures. A known failure that happens to pass fails a changed-suites run, which is right for a suite the PR edited and wrong for one it only reached.
  • Only real batch suites. The selector also names helper types in cmuxTests/, and a selector that matches no test fails the run, so only suites discover_selectors finds are added. None whose addition changes unit_strict_steps is added, since strict steps run outside the budget.
  • No compile-reuse or admission cost. A run the selector alone asked for is a canary: a re-push of already admitted inputs reuses the build and drops these suites, as the consumer canary does. Reached suites take the changed-suites worker, never compile admission.
  • The report-only job stays, for measuring recall against main's failures.

Replay on #12822's tree: its 4 edited suites plus reached suites, 373 in all, 9.1 min of measured test time, no strict steps, off admission. Selection takes about 10 s in changes.

Tests: tests/test_ci_change_areas.py gains test_an_app_source_diff_runs_the_suites_that_mention_what_it_changed, committed first (fails: the flag does not exist), then the fix. test_ci_change_areas.py, test_ci_reverse_test_impact.py and test_ci_cli_product_routing.py pass locally. test_ci_main_full_suite.py has one failure that reproduces on main without this change.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

A PR that changes app source without touching cmuxTests/ used to run no app-host behavior test (hq#603); #14044, #12822 and #13055 each passed CI and broke suites they never ran. choose_ci_suite.py now takes the app diff from the changes job and adds the suites reverse_test_impact.py names to the changed-suites run.

  • Only adds: a missing or unreadable diff adds nothing, and routing is unchanged.
  • Stays one worker: suites are added only while the 10-minute changed-suites budget has room beside the edited suites; anything that would overflow it or leave the changed-suites lane is dropped.
  • Skips suites with known-main failures, since a known failure that passes fails a changed-suites run, which is right for an edited suite and wrong for one it only reached.
  • Adds only real batch suites: the selector also names helper types in cmuxTests/, and a selector that matches no test fails the run.
  • Reached suites ride on a compile the run pays for and take the changed-suites worker, so admission cost is unchanged.
  • A consumer edit that also changes app source keeps both the consumer canary and reached suites.
  • The report-only job stays to measure recall against main's failures. On Fix Codex writer ownership during quit and restore #12822's tree the edited suites plus the selector's picks run 373 suites in 9.1 minutes; selection takes about 10 seconds.

Written for commit 3f610dc. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Chores
    • CI now considers changes to app code when selecting relevant test suites, while respecting suite limits and existing test-status constraints.
    • Change-impact reports now provide a fuller account of the changes considered and the estimated cost.

teamleaderleo and others added 2 commits September 25, 2026 03:47
Fails today: choose_ci_suite.py takes no app diff, so a pull request that
changes Sources/ without touching cmuxTests/ runs no behavior test. #12822
changed AgentQuitProcessOwnership and main's agent-restore suites broke.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uites run

A pull request that changes Sources/ or a macOS/Shared package without
touching cmuxTests/ ran no behavior test, and #14044, #12822 and #13055
each broke suites they never ran. choose_ci_suite.py now takes the app
diff and adds the suites reverse_test_impact.py names, within what the
changed-suites budget has left. It only adds: no readable diff or a
selector error adds nothing, and a suite that would overflow the budget
or leave the changed-suites lane is dropped rather than widening the run
to seven shards. Suites with known-main failures are skipped, since a
known failure that passes fails a changed-suites run.

On #12822's tree the run goes from its 4 edited suites to those plus the
selector's picks, 6.3 min of measured test time; selection takes ~10 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@coderabbitai

coderabbitai Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: c0296885-c36e-4080-bb64-db60d88f1a00

📥 Commits

Reviewing files that changed from the base of the PR and between a855dbf and 3f610dc.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml
  • scripts/ci/choose_ci_suite.py
  • tests/test_ci_change_areas.py
 _________________________________________________________________________________
< CodeRabbit is a psyop to make you think your code is being reviewed by a human. >
 ---------------------------------------------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

teamleaderleo and others added 2 commits September 25, 2026 04:42
…nged

Review of the first cut: the selector also names helper types in
cmuxTests/ (SidebarTestManualClock, RejectingRestoreTabDelegate), and a
selector that matches no test fails the run. Only suites the shared
batch discovers are added now, and none whose addition changes the
strict steps, since those run outside the budget. A run the selector
alone asked for is a canary, so a re-push of admitted inputs still
reuses the build, and reached suites take the changed-suites worker
instead of adding up to the whole budget to compile admission.

On #12822's tree: 373 suites, 9.1 min of measured time, no strict steps,
off admission.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Re-review follow-ups: a consumer edit that also changes app source kept
only the reached suites and lost cmuxTests/CmuxSSHURLRequestTests; it now
keeps both. The ci.yml note on canary runs names reached suites too, and
the regression test checks every selector is a suite the shared batch
runs and that no strict step is added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo merged commit 8409047 into main Sep 25, 2026
60 of 61 checks passed
@teamleaderleo
teamleaderleo deleted the ci/reverse-selected-suites-run branch September 25, 2026 09:04
rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 25, 2026
8409047 ci: run the suites that mention an app-source change (manaflow-ai#14418)
cbebee8 fix(homebrew): generate the symbol form of depends_on macos (manaflow-ai#14424)
e9bb38a ci(ios): only pick simulators the active Xcode SDK can target (manaflow-ai#14422)
5b2533c fix(ios): stop calling a mutating method inside #expect (manaflow-ai#14421)
4ab2739 ci: pick the pool with the least expected wait, bounded by every run's peak (manaflow-ai#14410)
26292a4 ci(nightly): warn instead of failing when GitHub refuses the tag move (manaflow-ai#14425)
f4b331d Merge pull request manaflow-ai#14090 from manaflow-ai/14078-cloud-codex-restore-garble
193f5d9 test: restore AppDelegate.shared after every XCTest case (manaflow-ai#14379)
31588d6 ci: run a tart-* pick as auto while the Tart VMs are offline (manaflow-ai#14416)
2d844cb ci: app-host rerun holds the product's canonical root (manaflow-ai#14417)
d0f485e Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
a855dbf test: fix the dead-key crash and sidebar AX walk failing on main (manaflow-ai#14406)
066f300 Merge pull request manaflow-ai#13938 from manaflow-ai/13893-desktop-click-ownership
0c2bb9d Merge remote-tracking branch 'origin/main' into 13893-desktop-click-ownership
9670d83 Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
cb88a4b Merge branch 'main' of https://github.com/manaflow-ai/cmux into 13893-desktop-click-ownership
86504fb fix: import Cloud package for team picker
885a39c test: import CmuxCloud in the Desktop navigation tests
75070d9 Merge remote-tracking branch 'origin/main' into 13893-desktop-click-ownership
3dfcfb9 Merge branch 'main' of https://github.com/manaflow-ai/cmux into 13893-desktop-click-ownership
52020d3 Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
9cafdf5 test: register cloud preview during materialization
bc09ec8 test: scope desktop registration hook to the preview resource
ea4242c Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
1be4c92 fix: count retained cloud previews as planned
4f98bd3 fix: align Xcode iroh package requirement
4a0bd3a chore: update Xcode package lockfile
8cda030 Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
ddeb03d fix: pin published iroh Swift release
1d9082a chore: update iroh package lockfiles
fc2b529 fix: pin attested iroh Swift artifact revision
4c33353 test: import surface catalog models in cloud actions
25c64f2 Merge branch 'main' of https://github.com/manaflow-ai/cmux into 13893-desktop-click-ownership
4bd5808 test: import shared surface catalog models
59eddd9 Merge remote-tracking branch 'origin/main' into 13893-desktop-click-ownership
a157f5c Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
cbc0118 ci: pin GhosttyKit for replay fix
4a48e3d Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
4784eb2 fix: preserve Cloud replay trailing rows
d081368 Merge origin/main and fix replay API visibility
7202960 Merge remote-tracking branch 'origin/main' into 13893-desktop-click-ownership
a846dfd Merge branch 'main' of https://github.com/manaflow-ai/cmux into 14078-cloud-codex-restore-garble
96d5686 fix: delimit replay rows when scrollback exists
6ac603e fix: use terminal history boundary for replay
054dc50 style: apply hosted replay formatting
90fa111 fix: preserve replay history and protect tagged resources
d2d6aa3 fix: refresh Cloud renderer after replay application
91601b8 revert: remove speculative Cloud replay grid overrides
cb2dc58 test: reproduce Cloud replay shifting sparse screens with history
c78ffdc fix: keep replay sizing helpers in app target
1e6f928 fix: preserve Cloud sizing intent across replay
e568942 fix: keep Cloud replay geometry transient
c094d63 Merge remote-tracking branch 'origin/14078-cloud-codex-restore-garble' into 14078-cloud-codex-restore-garble
8ed24b2 fix: align Cloud replay with remote grid
bbc466c test: cover Cloud replay grid alignment
cba191e test: cover self-registered Desktop materialization
105f24f fix: keep a Cloud Desktop pane that registers itself while materializing
9397594 Revert "fix: retain local Desktop projection provenance"
dc9e8af fix: retain authored colors when Cloud replay omits sidecar
58d4105 test: preserve authored Cloud colors across sidecar-free replay
a5af809 Merge remote-tracking branch 'origin/main' into issue-14078-cloud-codex-restore-garble
781a063 Merge origin/main into desktop click ownership
82b100a test: cover legacy applied resize responses
a9f6a92 Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
9d90d5e fix: clear Cloud ownership after replay confirms peer loss
6a36349 fix: defer cross-client Cloud loss until replay state
9bd3588 fix: ignore no-op Cloud resize acknowledgements
99329a1 fix: retain pending Cloud claims through handshake
4c0fa87 fix: demote Cloud mirror after cross-client rejection
509b984 fix: preserve explicit Cloud claim intent
dce99b4 fix: distinguish passive Cloud lease outcomes
5de372f test: allow automatic restore claim response
f7a3bc7 fix: wait for Cloud resize outcome before claiming
2fdaef3 fix: block rejected cross-client Cloud sizing claims
4804326 fix: stop passive Cloud mirror claim oscillation
223eb67 fix: restore debug title formatter linkage
68fb24d test: keep replay reset marker in restore fixture
674248c Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
1a11606 fix: reset Cloud VT state for replacement replays
2a2e092 test: reproduce stale Cloud replay cells after restore
15ba7c4 fix: preserve restore intent before process probing
a900e91 test: cover click Desktop graph reconciliation
ff2694f refactor: isolate workspace title debug formatting
53dd942 Read matchingObservation after it is declared in the restore liveness check
1b288aa Merge remote-tracking branch 'origin/main' into 14078-cloud-codex-restore-garble
8b8c669 test: fence passive Cloud claims with protocol traffic
62532fc fix: remove duplicate Cloud restore test registration
827d859 chore: sync Cloud restore test wiring
22a187b fix: import workspace liveness in Codex restore policy
92126bd test: assert restored Cloud resize dimensions
b7e457f fix: retain Cloud geometry claim policy across hidden restores
5dccec0 test: reproduce lost Cloud geometry eligibility after hidden restore
97c4673 test: preserve Cloud replay state across hidden restore geometry
e0d44a0 fix: retain local Desktop projection provenance
31f698b fix: preserve committed routes while proxy connects
b976180 fix: preserve preview provenance and committed Cloud routes
80f7087 fix: retain explicit Desktop placement provenance
3ee2ece fix: preserve Cloud Desktop panes during reconciliation
39b61fc test: keep Cloud Desktop previews during reconciliation
4ce4f4f fix: let activated Cloud browsers own route navigation
519bf26 test: reproduce desktop navigation without a mounted view
7d2b58a Merge origin/main and preserve per-run E2E cleanup
1b1feb8 test: use lifecycle-safe workspace creation in Desktop fixture
a722c20 ci: restore E2E products inside the owned runner temp root
903513c test: enforce E2E DerivedData cleanup ownership
c0f96a2 test: keep Desktop placement fixture windows hidden
e8a34f4 Merge main after Desktop ownership fix landed
fb9955b fix: keep Desktop view opens on the captured destination
1e696af test: give Desktop placement fixtures a complete native window route
9d3e2d8 fix: capture the Desktop view destination before scheduling
f327329 Merge remote-tracking branch 'origin/main' into 13893-desktop-click-ownership
6dc7d9f test: establish mouse event context for the Desktop regression baseline
7cdeac6 Merge remote-tracking branch 'origin/main' into 13893-desktop-click-ownership
1f9c925 fix: retain the Desktop click destination across queued work
b4f17f6 test: reproduce queued Desktop click targeting another Cloud workspace

# Conflicts:
#	.github/workflows/app-host-test-rerun.yml
#	.github/workflows/ci-guards.yml
#	.github/workflows/ci.yml
#	.github/workflows/nightly.yml
#	.github/workflows/test-e2e.yml
#	.github/workflows/test-ios.yml
#	.github/workflows/update-homebrew.yml
teamleaderleo added a commit that referenced this pull request Sep 25, 2026
…merge rule (#14532)

* docs: correct stale fleet, CI coverage and pitfall notes; add the merge rule

- Fleet: owned minis take PR CI jobs via the pool picker; `--tag` is required
  and `--submitter` comes from the client token; disk floors are 80/180/120 GiB.
- Standalone reload needs CMUX_DEV_BACKEND_MODE=local outside an hq checkout.
- CI coverage: reached suites (#14418), no PR job runs cmuxUITests/, no-full-ci.
- Pitfalls: TerminalSurface.forceRefresh moved to CmuxTerminal; AWS Tart hosts
  retired (#14427).
- Merge rule: main is nightly, wait for the judging checks, note what was not
  verified, main-regression comments are fix-forward asks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: fix stale skill references (cmuxTests target, vault checkpoint flags, CmuxComputerUse package)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: mention the merge receipt; drop --prod-auth as a reload alternative

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: tie the macOS locale list to localization_catalog.py

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant