# `Statifier.Invoke.Handler.Scxml`
[🔗](https://github.com/riddler/statifier-ex/blob/v2.0.0/lib/statifier/invoke/handler/scxml.ex#L1)

The built-in `type=scxml` (and long-URI, `http://www.w3.org/TR/scxml/`)
`Statifier.Invoke.Handler` - `Statifier.Session.Effects.plan_invoke/3`'s
default entry for the built-in type set, not a name it special-cases
(ADR-0051 decision 4).

Every instruction below is exactly what `plan_invoke/3` produced directly
before this module existed, so `Statifier.Session.perform_instruction/3`'s
`{:start_child, ...}` clause, `Statifier.Invoke.Source.resolve/2`, the
6.4.3 child-datamodel seeding, and both process monitors are unchanged -
this module only names the seam they already sat behind.

`cancel/2` and `forward/3` return the same `{:stop_child, _}`/`{:forward,
_, _}` instructions the planner already emits directly today for
`:cancel_invoke`/`:autoforward` effects; the planner does not yet route
through them (that routing is a later phase's work), so as written they
are correct but not yet reachable from `plan/2`. `perform/2` is not
implemented: every instruction this handler returns already has its own
executor clause in `Statifier.Session` (and its own no-op clause in
`Statifier.Replay`), so there is nothing for an impure `perform/2` to do.

---

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