A nightly dbt build --no-fail-fast finishes with this summary line. The two WARN results are generic tests configured with severity: warn. Which statement regarding this run is true?
- The 6 SKIP nodes are every node that had not started when the error occurred.
- The 6 SKIP nodes are all downstream of the node counted in ERROR.CORRECT
- The 2 WARN results are tests that returned failing rows at default severity.
- The 2 WARN results each skipped the models downstream of them.
WHY
The summary line buckets every selected node exactly once, and the four counts sum to TOTAL (41+2+1+6=50). SKIP counts nodes dbt never executed because something they depend on did not succeed — the build docs state that a failure blocks downstream resources and causes them to 'skip entirely' (e.g. if model_b depends on model_a and a unique test on model_a fails, model_b will SKIP). Here only one node is counted in ERROR, and the two WARN results come from tests set to severity: warn, which the same page says is how you stop a test from causing skipping. Fail-fast is explicitly off — --no-fail-fast sets the flag to false at the CLI, which takes precedence over any environment variable or dbt_project.yml setting — so nodes were only skipped for dependency reasons, not because dbt stopped early. So the only blocking failure in the run is the ERROR node, and all 6 skipped nodes are its descendants (directly, or through another skipped node). That is what a non-zero SKIP buys you when triaging: it is a count of unrun work traceable to an upstream failure, not of work that ran badly.
WHY THE OTHERS ARE WRONG
- The 6 SKIP nodes are every node that had not started when the error occurred.
- That describes fail-fast behavior, which this invocation explicitly disables: --no-fail-fast sets the fail_fast flag to false at the CLI, and CLI options take the highest precedence over environment variables and dbt_project.yml. With fail-fast off, dbt keeps executing nodes that do not depend on the failed one, so SKIP=6 is the count of that node's descendants, not the count of everything left in the run.
- The 2 WARN results are tests that returned failing rows at default severity.
- Default severity is error, not warn: a test that returns failing rows at default severity is a failure and lands in the ERROR bucket. A result only lands in WARN when severity is warn, or when the failure count clears warn_if but stays under error_if.
- The 2 WARN results each skipped the models downstream of them.
- Warn-severity tests are exactly the case the build page says does not cause skipping — its advice for 'don't want a test to cause skipping?' is to adjust severity or thresholds to warn instead of error. The two WARN results therefore did not themselves block anything downstream. Whether a given model below them ran still depends on its other ancestors: one that also depends on the ERROR node is among the 6 SKIPs.