Exit codes
Every way a run can end has its own code, and the set is complete: a pipeline can branch on it.
| Code | Name | Meaning |
|---|---|---|
0 | OK | everything that mattered was assessed and passed |
1 | RUNTIME | certdoctor itself failed |
2 | USAGE | bad invocation syntax or an unknown flag |
3 | CONFIG | flags are valid on their own but contradictory or unsatisfiable |
4 | DIAGNOSIS | the run succeeded and found at least one failure |
5 | INCONCLUSIVE | no failure, but at least one thing could not be assessed |
6 | IO | the report could not be written |
130 | INTERRUPTED | interrupted by the user |
143 | TERMINATED | terminated by the system |
Which of them say something about your machine
4 and 5 are about the machine and the URL under test. 4 means the run succeeded and found at least one FAIL - something on the path to the URL is wrong. 5 means it found no failure, but at least one thing could not be assessed, and the report says which and why. Neither means certdoctor itself went wrong: that is 1.
Warnings
A WARN alone ends with 0. A machine behind a corporate proxy would otherwise end every run in failure while its connection works perfectly. The warnings stay in the report, and in the JSON for a pipeline that wants to decide for itself.
A page made from a saved report
certdoctor --from report.json --format html --out report.html ends with 0 once the page is written, whatever the report found. The run’s own code stays in the report as verdict.exit_code.