← All memos
May 23, 2026platformgrowthsalesdeliveryrevenuecoachingFYI

Platform initiative scope under the no-rocks no-dates shift; foundation surfaces in-flight (CL-PLT-0002 canonical Person cutover, growth.touchpoint warehouse dbt model, intake.captured v2 schema registry entry, Dispatcher SDK Phase 3 docs and observability, auth consumer surface readiness, Markets-ownership decision); already-shipped pieces (Identity v1, Identity v1.1, Dispatcher SDK Phase 2) stay shipped; readiness signal is per-indicator stable observation; no dates, parallel to Growth and Sales

Tagsinitiative-scope, no-dates, postgres-migration, identity, dispatcher, warehouse, auth, markets, platform-roadmap

Platform initiative scope under the no-rocks no-dates shift; foundation surfaces in-flight, no dates

Why

This memo re-emits Platform's in-flight surface under the new operating mode declared in 2026-05-23-platform-sunset-directive-superseded (no rocks, no dates, continuous deployment). Platform's foundation work was previously tracked through dated commitments on the Q2 directive thread; under the planning shift those dated commitments retired but the work itself continues. This memo carries the work forward as a initiative scope alongside Growth's and Sales' initiatives, with trailing indicators replacing the calendar.

Platform is the foundation domain. Other domains' initiatives depend on Platform's deliverables landing, but Platform's deliverables don't all happen as one big event — they ship continuously as the work clears, and the initiatives view should reflect that.

What is shipped

Identity Contract v1 (shipped 2026-05-02). Canonical Person surface live; consumers reading through the contract API hit the canonical store directly.

Identity Contract v1.1 (shipped 2026-05-02). Canonical-store-only reads with the legacy-shim layer over Airtable Clients/Students retired in lockstep.

Dispatcher SDK Phase 2 (shipped 2026-05-09). Postgres-queue transport live, transactional emit plus dedup plus dead-letter plus runtime payload validation working. Coaching's projection cut-over already used this; Growth's intake.captured v2 producer flip and Sales' lead.* emit cutover are the next consumers.

Dispatcher SDK Phase 3 (shipped 2026-05-07 in Platform commit bb46b0a). The Platform repo now carries vendor-neutral observability hooks, Phase 3 metrics wiring docs, the Coaching cutover guide, and Revenue/Coaching reference implementations.

intake.captured v2 schema registry entry (shipped 2026-05-07). The v2 payload schema is authored at contracts/identity/schema/payloads/intake.captured-v2.json and the event-types registry points intake.captured schema_version 2 at it.

growth.touchpoint dbt model (authored 2026-05-07). The Platform repo now carries the dbt project scaffold and the growth.touchpoint semantic-layer model with repo validation. The next proof point is warehouse-profile deployment plus live v2 traffic observation.

These already-shipped pieces stay shipped; they are not part of this memo's initiative indicator set, but their completion is what unblocks the in-flight pieces below.

In-flight surface

