cmux NEXT: Claude sign-in errors explain themselves, new chats default to Claude, Fork to lists only working targets, What's New off silences the Feed notice

AU
6d ago
+392-65

Claude credential errors now explain how to recover. Rejected shell API keys explain their precedence over subscription login; route-owned keys direct the person to replace the selected route's credential or choose another route and start a new chat. No-key subscription routes retain login advice, and outages retain their original classification.

New chats prefer Claude, then Codex, among eligible ACP harnesses when no default is configured. Terminal and Chief harnesses remain ineligible for automatic selection; explicit defaults stay unchanged. Fork to and Continue In share the same destinations, using the live session's persisted family after a profile reload. The composer filters individual destinations and guards their selection, including profiles expanded from a folded catalog family.

Disabling What's New suppresses its version's Feed notice after settings load. Feed publication policy lives on UpdateFeedCard in the existing Feed domain; the App adapter forwards to it, reducing App source by four lines against the base.

Verification

Head: 07dfd4ae990624f6fe6b1e7685363f3584130449, merged with base 3d285636cf8ca1c8d76fe586895564f14bac7783. Both sides of the base merges are preserved, including credential recovery, revoked-token retry and Chief exclusion. Normal pushes only; no rebase, reset or force-push.

Regressions were committed before their fixes:

  • Original Claude auth regression: e80c84f904cb, cargo test --locked -p acpmux --lib -- claude_auth::tests failed both new assertions on rbx without the fix.
  • Persisted-family and route-key regressions: 697b1281c5805383c9fa7229bc0383a7c10d9843. Freestyle's bun test test/model-menu-started-chat-fork.test.tsx -t "Continue In uses the live session" failed before repair. The route-key regression a_routed_api_key_without_an_endpoint_says_to_change_the_route also failed on rbx before repair. Both pass after repair.
  • Composer destination regression: 1dfac808b2ef82ebb00fd73615eefb37aab2811c. Freestyle's bun test test/model-menu-started-chat-fork.test.tsx -t "the composer excludes same-family forks" failed because Claude (sr) remained offered while Codex was eligible. The same command passes after d63be865d55fca2b82e784e806d427aac0e5001d.
  • Merge conflict regression: the_chief_is_never_the_automatic_default_harness failed before preserving the base's Chief exclusion, then passed alongside this PR's Claude/Codex preference.

Observed / Not run

  • Exact-head rbx: cargo test --locked -p acpmux --lib -- claude_auth::tests default_harness::auto_default_tests turn_errors the_chief_is_never_the_automatic_default_harness: 15 passed, plus rustfmt passed.
  • Freestyle, matching tree d9b71878fcf17a62ced2cf4589b9ed7c0150fc1a: 9 focused menu tests passed, covering mouse/keyboard paths, folded profiles, unavailable destinations, persisted-family reloads and current-model preservation. Command: bun test test/model-menu-started-chat-fork.test.tsx -t "the composer excludes|another profile of|Continue In uses|keyboard-fork|folded family|no other harness". Full bun run check and scripts/web-lint.sh passed, exit 0. Formatting passed over 3,561 files; lint found zero warnings/errors; type checking passed over 3,470 files; generated protocol code is current. The wrapper passed in 83.1 seconds on the 8GB VM with GOMEMLIMIT=2GiB GOMAXPROCS=2.
  • Exact-head Release compile receipt passed (job 29d494be5bdcb4f30294e3ab, recipe 2, release-onone). This establishes SwiftPM Release frontend/link compilation, not native test execution or GUI dogfood.
  • Exact-head native fleet step a8760dd9da62e82a55863a84: scripts/ci/package-test-lane.sh suite Packages/macOS/CmuxNext UpdateFeedCardTests,SidebarTunablesWatchNoopTests passed, exit 0, on aws-m4pro-2 with Xcode 26.6. 8 UpdateFeedCardTests and 2 SidebarTunablesWatchNoopTests executed and passed. This compiles the native test bundle and exercises the selected suites; it does not claim the entire App suite.
  • Current-head web CI passed: all four shards, all four base comparisons, React Doctor, Web status and ci-status. The full test/model-menu-started-chat-fork.test.tsx executed and passed. The base comparison reports 0 webview test steps red on this change, 5 red on the base too, across three unrelated files. A separate composer-menu-dismiss file passed on same-SHA isolated retry; the comparison found no remaining head red there.
  • Base finding: the head acpmux job, feat-cmux-next run at d3f317b93cf06cd58f0d43141a9f2685a24d1796 and unrelated branch run all abort with a stack overflow in fork_through::btw::a_codex_side_session_runs_sandboxed_read_only_and_the_adapter_is_refused. The additional first-work assertion passed on same-head isolated retry and merge-parent replay. Classification details.
  • Localization audit: no catalogs changed. The global validator reports inherited translation parity debt (47,325 errors at base f276c9cc8a25b60bf8dd4051b08f71f70690f17c). New daemon recovery prose remains English-only; the scanner does not validate Rust prose.
  • Not run: live Claude credential rejection/replacement against a provider, or tagged native GUI dogfood. Automated tests do not establish live account integration. No heavy builds ran on the local Mac.

No capture: this changes recovery advice, default selection, destination eligibility and notice suppression; it adds no visual layout.

Review

Two independent subagents freshly reviewed all 18 changed files and current merged consumers at 07dfd4ae990624f6fe6b1e7685363f3584130449: correctness first and impact/security. Both returned SHIP with no remaining functional P0–P2 finding. They inspected exact-head Rust results and source identity. Current native and full web checks were pending when reviewed. The localization and live-dogfood limits remain disclosed above.

Changelog

Fixed: Claude sign-in errors explain recovery, new chats prefer Claude, Fork to excludes incompatible profiles, and disabling What's New silences its Feed notice.