Schema: corpus-manifest

{
  "$defs": {
    "entry": {
      "additionalProperties": false,
      "properties": {
        "compatibility": {
          "additionalProperties": {
            "items": {
              "minLength": 1,
              "type": "string"
            },
            "minItems": 1,
            "type": "array"
          },
          "minProperties": 1,
          "type": "object"
        },
        "corpus_revision": {
          "minLength": 1,
          "type": "string"
        },
        "kind": {
          "enum": [
            "LAYOUT",
            "MACRO",
            "FRAGMENT",
            "INTERACTIVE_COMPONENT",
            "STATIC",
            "PARTIAL",
            "ROUTE_PAGE"
          ],
          "type": "string"
        },
        "owner": {
          "description": "Owner identifier. The canonical corpus manifest emits 'htmx-ui-template-scaffold'; legacy migration manifests may use 'TOOL_MANAGED', 'ROUTE_OWNED', 'USER_OWNED', or 'PROTECTED'.",
          "minLength": 1,
          "type": "string"
        },
        "path": {
          "minLength": 1,
          "type": "string"
        },
        "source_digest": {
          "pattern": "^[a-f0-9]{64}$",
          "type": "string"
        }
      },
      "required": [
        "path",
        "owner",
        "source_digest",
        "corpus_revision",
        "compatibility",
        "kind"
      ],
      "type": "object"
    },
    "excluded": {
      "additionalProperties": false,
      "properties": {
        "category": {
          "minLength": 1,
          "type": "string"
        },
        "path": {
          "minLength": 1,
          "type": "string"
        },
        "reason": {
          "minLength": 1,
          "type": "string"
        }
      },
      "required": [
        "path",
        "category",
        "reason"
      ],
      "type": "object"
    }
  },
  "$id": "https://australis.systems/schemas/htmx-ui-template-scaffold/corpus-manifest.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Strict schema for the canonical corpus manifest. The manifest includes deployable entries and explicitly excluded records; excluded records are governed data and are validated here so the on-disk contract is complete.",
  "properties": {
    "compatibility_profiles": {
      "items": {
        "minLength": 1,
        "type": "string"
      },
      "minItems": 1,
      "type": "array",
      "uniqueItems": true
    },
    "corpus_revision": {
      "minLength": 1,
      "type": "string"
    },
    "entries": {
      "items": {
        "$ref": "#/$defs/entry"
      },
      "type": "array"
    },
    "excluded": {
      "items": {
        "$ref": "#/$defs/excluded"
      },
      "type": "array"
    },
    "schema_version": {
      "const": "1.0.0",
      "type": "string"
    }
  },
  "required": [
    "schema_version",
    "corpus_revision",
    "compatibility_profiles",
    "entries"
  ],
  "title": "Corpus Manifest",
  "type": "object"
}