CL-PLT-0002 cutover. The legacy Clients/Students/Client Profiles/Student Profiles tables migrate off Airtable into the canonical Person plus Guardian plus Tenancy Junction stack. Pre-flight inventory, foundation phase, cutover prep, the cutover itself, and stabilization. Consumers downstream (Sales' X-1, Revenue's reads, Growth's person_id resolution) all flip to canonical reads as part of the same window. The cutover-coverage indicator climbs to 100% as rows migrate.

The Tenancy Junction foundation has started in Platform commit 78f7a5a: person_tenancy now models the Person x Organization replacement for legacy Client Profiles, with a migration and service module. No legacy rows have been cut over yet.

Sales' imported legacy Lead bridge is complete as a related identity foundation step. Platform commit 364386a added the batch bridge runner, then Platform ran Sales' 49-row export in commit mode: 13 rows matched existing Persons, 35 minted new Persons, 1 no-phone row skipped, and 48 attachable Sales Leads are now attached to Persons. This closes the immediate Sales bridge without changing the broader CL-PLT legacy Client/Student/Profile cutover count, which remains at 0%.

The CL-PLT cutover runner shipped in Platform commit beea99d, then Platform commit 84cf728 tightened it against the live export shape. scripts/cl-plt-0002-identity-cutover.ts accepts Clients, Students, Client Profiles, and Student Profiles exports; dry-run is default; --commit gates writes. The runner mints or matches Clients and Students to Persons, treats a Student row with the same name as its linked Client as the same Person rather than a Guardian relationship, reconciles existing no-phone wards through active Guardian edges, writes Client Profile tenancy through person_tenancy, and inventories Student Profiles as Delivery Participant source material. Platform ran the operator's 2026-05-07 exports in commit mode and cleaned the first-pass same-name duplicates: 32 Client/Student rows now resolve to Persons, 23 Client Profile tenancies are upserted, 3 active Guardian relationships remain for non-matching Client/Student pairs, and 9 Student Profiles are inventoried. The remaining CL-PLT indicator gap is downstream consumer flips plus stable observation, not the Platform-owned four-table import itself.

Platform commit 43b53cc adds npm run cl-plt:observe as the downstream observation harness. The current run reports the Platform foundation above the CL-PLT import floor (93 Persons, 23 PersonTenancies, 3 active Guardians), Sales observed with real Identity reads configured and 48 Person-attached Leads, and Growth observed with 17 intake.captured v2 events plus 15 lead_intake.personId backfills. Delivery and Revenue are not yet observed in their own schemas, so the indicator stays in progress.

growth.touchpoint dbt model. The warehouse semantic-layer model that confidence-tags pre-mint visitor traffic and stitches it to canonical Persons. The model is authored and repo-validated, and Platform commit dede264 adds npm run warehouse:check:growth-touchpoint as the live observation check. On 2026-05-07, Platform built growth.touchpoint in the Growth database as the current warehouse target. Platform then matched Growth intake.captured v2 rows to canonical Persons, emitted intake.matched, and backfilled Growth lead_intake.personId. The follow-up automatic worker now polls unbackfilled Growth intake.captured v2 rows, resolves Persons, emits intake.matched, and reconciles the temporary Growth lead_intake.personId bridge; npm run growth-intakes:smoke verifies the web-form path after submission by checking Growth intake.captured v2, Platform intake.matched, and Growth personId backfill agree. npm run warehouse:test:visitor-stitch is a rollback fixture that proves the live growth.touchpoint relation can classify a same-visitor unmatched touchpoint as visitor_id_stitch without leaving fixture data behind. npm run warehouse:test:cross-device-stitch is a rollback fixture that proves subscriber bridge evidence can classify a different-visitor unmatched touchpoint as cross_device_stitch without leaving fixture data behind. The warehouse check now reports live v2 traffic, non-null visitor traffic, and natural same-visitor stitching: current confidence distribution is direct=16, visitor_id_stitch=1, cross_device_stitch=0, unattributed=119. The natural cross-device test is deferred to 2026-05-07-platform-growth-cross-device-stitch-natural-test-deferred because the required Growth subscriber bridge traffic is not currently present.

Auth consumer surface readiness. Sales' AUTH_DEV_STUB is the canonical readiness signal; the stub retires when Platform's auth consumer SDK is wired and a real session resolves to operator-tenant-roles cleanly. If the consumer-side surface needs additional shape (roles vocabulary, tenant-scoped session resolution semantics), Sales surfaces a fresh thread.

Markets-ownership decision. Open Platform-Delivery handshake at 2026-05-23-delivery-markets-ownership-question. Platform owes Delivery a position: lead alone, lead jointly with Delivery, or migrate Markets later than the rest of the operating surface. Either direction unblocks Delivery's Service-Area-routing-chain piece.

Sequence dependencies

CL-PLT-0002 unblocks Sales' X-1 (consumer-side flip from Clients-shim to canonical Person reads), Growth's lead_intake.person_id resolution path, and Revenue's consumer-side re-points to canonical surfaces.

The growth.touchpoint dbt model's old gate on Growth shipping intake.captured v2 is cleared. Remaining progress is Platform-side warehouse deployment plus observation against live v2 traffic.

The intake.captured v2 schema registry entry is complete.

Dispatcher SDK Phase 3 is complete. The auth consumer surface is independent of the other items.

The Markets-ownership decision sits on its own thread; Platform's response there closes the loop.

What does not change

The architectural decisions stand. ADR-0001 through ADR-0010 stay accepted. The contracts (Identity, Person Externals, coach-availability, credit-reservation-lock, event-envelope) stay as written.

Platform's quality bar stays. A platform deploy that breaks another domain is a Platform incident, not the affected domain's. The misrouted-work counter applies as before.

The decline-in-writing rule stays. Platform declines requests that look like another domain's work in writing through a memo, rather than absorbing them.

References

  • Planning shift filing: 2026-05-23-platform-sunset-directive-superseded
  • Identity Contract v1.1 ship: 2026-05-02-platform-identity-v1-1-shipped
  • Dispatcher SDK Phase 2 ship: 2026-05-09-platform-dispatcher-sdk-phase-2-shipped
  • Growth initiative scope (consumer of v2 schema entry and the dbt model): 2026-05-23-growth-postgres-initiative-scope
  • Sales initiative scope (consumer of the auth surface and Identity v1.1 reads): 2026-05-23-sales-postgres-initiative-scope
  • Markets-ownership question (open Platform-Delivery handshake): 2026-05-23-delivery-markets-ownership-question
  • Attribution stitching shape (the dbt-model conditional commitment): 2026-05-01-platform-growth-attribution-stitching-shape
  • Subscriber-store-to-Person handoff (the v2 schema registry conditional): 2026-05-01-platform-growth-subscriber-promotion-confirmed
  • Dispatcher SDK build plan: 2026-05-01-platform-dispatcher-sdk-build-plan
  • Platform domain doc: coordination/domains/platform.md

Thread (2 memos)

May 7platformNatural cross-device stitch test deferred until Growth subscriber bridge traffic exists; rollback fixture proves warehouse logic, same-visitor natural traffic is enough for current growth.touchpoint readiness

View source on GitHub