v0.5.0
Product shapes + term-based (registrar-style) products (ADR-0015).
A billing account (org) now sells three product shapes side by side: metered plans, recurring subscriptions, and fixed-term / registrar-style products (domains, hosting terms, certificates).
ProductShape(Metered | Recurring | FixedTerm | OneTime) is a first-class Catalog attribute.Pricegains aTerm(P1Y/P2Y/P5Y) +PriceKind(Register / Renewal / Transfer / Redemption) dimension;Catalog::termPriceFor()resolves the effective, grandfathered (term × kind) price.TermSubscriptioninstances: committed term with a definite end, renew-for-a-term at the Renewal price, auto-renew, per-instance resource metadata, and the registrar lifecycle Active → Grace → Redemption → Expired plus Transfer — many instances per (org, product).- Term purchase / renew / redeem / transfer compose through the existing Quote → Invoice pipeline (tax, seller-of-record, credits, dunning unchanged). Entitlements stay per (org, instance).
- Registry/EPP/DNS provisioning is out of scope — the engine owns the commercial lifecycle only.
304 tests. PHPStan level max, permissive-only, deterministic SBOM.