Graph & Execution
How a graph is represented and executed — topology, typed values on wires, state, firing order, and how it is run across many episodes (batch eval).
Membership test: does this page define part of how a graph is represented or executed — topology, typed values on wires, state, firing order, or how that execution is driven across many episodes (batch eval)? If not, it belongs in a sibling group or stays flat at design-docs/ root.
ADR fields covered: dataflow + executor + eval.
Graph System
GraphDefinition, dual storage (graphs/ + graph_nodes/), explorer, API
Wire Type System
The typed-port registry, the compatibility rule, LIST[T], colours, serialisation
State Containers
Visible shared memory — reducers, lifetimes, access grants (not wires), graph_state
Graph Executor
Node firing, iteration, the after-loop verdict — the runtime engine
Loop Control System
The two-sided iterIn / iterOut pivots, scopes, nesting, loop-carry & stop
Backend Overview
The "you are here" map — per-process singletons (ProcessServices, WorkspaceComponentRegistry, NODE_HANDLERS) + per-run objects, and who owns whom
Why a Component Registry
The argument from code — binds node-type strings to handlers + owns the env servers; why batch eval can't skip it
Execution Paths
Canvas Play & Batch Eval — the class stack behind every run, converging on LoopRunner → GraphExecutor
Canvas Play
The interactive single-run path — in-process, single-tenant, fire-and-forget, live WS streaming + pause / checkpoint / restore
Batch Eval System
Two processes, JobScheduler admission, replicated-spawn vs shared-borrow — executing a graph across many episodes