{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://genesiscode.dev/schemas/gc-agent-corpus-v0.1.json",
  "title": "GenesisCode agent corpus manifest v0.1",
  "type": "object",
  "additionalProperties": false,
  "required": ["kind", "version", "corpusId", "profile", "sourcePolicy", "licensePolicy", "splitPolicy", "entries", "contentIdentitySha256"],
  "properties": {
    "kind": {"const": "genesis/agent-corpus-manifest-v0.1"},
    "version": {"const": "0.1.0"},
    "corpusId": {"const": "GC-AGENT-CORPUS-v0.1"},
    "profile": {"$ref": "#/$defs/profile"},
    "sourcePolicy": {"$ref": "#/$defs/sourcePolicy"},
    "licensePolicy": {"$ref": "#/$defs/licensePolicy"},
    "splitPolicy": {"$ref": "#/$defs/splitPolicy"},
    "entries": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/entry"}},
    "contentIdentitySha256": {"$ref": "#/$defs/sha256"}
  },
  "$defs": {
    "sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
    "path": {"type": "string", "pattern": "^[A-Za-z0-9._/-]+$", "not": {"pattern": "(^/|(^|/)\\.\\.?(/|$))"}},
    "profile": {
      "type": "object", "additionalProperties": false,
      "required": ["id", "path", "sha256"],
      "properties": {"id": {"const": "GC-AGENT-v0.3"}, "path": {"const": "docs/spec/GC_AGENT_PROFILE_v0.3.json"}, "sha256": {"$ref": "#/$defs/sha256"}}
    },
    "sourcePolicy": {
      "type": "object", "additionalProperties": false,
      "required": ["repository", "revisionBinding", "provenanceKinds"],
      "properties": {
        "repository": {"const": "https://github.com/corbensorenson/genesisCode"},
        "revisionBinding": {"const": "artifact-sha256-plus-manifest-identity"},
        "provenanceKinds": {"const": ["deterministically-generated", "genesiscode-repository-authored"]}
      }
    },
    "licensePolicy": {
      "type": "object", "additionalProperties": false,
      "required": ["allowedSpdx", "repositoryDefault"],
      "properties": {
        "allowedSpdx": {"const": ["Apache-2.0", "MIT"]},
        "repositoryDefault": {"const": "Apache-2.0 OR MIT"}
      }
    },
    "splitPolicy": {
      "type": "object", "additionalProperties": false,
      "required": ["roles", "heldOutContentMayBeDistributed", "oracleSeparationRequired"],
      "properties": {
        "roles": {"const": ["train", "dev", "public-test", "held-out"]},
        "heldOutContentMayBeDistributed": {"const": false},
        "oracleSeparationRequired": {"const": true}
      }
    },
    "artifact": {
      "type": "object", "additionalProperties": false,
      "required": ["path", "sha256", "spdx", "provenance"],
      "properties": {
        "path": {"$ref": "#/$defs/path"}, "sha256": {"$ref": "#/$defs/sha256"},
        "spdx": {"enum": ["Apache-2.0", "MIT"]},
        "provenance": {"const": "genesiscode-repository-authored"}
      }
    },
    "generator": {
      "type": "object", "additionalProperties": false,
      "required": ["kind", "identity", "path", "sha256"],
      "properties": {
        "kind": {"enum": ["repository-authored", "deterministic-generator"]},
        "identity": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._/-]*$"},
        "path": {"oneOf": [{"$ref": "#/$defs/path"}, {"type": "null"}]},
        "sha256": {"oneOf": [{"$ref": "#/$defs/sha256"}, {"type": "null"}]}
      }
    },
    "difficulty": {
      "type": "object", "additionalProperties": false,
      "required": ["level", "contextBytes", "concepts"],
      "properties": {
        "level": {"enum": ["introductory", "intermediate", "advanced", "adversarial"]},
        "contextBytes": {"type": "integer", "minimum": 1},
        "concepts": {"type": "array", "minItems": 1, "items": {"type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$"}}
      }
    },
    "test": {
      "type": "object", "additionalProperties": false,
      "required": ["id", "argv"],
      "properties": {
        "id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$"},
        "argv": {
          "type": "array", "minItems": 2, "maxItems": 2,
          "prefixItems": [
            {"const": "bash"},
            {"type": "string", "pattern": "^scripts/check_[A-Za-z0-9_]+\\.sh$"}
          ],
          "items": false
        }
      }
    },
    "entry": {
      "type": "object", "additionalProperties": false,
      "required": ["id", "role", "artifacts", "generator", "profileId", "capabilities", "tests", "difficulty", "oracleExposure"],
      "properties": {
        "id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$"},
        "role": {"enum": ["train", "dev", "public-test", "held-out"]},
        "artifacts": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/artifact"}},
        "generator": {"$ref": "#/$defs/generator"},
        "profileId": {"const": "GC-AGENT-v0.3"},
        "capabilities": {"type": "array", "items": {"type": "string", "pattern": "^[a-z][a-z0-9_-]*/[a-z0-9_-]+::[a-z0-9_*-]+$"}},
        "tests": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/test"}},
        "difficulty": {"$ref": "#/$defs/difficulty"},
        "oracleExposure": {"enum": ["public", "commitment-only"]}
      }
    }
  }
}
