Draft · 0.2.0-draft

A `0.x` draft in production use by adopters: pin the exact draft and runtime release; no compatibility guarantee between drafts.

Informative test corpus View tagged source

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's uri, date, and date-time formats even though some general-purpose JSON Schema libraries treat format as 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 against evaluation/, 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, or unsupported;
  • expectedDiagnostic — the primary provisional diagnostic code and JSON Pointer, or null for 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).

Document conformance only. These cases test documents. Evaluator conformance is claimed against the separate evaluation corpus, and no corpus of either kind can establish truth, authority, safety, or fitness.

View manifest View manifest schema

Carrier cases 11

CaseResultFocusDiagnosticSpec
carrier-invalid-jsoninvalidmalformed JSON is rejected before schema validationJPS-CARRIER-INVALID-JSON§2
carrier-duplicate-root-memberinvalidduplicate object member names are rejected during parsingJPS-CARRIER-DUPLICATE-MEMBER§2
carrier-duplicate-nested-memberinvalidduplicate object member names are rejected below the root, not only at itJPS-CARRIER-DUPLICATE-MEMBER§2
carrier-valid-surrogate-pairvalidvalid surrogate pair escape in string value is accepted—§2
carrier-lone-high-surrogateinvalidunpaired high surrogate escape in string value is rejectedJPS-CARRIER-INVALID-JSON§2
carrier-lone-low-surrogateinvalidunpaired low surrogate escape in string value is rejectedJPS-CARRIER-INVALID-JSON§2
carrier-reversed-surrogate-pairinvalidreversed surrogate pair escape in string value is rejectedJPS-CARRIER-INVALID-JSON§2
carrier-trailing-non-whitespaceinvalida complete JSON text followed by a non-whitespace character is rejected rather than read as its prefixJPS-CARRIER-INVALID-JSON§2
carrier-trailing-second-valueinvalida complete JSON text followed by a second JSON value is rejected rather than read as its first valueJPS-CARRIER-INVALID-JSON§2
carrier-truncated-objectinvalidan object that ends before its closing brace is rejected as incomplete inputJPS-CARRIER-INVALID-JSON§2
carrier-trailing-whitespacevalida valid document followed only by JSON whitespace is accepted—§2

Structural cases 76

