Replaces the implicit Account::booted() observer with an explicit Account::forgetPlanFeatureCache() method called from each plan_id mutation site (StripeEventListener x3, BillingController x2). Self-hosted installs naturally never reach any of these callsites — Stripe webhooks do not fire and the billing controllers redirect to /calendar before any plan mutation happens — so the Pennant flush is now guaranteed to be a cloud-only operation. Adds integration coverage proving the full chain webhook -> plan_id update -> Pennant flush -> next Feature::value resolves against the new plan limit. |
||
|---|---|---|
| .. | ||
| Api | ||
| App | ||
| Auth | ||
| Controller.php | ||