Skip to content

CLI: shorter unknown-command errors with suggestions, copy polish - #7329

Merged
lawrencecchen merged 5 commits into
mainfrom
feat-cli-copy
Jul 4, 2026
Merged

lawrencecchen merged 5 commits into
mainfrom
feat-cli-copy

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Jul 4, 2026 •

Copy link
Copy Markdown
Contributor

Applies the useful parts of Vercel's CLI copywriting guidance (vercel/vercel#16774) to the cmux CLI's user-facing copy.

A typo'd command used to dump the entire ~200-line usage before the error, and cmux <unknown> --help printed the error to stdout and exited 0. Both paths now throw one short error with a nearest-command suggestion (Levenshtein over topLevelCommandNames, internal __ names excluded, exact matches never self-suggest) and exit 2:

Error: Unknown command 'workspce'. Did you mean 'workspace'? Run 'cmux --help' for the full command list.

The three Unable to messages are reclassified per failure type (Failed to for system failures, Couldn't for user-state, with a recovery hint added to the surface-ID one), the help recovery hint is standardized to one exact sentence, and the usage() header prose is tightened (Handle Inputs: heading renamed to Targets:). The Commands: and Environment: blocks of --help are byte-identical to main, verified by diffing the built CLI's output against the release CLI.

No test added: the CLI executable target has no wired unit-test path, and a source-shape test asserting help strings is disallowed by the repo test-quality policy. Verified behaviorally on the tagged build (clicpy): typo suggestion + exit 2 on both the pre-socket and socket dispatch paths, no self-suggestion for valid commands lacking a help entry, ping/identify/--help unaffected.

🤖 Generated with Claude Code


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


Note

Low Risk
Mostly CLI UX and CI toolchain selection; behavior change is limited to unknown-command exit paths and error text, not socket or app logic.

Overview
Improves unknown-command handling: both pre-socket and socket dispatch paths now throw unknownCommandError (exit 2) instead of printing full usage or exiting 0 on cmux <typo> --help. Errors are one line with optional “Did you mean …?” from Levenshtein distance (≤2) over topLevelCommandNames, excluding __* commands and exact matches.

topLevelCommandNames and suggestion logic move into new CMUXCLI+CommandSuggestions.swift; cmux.swift budget is lowered accordingly.

Several user-facing strings are tightened: usage() header (Targets, socket auth, agent help); surface ID, git diff base, and Application Support errors use Failed to / Couldn't wording with clearer recovery hints.

scripts/select-ci-xcode.sh prefers stable Xcode installs and only falls back to Beta when no stable Xcode is present.

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


Summary by cubic

Shorten and improve unknown-command handling: show a single, clear error with a “Did you mean” suggestion and exit with code 2. Also polish CLI copy, tighten the --help header, move suggestion helpers into CMUXCLI+CommandSuggestions.swift, and update CI to prefer stable Xcode over betas.

  • New Features

    • Suggest the nearest command for typos (edit distance over top-level commands; internal __ commands excluded; no self-suggestions).
    • Standard help hint: “Run 'cmux --help' for the full command list.”
    • Tighter usage() header (“Targets” section) with minor wording tweaks; Commands/Environment blocks unchanged.
  • Bug Fixes

    • Unknown commands no longer dump the full usage or exit 0 on --help; both dispatch paths now error with exit code 2.
    • Clearer error phrasing and recovery hints for system/user-state issues (Application Support path, surface ID, git diff base).
    • CI: scripts/select-ci-xcode.sh now selects stable Xcode over beta; falls back to beta only if no stable version is present.

Written for commit 181f1b7. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Bug Fixes
    • Improved CLI error messages for missing Application Support directories, unresolved surface IDs (with actionable next steps), and branch diff base detection.
    • Unknown commands now return a clearer error (exit code 2) and may suggest the closest valid command, always pointing you to --help.
  • Documentation / UX
    • Refreshed and expanded CLI help text, including a labeled Targets section, clarified socket-auth precedence, and enhanced guidance for agent help and config reload behavior.
  • Chores
    • Updated CI Xcode selection to prefer stable tools but fall back to the best available beta when no stable match is found.

Unknown commands no longer dump the full usage; both dispatch paths now
throw one short error with a 'Did you mean' suggestion (edit distance
over topLevelCommandNames) and exit 2. The pre-socket --help path
previously exited 0 for unknown commands. Replaced the three 'Unable to'
messages with Failed to/Couldn't per failure class, standardized the
help hint to "Run 'cmux --help' for the full command list.", and
tightened the usage() header prose; the Commands and Environment blocks
are byte-identical.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 4, 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 Jul 4, 2026 4:35pm
cmux-staging Building Building Preview, Comment Jul 4, 2026 4:35pm

@coderabbitai

coderabbitai Bot commented Jul 4, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR updates CLI error wording and help text, adds shared unknown-command suggestion handling, and changes CI Xcode selection to fall back to beta installations.

Changes

CLI error messages and help text

Layer / File(s) Summary
Unknown command handling and suggestion helper
CLI/CMUXCLI+CommandSuggestions.swift, CLI/cmux.swift, cmux.xcodeproj/project.pbxproj
Adds shared unknown-command error construction, command suggestion lookup, and edit-distance calculation, then routes dispatcher paths to throw that error and wires the new source file into the project.
Error message wording and help text updates
CLI/CMUXCLI+ThemeSupport.swift, CLI/cmux.swift, CLI/cmux_open.swift
Updates error text for Application Support directory lookup, surface ID resolution, and branch diff base resolution, and reworks the CLI usage/help block with Targets, Socket Auth, and Agent Help sections.

CI Xcode selection

Layer / File(s) Summary
Beta Xcode fallback
scripts/select-ci-xcode.sh
Tracks the best beta Xcode during discovery and uses it when no stable Xcode is found.

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

Possibly related PRs

  • manaflow-ai/cmux#3956: Both PRs touch the theme-discovery logic in CLI/CMUXCLI+ThemeSupport.swift around Application Support directory handling.

Important

Pre-merge checks failed

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

❌ Failed checks (1 error)

Check name Status Explanation Resolution
Cmux Full Internationalization ❌ Error User-facing Swift copy was added as raw literals in CLI/CMUXCLI+CommandSuggestions.swift, cmux.swift, CMUXCLI+ThemeSupport.swift, and cmux_open.swift without localized APIs or catalog entries. Wrap the new/changed strings in String(localized:defaultValue:) (or equivalent) and add matching translated entries in Resources/Localizable.xcstrings / InfoPlist catalogs for all existing locales.
✅ Passed checks (24 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 Swift Actor Isolation ✅ Passed Touched CLI files add only synchronous error/copy helpers; no new @MainActor, nonisolated, Sendable reference, or UI-store isolation changes appear in the diff.
Cmux Swift Blocking Runtime ✅ Passed The touched Swift code only changes copy and adds pure Levenshtein-based suggestion logic; no new semaphores, waits, sleeps, syncs, or locks appear in the diff.
Cmux Browser Automation Off-Main ✅ Passed The commit only changes scripts/select-ci-xcode.sh; no browser automation files or socket-worker routing paths were modified.
Cmux Expensive Synchronous Load ✅ Passed Swift diff only changes CLI copy/unknown-command handling and pure suggestion logic; no new agent-history loads, JSON/JSONL scans, MainActor, or socket-path disk work.
Cmux Cache Substitution Correctness ✅ Passed The diff only changes CLI error/help copy and command-suggestion logic; it does not swap any fresh authoritative read for cached/opportunistic data in persistence/history/snapshot paths.
Cmux No Hacky Sleeps ✅ Passed The only changed runtime script adds beta Xcode selection fallback; the diff contains no sleeps, timers, polling, or fixed delays.
Cmux Algorithmic Complexity ✅ Passed PASS: the new suggestion loop scans a fixed 156-name command set, and the Xcode selector keeps a single pass with no nested rescans.
Cmux Swift Concurrency ✅ Passed PR Swift diff only adds a synchronous suggestion helper and message tweaks; no new DispatchQueue, Combine, completion-handler, or fire-and-forget Task patterns appear.
Cmux Swift @Concurrent ✅ Passed Touched Swift changes are synchronous copy/suggestion helpers; no @concurrent, nonisolated async, or UI-isolated heavy async work was introduced.
Cmux Swift File And Package Boundaries ✅ Passed PASS: the new 211-line Swift file is single-purpose suggestion logic; oversized files only get small copy fixes, with no mixed responsibilities or package-boundary issue.
Cmux Swiftpm Lockfiles ✅ Passed PASS: cmux.xcodeproj diff only adds a Swift source file; no SwiftPM package-reference, Package.swift, .gitignore, workflow, or Package.resolved changes were present.
Cmux Swift Logging ✅ Passed PASS: The Swift diff only adjusts user-facing CLIError/help text; no added Logger, NSLog, dump, debugPrint, or ad hoc diagnostics in changed Swift files.
Cmux User-Facing Error Privacy ✅ Passed HEAD only changes scripts/select-ci-xcode.sh; no production user-facing errors, alerts, or command output were introduced.
Cmux Swiftui State Layout ✅ Passed The diff is non-SwiftUI (only a shell script); no new ObservableObject/@Published/GeometryReader/store-reference or render-time state mutation patterns were introduced.
Cmux Architecture Rethink ✅ Passed Localized CLI copy/suggestion fixes; unknown-command handling is centralized in one helper, with no new sleeps, observers, split owners, or side-channel workarounds.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed Only scripts/select-ci-xcode.sh changed in the visible diff; no Swift window code or cmuxAuxiliaryWindowIdentifiers changes were introduced.
Cmux Source Artifacts ✅ Passed All changed paths are intentional source/config/script edits; no logs, caches, build output, temp dirs, or other accidental artifacts were added.
Cmux No Test Or Debug Seam In Production Source ✅ Passed No changed Swift files are under a production Sources/ path, so the no-debug-seam rule is not applicable to this PR.
Cmux No Ambient Global State ✅ Passed PASS: the new logic sits in extension CMUXCLI; unknownCommandError is an instance method and topLevelCommandNames is a static let constant, both allowed by the rule.
Title check ✅ Passed The title clearly summarizes the main change: shorter unknown-command errors with suggestions and copy polish.
Description check ✅ Passed The description includes the summary and testing details and is mostly complete, with only some template sections omitted.
✨ 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 feat-cli-copy

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.

@greptile-apps

greptile-apps Bot commented Jul 4, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR replaces the noisy unknown-command error paths (full usage dump + exit 0) with a single short error that exits 2 and optionally suggests the nearest valid command via Levenshtein distance (≤2, __ commands excluded, exact matches excluded). Copy is also polished throughout: three Unable to messages are reclassified to Failed to/Couldn't, the surface-ID error gains --surface/list-pane-surfaces recovery guidance, and the usage() header is tightened.

  • CMUXCLI+CommandSuggestions.swift is a new ~211-line extension that houses unknownCommandError, the Levenshtein editDistance helper, and the topLevelCommandNames set (moved verbatim from its former private home in cmux.swift, budget file updated accordingly).
  • Both dispatch paths (dispatchSubcommandHelp fallthrough and the socket default case) now throw unknownCommandError(command) instead of printing partial output and returning or exiting 0.
  • scripts/select-ci-xcode.sh gains beta-Xcode demotion: beta builds are tracked separately and used only when no stable Xcode is available on the image.

Confidence Score: 5/5

CLI-only messaging change; no socket, auth, or data-path behavior is touched.

Both dispatch paths consistently throw with exit 2 now. The Levenshtein implementation is a standard Wagner-Fischer two-row algorithm with correct guards. The topLevelCommandNames set is a verbatim move — including remote-daemon-status — with the access modifier relaxed from private to internal, which is acceptable for a static constant shared across extension files. The shell script change uses proper beta-demotion logic with no sleeps or hacks.

No files require special attention.

Important Files Changed

Filename Overview
CLI/CMUXCLI+CommandSuggestions.swift New file: Levenshtein suggestion helper + topLevelCommandNames set extracted from cmux.swift. Algorithm, guards, and tie-breaking logic are correct. topLevelCommandNames matches the old private set including remote-daemon-status.
CLI/cmux.swift Both pre-socket and socket dispatch default paths now throw unknownCommandError (exit 2) instead of printing usage/partial errors. topLevelCommandNames set moved out; usage() prose tightened. Surface-ID error message adds --surface / list-pane-surfaces recovery hint.
CLI/CMUXCLI+ThemeSupport.swift Copy-only change: 'Unable to resolve' → 'Failed to locate' for Application Support directory error. No logic changes.
CLI/cmux_open.swift Copy-only change: 'Unable to find' → 'Couldn't find' for branch diff base error. No logic changes.
cmux.xcodeproj/project.pbxproj Registers CMUXCLI+CommandSuggestions.swift in PBXBuildFile, PBXFileReference, and PBXGroup correctly. UUIDs are fresh and non-colliding.
.github/swift-file-length-budget.tsv Budget for cmux.swift reduced from 34660 to 34499, reflecting removal of the ~160-line topLevelCommandNames block. Correct bookkeeping.
scripts/select-ci-xcode.sh Adds beta-Xcode demotion: beta builds are tracked separately and only selected when no stable Xcode is found. Logic is correct; no sleeps or hacks introduced.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["cmux <command> args"] --> B{Pre-socket dispatch}
    B -->|known command| C[Run command handler]
    B -->|dispatchSubcommandHelp succeeds| D[Print subcommand help → exit 0]
    B -->|no handler found| E[throw unknownCommandError]
    C -->|socket required| F{Socket dispatch switch}
    F -->|matched case| G[Run socket command handler]
    F -->|default| E
    E --> H[suggestedCommandName]
    H --> I{"Levenshtein distance ≤ 2\nand not __ prefix\nand not exact match?"}
    I -->|yes| J["'Unknown command X. Did you mean Y?\nRun cmux --help for the full command list.'"]
    I -->|no| K["'Unknown command X.\nRun cmux --help for the full command list.'"]
    J --> L[exit 2]
    K --> L
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["cmux <command> args"] --> B{Pre-socket dispatch}
    B -->|known command| C[Run command handler]
    B -->|dispatchSubcommandHelp succeeds| D[Print subcommand help → exit 0]
    B -->|no handler found| E[throw unknownCommandError]
    C -->|socket required| F{Socket dispatch switch}
    F -->|matched case| G[Run socket command handler]
    F -->|default| E
    E --> H[suggestedCommandName]
    H --> I{"Levenshtein distance ≤ 2\nand not __ prefix\nand not exact match?"}
    I -->|yes| J["'Unknown command X. Did you mean Y?\nRun cmux --help for the full command list.'"]
    I -->|no| K["'Unknown command X.\nRun cmux --help for the full command list.'"]
    J --> L[exit 2]
    K --> L
Loading

Reviews (5): Last reviewed commit: "select-ci-xcode: never pick a beta Xcode..." | Re-trigger Greptile

Comment thread CLI/cmux.swift Outdated
Comment on lines +5278 to +5284
private func unknownCommandError(_ command: String) -> CLIError {
var message = "Unknown command '\(command)'."
if let suggestion = suggestedCommandName(for: command) {
message += " Did you mean '\(suggestion)'?"
}
message += " Run 'cmux --help' for the full command list."
return CLIError(message: message, exitCode: 2)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 New user-facing strings missing localization

unknownCommandError introduces two brand-new user-facing phrases — "Did you mean '\(suggestion)'?" and "Run 'cmux --help' for the full command list." — that are built with raw string interpolation rather than String(localized:defaultValue:). The repo's full-internationalization rule requires every new user-facing string in production Swift to go through a localized string API with matching catalog entries for every supported locale. These strings are not existing untranslated copy being worsened; they are net-new text appearing for the first time.

Rule Used: Flag production user-facing text that is not fully... (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

workflow-guard-tests failed because the new helpers pushed CLI/cmux.swift
47 lines over its length budget. Move unknownCommandError,
suggestedCommandName, editDistance, and topLevelCommandNames into a new
extension file (wired into the pbxproj) and ratchet the budget entry down
to the new 34499-line count. No behavior change; verified on the rebuilt
clicpy tag.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@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 `@CLI/CMUXCLI`+CommandSuggestions.swift:
- Around line 53-210: The command suggestion list is duplicated and can drift
from the real command dispatch in cmux.swift. Update
CMUXCLI+CommandSuggestions.topLevelCommandNames to be derived from a single
shared source used by the dispatch switch, or add a parity test that checks the
switch cases against topLevelCommandNames so additions/removals stay in sync.
Refer to topLevelCommandNames and the command dispatch in cmux.swift when making
the fix.
🪄 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: bad3f8d0-90c0-4833-8f04-f1a3ac9b79ec

📥 Commits

Reviewing files that changed from the base of the PR and between f4bd056 and a2e9e7f.

⛔ Files ignored due to path filters (1)
  • .github/swift-file-length-budget.tsv is excluded by !**/*.tsv
📒 Files selected for processing (3)
  • CLI/CMUXCLI+CommandSuggestions.swift
  • CLI/cmux.swift
  • cmux.xcodeproj/project.pbxproj
💤 Files with no reviewable changes (1)
  • CLI/cmux.swift

Comment on lines +53 to +210
static let topLevelCommandNames: Set<String> = [
"__codex-teams-watch",
"__tmux-compat",
"agent-hibernation",
"auth",
"bind-key",
"break-pane",
"browser",
"browser-back",
"browser-forward",
"browser-reload",
"browser-status",
"capabilities",
"capture-pane",
"claude-hook",
"claude-teams",
"clear-history",
"clear-log",
"clear-notifications",
"clear-progress",
"clear-status",
"close-surface",
"close-window",
"close-workspace",
"cloud",
"codex",
"codex-hook",
"codex-teams",
"config",
"copy-mode",
"current-window",
"current-workspace",
"debug-terminals",
"detach-tab",
"diff",
"disable-browser",
"dismiss-notification",
"display-message",
"docs",
"drag-surface-to-split",
"enable-browser",
"events",
"feedback",
"feed",
"feed-hook",
"find-window",
"focus-pane",
"focus-panel",
"focus-webview",
"focus-window",
"get-url",
"help",
"hooks",
"identify",
"is-webview-focused",
"join-pane",
"jump-to-unread",
"last-pane",
"last-window",
"list-buffers",
"list-log",
"list-notifications",
"list-pane-surfaces",
"list-panels",
"list-panes",
"list-status",
"list-windows",
"list-workspaces",
"log",
"login",
"logout",
"markdown",
"mark-notification-read",
"memory",
"mobile",
"move-surface",
"move-tab-to-new-workspace",
"move-workspace-to-window",
"navigate",
"new-pane",
"new-split",
"new-surface",
"new-window",
"new-workspace",
"next-window",
"notify",
"omc",
"omo",
"omx",
"open",
"open-browser",
"open-notification",
"paste-buffer",
"ping",
"pipe-pane",
"popup",
"previous-window",
"read-screen",
"refresh-surfaces",
"reload-config",
"remote-daemon-status",
"rename-tab",
"rename-window",
"rename-workspace",
"reorder-surface",
"reorder-workspace",
"reorder-workspaces",
"resize-pane",
"respawn-pane",
"restore-session",
"right-sidebar",
"rpc",
"select-workspace",
"send",
"send-key",
"send-key-panel",
"send-panel",
"set-app-focus",
"set-buffer",
"set-hook",
"set-progress",
"set-status",
"settings",
"setup-hooks",
"shortcuts",
"simulate-app-active",
"sidebar",
"sidebar-state",
"split-off",
"ssh",
"ssh-pty-attach",
"ssh-session-attach",
"ssh-session-cleanup",
"ssh-session-end",
"ssh-session-list",
"ssh-tmux",
"surface",
"surface-health",
"surface-resume",
"swap-pane",
"tab-action",
"themes",
"top",
"tree",
"trigger-flash",
"unbind-key",
"uninstall-hooks",
"version",
"vm",
"vm-pty-attach",
"vm-pty-connect",
"vm-ssh-attach",
"wait-for",
"welcome",
"workspace",
"workspace-action",
"workspace-group",
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated source of truth for the command list.

topLevelCommandNames must be kept manually in sync with the actual command dispatch switch statements in cmux.swift. If a command is added/removed there without updating this list, suggestions silently go stale (missing suggestions for new commands, or suggesting removed ones) — a low-severity but easy-to-miss drift.

Do you want me to add a regression test that enumerates the real dispatch cases (via reflection/parsing or a shared constant) and asserts parity with topLevelCommandNames, so drift is caught in CI?

🤖 Prompt for 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.

In `@CLI/CMUXCLI`+CommandSuggestions.swift around lines 53 - 210, The command
suggestion list is duplicated and can drift from the real command dispatch in
cmux.swift. Update CMUXCLI+CommandSuggestions.topLevelCommandNames to be derived
from a single shared source used by the dispatch switch, or add a parity test
that checks the switch cases against topLevelCommandNames so additions/removals
stay in sync. Refer to topLevelCommandNames and the command dispatch in
cmux.swift when making the fix.

lawrencecchen and others added 3 commits July 4, 2026 05:57
Blacksmith macOS-15 lane is backlogged (jobs queued 2h+); repo runner
vars flipped back to warp for this run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MACOS_RUNNER_DISPLAY was still pointing at the backlogged Blacksmith
macOS-15 lane.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
On the WarpBuild macos-26 image, Xcode_27.0_Beta.app outranks every
stable 26.x by SDK version, so the release gate built against the 27.0
beta SDK and hit a Swift type-checker timeout in CMUXMobileCore. Skip
beta-named Xcodes unless no stable Xcode exists on the runner.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@lawrencecchen
lawrencecchen merged commit f48922a into main Jul 4, 2026
29 of 31 checks passed
azooz2003-bit added a commit that referenced this pull request Jul 4, 2026
…ng, themes)

Delta: #7318/#7319 mouse cursor-shape + right/middle drag forwarding, #7320 ghostty
upstream, #6664 iOS themes, #7196 iOS scroll, #7257/#7307 web, #7329 CLI suggestions,
#7222 codex resume update-suppression. Conflicts resolved keeping HEAD structure:
- GhosttyTerminalView.swift: took main's viewDidEndLiveResize + resetCursorRects
  (cursor-shape #7318; ghosttyMouseShape/ghosttyMouseCursor already in HEAD).
- Mobile/MobileHostService.swift: union (kept HEAD sharedRequestActivity +
  main publicStatusPayload theme payload #6664).
- project.pbxproj: union-dedup, normalized; test-wiring green.
- swift-file-length-budget.tsv regenerated.

#7222 (codex update-check suppression) partially landed: the CMUXAgentLaunch package
part (AgentResumeArgv.codexUpdateCheckSuppressionOverride) auto-merged and is present;
the app-target files (+CodexUpdateCheck.swift + test) extend SurfaceResumeCommandCanonicalizer,
a type HEAD dissolved into the CmuxWorkspaces package, so they can't compile and the
suppression was never wired (call site was in the HEAD-deleted +PortableAgentExecutable).
Removed those two files; re-wire recorded in merge-deferred-gaps.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview – cmux — 181f1b7e Deployed Jul 4, 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.

1 participant