Surfaced by CodeRabbit on #48 (client.rs ~L245-261). Pre-existing — engine original client.rs:257 carries the same needle; ported unchanged.
retryable_transport_error matches the substring "request failed", and both HTTP-status bail messages contain it — so 400/401/403/404 retry three times with backoff. An invalid API key produces a retry storm; the explicit 429/502/503/504 needles are dead.
Fix: classify on the status value (carry it in the error) or at minimum rename the transport-failure message so it no longer collides.
Surfaced by CodeRabbit on #48 (
client.rs~L245-261). Pre-existing — engine originalclient.rs:257carries the same needle; ported unchanged.retryable_transport_errormatches the substring"request failed", and both HTTP-status bail messages contain it — so 400/401/403/404 retry three times with backoff. An invalid API key produces a retry storm; the explicit 429/502/503/504 needles are dead.Fix: classify on the status value (carry it in the error) or at minimum rename the transport-failure message so it no longer collides.