Repository navigation
feat: FAMILY.md v2.2 harmonises exit 3; gate can see codes above 3 - #89
Merged
Merged
Conversation
Two halves of one problem, surfaced by chaoz23/charactercheck#18. CONTRACT. v2.1 said "srdcheck's exit 3 is the family precedent", which was too weak to settle what a member should do when 3 is already spent. v2.2 states the pattern outright: 0/1/2 are the universal verdict contract, >= 3 is the no-verdict taxonomy, and 3 is usage error in EVERY member. A malformed call is the one non-verdict outcome every tool has, so harmonising it means an agent that mis-invokes any member gets the same answer. Further outcomes take 4+. charactercheck therefore moves could-not-retrieve from 3 to 4 rather than taking a different usage code. Decided deliberately over the cheaper option of letting it keep 3 and putting usage on 4: that would have left the family with two spellings for the concept an agent hits most often. GATE. parse_skill capped recorded codes at 0..3, so a documented exit 4 was silently dropped -- and the CLI returning 4 then surfaced as a bogus UNDOCUMENTED_EXIT_CODE against a tool that had documented itself correctly. The gate would have rejected the very refactor the contract now requires. That is the third time this parser has been the defect rather than the tools it checks (line-vs-paragraph in #82, stream-word matching in #84). The shape repeats: the checker silently cannot perceive the thing it is checking. Verified both directions: a synthetic 0/1/2/3/4 SKILL.md now parses all five with honest-lane=2 and usage=4, and all four real SKILL.md files parse unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
charactercheck is harmonising onto exit 3 for usage errors (chaoz23/charactercheck#18). The waiver comes out before the fix lands, as the ratchet requires; the SHA pin keeps charactercheck's CI green in the meantime. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves the decision blocking chaoz23/charactercheck#18. Two halves of one problem.
Contract: v2.2
v2.1 said "srdcheck's exit 3 is the family precedent" — too weak to settle what a member should do when 3 is already spent. v2.2 states the pattern outright:
>= 3as not a verdict — read the payload.3is usage error in every member. A malformed call is the one non-verdict outcome every tool has, so harmonising it means an agent that mis-invokes any member gets the same answer.4and up, named in the tool's own SKILL.md.charactercheck moves could-not-retrieve from 3 to 4. Decided over the cheaper alternative of letting it keep 3 and putting usage errors on 4 — that would have left the family with two spellings for the outcome an agent hits most often. Harmonising costs a breaking change in one repo; not harmonising costs every future caller.
Gate: it could not see exit 4
parse_skillcapped recorded codes at0 <= code <= 3. A documented exit 4 was silently dropped — and the CLI returning 4 then surfaced as a bogusUNDOCUMENTED_EXIT_CODEagainst a tool that had documented itself correctly.The gate would have rejected the very refactor the contract now requires.
0/1/2/3/4SKILL.md[0,1,2,3], exit 4 dropped[0,1,2,3,4], honest-lane=2, usage=4[0,1,2,3][0,1,2,3]— unchangedThird time this parser has been the defect rather than the tools it checks (line-vs-paragraph in #82, stream-word matching in #84). The shape repeats exactly: the checker silently cannot perceive the thing it is checking. Worth remembering before adding a fourth rule to it.
Next
chaoz23/charactercheck#18 does the refactor: usage errors → 3, could-not-retrieve → 4, with
SKILL.md,tool.json, theactionfield anddoctorupdated to match. Then its waiver comes out of the baseline.Suite: 711 passed.
🤖 Generated with Claude Code