Run fun.(state) once. The return value drives what happens next:
:ok— advance, state unchanged{:ok, new_state}— advance with new state{:retry, new_state}— retry (ifretries > 0) with new state{:error, reason}— retry (ifretries > 0) else fail flow
Summary
Types
@type backoff() :: :linear | :exponential
@type t() :: %Caravela.Flow.Steps.Run{ backoff: backoff(), base_delay: non_neg_integer(), fun: (map() -> any()), retries: non_neg_integer() }