{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bound-method.github.io/docs/project/schemas/website-boundary.schema.json",
  "title": "BOUND Website Boundary Map",
  "description": "Proposed machine-readable map of the BOUND documentation site's domains, ownership boundaries, contracts, and verification targets.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "version",
    "project",
    "domains",
    "verification"
  ],
  "properties": {
    "version": {
      "type": "string",
      "minLength": 1
    },
    "project": {
      "type": "string",
      "const": "BOUND Method documentation website"
    },
    "domains": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "path",
          "responsibility",
          "boundary",
          "interfaces"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9-]+$"
          },
          "path": {
            "type": "string",
            "minLength": 1
          },
          "responsibility": {
            "type": "string",
            "minLength": 1
          },
          "boundary": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "interfaces": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    },
    "verification": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "target",
          "mechanism"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9-]+$"
          },
          "target": {
            "type": "string",
            "minLength": 1
          },
          "mechanism": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    }
  }
}
