conversation-columns.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