Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

feat(calendar,inbox,tasks,ui): real Zoom meetings, per-user 2FA policy, and one panel system

merged#2652CedarCopilot

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

Live on prod, no production signal yetTimeline and evidence
  1. Opened
    Sep 2, 2026, 12:02 AM
  2. Sep 2, 2026, 12:21 AM
  3. Merged
    Sep 2, 2026, 12:31 AM
  4. Live on prod
    Sep 2, 2026, 12:31 AM
  5. Observed 0 hours
    Sep 2, 2026, 12:31 AM
  6. Unobserved

    Live on prod, no production signal yet

    Sep 2, 2026, 12:31 AM
  7. Pipelines steady after this deploy
    Sep 2, 2026, 12:31 AM

Behaviors Libra is checking

AOP context behavior from db/aop-schema.ts keeps working in prod.Not checked
prod
Authentication and access behavior from lib/auth.ts, two-factor/session-verification.ts, conferencing/zoom-oauth-driver.ts keeps working in prod.Not checked
prod
Calendar sync behavior from components/CalendarView.tsx, components/DayColumn.tsx, components/DraggableCalendarEvent.tsx keeps working in prod.Not checked
prod
Chat workflow behavior from chat/apply-overrides.ts, routes/chat.ts keeps working in prod.Not checked
prod
CRM integration behavior from crm/index.ts, crm/crm-table-preview.tsx, crm/simple-crm.tsx keeps working in prod.Not checked
prod
Data model behavior from migrations/two_factor_one_row_per_user.sql, migrations/two_factor_policy_columns.sql, db/schema.ts keeps working in prod.Not checked
prod

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.

Summary

A large branch that lands five threads of work. The through-line is surfaces that were lying , a picker that offered a conference Google would never create, a tab that reported "No slack messages" over a live mirror, a breadcrumb whose last crumb quietly dropped its link.

Zoom conferencing, for real. Cedar could not ask Google to put a Zoom link on an event: conferenceData.createRequest only creates the solutions a calendar reports in allowedConferenceSolutionTypes, and every calendar probed reports exactly ["hangoutsMeet"]. So Cedar now holds a per-user Zoom OAuth token, mints the meeting through Zoom's own API, and writes the join details onto the event. The driver implements McpOAuthDriver deliberately , Zoom rotates its refresh token on every refresh and kills the old one, so the single-flight coalescing in mcp-token-refresh.ts is load-bearing, not a convenience. ZoomConnectDialog owns the consent detour so one click on "Add Zoom" still ends with Zoom on the event. See apps/server/docs/zoom-conferencing.md.

2FA policy moves from an env var onto the user row. TWO_FACTOR_REQUIRED_USER_IDS made a per-customer security setting a property of the deployment: changing one user's policy meant a redeploy, no admin surface could read it, nothing recorded who changed it. It is user data, so it lives on the user, with twoFactor.setPolicy as a staff-only write path that revokes sessions so the change binds immediately rather than sitting behind the session cookie cache. Adds a re-verification interval, and a unique index on two_factor(user_id) , prod had drifted to two secrets for one account, which is silently unrecoverable for whoever it happens to.

One channel filter that composes. A Gmail-query tab resolves to email alone, so narrowing it further by an explicit slack badge produced an empty intersection and rendered "No slack messages." over 38 of them. Important/Other are now correctly not mail-only , they re-slice the whole inbox by attention, not by subject , and an unanswerable badge resolves to all rather than a dead end.

One panel geometry, one breadcrumb, one form kit. Measurements taken off Linear with getComputedStyle and written down in apps/mail/docs/crystallized.md. Plus a Linear-style new-task modal, server-side file search, and SharePoint/OneDrive link classification.

Review fixes in this PR

A pre-merge review found four issues, all fixed here:

  • Breadcrumb silently discarded a destination. It decided "you are here" positionally, rendering the last crumb as an inert span and dropping any href. A task's bar is Tasks / <lane> above the task's own title , the h1 below is the page and the lane is somewhere to go , so its link was dead markup. The current crumb is now the last one with nowhere to go, which every other call site already is.
  • modifyCalendarEventTool booked every AI-updated Zoom meeting as 60 minutes , it passed a start time but no duration, and Zoom silently defaults. A 25-minute event held an hour on the host's own account.
  • schema.ts drifted from the applied DDL , two_factor_required lacked .notNull() while the migration (verified applied against the live DB) writes NOT NULL.
  • HomeAgentsWidget cast an already-typed tRPC result , the redundant-cast shape that took down the home rail once before.

Also deleted the dead uuid imports and requestId helper the Zoom refactor orphaned.

Migrations

