OptionalbranchOptionalbudgetOptionalchildrenOptionalconvergeSTRUCTURE-ONLY: for a fork/selector/decider branch, the downstream stage
id its convergence next edge points to, instead of the shared next-stage
its siblings converge at. Set from SubflowMountOptions.convergeAt; read by
_fireNextEdgeFromParent to express an unequal-depth merge (e.g. tools →
call-llm, bypassing message-api). Visualization-only — runtime convergence
is unchanged.
OptionaldescriptionOptionalhasOptionalhasOptionaliconSemantic icon hint for visualization (e.g., "llm", "tool", "rag", "agent", "start")
OptionalisTrue for an addParallelForEach fan-out — one branch per item, count
decided at runtime. A flag, not a type: type stays 'fork' so existing
consumers keep rendering it as the fan-out it is.
OptionalisTrue when this subflow uses lazy resolution (deferred until execution).
OptionalisTrue when this node is a back-edge reference created by loopTo() — not an executable stage.
OptionalisOptionalisWhen true, this stage can pause execution (PausableHandler pattern).
OptionalisOptionalisOptionaliterationOptionalloopOptionalnextOptionalparallelOptionalretryTotal attempts this stage's function may run, from its declared
RetryPolicy. Present only when a policy was declared — the COUNT
only, because backoffMs and retryOn can be functions and a JSON-safe
spec cannot carry those.
Read it from the BUILT spec (chart.buildTimeStructure / toSpec()), not
from a StructureRecorder.onStageAdded event: the .retry() modifier is
chained AFTER the stage is added, so the event fires first. That is why
there is no retryAttempts discriminator on the event payload — it would
be undefined at fire time for exactly the stages that have a policy.
OptionalstreamOptionalsubflowOptionalsubflowOptionalsubflowNested pipeline structure for a subflow node.
WARNING: Any future walker that traverses this field recursively must apply its own
depth and cycle guards across both the next chain and this nested structure.
Chart OpenAPI generation reads the builder-prepared description, not this graph.
OptionaltagsDeclared tags (9.21.0) — the NAMES the author put on this stage at build
time, copied as-is (JSON-safe, free strings; footprintjs owns no
vocabulary). The Map advertises what a chart CAN produce; the commit
bundle (CommitBundle.tags) records which a run DID hit. Absent when the
stage declares none. Same read-it-from-the-built-spec caveat as
retryAttempts: .tag() is chained AFTER onStageAdded fires.
OptionaltimeoutThe cap on ONE attempt of this stage, from its declared RetryPolicy
(timeoutMs). Present only when declared. With retryAttempts it is what
bounds the stage in time: at most retryAttempts × timeoutMs plus the
waits between attempts (timeBudget). Same read-it-from-the-built-spec
caveat as retryAttempts.
OptionaltouchesThe outside system this stage changes (.touches(system, …), 10.1) — the
NAME only; the key rule is a function and stays on the node. Present only
when declared. Same read-it-from-the-built-spec caveat as retryAttempts.
The chart's declared time budget (
.budget(ms)), on the ROOT spec only — the most milliseconds a caller gives one run.build()refused the chart if its declared policies could already take longer. Absent when undeclared.