JPS Core JSON Schema
The normative Draft 2020-12 structural schema for
0.1.0-draft. Format assertions for URI, date, and date-time are required
by the Core specification.
Scope: Schema acceptance establishes structural
conformance only. It does not establish semantic document conformance, truth, authority, safety,
or operational fitness.
- Planned release identifier
https://judgmentpack.org/schema/0.1.0-draft/judgment-pack-core.schema.json- Dialect
https://json-schema.org/draft/2020-12/schema- Root properties
- 16
- Definitions
- 13
Field reference
Every field and its allowed values, generated from the schema. The same definitions appear as clickable cards beside each example document.
specVersion- The JPS specification version this document targets. One of:
0.1.0-draft id- A stable identifier. At the top level it is the pack's globally unique URI; inside outcomes, rules, evidence requirements, sources, and exceptions it is a pack-local id (lowercase, hyphenated).
version- The pack's own semantic version (MAJOR.MINOR.PATCH), separate from specVersion.
title- A short human-readable name for the pack.
description- Human-readable prose for the pack, or for a rule, outcome, evidence requirement, or exception.
decision- The single decision this pack is about, as an intent and a question.
intent- What the decision is meant to determine, in the author's words.
question- The specific question the pack answers.
applicability- An optional condition that delimits when the whole pack applies; if it does not hold, the pack is not applicable.
evidenceRequirements- The evidence a decision may draw on. Each item is declared once and referenced by id.
required- Whether an evidence requirement must be present. One of:
truefalse kind- A category. Evidence: document/fact/measurement/attestation. Source locator: uri/repository/path/other. Escalation target: human-role/queue/system. One of:
documentfactmeasurementattestationurirepositorypathotherhuman-rolequeuesystem sources- Provenance: the cited references the pack relies on.
publisher- Who published a source.
publishedAt- A source's publication date (YYYY-MM-DD).
locator- Where a source can be found: a kind and a value.
value- An operand or literal. In a fact condition, the value compared with operator (a decimal string for ordered comparisons, an array for `in`); in a literal condition, a boolean; in a source locator, the locator string.
citation- The specific location and excerpt within a source.
location- Where in a source the cited passage appears.
excerpt- The quoted passage from a source.
rights- Usage or licensing information for a source.
outcomes- The possible results of the decision (at least two). Each has an id and a label.
label- The human-readable name shown for an outcome.
rules- The decision rules (at least one). Each declares a condition and the outcome it selects.
when- The condition under which a rule or exception applies.
outcome- For a rule, the outcome id selected when its condition holds; for a force-outcome exception, the outcome forced.
onUnknown- How to treat a rule or exception whose condition cannot be evaluated. One of:
ignoreescalate evidenceRequirementRefs- Evidence requirement ids a rule depends on.
sourceRefs- Source ids a rule or exception is grounded in.
rationale- Why a rule exists, recorded for human review.
exceptions- Overrides that change the ordinary outcome under specific conditions.
effect- What an exception does. One of:
suppress-ruleforce-outcomeescalate targetRule- The rule id a suppress-rule exception disables.
fallbackOutcome- The outcome id used when no rule matches (informative model).
escalation- Handoff configuration: when and to whom the decision is escalated. Not itself an outcome.
triggers- The situations that cause escalation. One of:
not-applicablemissing-required-evidenceunknownconflictno-match target- The escalation destination: a kind and a name.
name- The name of an escalation target, such as a role or a queue.
message- Guidance shown when escalating.
metadata- Non-normative bookkeeping: authors, timestamps, license, reviews, required extensions.
authors- Who authored the pack.
createdAt- When the pack was created (ISO-8601 date-time).
license- The pack's license.
requiredExtensions- Extension namespaces an implementation must understand to use the pack.
reviews- A record of human reviews of the pack.
reviewer- Who reviewed the pack.
reviewedAt- When a review occurred.
disposition- A review's conclusion. One of:
approvedchanges-requestedrejected note- A reviewer's note.
extensions- Namespaced additional data with reverse-DNS keys; org.judgmentpack.* is reserved.
condition- A nested condition, used by the `not` operator.
conditions- The list of sub-conditions combined by `all` or `any`.
op- The kind of condition. One of:
factallanynotevidence-presentliteral path- A JSON Pointer to the fact a fact-condition reads.
operator- The comparison a fact condition applies. One of:
equalsnot-equalsgreater-thangreater-than-or-equalless-thanless-than-or-equalin evidenceRequirement- The evidence requirement id an evidence-present condition checks.
Raw schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://judgmentpack.org/schema/0.1.0-draft/judgment-pack-core.schema.json",
"title": "Judgment Pack Core",
"description": "Research-preview structural schema. Conformance does not establish truth, authority, safety, or operational fitness.",
"$comment": "JPS structural conformance requires uri, date, and date-time format assertions even when a general-purpose validator treats format as annotation-only.",
"type": "object",
"additionalProperties": false,
"required": [
"specVersion",
"id",
"version",
"title",
"decision",
"outcomes",
"rules"
],
"properties": {
"specVersion": {
"const": "0.1.0-draft"
},
"id": {
"type": "string",
"format": "uri",
"minLength": 1
},
"version": {
"type": "string",
"pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
},
"title": {
"$ref": "#/$defs/nonEmptyString"
},
"description": {
"$ref": "#/$defs/nonEmptyString"
},
"decision": {
"$ref": "#/$defs/decision"
},
"applicability": {
"$ref": "#/$defs/condition"
},
"evidenceRequirements": {
"type": "array",
"items": {
"$ref": "#/$defs/evidenceRequirement"
},
"uniqueItems": true
},
"sources": {
"type": "array",
"items": {
"$ref": "#/$defs/source"
},
"uniqueItems": true
},
"outcomes": {
"type": "array",
"minItems": 2,
"items": {
"$ref": "#/$defs/outcome"
},
"uniqueItems": true
},
"rules": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/rule"
},
"uniqueItems": true
},
"exceptions": {
"type": "array",
"items": {
"$ref": "#/$defs/exception"
},
"uniqueItems": true
},
"fallbackOutcome": {
"$ref": "#/$defs/localId"
},
"escalation": {
"$ref": "#/$defs/escalation"
},
"metadata": {
"$ref": "#/$defs/metadata"
},
"extensions": {
"$ref": "#/$defs/extensions"
}
},
"$defs": {
"nonEmptyString": {
"type": "string",
"minLength": 1
},
"localId": {
"type": "string",
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
},
"decimalString": {
"type": "string",
"pattern": "^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?$"
},
"extensions": {
"type": "object",
"propertyNames": {
"pattern": "^(?!org\\.judgmentpack\\.)[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9-]*)+$"
},
"additionalProperties": true
},
"decision": {
"type": "object",
"additionalProperties": false,
"required": ["intent", "question"],
"properties": {
"intent": {
"$ref": "#/$defs/nonEmptyString"
},
"question": {
"$ref": "#/$defs/nonEmptyString"
},
"extensions": {
"$ref": "#/$defs/extensions"
}
}
},
"evidenceRequirement": {
"type": "object",
"additionalProperties": false,
"required": ["id", "description", "required"],
"properties": {
"id": {
"$ref": "#/$defs/localId"
},
"description": {
"$ref": "#/$defs/nonEmptyString"
},
"required": {
"type": "boolean"
},
"kind": {
"enum": ["document", "fact", "measurement", "attestation"]
},
"extensions": {
"$ref": "#/$defs/extensions"
}
}
},
"source": {
"type": "object",
"additionalProperties": false,
"required": ["id", "title", "locator"],
"properties": {
"id": {
"$ref": "#/$defs/localId"
},
"title": {
"$ref": "#/$defs/nonEmptyString"
},
"publisher": {
"$ref": "#/$defs/nonEmptyString"
},
"publishedAt": {
"type": "string",
"format": "date"
},
"locator": {
"type": "object",
"additionalProperties": false,
"required": ["kind", "value"],
"properties": {
"kind": {
"enum": ["uri", "repository", "path", "other"]
},
"value": {
"$ref": "#/$defs/nonEmptyString"
}
}
},
"citation": {
"type": "object",
"additionalProperties": false,
"required": ["location", "excerpt"],
"properties": {
"location": {
"$ref": "#/$defs/nonEmptyString"
},
"excerpt": {
"$ref": "#/$defs/nonEmptyString"
}
}
},
"rights": {
"$ref": "#/$defs/nonEmptyString"
},
"extensions": {
"$ref": "#/$defs/extensions"
}
}
},
"outcome": {
"type": "object",
"additionalProperties": false,
"required": ["id", "label"],
"properties": {
"id": {
"$ref": "#/$defs/localId"
},
"label": {
"$ref": "#/$defs/nonEmptyString"
},
"description": {
"$ref": "#/$defs/nonEmptyString"
},
"extensions": {
"$ref": "#/$defs/extensions"
}
}
},
"rule": {
"type": "object",
"additionalProperties": false,
"required": ["id", "description", "when", "outcome", "onUnknown"],
"properties": {
"id": {
"$ref": "#/$defs/localId"
},
"description": {
"$ref": "#/$defs/nonEmptyString"
},
"when": {
"$ref": "#/$defs/condition"
},
"outcome": {
"$ref": "#/$defs/localId"
},
"onUnknown": {
"enum": ["ignore", "escalate"]
},
"evidenceRequirementRefs": {
"type": "array",
"items": {
"$ref": "#/$defs/localId"
},
"uniqueItems": true
},
"sourceRefs": {
"type": "array",
"items": {
"$ref": "#/$defs/localId"
},
"uniqueItems": true
},
"rationale": {
"$ref": "#/$defs/nonEmptyString"
},
"extensions": {
"$ref": "#/$defs/extensions"
}
}
},
"exception": {
"type": "object",
"additionalProperties": false,
"required": ["id", "description", "when", "effect", "onUnknown"],
"properties": {
"id": {
"$ref": "#/$defs/localId"
},
"description": {
"$ref": "#/$defs/nonEmptyString"
},
"when": {
"$ref": "#/$defs/condition"
},
"effect": {
"enum": ["suppress-rule", "force-outcome", "escalate"]
},
"targetRule": {
"$ref": "#/$defs/localId"
},
"outcome": {
"$ref": "#/$defs/localId"
},
"onUnknown": {
"enum": ["ignore", "escalate"]
},
"sourceRefs": {
"type": "array",
"items": {
"$ref": "#/$defs/localId"
},
"uniqueItems": true
},
"extensions": {
"$ref": "#/$defs/extensions"
}
},
"allOf": [
{
"if": {
"properties": {
"effect": {
"const": "suppress-rule"
}
},
"required": ["effect"]
},
"then": {
"required": ["targetRule"],
"not": {
"required": ["outcome"]
}
}
},
{
"if": {
"properties": {
"effect": {
"const": "force-outcome"
}
},
"required": ["effect"]
},
"then": {
"required": ["outcome"],
"not": {
"required": ["targetRule"]
}
}
},
{
"if": {
"properties": {
"effect": {
"const": "escalate"
}
},
"required": ["effect"]
},
"then": {
"not": {
"anyOf": [
{ "required": ["outcome"] },
{ "required": ["targetRule"] }
]
}
}
}
]
},
"escalation": {
"type": "object",
"additionalProperties": false,
"required": ["triggers", "target"],
"properties": {
"triggers": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"enum": [
"not-applicable",
"missing-required-evidence",
"unknown",
"conflict",
"no-match"
]
}
},
"target": {
"type": "object",
"additionalProperties": false,
"required": ["kind", "name"],
"properties": {
"kind": {
"enum": ["human-role", "queue", "system"]
},
"name": {
"$ref": "#/$defs/nonEmptyString"
}
}
},
"message": {
"$ref": "#/$defs/nonEmptyString"
},
"extensions": {
"$ref": "#/$defs/extensions"
}
}
},
"metadata": {
"type": "object",
"additionalProperties": false,
"properties": {
"authors": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/nonEmptyString"
},
"uniqueItems": true
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"license": {
"$ref": "#/$defs/nonEmptyString"
},
"requiredExtensions": {
"type": "array",
"items": {
"type": "string",
"pattern": "^(?!org\\.judgmentpack\\.)[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9-]*)+$"
},
"uniqueItems": true
},
"reviews": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["reviewer", "reviewedAt", "disposition"],
"properties": {
"reviewer": {
"$ref": "#/$defs/nonEmptyString"
},
"reviewedAt": {
"type": "string",
"format": "date-time"
},
"disposition": {
"enum": ["approved", "changes-requested", "rejected"]
},
"note": {
"$ref": "#/$defs/nonEmptyString"
}
}
}
},
"extensions": {
"$ref": "#/$defs/extensions"
}
}
},
"condition": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"required": ["op", "value"],
"properties": {
"op": {
"const": "literal"
},
"value": {
"type": "boolean"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": ["op", "conditions"],
"properties": {
"op": {
"enum": ["all", "any"]
},
"conditions": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/condition"
}
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": ["op", "condition"],
"properties": {
"op": {
"const": "not"
},
"condition": {
"$ref": "#/$defs/condition"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": ["op", "path", "operator", "value"],
"properties": {
"op": {
"const": "fact"
},
"path": {
"type": "string",
"pattern": "^(?:/(?:[^~/]|~0|~1)*)*$"
},
"operator": {
"enum": [
"equals",
"not-equals",
"greater-than",
"greater-than-or-equal",
"less-than",
"less-than-or-equal",
"in"
]
},
"value": true
},
"allOf": [
{
"if": {
"properties": {
"operator": {
"enum": [
"greater-than",
"greater-than-or-equal",
"less-than",
"less-than-or-equal"
]
}
},
"required": ["operator"]
},
"then": {
"properties": {
"value": {
"$ref": "#/$defs/decimalString"
}
}
}
},
{
"if": {
"properties": {
"operator": {
"const": "in"
}
},
"required": ["operator"]
},
"then": {
"properties": {
"value": {
"type": "array",
"minItems": 1
}
}
}
}
]
},
{
"type": "object",
"additionalProperties": false,
"required": ["op", "evidenceRequirement"],
"properties": {
"op": {
"const": "evidence-present"
},
"evidenceRequirement": {
"$ref": "#/$defs/localId"
}
}
}
]
}
}
}