StatechartInput:
    | {
        event: unknown;
        id: NodeId;
        region: "conflict";
        state: unknown;
        time: GraphTime;
    }
    | {
        event: unknown;
        id: NodeId;
        region: "resource";
        state: unknown;
        time: GraphTime;
    }

Region-tagged input envelope for BackendEngine.evaluateStatechart.

Each variant pins the region's (state, event, time, id) quadruple structurally. The state and event slots are typed as unknown here because:

  1. The canonical typed shapes for the regions (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).
  2. Callers on the @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.