When is an error definitely a permanent failure?

By permanent failure I mean that resending the exact same request would produce the same error. Basically, I was mainly unsure about 400 (Bad Request) which I thought only happened for genuinely bad requests, but Claude AI stated it could possibly also happen due to timeout. So I guess it's plainly wrong, and 400 really means it's non-retryable? Maybe it got confused because of this thread: X-Pack -"Monitoring: Error 400 Bad Request: Request Timeout after 60000ms"