canvas-types.tsfix(mail): stop a list load selecting a deal, and rename the Status label to Stage
A fresh /agent chat came up bound to whatever deal sorted first. setCurrentConversationList
auto-selected conversations[0] into activeConversationId, which on the chat surfaces is not a
row highlight but the CHAT'S CONTEXT — useRouteChatThread writes it onto the thread's
selectedArtifact and the attach effect commits it as primaryConversation. So the Top Deals tile
finishing its load put a deal nobody opened into a brand-new chat's chip row and into what the
agent was told. Loading a list now selects nothing; j/k is unaffected (focusedIndex starts null,
so the first press still resolves to row 0 — and no longer skips it).
CardListCanvasView also claimed the global currentConversationList and read it back to render.
useCanvasConversations gains syncCurrentList and returns the ordered list, so a tile that merely
displays deals no longer repoints the app's shared selection state. That leaves nothing writing
that list on /agent.
Rename the deal status field's LABEL to "Stage" everywhere it shows (the filter builder, table
header, group-by, kanban, profile, onboarding preview). Reported on Vooma's onboarding: "these
are stages, not statuses — status is like open and closed." Column id stays `status`;
statusOverview keeps its name, being a prose summary rather than the stage enum.
Add mod+N for a new chat, sharing one implementation with the chat header's button so the two
cannot drift, plus a row in the hotkey bar. The desktop File menu had CmdOrCtrl+N on Compose,
which the main process consumes before the page sees it — moved to CmdOrCtrl+Shift+N. A plain
browser tab reserves the key and will never dispatch it.
Co-Authored-By: Claude Opus 5 (1M context) <<email>>Aug 17, 2026, 11:06 PM