Subscription
Tarif plans, add-ons, subscriptions and a cart-backed checkout — extracted entirely into a plugin; core keeps only invoices.




Model ownership
The subscription models (plan, add-on, subscription, …) live in plugins/subscription/. Core keeps only user, user_details, token and invoice tables — a core invoice has no subscription FK. The link is a SUBSCRIPTION line item whose item_id == subscription.id.
Lifecycle & payments
Payment plugins drive subscription state through the ISubscriptionLifecycle port and the line-item registry — core routes money out as bus events and line items, never by calling the plugin. Activation credits tokens and can grant permissions / user groups via events.
Checkout
Checkout selections are cart-backed: the store derives bundles/add-ons from the persisted fe-core cart (single source of truth), so a selection survives navigation and logout/login. The generic PublicCheckoutView is driven by a checkout-source registry that subscription and shop each populate.