{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://usemakoto.dev/schema/v0.2/transform.schema.json",
  "title": "Makoto v0.2 Transformation Predicate",
  "type": "object",
  "required": ["schemaVersion", "event", "operation", "inputs"],
  "properties": {
    "schemaVersion": { "const": "0.2" },
    "event": { "$ref": "#/$defs/event" },
    "operation": { "$ref": "#/$defs/operation" },
    "inputs": {
      "type": "array",
      "minItems": 1,
      "items": { "$ref": "#/$defs/input" }
    },
    "profiles": {
      "type": "array",
      "items": { "$ref": "https://usemakoto.dev/schema/v0.2/profile-reference.schema.json" }
    },
    "extensions": { "$ref": "#/$defs/extensions" }
  },
  "$defs": {
    "digest": {
      "type": "object",
      "required": ["sha256"],
      "properties": { "sha256": { "type": "string", "minLength": 64, "maxLength": 64 } },
      "additionalProperties": false
    },
    "timestamp": {
      "type": "string",
      "minLength": 20,
      "maxLength": 30
    },
    "event": {
      "type": "object",
      "required": ["id", "occurredAt"],
      "properties": {
        "id": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "occurredAt": { "$ref": "#/$defs/timestamp" }
      },
      "additionalProperties": false
    },
    "tool": {
      "type": "object",
      "properties": {
        "name": { "type": "string", "maxLength": 4096 },
        "version": { "type": "string", "maxLength": 4096 },
        "uri": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "digest": { "$ref": "#/$defs/digest" }
      },
      "additionalProperties": false
    },
    "operation": {
      "type": "object",
      "required": ["type"],
      "properties": {
        "type": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "name": { "type": "string", "maxLength": 4096 },
        "tool": { "$ref": "#/$defs/tool" },
        "parametersDigest": { "$ref": "#/$defs/digest" }
      },
      "additionalProperties": false
    },
    "provenance": {
      "type": "object",
      "required": ["statementDigest", "subjectName"],
      "properties": {
        "statementDigest": { "$ref": "#/$defs/digest" },
        "subjectName": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "entryName": { "type": "string", "minLength": 1, "maxLength": 1024 }
      },
      "additionalProperties": false
    },
    "input": {
      "type": "object",
      "required": ["name", "digest", "provenance"],
      "properties": {
        "name": { "type": "string", "minLength": 1, "maxLength": 4096 },
        "digest": { "$ref": "#/$defs/digest" },
        "provenance": { "$ref": "#/$defs/provenance" }
      },
      "additionalProperties": false
    },
    "extensions": {
      "type": "object",
      "additionalProperties": true
    }
  },
  "additionalProperties": false
}
