FlowDrop Workflow Specification 1.0-draft

An outcome matching no branch is loud, never a silent gate-off

A gateway whose configured branches do not cover the value it produced used to emit a branch name no port carried, gating off everything downstream with nothing said. The target is that this cannot happen quietly.

The rule

Normative: this is the rule
  1. A gateway's branch authority is its configured branches, each an entry pairing a name with a value; an entry whose name is not a non-empty string is discarded before any matching.
  2. Matching an outcome to a branch is type-aware and never a loose cast: a boolean outcome matches only a branch whose configured value denotes a boolean: a boolean, the integer 0 or 1, or the strings true, false, 1 or 0 without regard to case.
  3. Two strings compare without regard to case, and anything else must be equal in both type and value.
  4. A gateway must not emit a branch name that no port of the node carries: where no configured branch matches the outcome, either the gateway declares a default branch port that receives it, or the node fails with an error output that an error edge can route (ERR-7).

What it means

A gateway's configured branches, not the value it happens to emit, decide which output port is real: an entry without a usable name is dropped before any comparison runs, so it can never be matched or emitted. Matching an outcome against what survives is deliberately not a loose cast — a boolean outcome matches only a branch whose configured value actually denotes a boolean (a real boolean, 0/1, or the strings true/false/1/0), because treating any non-empty string as truthy would let a boolean match a branch configured with an unrelated string. Strings compare without regard to case; anything else must agree in both type and value.

Where nothing configured matches, the gateway is not free to fall back to whatever it would have said with no configuration at all: it must either declare a default branch that receives the outcome, or fail with a routable error. A name that answers to no port silently gates off everything downstream, with nothing said.

Example

A gateway configured with branches named Yes and No, given a true outcome:

The gateway's inputs: the outcome and its configured branchesconfigured
{"value": true, "branches": [{"name": "Yes", "value": true}, {"name": "No", "value": false}]}
The active_branches outputemitted
["Yes"]

The renamed port, not a hardcoded true, is what leaves the gateway — an edge drawn from Yes is the only one that can be reached.

Why

Recorded under OPEN-15.

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