CaseResultFocusDiagnosticSpec
structural-missing-spec-versioninvalidmissing required root member specVersion is rejectedJPS-STRUCTURE-REQUIRED-MEMBER§4
structural-missing-idinvalidmissing required root member id is rejectedJPS-STRUCTURE-REQUIRED-MEMBER§4
structural-missing-versioninvalidmissing required root member version is rejectedJPS-STRUCTURE-REQUIRED-MEMBER§4
structural-missing-titleinvalidmissing required root member title is rejectedJPS-STRUCTURE-REQUIRED-MEMBER§4
structural-missing-outcomesinvalidmissing required root member outcomes is rejectedJPS-STRUCTURE-REQUIRED-MEMBER§4
structural-missing-rulesinvalidmissing required root member rules is rejectedJPS-STRUCTURE-REQUIRED-MEMBER§4
structural-missing-decisioninvalidrequired root memberJPS-STRUCTURE-REQUIRED-MEMBER§4
structural-empty-titleinvalidroot title must be a non-empty human-readable stringJPS-STRUCTURE-MIN-LENGTH§4
structural-empty-decision-questioninvaliddecision question must be a non-empty human-readable stringJPS-STRUCTURE-MIN-LENGTH§6.1
structural-empty-outcome-labelinvalidoutcome label must be a non-empty human-readable stringJPS-STRUCTURE-MIN-LENGTH§6.4
structural-empty-source-locator-valueinvalidsource locator value must be a non-empty stringJPS-STRUCTURE-MIN-LENGTH§6.3
structural-non-array-sourcesinvalidsources collection must be an array of source objectsJPS-STRUCTURE-TYPE§4
structural-empty-escalation-target-nameinvalidescalation target name must be a non-empty stringJPS-STRUCTURE-MIN-LENGTH§6.7
structural-unknown-root-memberinvalidclosed root objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-relative-pack-idinvalidpack id is an absolute URI with format assertions enabledJPS-STRUCTURE-FORMAT-URI§5
structural-invalid-published-dateinvalidsource publication date format assertionJPS-STRUCTURE-FORMAT-DATE§6.3
structural-invalid-created-atinvalidmetadata creation timestamp format assertionJPS-STRUCTURE-FORMAT-DATE-TIME§6.8
structural-number-pack-idinvalidpack identifier sent as a JSON number, which only `type` refusesJPS-STRUCTURE-TYPE§5
structural-number-published-dateinvalidsource publication date sent as a JSON number, which only `type` refusesJPS-STRUCTURE-TYPE§6.3
structural-number-created-atinvalidmetadata creation timestamp sent as a JSON number, which only `type` refusesJPS-STRUCTURE-TYPE§6.8
structural-number-reviewed-atinvalidreview timestamp sent as a JSON number, which only `type` refusesJPS-STRUCTURE-TYPE§6.8
structural-date-only-reviewed-atinvalidreview timestamp format assertion, which no other case reachesJPS-STRUCTURE-FORMAT-DATE-TIME§6.8
structural-invalid-local-idinvalidlocal identifier grammarJPS-STRUCTURE-LOCAL-ID§5
structural-invalid-pack-versioninvalidthree-component pack version grammarJPS-STRUCTURE-PACK-VERSION§4
structural-invalid-fact-pathinvalidfact path syntaxJPS-STRUCTURE-FACT-PATH§7.4
structural-empty-any-conditioninvalidall and any require at least one child conditionJPS-STRUCTURE-CONDITION-ARITY§7
structural-force-outcome-missing-outcomeinvalidforce-outcome exception requires exactly its outcome operandJPS-STRUCTURE-EXCEPTION-SHAPE§6.6
structural-suppress-rule-missing-target-ruleinvalidsuppress-rule exception requires its targetRule operandJPS-STRUCTURE-EXCEPTION-SHAPE§6.6
structural-suppress-rule-forbidden-outcomeinvalidsuppress-rule exception forbids an outcome operandJPS-STRUCTURE-EXCEPTION-SHAPE§6.6
structural-force-outcome-forbidden-target-ruleinvalidforce-outcome exception forbids a targetRule operandJPS-STRUCTURE-EXCEPTION-SHAPE§6.6
structural-escalate-forbidden-target-ruleinvalidescalate exception forbids a targetRule operandJPS-STRUCTURE-EXCEPTION-SHAPE§6.6
structural-escalate-forbidden-outcomeinvalidescalate exception forbids an outcome operandJPS-STRUCTURE-EXCEPTION-SHAPE§6.6
structural-unqualified-extensioninvalidreverse-domain extension namespaceJPS-STRUCTURE-EXTENSION-NAME§9
structural-invalid-spec-versioninvalidexact supported specification version; a pack still declaring 0.1.0-draft must be re-declaredJPS-STRUCTURE-SPEC-VERSION§4
structural-too-few-outcomesinvalidat least two outcomes are requiredJPS-STRUCTURE-COLLECTION-ARITY§4
structural-empty-rulesinvalidat least one rule is requiredJPS-STRUCTURE-COLLECTION-ARITY§4
structural-reserved-extension-nameinvalidspecification-reserved extension namespaceJPS-STRUCTURE-EXTENSION-NAME§9
structural-unqualified-required-extensioninvalidrequired extension names use a reverse-domain namespaceJPS-STRUCTURE-EXTENSION-NAME§9
structural-reserved-required-extension-nameinvalidrequired extension names cannot use the specification-reserved namespaceJPS-STRUCTURE-EXTENSION-NAME§9
structural-unknown-decision-memberinvalidclosed nested Core objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-evidence-requirement-memberinvalidclosed nested Core objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-source-memberinvalidclosed nested Core objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-outcome-memberinvalidclosed nested Core objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-rule-memberinvalidclosed nested Core objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-exception-memberinvalidclosed nested Core objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-escalation-memberinvalidclosed nested Core objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-metadata-memberinvalidclosed nested Core objectJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-source-locator-memberinvalidunknown members on a source locator are rejectedJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-source-citation-memberinvalidunknown members on a source citation are rejectedJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-escalation-target-memberinvalidunknown members on an escalation target are rejectedJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-unknown-metadata-review-memberinvalidunknown members on a metadata review are rejectedJPS-STRUCTURE-UNKNOWN-MEMBER§4
structural-empty-escalation-triggersinvalidconfigured handoff intent has at least one triggerJPS-STRUCTURE-ESCALATION-TRIGGERS§6.7
structural-non-array-escalation-triggersinvalidescalation triggers must be an array of trigger namesJPS-STRUCTURE-TYPE§6.7
structural-invalid-ordered-decimalinvalidordered comparison operands use the decimal grammarJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-decimal-operand-leading-plusinvalidordered comparison rejects decimal operands with a leading plus signJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-decimal-operand-leading-zerosinvalidordered comparison rejects decimal operands with prohibited leading zeroesJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-decimal-operand-bare-fractioninvalidordered comparison rejects decimal operands lacking an integer part before the pointJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-decimal-operand-trailing-pointinvalidordered comparison rejects decimal operands with a trailing decimal point and no fractional digitsJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-decimal-operand-exponentinvalidordered comparison rejects decimal operands using exponent notationJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-decimal-operand-surrounding-whitespaceinvalidordered comparison rejects decimal operands with surrounding whitespaceJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-decimal-operand-emptyinvalidordered comparison rejects an empty string as a decimal operandJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-decimal-operand-numberinvalidordered comparison rejects decimal operands written as JSON numbersJPS-STRUCTURE-DECIMAL-OPERAND§2.2
structural-invalid-in-operandinvalidmembership comparison operands are non-empty arraysJPS-STRUCTURE-IN-OPERAND§7.4
structural-empty-in-operandinvalidmembership comparison rejects an empty array operandJPS-STRUCTURE-COLLECTION-ARITY§7.4
structural-non-object-rootinvalidthe pack root is an object, not merely well-formed JSONJPS-STRUCTURE-TYPE§4
structural-invalid-evidence-requirement-kindinvalidevidence requirement kind must be chosen from the closed vocabularyJPS-STRUCTURE-ENUM§6.2
structural-invalid-source-locator-kindinvalidsource locator kind must be chosen from the closed vocabularyJPS-STRUCTURE-ENUM§6.3
structural-invalid-rule-on-unknowninvalidrule onUnknown must be chosen from the closed vocabularyJPS-STRUCTURE-ENUM§6.5
structural-invalid-exception-effectinvalidexception effect must be chosen from the closed vocabularyJPS-STRUCTURE-ENUM§6.6
structural-invalid-exception-on-unknowninvalidexception onUnknown must be chosen from the closed vocabularyJPS-STRUCTURE-ENUM§6.6
structural-invalid-escalation-triggerinvalidescalation triggers must be chosen from the closed vocabularyJPS-STRUCTURE-ENUM§6.7
structural-invalid-escalation-target-kindinvalidescalation target kind must be chosen from the closed vocabularyJPS-STRUCTURE-ENUM§6.7
structural-invalid-review-dispositioninvalidreview disposition must be chosen from the closed vocabularyJPS-STRUCTURE-ENUM§6.8
structural-duplicate-escalation-triggersinvalidrepeated escalation triggers are rejectedJPS-STRUCTURE-UNIQUE-ITEMS§6.7
structural-duplicate-rule-source-refsinvalidrepeated rule source references are rejectedJPS-STRUCTURE-UNIQUE-ITEMS§6.5
structural-duplicate-outcomesinvalididentical outcome entries fail structural uniqueness before semantic duplicate-id validationJPS-STRUCTURE-UNIQUE-ITEMS§3.3

