OptionalchannelExplicit channel discriminant — 'scope' on every engine-dispatched
event. isFlowEvent() checks it first (backlog B3); optional so
consumer-fabricated events (tests, replays) remain type-valid and fall
back to the legacy pipelineId-presence heuristic.
Optional ReadonlycorrelationThe run's correlation (10.1) — the same frozen object as TraversalContext.correlation on the flow events
and getSnapshot().correlation. Absent — no key — when the run's env gave none.
What the recorder threw, in the structured form (9.39.0): message and
name read as before; raw is the thrown value itself (an Error, a
string, anything). One shape on every path — until 9.38.0 the inline
paths passed the raw thrown value and the deferred tier a new Error(...).
OptionalkeyUnique per-execution-step identifier. Format: [subflowPath/]stageId#executionIndex
Stable stage identifier (matches spec node id).
A recorder threw in a scope-channel hook (
operationsays which kind: a read, a write, or a commit hook). Delivered to every recorder on the scope channel, inline and deferred alike (recorder/hooks.ts · recorderFailureEvent).