FlowDrop Workflow Specification 1.0-draft

A hidden output's value never reaches anything downstream

Stripping is the first thing that happens to a result, which is what makes the invariant hold rather than nearly hold. A value removed before anything else looks at it cannot leak through a checkpoint, a job record, or a tool result.

The rule

Normative: this is the rule
  1. Exposure stripping (EXPO-11) runs before any other handling of a node's result: before the unified output port is composed, before the result is checked for serializability, before it is wrapped for delivery, and before it is written to run records, checkpoints, real-time updates, or returned as a tool result.
  2. A hidden output's value therefore never reaches any of them, and a value on a hidden port that could not be serialized never fails the node.

What it means

Stripping is not one check among several that a node's result passes through; it is the first thing that happens to it. Everything else that looks at a node's output — the unified port that bundles values into one object, delivery to run records, checkpoints, real-time updates, a tool result — reads the already-filtered result, never the raw one. That ordering is what makes "a hidden output never reaches anything downstream" a fact about every one of those destinations at once, rather than something each would have to enforce for itself.

The unified port is the case worth naming, because composing it looks like a separate step that could plausibly run first: it is built from whatever the result holds by the time composition runs, so if stripping ran after composition a hidden value would still be sitting inside it even though its own port was empty.

Example

A node produces a value on a port the node type hides, and the workflow exposes the unified output port that bundles every visible output into one object.

What the node producedproduced
{"result": "ok", "ssn": "123-45-6789"}
The composed unified outputcomposed
{"output": {"result": "ok"}}

The hidden ssn value never appears inside output either — composition worked from the result stripping had already produced.

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-14 · changed in spec 1.0