fix(acpmux): open remote launches in local sidebar groups

Merged
TE
11d ago
+285-28

Remote grouped launches were rejected before session creation. This lets acpmux new --host H --group G use the returned mirrored session ID with the existing local cmux agent open path. It also accepts an unnamed launch, so acpmux new --host H -m codex --group "Remote demo" -d "say hi" works without an extra naming flag.

Leo: "this + more i was talking to workspace-218 i wanted them to help work on ergonomics too" and "these issues and such all need to be addressed".

  • The workspace/group is created on the invoking Mac; the agent remains on the peer. No Swift changes are needed: the existing workspace action accepts the mirrored ID without a peer-host lookup.
  • Named --reuse retains the stable workspace key. Unnamed launches deliberately create a new session each time and omit the optional workspace name, so equal generated names on different peers cannot trigger title-based predecessor-row reuse.
  • Sidebar failures retain the running session and print a shell-quoted retry command, including when cmux cannot be started.
  • Both requested docs are updated, together with the launcher surface guide.
  • Generic agent.openSessionTab --host support already landed in #25027. Added a regression for both CLI spellings; no duplicate Swift fix.
  • Read #24581 first. It adds independent label/empty-group guards in the same launcher and surface-doc files; this PR does not copy or remove those additions and does not touch its branch. Reconcile that overlap before landing.
  • For lane-place, the simplest correct integration is to omit --group in the remote create and open the returned ID on the controller Mac afterward. That avoids a reverse callback and controller credentials on the execution host. The lane-place owner is fanout-infra; its implementation is not changed by this PR.

Risk: a CLI and app pointed at different local acpmux daemons cannot resolve the same mirrored ID. Documentation names that prerequisite. Opening the workspace may move focus: the area owner's cosmic-gray check returned focused:true; the focuses=false metadata drift is owned by ergo-help.

Live check (area owner, cosmic-gray, current NIGHTLY): cmux agent open <mirrored id of gcp-codex-lane-2/demo-remote-gcp-codex-lane-2> --name … --key … --group 'Remote demo' created the group 'Remote demo' and the workspace joined it; screenshot pending (screen locked).

Validation:

  • Area-owner fleet Linux run at b449447e52f54ff9c6352b752be3496eb6765015: the 168 CLI tests passed; remote_group_cli failed because its fake harness had no reviewed asking mode. Head 8692e30d2d1336845dc8dbaf82fef3ff0e100f17 configures webAskingModes for fake as normal and strict, matching remote_new_hints. Fleet rerun is pending with the area owner. Static prepush gate and git diff --check pass.
  • Independent review found that unnamed sessions with the same generated name on different peers could share a row. Fixed by omitting the optional workspace name for unnamed launches; a regression with two peer hubs covers the collision.
  • Replacement head: git diff --check and python3 scripts/cmux-next/prepush-gate.py passed. ./scripts/localize-changes --base origin/feat-cmux-next found zero changed translation keys; its global validator failed on existing catalog debt (43,243 parity errors).
  • rustfmt on changed Rust files; git diff --check: pass.
  • python3 scripts/cmux-next/prepush-gate.py on committed head: pass, no new violations.
  • Prior-session validation before the replacement changes: python3 scripts/verify-local.py passed all selected checks except existing localization debt; no localization files changed.
  • Added a CLI regression with a controller and two peers covering unnamed launches with matching generated names, remote ownership, local opening by ID, and stable arguments on named reuse. Added launcher and generic-action argument regressions.
  • On replacement head b449447e52f54ff9c6352b752be3496eb6765015, cmux-ci test -- cargo test --manifest-path cmux-tui/Cargo.toml -p acpmux --test remote_group_cli was blocked before dispatch: the guarded HQ installer could not authenticate the private HQ remote. No tests ran.
  • HQ reads are denied by the lane broker; cached HQ lacks docs/remote-acpmux.md. reach has no registry origin for this lane. cmux-ci capture needs the unavailable HQ checkout. No screenshots claimed.
  • glaeda-gh service is absent and its supported restart failed. pr-overlap was attempted but could not read through the tokenless broker; bounded broker searches found #24581 and the already-merged #25027.
  • Independent Codex gpt-6.1-sol xhigh review of fixture repair head 8692e30d2d1336845dc8dbaf82fef3ff0e100f17: SHIP, no correctness findings (review session 01a17641-7313-7b22-b3ac-c34906f8e78a). It verified the remote-start gate and fake-agent modes against the peer fixtures; fleet rerun remains pending. The parent had a full correctness review.

Review (gpt-6.1-sol xhigh): SHIP at 8692e30d2d1336845dc8dbaf82fef3ff0e100f17

Changelog

  • Fixed: remote acpmux launches can open a workspace in a local sidebar group.

Agent session: gcp-codex-lane-10