CedarCopilot wants to merge 0 commits into staging from pirros/data-audit-playbooks
Live on prod, no production signal yet
Strict CloudWatch fallback saw 771 success-shaped log lines matching pipeline, analytics, quota, aop, but no tied operation was present, so Libra is not calling this working.
Strict CloudWatch fallback found 1 recent prod failure log lines for [SCHEDULED] Failed to enrich unenriched calendar event (No valid connection tokens found for user <id>), but the same failure had 5 log lines in the comparable pre-deploy baseline. Libra is not blaming this PR.
Strict CloudWatch fallback saw 10,299 success-shaped log lines matching email, emails, gmail, mail, inbox, but no tied operation was present, so Libra is not calling this working.
Strict CloudWatch fallback found 49 prod failure log lines for [UpdateExternalCrmWorkflow] Driver update failed (Step updateOpportunityField failed: HTTP 400: [{\), up from 1 in the comparable baseline, but this domain-wide failure family is not tied to this intent.
Strict CloudWatch fallback saw 12,812 success-shaped log lines matching email, emails, gmail, mail, inbox, but no tied operation was present, so Libra is not calling this working.
Strict CloudWatch fallback saw 14 setup or missing-connection failure log lines matching slack, channel, channels, workspace, workspaces, but that does not prove the deployed behavior is broken for connected users.
Libra has verdicts on 0 of 6 tracked behaviors on prod; 6 are still being checked. Libra checks hourly for 3 days after each deploy.
22 commits across five roughly independent workstreams, plus the fixes from a full pre-merge review of the branch.
Scheduled ("send later") emails get a durable read model. The execution machinery lived entirely in KV + SQS with a delay + 1h TTL, which can fire a send but can't render one , a thread has to say "Scheduled" for the whole delay, and "cancelled because they replied" long after the KV keys expire. New scheduled_sends table is that read model; the thread renders a scheduled reply as the email it's about to become (Edit / Delete instead of Reply / Forward), an inbound reply disarms the schedule, and a cron pass reconciles rows whose terminal write was lost against the KV stamp that still knows.
Task execution mode. ?task= now restores on a cold load through the same openTask a click runs, a task with no output pins itself above its conversation's Inbox so its Execute button travels with it, and every count on the surface is due-work-only with not-yet-due tasks under their own Upcoming heading.
Email is withdrawn as a notification channel. notify-user fails as a unit when every configured channel is down, and a send-email-notification tool sitting beside it read to agents as the obvious fallback , one broken Slack grant (account_inactive) turned into unrequested mail from Cedar into the user's own inbox. The tool, AGENT_EMAIL_FROM, buildAgentEmailHtml and the notify.send-email approval entry are all gone.
Autumn billing removed (useBilling is a no-op stub keeping the billing-aware UI compiling), and a repo-wide "stop announcing success" toast purge.
Merges stop stranding Cedar Docs. Docs are path-addressed with no FK to crm_conversations, so every merge deleted the source row without moving them , MAPs, proposals and meeting-prep notes survived at a dead path, unreachable from every list query. repointConversationDocuments moves them first; a recovery script repairs what's already stranded.
Two commits at the tip, from reviewing the branch:
fix: clear the dead code the toast purge left, and index the abandoned-send sweep , four empty blocks / dead loops the purge left behind (including a Set built only to feed an empty forEach, and an image-compression byte tally nobody reads), comments still arguing for feedback that's gone, a proposedEmailNotification card type for a tool this branch deletes, a (status, send_at) index for the abandoned-send sweep (which had no servable index and runs every cron pass against a table that never deletes a row , already applied to the live DB; the migration is idempotent), and the healDeleteEmptyConversation doc guard missing the root conversation/{id} path its own helper matches.fix(test): stop the scheduled-email cron suite hanging on a real DB , this one was a live CI break. processScheduledEmails now runs the abandoned-row reconcile on the same beat, which reaches Postgres; the cron suite stubs KV and SQS only and runs under fake timers, so the connection never settled and all three tests died on the 30s timeout. 90s of timeouts → 1.1s.pnpm run autofix:local , green (deps:check, paraglide:compile, mail Jest 207 suites / 1974 tests, server Vitest 552 suites / 5638 tests). Oxlint is clean for this branch; the only remaining repo warnings are in files this branch doesn't touch.currentState next-steps, the undo-window task resurrection, and the useRouteChatThread spurious fork.scheduled_sends verified present in the live DB with all four indexes.staging (branch is 57 commits behind). The merge would have overwritten 8 files that concurrent sessions have uncommitted work in, in a shared working tree. Needs a rebase from a clean checkout before merge.Libra has not measured any production surfaces for this change yet.