# `Continuum.Activity.Policy`
[🔗](https://github.com/Yyeger/Continuum/blob/main/lib/continuum/activity/policy.ex#L1)

Validated, normalized execution policy for an activity call.

Retry limits include both execution timeouts and backoff delays, so a policy
cannot silently schedule work beyond its configured retry horizon.

# `t`

```elixir
@type t() :: %Continuum.Activity.Policy{
  backoff: :constant | :exponential,
  base_ms: non_neg_integer(),
  idempotency_key: binary() | nil,
  max_attempts: pos_integer(),
  max_backoff_ms: non_neg_integer(),
  max_retry_horizon_ms: pos_integer(),
  timeout_ms: pos_integer()
}
```

# `max_timeout_ms`

```elixir
@spec max_timeout_ms() :: pos_integer()
```

Returns the largest supported per-attempt timeout in milliseconds.

# `normalize!`

```elixir
@spec normalize!(keyword()) :: t()
```

Normalizes and validates activity execution options.

# `retry_options`

```elixir
@spec retry_options(t()) :: keyword()
```

Returns the canonical retry keyword stored with durable activity work.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
