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

Trace payload for `{:trace, %__MODULE__{}}` - emitted alongside
`Statifier.Effect.Done` at top-level final entry / `exit_interpreter`
(`docs/observability.md` constraint 2's "done" row). `donedata` and
`configuration` mirror the core `:done` effect's payload - both effects
are built from the same `configuration_at_exit` binding in
`Statifier.Interpreter.exit_interpreter/1`, so they can never disagree.
This effect exists for the observability row (ADR-0012,
`docs/observability.md:68`), not because it is the only carrier of the
configuration.

Built with `new/2`, never a struct literal, so `macrostep`/`microstep`/
`round` are always stamped from the `Statifier.MachineState` at hand.

# `t`

```elixir
@type t() :: %Statifier.Effect.Trace.Done{
  configuration: MapSet.t(non_neg_integer()),
  donedata: term() | nil,
  macrostep: non_neg_integer(),
  microstep: non_neg_integer(),
  round: non_neg_integer()
}
```

# `new`

```elixir
@spec new(machine_state :: Statifier.MachineState.t(), fields :: keyword()) :: t()
```

Stamps `macrostep`/`microstep`/`round` from `machine_state` and sets
`fields` (`:configuration`, optional `:donedata`).

---

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