Conformance corpus
This directory contains 118 focused conformance cases for testing the carrier, structural, and
semantic requirements of Judgment Pack Core 0.2.0-draft. It is versioned with the draft but is not
yet a complete or normative conformance suite. Evaluator behavior is out of scope here: it has its
own corpus, in evaluation/, which is normative for the evaluator conformance
class of §3.4. A document-conformance result never depends on it. Nor is the checkpoint witness
statement in scope here: witness/
holds the 54 vectors of its companion document,
spec/checkpoint-witness.md, which are staged until the next
specVersion opens: in no corpus, and not served by the site. Nor is the dialect:
dialect/
holds the reference Runner's 47 preparation vectors for its companion document,
spec/dialect.md, staged until the next specVersion opens: in no corpus,
and not served by the site. The Policy offline-reader promotion
holds 124 agreement vectors for its draft companion class.
RFC 0023 has conditional draft approval upon required green CI and PR 218 merge;
the default branch remains Review until then. These vectors become a released
corpus only under their exact Policy tag and a maintainer-published GitHub
release. Passing fixtures alone establishes no Core or Policy conformance claim.
manifest.json is the machine-readable case index. Its shape is defined by
manifest.schema.json.
Layers
carrier/contains inputs held at the carrier layer, before schema validation: most must be rejected (malformed JSON, trailing data, truncated input; duplicate-member cases must be parsed with duplicate detection), and a few are valid and show what the carrier accepts (trailing whitespace, a valid surrogate pair).structural/contains well-formed JSON documents that fail the normative JSON Schema. JPS testing asserts the schema'suri,date, anddate-timeformats even though some general-purpose JSON Schema libraries treatformatas annotation-only by default.semantic/contains documents that pass structural validation but fail a prose requirement, or cannot be fully interpreted with the case's declared consumer capabilities.valid/contains documents expected to pass carrier, structural, and semantic checks. A valid result does not claim factual truth, authority, operational fitness, or anything about an evaluator: evaluator conformance is claimed againstevaluation/, never against this layer.
Validation proceeds in layer order. A runner should stop a case at its target layer rather than reporting downstream diagnostics for content that failed an earlier layer.
Manifest expectations
Each case records:
layer— the highest layer exercised by the case;expectedResult—valid,invalid, orunsupported;expectedDiagnostic— the primary provisional diagnostic code and JSON Pointer, ornullfor a valid case;specSection— the draft section that motivates the expectation; and- optional
supportedExtensions— the required-extension capabilities available to the consumer for that case. When omitted, the capability set is empty.
unsupported is distinct from invalid: the document is structurally readable and semantically
well-formed, but the consumer lacks a capability named by metadata.requiredExtensions.
Diagnostic codes in this corpus are test metadata, not yet a normative cross-implementation diagnostic contract. The recorded diagnostic is the primary expected result; implementations may also report additional detail. A pointer to a missing member identifies the location the member would have occupied.
Semantic checks represented here
The semantic cases exercise collection-local identifier uniqueness; declared outcome, evidence,
source, and exception-target references; reference-kind checking; recursive traversal of every
condition position for evidence-present; required-extension declaration consistency; and
required-extension capability negotiation.
Reference traversal must inspect every condition position, including root applicability, rule
conditions, exception conditions, and arbitrarily nested all, any, and not nodes. The focused
recursive fixture demonstrates the traversal requirement without defining an implementation
algorithm.
Current boundary
This corpus does not test condition evaluation, resolution results, resource limits,
canonicalization, signatures, imports, or migration behavior. Condition and resolution results are
covered — as a seed corpus with stated gaps — by evaluation/. Future
expansion here should remain focused: one primary expectation per negative fixture, with positive,
boundary, and adversarial counterparts added when the corresponding semantics become normative.
Every fixture declares specVersion 0.2.0-draft, which is exact. structural/invalid-spec-version.json
still declares 0.1.0-draft, which is now the negative case: an unedited 0.1.0-draft pack is unchanged
in representation and document-conformance meaning but must be re-declared to be structurally conforming
to this draft, and re-declaring it also opts it into this draft's evaluator semantics without conferring
conformance on any implementation (§11).
View manifest View manifest schema
Carrier cases 11
| Case | Result | Focus | Diagnostic | Spec |
|---|---|---|---|---|
carrier-invalid-json | invalid | malformed JSON is rejected before schema validation | JPS-CARRIER-INVALID-JSON | §2 |
carrier-duplicate-root-member | invalid | duplicate object member names are rejected during parsing | JPS-CARRIER-DUPLICATE-MEMBER | §2 |
carrier-duplicate-nested-member | invalid | duplicate object member names are rejected below the root, not only at it | JPS-CARRIER-DUPLICATE-MEMBER | §2 |
carrier-valid-surrogate-pair | valid | valid surrogate pair escape in string value is accepted | — | §2 |
carrier-lone-high-surrogate | invalid | unpaired high surrogate escape in string value is rejected | JPS-CARRIER-INVALID-JSON | §2 |
carrier-lone-low-surrogate | invalid | unpaired low surrogate escape in string value is rejected | JPS-CARRIER-INVALID-JSON | §2 |
carrier-reversed-surrogate-pair | invalid | reversed surrogate pair escape in string value is rejected | JPS-CARRIER-INVALID-JSON | §2 |
carrier-trailing-non-whitespace | invalid | a complete JSON text followed by a non-whitespace character is rejected rather than read as its prefix | JPS-CARRIER-INVALID-JSON | §2 |
carrier-trailing-second-value | invalid | a complete JSON text followed by a second JSON value is rejected rather than read as its first value | JPS-CARRIER-INVALID-JSON | §2 |
carrier-truncated-object | invalid | an object that ends before its closing brace is rejected as incomplete input | JPS-CARRIER-INVALID-JSON | §2 |
carrier-trailing-whitespace | valid | a valid document followed only by JSON whitespace is accepted | — | §2 |
Structural cases 76
| Case | Result | Focus | Diagnostic | Spec |
|---|---|---|---|---|
structural-missing-spec-version | invalid | missing required root member specVersion is rejected | JPS-STRUCTURE-REQUIRED-MEMBER | §4 |
structural-missing-id | invalid | missing required root member id is rejected | JPS-STRUCTURE-REQUIRED-MEMBER | §4 |
structural-missing-version | invalid | missing required root member version is rejected | JPS-STRUCTURE-REQUIRED-MEMBER | §4 |
structural-missing-title | invalid | missing required root member title is rejected | JPS-STRUCTURE-REQUIRED-MEMBER | §4 |
structural-missing-outcomes | invalid | missing required root member outcomes is rejected | JPS-STRUCTURE-REQUIRED-MEMBER | §4 |
structural-missing-rules | invalid | missing required root member rules is rejected | JPS-STRUCTURE-REQUIRED-MEMBER | §4 |
structural-missing-decision | invalid | required root member | JPS-STRUCTURE-REQUIRED-MEMBER | §4 |
structural-empty-title | invalid | root title must be a non-empty human-readable string | JPS-STRUCTURE-MIN-LENGTH | §4 |
structural-empty-decision-question | invalid | decision question must be a non-empty human-readable string | JPS-STRUCTURE-MIN-LENGTH | §6.1 |
structural-empty-outcome-label | invalid | outcome label must be a non-empty human-readable string | JPS-STRUCTURE-MIN-LENGTH | §6.4 |
structural-empty-source-locator-value | invalid | source locator value must be a non-empty string | JPS-STRUCTURE-MIN-LENGTH | §6.3 |
structural-non-array-sources | invalid | sources collection must be an array of source objects | JPS-STRUCTURE-TYPE | §4 |
structural-empty-escalation-target-name | invalid | escalation target name must be a non-empty string | JPS-STRUCTURE-MIN-LENGTH | §6.7 |
structural-unknown-root-member | invalid | closed root object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-relative-pack-id | invalid | pack id is an absolute URI with format assertions enabled | JPS-STRUCTURE-FORMAT-URI | §5 |
structural-invalid-published-date | invalid | source publication date format assertion | JPS-STRUCTURE-FORMAT-DATE | §6.3 |
structural-invalid-created-at | invalid | metadata creation timestamp format assertion | JPS-STRUCTURE-FORMAT-DATE-TIME | §6.8 |
structural-number-pack-id | invalid | pack identifier sent as a JSON number, which only `type` refuses | JPS-STRUCTURE-TYPE | §5 |
structural-number-published-date | invalid | source publication date sent as a JSON number, which only `type` refuses | JPS-STRUCTURE-TYPE | §6.3 |
structural-number-created-at | invalid | metadata creation timestamp sent as a JSON number, which only `type` refuses | JPS-STRUCTURE-TYPE | §6.8 |
structural-number-reviewed-at | invalid | review timestamp sent as a JSON number, which only `type` refuses | JPS-STRUCTURE-TYPE | §6.8 |
structural-date-only-reviewed-at | invalid | review timestamp format assertion, which no other case reaches | JPS-STRUCTURE-FORMAT-DATE-TIME | §6.8 |
structural-invalid-local-id | invalid | local identifier grammar | JPS-STRUCTURE-LOCAL-ID | §5 |
structural-invalid-pack-version | invalid | three-component pack version grammar | JPS-STRUCTURE-PACK-VERSION | §4 |
structural-invalid-fact-path | invalid | fact path syntax | JPS-STRUCTURE-FACT-PATH | §7.4 |
structural-empty-any-condition | invalid | all and any require at least one child condition | JPS-STRUCTURE-CONDITION-ARITY | §7 |
structural-force-outcome-missing-outcome | invalid | force-outcome exception requires exactly its outcome operand | JPS-STRUCTURE-EXCEPTION-SHAPE | §6.6 |
structural-suppress-rule-missing-target-rule | invalid | suppress-rule exception requires its targetRule operand | JPS-STRUCTURE-EXCEPTION-SHAPE | §6.6 |
structural-suppress-rule-forbidden-outcome | invalid | suppress-rule exception forbids an outcome operand | JPS-STRUCTURE-EXCEPTION-SHAPE | §6.6 |
structural-force-outcome-forbidden-target-rule | invalid | force-outcome exception forbids a targetRule operand | JPS-STRUCTURE-EXCEPTION-SHAPE | §6.6 |
structural-escalate-forbidden-target-rule | invalid | escalate exception forbids a targetRule operand | JPS-STRUCTURE-EXCEPTION-SHAPE | §6.6 |
structural-escalate-forbidden-outcome | invalid | escalate exception forbids an outcome operand | JPS-STRUCTURE-EXCEPTION-SHAPE | §6.6 |
structural-unqualified-extension | invalid | reverse-domain extension namespace | JPS-STRUCTURE-EXTENSION-NAME | §9 |
structural-invalid-spec-version | invalid | exact supported specification version; a pack still declaring 0.1.0-draft must be re-declared | JPS-STRUCTURE-SPEC-VERSION | §4 |
structural-too-few-outcomes | invalid | at least two outcomes are required | JPS-STRUCTURE-COLLECTION-ARITY | §4 |
structural-empty-rules | invalid | at least one rule is required | JPS-STRUCTURE-COLLECTION-ARITY | §4 |
structural-reserved-extension-name | invalid | specification-reserved extension namespace | JPS-STRUCTURE-EXTENSION-NAME | §9 |
structural-unqualified-required-extension | invalid | required extension names use a reverse-domain namespace | JPS-STRUCTURE-EXTENSION-NAME | §9 |
structural-reserved-required-extension-name | invalid | required extension names cannot use the specification-reserved namespace | JPS-STRUCTURE-EXTENSION-NAME | §9 |
structural-unknown-decision-member | invalid | closed nested Core object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-evidence-requirement-member | invalid | closed nested Core object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-source-member | invalid | closed nested Core object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-outcome-member | invalid | closed nested Core object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-rule-member | invalid | closed nested Core object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-exception-member | invalid | closed nested Core object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-escalation-member | invalid | closed nested Core object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-metadata-member | invalid | closed nested Core object | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-source-locator-member | invalid | unknown members on a source locator are rejected | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-source-citation-member | invalid | unknown members on a source citation are rejected | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-escalation-target-member | invalid | unknown members on an escalation target are rejected | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-unknown-metadata-review-member | invalid | unknown members on a metadata review are rejected | JPS-STRUCTURE-UNKNOWN-MEMBER | §4 |
structural-empty-escalation-triggers | invalid | configured handoff intent has at least one trigger | JPS-STRUCTURE-ESCALATION-TRIGGERS | §6.7 |
structural-non-array-escalation-triggers | invalid | escalation triggers must be an array of trigger names | JPS-STRUCTURE-TYPE | §6.7 |
structural-invalid-ordered-decimal | invalid | ordered comparison operands use the decimal grammar | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-decimal-operand-leading-plus | invalid | ordered comparison rejects decimal operands with a leading plus sign | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-decimal-operand-leading-zeros | invalid | ordered comparison rejects decimal operands with prohibited leading zeroes | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-decimal-operand-bare-fraction | invalid | ordered comparison rejects decimal operands lacking an integer part before the point | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-decimal-operand-trailing-point | invalid | ordered comparison rejects decimal operands with a trailing decimal point and no fractional digits | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-decimal-operand-exponent | invalid | ordered comparison rejects decimal operands using exponent notation | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-decimal-operand-surrounding-whitespace | invalid | ordered comparison rejects decimal operands with surrounding whitespace | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-decimal-operand-empty | invalid | ordered comparison rejects an empty string as a decimal operand | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-decimal-operand-number | invalid | ordered comparison rejects decimal operands written as JSON numbers | JPS-STRUCTURE-DECIMAL-OPERAND | §2.2 |
structural-invalid-in-operand | invalid | membership comparison operands are non-empty arrays | JPS-STRUCTURE-IN-OPERAND | §7.4 |
structural-empty-in-operand | invalid | membership comparison rejects an empty array operand | JPS-STRUCTURE-COLLECTION-ARITY | §7.4 |
structural-non-object-root | invalid | the pack root is an object, not merely well-formed JSON | JPS-STRUCTURE-TYPE | §4 |
structural-invalid-evidence-requirement-kind | invalid | evidence requirement kind must be chosen from the closed vocabulary | JPS-STRUCTURE-ENUM | §6.2 |
structural-invalid-source-locator-kind | invalid | source locator kind must be chosen from the closed vocabulary | JPS-STRUCTURE-ENUM | §6.3 |
structural-invalid-rule-on-unknown | invalid | rule onUnknown must be chosen from the closed vocabulary | JPS-STRUCTURE-ENUM | §6.5 |
structural-invalid-exception-effect | invalid | exception effect must be chosen from the closed vocabulary | JPS-STRUCTURE-ENUM | §6.6 |
structural-invalid-exception-on-unknown | invalid | exception onUnknown must be chosen from the closed vocabulary | JPS-STRUCTURE-ENUM | §6.6 |
structural-invalid-escalation-trigger | invalid | escalation triggers must be chosen from the closed vocabulary | JPS-STRUCTURE-ENUM | §6.7 |
structural-invalid-escalation-target-kind | invalid | escalation target kind must be chosen from the closed vocabulary | JPS-STRUCTURE-ENUM | §6.7 |
structural-invalid-review-disposition | invalid | review disposition must be chosen from the closed vocabulary | JPS-STRUCTURE-ENUM | §6.8 |
structural-duplicate-escalation-triggers | invalid | repeated escalation triggers are rejected | JPS-STRUCTURE-UNIQUE-ITEMS | §6.7 |
structural-duplicate-rule-source-refs | invalid | repeated rule source references are rejected | JPS-STRUCTURE-UNIQUE-ITEMS | §6.5 |
structural-duplicate-outcomes | invalid | identical outcome entries fail structural uniqueness before semantic duplicate-id validation | JPS-STRUCTURE-UNIQUE-ITEMS | §3.3 |
Semantic cases 31
| Case | Result | Focus | Diagnostic | Spec |
|---|---|---|---|---|
semantic-duplicate-outcome-id | invalid | outcome identifiers are unique within their collection | JPS-SEMANTIC-DUPLICATE-ID | §3.3 |
semantic-duplicate-rule-id | invalid | rule identifiers are unique within their collection | JPS-SEMANTIC-DUPLICATE-ID | §3.3 |
semantic-duplicate-evidence-id | invalid | evidence requirement identifiers are unique within their collection | JPS-SEMANTIC-DUPLICATE-ID | §3.3 |
semantic-duplicate-source-id | invalid | source identifiers are unique within their collection | JPS-SEMANTIC-DUPLICATE-ID | §3.3 |
semantic-duplicate-exception-id | invalid | exception identifiers are unique within their collection | JPS-SEMANTIC-DUPLICATE-ID | §3.3 |
semantic-dangling-rule-outcome | invalid | rule outcome resolves to a declared outcome | JPS-SEMANTIC-UNRESOLVED-OUTCOME | §3.3 |
semantic-dangling-fallback-outcome | invalid | fallback outcome resolves to a declared outcome | JPS-SEMANTIC-UNRESOLVED-OUTCOME | §3.3 |
semantic-dangling-evidence-ref | invalid | rule evidence reference resolves to a declared evidence requirement | JPS-SEMANTIC-UNRESOLVED-EVIDENCE | §3.3 |
semantic-dangling-source-ref | invalid | rule source reference resolves to a declared source | JPS-SEMANTIC-UNRESOLVED-SOURCE | §3.3 |
semantic-dangling-exception-target | invalid | exception target resolves to a declared rule | JPS-SEMANTIC-UNRESOLVED-RULE | §3.3 |
semantic-dangling-exception-outcome | invalid | exception outcome resolves to a declared outcome | JPS-SEMANTIC-UNRESOLVED-OUTCOME | §3.3 |
semantic-dangling-exception-source-ref | invalid | exception source reference resolves to a declared source | JPS-SEMANTIC-UNRESOLVED-SOURCE | §3.3 |
semantic-dangling-applicability-evidence | invalid | applicability evidence reference resolves to a declared requirement | JPS-SEMANTIC-UNRESOLVED-EVIDENCE | §3.3 |
semantic-dangling-exception-evidence | invalid | exception-condition evidence reference resolves to a declared requirement | JPS-SEMANTIC-UNRESOLVED-EVIDENCE | §3.3 |
semantic-wrong-kind-rule-outcome | invalid | a rule identifier cannot satisfy an outcome reference | JPS-SEMANTIC-UNRESOLVED-OUTCOME | §3.3 |
semantic-dangling-nested-evidence-present | invalid | reference validation recursively traverses nested condition nodes | JPS-SEMANTIC-UNRESOLVED-EVIDENCE | §3.3 |
semantic-required-extension-unsupported | unsupported | consumer reports a declared required extension it does not support | JPS-CAPABILITY-REQUIRED-EXTENSION | §9 |
semantic-missing-required-extension-value | invalid | required extension declaration corresponds to a document extension value | JPS-SEMANTIC-MISSING-REQUIRED-EXTENSION | §9 |
valid-minimal-literal | valid | minimal structurally and semantically conforming document | — | §§2–7 |
valid-condition-branches | valid | literal, all, any, not, fact, and evidence-present condition shapes | — | §7 |
valid-exception-suppress-rule | valid | suppress-rule exception branch and resolved target | — | §6.6 |
valid-exception-force-outcome | valid | force-outcome exception branch and resolved outcome | — | §6.6 |
valid-exception-escalate | valid | escalate exception branch without an outcome or target rule | — | §6.6 |
valid-required-extension-supported | valid | consumer fully interprets a declared required extension it supports | — | §9 |
valid-hostile-optional-extension-value | valid | hostile-looking optional extension content remains inert data | — | §§9–10 |
valid-minimal-expense-approval | valid | complete cross-feature expense-approval example | — | §§4–9 |
valid-decimal-operand-negative | valid | ordered comparison accepts a negative fractional decimal operand | — | §2.2 |
valid-decimal-operand-trailing-zero | valid | ordered comparison accepts a decimal operand with significant trailing zeroes | — | §2.2 |
valid-decimal-operand-long-fraction | valid | ordered comparison accepts a high-precision decimal operand whose identity would change if parsed as a float | — | §2.2 |
valid-decimal-operand-equals-number | valid | equality comparison accepts a JSON number operand | — | §2.2 |
valid-in-operand-one-item | valid | membership comparison accepts a one-item array operand | — | §7.4 |