Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

A board born with columns, a workspace without the agent's own folders, and a face that blinks

merged#2723CedarCopilot

CedarCopilot wants to merge 10 commits into staging from feat/inbox-client-composed-feed

Live on prod, no production signal yetTimeline and evidence
  1. Opened
    Sep 7, 2026, 4:04 PM
  2. Sep 8, 2026, 9:34 AM
  3. Merged
    Sep 8, 2026, 11:32 AM
  4. Live on prod
    Sep 8, 2026, 11:32 AM
  5. Observed 2 days
    Sep 8, 2026, 11:32 AM
  6. Pipelines steady after this deploy
    Sep 8, 2026, 11:32 AM
  7. Unobserved

    Live on prod, no production signal yet

    Sep 10, 2026, 8:45 PM

Behaviors Libra is checking

Agenda event cards no longer show inline No show or Draft no show email buttons while a meeting is active, leaving the meeting row to open the event and exposing that action through the existing detail and menu surfaces.Inconclusivelow confidence

Verification reached its budget before a verdict.

prod, checked Sep 10, 2026, 6:28 PM
Today's agenda uses one red now indicator that appears as a line in the current gap and morphs into an outline around the meeting when that meeting starts, while the meeting keeps its calendar-colored left border.Inconclusivelow confidence

Reached the query budget without a verdict.

prod, checked Sep 10, 2026, 6:30 PM
Animated avatars use a stable agent-ID-derived phase offset so avatars mounted together do not blink and move in lockstep while the same avatar remains consistent across renders.Inconclusivehigh confidence

AgentAvatar is a client-only behavior and the deployed source computes a deterministic negative phase from agentId, but it emits no expected OTEL span. Since 2026-09-08T18:32:07Z, production telemetry contained 0 matching AgentAvatar/phaseFor/animationDelay spans and 0 matching.

prod, checked Sep 10, 2026, 6:43 PM
Agent avatars can render an idle mood with blinking and occasional eye drift or a thinking mood with eye scanning, a quicker blink cadence, and a subtle body rock while remaining static when mood is none.Inconclusivehigh confidence

Production telemetry since 2026-09-08T18:32:07Z contains no avatar-specific evidence: 0 OTEL spans matched AgentAvatar, AgentFace, avatar routes, or avatar attributes, and 0 CloudWatch log matches covered cedar-agent animation classes or client-rendering errors. General.

prod, checked Sep 10, 2026, 6:44 PM
Agent avatar motion is disabled for users who enable prefers-reduced-motion.Inconclusivelow confidence

Verification reached its budget before a verdict.

prod, checked Sep 10, 2026, 7:43 PM
The Gmail brand icon exposes Gmail as its accessible image name instead of leaving the role=img unlabeled.Inconclusivelow confidence

Verification reached its budget before a verdict.

prod, checked Sep 10, 2026, 7:45 PM

Libra has verdicts on 0 of 8 tracked behaviors on prod; 8 are still being checked. Libra checks hourly for 3 days after each deploy.

Three changes on one branch, each independent.

A board you can shape

A new board arrived as a blank rectangle , the one thing it failed to teach was that it was a kanban. It is now created on a starter axis (Column 1/2/3): placeholder vocabulary that reads as "rename me" rather than Cedar deciding the board is a work ladder. emptyBoardSchema stays what a board reads as, so a failed parse still invents no fields.

The 20rem schema dropdown becomes two controls , the same split as /tasks/kanban:

  • Schema, a modal shaped like an open ticket: title/description beside a rail of typed attributes, the geometry a person already knows from CardDocumentView. Identity writes to documents columns (boards.setInfo); shape writes to the Y.Doc, so an agent's edit merges rather than clobbers and shows live while the dialog is open.
  • Display, the view half alone: which attribute draws the columns, which ones show on the card face. Regrouping writes no card row, which is the whole reason it is a view.

Renaming a column renames the value on every card in it (boards.renameColumnValue) , renaming only the option drew a new empty column beside the old one, still holding every card.

Boards and cards also render in /brain now. A board's content is not its prosemirror fragment, so the prose branch drew an empty editor that wrote prose into the board. Both own their full surface, and the back gutter steps aside for them: at wide widths that invisible ~460px strip lay over the first kanban column, eating clicks and blocking drags.

/brain stops showing the agent's own namespace

user|organisation/agent-… folders are machine-managed , an agent's output/config/memory head, and the routing surface's instruction documents. There is one per agent, so twenty rows reading "Agent 4008f724 71dc…" sat above the first folder the user actually made.

