Skip to content

CI: run Claude wrapper regressions without compiling the app - #13869

Merged
teamleaderleo merged 3 commits into
mainfrom
ci/claude-wrapper-regression-lane
Sep 23, 2026
Merged

teamleaderleo merged 3 commits into
mainfrom
ci/claude-wrapper-regression-lane

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Claude wrapper-only changes currently enter native CI even though their regression suite uses fake clients and a Unix socket. With compile-only routing, the app can compile without that wrapper suite ever running.

This PR gives the suite an independent macOS lane with Python and Node, without app compilation or artifact downloads. Exact wrapper/test changes avoid native lanes; mixed app changes retain them. The required CI aggregate requires successful execution when the wrapper lane is selected, and full-suite runs execute it once.

Validation: six behavioral regressions fail against the original workflow/classifier/registry and pass with the prepared fix. These execute routing shell, aggregate logic and the registry runner, including missing Node and skipped/cancelled/missing execution. The existing wrapper suite also passes standalone; actionlint passes. The tests-only commit failed on the intended aggregate regression in hosted CI. The implementation commit passes the complete tests/test_ci_change_areas.py suite locally, including all six new regressions and the existing routing cases; hosted validation is running. Normal auto-merge is enabled behind required checks.

Related: #13826. Base: 10c952bc31a98ece2b715816c8312165680fb7bb. No app runtime change or native benchmark dispatch.

Hosted follow-up exposed a cancellation-guard compatibility issue: the guard did not recognize the existing label/unlabel exception. The repair accepts only that exact PR expression; fixtures still reject synchronize exclusions, false clauses, and incorrect events. Existing label reuse and runtime cancellation are unchanged.

— FlintRail g1 🪄
Run: run_cmux_main_green_20260923_01a0bfb7
Intention: run wrapper regressions without app compilation and retain required CI evidence.

Summary by CodeRabbit

  • CI & Reliability
    • Added dedicated macOS validation for the Claude wrapper, with checks for required runtime availability.
    • Improved change detection so wrapper-only updates can run independently of broader application checks.
    • Label-only pull request events no longer cancel an in-progress build; new source pushes continue to supersede older runs.

@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 23, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

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 configuration

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

Review profile: ASSERTIVE

Plan: Advanced

Run ID: d1c6b2df-2e74-4e69-b08e-803c0350569a

📥 Commits

Reviewing files that changed from the base of the PR and between d150717 and edb20da.

📒 Files selected for processing (5)
  • .github/workflows/ci.yml
  • scripts/ci/detect_ci_change_areas.py
  • tests/test-execution.toml
  • tests/test_ci_change_areas.py
  • tests/test_ci_self_hosted_guard.sh

Included review availability: Your plan provides up to 10 included reviews per hour; 1 remains after this review.


📝 Walkthrough

Walkthrough

The CI workflow adds standalone routing and a macOS test lane for Claude-wrapper changes. The change-area classifier excludes wrapper files from other routed CI areas. A self-test also updates the accepted pull request cancellation expressions.

Changes

Claude wrapper CI

Layer / File(s) Summary
Wrapper change routing
.github/workflows/ci.yml, scripts/ci/detect_ci_change_areas.py, tests/test_ci_change_areas.py
The workflow emits a claude_wrapper route for wrapper-related changes. The classifier excludes wrapper files from other CI areas. Routing tests check route outputs for changed-file scenarios.
Dedicated lane and status gate
.github/workflows/ci.yml, tests/test-execution.toml, tests/test_ci_change_areas.py
The workflow runs the wrapper test lane when the wrapper route is true or when macOS routing and full-suite selection both apply. The final status check requires the job to succeed under those conditions. The registry assigns the wrapper test to the dedicated lane, and tests cover job conditions and preflight behavior.

Pull request concurrency guard

Layer / File(s) Summary
Cancellation expression checks
tests/test_ci_self_hosted_guard.sh
The self-test accepts a cancellation expression that excludes labeled and unlabeled pull request events. It also checks that expressions excluding synchronize events or using unsupported conditions are rejected.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Other

Sequence Diagram(s)

sequenceDiagram
  participant Changes as CI change routing
  participant Job as claude-wrapper job
  participant Lane as macos-claude-wrapper lane
  participant Status as ci-status
  Changes->>Job: Emit claude_wrapper route
  Job->>Lane: Run wrapper test lane
  Lane->>Status: Report job result
  Status->>Status: Require success when route or full-suite condition applies
Loading

Merge Risk: ⚪ Minimal · up to edb20

No concrete issue remains that would prevent merging once the required CI checks pass.

