cmux NEXT: wait through acpmux socket restarts

Merged
TE
13d ago
+326-295

Problem

During a daemon handoff, acpmux removes its Unix socket before the replacement daemon is ready. The pane treated that short gap as a permanent peer refusal, showed a scary card, and told the person to paste an ACPMUX_SOCKET=… acpmux daemon shutdown command. The compose was already being retried, so the prompt could wait safely.

Change

  • Retry transient “nothing answers on the socket” peer failures for up to three seconds with bounded backoff before surfacing a host error.
  • Keep live-peer refusals actionable without exposing shell commands; the existing Retry path remains the user action.
  • Add localized copy for the two replacement messages and remove the old shell-command catalog entries.
  • Add regression coverage for transient classification, refusal copy, and a prompt surviving a daemon restart mid-compose and being delivered once by the replacement daemon.

The daemon’s existing per-home lock remains the single-owner guard. The open Chief-host handoff work is tracked separately in #23019; this PR covers the agent-pane socket path.

Validation

  • python3 scripts/verify-local.py --only swift-syntax --swift-changed origin/feat-cmux-next — passed.
  • python3 scripts/localization_catalog.py check --root . --catalog Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/Localizable.xcstrings — catalog valid; existing catalog debt remains within baseline.
  • Fleet Swift package test step submitted for the red regression commit 67f15e79ee as job 5f4df74f0d6bc5d084461a1f; it was still queued when this PR was prepared.
  • Native build/test execution is routed to the managed fleet; no local app build was run.
  • No capture: this is a connection-state and copy change; the visual surface is unchanged and the transient restart state is not deterministic in a static capture.

Changelog

Fixed: agent chats wait through a short acpmux restart without losing the compose or asking for a shell command.

Agent session: Air-Blue