Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

merging to main

merged#2612CedarCopilot

CedarCopilot wants to merge 1 commit into main from staging

Live on prod, no production signal yetTimeline and evidence
  1. Opened
    Aug 27, 2026, 11:24 PM
  2. Aug 27, 2026, 11:30 PM
  3. Live on prod
    Aug 27, 2026, 11:34 PM
  4. Observed 3 days
    Aug 27, 2026, 11:34 PM
  5. Pipelines steady after this deploy
    Aug 27, 2026, 11:34 PM
  6. Merged
    Aug 27, 2026, 11:34 PM
  7. Unobserved

    Live on prod, no production signal yet

    Aug 30, 2026, 11:22 PM

Behaviors Libra is checking

If an active artifact has an unsupported kind or cannot be resolved, the hidden page must show a recoverable error message with a Go back action instead of a blank screen.Inconclusivelow confidence

OTEL fallback found no prod spans matching ActiveViewDisplay ArtifactDeadEnd since deploy.

prod, checked Aug 30, 2026, 10:22 PM
The channel chat view and its Slack mention/reaction dependencies must be loaded only when a channel chat is actually opened.Inconclusivelow confidence

OTEL fallback found no prod spans matching ActiveViewDisplay channelChat lazy import since deploy.

prod, checked Aug 30, 2026, 11:22 PM
Slack, LinkedIn, and WhatsApp channel artifacts must open as channel chats from any surface using the shared artifact resolver rather than depending on an inbox feed row or Slack-only state.Inconclusivelow confidence

Verification reached its 130s outer budget before the verifier returned. Libra is keeping this intent verifying until the next check.

prod, checked Aug 28, 2026, 3:46 PM
Opening a task artifact must render its task ticket using the artifact id rather than requiring a separate task selection field.Inconclusivelow confidence

Verification reached its 120s wall-clock budget before a tied verdict. Libra is keeping this intent verifying until the next check.

prod, checked Aug 28, 2026, 3:48 PM
Opening an email thread from a mention, context action, or artifact reference must render the thread identified by the selected artifact even when selectedThreadId is unset.Inconclusivelow confidence

Verification reached its 120s wall-clock budget before a tied verdict. Libra is keeping this intent verifying until the next check.

prod, checked Aug 28, 2026, 3:59 PM
Calendar event chips and drag previews must stop 8px before the right edge of the day column, preserving a clickable and draggable busy-time gutter even for the rightmost lane.Inconclusivehigh confidence

