Webhook and authorization hardening
Two fixes worth naming rather than burying.
The Stripe webhook now verifies signatures over the exact bytes Stripe sent, instead of over a re-serialized copy of the parsed body — re-serializing reorders keys and changes whitespace, which is enough to make a valid signature check pass on payloads it should not have.
Authorization checks on the portal-facing routes were tightened so that membership of an organization is verified per resource rather than inferred.
No user action is needed; both were shipped server-side.