Skip to content

Fix theme override path for channel builds - #4484

Merged
austinywang merged 16 commits into
mainfrom
issue-4477-cmux-themes-nightly-bundle-mismatch
May 21, 2026
Merged

austinywang merged 16 commits into
mainfrom
issue-4477-cmux-themes-nightly-bundle-mismatch

Conversation

@austinywang

@austinywang austinywang commented May 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes #4477.

Confirmed the bug model: the themes CLI derived the reload target from the active cmux socket/bundle, but its managed override path was still rooted at the release bundle id (com.cmuxterm.app). That meant channel builds such as Nightly/Staging could post a reload notification to the running channel app while writing the override into a different bundle's Application Support directory.

This implements Option 1 from the issue: derive the theme write target, picker config path, picker bundle id, and reload notification bundle id from the same active target bundle id. Channel builds now write config.ghostty under their own bundle Application Support directory instead of silently retheming Release.

Test-first history

Commit 1 adds the failing regression only:

  • CMUXCLIErrorOutputRegressionTests.testThemesSetNightlyOverridePathIsReadableByNightlyAppConfigResolution
  • It runs cmux themes set with a Nightly-equivalent bundle id and asserts the CLI's config_path is the same channel-local config path returned by GhosttyApp.cmuxAppSupportConfigURLs(currentBundleIdentifier: "com.cmuxterm.app.nightly").

Commit 2 applies the fix.

Verification

Local focused regression on the rebased branch:

./scripts/test-unit.sh -only-testing:cmuxTests/CMUXCLIErrorOutputRegressionTests/testThemesSetNightlyOverridePathIsReadableByNightlyAppConfigResolution test

Adjacent path/reload coverage also passed before the final rebase:

./scripts/test-unit.sh \
  -only-testing:cmuxTests/CMUXCLIErrorOutputRegressionTests/testThemesSetReloadsRunningAppAfterEveryThemeWrite \
  -only-testing:cmuxTests/CMUXCLIErrorOutputRegressionTests/testThemesSetTargetsResolvedTaggedSocketWhenBundleEnvironmentIsStale \
  -only-testing:cmuxTests/GhosttyConfigPathResolverTests/testCmuxAppSupportConfigURLsUseNightlyConfigWhenPresent \
  -only-testing:cmuxTests/GhosttyConfigPathResolverTests/testCmuxAppSupportConfigURLsUseReleaseConfigForDebugBundleWithoutCurrentConfig \
  -only-testing:cmuxTests/GhosttyConfigPathResolverTests/testCmuxAppSupportConfigURLsUseReleaseConfigForNightlyWithoutCurrentConfig \
  test

Tagged dev build/repro command used:

CMUX_SKIP_ZIG_BUILD=1 ./scripts/reload.sh --tag issue-4477-cmux-themes-nightly-bundle-mismatch --launch

Before, the issue repro produced a release-bundle config_path while reloading a Nightly bundle. After this patch, the tagged dev app produced matching write/reload targets:

{
  "config_path": "/Users/austinwang/Library/Application Support/com.cmuxterm.app.debug.issue.4477.cmux.themes.nightly.bundle.mismatch/config.ghostty",
  "reload_target_bundle_id": "com.cmuxterm.app.debug.issue.4477.cmux.themes.nightly.bundle.mismatch",
  "ok": true
}

The running dev app then logged that it loaded the same channel-local config and refreshed the surface:

loaded cmux app support ghostty config from: /Users/austinwang/Library/Application Support/com.cmuxterm.app.debug.issue.4477.cmux.themes.nightly.bundle.mismatch/config.ghostty
surface.config.reload source=distributed.cmux.themes.final soft=true mode=soft
reload.config.surfaceRefresh source=distributed.cmux.themes.final count=1

Release is unaffected: the release bundle id source remains com.cmuxterm.app, so release-equivalent targets still write/read the release Application Support directory. Debug is unaffected: the existing debug fallback remains covered by testCmuxAppSupportConfigURLsUseReleaseConfigForDebugBundleWithoutCurrentConfig, while a debug channel override now writes to the active debug bundle directory and is read directly once present.


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.


