Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

fix(crm): correct stale non-Deal Superglue write-path comments

merged#2848CedarCopilot

CedarCopilot wants to merge 1 commit into staging from fix/superglue-generalization-comments-stale

Live on prod, watching, 2 days leftTimeline and evidence
  1. Opened
    Sep 20, 2026, 1:42 PM
  2. Sep 20, 2026, 1:48 PM
  3. Merged
    Sep 20, 2026, 1:51 PM
  4. Live on prod
    Sep 20, 2026, 1:51 PM
  5. Observed 0 hours
    Sep 20, 2026, 1:51 PM
  6. Watching

    Live on prod, watching, 2 days left

    Sep 20, 2026, 1:51 PM
  7. Pipelines steady after this deploy
    Sep 20, 2026, 1:51 PM

Behaviors Libra is checking

CRM integration behavior from crm/attio.ts, crm/hubspot.ts, crm/salesforce.ts keeps working in prod.Not checked
prod

Libra has verdicts on 0 of 1 tracked behaviors on prod; 1 is still being checked. Libra checks hourly for 3 days after each deploy.

Summary

  • All three drivers' non-Deal write-path comments claimed the generalization (record_id/object_name/object_slug) was an unsaved Superglue draft, inert until rebuilt. Re-checked live (sg tool find) against all three tools today , every one already has the generalized shape saved. The comments were stale, not current fact.
  • Live-verified salesforce-update-opportunity-field end-to-end: a real write against a Salesforce Lead record, read back via the REST API to confirm the field actually changed (not just a schema check).
  • HubSpot's and Attio's tool schemas are confirmed to already have the generalized shape too, but not end-to-end tested yet , HubSpot blocked on the crm.objects.leads.write scope actually being granted (PR #2840), Attio blocked on no test connection being available under current authorization. Comments now state the real, current confidence level for each rather than a stale one.
  • Removed a banned as unknown as Record<string, unknown> cast in salesforce.ts (this tool's contract takes the array directly, not wrapped in an object). Widened executeWorkflow's own payload type to honestly accept Record<string, unknown> | unknown[], and pushed the one unavoidable cast down to the actual untyped boundary , @superglue/client's own RunRequestInputs type is narrower than what its runtime demonstrably accepts, per the same live test.

Test plan

  • salesforce-object-binding.test.ts, hubspot-object-binding.test.ts, attio-object-binding.test.ts, attio.test.ts , 40/40 passing
  • @zero/server typecheck clean
  • Live end-to-end verification against a real Salesforce dev-sandbox Lead record (write + read-back)

šŸ¤– Generated with Claude Code

RetriggerConfidence Score: 5/5

The PR appears safe to merge because it preserves runtime request values while making comments and TypeScript contracts more accurate.

Summary

This PR corrects stale CRM integration comments to reflect the currently deployed Superglue tool schemas and moves the Salesforce array-payload assertion to the SDK boundary without changing runtime behavior.

  • Documents the verified confidence level for Salesforce, HubSpot, and Attio non-Deal writes.
  • Allows executeWorkflow to honestly represent object and bare-array tool inputs.
  • Removes the misleading double assertion from the Salesforce caller.

Reviews (1) Ā· Last reviewed commit: "fix(crm): correct stale non-Deal Supergl..."

Show production surfaces and changed-file mapping

Production surfaces

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

Changed files → surfaces

  • apps/server/src/services/integrations/crm/attio.tsno production surface mapped
  • apps/server/src/services/integrations/crm/hubspot.tsno production surface mapped
  • apps/server/src/services/integrations/crm/salesforce.tsno production surface mapped
  • apps/server/src/services/integrations/superglue/superglue-client.tsno production surface mapped