CedarCopilot wants to merge 0 commits into staging from feat/slack-channels-entity
Live on prod since Fri, 1 of 16 behaviors working
Evidence snapshot saw 12 prod OTEL spans matching /calendar ActiveViewDisplay since deploy with 0 error spans.
OTEL fallback found no prod spans matching AgendaDocument handleDeleteTask since deploy.
OTEL fallback found no prod spans matching AgendaEventBlock / EventCard sendNoShowPrompt since deploy.
OTEL fallback found no prod spans matching calendar page event click since deploy.
OTEL fallback found no prod spans matching AppShell route change cleanup since deploy.
OTEL fallback found no prod spans matching AppShell ChatColumn since deploy.
Libra has verdicts on 1 of 16 tracked behaviors on prod; 15 are still being checked. Libra checks hourly for 3 days after each deploy.
Three main threads of work, plus polish.
Unibox keyboard parity. The unified feed had no keyboard behaviour at all , useMailNavigation lives in MailList, which isn't mounted there, so j/k/Enter/Escape did nothing on ?channel=all. A new activeListSource on the thread slice declares which ordered list is on screen, so every keyboard action walks the list the user can actually see (the two lists share selectedThreadId / bulkSelected / focusedIndex; the unibox just holds unified ids). Enter routes through the unibox's own opener so a Slack/LinkedIn/WhatsApp row opens its chat rather than a mail thread. Escape now clears the whole selection , focused row, bulk checkboxes, and the ambient conversation that feeds the chat's context badges , instead of only the keyboard cursor, which read as "escape did nothing".
Undo send actually puts the draft back. It used to serialize attachments into localStorage and rewrite the URL. Now the send records where the draft came from (UndoSendRestore) and undo reopens that surface , conversation, thread, or compose session , writing the held-back, un-quoted body onto the draft row via a new restoreUndoneDraft, recreating the row (or the whole thread entry) when the send removed it. A restored reply no longer comes back with the quoted history pasted into it.
Chat context follows the deal you're on. An auto-committed primary conversation is treated as provisional while the chat is still empty and is dropped when you move on (shouldDropProvisionalPrimary); user-attached items are never touched. The context cards now key off the conversation you're actually on rather than whatever the thread was opened with, so they stop going stale on row change. Threads with no conversation get a link prompt instead of a blank panel, and the conversation surface shows a keyboard legend rather than restating Overview / Next steps cards that are already on screen beside it.
Also: agenda Trash removes the row outright (the keyboard Cmd/Ctrl+X path still tombstones); Next steps renders as one card with its booked calls beneath it, matching the chat empty state; channel chats focus the composer on open; landing on the inbox no longer inherits a conversation from wherever you just were; compose sessions stop 400ing on mail.get.
The second commit fixes two failures that predate this work on the branch: a comment inside the backfill's sql `` template quoted slack_threads in backticks, which closed the template literal and made the file unparseable to oxlint, and AppShell gained a useLocation() call whose persistence test still rendered it without a router.
pnpm run autofix:local green on the merged tree , oxlint (--deny-warnings), deps:check, paraglide compile, 1053 Jest tests, 4466 Vitest tests.origin/staging (91 files) and re-validated after pnpm install picked up the new @armature-tech/mcp-analytics dep.unibox-navigation-parity, mail-navigation-escape, undoSendRestore, provisionalPrimaryContext, contextCardsConversation, contextChipLabel.🤖 Generated with Claude Code
This PR substantially expands unified-inbox navigation, undo-send restoration, calendar interactions, chat context behavior, and Slack/LinkedIn backend handling.
The PR should not merge until calendar metadata is isolated from agent instructi
Libra has not measured any production surfaces for this change yet.