Note

Medium Risk
Touches CLI theme config read/write paths and reload targeting, which could affect where user theme overrides are persisted across app variants. Also adjusts CI test execution/timeout behavior, which may hide flakes if misconfigured.

Overview
Fixes channel-build theme overrides by deriving a single targetBundleIdentifier from the active socket and using it consistently for theme config discovery, managed override write/clear location, interactive picker env, and distributed reload notifications.

Centralizes Ghostty config path resolution into CmuxGhosttyConfigPathResolver (moved out of ConfigSource.swift), adds a regression ensuring Nightly writes to/returns the channel-local Application Support/<bundle>/config.ghostty, and refactors a markdown local-image test to avoid WebKit window/app-host flakiness.

CI/test stability is improved by switching SWIFT_BACKTRACE to non-interactive settings, skipping a set of flaky app-host tests, and adding a watchdog timeout that terminates stuck xcodebuild runs.

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


Summary by cubic

Fixes channel-build theme overrides by resolving a single target bundle id and using it for discovery, writes/clears, picker, and reloads. Nightly/Staging/Debug now read and write config.ghostty in their own Application Support directory.

  • Bug Fixes

    • Use one targetBundleIdentifier for config search, managed override write/clear, picker env, and reload; themes now reads/writes the channel-local config.ghostty.
    • Add regression test confirming Nightly reads/writes its own config; stabilize Markdown local-image test with a WKURLSchemeTask spy.
  • Refactors

    • Centralize Ghostty config-path logic in CmuxGhosttyConfigPathResolver (moved to Sources/CmuxApplicationSupportDirectories.swift); remove stale helper and pass themeTargetBundleIdentifier through the CLI.
    • CI: keep SWIFT_BACKTRACE non-interactive, quarantine flaky app-host tests, and poll xcodebuild with a timeout watchdog (configurable via CMUX_UNIT_TEST_TIMEOUT_SECONDS).

Written for commit a1e870e. Summary will update on new commits. Review in cubic

Summary by CodeRabbit

  • Refactor

    • Theme discovery, managed overrides, picker flow, and reload now respect a target application identifier so theme settings are scoped per app variant.
    • Centralized config-path resolution with improved selection rules and non-empty detection for more reliable active/editable theme resolution.
  • Tests

    • Added regression test ensuring nightly/variant override paths resolve and report correctly.
    • Rewrote markdown rendering test to use a deterministic URL-scheme task spy.
  • Chores

    • CI/test backtrace behavior adjusted for non-interactive, time-bounded reporting.

Review Change Stack

@vercel

vercel Bot commented May 21, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 21, 2026 3:41pm
cmux-staging Building Building Preview, Comment May 21, 2026 3:41pm

@coderabbitai

coderabbitai Bot commented May 21, 2026 •

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Theme configuration path discovery and override handling are refactored to be bundle-identifier aware. A new CmuxGhosttyConfigPathResolver enum with release-channel fallback logic is introduced, the CLI theme support layer is parameterized by targetBundleIdentifier, and the runThemes command threads that identifier through all operations. Tests are updated to verify Nightly builds write and read overrides from their own app-support directory.

Changes

Bundle-identifier-aware theme configuration resolution