Both are additive and already applied, verified against the live database:

  • two_factor_policy_columns.sql , ADD COLUMN IF NOT EXISTS for two_factor_required / two_factor_reverify_hours
  • two_factor_one_row_per_user.sql , dedupe (keeping the verified row) then CREATE UNIQUE INDEX IF NOT EXISTS

Servers on the old code keep working; they simply never read the columns.

Test plan

  • pnpm run autofix:local green , oxlint --deny-warnings, deps:check (1721 modules, no violations), 3829
Show production surfaces and changed-file mapping

Production surfaces

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

Changed files → surfaces

  • .claude/skills/frontend-design/SKILL.mdno production surface mapped
  • CLAUDE.mdno production surface mapped
  • apps/mail/app/(full-width)/home/demos.tsxno production surface mapped
  • apps/mail/app/(full-width)/onboarding-login/page.tsxno production surface mapped
  • apps/mail/app/(full-width)/onboarding-setup/page.tsxno production surface mapped
  • apps/mail/app/(full-width)/onboarding/page.tsxno production surface mapped
  • apps/mail/app/(routes)/playground/components/IntegrationsTabContent.tsxno production surface mapped
  • apps/mail/app/(routes)/settings/connections/page.tsxno production surface mapped
  • apps/mail/app/globals.cssno production surface mapped
  • apps/mail/app/page.tsxno production surface mapped
  • apps/mail/app/routes.tsno production surface mapped
  • apps/mail/components/icons/agent-avatar.tsxno production surface mapped
  • apps/mail/components/icons/animated/agent-avatars.tsxno production surface mapped
  • apps/mail/components/ui/alert-dialog.tsxno production surface mapped
  • apps/mail/components/ui/breadcrumb.tsxno production surface mapped
  • apps/mail/components/ui/dialog.tsxno production surface mapped
  • apps/mail/components/ui/dropdown-menu.tsxno production surface mapped
  • apps/mail/components/ui/field.tsxno production surface mapped
  • apps/mail/components/ui/nav-user.tsxno production surface mapped
  • apps/mail/components/ui/option-picker.tsxno production surface mapped
  • apps/mail/components/ui/popover.tsxno production surface mapped
  • apps/mail/components/ui/select.tsxno production surface mapped
  • apps/mail/components/ui/settings.tsxno production surface mapped
  • apps/mail/docs/agent-workspace.mdno production surface mapped
  • apps/mail/docs/bug-inbox-channel-filter-empty.mdno production surface mapped
  • apps/mail/docs/crystallized.mdno production surface mapped
  • apps/mail/docs/daily-agenda-templates.mdno production surface mapped
  • apps/mail/docs/home-widget-rail.mdno production surface mapped
  • apps/mail/docs/new-task-modal-linear-spec.mdno production surface mapped
  • apps/mail/docs/onboarding-setup-flow.mdno production surface mapped
  • apps/mail/docs/wiki/files-ui.mdno production surface mapped
  • apps/mail/docs/wiki/meetings-tab.mdno production surface mapped
  • apps/mail/hooks/use-debounce.tsno production surface mapped
  • apps/mail/hooks/use-host-routing.tsno production surface mapped
  • apps/mail/jest.setup.jsno production surface mapped
  • apps/mail/lib/marketing-host.tsno production surface mapped
  • apps/mail/modules/agents/components/AgentBackGutter.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentConfigPage.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentFamilyConnectDialog.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentHeader.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentOutputTab.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentView.tsxno production surface mapped
  • apps/mail/modules/agents/components/AgentsGrid.tsxno production surface mapped
  • apps/mail/modules/agents/utils/agent-avatar.tsno production surface mapped
  • apps/mail/modules/brain/components/BrainHero.tsxno production surface mapped
  • apps/mail/modules/brain/components/PlaybookFileTree.tsxno production surface mapped
  • apps/mail/modules/calendar/components/CalendarView.tsxno production surface mapped
  • apps/mail/modules/calendar/components/DayColumn.tsxno production surface mapped
  • apps/mail/modules/calendar/components/DraggableCalendarEvent.tsxno production surface mapped
  • apps/mail/modules/calendar/components/EventComposerForm.tsxno production surface mapped
  • apps/mail/modules/calendar/components/EventComposerPopover.tsxno production surface mapped
  • apps/mail/modules/calendar/components/EventDetailsPopover.tsxno production surface mapped
  • apps/mail/modules/calendar/components/ZoomConnectDialog.tsxno production surface mapped
  • apps/mail/modules/calendar/hooks/use-conferencing.tsno production surface mapped
  • apps/mail/modules/calendar/store/calendarSlice.tsno production surface mapped
  • apps/mail/modules/calendar/types/calendar-types.tsno production surface mapped
  • apps/mail/modules/calendar/utils/conferencing.tsno production surface mapped
  • apps/mail/modules/calendar/utils/draftEvent.tsno production surface mapped
  • apps/mail/modules/calendar/utils/dragDebug.tsno production surface mapped
  • apps/mail/modules/canvas/components/CardListCanvasView.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/store/messages/renderers/ProposedCalendarEventRenderer.tsxno production surface mapped
  • apps/mail/modules/company/components/CompanyExplorer.tsxno production surface mapped
  • apps/mail/modules/conversations/components/ConversationBackGutter.tsxno production surface mapped
  • apps/mail/modules/conversations/components/ConversationBreadcrumb.tsxno production surface mapped
  • apps/mail/modules/conversations/components/ConversationScrollArea.tsxno production surface mapped
  • apps/mail/modules/conversations/components/LeftSidebarContent.tsxno production surface mapped
  • apps/mail/modules/conversations/components/rail-primitives.tsxno production surface mapped
  • apps/mail/modules/crm/index.tsno production surface mapped
  • apps/mail/modules/documents/table/TableColumnMenu.tsxno production surface mapped
  • apps/mail/modules/files/components/FileExplorerTabs.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/FileRowMenu.tsxno production surface mapped
  • apps/mail/modules/files/components/list/FileTypeIcon.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/home/widgets/AgentPickerDialog.tsxno production surface mapped
  • apps/mail/modules/home/widgets/HomeAgentsWidget.tsxno production surface mapped
  • apps/mail/modules/inbox/components/ChannelSelector.tsxno production surface mapped
  • apps/mail/modules/inbox/lib/channel-availability.tsno production surface mapped
  • apps/mail/modules/integrations/channel-sync-health-panel.tsxno production surface mapped
  • apps/mail/modules/integrations/slack-integration-card.tsxno production surface mapped
  • apps/mail/modules/onboarding/components/crm/crm-table-preview.tsxno production surface mapped
  • apps/mail/modules/onboarding/components/crm/simple-crm.tsxno production surface mapped
  • apps/mail/modules/onboarding/components/onboarding.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/SetupFlow.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/components/SettingRow.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/components/SetupComplete.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/components/SetupRail.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/components/SplitTemplateGallery.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/constants.tsno production surface mapped
  • apps/mail/modules/onboarding/setup/hooks/use-setup-connect.tsno production surface mapped
  • apps/mail/modules/onboarding/setup/hooks/use-setup-splits.tsno production surface mapped
  • apps/mail/modules/onboarding/setup/index.tsno production surface mapped
  • apps/mail/modules/onboarding/setup/steps/ConnectStep.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/steps/InboxDisplayStep.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/steps/LiveInboxStep.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/steps/PipelineStep.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/steps/SubInboxStep.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/steps/TasksStep.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/steps/WelcomeStep.tsxno production surface mapped
  • apps/mail/modules/onboarding/setup/steps/index.tsno production surface mapped
  • apps/mail/modules/onboarding/setup/types.tsno production surface mapped
  • apps/mail/modules/onboarding/templates/README.mdno production surface mapped
  • apps/mail/modules/onboarding/templates/TemplatesPage.tsxno production surface mapped
  • apps/mail/modules/onboarding/templates/template-fixtures.tsno production surface mapped
  • apps/mail/modules/onboarding/templates/template-utils.tsxno production surface mapped
  • apps/mail/modules/threads/components/SplitInboxTabs.tsxno production surface mapped
  • apps/mail/modules/threads/components/SplitTemplateCard.tsxno production surface mapped
  • apps/mail/modules/threads/mail.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/NewTaskCard.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/NewTaskDialog.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/TaskCommandBar.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/TaskFilterMenu.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/TaskKanbanBoard.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/TaskKanbanCard.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/TaskListView.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/TaskTicketView.tsxno production surface mapped
  • apps/mail/modules/userTasks/components/TasksToolbar.tsxno production surface mapped
  • apps/mail/modules/userTasks/hooks/use-day-boundary.tsno production surface mapped
  • apps/mail/modules/userTasks/hooks/use-task-group-buckets.tsno production surface mapped
  • apps/mail/modules/userTasks/hooks/use-task-list-hotkeys.tsno production surface mapped
  • apps/mail/modules/userTasks/hooks/use-task-list-view-options.tsno production surface mapped
  • apps/mail/modules/userTasks/utils/task-order.tsno production surface mapped
  • apps/mail/tests/app/root-signed-out-host-redirect.test.tsno production surface mapped
  • apps/mail/tests/modules/calendar/conferencing.test.tsno production surface mapped
  • apps/mail/tests/modules/calendar/draftEvent.test.tsno production surface mapped
  • apps/mail/tests/modules/calendar/eventComposerPopoverDismiss.test.tsxno production surface mapped
  • apps/mail/tests/modules/calendar/zoomConnectDialog.test.tsxno production surface mapped
  • apps/mail/tests/modules/company/createNodePopoverBoard.test.tsxno production surface mapped
  • apps/mail/tests/modules/files/brain-explorer.test.tsxno production surface mapped
  • apps/mail/tests/modules/inbox/channelFilterAvailability.test.tsxno production surface mapped
  • apps/mail/tests/modules/onboarding/setupRail.test.tsxno production surface mapped
  • apps/mail/tests/modules/onboarding/setupSteps.test.tsno production surface mapped
  • apps/mail/tests/modules/userTasks/dayBoundary.test.tsno production surface mapped
  • apps/mail/tests/modules/userTasks/dealPickerScope.test.tsno production surface mapped
  • apps/mail/tests/modules/userTasks/taskOrder.test.tsno production surface mapped
  • apps/mail/tests/modules/userTasks/taskViewOptionsStability.test.tsxno production surface mapped
  • apps/server/docs/zoom-conferencing.mdno production surface mapped
  • apps/server/scripts/dev-api-only.mjsno production surface mapped
  • apps/server/src/cli/__tests__/task-groups.test.tsno production surface mapped
  • apps/server/src/cli/task-groups.tsno production surface mapped
  • apps/server/src/db/aop-schema.tsno production surface mapped
  • apps/server/src/db/migrations/two_factor_one_row_per_user.sqlno production surface mapped
  • apps/server/src/db/migrations/two_factor_policy_columns.sqlno production surface mapped
  • apps/server/src/db/schema.tsno production surface mapped
  • apps/server/src/env.tsno production surface mapped
  • apps/server/src/http/app.tsno production surface mapped
  • apps/server/src/lib/auth.tsno production surface mapped
  • apps/server/src/lib/two-factor/README.mdno production surface mapped
  • apps/server/src/lib/two-factor/__tests__/policy.test.tsno production surface mapped
  • apps/server/src/lib/two-factor/policy.tsno production surface mapped
  • apps/server/src/lib/two-factor/session-verification.tsno production surface mapped
  • apps/server/src/mastra/tools/calendar/modifyCalendarEventTool.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/apply-overrides.tsno production surface mapped
  • apps/server/src/services/calendar/__tests__/attach-conference.test.tsno production surface mapped
  • apps/server/src/services/calendar/__tests__/create-calendar-event-from-proposal.test.tsno production surface mapped
  • apps/server/src/services/calendar/attach-conference.tsno production surface mapped
  • apps/server/src/services/calendar/create-calendar-event-from-proposal.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/shared-links.test.tsno production surface mapped
  • apps/server/src/services/crm/shared-links.tsno production surface mapped
  • apps/server/src/services/deliverability/open-tracking-v2.mdno production surface mapped
  • apps/server/src/services/file-system/index.tsno production surface mapped
  • apps/server/src/services/file-system/uploads/extraction.tsno production surface mapped
  • apps/server/src/services/integrations/__tests__/oauth-redirect-uri.test.tsno production surface mapped
  • apps/server/src/services/integrations/conferencing/provider-ids.tsno production surface mapped
  • apps/server/src/services/integrations/conferencing/zoom-meetings.tsno production surface mapped
  • apps/server/src/services/integrations/conferencing/zoom-oauth-driver.tsno production surface mapped
  • apps/server/src/services/integrations/connections.tsno production surface mapped
  • apps/server/src/services/integrations/constants.tsno production surface mapped
  • apps/server/src/services/integrations/mcp/index.tsno production surface mapped
  • apps/server/src/services/mail/attachments/__tests__/load-email-attachment.test.tsno production surface mapped
  • apps/server/src/services/mail/attachments/load-email-attachment.tsno production surface mapped
  • apps/server/src/services/mail/inboxes/__tests__/system-split-feed-scope.test.tsno production surface mapped
  • apps/server/src/services/mail/inboxes/inbox-definitions.tsno production surface mapped
  • apps/server/src/trpc/index.tsno production surface mapped
  • apps/server/src/trpc/routes/__tests__/calendar-conference-types.test.tsno production surface mapped
  • apps/server/src/trpc/routes/calendar.tsno production surface mapped
  • apps/server/src/trpc/routes/chat.tsno production surface mapped
  • apps/server/src/trpc/routes/conferencing.tsno production surface mapped
  • apps/server/src/trpc/routes/crm.tsno production surface mapped
  • apps/server/src/trpc/routes/files.tsno production surface mapped
  • apps/server/src/trpc/routes/integrations.tsno production surface mapped
  • apps/server/src/trpc/routes/two-factor.tsno production surface mapped
  • apps/server/src/trpc/routes/user-tasks.tsno production surface mapped
  • aws/docs/marketing-domain-split.mdno production surface mapped
  • docs/customer-feedback/2026-08-30-customer-feedback-audit.mdno production surface mapped