{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://oshun.dev/schemas/eve-sota-media-project-governance.schema.json",
  "title": "Eve media and project-file governance record",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "initiativeId",
    "taskId",
    "evaluatedOn",
    "policy",
    "officialSources",
    "requestedUses",
    "materialRoles",
    "controls",
    "sourceBindings",
    "limitations"
  ],
  "properties": {
    "schemaVersion": { "const": "eve.media-project-governance.v1" },
    "initiativeId": { "const": "eve-sota-gap-closure-2026-09-01" },
    "taskId": { "const": "14.7" },
    "evaluatedOn": { "type": "string", "format": "date" },
    "policy": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "notLegalAdvice",
        "engineeringMayNotClaimCompliance",
        "missingEvidenceDefault",
        "rightsDecisionOwner",
        "productionRequiresPreflight",
        "publicationRequiresOutputReview"
      ],
      "properties": {
        "notLegalAdvice": { "const": true },
        "engineeringMayNotClaimCompliance": { "const": true },
        "missingEvidenceDefault": { "const": "block" },
        "rightsDecisionOwner": { "const": "role:rights-reviewer" },
        "productionRequiresPreflight": { "const": true },
        "publicationRequiresOutputReview": { "const": true }
      }
    },
    "officialSources": {
      "type": "array",
      "minItems": 4,
      "uniqueItems": true,
      "items": { "$ref": "#/$defs/officialSource" }
    },
    "requestedUses": {
      "type": "array",
      "minItems": 4,
      "uniqueItems": true,
      "items": { "enum": ["generation", "publication", "redistribution", "model-training"] }
    },
    "materialRoles": {
      "type": "array",
      "minItems": 7,
      "uniqueItems": true,
      "items": {
        "enum": [
          "source_asset",
          "project_file",
          "output_license",
          "model_license",
          "dataset_license",
          "likeness_license",
          "voice_license"
        ]
      }
    },
    "controls": {
      "type": "array",
      "minItems": 9,
      "items": { "$ref": "#/$defs/control" }
    },
    "sourceBindings": {
      "type": "array",
      "minItems": 4,
      "items": { "$ref": "#/$defs/sourceBinding" }
    },
    "limitations": {
      "type": "array",
      "minItems": 3,
      "items": { "$ref": "#/$defs/limitation" }
    }
  },
  "$defs": {
    "id": { "type": "string", "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" },
    "nonEmpty": { "type": "string", "minLength": 1 },
    "officialSource": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "authority", "kind", "url", "retrievedOn", "claimBoundary"],
      "properties": {
        "id": { "$ref": "#/$defs/id" },
        "authority": { "$ref": "#/$defs/nonEmpty" },
        "kind": { "$ref": "#/$defs/nonEmpty" },
        "url": { "type": "string", "format": "uri", "pattern": "^https://" },
        "retrievedOn": { "type": "string", "format": "date" },
        "claimBoundary": { "$ref": "#/$defs/nonEmpty" }
      }
    },
    "control": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "stage", "decision", "requiredEvidence", "sourceBindingRefs"],
      "properties": {
        "id": { "$ref": "#/$defs/id" },
        "stage": { "enum": ["pre-production", "pre-publication", "both"] },
        "decision": { "const": "block-on-missing-or-conflicting-evidence" },
        "requiredEvidence": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": { "$ref": "#/$defs/nonEmpty" }
        },
        "sourceBindingRefs": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": { "$ref": "#/$defs/id" }
        }
      }
    },
    "sourceBinding": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "source", "includes"],
      "properties": {
        "id": { "$ref": "#/$defs/id" },
        "source": { "$ref": "#/$defs/nonEmpty" },
        "includes": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": { "$ref": "#/$defs/nonEmpty" }
        }
      }
    },
    "limitation": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "statement"],
      "properties": {
        "id": { "$ref": "#/$defs/id" },
        "statement": { "$ref": "#/$defs/nonEmpty" }
      }
    }
  }
}
