Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

[2026-09-23] merging staging to main

merged#2928CedarCopilot

CedarCopilot wants to merge 1 commit into main from staging

Customer behavior verdict

Libra exercised 2 changed behaviors; none regressed.

Who this touches

  • A picked Drive file is added once and followed up in its original thread: Libra cannot measure who uses this yet; it has not mapped this to a production entry point yet; it will trace it through the import graph on a coming run.
  • Existing Drive documents are preserved without creating a duplicate: Libra cannot measure who uses this yet; it has not mapped this to a production entry point yet; it will trace it through the import graph on a coming run.
  • Request cards are accepted only when their required fields are valid: Libra cannot measure who uses this yet; it has not mapped this to a production entry point yet; it will trace it through the import graph on a coming run.
  • Google Picker surfaces offer the same document and presentation types: Libra cannot measure who uses this yet; it has not mapped this to a production entry point yet; it will trace it through the import graph on a coming run.
  • apply-config-change: no production calls in the last 7 days.
  • read-connection-settings: no production calls in the last 7 days.
  • Request cards are accepted only when their required fields are valid: Held on this PR; the scenario fails when this is broken on purpose.
  • Google Picker surfaces offer the same document and presentation types: Held on this PR; the scenario fails when this is broken on purpose.
  • Existing Drive documents are preserved without creating a duplicate: Libra's scenario for this cannot detect a break, so it is not counted.

What Libra verified

  • Google Picker surfaces offer the same document and presentation types

    Libra ran this behavior against the change and confirmed the check detects when it breaks.

    Technical evidence
    • the shared Knowledge-base Google Picker MIME-type list includes both native Google presentations and native Google documents

    Changed code: google-slides-manager.tsx.

  • Request cards are accepted only when their required fields are valid

    Libra ran this behavior against the change and confirmed the check detects when it breaks.

    Technical evidence
    • a requestDriveFile card with a type, string ID, and string purpose is accepted and inserted into the requested thread
    • a requestDriveFile card is rejected when its type, ID, or purpose is missing or not a string

    Changed code: initializeResponseProcessorRegistry.ts.

Not deployedTimeline and evidence
  1. Opened
    Sep 23, 2026, 11:34 PM
  2. Merged
    Sep 23, 2026, 11:50 PM
  3. Sep 23, 2026, 11:54 PM
  4. Live on staging, live on prod, observed
    Pending
  5. Not deployed

    Not deployed

    Pending

Libra has no production signal for this change yet because it has not deployed. Libra checks hourly for 3 days after each deploy.

RetriggerConfidence Score: 3/5

Do not merge until the CRM resync failures and absolute-import requirement are addressed. The field-response and Orum request-size concerns are non-blocking.

Findings

  1. P1 Blank CRM fields remain stale ▶
  2. P1 Timed-out resync can still write ▶
  3. P2 Security Oversized webhooks are fully buffered ▶
  4. P2 Use absolute imports ▶
Fix with agent prompt
### Issue 1
apps/server/src/services/crm/crm-pull-refresh.ts:920-928
When a mapped Salesforce field is blank but Cedar holds an old value, this pre-updater resync reports success without clearing it. A stage-change approval can then treat a required companion field as unchanged and omit it, leaving the stage update subject to Salesforce’s required-field rejection. This must be fixed before merging.

### Issue 2
apps/server/src/services/crm/crm-pull-refresh.ts:581
If field mapping starts before the resync timeout, this abort check has already passed. The caller can proceed with fallback data and write a newer value while the in-flight mapping later finishes and overwrites it with the older CRM value. This must be fixed before merging.

### Issue 3
apps/server/src/services/integrations/meetings/orum.ts:263-266
Orum’s size check runs only after the public route reads the entire request body. An oversized request was fully read and acknowledged, so the parsing cap does not bound memory used to receive it. If no upstream request-size limit applies, repeated large submissions can consume server resources. This is a non-blocking concern; enforce a limit while reading the request.

> **How this was verified:** An oversized unsigned request was fully read before Orum skipped parsing.

### Issue 4
apps/mail/modules/cedar-os/src/store/agentConnection/responseProcessors/requestDriveFileResponseProcessor.ts:1
The new `createResponseProcessor` import uses a relative path, as does the new `RequestDriveFileRenderer` import in `initializeMessageRendererRegistry.tsx`. Both violate the repository guide’s directive to use absolute imports. This repository requirement must be satisfied before merging.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

This PR adds a chat Google Drive picker, public-link knowledge-base ingestion, Orum webhook capture, conversation-field write verdicts, a HubSpot deal-write guard, and pre-updater CRM

Show production surfaces and changed-file mapping

Production surfaces

Libra has not measured any production surfaces for this change yet.

