ReadonlyfromSource state tag as the chart names it. For the conflict region
this includes the synthetic 'unknown' tag (the registry has
never observed the id); the chart itself has no Unknown state.
ReadonlyidThe node id the event targeted.
ReadonlyregionWhich orthogonal region the rejection comes from.
ReadonlytoTarget state tag the rejected event would have moved to.
Structural description of a forbidden statechart transition.
Remarks
Mirrors the
ForbiddenTransitioninterface from@causl/sync/src/statechart-reducers.tsexactly so the seam's input/output types are structurally interchangeable with the TS reducers' public shape. The tuple(region, from, to, id)is enough for a wiring shell to construct a public typed error and enough for a future Rust port (issue #1068'sengine-rs-corestatechart_reducersenums, gated behindfeature = "future") to map the rejection onto its own enum without rewriting the decision logic.Kept structural (not a class, not a thrown value) so the reducer stays a pure function. The shell decides whether to throw; the reducer decides whether the chart permitted the edge.
See
BackendEngine.evaluateStatechartextension point.