{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://grids365.dev/corpus/evaluation/private-suite.schema.json",
  "title": "Grid private evaluation suite manifest",
  "type": "object",
  "required": [
    "schemaVersion",
    "protocolVersion",
    "suiteId",
    "suiteVersion",
    "status",
    "language",
    "createdAt",
    "frozenAt",
    "policy",
    "trainingInventorySha256",
    "runner",
    "generation",
    "execution",
    "files"
  ],
  "properties": {
    "schemaVersion": { "const": 1 },
    "protocolVersion": { "const": 1 },
    "suiteId": { "$ref": "#/$defs/opaqueId" },
    "suiteVersion": {
      "type": "string",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
    },
    "status": { "const": "frozen" },
    "language": {
      "type": "object",
      "required": ["name", "version", "sourceCommit"],
      "properties": {
        "name": { "const": "Grid" },
        "version": {
          "type": "string",
          "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
        },
        "sourceCommit": {
          "type": "string",
          "pattern": "^[0-9a-f]{40,64}$"
        }
      },
      "additionalProperties": false
    },
    "createdAt": { "type": "string", "format": "date-time" },
    "frozenAt": { "type": "string", "format": "date-time" },
    "policy": {
      "type": "object",
      "required": ["id", "sha256"],
      "properties": {
        "id": { "const": "grid-private-evaluation-boundary-v1" },
        "sha256": { "$ref": "#/$defs/sha256" }
      },
      "additionalProperties": false
    },
    "trainingInventorySha256": { "$ref": "#/$defs/sha256" },
    "runner": { "$ref": "#/$defs/runner" },
    "generation": { "$ref": "#/$defs/generation" },
    "execution": {
      "type": "object",
      "required": [
        "compilerBuildProvenanceSha256",
        "runtimeBuildProvenanceSha256",
        "compilerBuildSha256",
        "runtimeBuildSha256"
      ],
      "properties": {
        "compilerBuildProvenanceSha256": { "$ref": "#/$defs/sha256" },
        "runtimeBuildProvenanceSha256": { "$ref": "#/$defs/sha256" },
        "compilerBuildSha256": { "$ref": "#/$defs/sha256" },
        "runtimeBuildSha256": { "$ref": "#/$defs/sha256" }
      },
      "additionalProperties": false
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": ["path", "split", "sha256", "bytes", "records"],
        "properties": {
          "path": { "$ref": "#/$defs/relativePath" },
          "split": { "enum": ["validation", "test"] },
          "sha256": { "$ref": "#/$defs/sha256" },
          "bytes": { "type": "integer", "minimum": 1 },
          "records": { "type": "integer", "minimum": 1 }
        },
        "additionalProperties": false
      }
    }
  },
  "$defs": {
    "opaqueId": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
    "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
    "runner": {
      "type": "object",
      "required": ["sourceCommit", "scriptSha256"],
      "properties": {
        "sourceCommit": { "type": "string", "pattern": "^[0-9a-f]{40,64}$" },
        "scriptSha256": { "$ref": "#/$defs/sha256" }
      },
      "additionalProperties": false
    },
    "generation": {
      "type": "object",
      "required": ["temperature", "maxOutputTokens", "seed"],
      "properties": {
        "temperature": { "const": 0 },
        "maxOutputTokens": { "type": "integer", "minimum": 1, "maximum": 1048576 },
        "seed": {
          "type": "integer",
          "minimum": -2147483648,
          "maximum": 2147483647
        }
      },
      "additionalProperties": false
    },
    "relativePath": {
      "type": "string",
      "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*(?:^|/)\\.(?:/|$))[^\\\\\\u0000]+$"
    }
  },
  "additionalProperties": false
}
