Mirrors the TS reducers' TransitionResult<S> DU. The ok arm
carries the next state structurally (typed as unknown here
because the BackendEngine seam is region-agnostic; callers narrow
by region tag on input); the forbidden arm carries enough
metadata for the wiring shell to construct the appropriate typed
error. The method never throws — exception-based control flow
does not translate cleanly to a future Rust port where the
natural shape is Result<State, ForbiddenTransition>.
Discriminated result returned by BackendEngine.evaluateStatechart.