Controls how array values from outputMapper are merged into parent scope.
Fluent helper returned by addDeciderFunction to add branches.
end() sets deciderFn = true — the fn IS the decider.
What one decide() / select() asks the run's rule, answered live as data (RedactionRule.evidenceRule), so
decide/ and filter/ hold neither a rule nor a frame.
Options-bag argument shape for the flowChart() factory.
A single flow control narrative entry.
HandlerDeps — Dependency injection bag passed to all handler modules.
IExecutionRuntime — Interface for the runtime environment.
Minimal logging contract. Mirrors Console API subset.
Resolver that can turn an arbitrary input into a ScopeProvider
A parallel sibling's pause, queued at the level of its fan-out: raised again there once the resumed child's chain ends (see raiseQueuedPause).
One subflow boundary on the way back to a paused stage.
The run's policy: every dial resolved, plus the redaction rule and the mirror flag. Frozen.
Strategy object that creates a scope
Engine-facing capabilities. Never use a strict user-field proxy as this port.
What a condition row keeps of its threshold: the value to store, and whether that value is a hole.
Minimal surface from StageContext (patch-based)
Where a stage's own code may have copied a value from, as data. The rule cannot see what a string or a threshold was built from, so it asks these instead: the taint law (RedactionRule.retainStageText, RedactionRule.serveThreshold).
Picks exactly ONE child by ID. Conditional branch (if/switch).
Alias for SerializedPipelineNode used as full structure
Recursive node execution — avoids circular dep with FlowchartTraverser.
Types of control flow decisions captured by the execution engine.
What the policy says about the value at one user-level path.
Options bag passed to resolve()
Run a stage function. Bound to FlowchartTraverser.executeStage, which is
also where a stage's declarative retry policy is honoured — so a handler
that passes traversalContext gets retry evidence stamped with the right
stage automatically. The parameter is optional purely for compatibility with
hand-written callers; the engine's own handlers always pass it.
Scope Protection Types
Relaxed-generic alias for builder ergonomics.
Serialisable representation of a stage's state (for debugging / visualisation).
Callback that receives tokens during streaming.
Optional strictness for schema-backed providers
Every default, no rule, no mirror — what a bare frame (a unit test's new StageContext) runs under.
Apply output mapping after subflow completion. Writes mapped values back to parent scope using merge semantics: arrays are appended, objects are shallow-merged, scalars are replaced.
Attach standard scope conveniences to an object backed by a real stage context.
Converts a path segment array + leaf value into a nested partial object.
Compute the node type from node properties. Used by RuntimeStructureManager for serialization.
Creates a Proxy over an array that intercepts mutating operations.
Create a new HandlerDeps for subflow execution. Key: sets readOnlyContext to mapped input so StageRunner passes it to ScopeFactory.
Creates a ScopeFactory that produces TypedScope
Evaluates a Prisma-style filter against scope values.
Extract values from parent scope using inputMapper.
Get the initial scope values for a subflow. Always isolated — only inputMapper values are included.
Is value a handle the scope handed out?
Detects if a stage output is a StageNode for dynamic continuation.
True iff ctor is a class that extends ScopeFacade (checks prototype chain)
Joins path segments into a dot-notation string for recorder events.
Heuristic: class constructor vs. plain function
Heuristic: factory function (a function that is NOT a class ctor)
Wrap a class constructor as a ScopeProvider
Wrap an existing factory function as a ScopeProvider
Register a custom scope's engine-facing port and return the SAME scope.
Registration never reads, writes or enumerates properties on scope.
Re-registering explicitly replaces its binding. The descriptor is copied
and frozen; the target itself remains live and belongs to its provider.
Replacing capabilities never retargets an already captured native producer.
Build a run's policy: absent dials take their default; the result is frozen.
Seed the subflow's GlobalStore with initial values. Called before subflow execution to make inputMapper values available.
Returns true if the value should be wrapped in a deep Proxy.
Normalize a factory/class/schema-like input into a ScopeFactory the pipeline expects
value with every handle inside it replaced by the value behind it.
The live value behind a handle; value itself when it is not one. O(1).
Convert a Zod schema object to JSON Schema.
Engine internals. Use them to extend the engine, not to write a chart.
This door holds scopes, traversal, frame policy, redaction and contracts. To write a chart, start at the main door,
footprintjs.