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

Trace payload for `{:trace, %__MODULE__{}}` - emitted with
`compute_entry_set`'s result, before any state is entered
(`docs/observability.md` constraint 2's "entry set" row). `indexes` are
the states to be entered (constraint 3, integer indexes), in entry order.

`configuration` is the full configuration (ADR-0005, ancestors included)
as it stands *after* every state in `indexes` has been added, including
the parallel entry ordering `enter_states/2` performs, so a consumer can
render the configuration per microstep without folding deltas.
It is deliberately the only field taken from the post-entry state;
`macrostep`/`microstep`/`round` are stamped from the state as it stood at
the phase boundary the payload names, which is what keeps this payload an
"entry set" marker rather than an after-the-fact report.

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.EntrySet{
  configuration: MapSet.t(non_neg_integer()),
  indexes: [non_neg_integer()],
  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` (`:indexes`, `:configuration`).

---

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