Keep paid batch work out of a request. A timeout loses the result; the retry pays again.
logic/correctness
One status code, symptom or error branch is produced by several different causes, but the handler — a catch block, a retry classifier, an operations checklist — treats it as always meaning one cause and applies that cause's fix, so the other causes get the wrong handling: a temporary failure ends retries, or an operator is sent to a harmful repair.
Every 401 is handled as 'token expired, refresh it'; a locked account also returns 401, so the client refreshes in an endless loop.
The information to tell the causes apart is there; the rule collapses them. Not diagnostics thrown away (Discarded Failure Diagnostics), not a cancellation treated as failure (Swallowed Cancellation), and not a normaliser merging distinct empty inputs (Empty states lose their meaning).