core/utils/retry_policy library

Classes

RetryAttemptEvent
RetryExecutor
Runs an action against a RetryPolicy. delayFn/randomFn are injectable (default to real Future.delayed/Random().nextDouble()) so a test drives the whole retry loop deterministically and instantly, never actually waiting real backoff delays — same seam-injection convention as HapticChoreographer's createTimer.
RetryPolicy
Immutable exponential-backoff-with-jitter configuration — no timers, no randomness of its own, just the math. RetryExecutor is what actually runs a retry loop against it.

Enums

RetryOutcome
Why a single attempt/the whole RetryExecutor.run call ended the way it did — passed to onAttempt for observability (logging, a debug overlay, ...).