Event passed to FlowRecorder.onRunStart / onRunEnd.
Brackets the top-level executor.run() call. Subflows have their own
pair (onSubflowEntry / onSubflowExit); the run pair is the OUTERMOST
boundary, so consumers building "every step has an in/out" views can
close the chain at the top level.
onRunStart payload → the input passed to run({input})
onRunEnd payload → the chart's return value
Both are retained at runtime before dispatch/deferred capture using the
run's RedactionRule (retainBoundary): own string keys at every depth (by
name or dotted path) and explicit nested fields. Scalars pass through; fork
child-ID envelopes need explicit paths such as fields: { childId: ['result.secret'] }.
Values are not scanned. Live execution inputs and return values stay unchanged.
Event passed to FlowRecorder.onRunStart / onRunEnd.
Brackets the top-level
executor.run()call. Subflows have their own pair (onSubflowEntry/onSubflowExit); the run pair is the OUTERMOST boundary, so consumers building "every step has an in/out" views can close the chain at the top level.onRunStartpayload → the input passed torun({input})onRunEndpayload → the chart's return valueBoth are retained at runtime before dispatch/deferred capture using the run's RedactionRule (
retainBoundary): own string keys at every depth (by name or dotted path) and explicit nested fields. Scalars pass through; fork child-ID envelopes need explicit paths such as fields: { childId: ['result.secret'] }. Values are not scanned. Live execution inputs and return values stay unchanged.