Known trade-offs
JWT access tokens are stateless#
Revoking a client does not invalidate tokens that were already issued. They expire naturally after 15 minutes.
If you need immediate revocation, add a revocation check in middleware.ts. The cost is a lookup on every request, which is exactly why it is not the default.
Quota enforcement is reactive#
The tool call executes before usage is reported. Under high concurrency a user can briefly exceed quota.
If you need hard enforcement, add a pre-call quota check in middleware.ts. The cost is latency on every call and a second failure mode before any work happens.
Where the open question still is#
Webhook out-of-order delivery is the one decision that is not fully closed. Stripe does not guarantee ordering, so a subscription update can arrive after the cancellation that supersedes it. The Dev.to write-up covers where that stands.
Related: security decisions, billing decisions.