CedarCopilot wants to merge 2 commits into staging from feat/slack-style-reactions
Live on prod, no production signal yet
Strict CloudWatch fallback saw 1,773 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 3 prod failure log lines for mirror.upsertEmailThread failed (write CONNECTION_CLOSED aws-1-us-east-2.pooler.supabase.com:6543), but this domain-wide failure family is not tied to this intent.
OTEL fallback saw 123,089 prod spans for the repo/env since deploy, but 4,622 were errors and the intent has no concrete surface to attribute them to.
Strict CloudWatch fallback found 3 prod failure log lines for mirror.upsertEmailThread failed (write CONNECTION_CLOSED aws-1-us-east-2.pooler.supabase.com:6543), but this domain-wide failure family is not tied to this intent.
Strict CloudWatch fallback found 2 recent prod failure log lines for [backfillSlackChannelHistory] Backfill 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.
Libra has verdicts on 0 of 5 tracked behaviors on prod; 5 are still being checked. Libra checks hourly for 3 days after each deploy.
Continues feat/slack-style-reactions past the merge of #2571. Two threads of work:
A Slack task opens its channel. Previously a Slack task opened a draft card inside the task ticket , the same words, in a surface that cannot send them. It now opens the actual channel through the same display-artifact mechanism an email task opens its thread with, with the drafted message seeded into that channel's composer.
The task ticket reads like a Linear issue. A header row and two columns: editable title and notes, the deal as the shared ConversationBadge, the source thread rendered inline, the triggering event named and openable, and a properties rail of icon+value rows. Plus /inbox-style thread preloading on hover and after a task list loads, so a task no longer opens cold.
Also: a drizzle schema-barrel fix (taskGroups was referenced by a relation but not exported, so with: { taskGroup: true } 500'd at query time), correlation ids in tRPC error bodies, and DM-backfill that resumes where it stopped.
A /review pass over the branch found the defects clustered in one place: the new slack_thread artifact kind had to be added to several independent enumerations, and only some of them got it. Each omission is silent in its own direction.
ChannelThreadView takes raw mrkdwn via pending-channel-draft. The task path seeded the deal's while opening the unibox's, so the message landed in a surface the click never navigated to. One shared open-slack-channel-from-task.ts now, which also de-duplicates a closure copied into both call sites.#channel in counterpart.name, but a Slack channel's title is read off counterpart.subtitle , every hinted channel rendered a header saying "Slack channel". Built to slackMessageToItem's real shape, which also retires an as unknown as InboxItem cast that was hiding it.taskActionData, and there is no sentAt , so re-opening a done task dropped an already-posted message into the composer, one Enter from a duplicate.setNavigationPage left isSlackThreadOpen true with the artifact already null (a flag with nothing behind it, which every route gate reads as "open"); useExitTaskExecutionOnClose never saw a Slack channel closing, so ?task=/?group= outlived it; ConversationInboxLayout and mail.tsx omitted isTaskOutputOpen while ?task= is routed from the root layout.ActiveViewDisplay returned null while its hosts had already hidden everything else. It now says so and offers Back.EditableText's Escape called preventDefault but not stopPropagation, so the native event still reached TaskTicketView's window listener , and with the title and notes now always-mounted fields, backing out of a word closed the ticket.The branch's invariant test covered one of the four enumerations; it now covers the exit hook and setNavigationPage too, and a new suite pins which composer gets seeded.
pnpm run autofix:local , green, before and after merging origin/staging
pnpm --filter @zero/mail run types and @zero/server run types , cleanopenSlackChannelFromTask.test.ts (which composer is seeded, the sent-draft guard, the artifact write); sent-task case in open-task.test.ts; overlayArtifactCoverage.test.ts extended to the exit hook and setNavigationPage`pnpm --filter @z
Libra has not measured any production surfaces for this change yet.