Control outputs are never stripped
The rule
Normative: this is the rule
- The reserved control outputs
active_branchesandstate_updateare never removed from a node's result by exposure stripping. - They are the engine's own channel, not ports an author shows or hides, and branching and state merging depend on them arriving intact.
What it means
Control outputs are exempt from every lever that strips an ordinary port — the node type's own default, an instance override, all of it. They are not something an author shows or hides at all; they are the engine's own channel, and branching and state merging depend on them arriving whole every time, whatever exposure a workflow otherwise records for that node.
Example
A node's type marks every one of its outputs — active_branches,
state_update, and an ordinary port — hidden, and the workflow's own
instance override hides state_update again on top of that: the least
favourable exposure available for all three.
{"state_update": {"iterator": {"index": 1}}, "active_branches": "true", "debug": "internal trace"}{"state_update": {"iterator": {"index": 1}}, "active_branches": "true"}debug, an ordinary output hidden the same way, is the one key stripping
removes.
Rule identifiers are permanent and are never renumbered. Each implementation publishes its own standing against these rules; this specification does not.spec 1.0-draft · EXPO-12 · changed in spec 1.0