CedarCopilot wants to merge 0 commits into staging from feat/curated-agenda
Live on prod, no production signal yet
Strict CloudWatch fallback saw 2,295 success-shaped log lines matching pipeline, analytics, quota, aop, but no tied operation was present, so Libra is not calling this working.
OTEL fallback saw 174,022 prod spans for the repo/env since deploy, but 4,878 were errors and the intent has no concrete surface to attribute them to.
Strict CloudWatch fallback found 1 recent prod failure log lines for [MEETING_NOTES_WEBHOOK] Error processing webhook (AskElephant webhook payload must contain at least one attendee with a valid email address), but the same failure had 1 log lines in the comparable pre-deploy.
Strict CloudWatch fallback found 4 recent prod failure log lines for mirror.upsertEmailThread failed (Failed query: insert into \), but the same failure had 3 log lines in the comparable pre-deploy baseline. Libra is not blaming this PR intent without a post-deploy increase or.
Strict CloudWatch fallback found 136 prod failure log lines for [UpdateExternalCrmWorkflow] Driver update failed (Step updateOpportunityField failed: HTTP 400: [{\), up from 44 in the comparable baseline, but this domain-wide failure family is not tied to this intent.
OTEL fallback saw 113,324 prod spans for the repo/env since deploy, but 3,170 were errors and the intent has no concrete surface to attribute them to.
Libra has verdicts on 0 of 9 tracked behaviors on prod; 9 are still being checked. Libra checks hourly for 3 days after each deploy.
Turns the daily agenda into a curated document , a morning run that triages, fans out, and writes a shortlist , and finishes the user_tasks two-axis migration underneath it. Also adds an execution-trace waterfall for debugging agent runs.
Three strands:
1. Curated agenda. The morning run becomes a triage-and-fan-out orchestrator: it classifies each flagged deal, picks which reviewers to wake (picking none is a valid answer), and one designated deal-drafter owns drafting so a review can't produce two drafts for one conversation. The two old reconcilers (daily-agenda-reconciler, future-agenda-reconciler, ~1.7k lines) collapse into tasks-to-agenda.ts, split by direction: reads never add rows, which is what removes the per-read advisory lock and the lossy watermark.
2. Task two-axis migration. Readers move off task_channel / task_type / task_action_data and onto the typed task_output axis. Four migrations retire dead statuses (planned_followup, archived), the multi-action non-channel, and the conversation attention index. task_channel and task_output.kind disagree on ~12k rows by design , the output axis is authoritative.
3. Execution trace. getExecutionTree walks parent_run_id as a tree (bounded depth/nodes, cycle-guarded, authz checked on every node) and renders as an Axiom-style waterfall. agent_tool_calls.started_at is new: created_at was a completion timestamp, so every tool span was drawing at the wrong end of its call.
Two things were found and fixed that weren't part of the original work:
services/crm/contacts.ts imported a boolean from trpc/routes/enrichment.ts, closing trpc/index → services/crm/* → trpc/routes/enrichment → trpc. privateProcedure is undefined on the second entry, so the route threw at module load and took three e2e suites down before their skip guards ran. Latent until registering agendaRouter changed barrel init order. Verified against a clean origin/staging worktree. deps:check does not catch this , its rules don't cover route→service.task-axes-deploy-gate.md was wrong on two of three rows, claiming task_action_data had one reader (it has ~7, incl. updateTaskTool's cleanupDraft with no task_output fallback) and that task_type's only holdout was a symbol this branch deleted. Dropping either column on that advice would have made if branches go silently false rather than throw. Corrected with real reader lists.pnpm run autofix:local equivalent, all green on the merged tree:
--deny-warnings , cleandeps:check , no violations (1457 modules, 7461 deps)types (server + mail) , cleanMerged origin/staging (131 commits, 6 conflicts). Two conflicts were semantic, not textual, and are called out in the merge commit: staging re-added task-write tools to CONVERSATION_FIELD_UPDATER_TOOLS that this branch deliberately removed (kept the removal), and staging's zero-ref observability warn is ordered before the review triage so it still reports resolution failure rather than triage's deliberate narrowing.
This is large , 58 commits, ~295 files. Suggested reading order: NEXT_STEPS_LIFECYCLE_DESIGN.md and CURATED_AGENDA_DESIGN.md for intent, then services/agenda/tasks-to-agenda.ts, then services/agent-action-queue/execution-tree.ts.
Open question for a maintainer: migrations 0056/0057/0059/0060 are numbered but not registered in meta/_journal.json, so db:migrate won't apply them and check-migrations can't report them missing. 16 earlier numbered migrations are already unjournaled, so this follows existing practice rather than breaking it , but someone should confirm they were hand-applied. There's also no 0058 anywhere in history.
🤖 Generated with [Claude Code](https://claude.co
Libra has not measured any production surfaces for this change yet.