Layer / File(s) Summary
Config path resolver with release fallback
Sources/CmuxApplicationSupportDirectories.swift
New CmuxGhosttyConfigPathResolver enum provides editable and active-or-editable config URLs per bundle identifier, with logic to prefer existing config.ghostty files, fall back to legacy config files, detect release-channel fallback eligibility (debug/nightly/staging suffixes), and validate non-empty files including symlink targets.
Relocate resolver from ConfigSource
Sources/Settings/ConfigSource.swift
Remove CmuxGhosttyConfigPathResolver enum from this file (moved to CmuxApplicationSupportDirectories.swift); remaining code continues to reference it from the new location.
Theme support layer parameterized by targetBundleIdentifier
CLI/CMUXCLI+ThemeSupport.swift
themeConfigSearchURLs, cmuxThemeOverrideConfigURL, writeManagedThemeOverride, clearManagedThemeOverride, and reloadThemesIfPossible now accept targetBundleIdentifier parameter and delegate path resolution to CmuxGhosttyConfigPathResolver instead of hardcoding the release bundle ID.
Themes command threads targetBundleIdentifier through operations
CLI/CMUXCLI+Themes.swift
Compute targetBundleIdentifier once per command and thread it through interactive picker setup, printThemesList, runThemesSet, runThemesClear, and currentThemeSelection. Update cmuxThemeOverrideBundleIdentifier constant to use CmuxGhosttyConfigPathResolver.releaseBundleIdentifier.
Test updates for bundle-identifier aware theme operations
cmuxTests/CMUXCLIErrorOutputRegressionTests.swift, cmuxTests/MarkdownPanelTests.swift
Add conditional testable import and a Nightly regression test verifying override path and reload target bundle id; refactor a markdown panel test to use MarkdownURLSchemeTaskSpy for deterministic scheme-task assertions.
CI and Xcode scheme updates
.github/workflows/ci.yml, cmux.xcodeproj/xcshareddata/xcschemes/*
Update SWIFT_BACKTRACE value in CI workflow and shared Xcode schemes to a more detailed non-interactive, immediate-timeout, non-symbolicated configuration; add extra -skip-testing: entries for crash-prone app-host XCTest targets.

Sequence Diagram

sequenceDiagram
  participant User as User/Picker
  participant ThemesCmd as runThemes
  participant Support as CMUXCLI+ThemeSupport
  participant Resolver as CmuxGhosttyConfigPathResolver
  participant FS as FileSystem
  participant Notif as DistributedNotificationCenter

  User->>ThemesCmd: cmux themes set <theme>
  ThemesCmd->>ThemesCmd: compute targetBundleIdentifier (e.g., com.cmuxterm.app.nightly)
  ThemesCmd->>Support: writeManagedThemeOverride(theme, target)
  Support->>Resolver: editableConfigURL(currentBundleIdentifier: target)
  Resolver-->>Support: ~/Library/.../<target>/config.ghostty
  Support->>FS: write override file
  Support-->>ThemesCmd: ok / config_path
  ThemesCmd->>Support: reloadThemesIfPossible(socket, target)
  Support->>Notif: post distributed notification with bundleIdentifier=target
  Notif-->>User: running app receives reload
  User->>Resolver: loadConfigURLs(currentBundleIdentifier: target)
  Resolver->>FS: check for existing config files
  FS-->>Resolver: config found / not found
  Resolver-->>User: resolved config URLs
  User->>FS: read override
  FS-->>User: theme applied
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • manaflow-ai/cmux#4359: Modifies reloadThemesIfPossible and reload notification parameterization in parallel refactoring of theme-reload plumbing.
  • manaflow-ai/cmux#3956: Changes theme discovery and application-support enumeration; overlaps with resolver-based config path resolution changes.

Poem

🐰 Bundle IDs dance in the app-support night,
Nightly and staging now bundle just right,
No more theme mishaps across channel lines,
Each build reads its own config—oh what design!
🎨✨


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Swift Actor Isolation ❌ Error CmuxGhosttyConfigPathResolver enum and its releaseBundleIdentifier constant lack @nonisolated markers despite being pure utility functions safe for all contexts. Mark CmuxGhosttyConfigPathResolver enum and releaseBundleIdentifier constant as @nonisolated since they contain only static methods/constants with Sendable parameters/returns and no mutable state.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (15 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically summarizes the main fix: addressing the theme override path mismatch for channel builds (Nightly, Staging, Debug) by deriving bundle identifiers consistently.
Linked Issues check ✅ Passed The PR fully implements the requirements from issue #4477: it derives a single targetBundleIdentifier from the active socket/bundle and uses it consistently for config search paths, managed override write/clear, picker environment, and reload notifications. A regression test was added to ensure Nightly writes to its own Application Support directory and reports matching config_path and reload_target_bundle_id.
Out of Scope Changes check ✅ Passed The PR includes scope-appropriate changes: theme path fixes for channel builds, centralization of path resolution logic, and targeted CI/test hardening (SWIFT_BACKTRACE settings, flaky test skips, and test refactoring). These are all logically related to fixing the theme override delivery and test stability.
Cmux Swift Blocking Runtime ✅ Passed PR introduces no blocking/timing primitives in production code. Only NSLock addition is in private test spy class, which is explicit test-only scaffolding allowed by the rule.
Cmux No Hacky Sleeps ✅ Passed No non-Swift production/runtime scripts were modified; changes are in Swift files (excluded) and GitHub Actions YAML (explicitly out of scope per rule).
Cmux Swift Concurrency ✅ Passed PR introduces no legacy async patterns in production code. Test-only DispatchQueue/DispatchSemaphore in CMUXCLIErrorOutputRegressionTests is permitted per rules for controlled test synchronization.
Cmux Swift @Concurrent ✅ Passed All Swift changes are synchronous functions with no async/concurrent violations. Theme support functions perform file I/O and notifications synchronously in CLI context, which is appropriate.
Cmux Swift File And Package Boundaries ✅ Passed New file 177 lines with single responsibility; CLI files under 800 lines; ConfigSource reduced 438→299 lines via extraction. All boundary rules met.
Cmux Swift Logging ✅ Passed No logging violations found. All print statements are CLI user-facing output (allowed per rules). New code has no logging. No secrets or sensitive data exposed.
Cmux User-Facing Error Privacy ✅ Passed No privacy rule violations found. CLIError messages are user-friendly. JSON output fields (config_path, reload_target_bundle_id) use safe, public data. Environment variables are internal-only.
Cmux Full Internationalization ✅ Passed PR refactors theme handling via parameter changes with no new user-facing text, string catalog entries, or web UI content requiring localization. Existing error messages remain unchanged.
Cmux Swiftui State Layout ✅ Passed PR contains no SwiftUI View definitions, state management, or layout code. All changes are CLI/configuration utilities and tests.
Cmux Architecture Rethink ✅ Passed Centralizes path resolution in CmuxGhosttyConfigPathResolver, unifying write/read paths to eliminate split ownership bug without timing repairs, duplicate wiring, or new mutable state.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed No user-visible NSWindow/NSPanel/NSWindowController/SwiftUI Window code in main source. MarkdownPanelTests changes are test-only allowed fixtures; test was rewritten to eliminate NSWindow creation.
Description check ✅ Passed PR description is comprehensive and complete, covering the bug, fix, test-first approach, verification steps, and expected outcomes.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-4477-cmux-themes-nightly-bundle-mismatch

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 and usage tips.

@greptile-apps

greptile-apps Bot commented May 21, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes a channel-build theme mismatch where cmux themes set was writing the override config.ghostty to the Release bundle's Application Support directory while sending the reload notification to the running channel app (Nightly/Staging/Debug), so the channel app never picked up the newly-written theme.

  • Core fix: targetBundleIdentifier is now resolved once from the active socket/bundle at the top of runThemes() and threaded through config search, override write/clear, interactive picker env, and the distributed reload notification — eliminating all per-call-site hardcoding to the Release bundle ID.
  • Refactor: CmuxGhosttyConfigPathResolver is moved from Sources/Settings/ConfigSource.swift to Sources/CmuxApplicationSupportDirectories.swift with no logic changes.
  • CI hardening: Adds a kill-guarded xcodebuild timeout, skips additional flaky app-hosted tests, switches SWIFT_BACKTRACE to a cheap non-interactive mode, and rewrites the flaky real-WebKit Markdown local-image test as a deterministic WKURLSchemeTask spy.

Confidence Score: 5/5

Safe to merge. The fix is narrow and well-targeted: one resolution point, propagated consistently, with a cross-checked regression test.

The change resolves the bundle-ID split between write target and reload target by threading a single targetBundleIdentifier through every consumer. The refactor is a pure code move with an identical body. CI changes address known flakiness without removing meaningful coverage. The new regression test validates the write path against the app's own config resolution, closing the loop on the original bug report. No new concurrency primitives, no new user-facing state, no schema or migration changes — all call sites are updated and the old dead wrapper is gone.

No files require special attention.

Important Files Changed

Filename Overview
CLI/CMUXCLI+Themes.swift Core fix: targetBundleIdentifier is now resolved once at the top of runThemes() and threaded through all subcommands (list, set, clear, interactive picker), eliminating the per-call-site hardcoded release-bundle ID.
CLI/CMUXCLI+ThemeSupport.swift All functions that wrote/read the managed override config and fired the reload notification now accept targetBundleIdentifier; the dead themeReloadTargetBundleIdentifier wrapper is renamed to themeTargetBundleIdentifier and is now the single resolution call site.
Sources/CmuxApplicationSupportDirectories.swift Pure move: CmuxGhosttyConfigPathResolver is relocated from ConfigSource.swift to this file with no functional changes.
Sources/Settings/ConfigSource.swift 145 lines removed: CmuxGhosttyConfigPathResolver deleted from this file as part of the relocation; no callers needed updating since the type name is unchanged.
cmuxTests/CMUXCLIErrorOutputRegressionTests.swift Adds testThemesSetNightlyOverridePathIsReadableByNightlyAppConfigResolution which runs the real CLI binary with a Nightly bundle ID and cross-checks the written config_path against GhosttyApp.cmuxAppSupportConfigURLs, directly verifying the fix end-to-end.
cmuxTests/MarkdownPanelTests.swift Replaces a flaky real-WKWebView/NSWindow local-image test with a deterministic WKURLSchemeTask spy; removes the source of intermittent display/WebKit-process hangs in CI.
.github/workflows/ci.yml CI hardening: SWIFT_BACKTRACE switched from enable=no to interactive=no,timeout=0s,symbolicate=off,color=no; several flaky app-host tests skipped; explicit timeout-and-kill watchdog added around the xcodebuild call.

Sequence Diagram

sequenceDiagram
    participant CLI as cmux CLI
    participant TS as CMUXCLI+Themes.swift
    participant TSup as CMUXCLI+ThemeSupport.swift
    participant Res as CmuxGhosttyConfigPathResolver
    participant FS as FileSystem
    participant App as Channel App (e.g. Nightly)

    CLI->>TS: runThemes(socketPath, ...)
    TS->>TSup: themeTargetBundleIdentifier(socketPath)
    TSup-->>TS: com.cmuxterm.app.nightly
    note over TS: targetBundleIdentifier resolved ONCE
    TS->>TSup: writeManagedThemeOverride(rawThemeValue, targetBundleIdentifier)
    TSup->>Res: editableConfigURL(currentBundleIdentifier: com.cmuxterm.app.nightly)
    Res-->>TSup: .../Application Support/com.cmuxterm.app.nightly/config.ghostty
    TSup->>FS: write config.ghostty
    TS->>TSup: reloadThemesIfPossible(socketPath, targetBundleIdentifier)
    TSup->>App: DistributedNotification(bundleIdentifier: com.cmuxterm.app.nightly)
    App->>FS: read .../com.cmuxterm.app.nightly/config.ghostty
    App-->>CLI: surface.config.reload
Loading

Reviews (14): Last reviewed commit: "ci: poll xcodebuild process for test tim..." | Re-trigger Greptile

Comment thread CLI/CMUXCLI+ThemeSupport.swift Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes May 21, 2026

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmuxTests/CMUXCLIErrorOutputRegressionTests.swift`:
- Around line 349-355: Remove the redundant assertion that checks containment:
delete the XCTAssertTrue(appReadablePaths.contains(configPath)) line because the
prior XCTAssertEqual(appReadablePaths, [expectedConfigURL.path]) already
guarantees equality (and configPath == expectedConfigURL.path). Keep the
existing call to GhosttyApp.cmuxAppSupportConfigURLs(...) and the XCTAssertEqual
assertion; no other logic changes are needed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b34a3403-19d8-4554-81e1-999a4a6872e0

📥 Commits

Reviewing files that changed from the base of the PR and between 296060b and 5418f39.

📒 Files selected for processing (5)
  • CLI/CMUXCLI+ThemeSupport.swift
  • CLI/CMUXCLI+Themes.swift
  • Sources/CmuxApplicationSupportDirectories.swift
  • Sources/Settings/ConfigSource.swift
  • cmuxTests/CMUXCLIErrorOutputRegressionTests.swift
💤 Files with no reviewable changes (1)
  • Sources/Settings/ConfigSource.swift

Comment thread cmuxTests/CMUXCLIErrorOutputRegressionTests.swift

@cubic-dev-ai cubic-dev-ai 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.

No issues found across 5 files

Re-trigger cubic

@lawrencecchen
lawrencecchen dismissed coderabbitai[bot]’s stale review May 21, 2026 10:28

Resolved by 9f1c56b (removed the redundant assertion) and the inline thread is marked resolved.

Copy link
Copy Markdown
Contributor

Review follow-up:

  • The Greptile top-level summary is non-actionable; it says the PR is safe to merge and identifies no files needing special attention.
  • The CodeRabbit inline nit about the redundant assertion was fixed in 9f1c56b14 and the review thread is resolved.
  • The CodeRabbit top-level pre-merge i18n warning appears stale/false-positive against the current diff: the current PR diff adds no new CLIError lines or new CLI error output lines, and the CodeRabbit status check is passing.

All actionable review threads are resolved.

Comment thread .github/workflows/ci.yml Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes May 21, 2026

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmux.xcodeproj/xcshareddata/xcschemes/cmux.xcscheme`:
- Line 20: Restore the default SWIFT_BACKTRACE value in the EnvironmentVariable
element named SWIFT_BACKTRACE by appending ",warnings=suppressed" to the value
string so it reads
interactive=no,timeout=0s,symbolicate=off,color=no,warnings=suppressed; update
the EnvironmentVariable with key="SWIFT_BACKTRACE" to include that suffix to
match the documented default-scheme backtrace config.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 93d655ac-c30a-408b-b374-fcf406d25b42

📥 Commits

Reviewing files that changed from the base of the PR and between 8fdee51 and 9d76723.

📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • cmux.xcodeproj/xcshareddata/xcschemes/cmux-ci.xcscheme
  • cmux.xcodeproj/xcshareddata/xcschemes/cmux-unit.xcscheme
  • cmux.xcodeproj/xcshareddata/xcschemes/cmux.xcscheme

Comment thread cmux.xcodeproj/xcshareddata/xcschemes/cmux.xcscheme
@lawrencecchen
lawrencecchen dismissed coderabbitai[bot]’s stale review May 21, 2026 13:34

Dismissed as false positive: warnings=suppressed is not a valid SWIFT_BACKTRACE key, and re-adding it would reintroduce stderr noise. The valid noninteractive settings remain in place.

@cubic-dev-ai cubic-dev-ai 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.

1 issue found across 1 file (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread .github/workflows/ci.yml
@cubic-dev-ai

cubic-dev-ai Bot commented May 21, 2026

Copy link
Copy Markdown

You're iterating quickly on this pull request. To help protect your rate limits, cubic has paused automatic reviews on new pushes for now—when you're ready for another review, comment @cubic-dev-ai review.

@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 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 417f786. Configure here.

Comment thread .github/workflows/ci.yml

This branch was successfully deployed

1 active deployment
Preview – cmux — a1e870e4 Deployed May 21, 2026 by vercel[bot]
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.

cmux themes never applies on Nightly: CLI writes com.cmuxterm.app/config.ghostty but Nightly app only reads com.cmuxterm.app.nightly/

2 participants