Cashier locks customers out on day 0 of the retry window

Cashier 16.9.0 has no handler for invoice.payment_failed and treats past_due as inactive, so valid() is false from the first failed renewal while Stripe's recommended Smart Retries window runs for up

The same predicates treat paused as valid, so choosing Stripe's pause outcome keeps granting access unless you block that status yourself.

A past_due_since column set from the event's created time, plus a ladder of full access for 7 days, read-only to day 14, then blocked, matched Stripe's retry window in a 21-day timeline test.

Read the full post

Read the full post