No production telemetry is emitted by the client-side DayColumn or DraggableCalendarEvent rendering/geometry paths: the targeted query found 0 matching spans since 2026-08-28T06:34:11Z. Calendar backend activity was present (process_calendar_event_sync_only: 906 successes, 9.

prod, checked Aug 28, 2026, 4:00 PM

Failures attributed to this change

error @ GET /<redacted-token>/177664932.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 27, 2026, 11:44 PM
error @ GET /<redacted-token>/<id>.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 28, 2026, 1:31 AM
error @ GET /<redacted-token>/<id>.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 28, 2026, 1:31 AM
error @ GET /<redacted-token>/130214155.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 28, 2026, 11:16 AM
error @ GET /<redacted-token>/<id>.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 28, 2026, 11:34 AM
error @ GET /<redacted-token>/<id>.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 28, 2026, 11:34 AM
error @ GET /<redacted-token>/7083785.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 28, 2026, 4:20 PM
error @ GET /<redacted-token>/<id>.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 28, 2026, 11:34 PM
error @ GET /<redacted-token>/<id>.jsonIntroducedmedium confidence

unknown

prod, first seen Aug 29, 2026, 3:03 PM

Libra has verdicts on 0 of 14 tracked behaviors on prod; 14 are still being checked. Libra attributed 9 failures to this change at medium confidence and is still confirming them. Libra checks hourly for 3 days after each deploy.

Greptile Summary

This change updates inbox and channel navigation, draft rendering and normalization, desktop meeting-recording packaging, and supporting workflow behavior.

The direct channel-item lookup can attach a saved LinkedIn or WhatsApp draft from a different connected account when the same provider chat ID exists in both accounts. The draft joins must include the account identity before this change is merged.

T-Rex validation blocked

The artifact upload tool was unavailable after the focused reproduction completed. Its executable source and captured before/after output could not be published as labeled uploaded artifacts.

Confidence Score: 3/5

Not safe to merge until direct channel draft lookup is constrained to the selected account.

One security-impacting defect remains: a provider chat-ID collision can expose a draft associated with a different account.

Files Needing Attention: apps/server/src/services/inbox/feed-containers.ts needs account-scoped joins for both linkedin_chats and whatsapp_chats, plus regression coverage for colliding provider chat IDs.

Security Review

A cross-account draft disclosure was reproduced in the direct channel-item lookup. Channel containers are scoped by account, but the new LinkedIn and WhatsApp joins retrieve legacy draft rows using only the provider chat ID. When IDs collide across accounts, opening one account's channel can display the other account's draft.

T-Rex T-Rex Logs

What T-Rex did

  • The team requested existing evidence artifacts for contract validation, including the cross-account source file and the before/after log files.
  • The requested artifacts were located and prepared for review to enable contract validation.

View all artifacts

T-Rex Ran code and verified through T-Rex

Prompt To Fix All With AI
### Issue 1
apps/server/src/services/inbox/feed-containers.ts:435-472
**Channel draft join ignores account scope**

`channelItem` selects a channel container by the caller's membership, channel, and provider key, but its LinkedIn and WhatsApp draft joins use only the provider chat ID. Provider chat IDs are scoped to an account, so when the same ID exists under two accounts, the selected container can inherit the other account's saved draft. Join the legacy draft rows on their account identifier as well (`lc.unipile_account_id = c.account_ref` and the corresponding WhatsApp account field) so the opened channel cannot display another account's draft.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "Merge pull request #2611 from CedarCopil..." | Re-trigger Greptile

Greptile also left 1 inline comment on this PR.

Show production surfaces and changed-file mapping

Production surfaces

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

Changed files → surfaces

  • .env.exampleno production surface mapped
  • apps/desktop/electron-builder.config.jsno production surface mapped
  • apps/desktop/electron.vite.config.tsno production surface mapped
  • apps/desktop/package.jsonno production surface mapped
  • apps/desktop/src/env.d.tsno production surface mapped
  • apps/desktop/src/main/index.tsno production surface mapped
  • apps/desktop/src/main/ipc/handlers/captureHandlers.tsno production surface mapped
  • apps/desktop/src/main/ipc/registerIPC.tsno production surface mapped
  • apps/desktop/src/main/services/recallSdk.tsno production surface mapped
  • apps/desktop/src/main/services/recallService.tsno production surface mapped
  • apps/desktop/src/preload/index.tsno production surface mapped
  • apps/mail/app/(routes)/settings/signature/page.tsxno production surface mapped
  • apps/mail/app/(routes)/tasks/layout.tsxno production surface mapped
  • apps/mail/app/entry.client.tsxno production surface mapped
  • apps/mail/app/globals.cssno production surface mapped
  • apps/mail/components/ui/GlobalCanvas.tsxno production surface mapped
  • apps/mail/components/ui/active-view-display.tsxno production surface mapped
  • apps/mail/components/ui/day-divider.tsxno production surface mapped
  • apps/mail/docs/wiki/empty-chat-surface.mdno production surface mapped
  • apps/mail/lib/hotkeys/view-stack-manager.tsxno production surface mapped
  • apps/mail/lib/stale-deploy-reload.tsno production surface mapped
  • apps/mail/modules/calendar/calendarUtils.tsno 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/cedar-os/__tests__/chatInput/ComposerActionButton.test.tsxno production surface mapped
  • apps/mail/modules/cedar-os/__tests__/emptyChatLayout.surfaces.test.tsno production surface mapped
  • apps/mail/modules/cedar-os/src/cedar-os-components/chatComponents/emptyChatLayout.tsno production surface mapped
  • apps/mail/modules/cedar-os/src/cedar-os-components/chatComponents/useOpenContextArtifact.tsno production surface mapped
  • apps/mail/modules/cedar-os/src/cedar-os-components/chatInput/ComposerActionButton.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/components/renderers/DraftBody.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/components/renderers/messageRenderers.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/store/messages/messagesSlice.tsno production surface mapped
  • apps/mail/modules/conversations/components/timeline/ReactionChip.tsxno production surface mapped
  • apps/mail/modules/conversations/components/timeline/SlackBodyRenderer.tsxno production surface mapped
  • apps/mail/modules/conversations/components/timeline/composer/SlackMentionTextarea.tsxno production surface mapped
  • apps/mail/modules/conversations/components/timeline/composer/mention-extension.tsno production surface mapped
  • apps/mail/modules/conversations/components/timeline/emoji-shortcodes.tsno production surface mapped
  • apps/mail/modules/drafting/components/__tests__/table-round-trip.test.tsno production surface mapped
  • apps/mail/modules/drafting/components/extensions.tsno production surface mapped
  • apps/mail/modules/home/components/DisplayArtifactPanel.tsxno production surface mapped
  • apps/mail/modules/inbox/components/ChannelMessageList.tsxno production surface mapped
  • apps/mail/modules/inbox/components/ChannelThreadView.tsxno production surface mapped
  • apps/mail/modules/inbox/components/InboxList.tsxno production surface mapped
  • apps/mail/modules/inbox/components/SlackThreadPanel.tsxno production surface mapped
  • apps/mail/modules/inbox/hooks/use-channel-artifact-item.tsno production surface mapped
  • apps/mail/modules/inbox/hooks/use-inbox-items.tsno production surface mapped
  • apps/mail/modules/inbox/hooks/use-open-channel-item.tsno production surface mapped
  • apps/mail/modules/threads/conversation-inbox/ConversationInboxLayout.tsxno production surface mapped
  • apps/mail/modules/threads/hooks/use-inboxes.tsno production surface mapped
  • apps/mail/modules/threads/mail.tsxno production surface mapped
  • apps/mail/modules/threads/rendering/use-optimistic-actions.tsno production surface mapped
  • apps/mail/modules/threads/thread/components/thread-display.tsxno production surface mapped
  • apps/mail/modules/threads/threadList/store/threadSlice.tsno production surface mapped
  • apps/mail/modules/userTasks/hooks/use-exit-task-execution-on-close.tsno production surface mapped
  • apps/mail/modules/ux/layout/LayoutUrlSync.tsxno production surface mapped
  • apps/mail/modules/ux/layout/layoutTypes.tsno production surface mapped
  • apps/mail/modules/ux/layout/resolveContext.tsno production surface mapped
  • apps/mail/modules/ux/layout/selectEmptyChatSurface.tsno production surface mapped
  • apps/mail/modules/ux/layout/useRouteChatThread.tsno production surface mapped
  • apps/mail/modules/ux/uxSlice.tsno production surface mapped
  • apps/mail/tests/modules/cedar-os/draft-body.test.tsno production surface mapped
  • apps/mail/tests/modules/conversations/emojiShortcodes.test.tsno production surface mapped
  • apps/mail/tests/modules/conversations/slackMentionAutocomplete.test.tsxno production surface mapped
  • apps/mail/tests/modules/home/DisplayArtifactPanel.test.tsxno production surface mapped
  • apps/mail/tests/modules/inbox/channelKeyCollision.test.tsno production surface mapped
  • apps/mail/tests/modules/inbox/feedScopeGate.test.tsxno production surface mapped
  • apps/mail/tests/modules/threads/delete-draft-flow.test.tsxno production surface mapped
  • apps/mail/tests/modules/threads/inboxScopeReady.test.tsxno production surface mapped
  • apps/mail/tests/modules/userTasks/openSlackChannelFromTask.test.tsno production surface mapped
  • apps/mail/tests/modules/ux/activeViewNeverBlank.test.tsxno production surface mapped
  • apps/mail/tests/modules/ux/artifactOpenFlags.test.tsno production surface mapped
  • apps/mail/tests/modules/ux/layout/resolveContext.test.tsno production surface mapped
  • apps/mail/tests/modules/ux/layout/selectEmptyChatSurface.test.tsno production surface mapped
  • apps/mail/tests/modules/ux/layout/useRouteChatThread.noFork.test.tsxno production surface mapped
  • apps/mail/tests/modules/ux/overlayArtifactCoverage.test.tsno production surface mapped
  • apps/server/docs/coaching-rollout-aspire.mdno production surface mapped
  • apps/server/docs/coaching-rollout-runbook.mdno production surface mapped
  • apps/server/docs/inbound-reply-agent.mdno production surface mapped
  • apps/server/src/env.tsno production surface mapped
  • apps/server/src/lib/logging/axiom-logger.tsno production surface mapped
  • apps/server/src/mastra/agents/on-event-orchestrator-agent.tsno production surface mapped
  • apps/server/src/mastra/routeHandlers/event-execution/handleExecuteSyncThread.tsno production surface mapped
  • apps/server/src/mastra/skills/event-execution/conversation-action-management.tsno production surface mapped
  • apps/server/src/mastra/skills/event-execution/event-summarization.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/updateConversationFieldsTool.tsno production surface mapped
  • apps/server/src/mastra/tools/draft-comms/__tests__/saveDraftTool.test.tsno production surface mapped
  • apps/server/src/mastra/tools/draft-comms/saveDraftTool.tsno production surface mapped
  • apps/server/src/mastra/tools/event-execution/onEventExecutionDraftEmailTool.tsno production surface mapped
  • apps/server/src/mastra/utils/context-formatting/__tests__/core-field-descriptions.test.tsno production surface mapped
  • apps/server/src/mastra/utils/context-formatting/conversation-context.tsno production surface mapped
  • apps/server/src/mastra/utils/context-formatting/core-fields.tsno production surface mapped
  • apps/server/src/mastra/workflows/event-execution/__tests__/next-steps-backstop.test.tsno production surface mapped
  • apps/server/src/mastra/workflows/event-execution/on-event-agent-execution-workflow.tsno production surface mapped
  • apps/server/src/runtime/worker-entry.tsno production surface mapped
  • apps/server/src/scripts/publish-aspire-coaching.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/conversations.slack-message-join.test.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/crm-deal-auto-link.test.tsno production surface mapped
  • apps/server/src/services/crm/conversations.tsno production surface mapped
  • apps/server/src/services/crm/crm-deal-auto-link.tsno production surface mapped
  • apps/server/src/services/drafting/__tests__/normalize-draft-body.test.tsno production surface mapped
  • apps/server/src/services/drafting/drafting.tsno production surface mapped
  • apps/server/src/services/drafting/gmail-format.tsno production surface mapped
  • apps/server/src/services/inbox/__test__/channel-item-db.test.tsno production surface mapped
  • apps/server/src/services/inbox/__tests__/feed-inbox-scope.test.tsno production surface mapped
  • apps/server/src/services/inbox/feed-containers.tsno production surface mapped
  • apps/server/src/services/inbox/feed.tsno production surface mapped
  • apps/server/src/services/integrations/crm/driver.tsno production surface mapped
  • apps/server/src/services/integrations/crm/salesforce.tsno production surface mapped
  • apps/server/src/services/integrations/provider-config.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/services/mail/sync/__tests__/mail-sync-queue.test.tsno production surface mapped
  • apps/server/src/services/mail/sync/operations.tsno production surface mapped
  • apps/server/src/services/mail/sync/queue.tsno production surface mapped
  • apps/server/src/services/monitoring/gmail-rate-limit-report.tsno production surface mapped
  • apps/server/src/trpc/routes/inbox.tsno production surface mapped
  • aws/lib/runtime-contract.tsno production surface mapped
  • aws/scripts/publish-frontend-assets.shno production surface mapped
  • docs/audits/aspire/coaching/aspire-coaching-playbook.mdno production surface mapped
  • docs/audits/aspire/coaching/aspire-demo-plays.mdno production surface mapped