Payload for {:done, %__MODULE__{}} - the terminal effect
exit_interpreter (Appendix D) produces once, after top-level final
entry, when Statifier.MachineState.status becomes :done. donedata
is the top-level final's resolved <donedata> content, or :undefined
(the SCXML datamodel's "undefined" value) when the final carries none.
donedata_error is that resolution's failure channel (ADR-0021's
2026-09-02 note): nil when the donedata resolved cleanly and nil
for a bare final that declared none, and otherwise the data of the
error.execution the resolution raised. Without it, donedata: :undefined is the same value for a failed <content expr> and for a
final carrying no <donedata> at all, because
exit_interpreter/1 discards the internal queue the raise landed in
before returning. A <donedata> whose <param>s fail can raise more
than one; this field carries the first in document order, and the
rest are still lost with the queue.
configuration is the full configuration (ADR-0005, ancestors
included) as it stood at exit: the full set, so a consumer can
observe the terminal position without switching tracing on, since
MachineState.configuration is empty by then and
Statifier.active_leaf_states/1 correctly reports nothing active. See
Statifier.Interpreter.exit_interpreter/1.
There is no c_index: this effect is produced by exit_interpreter
itself, not by one executable-content node. macrostep/microstep/
round are the counters as they stand at the moment of termination. See
Statifier.Effect.Trace.Done for the trace-effect counterpart, built from
the same configuration_at_exit binding.
Summary
Types
@type t() :: %Statifier.Effect.Done{ configuration: MapSet.t(non_neg_integer()), donedata: term() | nil, donedata_error: term() | nil, macrostep: non_neg_integer(), microstep: non_neg_integer(), round: non_neg_integer() }