acpmux: a saved model or effort pick reaches open New Tab pages

Merged
TE
19d ago
+56-2

Pick Haiku 5.5 · Low in a chat, then press Cmd-T: the New Tab's reasoning chip says Medium, and the chat it starts runs on Low. The chip changes after the chat opens, and until then it shows a level the chat won't use.

acpmux saves a pick as the harness's new start default (note_pick, config.json defaults), so _acpmux/harnesses start becomes {haiku, low}. But nothing tells open pages. A prewarmed New Tab spare fetched the catalog at launch, when start was {opus, medium}, and keeps drawing that until it gets a reason to re-read. The model chip looked right only because it reads the page's own lastPick.

note_pick now sends _acpmux/harnesses_changed after it saves something new, as a saved mode pick already sends start_mode_changed. Pages already re-read the catalog on that notice (catalog.ts followHarnessChanges). A pick that saves nothing new sends nothing.

Found in a click-through pass on cmux16 (tagged build of feat-cmux-next c25d784): the wire log showed the spare's first _acpmux/harnesses reply with start.effort: "medium", and the new session got effort: low.

Verification

  • cargo test -p acpmux --test start_defaults: the new a_saved_pick_is_announced_to_watchers_so_open_pages_read_the_new_start failed on f4a64963c9d (no notice) and passes with the fix; all 9 tests pass.
  • cargo test -p acpmux --test start_mode --test harnesses_changed --test harness_admin_rpc --test harness_startup: pass.
  • cargo clippy -p acpmux --all-targets --locked -- -D warnings: clean.
  • All on macOS (cmux16), toolchain 1.95.0.
  • Live: On cmux16, a tagged build of feat-cmux-next c25d784 with #21677, #21685, #21688, #21733 and #21729 merged locally (acpmux swapped in from that tree, since this host can't build cmux-tui without zig): scripts/cmux-next/clickthrough-live.py (#21729) passes "a New Tab after a pick names the pick from its first frame". Without this acpmux the same check failed twice, Medium where the pick was Low, and the New Tab's wire log showed no harnesses_changed.

Changelog

Fixed: a New Tab's reasoning chip names the level the chat will start on after you pick one in another chat.

🤖 Generated with Claude Code