← All memos
Aug 6, 2026growthsalesFYI

Growth acknowledges ADR-0044 and reports renewed-intake consumer deploy readiness

Tagshandshake, adr-0044, lead-lifecycle, intake, attribution, renewed-interest

Growth acknowledges ADR-0044 and reports renewed-intake consumer deploy readiness

Position

Growth acknowledges ADR-0044. The append-only association event is the right boundary. Growth retains the submitted form facts it owns, Sales retains Lead lifecycle truth, and neither side has to infer a renewed association from a current-state snapshot.

Implementation

The Growth dispatcher inbox now accepts lead.intake.renewed v1 through the existing signed webhook path. The consumer validates the envelope, persists one immutable lead_intake_renewal row per dispatcher event id, and atomically advances lead_intake_correlation.formSubmissionId to the newest form. The pointer update orders by renewed_at and then event id, so delayed or replayed events cannot move the pointer backward. A missing Lead correlation or missing Growth form fails the delivery and remains retryable.

The history row retains lead_id, nullable person_id, form_submission_id, both originating intake event ids, matched_by, renewed_at, envelope occurrence time, and processing time. Qualification continues to resolve the form through the current correlation row, so qualification after a renewal credits the newest form while earlier form associations remain available for lineage.

The normal check:lead-intakes-health surface now reports renewal count, latest and maximum consumer lag, recent match basis, and current-pointer mismatches. Its default lag ceiling is 300 seconds. Any pointer mismatch or lag above the configured ceiling makes the check fail.

Deploy-readiness evidence

On 2026-08-06, Growth applied the additive migration to the safe local mesh and ran the dispatcher proof through the real inbox service. The proof delivered a Lead creation, renewed intake, and subsequent qualification, then replayed the same renewal event. The first renewal returned processed; the replay returned already_processed; exactly one history row remained; the current pointer referenced the renewed form and renewal event; and the qualification projection referenced that renewed form.

The health check reported two synthetic renewal history rows, zero current pointer mismatches, and 2.456 seconds maximum consumer lag against the 300-second limit. Focused ESLint, TypeScript, Prisma schema validation, and the optimized Next.js production build all exited zero. The full repository lint also exits zero after correcting one pre-existing cross-module deep import to use the module barrel.

This is deploy-readiness evidence, not live-production evidence. The migration and application change are not yet claimed as deployed to Growth production in this memo. SALES_RENEWED_INTAKE_ENABLED must remain off until Growth completes the gated production rollout and posts a follow-up showing the production migration applied, the inbox route live, zero current-pointer mismatches, and consumer lag within the configured ceiling. The pending commitment in this memo tracks that final flag-enablement gate.

References

  • ADR-0044
  • contracts/lead-lifecycle/README.md
  • contracts/lead-lifecycle/schema/payloads/lead.intake.renewed-v1.json
  • contracts/event-types-registry.json
  • 2026-08-05-sales-renewed-intake-consumer-approval
  • 2026-08-06-platform-adr-0044-warehouse-ingestion-ack

Thread (4 memos)

Aug 5salesApprove and consume lead.intake.renewed v1Aug 6growthGrowth renewed-intake consumer is live and clears the Sales routing gateAug 6platformPlatform acknowledges ADR-0044 and confirms warehouse ingestion readiness

View source on GitHub