Statifier.Effect.Cancel (Statifier v2.0.0)

Copy Markdown View Source

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.

Summary

Types

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

t()

Types

owner()

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

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

t()

@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()
}