Changelog
A hard stop on cards the network refuses
CardChase now reads the issuer's own advice code alongside the decline code and the raw network response code. When any of the three says permanent — a hard decline, do_not_try_again, or a response code the networks class as "issuer will never approve" — the charge stops for good and the customer moves to a queue for a human.
It is a branch with a test, not a setting: every code is asserted by name, so nothing can quietly re-open one.
A retry cap that cannot be configured past the ceiling
Four retries per customer, per failed charge, and the setting is clamped so no account can reach the 15-reattempts-in-30-days ceiling the card networks set. Typing a bigger number gets you the ceiling, not the number.
The kill window covers the retry too
Approving no longer sends: it stages. Both the retry against the card and the note to the customer wait behind the same window, and the dispatcher re-runs the whole gate at the moment of release — because an authorization cannot be recalled once the issuer has seen it.
Stripe Billing, read directly
Failed subscription charges come straight out of the account you already bill from — the invoice, the subscription, the decline codes and the card brand — with no export and no second system of record.