Each variant pins the region's (state, event, time, id) quadruple
structurally. The state and event slots are typed as unknown here
because:
ConflictReducerState / ConflictEvent / ResourceReducerState
/ ResourceEvent) live in @causl/sync, not @causl/core —
the BackendEngine seam cannot import them without inverting the
package dependency direction (sync → core, not the reverse).@causl/sync side already hold typed values
and narrow next from the result. The structural unknown
is a width-typing concession at the seam, not a type-erasure
at the call site.The wire shape — { region: 'resource' | 'conflict', state, event, time, id } — is the same the cross-backend determinism gate
(#685) will JSON-roundtrip when comparing the JS and WASM
backends' outputs for byte-equality.
Region-tagged input envelope for BackendEngine.evaluateStatechart.