# `Autonomic.Store`
[🔗](https://github.com/nshkrdotcom/autonomic/blob/v0.1.0-autonomic/lib/autonomic/contracts.ex#L563)

Authoritative persistence contract for episode, epoch, lease and effect state.

# `advance_epoch`

```elixir
@callback advance_epoch(Autonomic.Contracts.episode_id(), map()) ::
  {:ok, Autonomic.Contracts.epoch()} | {:error, term()}
```

# `append_event`

```elixir
@callback append_event(Autonomic.Contracts.episode_id(), atom(), map()) ::
  {:ok, non_neg_integer()} | {:error, term()}
```

# `current_epoch`

```elixir
@callback current_epoch(Autonomic.Contracts.episode_id()) ::
  {:ok, Autonomic.Contracts.epoch()} | {:error, term()}
```

# `fetch_effect`

```elixir
@callback fetch_effect(Autonomic.Contracts.effect_id()) ::
  {:ok, Autonomic.ProposedEffect.t()} | :not_found | {:error, term()}
```

# `fetch_lease`

```elixir
@callback fetch_lease(Autonomic.Contracts.lease_id()) ::
  {:ok, Autonomic.CapabilityLease.t()} | :not_found | {:error, term()}
```

# `put_effect`

```elixir
@callback put_effect(Autonomic.ProposedEffect.t()) :: :ok | {:error, term()}
```

# `put_lease`

```elixir
@callback put_lease(Autonomic.CapabilityLease.t()) :: :ok | {:error, term()}
```

---

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