@@ -10,6 +10,37 @@ between minor releases. |
| 10 | | 10 | |
| 11 | ## [Unreleased] | 11 | ## [Unreleased] |
| 12 | | 12 | |
| | 13 | +### Fixed |
| | 14 | + |
| | 15 | +- **PRO08 Pro tier GA audit remediation.** Thirteen audit findings |
| | 16 | + across the Stripe webhook layer, subscription state machine, and |
| | 17 | + Pro v1 feature gates: webhook receipts now record (subject_kind, |
| | 18 | + subject_id) for operator queries; the cross-kind price guard |
| | 19 | + refuses subscription events with empty `Items.Data`; concurrent |
| | 20 | + webhook replays serialize via a session-scoped advisory lock; the |
| | 21 | + snapshot CTE preserves grace-lock columns under `past_due` |
| | 22 | + transitions instead of wiping them; subscription-overwrite guard |
| | 23 | + refuses to repoint a principal's bound subscription id at a |
| | 24 | + different one; reverse-ordered (stale) Stripe events are dropped |
| | 25 | + via a new `last_event_at` column; `customer.subscription.deleted` |
| | 26 | + for unknown subjects is now a 200 no-op so Stripe stops retrying. |
| | 27 | + Charge refunds flip invoices to `status='refunded'` with UI |
| | 28 | + surfacing on both user and org billing pages (new |
| | 29 | + `billing_invoice_status='refunded'` enum value + `refunded_at` |
| | 30 | + column). Advanced branch protection gate rewired to fire on the |
| | 31 | + PRO01-ratified inputs (`prevent_force_push`, `prevent_deletion`, |
| | 32 | + `require_signed_commits`) rather than only on required status |
| | 33 | + checks — `require_signed_commits` is now exposed in the rule |
| | 34 | + form (visible toggle; underlying enforcement ships with commit |
| | 35 | + signing). Multi-reviewer denies carry a distinct upgrade copy |
| | 36 | + (`required-reviewers-multi-upgrade(-pro)`) and user-tier denies |
| | 37 | + point at `/settings/billing` instead of the org settings page. |
| | 38 | + `profilePinsRemaining` now respects the entitled cap for Pro users. |
| | 39 | + Migrations 0077 (`last_event_at`) and 0078 (`refunded` enum + |
| | 40 | + `refunded_at` column) ship with the fix. Audit closure in |
| | 41 | + `docs/internal/billing.md`; runbook updates in |
| | 42 | + `docs/internal/runbooks/stripe-billing.md`. |
| | 43 | + |
| 13 | ### Added | 44 | ### Added |
| 14 | | 45 | |
| 15 | - **Personal Pro tier feature gates (PRO07).** Pro v1 lights up four | 46 | - **Personal Pro tier feature gates (PRO07).** Pro v1 lights up four |