FlowDrop Workflow Specification 1.0-draft

Exposure checking is skipped per endpoint, not per edge

Skipping the whole edge would let one broken end hide a real fault at the other. Each end is judged on its own, so an edge can carry a dangling-source error and a hidden-target error at once.

The rule

Normative: this is the rule
  1. Where an edge endpoint cannot be judged for exposure (its handle cannot be parsed, the node it names is empty or absent, or that node's node type does not resolve), R7 is skipped for that endpoint only.
  2. The edge's other endpoint is still checked.
  3. A node whose node type is unknown is reported by R9, a node whose node type resolves but whose executor is missing by R1, and a node with no node type anchor by neither; in all three cases R7 itself stays silent.

What it means

A broken edge is not one verdict. Each endpoint is judged on its own facts, so an edge whose source node has vanished and whose target port is hidden earns both complaints at once: R8's missing-source error and R7's hidden-target error, side by side, not one swallowing the other. The same independence runs the other way: an endpoint R7 cannot judge (an unparseable handle, an absent or unresolvable node, a node type that will not resolve) drops out of R7's count silently, while the surviving endpoint is still checked in full. R7 never reports on a node it could not resolve — an unknown node type is R9's error, a resolvable type with no executor is R1's, and a legitimate anchor-less node earns neither.

Example

An edge whose source node no longer exists and whose target port is hidden:

An edge with a missing source and a hidden targetreported
{
  "id": "e1",
  "source": "ghost",
  "sourceHandle": "ghost-output-result",
  "target": "t",
  "targetHandle": "t-input-value"
}
The two errors this one edge producesboth kept
["R8_EDGE_SOURCE_MISSING", "R7_EDGE_TARGET_NOT_EXPOSED"]

Neither error stands in for the other: dropping the source lookup would still leave the hidden port unreported, and vice versa.

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 · R7.e/f · changed in spec 1.0