acpmux: a saved model or effort pick reaches open New Tab pages
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 newa_saved_pick_is_announced_to_watchers_so_open_pages_read_the_new_startfailed 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-nextc25d784 with #21677, #21685, #21688, #21733 and #21729 merged locally (acpmux swapped in from that tree, since this host can't buildcmux-tuiwithout 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 noharnesses_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