RFC 0013: the first evaluator error and precedence cases (closes #45) - #64
Merged
Conversation
kikashy
force-pushed
the
rfc-evaluator-error-cases
branch
2 times, most recently
from
August 15, 2026 01:02
4d0cb9b to
f13fcc0
Compare
The 0.2.0-draft evaluation suite carries an expectedErrorClass result shape and no case that uses it: 20 rows, all expecting a disposition. So section 8.4's four classes and the fixed order between them are specified, schema-supported and entirely unexercised. The current suite is frozen, so this is a proposal for the next version rather than a rewrite of published history. Five rows. Three are single-condition and would be caught by almost any implementation. Two are the point: inputs where more than one class genuinely applies, and the row fixes which one gets reported. An order that is never exercised is an order two implementations can disagree about while both passing the suite, which is exactly what 8.4 says the order exists to prevent. Case 5 is the most valuable and the reason to write this now. The order is NOT the order the classes are introduced in prose — unsupported-required-extension sits third, after malformed-input — so an implementation that checks extension support while reading the pack, before it looks at the evidence document, reports the wrong class. That is a plausible implementation, not a contrived one, and nothing in the current suite would catch it. Four things the RFC declines to sketch rather than sketching loosely: resource-exhaustion, which needs a documented section 10 limit reached while evaluating an admitted input; implementation-defined classes, which a corpus row cannot require without naming an implementation; error messages, since 8.4 fixes the class identifier and leaves transport and wire format undefined; and whether expectedErrorPhase belongs in the first batch at all, which is left as an open question rather than decided. Verified rather than recalled: the quoted precedence order and both quoted rationales are the specification's own text, the premise that no row uses expectedErrorClass is checked against the manifest, and the sketched row shape matches the case schema's oneOf and dependentRequired. Signed-off-by: kikashy <kikashy@hotmail.com>
kikashy
force-pushed
the
rfc-evaluator-error-cases
branch
from
August 15, 2026 01:06
f13fcc0 to
71f5b63
Compare
|
🎉 Thank you for your contribution to Judgment Pack! If you’d like another task, choose a path that interests you: |
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 #45.
The
0.2.0-draftevaluation suite carries anexpectedErrorClassresult shape and no case that uses it — 20 rows, all expecting a disposition. §8.4's four classes and the fixed order between them are specified, schema-supported, and entirely unexercised. The suite is frozen, so this proposes rows for the next version rather than rewriting published history.Five cases; two of them are the point
Three are single-condition and would be caught by almost any implementation. The other two present inputs where more than one class genuinely applies, and the row fixes which one is reported.
That is the whole argument. §8.4 says the order exists so "two conforming implementations report the same class for the same inputs" — and an order that is never exercised is one two implementations can disagree about while both passing the suite.
Case 5 is why this is worth doing now. The normative order is not the order the classes are introduced in prose:
unsupported-required-extensionsits third, aftermalformed-input. So an implementation that checks extension support while reading the pack — before it ever looks at the evidence document — reports the wrong class. That is a plausible implementation, not a contrived one, and nothing in the current suite catches it.Case 4 is §8.4's own worked example turned into a row.
What it declines to sketch
Rather than sketching them loosely:
resource-exhaustion(needs a documented §10 limit reached while evaluating an admitted input); implementation-defined classes (a corpus row cannot require one without naming an implementation); error messages (§8.4 fixes the class identifier and explicitly leaves transport and wire format undefined, with §13 keeping the diagnostic contract open); and whetherexpectedErrorPhasebelongs in the first batch, left as an open question rather than quietly decided.Four open questions are listed for the reviewer, including whether five is the right size — a batch of just cases 4 and 5 would be defensible if the single-condition rows are judged obvious.
Verified, not recalled
expectedErrorClass— checked against the manifest;oneOf(expectedDispositionorexpectedErrorClass) anddependentRequired(expectedErrorPhaseneeds a class).Registered in
rfcs/README.mdandweb/build.py. Suite:64 passed, 532 subtests. No normative or corpus change — this is a proposal.🤖 Generated with Claude Code