# `Statifier.Effect.Cancel`
[🔗](https://github.com/riddler/statifier-ex/blob/v2.0.0/lib/statifier/effect/cancel.ex#L1)

Payload for `{:cancel, %__MODULE__{}}` - spec 6.3's `<cancel>`. `send_id`
is the `sendid`/`sendidexpr` attribute naming the delayed send to cancel;
resolving it against the pending `SendDelayed` timers is
`Statifier.Session`'s job.

`c_index` identifies the `<cancel>` content node (constraint 3, never a
compiled content-node struct); `owner` names which block emitted the
cancel (the same gap `Statifier.Effect.Log`'s own moduledoc describes for
`c_index` alone). `macrostep`/`microstep`/`round` are the counters
as they stood at the moment of the cancel.

`ordinal` is a per-execution sequence number minted from
`Statifier.MachineState`'s session-global `timer_counter` (ADR-0059). It is
what makes a durable host's dedup key per-instance where the counter triple
and the content position cannot - two iterations of a `<foreach>` body
execute the same content node, in the same microstep, under the same
author-written id, and only `ordinal` tells them apart. It replays
identically because the counter is pure fold state.

`caller_context` is the opaque host term the current macrostep's
triggering external event carried (ADR-0063), copied off
`Statifier.MachineState`'s transient slot at construction - `nil` when
no context was attached. Both durable-timer effects carry it, not just
the send: the same store processes both, and the cancellation act wants
the same attribution as the firing (ADR-0063 decision 2). Row data
beside the key, never a key component (decision 6); the library never
reads the value.

# `owner`

```elixir
@type owner() :: Statifier.Machine.Content.owner()
```

Which block emitted the cancel - `Statifier.Machine.Content.owner/0`.

# `t`

```elixir
@type t() :: %Statifier.Effect.Cancel{
  c_index: non_neg_integer() | nil,
  caller_context: term(),
  macrostep: non_neg_integer(),
  microstep: non_neg_integer(),
  ordinal: pos_integer(),
  owner: owner() | nil,
  round: non_neg_integer(),
  send_id: String.t()
}
```

---

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