CedarCopilot wants to merge 2 commits into staging from fix/go-deeper-content-delivery
Live on prod, no production signal yet
Verification reached its budget before a verdict.
Verification reached its 120s wall-clock budget before a tied verdict. Libra is keeping this intent verifying until the next check.
Unable to complete the verification because the production agent_prompt telemetry query was aborted before yielding results.
Verification reached its 130s outer budget before the verifier returned. Libra is keeping this intent verifying until the next check.
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.
Aspire's daily-call-summary digest posts each customer call to Slack with a "Go Deeper" button meant to post a fuller breakdown back into the thread on click. In production, clicking it completed successfully server-side but nothing useful ever reached Slack , only a one-line confirmation sentence landed on the original message, describing a breakdown that was never actually written down anywhere.
Root cause: "Go Deeper" reuses the generic Slack approval-button machinery (agent_prompt op), whose shared wrapper prompt caps the model's <final_answer> text at "ONLY a short confirmation (1-2 sentences)". That's correct for apply-style buttons (CRM field change, task update) where the real effect already happened via a tool call and the text is just a receipt , but Go Deeper has no other effect; the breakdown is the deliverable, and it was silently discarded.
handleSlackInteraction now derives the real Slack channel + thread from the click payload itself (the only place it can be known , a button's prompt is authored before the thread's ts exists) and passes it through OperationContext.agent_prompt gains an opt-in deliverContentToThread arg. When set, the wrapper prompt instructs the run to post its real output via notify-user into that channel/thread, and lets <final_answer> stay a short receipt.agent_prompt run. agent_prompt also backs the "Accept" button on essentially every CRM-approval card across every Cedar customer (crm-updater.ts, plus pipeline-review.ts, inbound-email-notifier.ts, ambiguity-ping-message.ts) , those must see an unchanged prompt. Caught this in a thermo-review pass on the diff before opening this PR; fixed by gating behind the new opt-in arg, with a regression test locking in that ordinary approval buttons are unaffected.daily-call-summary org subagent doc to set deliverContentToThread: true on its button and documents the failure mode directly in the doc so it doesn't quietly regress.pnpm --filter @zero/server run types , cleanpnpm --filter @zero/server exec vitest run src/mastra/operations/__tests__/operation-registry.test.ts , 6/6 passing (3 new: instruction present when opted in, "lost" warning present, and , the regression guard , absent entirely when not opted in)pnpm deps:check , 0 violationsdispatchOperation/agent_prompt (Slack buttons, Slack reactions, iMessage tapbacks) to confirm no other surface is affecteddaily-call-summary digest run in Aspire's #cedar-call-reviews, click "Go Deeper" on a call entry, confirm the real breakdown posts as a new thread replyš¤ Generated with Claude Code
https://claude.ai/code/session_01GPYHTQhFJ4WuDvsnoUVHy3
This PR adds opt-in delivery of substantive agent_prompt output to the Slack thread where a button was clicked.
block_actions payloads.deliverContentToThread to agent_prompt and instructs the agent to use a notification tool for long-form content.This PR is not yet safe to merge because threaded content delivery remains broken whenever the family-agent feature flag selects the notify tool surface.
The new prompt always mandates the granular notify-user interface, while the existing runtime can select a family toolset that exposes only notify with a different argument schema, preventing the substantive Slack
Libra has not measured any production surfaces for this change yet.