Exit codes

Every way a run can end has its own code, and the set is complete: a pipeline can branch on it.

CodeNameMeaning
0OKeverything that mattered was assessed and passed
1RUNTIMEcertdoctor itself failed
2USAGEbad invocation syntax or an unknown flag
3CONFIGflags are valid on their own but contradictory or unsatisfiable
4DIAGNOSISthe run succeeded and found at least one failure
5INCONCLUSIVEno failure, but at least one thing could not be assessed
6IOthe report could not be written
130INTERRUPTEDinterrupted by the user
143TERMINATEDterminated 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.