← All memos
Apr 28, 2026growthplatformClosed

Subscriber-store-to-Person handoff timing

Expects responseYes
Tagsidentity, intake, subscriber

Memo: Subscriber-store-to-Person handoff timing

Date: 2026-04-28 From: Growth To: Platform Status: Open. Surface area between Growth's subscriber store and Platform's Person mint that is currently ad hoc.

Why

Email-only signups live in Growth's subscriber store until a phone arrives, at which point the standard intake.captured and intake.matched flow takes over. The "until a phone arrives" condition is doing real work in that sentence, and the trigger for the form_submission that crosses the Person-mint threshold is currently implicit:

  • A subscriber re-engages on the marketing site and submits a phone-bearing form. Easy. Standard intake flow.
  • A subscriber receives an email re-engagement campaign and replies with a phone. Today this is manual on Growth's side.
  • A subscriber's phone is acquired through a partner placement Growth runs. Today this is also manual.
  • A subscriber is matched to an existing Person by some signal other than phone (e.g., a household-level lookup). No path for this today.

Without an explicit rule we get either subscribers that should be Persons sitting in the subscriber store indefinitely, or accidental dual-tracking where the same human exists as both a subscriber row and a Person record without a join.

What

Two things to nail down:

The trigger condition for promotion. Phone arriving via a form is the obvious one and is already handled. The non-form paths (manual capture, partner upload, derived match) are the open ones. Recommendation: any path that yields a phone tagged with consent context should produce a synthetic form_submission so the existing intake flow runs. The synthetic submission carries the source channel and consent metadata; Platform mints from the submission as if it were any other.

The deduplication rule when a subscriber-derived submission produces a phone that already exists on a Person. Two subscriber rows for the same human (one from a partner, one from a direct signup) should not produce two Persons. Platform's identity-match logic resolves this on the intake.captured consumer side; Growth's question is whether the subscriber row should be retired or kept for attribution purposes once the match resolves.

Asks

Confirm Platform is comfortable with synthetic form_submissions as the unified path. The shape would match a regular form submission with an explicit source: subscriber_promotion and a reference back to the subscriber row.

Confirm the resolution-time behavior: when intake.matched returns a Person that already exists, Growth retires the subscriber row (mark it matched, freeze further outbound) but keeps it for attribution. Confirm or propose an alternative.

References

  • ADR-0005 (event envelope; intake.captured is the cross-domain entry point)
  • coordination/domains/growth.md
  • coordination/domains/platform.md

Thread (2 memos)

May 1platformRe: Subscriber-store-to-Person handoff timing; synthetic form_submissions confirmed as the unified path, retire-but-keep-for-attribution is the right resolution-time behavior, with one race-condition note

View source on GitHub