Exit 2 currently carries two unrelated meanings:
- the codified honest lane — unusable input/charter, a first-class cannot-adjudicate verdict that
SKILL.md tells agents to route to a human without retrying
- an ordinary argparse usage error — e.g.
dmcheck --zzz-not-a-real-flag → exit 2
The two are distinguishable only by whether stdout happens to contain JSON.
An agent obeying SKILL.md escalates its own malformed invocation to a human as if it were a ruling — when the correct response is to fix the call and retry.
For contrast, srdcheck separates these cleanly: bad flags return 3, documented as "a usage/internal error (fix the call), never a verdict."
Suggested fix: move usage errors off exit 2 (srdcheck's exit-3 convention is the family precedent), or document the disambiguation rule explicitly in SKILL.md so agents can classify reliably.
Severity is deliberately low: the honest lane still works, and the JSON envelope disambiguates for anyone parsing stdout. Filed so it is not rediscovered.
Found by a conformance audit of the check-family four (srdcheck, charactercheck, dmcheck, table-kit) against FAMILY.md v1 on 2026-08-17. Audited at working-tree HEAD, which was 1–3 commits ahead of origin/main and 0 behind, so absences hold for main. Every claim below was verified by execution or by git grep across all local heads, then independently re-derived by a second pass instructed to refute it.
Exit 2 currently carries two unrelated meanings:
SKILL.mdtells agents to route to a human without retryingdmcheck --zzz-not-a-real-flag→ exit 2The two are distinguishable only by whether stdout happens to contain JSON.
An agent obeying
SKILL.mdescalates its own malformed invocation to a human as if it were a ruling — when the correct response is to fix the call and retry.For contrast, srdcheck separates these cleanly: bad flags return 3, documented as "a usage/internal error (fix the call), never a verdict."
Suggested fix: move usage errors off exit 2 (srdcheck's exit-3 convention is the family precedent), or document the disambiguation rule explicitly in
SKILL.mdso agents can classify reliably.Severity is deliberately low: the honest lane still works, and the JSON envelope disambiguates for anyone parsing stdout. Filed so it is not rediscovered.
Found by a conformance audit of the check-family four (srdcheck, charactercheck, dmcheck, table-kit) against
FAMILY.mdv1 on 2026-08-17. Audited at working-tree HEAD, which was 1–3 commits ahead oforigin/mainand 0 behind, so absences hold formain. Every claim below was verified by execution or bygit grepacross all local heads, then independently re-derived by a second pass instructed to refute it.