Console & exit codes
The console reporter is what you see in your terminal when you run tales test. It is human-readable, ANSI-coloured by default, and designed for both interactive debugging and CI log scanning.
What it prints
Section titled “What it prints”Preflight (stderr)
Section titled “Preflight (stderr)”Immediately on startup, before any scenario runs, Tales writes a single line to stderr summarising the load:
tales: loaded 12 scenarios from 5 files; timeout=disabledThis is the line to grep for “did Tales actually find my tests” and “did I forget —timeout”.
Progress events (stderr)
Section titled “Progress events (stderr)”While the runner is in flight, scenario start / end events stream on stderr:
▶ Create blog post▶ Use keyword✔ Use keyword (231ms)✔ Create blog post (842ms)Silence this with --no-progress if your CI swallows stderr.
With --verbose, Tales adds a heartbeat every 30 seconds listing scenarios still running:
heartbeat (30s): 2 scenarios still in flight - Create blog post (running for 32.1s) - SQL preconditions (running for 28.7s)Final report (stdout)
Section titled “Final report (stdout)”After the suite finishes, the full report goes to stdout:
Scenario Create blog post (e2e/pass/blog.tales) PASS in 842ms ✔ create_user POST /users 201 312ms ✔ create_post POST /blog/posts 201 418ms ✔ delete_user DELETE /users/abc 204 112ms (teardown)
Summary: scenarios 12 passed / 0 failed / 0 skipped, steps 47 passed / 0 failedDuration: 1.24sFailed steps include a diagnostic block pointing at the JSON path that mismatched, with want vs got side by side.
| Flag | Effect |
|---|---|
--no-color | Strip ANSI colour codes. Use this when piping to a file or CI log that does not strip them itself. |
--no-progress | Disable scenario start / end progress events on stderr. |
--verbose | Add a 30s heartbeat listing in-flight scenarios. |
Timeout reporting
Section titled “Timeout reporting”If --timeout fires before the suite completes, Tales prints the list of in-flight scenarios so you know exactly what stalled:
tales: global --timeout (5m) exceededin-flight at deadline: - Create blog post (running for 5m0s)The exit code is 1 in this case (treated as a failure).
Exit codes
Section titled “Exit codes”CLI exit codes are part of the public contract. CI pipelines can rely on them.
| Code | Meaning |
|---|---|
0 | All scenarios passed (skipped also counts as ok). |
1 | At least one scenario failed. |
2 | Parse or validation error. |
3 | Runtime or reporting fatal error. |
Pairing with machine-readable reports
Section titled “Pairing with machine-readable reports”The console reporter is always on. To also emit structured outputs for CI dashboards, add one or more of:
--report-junit <path>, JUnit XML for Jenkins, GitLab CI, etc.--report-jsonl <path>, newline-delimited JSON event stream.--report-html <path>, single-file visual HTML report.
See CI integration for end-to-end recipes.