CedarCopilot wants to merge 5 commits into staging from fix/gong-sync-transcript-storage
Live on prod, no production signal yet
Verification reached its 130s outer budget before the verifier returned. Libra is keeping this intent verifying until the next check.
Since deployment, CloudWatch shows 366 [createAndLinkEvents] meeting-branch executions and no occurrences of the tied '[createAndLinkEvents] No ... connection row found ... transcript ... will not be stored in S3.' error. One concrete meeting execution (<id>) logged successful.
Verification reached its 130s outer budget before the verifier returned. Libra is keeping this intent verifying until the next check.
Unable to complete the required telemetry verification within the available tool loop.
Verification reached its 130s outer budget before the verifier returned. Libra is keeping this intent verifying until the next check.
Since 2026-09-09T00:21:17Z in production, targeted OTEL queries found no syncMeetingTool or sync-meeting executions and no transcriptStored response signals. The only initial match was one unrelated workflow-step-queue.CONVERSATION_SYNC_WORKFLOW span; broader sync telemetry was.
Libra has verdicts on 0 of 8 tracked behaviors on prod; 8 are still being checked. Libra checks hourly for 3 days after each deploy.
syncMeetingTool.ts (the meetings MCP tool's manual sync action) and mastra/tools/event-execution/createAndLinkEventsTool.ts's meeting branch both call findOrCreateMeetingEvent directly with a driver's meeting data, but never called storeMeetingInS3 or resolved a connectionId , unlike the webhook (meeting-agent.ts) and initial-sync (meeting-steps.ts) paths, which both do this before the event reaches the DB.hasTranscription: true, a real word count) while the S3 blob transcriptionKey should point to was never written , so the UI showed "no transcript available" despite the metadata looking correct. Found and confirmed live against real Gong calls in a customer account (Warp) via both paths.findOrCreateMeetingEvent, but Greptile flagged a real flaw: a failed S3 write there still inserted the row with hasTranscription: true, permanently blocking any later retry (the hydration guard only upgrades a row that doesn't already claim a transcript) , so it was never merged. This PR fixes each call site individually instead and deliberately leaves storeMeetingInS3 unguarded (matching meeting-agent.ts's existing pattern) , a failed write aborts event creation entirely rather than inserting a poisoned row, so a retry of the whole operation tries the S3 write fresh.hydrateTranscript (matching meeting-agent.ts's webhook path), then storeMeetingInS3 before findOrCreateMeetingEvent , same order the other two ingestion paths already use.syncMeetingTool.ts also threads the resolved connectionId into its existing Turbopuffer upload call, which previously hardcoded '', and gained a transcriptStored: false output field for the one narrow (traced: TOCTOU-only, not reachable via bad input) case where the connection row can't be found , a thermo-review finding, since that fallback previously returned a fully-successful response with no signal that the transcript wasn't stored.createAndLinkEventsTool.ts doesn't need an equivalent field , it already returns the full meetingEvent DB row via meetingEventResult, so transcriptionKey/hasTranscription are already inspectable.pnpm --filter @zero/server run types , cleanpnpm deps:check , no violations (1786 modules, 9356 dependencies)pnpm --filter @zero/server exec vitest run src/mastra/tools/meetings/__tests__/ src/mastra/tools/event-execution/__tests__/ , 155/155 passing (17 files)syncMeetingTool.test.ts + 6 new tests in a new createAndLinkEvents-meeting-transcript.test.ts, pinning: S3 write happens before the DB write, an existing transcriptionKey is never overwritten, hydrateTranscript is called and its failure is non-fatal, the event still gets created (without a key) when no connection row is found, and (sync tool only) transcriptStored: false surfaces in that case.isProviderId (which transitively needs MEETING_PROVIDER_IDS from the same mocked @/services/integrations/meetings module)meeting-agent.ts, applied its one finding (the transcriptStored signal)Libra has not measured any production surfaces for this change yet.