# schemas/relationship-runtime-manifest.schema.json

Browser-rendered handoff of repository-authored JSON. Source identity: `schemas/relationship-runtime-manifest.schema.json`. Links and original summaries are shown; external source content is not redistributed.

    {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "$id": "https://chris-page-gov.github.io/okf-uk-living/schemas/relationship-runtime-manifest.schema.json",
      "title": "A Life in the UK rich relationship runtime manifest",
      "type": "object",
      "required": [
        "@id", "schema", "snapshot", "generated_at", "semantic_manifest",
        "assertion_contract", "row_contract", "default_planes", "route_locator",
        "planes", "totals", "loading_policy"
      ],
      "properties": {
        "@id": {"$ref": "#/$defs/iri"},
        "schema": {"const": "okf-rich-relationship-runtime-manifest.v1"},
        "snapshot": {"$ref": "#/$defs/nonEmpty"},
        "generated_at": {"$ref": "#/$defs/nonEmpty"},
        "semantic_manifest": {"$ref": "#/$defs/path"},
        "assertion_contract": {"$ref": "#/$defs/path"},
        "row_contract": {"$ref": "#/$defs/path"},
        "default_planes": {
          "type": "array", "minItems": 1, "uniqueItems": true,
          "items": {"$ref": "#/$defs/nonEmpty"}
        },
        "planes": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": ["name", "id", "active", "lifecycle", "authority_classes", "assertions", "chunks"],
            "properties": {
              "name": {"$ref": "#/$defs/nonEmpty"},
              "id": {"$ref": "#/$defs/iri"},
              "active": {"type": "boolean"},
              "lifecycle": {"enum": ["active", "historical", "rejected"]},
              "authority_classes": {
                "type": "array", "uniqueItems": true,
                "items": {"enum": ["official", "derived", "model-assisted", "synthetic", "unclassified"]}
              },
              "assertions": {"type": "integer", "minimum": 0},
              "chunks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": ["id", "path", "media_type", "content_encoding", "bytes", "sha256", "count", "records"],
                  "properties": {
                    "id": {"$ref": "#/$defs/iri"},
                    "path": {"$ref": "#/$defs/path"},
                    "media_type": {"const": "application/json"},
                    "content_encoding": {"const": "gzip"},
                    "bytes": {"type": "integer", "minimum": 1},
                    "sha256": {"$ref": "#/$defs/sha256"},
                    "count": {"type": "integer", "minimum": 0},
                    "records": {"type": "integer", "minimum": 0}
                  },
                  "additionalProperties": true
                }
              }
            },
            "additionalProperties": true
          }
        },
        "totals": {
          "type": "object",
          "required": ["active_assertions", "historical_assertions", "rejected_assertions", "all_assertions", "chunks"],
          "additionalProperties": {"type": "integer", "minimum": 0}
        },
        "loading_policy": {"$ref": "#/$defs/nonEmpty"},
        "route_locator": {
          "type": "object",
          "required": ["id", "path", "routes", "buckets", "sha256"],
          "properties": {
            "id": {"$ref": "#/$defs/iri"},
            "path": {"$ref": "#/$defs/path"},
            "routes": {"type": "integer", "minimum": 1},
            "buckets": {"type": "integer", "minimum": 1, "maximum": 256},
            "sha256": {"$ref": "#/$defs/sha256"}
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true,
      "$defs": {
        "nonEmpty": {"type": "string", "minLength": 1},
        "iri": {"type": "string", "pattern": "^[A-Za-z][A-Za-z0-9+.-]*:[^\\s]+$"},
        "path": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\s]+$"},
        "sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
      }
    }