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
- 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.
- 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
0or1, or the stringstrue,false,1or0without regard to case. - Two strings compare without regard to case, and anything else must be equal in both type and value.
- 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:
{"value": true, "branches": [{"name": "Yes", "value": true}, {"name": "No", "value": false}]}["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.