Two additive, backward-compatible features (resolve within ^0.8).
Plan retirement / sunset (ADR-0016). A plan can carry a PlanRetirement (retiresAt cutoff + optional defaultSuccessorPlanId). At a subscription's next renewal on/after the cutoff it resolves: the subscriber's scheduled successor plan, a scheduled cancel, or the default successor — else UnresolvedRetirement and renew refuses (deny-by-default: never charges a retired plan). No grandfathering; no one loses paid time. PlanRetirementResolver + RetirementRenewalPolicy.
Shared retention seam. Cbox\Billing\Retention — CancellationSurvey + RetentionOffers contracts, a SaveOffer VO (FreeMonth | Discount | Pause | Downgrade | Custom, each mapping to an existing billing lever), CancellationReason/CancellationResponse, and SubscriptionCancellationRequested/SaveOfferAccepted/RetentionResolved events. Null defaults keep it a plain cancel until a host/plugin binds the rich flow.
395 tests. PHPStan level max, permissive-only.