An interrupt propagates unchanged
An interrupt is a request for something outside the run (human input, an external resolution), not a failure. Treating it as one would route it down an error edge.
The rule
Normative: this is the rule
- A node that interrupts sets its status to interrupted, the interrupt is announced, and the interrupt itself propagates unchanged to the caller.
- It is never converted into an error output and never takes an error edge.
What it means
An interrupt is not a third kind of failure sitting between ERR-1 and ERR-3 — it gets its own status, distinct from both, and it must reach the caller as the exact object the node raised, not wrapped or replaced, because whatever resolves the interrupt needs its own identity intact. That identity is read from whatever attached itself to the interrupt along the way, not fixed by the node itself: a run with nothing attached still pauses, carrying empty identity fields rather than failing where a stricter reading might expect one.
Example
["running", "interrupted"]{"interrupt_id": "", "interrupt_type": ""}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 · ERR-4 · changed in spec 1.0