One rule (isBrainWorkspaceDoc) now gates all three readers , the tree's store, the graph, and both halves of the search , so a row one of them hides cannot walk back in through another. The server still lists those folders: the agent workspace walks the same route.

An agent face with two moods

AgentAvatar gains idle (blinks and glances) and thinking (bobs, and blinks on a quicker cadence , a busy face is a more awake one). The timings are measured frame by frame off a reference clip rather than eyeballed, because what makes that motion read as alive is the intervals, not the poses: the body holds perfectly still, the eye pair is rigid and orbits about the point between the eyes, a blink is a ~70ms vertical collapse that reopens ~18% too tall before settling, and every move is followed by real stillness. Amplitudes are sized for the smallest place they run , the 16px rail icon , where a tasteful 2° sway is a third of a pixel and therefore not an animation at all.

The sidebar's chat rows drop TabBotIcon for the agent's own face; the finished-dot overlays whichever icon the row is wearing.

Three red things the branch was already carrying

Not behavioural, but the gate was failing on all three:

  • pathLeaf used filter(Boolean).pop(), which oxlint's prefer-array-find denies. findLast(Boolean) is the same value.
  • getByText('Gmail') began matching two nodes the moment GmailColor was given the <title> its role="img" needs , the glyph and the row label beside it , taking eight AgentConnectionsSection tests with it. An SVG title is an accessible name, not page text, so it is now globally ignored by text queries; reach for it with getByTitle or a role+name query.
  • board's tool description sat ~12 chars under Claude Code's 2048-char truncation, so the starter-axis sentence pushed it 239 over. The fact is now a parenthetical and the icon roster spends spaces instead of interpuncts. 2039.

Test plan

