Research preview · 0.1.0-draft

No compatibility guarantee. Not for consequential production decisions.

Normative schema View tagged source

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

Download raw JSON

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: true false
kind
A category. Evidence: document/fact/measurement/attestation. Source locator: uri/repository/path/other. Escalation target: human-role/queue/system. One of: document fact measurement attestation uri repository path other human-role queue system
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: ignore escalate
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-rule force-outcome escalate
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-applicable missing-required-evidence unknown conflict no-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: approved changes-requested rejected
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: fact all any not evidence-present literal
path
A JSON Pointer to the fact a fact-condition reads.
operator
The comparison a fact condition applies. One of: equals not-equals greater-than greater-than-or-equal less-than less-than-or-equal in
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"
            }
          }
        }
      ]
    }
  }
}