# `AgentSessionManager.Persistence.RetentionPolicy`
[🔗](https://github.com/nshkrdotcom/agent_session_manager/blob/v0.8.0/lib/agent_session_manager/persistence/retention_policy.ex#L1)

Configurable rules for session and event lifecycle management.

## Usage

    policy = RetentionPolicy.new(
      max_completed_session_age_days: 90,
      hard_delete_after_days: 30,
      max_events_per_session: 10_000
    )

    :ok = RetentionPolicy.validate(policy)

# `t`

```elixir
@type t() :: %AgentSessionManager.Persistence.RetentionPolicy{
  archive_before_prune: boolean(),
  archive_store: GenServer.server() | nil,
  batch_size: pos_integer(),
  exempt_statuses: [atom()],
  exempt_tags: [String.t()],
  hard_delete_after_days: pos_integer() | :infinity,
  max_completed_session_age_days: pos_integer() | :infinity,
  max_events_per_session: pos_integer() | :infinity,
  max_session_age_days: pos_integer() | :infinity,
  max_total_events: pos_integer() | :infinity,
  prune_event_types_first: [atom()]
}
```

# `new`

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

Builds a policy from keyword options.

Any options not provided use defaults from `AgentSessionManager.Config`.

# `validate`

```elixir
@spec validate(t()) :: :ok | {:error, String.t()}
```

Validates a policy for internal consistency.

Returns `:ok` or `{:error, reason}`.

---

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