{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://benchmarks.duellab.org/release_manifest.schema.json",
  "title": "PublicReleaseManifestV6",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema_version",
    "public_release_id",
    "generated_at",
    "benchmark_line",
    "benchmark_version",
    "source_commit",
    "scoring_policy_id",
    "reasoning_policy_id",
    "reasoning_catalog_sha256",
    "correction_authority_sha256",
    "rating_method_id",
    "game_policy",
    "public_input_sha256",
    "name",
    "preferred_description",
    "canonical_url",
    "release_url",
    "comparison_boundary",
    "game_count",
    "model_count",
    "reasoning_variant_count",
    "model_family_count",
    "total_model_setting_variant_count",
    "ranked_model_setting_variant_count",
    "provisional_model_setting_variant_count",
    "ranked_overall_model_count",
    "partial_overall_model_count",
    "unique_code_entrant_count",
    "per_game_unique_entrant_counts",
    "rated_match_count",
    "top_reasoning_variants",
    "data_license",
    "data_license_url",
    "citation_url",
    "citation_artifacts",
    "artifact_sha256"
  ],
  "properties": {
    "schema_version": { "const": 6 },
    "public_release_id": { "type": "string", "pattern": "^gb2-[0-9]{8}-[a-f0-9]{12}$" },
    "generated_at": { "type": "string", "format": "date-time" },
    "benchmark_line": { "const": "gamebench2" },
    "benchmark_version": { "type": "string", "minLength": 1 },
    "source_commit": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
    "scoring_policy_id": { "type": "string", "minLength": 1 },
    "reasoning_policy_id": { "const": "gb2_reasoning_brackets_v2" },
    "reasoning_catalog_sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
    "correction_authority_sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
    "rating_method_id": { "type": "string", "minLength": 1 },
    "game_policy": { "const": "public_named" },
    "public_input_sha256": {
      "type": "object",
      "additionalProperties": false,
      "required": ["results/public_leaderboard.json"],
      "properties": {
        "results/public_leaderboard.json": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "results/public_charts_metrics.json": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "results/generation_telemetry_coverage.json": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "suite/public_manifest.json": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "archive/archive_v1.json": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "options/rating_method_override": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        }
      }
    },
    "name": { "const": "DuelLab GameBench 2" },
    "preferred_description": { "type": "string", "minLength": 100 },
    "canonical_url": { "const": "https://benchmarks.duellab.org/" },
    "release_url": {
      "type": "string",
      "format": "uri",
      "pattern": "^https://benchmarks\\.duellab\\.org/releases/gb2-[0-9]{8}-[a-f0-9]{12}/$"
    },
    "comparison_boundary": { "type": "string", "minLength": 40 },
    "game_count": { "type": "integer", "minimum": 0 },
    "model_count": { "type": "integer", "minimum": 0 },
    "reasoning_variant_count": { "type": "integer", "minimum": 0 },
    "model_family_count": { "type": "integer", "minimum": 0 },
    "total_model_setting_variant_count": { "type": "integer", "minimum": 0 },
    "ranked_model_setting_variant_count": { "type": "integer", "minimum": 0 },
    "provisional_model_setting_variant_count": { "type": "integer", "minimum": 0 },
    "ranked_overall_model_count": { "type": "integer", "minimum": 0 },
    "partial_overall_model_count": { "type": "integer", "minimum": 0 },
    "unique_code_entrant_count": { "type": "integer", "minimum": 0 },
    "per_game_unique_entrant_counts": {
      "type": "object",
      "additionalProperties": { "type": "integer", "minimum": 0 }
    },
    "rated_match_count": { "type": "integer", "minimum": 0 },
    "top_reasoning_variants": {
      "type": "array",
      "maxItems": 3,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["rank", "model_name", "reasoning", "reasoning_bracket", "score"],
        "properties": {
          "rank": { "type": "integer", "minimum": 1 },
          "model_name": { "type": "string", "minLength": 1 },
          "reasoning": { "type": "string", "minLength": 1 },
          "reasoning_bracket": { "enum": ["baseline", "balanced", "intensive", "unknown"] },
          "score": { "type": "number" }
        }
      }
    },
    "data_license": { "const": "CC BY 4.0" },
    "data_license_url": { "const": "https://creativecommons.org/licenses/by/4.0/" },
    "citation_url": { "const": "https://duellab.org/citation" },
    "citation_artifacts": {
      "type": "object",
      "additionalProperties": false,
      "required": ["bibtex", "citation_cff", "csl_json", "plain_text", "ris"],
      "properties": {
        "bibtex": { "type": "string", "format": "uri" },
        "citation_cff": { "type": "string", "format": "uri" },
        "csl_json": { "type": "string", "format": "uri" },
        "plain_text": { "type": "string", "format": "uri" },
        "ris": { "type": "string", "format": "uri" }
      }
    },
    "artifact_sha256": {
      "type": "object",
      "minProperties": 1,
      "propertyNames": { "not": { "pattern": "(^|/)release-manifest\\.json$" } },
      "additionalProperties": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
    }
  }
}
