Say Thinking on the Plans tab while the planning model works on an ask

Merged
CH
18d ago
+834-81

During a planning call the status row said "Listening" the whole time the planning model was working, so a silent Luke looked idle. The Mac couldn't know better: the run lives in the hosted exchange, and only session.spoken and plan.draft came down.

The voice service now sends a plan.busy frame on a planning call when an accepted ask opens an exchange, and again when the exchange is finalized or the session ends. A desk call sends nothing. The holder passes on only frames about the standing call's plan, and says not busy itself when the call ends. compose-planning stamps busySince on the planning view with the host clock and clears it on leave, switch, or call end. While listening or muted, the row reads "Thinking" with the dots, then "Still thinking · m:ss" after 10s. Speaking, connecting, and closing keep their own word.

The planning fixture's open plan is now busy for 14s, so the evidence capture should read "Still thinking · 0:14". A new golden, live-contract-planBusyFrameSchema.json, records the frame's schema; no existing golden changed. iOS decodes the frame as unreadable, as it does plan.draft.

Known gap: if the device socket drops and re-attaches mid run, the row reads Listening until the next ask.

CI could not verify this. It's a Mac UI change and CI builds nothing for the Mac. It hasn't had a ./scripts/verify.sh run yet. ./scripts/check.sh is green.

Independent of the repository_read voice note (the PR beside this one); they merge in either order.

🤖 Generated with Claude Code


Open workspace in Conductor