Branching and short-circuit
Why is skipped a third value, and how does the default join rule turn it into a green, empty run?
Branching, conditional execution and short-circuit
Branching turns a static graph into a family of graphs, one chosen at run time. It is cheap to implement. It also brings in the three-valued logic described in Graphs and time.
Skipped is a third value
After a branch, a task can end as success, failure or skipped. Skipped is truly a third value. It is not failure (nothing went wrong) and not success (nothing was produced).
The bug generator is the join: a task after a branch, with the default "all predecessors succeeded" rule, sees a skipped predecessor and skips itself. The skip spreads transitively to the end of the graph, the run is reported green, and nothing ran. Every orchestrator has this bug report filed again and again. That shows the default rule is wrong for joins specifically. It does not show that users are careless.
The cost of adaptivity
Branching defeats static analysis of the graph. Before the run you can no longer compute the critical path (the longest chain of dependent tasks), the expected resource use, or the set of outputs that will be produced. Anything that wanted to plan against the DAG shape (cost estimates, capacity reservation, DAG-aware scheduling) degrades to a guess. Simplicity versus adaptivity has a precise price here: adaptivity costs the plannability of everything upstream of the decision.
Short-circuit
Short-circuit is the degenerate branch: evaluate a predicate, skip the rest. Its honest use is to guard against no-op runs (no new data, nothing to do). Its dishonest use is to suppress failures: skipping a step because its input is missing turns a detectable error into a green run with no output. A skip and a failure look the same in the output table and completely different in alerting. That is why "skip when input is absent" is the most dangerous conditional in common use.
Branching introduces a third terminal value, and the default join rule mistakes it for consent — the graph goes green while nothing runs.