Context
Loyalty, Messaging and CRM all need contact profiles, identities, consents, behavioral events and segments. Building these inside any one module couples the others to it and forces refactors when new modules need segments.Decision
A fourth bounded contextcustomer-core (schema core) owns: contacts, identities, merges, consents, tracked_events, segments, attribute definitions, event taxonomies, plus platform cross-cutting tables (currencies, national_id_types, audit_log, usage_snapshots, processed_jobs, dead_letters). Dependency rules (enforced by dependency-cruiser): loyalty/messaging/crm MAY import core; core NEVER imports them; they NEVER import each other — communication only via domain events (outbox).
Consequences
- Any future module consumes profiles/segments without touching loyalty. + Single owner for PII/compliance surface. − One more context to govern; core changes need cross-module review.