There are cases like
where we assume we can call
r.json() when the server response may not be JSON (this is essentially a certainty for 500 errors for example). The retries will hide this at the moment because they're not picky about the exception type, but if there is a real server error that needs to get propagated to users, this behavior will obfuscate it.
Plan: go through code and fix places where we assume a JSON response in abnormal conditions.