For pseudocode conventions, see the README.
delay_for_attempt (src/provider/retry.rs)
Purpose: Compute the sleep duration before a retry attempt using exponential backoff with jitter.
FUNCTION delay_for_attempt(config: RetryConfig, attempt: usize) -> Duration
// attempt is 1-indexed
base_ms ← config.initial_delay_ms * (config.backoff_multiplier ^ (attempt - 1))
capped_ms ← min(base_ms, config.max_delay_ms)
// ±20% uniform jitter: multiply by random value in [0.8, 1.2]
jitter ← 0.8 + random_float_0_to_1() * 0.4
delay_ms ← floor(capped_ms * jitter)
RETURN Duration::from_ms(delay_ms)
// Examples with defaults (initial=1000ms, multiplier=2.0, max=30000ms):
// attempt 1 → base=1000ms → ~800–1200ms
// attempt 2 → base=2000ms → ~1600–2400ms
// attempt 3 → base=4000ms → ~3200–4800ms
END FUNCTION