Repository navigation
docs: SKILL.md named the wrong stream for every envelope - #17
Merged
Merged
Conversation
SKILL.md:37 told consuming agents "Failures print JSON on stderr, never a traceback." Every dmcheck envelope goes to stdout. stderr is empty. Verified across all three verdict paths, not just the failing one: clean session exit 0 stdout 894B stderr 0B findings exit 1 stdout 3867B stderr 0B unreadable input exit 2 stdout 423B stderr 0B bad flag exit 2 stdout 0B stderr 512B (argparse, no envelope) Mechanism: cli.py:74-77, _print_invalid uses print(). An agent that followed the file read stderr for the failure payload and found nothing -- an exit code with no envelope, indistinguishable from a crash. This broke the recovery path silently rather than degrading it. The replacement also disambiguates the exit-2 overload tracked in #15, since the probe made the rule obvious: exit 2 with an envelope on stdout is the honest lane; exit 2 with empty stdout is a malformed call. Detected as STREAM_MISMATCH by chaoz23/srdcheck's family conformance gate. Closes #13 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.
Closes #13.
The defect
SKILL.md:37told consuming agents:Every dmcheck envelope goes to stdout. stderr is empty.
An agent that followed the file read stderr for the failure payload and found nothing — an exit code with no envelope, indistinguishable from a crash. This broke the recovery path silently rather than degrading it, which is why it was the highest-impact finding in the family audit.
Verified across all three verdict paths, not just the failing one
I checked every envelope rather than the one that surfaced the bug, so the replacement claim is true of the whole contract and not just the case I happened to probe:
Mechanism:
dmcheck/cli.py:74-77—_print_invalidusesprint().The replacement
It also disambiguates the exit-2 overload tracked in #15, because the probe made the rule obvious:
That does not close #15 — the codes are still overloaded, and separating them is a code change. It does mean an agent can now tell the two apart correctly in the meantime.
Docs only
No code change, and no test asserts
SKILL.mdcontent (grep -rln 'SKILL.md' tests/ scripts/ .github/→ nothing), which is itself the gap chaoz23/srdcheck#82 exists to close. With that gate in place this class of defect fails CI instead of shipping.Note: fixing this correctly required naming both streams, which exposed a false positive in the gate itself — it treated any mention of
stderras the claim and rejected this text. Fixed in chaoz23/srdcheck#84, which should land first.🤖 Generated with Claude Code