VISION DOMAIN
Entitlements
Owns ACCESS — derives entitlements from billing state. Payment success grants access, dunning restricts it, usage thresholds enforce quotas. 29 nodes in the knowledge graph.
The entitlements reference covers the existing service (entitlements-migrate), the queryEntitlements API used by ~50 product consumers, and the GRANTED/HELD/NONE derivation model.
Smart Checkout gates entitlements on payment confirmation, not subscription creation. This is the key shift — today, entitlements are granted when the subscription is created (before payment). After live payment ships, entitlements are granted when payment succeeds.
Entitlements derived from domain events — payment.succeeded, dunning.consequence, usage.threshold — rather than Stripe subscription state.
Maps billing atoms (plan, add-on, usage tier) to product capabilities (features, quotas, rate limits). No unified model exists today.
Entitlements never initiate billing actions. They react to outcomes from every other domain and translate them into access decisions. Everything upstream getting cleaner makes downstream derivation more reliable. Entitlements improve automatically as other domains mature.
Entitlements are the output of the billing system, not a component of it. Make the inputs clean and the outputs follow.