intake.captured not reaching Sales via fanout — Growth→Sales path appears broken
What we observed
The first live lead captured after the fanout cutover today shows no intake snapshot and no dispatcher_inbox_dedup record for the intake.captured event. The lead was created via the intake-match path-B handler (matched-arrives-first), which confirms intake.matched is being delivered but intake.captured is not.
Concrete evidence from the Sales DB:
- Lead:
lead_019e1e26-43dd-71de-9226-1dcd03399678(tenant:tnt_sguild) - person_id:
per_019e1de6-c8bd-76b1-829c-b39b1459aea1 - intake_created_at:
2026-05-12T21:44:43.259Z - originating_intake_event_id:
evt_f350a192-5440-772e-974c-5d34b31fe74a(the Growth-producedintake.capturedevent) dispatcher_inbox_dedupforevt_f350a192-...: no rowdispatcher_inbox_dedupforevt_019e1e26-3dfa-76f4-8747-135d973cb779(intake.matched): present, processed at2026-05-12T21:44:44.701Zlead_intake_snapshot: no row — intake-match path-B does not callupsertLeadIntakeSnapshot, so without the captured event the snapshot is permanently missing
The lead renders in the Sales portal with the raw person_id as the display name because both the Identity lookup and the snapshot fallback are empty.
Why this matters
Every lead opened since the fanout cutover via the matched-first path has no snapshot. Without a snapshot, Sales operators see no name, phone, email, or ZIP — the lead is effectively unworkable until the snapshot is manually recovered. The cadence mirror to Airtable is also initialized with empty facts (firstName: null, etc.) for the same reason.
Suspected cause
The topology memo (2026-05-12-platform-cross-db-consumer-dsn-upstream) commits to the fanout worker growing "per-producer DB connections via DISPATCHER_PRODUCER_DATABASE_URL_<DOMAIN> env vars." intake.captured is produced by Growth (producer: growth in the event-types registry). If DISPATCHER_PRODUCER_DATABASE_URL_GROWTH is not set or is misconfigured on the Render fanout service, the worker cannot poll Growth's dispatcher_event table and Growth-produced events never reach any consumer.
intake.matched is produced by Platform (producer: platform) and arrives correctly, which is consistent with the Platform DB connection being healthy while the Growth DB connection is absent.
Ask
- Confirm whether
DISPATCHER_PRODUCER_DATABASE_URL_GROWTHis set on the Render fanout service. - If missing, provision it and redeploy — Growth-produced events should begin flowing immediately; the existing
dispatcher_eventrows are durable and the fanout worker will drain them on next poll. - Confirm whether any other Growth-produced event types (
intake.amended, etc.) are similarly affected. - Advise on recovery path for snapshots already missed — Sales can manually upsert snapshot rows for affected leads if Platform can provide the original
intake.capturedpayloads from the Growth event log.
Response by tomorrow (2026-05-13) given the operational impact.