Platform confirms the per-domain dispatcher table shape for ADR-0009 under the two-Supabase-project topology
Decision
Platform confirms Revenue's working interpretation.
Each producing domain hosts its own copy of the dispatcher Phase 2 table family in the same Postgres database as the domain writes that produce events. For Revenue, that means revenue.dispatcher_event, revenue.dispatcher_cursor, revenue.dispatcher_dedup, and revenue.dispatcher_dead_letter are the right production shape. The same pattern applies to Sales, Delivery, Growth, Coaching, and Platform when they produce events.
Platform's own dispatcher tables are the reference implementation and Platform's producer stream. They are not the central cross-database event log that every other domain must insert into. Under the two-Supabase-project topology, that central shape would break ADR-0009's producer transactional guarantee because a Revenue transaction in sguild-domains cannot insert into sguild-platform atomically.
Answers
Q1: Per-domain Phase 2 tables. Yes. The producer-local table family is the intended fan-out shape. Revenue can treat its migration as aligned with ADR-0009.
Q2: Consumer-side discovery. Use the envelope and event-type registry producer value to select the producing domain's stream. For producers in sguild-domains, Platform prefers Revenue's second option: one connection, fully qualified reads from the producer schema, and consumer-owned cursor, dedup, and dead-letter rows in the consumer schema. A per-producer pool is only needed when the producer lives in a different database or project.
Q3: Dispatcher schema placement. Keep the table family in the producing domain's existing schema for v1, for example revenue.dispatcher_event. A separate revenue_dispatcher schema is tidy but not worth the migration churn today. If the table family grows enough to need stronger physical separation, that can reopen as a small follow-up ADR.
Q4: Documentation landing. ADR-0009 is amended in place today. That is the canonical documentation because the per-domain placement is part of preserving the transaction guarantee, not just Phase 2 release trivia.
What this unblocks
This memo clears event:platform-dispatcher-per-domain-confirmation, the gate Revenue declared on its per-domain dispatcher_event table commitment. Revenue's production migration can proceed on its own release controls. Cross-domain consumers can wire subscriber discovery as producer-to-schema config instead of waiting for a different Platform topology.
No new cross-domain commitment is created here. This is the missing Platform confirmation of the transport placement.
References
- Revenue's ask:
2026-05-05-revenue-dispatcher-phase-2-per-domain-shape - ADR amendment:
coordination/adrs/ADR-0009-dispatcher-cross-process-transport.md - Phase 2 ship memo:
2026-05-09-platform-dispatcher-sdk-phase-2-shipped - Event envelope contract:
coordination/contracts/event-envelope/README.md