Why
Exit codes are file-local sequential checks, not a global table. A blocking gate that demanded every nonzero code appear in that script's README would false-positive or require a large backfill. Size the gap first.
Invariant (not a global code list)
Every nonzero exit that is a named check (not FATAL 1, not smoke 0 / 1 / 77) is documented in that script's own README.
Constraints
- Exclude FATAL
sys.exit(1) in __main__ wrappers.
- Exclude the smoke protocol (
tests/smoke/run_example.py fail=1, canary_skip.py / self-skip examples = 77).
- Report mode first against all 54 examples. Do not fail CI until the backfill size is known.
- Do not build this in the same change that first wrote the convention (
CONTRIBUTING.md Exit codes / Blender smoke sections).
Out of scope
Renumbering any code. A repo-wide meaning for 3 or 9. Changing export-preset-axis.
Why
Exit codes are file-local sequential checks, not a global table. A blocking gate that demanded every nonzero code appear in that script's README would false-positive or require a large backfill. Size the gap first.
Invariant (not a global code list)
Every nonzero exit that is a named check (not FATAL
1, not smoke0/1/77) is documented in that script's own README.Constraints
sys.exit(1)in__main__wrappers.tests/smoke/run_example.pyfail=1,canary_skip.py/ self-skip examples = 77).CONTRIBUTING.mdExit codes / Blender smoke sections).Out of scope
Renumbering any code. A repo-wide meaning for
3or9. Changingexport-preset-axis.