{
  "$schema": "./manifest.schema.json",
  "suiteVersion": "0.1.0-draft",
  "specVersion": "0.1.0-draft",
  "status": "research-preview",
  "validationProfile": {
    "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
    "formatAssertionRequired": true,
    "rejectDuplicateObjectMembers": true
  },
  "cases": [
    {
      "id": "carrier-invalid-json",
      "path": "carrier/malformed-json.json",
      "layer": "carrier",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-CARRIER-INVALID-JSON",
        "path": ""
      },
      "focus": "malformed JSON is rejected before schema validation",
      "specSection": "§2"
    },
    {
      "id": "carrier-duplicate-root-member",
      "path": "carrier/duplicate-root-member.json",
      "layer": "carrier",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-CARRIER-DUPLICATE-MEMBER",
        "path": "/title"
      },
      "focus": "duplicate object member names are rejected during parsing",
      "specSection": "§2"
    },
    {
      "id": "structural-missing-decision",
      "path": "structural/missing-decision.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-REQUIRED-MEMBER",
        "path": "/decision"
      },
      "focus": "required root member",
      "specSection": "§4"
    },
    {
      "id": "structural-unknown-root-member",
      "path": "structural/unknown-root-member.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-UNKNOWN-MEMBER",
        "path": "/unexpectedRootMember"
      },
      "focus": "closed root object",
      "specSection": "§4"
    },
    {
      "id": "structural-relative-pack-id",
      "path": "structural/relative-pack-id.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-FORMAT-URI",
        "path": "/id"
      },
      "focus": "pack id is an absolute URI with format assertions enabled",
      "specSection": "§5"
    },
    {
      "id": "structural-invalid-published-date",
      "path": "structural/invalid-published-date.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-FORMAT-DATE",
        "path": "/sources/0/publishedAt"
      },
      "focus": "source publication date format assertion",
      "specSection": "§6.3"
    },
    {
      "id": "structural-invalid-created-at",
      "path": "structural/invalid-created-at.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-FORMAT-DATE-TIME",
        "path": "/metadata/createdAt"
      },
      "focus": "metadata creation timestamp format assertion",
      "specSection": "§6.8"
    },
    {
      "id": "structural-invalid-local-id",
      "path": "structural/invalid-local-id.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-LOCAL-ID",
        "path": "/outcomes/0/id"
      },
      "focus": "local identifier grammar",
      "specSection": "§5"
    },
    {
      "id": "structural-invalid-pack-version",
      "path": "structural/invalid-pack-version.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-PACK-VERSION",
        "path": "/version"
      },
      "focus": "three-component pack version grammar",
      "specSection": "§4"
    },
    {
      "id": "structural-invalid-fact-path",
      "path": "structural/invalid-fact-path.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-FACT-PATH",
        "path": "/rules/0/when/path"
      },
      "focus": "fact path syntax",
      "specSection": "§7.4"
    },
    {
      "id": "structural-empty-any-condition",
      "path": "structural/empty-any-condition.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-CONDITION-ARITY",
        "path": "/rules/0/when/conditions"
      },
      "focus": "all and any require at least one child condition",
      "specSection": "§7"
    },
    {
      "id": "structural-force-outcome-missing-outcome",
      "path": "structural/force-outcome-missing-outcome.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-EXCEPTION-SHAPE",
        "path": "/exceptions/0/outcome"
      },
      "focus": "force-outcome exception requires exactly its outcome operand",
      "specSection": "§6.6"
    },
    {
      "id": "structural-unqualified-extension",
      "path": "structural/unqualified-extension.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-EXTENSION-NAME",
        "path": "/extensions/review-policy"
      },
      "focus": "reverse-domain extension namespace",
      "specSection": "§9"
    },
    {
      "id": "structural-invalid-spec-version",
      "path": "structural/invalid-spec-version.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-SPEC-VERSION",
        "path": "/specVersion"
      },
      "focus": "exact supported specification version",
      "specSection": "§4"
    },
    {
      "id": "structural-too-few-outcomes",
      "path": "structural/too-few-outcomes.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-COLLECTION-ARITY",
        "path": "/outcomes"
      },
      "focus": "at least two outcomes are required",
      "specSection": "§4"
    },
    {
      "id": "structural-empty-rules",
      "path": "structural/empty-rules.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-COLLECTION-ARITY",
        "path": "/rules"
      },
      "focus": "at least one rule is required",
      "specSection": "§4"
    },
    {
      "id": "structural-reserved-extension-name",
      "path": "structural/reserved-extension-name.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-EXTENSION-NAME",
        "path": "/extensions/org.judgmentpack.future"
      },
      "focus": "specification-reserved extension namespace",
      "specSection": "§9"
    },
    {
      "id": "structural-unknown-decision-member",
      "path": "structural/unknown-decision-member.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-UNKNOWN-MEMBER",
        "path": "/decision/priority"
      },
      "focus": "closed nested Core object",
      "specSection": "§4"
    },
    {
      "id": "structural-empty-escalation-triggers",
      "path": "structural/empty-escalation-triggers.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-ESCALATION-TRIGGERS",
        "path": "/escalation/triggers"
      },
      "focus": "configured handoff intent has at least one trigger",
      "specSection": "§6.7"
    },
    {
      "id": "structural-invalid-ordered-decimal",
      "path": "structural/invalid-ordered-decimal.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-DECIMAL-OPERAND",
        "path": "/rules/0/when/value"
      },
      "focus": "ordered comparison operands use the decimal grammar",
      "specSection": "§2.2"
    },
    {
      "id": "structural-invalid-in-operand",
      "path": "structural/invalid-in-operand.json",
      "layer": "structural",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-STRUCTURE-IN-OPERAND",
        "path": "/rules/0/when/value"
      },
      "focus": "membership comparison operands are non-empty arrays",
      "specSection": "§7.4"
    },
    {
      "id": "semantic-duplicate-outcome-id",
      "path": "semantic/duplicate-outcome-id.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-DUPLICATE-ID",
        "path": "/outcomes/1/id"
      },
      "focus": "outcome identifiers are unique within their collection",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-duplicate-rule-id",
      "path": "semantic/duplicate-rule-id.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-DUPLICATE-ID",
        "path": "/rules/1/id"
      },
      "focus": "rule identifiers are unique within their collection",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-duplicate-evidence-id",
      "path": "semantic/duplicate-evidence-id.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-DUPLICATE-ID",
        "path": "/evidenceRequirements/1/id"
      },
      "focus": "evidence requirement identifiers are unique within their collection",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-duplicate-source-id",
      "path": "semantic/duplicate-source-id.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-DUPLICATE-ID",
        "path": "/sources/1/id"
      },
      "focus": "source identifiers are unique within their collection",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-duplicate-exception-id",
      "path": "semantic/duplicate-exception-id.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-DUPLICATE-ID",
        "path": "/exceptions/1/id"
      },
      "focus": "exception identifiers are unique within their collection",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-rule-outcome",
      "path": "semantic/dangling-rule-outcome.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-OUTCOME",
        "path": "/rules/0/outcome"
      },
      "focus": "rule outcome resolves to a declared outcome",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-fallback-outcome",
      "path": "semantic/dangling-fallback-outcome.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-OUTCOME",
        "path": "/fallbackOutcome"
      },
      "focus": "fallback outcome resolves to a declared outcome",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-evidence-ref",
      "path": "semantic/dangling-evidence-ref.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-EVIDENCE",
        "path": "/rules/0/evidenceRequirementRefs/0"
      },
      "focus": "rule evidence reference resolves to a declared evidence requirement",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-source-ref",
      "path": "semantic/dangling-source-ref.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-SOURCE",
        "path": "/rules/0/sourceRefs/0"
      },
      "focus": "rule source reference resolves to a declared source",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-exception-target",
      "path": "semantic/dangling-exception-target.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-RULE",
        "path": "/exceptions/0/targetRule"
      },
      "focus": "exception target resolves to a declared rule",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-exception-outcome",
      "path": "semantic/dangling-exception-outcome.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-OUTCOME",
        "path": "/exceptions/0/outcome"
      },
      "focus": "exception outcome resolves to a declared outcome",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-exception-source-ref",
      "path": "semantic/dangling-exception-source-ref.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-SOURCE",
        "path": "/exceptions/0/sourceRefs/0"
      },
      "focus": "exception source reference resolves to a declared source",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-applicability-evidence",
      "path": "semantic/dangling-applicability-evidence.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-EVIDENCE",
        "path": "/applicability/evidenceRequirement"
      },
      "focus": "applicability evidence reference resolves to a declared requirement",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-exception-evidence",
      "path": "semantic/dangling-exception-evidence.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-EVIDENCE",
        "path": "/exceptions/0/when/evidenceRequirement"
      },
      "focus": "exception-condition evidence reference resolves to a declared requirement",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-wrong-kind-rule-outcome",
      "path": "semantic/wrong-kind-rule-outcome.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-OUTCOME",
        "path": "/rules/0/outcome"
      },
      "focus": "a rule identifier cannot satisfy an outcome reference",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-dangling-nested-evidence-present",
      "path": "semantic/dangling-nested-evidence-present.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-UNRESOLVED-EVIDENCE",
        "path": "/rules/0/when/condition/conditions/0/conditions/0/evidenceRequirement"
      },
      "focus": "reference validation recursively traverses nested condition nodes",
      "specSection": "§3.3"
    },
    {
      "id": "semantic-required-extension-unsupported",
      "path": "semantic/required-extension-unsupported.json",
      "layer": "semantic",
      "expectedResult": "unsupported",
      "expectedDiagnostic": {
        "code": "JPS-CAPABILITY-REQUIRED-EXTENSION",
        "path": "/metadata/requiredExtensions/0"
      },
      "focus": "consumer reports a declared required extension it does not support",
      "specSection": "§9",
      "supportedExtensions": []
    },
    {
      "id": "semantic-missing-required-extension-value",
      "path": "semantic/missing-required-extension-value.json",
      "layer": "semantic",
      "expectedResult": "invalid",
      "expectedDiagnostic": {
        "code": "JPS-SEMANTIC-MISSING-REQUIRED-EXTENSION",
        "path": "/metadata/requiredExtensions/0"
      },
      "focus": "required extension declaration corresponds to a document extension value",
      "specSection": "§9"
    },
    {
      "id": "valid-minimal-literal",
      "path": "valid/minimal-literal.json",
      "layer": "semantic",
      "expectedResult": "valid",
      "expectedDiagnostic": null,
      "focus": "minimal structurally and semantically conforming document",
      "specSection": "§§2–7"
    },
    {
      "id": "valid-condition-branches",
      "path": "valid/condition-branches.json",
      "layer": "semantic",
      "expectedResult": "valid",
      "expectedDiagnostic": null,
      "focus": "literal, all, any, not, fact, and evidence-present condition shapes",
      "specSection": "§7"
    },
    {
      "id": "valid-exception-suppress-rule",
      "path": "valid/exception-suppress-rule.json",
      "layer": "semantic",
      "expectedResult": "valid",
      "expectedDiagnostic": null,
      "focus": "suppress-rule exception branch and resolved target",
      "specSection": "§6.6"
    },
    {
      "id": "valid-exception-force-outcome",
      "path": "valid/exception-force-outcome.json",
      "layer": "semantic",
      "expectedResult": "valid",
      "expectedDiagnostic": null,
      "focus": "force-outcome exception branch and resolved outcome",
      "specSection": "§6.6"
    },
    {
      "id": "valid-exception-escalate",
      "path": "valid/exception-escalate.json",
      "layer": "semantic",
      "expectedResult": "valid",
      "expectedDiagnostic": null,
      "focus": "escalate exception branch without an outcome or target rule",
      "specSection": "§6.6"
    },
    {
      "id": "valid-required-extension-supported",
      "path": "valid/required-extension-supported.json",
      "layer": "semantic",
      "expectedResult": "valid",
      "expectedDiagnostic": null,
      "focus": "consumer fully interprets a declared required extension it supports",
      "specSection": "§9",
      "supportedExtensions": ["com.example.review-policy"]
    },
    {
      "id": "valid-hostile-optional-extension-value",
      "path": "valid/hostile-optional-extension-value.json",
      "layer": "semantic",
      "expectedResult": "valid",
      "expectedDiagnostic": null,
      "focus": "hostile-looking optional extension content remains inert data",
      "specSection": "§§9–10"
    },
    {
      "id": "valid-minimal-expense-approval",
      "path": "valid/minimal-expense-approval.json",
      "layer": "semantic",
      "expectedResult": "valid",
      "expectedDiagnostic": null,
      "focus": "complete cross-feature expense-approval example",
      "specSection": "§§4–9"
    }
  ]
}
