--- id: ERR-1 family: RT-ERR level: core profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-err/err-1 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # ERR-1 — A node-level failure becomes an error output, not a thrown failure *RT-ERR (Part II) · level: core · profiles: runtime · added in 1.0* The error edge is a data channel, not an exception channel. A node that fails in a routable way still finishes; the verdict travels on its output. ## The rule > **Normative.** This is the rule. > > 1. A failure a node signals as a node-level error is converted into an error-status output for that node and does not propagate out of the node. > > 2. The node's lifecycle is reported as completed, not failed; it finished, and the error verdict rides its output. ## What it means A failure a node signals in a routable way never shows up as a failed node. The node's own lifecycle record reports it as completed — the same status a node that raised nothing at all would report — because the node did finish; only the value on its output carries the verdict. A reader expecting the node's own status to reflect the failure will read the trail backwards: `failed` is reserved for a failure that escapes the node altogether (ERR-3), never for one that converted cleanly. Where the node also has an error edge, ERR-7 governs what happens to that output next. ## Example A node raises an ordinary failure inside its own run. ```json title="The status trail broadcast for the node's own run" verdict="completed" ["running", "completed"] ``` The trail never reaches `failed`; that status is reserved for a failure that escapes the node entirely, not one converted to an output. ## Related rules - Names: ERR-3, ERR-7 - Referenced by: ERR-3, ERR-4, ERR-5, ERR-6 --- Rule identifiers are permanent and are never renumbered. This specification carries no implementation status: each implementation publishes its own standing against these rules. Licensed CC BY 4.0.