Semantic cases 31

CaseResultFocusDiagnosticSpec
semantic-duplicate-outcome-idinvalidoutcome identifiers are unique within their collectionJPS-SEMANTIC-DUPLICATE-ID§3.3
semantic-duplicate-rule-idinvalidrule identifiers are unique within their collectionJPS-SEMANTIC-DUPLICATE-ID§3.3
semantic-duplicate-evidence-idinvalidevidence requirement identifiers are unique within their collectionJPS-SEMANTIC-DUPLICATE-ID§3.3
semantic-duplicate-source-idinvalidsource identifiers are unique within their collectionJPS-SEMANTIC-DUPLICATE-ID§3.3
semantic-duplicate-exception-idinvalidexception identifiers are unique within their collectionJPS-SEMANTIC-DUPLICATE-ID§3.3
semantic-dangling-rule-outcomeinvalidrule outcome resolves to a declared outcomeJPS-SEMANTIC-UNRESOLVED-OUTCOME§3.3
semantic-dangling-fallback-outcomeinvalidfallback outcome resolves to a declared outcomeJPS-SEMANTIC-UNRESOLVED-OUTCOME§3.3
semantic-dangling-evidence-refinvalidrule evidence reference resolves to a declared evidence requirementJPS-SEMANTIC-UNRESOLVED-EVIDENCE§3.3
semantic-dangling-source-refinvalidrule source reference resolves to a declared sourceJPS-SEMANTIC-UNRESOLVED-SOURCE§3.3
semantic-dangling-exception-targetinvalidexception target resolves to a declared ruleJPS-SEMANTIC-UNRESOLVED-RULE§3.3
semantic-dangling-exception-outcomeinvalidexception outcome resolves to a declared outcomeJPS-SEMANTIC-UNRESOLVED-OUTCOME§3.3
semantic-dangling-exception-source-refinvalidexception source reference resolves to a declared sourceJPS-SEMANTIC-UNRESOLVED-SOURCE§3.3
semantic-dangling-applicability-evidenceinvalidapplicability evidence reference resolves to a declared requirementJPS-SEMANTIC-UNRESOLVED-EVIDENCE§3.3
semantic-dangling-exception-evidenceinvalidexception-condition evidence reference resolves to a declared requirementJPS-SEMANTIC-UNRESOLVED-EVIDENCE§3.3
semantic-wrong-kind-rule-outcomeinvalida rule identifier cannot satisfy an outcome referenceJPS-SEMANTIC-UNRESOLVED-OUTCOME§3.3
semantic-dangling-nested-evidence-presentinvalidreference validation recursively traverses nested condition nodesJPS-SEMANTIC-UNRESOLVED-EVIDENCE§3.3
semantic-required-extension-unsupportedunsupportedconsumer reports a declared required extension it does not supportJPS-CAPABILITY-REQUIRED-EXTENSION§9
semantic-missing-required-extension-valueinvalidrequired extension declaration corresponds to a document extension valueJPS-SEMANTIC-MISSING-REQUIRED-EXTENSION§9
valid-minimal-literalvalidminimal structurally and semantically conforming document—§§2–7
valid-condition-branchesvalidliteral, all, any, not, fact, and evidence-present condition shapes—§7
valid-exception-suppress-rulevalidsuppress-rule exception branch and resolved target—§6.6
valid-exception-force-outcomevalidforce-outcome exception branch and resolved outcome—§6.6
valid-exception-escalatevalidescalate exception branch without an outcome or target rule—§6.6
valid-required-extension-supportedvalidconsumer fully interprets a declared required extension it supports—§9
valid-hostile-optional-extension-valuevalidhostile-looking optional extension content remains inert data—§§9–10
valid-minimal-expense-approvalvalidcomplete cross-feature expense-approval example—§§4–9
valid-decimal-operand-negativevalidordered comparison accepts a negative fractional decimal operand—§2.2
valid-decimal-operand-trailing-zerovalidordered comparison accepts a decimal operand with significant trailing zeroes—§2.2
valid-decimal-operand-long-fractionvalidordered comparison accepts a high-precision decimal operand whose identity would change if parsed as a float—§2.2
valid-decimal-operand-equals-numbervalidequality comparison accepts a JSON number operand—§2.2
valid-in-operand-one-itemvalidmembership comparison accepts a one-item array operand—§7.4