# `Jido.Messaging.Onboarding.StateMachine`
[🔗](https://github.com/agentjido/jido_messaging/blob/v1.0.0/lib/jido_messaging/onboarding/state_machine.ex#L1)

Deterministic onboarding state transitions with persisted idempotency.

# `transition`

```elixir
@type transition() :: :resolve_directory | :pair_identity | :complete | :cancel
```

# `transition_result`

```elixir
@type transition_result() :: %{
  :onboarding_id =&gt; String.t(),
  :transition =&gt; transition(),
  :previous_status =&gt; atom(),
  :status =&gt; atom(),
  :idempotent =&gt; boolean(),
  :classification =&gt; :ok,
  optional(:completion_metadata) =&gt; map() | nil
}
```

# `allowed_transitions`

```elixir
@spec allowed_transitions(atom()) :: [transition()]
```

Returns valid transitions for a status.

# `transition`

```elixir
@spec transition(Jido.Messaging.Onboarding.Flow.t(), transition(), map(), keyword()) ::
  {:ok, Jido.Messaging.Onboarding.Flow.t(), transition_result()}
  | {:error,
     {:invalid_transition,
      %{
        from: atom(),
        transition: transition(),
        allowed: [transition()],
        class: :fatal
      }}}
```

Apply a validated transition to a flow.

---

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