# `Continuum.Telemetry`
[🔗](https://github.com/Yyeger/Continuum/blob/main/lib/continuum/telemetry.ex#L1)

Telemetry event names emitted by Continuum.

Continuum uses the `:telemetry` package directly. Event names are stable
lists under the `[:continuum, ...]` prefix and metadata always includes the
most specific identifiers available for the transition, such as `:run_id`,
`:task_id`, `:timer_id`, `:signal_name`, `:owner`, or `:lease_token`.

## Runtime events

  * `[:continuum, :run, :started]`
  * `[:continuum, :run, :suspended]`
  * `[:continuum, :run, :completed]`
  * `[:continuum, :run, :failed]`
  * `[:continuum, :run, :cancelled]`
  * `[:continuum, :run, :lease_lost]`
  * `[:continuum, :run, :forwarded]`
  * `[:continuum, :run, :unknown_version]`
  * `[:continuum, :patched, :hit]`
  * `[:continuum, :compensation, :scheduled]`
  * `[:continuum, :compensation, :started]`
  * `[:continuum, :compensation, :completed]`
  * `[:continuum, :compensation, :failed]`
  * `[:continuum, :child, :started]`
  * `[:continuum, :child, :completed]`
  * `[:continuum, :child, :failed]`
  * `[:continuum, :run, :continued_as_new]`
  * `[:continuum, :activity, :scheduled]`
  * `[:continuum, :activity, :started]`
  * `[:continuum, :activity, :completed]`
  * `[:continuum, :activity, :failed]`
  * `[:continuum, :activity, :idempotency_hit]`
  * `[:continuum, :activity, :retried]`
  * `[:continuum, :activity, :fenced]`
  * `[:continuum, :timer, :scheduled]`
  * `[:continuum, :timer, :fired]`
  * `[:continuum, :signal, :awaited]`
  * `[:continuum, :signal, :delivered]`
  * `[:continuum, :signal, :received]`
  * `[:continuum, :lease, :acquired]`
  * `[:continuum, :lease, :renewed]`
  * `[:continuum, :lease, :lost]`
  * `[:continuum, :dispatcher, :polled]`
  * `[:continuum, :dispatcher, :claimed]`
  * `[:continuum, :activity_dispatcher, :polled]`
  * `[:continuum, :activity_dispatcher, :claimed]`
  * `[:continuum, :activity_dispatcher, :requeued]`
  * `[:continuum, :recovery, :completed]`
  * `[:continuum, :snapshot, :taken]`
  * `[:continuum, :snapshot, :skipped]`

Measurements are intentionally small and conventional: most events emit
`%{count: n}` or `%{duration_ms: n}` when there is a meaningful number,
otherwise `%{}`.

Activity and compensation lifecycle metadata includes `:executor`, either
`:builtin` or `:oban`. Oban-backed attempts also include `:oban_job_id`.

When a Postgres-backed `await signal(...)` consumes a signal that was already
pending in the durable mailbox, Continuum emits `[:continuum, :signal,
:received]` without a preceding `[:continuum, :signal, :awaited]`; there was
no suspended await period to bracket.

## OpenTelemetry bridge

`Continuum.OpenTelemetry.setup/1` can attach an optional bridge that turns
the run and activity lifecycle events above into OpenTelemetry spans. The
bridge is opt-in and uses runtime checks, so Continuum compiles and runs
without OpenTelemetry packages installed.

# `events`

```elixir
@spec events() :: [[atom()]]
```

Returns all documented telemetry event names.

---

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