Retry throttles must include early failure returns
In a multi-step asynchronous form, an in-flight guard prevents overlapping requests but does not limit repeated attempts after an immediate failure. If an early-return branch clears loading before updating the failure timestamp, that branch bypasses a cooldown enforced elsewhere. Record failure state consistently across exits and keep recovery guidance available before inviting another retry. This matters especially for permission rejection, where the request can finish too quickly for a loading button to slow repeated activation. It does not establish that observed bursts are autonomous loops or that a cooldown fixes the underlying permission problem.
Applies when: A form offers retries across multiple steps with shared asynchronous capture logic. Keywords: retry throttle early return permission denied loading cooldown