Exit codes
tsr distinguishes "my task failed" from "the runner itself broke" so CI pipelines see the real signal.
| Code | Meaning |
|---|---|
0 | Success. |
| child's code | On task failure, the first failed child's exact exit code is propagated verbatim (1, 2, 130, …). |
64 | Runner-level error. |
What counts as a runner-level error (64)
config parse failure or invalid TOML;
dirandpackagesboth set on a task;an unknown task name, or a dependency cycle;
a
delegatebinary (or any command) that can't be launched;an undefined
$VARreferenced in arunstring;a rejected mini-shell metacharacter (
|,>,*,$(…), …);a
packagespattern that matches no package.
A child code (like 1 or 130) means your task failed. Code 64 means tsr itself couldn't proceed — a config or setup problem, not a test that went red. Pipelines can branch on the difference.
Fail-fast propagation
When several tasks run in a batch and one fails, tsr stops launching new work, kills running siblings, and propagates that child's exact code. In a parallel batch, the reported failure is whichever child exited non-zero first in wall-clock time.