Skip to content

ci(cmux-next): web nits and CI-only changes skip the Mac tiers; a routing replay guards the router - #18310

Merged
teamleaderleo merged 6 commits into
feat-cmux-nextfrom
ci/web-fast-tier
Oct 7, 2026
Merged

teamleaderleo merged 6 commits into
feat-cmux-nextfrom
ci/web-fast-tier

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Two cheap classes in cmux_next_route.py select no Mac tier. Only the Linux checks job runs here, along with ci-web or ci.yml's guards.

Web nits. A one-line CSS nit (#18296) ran the Release compile, the Debug scheme compile and swift test on minis, and a runner refusal blocked it for an hour. These files are now covered on Linux:

  • webviews/ sources;
  • the webviews app;
  • the agent-pane bundle (CmuxNextAgentPane/Resources/agent-pane/);
  • docs.

ci-web type-checks, lints and tests them. build-agent-pane-web.sh --check proves the committed bundle matches the sources, and the bundle is a .copy resource, so the app takes it without a compile. gallery-pr diffs the touched entries.

CI-only changes. These change no app code, so they now skip the Mac tiers. Before, a workflow or router change ran every tier:

  • .github/workflows/;
  • scripts/ci/;
  • the router;
  • scripts/gh-merge-green;
  • their Python tests.

They're checked on Linux instead:

  • ci.yml's guards run actionlint and the CI unit tests.
  • When the router changes, the new Routing replay (router changes) step runs scripts/ci/cmux_next_route_replay.py. It replays the last 30 merged PRs' changed files through the base router (HEAD^1 of the merge commit) and the PR's router. It fails on any tier the new router adds, or drops without naming a fast tier.
  • gh-merge-green --revert (feat(gh-merge-green): --revert rolls back a merged PR in one command #18312, landed) undoes a bad change in one command.

Files a Mac tier reads keep their tier, whatever their name. That covers:

  • the Xcode pins;
  • .github/actions/setup-cmux-tui-rust/;
  • daemon and cmux-tui tree inputs;
  • generated-file inputs;
  • every file a Swift test reads.

This also fixes a gap in the first web-nit commit: scripts/ci/xcode-pins.txt matched the *.txt docs pattern and would have skipped every tier.

A dev-build PR still compiles its dogfood app.

Verification

Each class went in red first:

python3 -m unittest tests.test_cmux_next_route tests.test_cmux_next_route_replay tests.test_cmux_next_checks_workflow passes. actionlint passes.

Replay dry run (--base origin/feat-cmux-next --limit 30): 29 merged PRs, 0 unexplained.

Changelog

none

🤖 Generated with Claude Code


Note

Medium Risk
Changes which merge-gate Mac jobs run on PRs; mis-routing could under-test merges, though replay, consumed(), and expanded unit tests mitigate that.

Overview
Skips Mac CI tiers for two PR classes when every changed file qualifies and nothing a Mac job reads: web nits (webviews, checked agent-pane bundles, docs) and CI-only edits (workflows, scripts/ci/, router, gh-merge-green, related tests). Linux cmux-next checks, ci-web, and ci.yml guards cover those paths instead. dev-build still runs the scheme compile for dogfood.

cmux_next_route.py adds web_fast, ci_only, and consumed so pins, tree inputs, generator inputs, and Swift test fixtures keep their tiers despite doc-like names (e.g. xcode-pins.txt).

Routing replay (cmux_next_route_replay.py): on PRs that change the router, the checks job replays the last 30 merged PRs through HEAD^1 vs the PR router and fails on tier adds, unexplained drops, or Swift target churn. Tier routing in the workflow also runs the new unit tests; docs and test-execution.toml are updated.

Reviewed by Cursor Bugbot for commit e6de287. Bugbot is set up for automated code reviews on this repo. Configure here.

teamleaderleo and others added 2 commits October 7, 2026 01:11
A one-line CSS change and its regenerated agent-pane bundle (#18296) ran the
Release compile, the Debug scheme compile and swift test on minis. ci-web
already checks the sources and proves the committed bundle matches them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When a pull request changes only webviews sources, the webviews app, the
agent-pane bundle or docs, and no Swift test reads those files, the router
selects no Mac tier. ci-web checks the sources and the bundle's freshness, the
bundle is a .copy resource, and gh-merge-green already passes skipped checks.
A dev-build PR keeps its scheme compile.

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

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 6c0c31e8-d4db-4fa1-b4c5-ddfc7d35acac

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale Bugbot comment from a previous run.

Comment thread scripts/ci/cmux_next_route.py
teamleaderleo and others added 3 commits October 7, 2026 01:46
…ep theirs

A workflow, CI script, router or gh-merge-green change needs no Mac tier, but
scripts/ci/xcode-pins.txt (a *.txt) and plans/cmux-next/*.md (docs by name)
feed Mac tiers and must keep them, which the web fast tier's early return missed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uards the router

Workflows, scripts/ci, the router, gh-merge-green and their tests route to no
Mac tier, alone or with web files. A file a Mac tier reads keeps its tier
whatever its name (the Xcode pins, the cmux-tui Rust action, daemon and tree
inputs, generated-file inputs, files a Swift test reads), which also closes the
web fast tier's gap where scripts/ci/xcode-pins.txt and plans/cmux-next/*.md
matched the docs patterns. When the router changes, the checks job replays the
last 30 merged PRs through the base router and the new one and fails on any
unexplained tier change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo teamleaderleo changed the title ci(cmux-next): web nits take a fast tier with no Mac jobs ci(cmux-next): web nits and CI-only changes skip the Mac tiers; a routing replay guards the router Oct 7, 2026
…-tier

# Conflicts:
#	tests/test-execution.toml

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit e6de287. Configure here.

for number in merged:
files = json.loads(subprocess.run(
["gh", "api", "--paginate", f"repos/{repo}/pulls/{number}/files?per_page=100", "--jq", "[.[].filename]"],
check=True, capture_output=True, text=True).stdout.replace("][", ","))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Replay pagination breaks on large PRs

Medium Severity

recent_prs asks gh api --paginate for filenames as one JSON array per page, then joins pages with a ][ replace. Paginated gh --jq output is newline-separated arrays, so json.loads throws on any merged PR with more than 100 files and the routing replay fails closed. The rest of this repo already fetches those names as one path per line.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit e6de287. Configure here.

@teamleaderleo
teamleaderleo merged commit c148a9f into feat-cmux-next Oct 7, 2026
73 of 90 checks passed
@teamleaderleo
teamleaderleo deleted the ci/web-fast-tier branch October 7, 2026 09:40
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