# StatifierOban v0.1.1 - Table of Contents

> Durable timers and async invoke execution for Statifier, backed by Oban

## Pages

- [StatifierOban](readme.md)
- [Changelog](changelog.md)

- Architecture Decision Records
  - [Architecture Decision Records](adr-index.md)
  - [ADR-0001: Record architecture decisions](0001-record-architecture-decisions.md)
  - [ADR-0002: Host-supplied Oban instance; SQLite-backed test harness](0002-host-supplied-oban-instance.md)

## Modules

- [StatifierOban](StatifierOban.md): Durable timers and async invoke execution for
[Statifier](https://github.com/riddler/statifier-ex), backed by Oban.
- [StatifierOban.Config](StatifierOban.Config.md): Configuration for running Statifier effects on a host-supplied Oban
instance.
- [StatifierOban.Invoke.Delivery](StatifierOban.Invoke.Delivery.md): The delivery seam a completed invoke goes through - the run-liveness
check at the `done.invoke` door, the same shape
`StatifierOban.Timer.Delivery` gives a fired timer.
- [StatifierOban.Invoke.Delivery.Session](StatifierOban.Invoke.Delivery.Session.md): The default `StatifierOban.Invoke.Delivery`: reports a completed invoke
back into a live `Statifier.Session` through
`Statifier.Session.done_invocation/3`, behind the same two-step
liveness check `StatifierOban.Timer.Delivery.Session` runs for a fired
timer.
- [StatifierOban.Invoke.Handler](StatifierOban.Invoke.Handler.md): The Oban-backed base for a `Statifier.Invoke.Handler` implementation:
`use` it and the host's `<invoke type="...">` runs its work in an Oban
job on the host-supplied instance, with completion delivered back into
the run as `done.invoke.<invoke_id>` through
`StatifierOban.Invoke.Delivery`.
- [StatifierOban.Invoke.JobArgs](StatifierOban.Invoke.JobArgs.md): The wire shape between a `%Statifier.Effect.Invoke{}` and the args map
an invoke-handler Oban job stores.
- [StatifierOban.Invoke.Worker](StatifierOban.Invoke.Worker.md): The Oban worker a base-handler invocation becomes.
- [StatifierOban.OpaqueTerm](StatifierOban.OpaqueTerm.md): Tagged `:erlang.term_to_binary/1` payloads for the host-opaque fields a
job's args carry.
- [StatifierOban.Timer](StatifierOban.Timer.md): Consumes `{:send_delayed, %Statifier.Effect.SendDelayed{}}` into a
uniquely-keyed job on the host's Oban instance.
- [StatifierOban.Timer.CancellationKey](StatifierOban.Timer.CancellationKey.md): `{session scope, send_id}` - the key a cancel addresses.
- [StatifierOban.Timer.DedupKey](StatifierOban.Timer.DedupKey.md): `{session scope, ordinal}` - the compact dedup key ADR-0059 decision 3
blesses, read off the stored `%Statifier.Effect.SendDelayed{}`.
- [StatifierOban.Timer.Delivery](StatifierOban.Timer.Delivery.md): The delivery seam a fired timer job goes through - the run-liveness
check st-ADR-0054 decision 4 requires, plus the feed-back itself.
- [StatifierOban.Timer.Delivery.Session](StatifierOban.Timer.Delivery.Session.md): The default `StatifierOban.Timer.Delivery`: feeds a fired event back
into a live `Statifier.Session`, behind the two-step liveness check
statifier-ex's `docs/durable-timers.md` spells out.
- [StatifierOban.Timer.JobArgs](StatifierOban.Timer.JobArgs.md): The wire shape between a `%Statifier.Effect.SendDelayed{}` and the args
map an Oban job stores.
- [StatifierOban.Timer.Key](StatifierOban.Timer.Key.md): Derives the two scoped keys a durable-timer store needs, per ADR-0054
decision 3 as amended by ADR-0059, and `docs/durable-timers.md` ("Keying
your store") in statifier-ex.
- [StatifierOban.Timer.Worker](StatifierOban.Timer.Worker.md): The Oban worker a `%Statifier.Effect.SendDelayed{}` becomes.

