Most Stripe billing bugs get described as webhook bugs.

Did the event arrive? Did the signature verify? Did the handler return 200? Is the handler idempotent? Can we replay failed events?

Those are good questions. But they miss another one:

Does the access state in your app match the billing state in Stripe right now?

That check is final-state reconciliation.