{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://wp-content.ru/schemas/320px-site-audit/registry-v1.json",
  "title": "320px Site Audit check registry",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema_version",
    "registry_version",
    "reviewed_at",
    "profiles",
    "budgets",
    "evidence_schemas",
    "redaction_policies",
    "severity_policies",
    "confidence_policies",
    "sources",
    "checks"
  ],
  "properties": {
    "schema_version": { "const": "1.0.0" },
    "registry_version": { "$ref": "#/$defs/semver" },
    "reviewed_at": { "$ref": "#/$defs/date" },
    "profiles": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": { "$ref": "#/$defs/profile" }
    },
    "budgets": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": { "$ref": "#/$defs/budget" }
    },
    "evidence_schemas": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": { "$ref": "#/$defs/evidenceSchema" }
    },
    "redaction_policies": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": { "$ref": "#/$defs/redactionPolicy" }
    },
    "severity_policies": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": { "$ref": "#/$defs/severityPolicy" }
    },
    "confidence_policies": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": { "$ref": "#/$defs/confidencePolicy" }
    },
    "sources": {
      "type": "object",
      "additionalProperties": { "$ref": "#/$defs/source" }
    },
    "checks": {
      "type": "array",
      "minItems": 1,
      "items": { "$ref": "#/$defs/check" }
    }
  },
  "$defs": {
    "semver": {
      "type": "string",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
    },
    "date": {
      "type": "string",
      "format": "date"
    },
    "identifier": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$"
    },
    "profile": {
      "type": "object",
      "additionalProperties": false,
      "required": ["label_key", "network_default", "description_key"],
      "properties": {
        "label_key": { "$ref": "#/$defs/identifier" },
        "description_key": { "$ref": "#/$defs/identifier" },
        "network_default": {
          "enum": ["none", "same_site", "external_explicit"]
        }
      }
    },
    "budget": {
      "type": "object",
      "additionalProperties": false,
      "required": ["time_ms", "memory_mb", "items", "requests"],
      "properties": {
        "time_ms": { "type": "integer", "minimum": 1 },
        "memory_mb": { "type": "integer", "minimum": 1 },
        "items": { "type": "integer", "minimum": 1 },
        "requests": { "type": "integer", "minimum": 0 }
      }
    },
    "evidenceSchema": {
      "type": "object",
      "additionalProperties": false,
      "required": ["required", "allowed"],
      "properties": {
        "required": {
          "type": "array",
          "items": { "$ref": "#/$defs/identifier" },
          "uniqueItems": true
        },
        "allowed": {
          "type": "array",
          "items": { "$ref": "#/$defs/identifier" },
          "uniqueItems": true
        }
      }
    },
    "redactionPolicy": {
      "type": "object",
      "additionalProperties": false,
      "required": ["store_raw", "mask_paths", "mask_values", "max_excerpt_chars"],
      "properties": {
        "store_raw": { "type": "boolean" },
        "mask_paths": { "type": "boolean" },
        "mask_values": { "type": "boolean" },
        "max_excerpt_chars": { "type": "integer", "minimum": 0, "maximum": 500 }
      }
    },
    "source": {
      "type": "object",
      "additionalProperties": false,
      "required": ["url", "reviewed_at", "kind"],
      "properties": {
        "url": { "type": "string", "format": "uri", "pattern": "^https://" },
        "reviewed_at": { "$ref": "#/$defs/date" },
        "kind": { "enum": ["official", "standard", "law", "research"] }
      }
    },
    "severityPolicy": {
      "type": "object",
      "additionalProperties": false,
      "required": ["pass", "warning", "fail", "info", "not_tested", "error"],
      "properties": {
        "pass": { "$ref": "#/$defs/severity" },
        "warning": { "$ref": "#/$defs/severity" },
        "fail": { "$ref": "#/$defs/severity" },
        "info": { "$ref": "#/$defs/severity" },
        "not_tested": { "$ref": "#/$defs/severity" },
        "error": { "$ref": "#/$defs/severity" }
      }
    },
    "severity": {
      "enum": ["critical", "high", "medium", "low", "info", "none"]
    },
    "confidencePolicy": {
      "type": "object",
      "additionalProperties": false,
      "required": ["base", "partial", "not_tested", "error"],
      "properties": {
        "base": { "$ref": "#/$defs/findingConfidence" },
        "partial": { "$ref": "#/$defs/findingConfidence" },
        "not_tested": { "$ref": "#/$defs/findingConfidence" },
        "error": { "$ref": "#/$defs/findingConfidence" }
      }
    },
    "findingConfidence": {
      "enum": ["confirmed", "high", "medium", "low"]
    },
    "check": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "version",
        "category",
        "profiles",
        "adapter",
        "prerequisites",
        "network",
        "writes",
        "budget",
        "evidence_schema",
        "statuses",
        "severity_logic",
        "confidence",
        "coverage_unit",
        "redaction",
        "i18n",
        "sources",
        "fixture_contract"
      ],
      "properties": {
        "id": { "$ref": "#/$defs/identifier" },
        "version": { "$ref": "#/$defs/semver" },
        "category": { "$ref": "#/$defs/identifier" },
        "profiles": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": { "$ref": "#/$defs/identifier" }
        },
        "adapter": { "$ref": "#/$defs/identifier" },
        "prerequisites": {
          "type": "array",
          "items": { "$ref": "#/$defs/identifier" },
          "uniqueItems": true
        },
        "network": { "enum": ["none", "same_site", "external_explicit"] },
        "writes": { "enum": ["none", "plugin_storage"] },
        "budget": { "$ref": "#/$defs/identifier" },
        "evidence_schema": { "$ref": "#/$defs/identifier" },
        "statuses": {
          "type": "array",
          "minItems": 2,
          "uniqueItems": true,
          "items": {
            "enum": ["pass", "warning", "fail", "info", "not_tested", "error"]
          },
          "allOf": [
            { "contains": { "const": "not_tested" } },
            { "contains": { "const": "error" } }
          ]
        },
        "severity_logic": { "$ref": "#/$defs/identifier" },
        "confidence": { "$ref": "#/$defs/identifier" },
        "coverage_unit": { "$ref": "#/$defs/identifier" },
        "redaction": { "$ref": "#/$defs/identifier" },
        "i18n": { "$ref": "#/$defs/identifier" },
        "sources": {
          "type": "array",
          "uniqueItems": true,
          "items": { "$ref": "#/$defs/identifier" }
        },
        "fixture_contract": { "enum": ["diagnostic", "inventory", "manual", "external"] }
      }
    }
  }
}
