- Shipped
- August 11, 2026 at 12:49 AM UTC
- Author
- Kamo
- Commit
- 2b0f443
Stripe Prices are immutable and the mapping holds one row per (org, type, code, cycle) behind a unique key, so once a price existed it could never change. A price edit was a permanent no-op on revenue, and nothing reported it. StripePriceReconciler compares every mapped price against what the catalog now says and, when asked to, points the mapping at a fresh Stripe Price with the old one archived — archived rather than deleted, because Stripe keeps billing an archived price for subscriptions already on it and refuses it for new ones, which is exactly the behaviour wanted. Metering is carried across, so a metered price cannot come back unmetered and silently stop billing usage. It deliberately does not move existing subscribers onto the new price. Silently re-pricing a live customer because someone edited a catalog row is a charge nobody authorised; whether to grandfather them is a commercial decision, and the fact that it was never a decision is what was missing. The count still on the old price is reported instead. Exposed report-only by default at GET **************** with the repoint behind an explicit POST.