🚥 Pre-merge checks | ✅ 24 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 12 functions across 3 files. (2 skipped: 2… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (24 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Cloud Persistent Session And Early Input ✅ Passed The check is not applicable to this pull request. The reviewed diff changes only CI workflow routing, the CI change-area classifier, test-lane registration and tests, and a self-hosted CI cancellation…
Cmux Swift Actor Isolation ✅ Passed The check applies to production Swift changes. The reviewed diff changes only CI workflow, Python, TOML, and shell files. It contains no Swift paths, so it introduces no Swift actor-isolation change.
Cmux Swift Blocking Runtime ✅ Passed The pull request changes only CI workflow, Python routing code, test registry, and tests. The authoritative diff contains no changed Swift files and introduces no blocking or timing-based synchronizat…
Cmux Browser Automation Off-Main ✅ Passed The pull request changes only CI workflow routing, the CI change-area classifier, the test registry, and CI tests. The diff does not change browser socket commands, worker routing, WebKit/AppKit acces…
Cmux Expensive Synchronous Load ✅ Passed The check is not applicable. The authoritative pull-request diff changes only .github/workflows/ci.yml, two CI scripts, and two test files. It changes no Swift files, so it cannot add or move a prod…
Cmux Cache Substitution Correctness ✅ Passed The check applies to production Swift, TypeScript, or JavaScript changes. The pull request changes only CI workflow YAML, Python CI scripts and tests, a TOML registry, and a shell test. It does not ch…
Cmux No Hacky Sleeps ✅ Passed The diff introduces no covered hacky sleep or wait. The only workflow changes are in .github/workflows/ci.yml, which the rule excludes as CI orchestration. The Python classifier change only skips tw…
Cmux Algorithmic Complexity ✅ Passed The diff introduces no prohibited algorithmic pattern. The changed-file router scans the file list once and uses fixed path-pattern checks; classify_files adds one constant-size set-membership check…
Cmux Swift Concurrency ✅ Passed The reviewed diff changes only workflow, Python, TOML, and shell-test files. It contains no Swift files or Swift concurrency changes, so the check does not apply.
Cmux Swift @Concurrent ✅ Passed The reviewed diff changes only workflow, Python, TOML, and shell-test files. It contains no Swift source changes, so the Swift @concurrent check does not apply.
Cmux Swift Package Boundaries ✅ Passed The review-scoped diff changes only CI workflow, Python, TOML, and test files. It contains no Swift changes, so the Swift package-boundary check does not apply.
Cmux Swiftpm Lockfiles ✅ Passed The only changed file in a covered category is .github/workflows/ci.yml. Its changes add CI routing and a standalone test job; they do not change SwiftPM dependencies, Xcode package references, or `…
Cmux Swift Logging ✅ Passed The reviewed diff changes only CI workflow, Python routing code, and test/registry files. It contains no Swift source changes, so it introduces or materially changes no production Swift logging.
Cmux User-Facing Error Privacy ✅ Passed PASS. The PR changes only .github/workflows/ci.yml, CI routing logic, the test execution registry, and CI tests. The added “Claude” and Python/Node messages appear in the internal CI workflow and di…
Cmux Full Internationalization ✅ Passed The PR changes only the CI workflow, CI routing logic, and test files. The diff adds no production Swift or web copy, localization catalog entries, locale configuration, or user-facing data. These cha…
Cmux Swiftui State Layout ✅ Passed The PR changes five files: the CI workflow, CI routing script, test registry, and two CI test files. The authoritative diff contains no Swift or SwiftUI files, so it introduces no SwiftUI state-layout…
Cmux Architecture Rethink ✅ Passed This check is not applicable. The reviewed diff changes only CI workflow, CI routing, test registry, and CI tests; it contains no Swift-file changes or Swift architecture changes.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed The check does not apply. The reviewed diff changes five CI and test files and contains no Swift files or window API changes.
Cmux Source Artifacts ✅ Passed All five changed paths are CI configuration, source scripts, or tests. The diff adds a workflow job and routing logic, updates the test registry, and adds regression tests. It adds no logs, screenshot…
Cmux No Test Or Debug Seam In Production Source ✅ Passed The reviewed diff changes only the CI workflow, Python routing code, TOML test registry, and tests. No changed file is a Swift file under a production Sources/ path, and the Swift diff search found …
Title check ✅ Passed The title clearly identifies the main change: running Claude wrapper regressions without compiling the app.
Description check ✅ Passed The description explains the problem, the intended CI behavior, and the reported tests and validation. It omits the template checklist and review-trigger section, but the core summary and testing deta…
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 12 functions across 3 files. (2 skipped: 2 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 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

Copy link
Copy Markdown
Collaborator Author

The tests-only commit 377d568c735a2f184a9d74821b4fe0656e9b983a now fails in hosted CI on the intended behavioral regression: the actual aggregate script accepts success when the wrapper route requires execution but its result is failure. No native app job was selected for this regression-only run.

The implementation is being checked against the complete existing routing test suite before the second commit is pushed.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Both hosted guard failures on bd5c823 stop at the same cancellation-policy check. Adding a direct macOS wrapper job exposes an existing guard limitation: it rejects the caller's existing expression that cancels superseded PR pushes while excluding label/unlabel-only events. The current expression already cancels synchronize runs.

I am extending the guard's recognized safe forms narrowly, with cases that reject disabling synchronize cancellation, rather than changing label reuse or creating another workflow to avoid the check. The repair will also incorporate current main normally. No native rerun has been dispatched.

— FlintRail g1 🪄
Run: run_cmux_main_green_20260923_01a0bfb7
Intention: finish #13869's required guard validation.

Merge current main while preserving wrapper regression routing.
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Pushed edb20da66f034fa051d384e28ce5aaaa7f8b6aac: the narrow cancellation-guard repair plus a normal merge of main d150717b. The complete self-hosted guard passes, and all 11 registry unit tests pass. The original 197 routing tests and standalone wrapper suite also passed before this guard-only repair.

The obsolete failing run was cancelled and verified complete while its wrapper job was still queued. Normal auto-merge remains enabled behind required checks; this is not yet a hosted-green or merged result.

— FlintRail g1 🪄
Run: run_cmux_main_green_20260923_01a0bfb7
Intention: finish #13869 without spending a runner on obsolete input.

@teamleaderleo
teamleaderleo merged commit ea4b13b into main Sep 23, 2026
54 checks passed
rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 23, 2026
069f1ce ci: streamline app-host test consumers (manaflow-ai#13427)
cfe69ec Merge pull request manaflow-ai#13885 from teamleaderleo/docs/full-ci-explicit-scope
25a6378 docs: require explicit broad-suite intent for full-ci
0a6c362 Merge pull request manaflow-ai#13749 from manaflow-ai/ci/app-host-product-fast-transport
3094a95 ci: overlap local Rust helper builds with nightly Swift compilation (manaflow-ai#13874)
ea4b13b CI: run Claude wrapper regressions without compiling the app (manaflow-ai#13869)
8f1491b test: bound SSH fish helper pipe draining (manaflow-ai#13408)
9667375 Merge pull request manaflow-ai#13826 from manaflow-ai/12284-claude-wrapper-subcommands
40b0cd7 ci: scope trusted web complexity before Bun setup (manaflow-ai#13598)
0f0d4a7 ci(iOS): build simulator test product once (manaflow-ai#13600)
0f28e77 Merge main settings runtime repair for native validation
819adce Merge branch 'main' of https://github.com/manaflow-ai/cmux into 12284-claude-wrapper-subcommands
7442bf7 Merge remote-tracking branch 'origin/main' into 12284-claude-wrapper-subcommands
b6507c7 Merge remote-tracking branch 'origin/main' into 12284-claude-wrapper-subcommands
eed9ca5 Merge main to use corrected test execution and CI routing
645e8af test: control the Claude catalog cache clock
3c0637d Merge remote-tracking branch 'origin/main' into 12284-claude-wrapper-subcommands
6229cdc fix: expire successful Claude command discovery catalogs
6f775da test: require bounded Claude command cache freshness
2132e30 fix: preserve cancellation during Claude command discovery
7ac2789 Merge remote-tracking branch 'origin/main' into 12284-claude-wrapper-subcommands
8cc6659 fix: discover and cache Claude subcommands before hook injection
59dd108 test: cover Claude command discovery and fallback
a9da704 ci: fall back cleanly on artifact decoder errors
bfb744f test: reproduce artifact decoder failures escaping fallback
a02abe7 ci: bound the suite coverage diagnostic job
8237edc Merge main and preserve the derived review-fabric contract group
a982dec test: check review-fabric routing through the router, not its source text (manaflow-ai#13788)
0d16b9b Merge branch 'main' into ci/app-host-product-fast-transport
74b94e3 CI: read the app-host test product over parallel range requests

# Conflicts:
#	.github/workflows/ci-artifact-transport.yml
#	.github/workflows/ci-guards.yml
#	.github/workflows/ci-macos.yml
#	.github/workflows/ci.yml
#	.github/workflows/nightly.yml
#	.github/workflows/test-ios.yml
#	.github/workflows/web-complexity-trusted.yml
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