Failed jobs carry a machine error_code plus a short message in result. Retryable failures re-queue with tiered backoff; only bad_request is non-retryable. Jobs that run past a per-mode wall-clock limit are reaped as timeout.
Full taxonomy: Error codes.