urlopen raises on 5xx, which bypassed the retry budget¶
http_transport originally let urllib raise. urlopen raises HTTPError on 4xx and
5xx, so a retryable 500 from Qt propagated as a fatal exception and the retry logic in
gerrit._get never saw it, despite 500 being in its retryable set. The transport now
returns (status, headers, body) for error responses too, which is what makes the budget
and Retry-After handling real rather than decorative.