Changed files → surfaces

  • .gitignoreno production surface mapped
  • apps/mail/modules/aop/constants.tsno production surface mapped
  • apps/mail/modules/cedar-os/__tests__/requestDriveFileRenderer.test.tsxno production surface mapped
  • apps/mail/modules/cedar-os/__tests__/store/agentConnection/responseProcessors/requestDriveFileResponseProcessor.test.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/store/agentConnection/responseProcessors/initializeResponseProcessorRegistry.tsno production surface mapped
  • apps/mail/modules/cedar-os/src/store/agentConnection/responseProcessors/requestDriveFileResponseProcessor.tsno production surface mapped
  • apps/mail/modules/cedar-os/src/store/messages/renderers/RequestDriveFileRenderer.tsxno production surface mapped
  • apps/mail/modules/cedar-os/src/store/messages/renderers/initializeMessageRendererRegistry.tsxno production surface mapped
  • apps/mail/modules/integrations/google-slides-manager.tsxno production surface mapped
  • apps/mail/modules/integrations/integration-card.tsxno production surface mapped
  • apps/mail/modules/integrations/meeting-integration-card.tsxno production surface mapped
  • apps/mail/modules/integrations/use-google-picker.tsno production surface mapped
  • apps/server/.claude/skills/cedar-configuration/SKILL.mdno production surface mapped
  • apps/server/.claude/skills/cedar-configuration/cedar-system-knowledge.mdno production surface mapped
  • apps/server/.claude/skills/cedar-configuration/diagnose-and-repair.mdno production surface mapped
  • apps/server/.claude/skills/cedar-configuration/external-writes.mdno production surface mapped
  • apps/server/.claude/skills/cedar-configuration/fields-and-values.mdno production surface mapped
  • apps/server/.claude/skills/cedar-configuration/knowledge-and-collateral.mdno production surface mapped
  • apps/server/.claude/skills/external-systems/google-drive.mdno production surface mapped
  • apps/server/.claude/skills/playbook-instruction-eval/request-file-eval.tsno production surface mapped
  • apps/server/.claude/skills/playbook-instruction-eval/write-document-bash-competition-eval.tsno production surface mapped
  • apps/server/.claude/skills/sherlock/SHERLOCK_SYSTEM_KNOWLEDGE.mdno production surface mapped
  • apps/server/docs/meeting-provider-capabilities.mdno production surface mapped
  • apps/server/src/lib/__tests__/edit-distance.test.tsno production surface mapped
  • apps/server/src/lib/edit-distance.tsno production surface mapped
  • apps/server/src/mastra/context/__tests__/surface-context.test.tsno production surface mapped
  • apps/server/src/mastra/context/surface-context.tsno production surface mapped
  • apps/server/src/mastra/context/values.tsno production surface mapped
  • apps/server/src/mastra/mcp/external/__tests__/mutating-actions-are-administrable.test.tsno production surface mapped
  • apps/server/src/mastra/mcp/external/__tests__/scope-map.test.tsno production surface mapped
  • apps/server/src/mastra/mcp/external/__tests__/tool-hints-match-behavior.test.tsno production surface mapped
  • apps/server/src/mastra/mcp/external/scope-map.tsno production surface mapped
  • apps/server/src/mastra/mcp/external/server.tsno production surface mapped
  • apps/server/src/mastra/prompts/error-handling.tsno production surface mapped
  • apps/server/src/mastra/skills/account-config/index.tsno production surface mapped
  • apps/server/src/mastra/skills/account-config/tools/applyConfigChangeTool.tsno production surface mapped
  • apps/server/src/mastra/skills/account-config/tools/readConnectionSettingsTool.tsno production surface mapped
  • apps/server/src/mastra/tools/config/connection-write-tool.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/__tests__/fetchConversationTool.field-verdicts.test.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/__tests__/field-write-actor.test.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/__tests__/updateConversationFieldsTool.test.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/__tests__/updateConversationFieldsTool.unchanged-approval.test.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/conversationTool.schemas.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/fetchConversationTool.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/field-write-actor.tsno production surface mapped
  • apps/server/src/mastra/tools/conversation/updateConversationFieldsTool.tsno production surface mapped
  • apps/server/src/mastra/tools/document/__tests__/documentTool.test.tsno production surface mapped
  • apps/server/src/mastra/tools/document/__tests__/writeDocumentTool.test.tsno production surface mapped
  • apps/server/src/mastra/tools/document/documentTool.schemas.tsno production surface mapped
  • apps/server/src/mastra/tools/document/documentTool.tsno production surface mapped
  • apps/server/src/mastra/tools/document/writeDocumentTool.tsno production surface mapped
  • apps/server/src/mastra/tools/event-execution/__tests__/crm-updater-enabled-flag.test.tsno production surface mapped
  • apps/server/src/mastra/tools/event-execution/orchestrator-dispatch-tools.tsno production surface mapped
  • apps/server/src/mastra/tools/family-tool-names.tsno production surface mapped
  • apps/server/src/mastra/utils/__tests__/chat-message-persistence.test.tsno production surface mapped
  • apps/server/src/mastra/utils/__tests__/live-editable-field.test.tsno production surface mapped
  • apps/server/src/mastra/utils/approval-policy.tsno production surface mapped
  • apps/server/src/mastra/utils/context-formatting/__tests__/extract-conversation-fields-resync-overrides.test.tsno production surface mapped
  • apps/server/src/mastra/utils/context-formatting/__tests__/field-write-verdicts.test.tsno production surface mapped
  • apps/server/src/mastra/utils/context-formatting/conversation-context.tsno production surface mapped
  • apps/server/src/mastra/utils/context-formatting/core-fields.tsno production surface mapped
  • apps/server/src/mastra/utils/context-formatting/field-write-verdicts.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/chat-workflow.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/__tests__/context-telemetry.test.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/__tests__/delegate-tool-scoping.test.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/__tests__/request-context.test.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/__tests__/user-mcp-servers.test.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/context-telemetry.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/delegate-tool-scoping.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/request-context.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/types.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/harness/user-mcp-servers.tsno production surface mapped
  • apps/server/src/mastra/workflows/chat/run-chat-agent-sdk.tsno production surface mapped
  • apps/server/src/mastra/workflows/event-execution/__tests__/jev-action-gate-fallback.test.tsno production surface mapped
  • apps/server/src/mastra/workflows/event-execution/pre-execution-setup.tsno production surface mapped
  • apps/server/src/mastra/workflows/sync/__tests__/update-external-crm-workflow.test.tsno production surface mapped
  • apps/server/src/mastra/workflows/sync/update-external-crm-workflow.tsno production surface mapped
  • apps/server/src/services/aop/field-ownership.tsno production surface mapped
  • apps/server/src/services/auth/authorize.tsno production surface mapped
  • apps/server/src/services/conversations/__tests__/field-write-access.test.tsno production surface mapped
  • apps/server/src/services/conversations/__tests__/field-write-facts.test.tsno production surface mapped
  • apps/server/src/services/conversations/__tests__/helpers/field-write-fakes.tsno production surface mapped
  • apps/server/src/services/conversations/core-field-names.tsno production surface mapped
  • apps/server/src/services/conversations/field-write-access.tsno production surface mapped
  • apps/server/src/services/conversations/field-write-facts.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/crm-field-sync-summary.test.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/crm-pull-refresh.resync.test.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/crm-resync-field-overrides.test.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/deal-write-guard.test.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/taxonomy-extraction-run.test.tsno production surface mapped
  • apps/server/src/services/crm/conversation-field-comparison.tsno production surface mapped
  • apps/server/src/services/crm/conversations.tsno production surface mapped
  • apps/server/src/services/crm/crm-pull-refresh.tsno production surface mapped
  • apps/server/src/services/crm/crm-resync-field-overrides.tsno production surface mapped
  • apps/server/src/services/crm/deal-write-guard.tsno production surface mapped
  • apps/server/src/services/crm/email-domains.tsno production surface mapped
  • apps/server/src/services/crm/external-crm-events.tsno production surface mapped
  • apps/server/src/services/crm/taxonomy-extraction-step.tsno production surface mapped
  • apps/server/src/services/crm/taxonomy-judgments.tsno production surface mapped
  • apps/server/src/services/field-values/__tests__/defaults-equivalence.test.tsno production surface mapped
  • apps/server/src/services/field-values/__tests__/participant-roster-pov.test.tsno production surface mapped
  • apps/server/src/services/field-values/crm-custom-field-values.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/discovery.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/product.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/qualification.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/stakeholder.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/tactics.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/voice.tsno production surface mapped
  • apps/server/src/services/field-values/participant-roster.tsno production surface mapped
  • apps/server/src/services/integrations/__tests__/connection-config.test.tsno production surface mapped
  • apps/server/src/services/integrations/connection-config.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/__tests__/capabilities.test.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/__tests__/orum-webhook.test.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/capabilities.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/index.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/orum.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/provider-ids.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/types.tsno production surface mapped
  • apps/server/src/services/kb/__tests__/create-kb-from-google-drive.test.tsno production surface mapped
  • apps/server/src/services/kb/__tests__/google-public-link.test.tsno production surface mapped
  • apps/server/src/services/kb/__tests__/url-scraper-google.test.tsno production surface mapped
  • apps/server/src/services/kb/google-public-link.tsno production surface mapped
  • apps/server/src/services/kb/helpers.tsno production surface mapped
  • apps/server/src/services/kb/url-scraper.tsno production surface mapped
  • apps/server/src/trpc/routes/__tests__/crm-update-conversation-partial-failure.test.tsno production surface mapped
  • apps/server/src/trpc/routes/__tests__/crm-upsert-working-memory-partial-failure.test.tsno production surface mapped
  • apps/server/src/trpc/routes/__tests__/mastra-update-external-crm.test.tsno production surface mapped
  • apps/server/src/trpc/routes/crm.tsno production surface mapped
  • apps/server/src/trpc/routes/mastra.tsno production surface mapped
  • docs/changelogs/2026-W39.mdno production surface mapped
  • docs/design/crm-updater-pre-execution-resync.mdno production surface mapped
  • docs/design/deal-write-guard.mdno production surface mapped