{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.html-docs.com/research/html-artifact-sharing-benchmark-result-schema-2026.json",
  "title": "Open HTML Artifact Sharing Benchmark Result",
  "description": "A machine-validatable result record for version 1.3 of the Open HTML Artifact Sharing Benchmark Protocol 2026.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "protocol_version",
    "canonical_protocol_url",
    "product",
    "fixture",
    "run",
    "results",
    "summary"
  ],
  "properties": {
    "protocol_version": { "const": "1.3" },
    "canonical_protocol_url": {
      "const": "https://www.html-docs.com/guides/html-artifact-sharing-benchmark"
    },
    "product": {
      "type": "object",
      "additionalProperties": false,
      "required": ["name", "plan", "relationship", "relationship_disclosure"],
      "properties": {
        "name": { "type": "string", "minLength": 1 },
        "plan": { "type": "string", "minLength": 1 },
        "relationship": {
          "type": "string",
          "enum": ["independent", "first-party", "commissioned", "affiliate", "other"]
        },
        "relationship_disclosure": { "type": "string", "minLength": 1 },
        "product_url": { "type": "string", "format": "uri", "pattern": "^https://" }
      }
    },
    "fixture": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "url", "sha256", "checksum_verified"],
      "properties": {
        "id": { "const": "HASB-2026-F1" },
        "url": {
          "const": "https://www.html-docs.com/research/html-artifact-sharing-benchmark-fixture-2026.html"
        },
        "sha256": {
          "const": "fe6f01956e9ac8e8424872bb40d862e5852d9ff3d28d359066045aed45dc3fb8"
        },
        "checksum_verified": { "type": "boolean" }
      }
    },
    "run": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "tester",
        "tested_at",
        "browser",
        "region",
        "account_required",
        "payment_method_required"
      ],
      "properties": {
        "tester": { "type": "string", "minLength": 1 },
        "tested_at": { "type": "string", "format": "date-time" },
        "browser": { "type": "string", "minLength": 1 },
        "region": { "type": "string", "minLength": 1 },
        "agent_client": { "type": ["string", "null"], "minLength": 1 },
        "account_required": { "type": "boolean" },
        "payment_method_required": { "type": "boolean" },
        "active_setup_seconds": { "type": ["integer", "null"], "minimum": 0 },
        "human_wait_seconds": { "type": ["integer", "null"], "minimum": 0 }
      }
    },
    "results": {
      "type": "array",
      "minItems": 10,
      "maxItems": 10,
      "items": { "$ref": "#/$defs/result" },
      "allOf": [
        { "contains": { "type": "object", "properties": { "id": { "const": "B1" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B2" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B3" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B4" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B5" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B6" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B7" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B8" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B9" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 },
        { "contains": { "type": "object", "properties": { "id": { "const": "B10" } }, "required": ["id"] }, "minContains": 1, "maxContains": 1 }
      ]
    },
    "summary": {
      "type": "object",
      "additionalProperties": false,
      "required": ["completed_tests", "total_score", "interpretation", "limitations"],
      "properties": {
        "completed_tests": { "type": "integer", "minimum": 0, "maximum": 10 },
        "total_score": { "type": "integer", "minimum": 0, "maximum": 20 },
        "interpretation": {
          "type": "string",
          "enum": ["not-evaluated", "reported-with-evidence"]
        },
        "limitations": {
          "type": "array",
          "items": { "type": "string", "minLength": 1 },
          "uniqueItems": true
        }
      }
    }
  },
  "$defs": {
    "result": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "score", "status", "tested_url", "evidence", "documentation_urls", "finding", "limitation"],
      "properties": {
        "id": {
          "type": "string",
          "enum": ["B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10"]
        },
        "score": { "type": "integer", "minimum": 0, "maximum": 2 },
        "status": {
          "type": "string",
          "enum": ["reproducible-pass", "qualified-pass", "not-verified"]
        },
        "tested_url": { "type": ["string", "null"], "format": "uri", "pattern": "^https://" },
        "evidence": {
          "type": "array",
          "items": { "type": "string", "format": "uri" },
          "uniqueItems": true
        },
        "documentation_urls": {
          "type": "array",
          "items": { "type": "string", "format": "uri" },
          "uniqueItems": true
        },
        "finding": { "type": "string", "minLength": 1 },
        "limitation": { "type": ["string", "null"], "minLength": 1 }
      },
      "oneOf": [
        {
          "title": "Reproducible pass",
          "properties": {
            "score": { "const": 2 },
            "status": { "const": "reproducible-pass" },
            "evidence": { "type": "array", "minItems": 1 }
          }
        },
        {
          "title": "Qualified pass",
          "properties": {
            "score": { "const": 1 },
            "status": { "const": "qualified-pass" },
            "evidence": { "type": "array", "minItems": 1 },
            "limitation": { "type": "string", "minLength": 1 }
          }
        },
        {
          "title": "Not verified",
          "properties": {
            "score": { "const": 0 },
            "status": { "const": "not-verified" }
          }
        }
      ]
    }
  }
}