pnpm run autofix:local green on the merge commit: oxlint, deps:check, Jest (429 suites / 4100 tests) and server Vitest (942 files / 11312

Show production surfaces and changed-file mapping

Production surfaces

Libra has not measured any production surfaces for this change yet.

Changed files → surfaces

  • apps/mail/app/globals.cssno production surface mapped
  • apps/mail/components/icons/agent-avatar.tsxno production surface mapped
  • apps/mail/components/icons/icons.tsxno production surface mapped
  • apps/mail/components/providers/hotkey-provider-wrapper.tsxno production surface mapped
  • apps/mail/components/ui/citations/TranscriptViewerModal.tsxno production surface mapped
  • apps/mail/docs/optimistic-files.mdno production surface mapped
  • apps/mail/docs/unified-files-ui.mdno production surface mapped
  • apps/mail/docs/wiki/files-ui.mdno production surface mapped
  • apps/mail/docs/wiki/optimistic-mutations.mdno production surface mapped
  • apps/mail/docs/wiki/unibox-hotkeys.mdno production surface mapped
  • apps/mail/docs/wiki/unified-feed-composition.mdno production surface mapped
  • apps/mail/jest.setup.jsno production surface mapped
  • apps/mail/modules/agentCanvas/components/AgendaCalendarSidebar.tsxno production surface mapped
  • apps/mail/modules/agentCanvas/components/AgendaEventBlock.tsxno production surface mapped
  • apps/mail/modules/agentCanvas/components/AgendaListView.tsxno production surface mapped
  • apps/mail/modules/agentCanvas/components/AgendaMeetings.tsxno production surface mapped
  • apps/mail/modules/agentCanvas/components/CalendarCanvas.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentConversationFilesFolder.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentHeader.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentsGrid.tsxno production surface mapped
  • apps/mail/modules/calendar/store/calendarSlice.tsno production surface mapped
  • apps/mail/modules/canvas/components/ReportCanvasView.tsxno production surface mapped
  • apps/mail/modules/cedar-os/__tests__/chatComponents/ChatContextRow.test.tsxno production surface mapped
  • apps/mail/modules/cedar-os/__tests__/chatComponents/ContextKindIcon.test.tsxno production surface mapped
  • apps/mail/modules/cedar-os/__tests__/chatComponents/ProposedMutationRenderer.test.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/cedar-os-components/chatComponents/AmbientContextChip.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/cedar-os-components/chatComponents/ChatContextRow.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/cedar-os-components/chatComponents/ContextKindIcon.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/cedar-os-components/chatInput/ContextBadgeRow.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/store/messages/renderers/ProposedMutationRenderer.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/store/messages/renderers/describeProposedMutation.tsno production surface mapped
  • apps/mail/modules/company/components/CompanyExplorer.tsxno production surface mapped
  • apps/mail/modules/conversations/components/LeftSidebarContent.tsxno production surface mapped
  • apps/mail/modules/conversations/components/files/AgentFilesGroup.tsxno production surface mapped
  • apps/mail/modules/conversations/components/files/ConversationFileTree.tsxno production surface mapped
  • apps/mail/modules/conversations/components/files/DriveSection.tsxno production surface mapped
  • apps/mail/modules/conversations/components/files/FilesTab.tsxno production surface mapped
  • apps/mail/modules/conversations/components/files/optimistic-files.tsno production surface mapped
  • apps/mail/modules/crm/utils/meeting-display.tsno production surface mapped
  • apps/mail/modules/documents/board/BoardDisplayMenu.tsxno production surface mapped
  • apps/mail/modules/documents/board/BoardDocumentView.tsxno production surface mapped
  • apps/mail/modules/documents/board/BoardSchemaDialog.tsxno production surface mapped
  • apps/mail/modules/documents/board/BoardSchemaMenu.tsxno production surface mapped
  • apps/mail/modules/documents/board/index.tsno production surface mapped
  • apps/mail/modules/documents/board/useYBoard.tsno production surface mapped
  • apps/mail/modules/documents/recording/MeetingRecordingPlayer.tsxno production surface mapped
  • apps/mail/modules/files/chat/newChatArtifact.tsno production surface mapped
  • apps/mail/modules/files/components/FileDataSync.tsxno production surface mapped
  • apps/mail/modules/files/components/list/FileListColumns.tsxno production surface mapped
  • apps/mail/modules/files/components/list/FileListRow.tsxno production surface mapped
  • apps/mail/modules/files/components/list/index.tsno production surface mapped
  • apps/mail/modules/files/components/list/types.tsno production surface mapped
  • apps/mail/modules/files/graph/useGraphData.tsno production surface mapped
  • apps/mail/modules/files/utils/file-presentation.tsno production surface mapped
  • apps/mail/modules/files/utils/workspace-visibility.tsno production surface mapped
  • apps/mail/modules/home/widgets/HomeAgentsWidget.tsxno production surface mapped
  • apps/mail/modules/inbox/hooks/use-channel-hotkey-actions.tsno production surface mapped
  • apps/mail/modules/inbox/hooks/use-inbox-item-actions.tsno production surface mapped
  • apps/mail/modules/inbox/hooks/use-open-channel-item.tsno production surface mapped
  • apps/mail/modules/inbox/lib/hotkey-targets.tsno production surface mapped
  • apps/mail/modules/meetings/detail/MeetingDetailView.tsxno production surface mapped
  • apps/mail/modules/reports/components/ReportsView.tsxno production surface mapped
  • apps/mail/modules/threads/thread/utils/thread-display-hotkeys.tsxno production surface mapped
  • apps/mail/modules/threads/threadList/utils/mail-list-hotkeys.tsxno production surface mapped
  • apps/mail/modules/ux/layout/LayoutUrlSync.tsxno production surface mapped
  • apps/mail/tests/modules/cedar-os/describeProposedMutation.test.tsno production surface mapped
  • apps/mail/tests/modules/conversations/filesTabHarness.tsxno production surface mapped
  • apps/mail/tests/modules/conversations/filesTabOptimistic.test.tsxno production surface mapped
  • apps/mail/tests/modules/conversations/filesTabTree.test.tsxno production surface mapped
  • apps/mail/tests/modules/crm/utils/meeting-display.test.tsno production surface mapped
  • apps/mail/tests/modules/documents/board/BoardDocumentView.empty.test.tsxno production surface mapped
  • apps/mail/tests/modules/documents/board/BoardDocumentView.render.test.tsxno production surface mapped
  • apps/mail/tests/modules/files/brain-explorer.test.tsxno production surface mapped
  • apps/mail/tests/modules/files/list/FileListRow.test.tsxno production surface mapped
  • apps/mail/tests/modules/files/list/file-presentation.test.tsno production surface mapped
  • apps/mail/tests/modules/files/workspaceVisibility.test.tsno production surface mapped
  • apps/mail/tests/modules/inbox/hotkeyTargets.test.tsno production surface mapped
  • apps/mail/tests/modules/inbox/uniboxHotkeys.test.tsxno production surface mapped
  • apps/mail/tests/modules/reports/reportsUndoDelete.test.tsxno production surface mapped
  • apps/mail/tests/modules/thread/pendingComposeAction.test.tsxno production surface mapped
  • apps/mail/tests/modules/ux/layout/agentCloseUrl.test.tsxno production surface mapped
  • apps/server/docs/design/reversible-writes-and-approval.mdno production surface mapped
  • apps/server/docs/wiki/approval-and-reversibility.mdno production surface mapped
  • apps/server/docs/wiki/board-documents.mdno production surface mapped
  • apps/server/docs/wiki/chat-context-provenance.mdno production surface mapped
  • apps/server/docs/wiki/document-deletion-lifecycle.mdno production surface mapped
  • apps/server/package.jsonno production surface mapped
  • apps/server/src/board-admin/cli.tsno production surface mapped
  • apps/server/src/cron/cron-task-registry.tsno production surface mapped
  • apps/server/src/cron/purge-deleted-documents.tsno production surface mapped
  • apps/server/src/db/__tests__/disposable-accounts.tsno production surface mapped
  • apps/server/src/docs/bug-draft-saving-post-deploy-2026-09-05.mdno production surface mapped
  • apps/server/src/lib/__tests__/credentials-encryption.test.tsno production surface mapped
  • apps/server/src/lib/credentials-encryption.tsno production surface mapped
  • apps/server/src/lib/driver/__tests__/provider-draft-id.test.tsno production surface mapped
  • apps/server/src/lib/driver/provider-draft-id.tsno production surface mapped
  • apps/server/src/mastra/context/values.tsno production surface mapped
  • apps/server/src/mastra/tools/__tests__/master-surface.test.tsno production surface mapped
  • apps/server/src/mastra/tools/document/__tests__/documentTool.delete.integration.test.tsno production surface mapped
  • apps/server/src/mastra/tools/document/__tests__/documentTool.test.tsno production surface mapped
  • apps/server/src/mastra/tools/document/boardTool.tsno production surface mapped
  • apps/server/src/mastra/tools/document/documentTool.tsno production surface mapped
  • apps/server/src/mastra/tools/master-surface.tsno production surface mapped
  • apps/server/src/mastra/tools/task/__tests__/listTasksTool.draft-fetch.test.tsno production surface mapped
  • apps/server/src/mastra/tools/task/listTasksTool.tsno production surface mapped
  • apps/server/src/mastra/utils/__tests__/approval.test.tsno production surface mapped
  • apps/server/src/mastra/utils/__tests__/chat-message-persistence.test.tsno production surface mapped
  • apps/server/src/mastra/utils/approval-policy.tsno production surface mapped
  • apps/server/src/mastra/utils/approval.tsno production surface mapped
  • apps/server/src/mastra/utils/chat-message-persistence.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/chat-workflow.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/request-context.tsno production surface mapped
  • apps/server/src/scripts/document-lifecycle.tsno production surface mapped
  • apps/server/src/scripts/purge-deleted-documents.tsno production surface mapped
  • apps/server/src/services/chat/conversation-visibility.integration.test.tsno production surface mapped
  • apps/server/src/services/chat/conversation-visibility.test.tsno production surface mapped
  • apps/server/src/services/chat/conversation-visibility.tsno production surface mapped
  • apps/server/src/services/documents/__tests__/purge-deleted-documents.test.tsno production surface mapped
  • apps/server/src/services/documents/__tests__/soft-delete.test.tsno production surface mapped
  • apps/server/src/services/documents/board/__tests__/board-field-patch.test.tsno production surface mapped
  • apps/server/src/services/documents/board/__tests__/board-view.test.tsno production surface mapped
  • apps/server/src/services/documents/board/board-ops.tsno production surface mapped
  • apps/server/src/services/documents/board/board-types.tsno production surface mapped
  • apps/server/src/services/documents/index.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/__tests__/circleback-mcp.test.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/circleback.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/recording-url.tsno production surface mapped
  • apps/server/src/services/playbook/subagents.tsno production surface mapped
  • apps/server/src/services/playbook/write-document-guarded.tsno production surface mapped
  • apps/server/src/trpc/routes/admin-boards.tsno production surface mapped
  • apps/server/src/trpc/routes/boards.tsno production surface mapped
  • apps/server/src/trpc/routes/chat.tsno production surface mapped
  • apps/server/src/trpc/routes/documents.tsno production surface mapped
  • aws/lib/stacks/app-stack.tsno production surface mapped