{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://solve-email-bench.invalid/schemas/v1/Participation.json",
  "title": "Participation",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "schemaVersion": {
      "const": "1.0.0"
    },
    "id": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
    },
    "product": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    },
    "productVersion": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    },
    "authorId": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
    },
    "affiliations": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
      },
      "minItems": 1,
      "maxItems": 10000
    },
    "adapter": {
      "$ref": "#/definitions/Adapter"
    },
    "configuration": {
      "type": "object",
      "additionalProperties": true
    }
  },
  "required": [
    "schemaVersion",
    "id",
    "product",
    "productVersion",
    "authorId",
    "affiliations",
    "adapter",
    "configuration"
  ],
  "definitions": {
    "Message": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "from": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "to": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "minItems": 0,
          "maxItems": 10000
        },
        "cc": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "minItems": 0,
          "maxItems": 10000
        },
        "subject": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "date": {
          "type": "string",
          "format": "date-time"
        },
        "body": {
          "type": "string",
          "maxLength": 200000
        }
      },
      "required": [
        "id",
        "from",
        "to",
        "subject",
        "date",
        "body"
      ]
    },
    "Resource": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "kind": {
          "type": "string",
          "enum": [
            "gmail",
            "drive",
            "calendar"
          ]
        },
        "availableAt": {
          "type": "string",
          "format": "date-time"
        },
        "title": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "content": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "metadata": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "required": [
        "id",
        "kind",
        "availableAt",
        "title",
        "content"
      ]
    },
    "Criterion": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "description": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "critical": {
          "type": "boolean"
        },
        "kind": {
          "type": "string",
          "enum": [
            "semantic",
            "required_text",
            "forbidden_text"
          ]
        },
        "value": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "evidence": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "minItems": 1,
          "maxItems": 10000
        }
      },
      "required": [
        "id",
        "description",
        "critical",
        "kind",
        "evidence"
      ]
    },
    "Case": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "cutoff": {
          "type": "string",
          "format": "date-time"
        },
        "input": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "instruction": {
              "type": "string",
              "minLength": 1,
              "maxLength": 10000
            },
            "messages": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Message"
              },
              "minItems": 1,
              "maxItems": 10000
            },
            "resources": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Resource"
              },
              "minItems": 0,
              "maxItems": 10000
            },
            "capabilities": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "gmail",
                  "drive",
                  "calendar",
                  "browser"
                ]
              },
              "minItems": 0,
              "maxItems": 10000
            }
          },
          "required": [
            "instruction",
            "messages",
            "resources",
            "capabilities"
          ]
        },
        "expectations": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "acceptableBehaviors": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "response",
                  "abstention"
                ]
              },
              "minItems": 1,
              "maxItems": 10000
            },
            "criteria": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Criterion"
              },
              "minItems": 1,
              "maxItems": 10000
            }
          },
          "required": [
            "acceptableBehaviors",
            "criteria"
          ]
        }
      },
      "required": [
        "id",
        "cutoff",
        "input",
        "expectations"
      ]
    },
    "Corpus": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schemaVersion": {
          "const": "1.0.0"
        },
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "version": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "title": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "domain": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "language": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "license": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "provenance": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "authorId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "affiliations": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
          },
          "minItems": 1,
          "maxItems": 10000
        },
        "cases": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Case"
          },
          "minItems": 1,
          "maxItems": 10000
        }
      },
      "required": [
        "schemaVersion",
        "id",
        "version",
        "title",
        "domain",
        "language",
        "license",
        "provenance",
        "authorId",
        "affiliations",
        "cases"
      ]
    },
    "Adapter": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "api",
            "sandbox"
          ]
        },
        "endpoint": {
          "type": "string",
          "format": "uri",
          "pattern": "^https://"
        },
        "image": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000,
          "pattern": "^\\S+@sha256:[a-f0-9]{64}$"
        },
        "command": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "minItems": 1,
          "maxItems": 10000
        },
        "backend": {
          "type": "string",
          "enum": [
            "vercel",
            "gvisor"
          ]
        },
        "secretRefs": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^ADAPTER_[A-Z0-9_]+$",
            "maxLength": 128
          },
          "minItems": 0,
          "maxItems": 10000
        },
        "allowedHosts": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "minItems": 1,
          "maxItems": 10000
        },
        "capabilities": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "gmail",
              "drive",
              "calendar",
              "browser"
            ]
          },
          "minItems": 0,
          "maxItems": 10000
        }
      },
      "required": [
        "mode",
        "secretRefs",
        "allowedHosts",
        "capabilities"
      ],
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "mode": {
              "const": "api"
            },
            "secretRefs": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^ADAPTER_[A-Z0-9_]+$",
                "maxLength": 128
              },
              "minItems": 0,
              "maxItems": 10000
            },
            "allowedHosts": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 10000
              },
              "minItems": 1,
              "maxItems": 10000
            },
            "capabilities": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "gmail",
                  "drive",
                  "calendar",
                  "browser"
                ]
              },
              "minItems": 0,
              "maxItems": 10000
            },
            "endpoint": {
              "type": "string",
              "format": "uri",
              "pattern": "^https://"
            }
          },
          "required": [
            "mode",
            "secretRefs",
            "allowedHosts",
            "capabilities",
            "endpoint"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "mode": {
              "const": "sandbox"
            },
            "secretRefs": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^ADAPTER_[A-Z0-9_]+$",
                "maxLength": 128
              },
              "minItems": 0,
              "maxItems": 10000
            },
            "allowedHosts": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 10000
              },
              "minItems": 1,
              "maxItems": 10000
            },
            "capabilities": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "gmail",
                  "drive",
                  "calendar",
                  "browser"
                ]
              },
              "minItems": 0,
              "maxItems": 10000
            },
            "image": {
              "type": "string",
              "minLength": 1,
              "maxLength": 10000,
              "pattern": "^\\S+@sha256:[a-f0-9]{64}$"
            },
            "command": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 10000
              },
              "minItems": 1,
              "maxItems": 10000
            },
            "backend": {
              "type": "string",
              "enum": [
                "vercel",
                "gvisor"
              ]
            }
          },
          "required": [
            "mode",
            "secretRefs",
            "allowedHosts",
            "capabilities",
            "image",
            "command",
            "backend"
          ],
          "additionalProperties": false
        }
      ]
    },
    "Participation": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schemaVersion": {
          "const": "1.0.0"
        },
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "product": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "productVersion": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "authorId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "affiliations": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
          },
          "minItems": 1,
          "maxItems": 10000
        },
        "adapter": {
          "$ref": "#/definitions/Adapter"
        },
        "configuration": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "required": [
        "schemaVersion",
        "id",
        "product",
        "productVersion",
        "authorId",
        "affiliations",
        "adapter",
        "configuration"
      ]
    },
    "Judge": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "family": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "model": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "endpoint": {
          "type": "string",
          "format": "uri"
        },
        "secretRef": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "promptHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        }
      },
      "required": [
        "id",
        "family",
        "model",
        "endpoint",
        "secretRef",
        "promptHash"
      ]
    },
    "Edition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schemaVersion": {
          "const": "1.0.0"
        },
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "corpusHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "protocolHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "participationHashes": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "minItems": 1,
          "maxItems": 10000
        },
        "judges": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Judge"
          },
          "minItems": 3,
          "maxItems": 3
        },
        "calibrationHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "repetitions": {
          "const": 5
        },
        "limits": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "attemptTimeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 86400000
            },
            "maxOutputBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 10485760
            },
            "maxCostMicros": {
              "type": "integer",
              "minimum": 1
            },
            "concurrency": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "technicalRetries": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10
            }
          },
          "required": [
            "attemptTimeoutMs",
            "maxOutputBytes",
            "maxCostMicros",
            "concurrency",
            "technicalRetries"
          ]
        }
      },
      "required": [
        "schemaVersion",
        "id",
        "corpusHash",
        "protocolHash",
        "participationHashes",
        "judges",
        "calibrationHash",
        "repetitions",
        "limits"
      ]
    },
    "AdapterRequest": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schemaVersion": {
          "const": "1.0.0"
        },
        "attemptId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "caseId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "cutoff": {
          "type": "string",
          "format": "date-time"
        },
        "instruction": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "messages": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Message"
          },
          "minItems": 1,
          "maxItems": 10000
        },
        "resources": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "gmail",
                  "drive",
                  "calendar"
                ]
              },
              "externalId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 10000
              }
            },
            "required": [
              "id",
              "kind",
              "externalId"
            ]
          },
          "minItems": 0,
          "maxItems": 10000
        },
        "mailboxMessages": {
          "type": "array",
          "maxItems": 10000,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "messageId": {
                "type": "string",
                "minLength": 1
              },
              "externalId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "messageId",
              "externalId"
            ]
          }
        },
        "accountEmail": {
          "type": "string",
          "format": "email",
          "maxLength": 320
        }
      },
      "required": [
        "schemaVersion",
        "attemptId",
        "caseId",
        "cutoff",
        "instruction",
        "messages",
        "resources"
      ]
    },
    "AdapterResponse": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schemaVersion": {
          "const": "1.0.0"
        },
        "attemptId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "status": {
          "type": "string",
          "enum": [
            "response",
            "abstention",
            "product_unavailable",
            "adapter_error"
          ]
        },
        "text": {
          "type": "string",
          "maxLength": 1000000
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "costMicros": {
          "type": "integer",
          "minimum": 0
        },
        "evidence": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "resourceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 10000
              },
              "action": {
                "type": "string",
                "minLength": 1,
                "maxLength": 10000
              }
            },
            "required": [
              "resourceId",
              "action"
            ]
          },
          "minItems": 0,
          "maxItems": 10000
        }
      },
      "required": [
        "schemaVersion",
        "attemptId",
        "status",
        "text",
        "evidence"
      ]
    },
    "Attempt": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "campaignId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "caseId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "participationHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "repetition": {
          "type": "integer",
          "minimum": 1,
          "maximum": 5
        },
        "status": {
          "type": "string",
          "enum": [
            "scheduled",
            "preparing",
            "executing",
            "captured",
            "cleanup",
            "grading",
            "arbitration",
            "complete",
            "infra_error",
            "unresolved"
          ]
        },
        "startedAt": {
          "type": "string",
          "format": "date-time"
        },
        "capturedAt": {
          "type": "string",
          "format": "date-time"
        },
        "response": {
          "$ref": "#/definitions/AdapterResponse"
        },
        "captureHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "cleanupVerified": {
          "type": "boolean"
        },
        "canaryValid": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "campaignId",
        "caseId",
        "participationHash",
        "repetition",
        "status",
        "cleanupVerified",
        "canaryValid"
      ]
    },
    "Verdict": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "attemptId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "judgeId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "criterionId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "verdict": {
          "type": "string",
          "enum": [
            "pass",
            "fail",
            "unresolved"
          ]
        },
        "quotes": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "minItems": 0,
          "maxItems": 10000
        },
        "rationale": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        }
      },
      "required": [
        "attemptId",
        "judgeId",
        "criterionId",
        "verdict",
        "quotes",
        "rationale"
      ]
    },
    "Admission": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "subjectHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "authorId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "reviewerId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "reviewerAffiliations": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
          },
          "minItems": 1,
          "maxItems": 10000
        },
        "decision": {
          "type": "string",
          "enum": [
            "approve",
            "reject"
          ]
        },
        "reviewedAt": {
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "subjectHash",
        "authorId",
        "reviewerId",
        "reviewerAffiliations",
        "decision",
        "reviewedAt"
      ]
    },
    "Result": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schemaVersion": {
          "const": "1.0.0"
        },
        "id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "campaignId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "product": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "productVersion": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "corpusId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "corpusVersion": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "corpusHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "editionId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$"
        },
        "protocolHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "participationHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "publishedAt": {
          "type": "string",
          "format": "date-time"
        },
        "status": {
          "type": "string",
          "enum": [
            "published",
            "withdrawn",
            "incomplete"
          ]
        },
        "totalAttempts": {
          "type": "integer",
          "minimum": 1
        },
        "criticalErrors": {
          "type": "integer",
          "minimum": 0
        },
        "usefulResponses": {
          "type": "integer",
          "minimum": 0
        },
        "unavailable": {
          "type": "integer",
          "minimum": 0
        },
        "attemptHashes": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "minItems": 0,
          "maxItems": 10000
        },
        "rank": {
          "type": "integer",
          "minimum": 1
        },
        "compared": {
          "type": "integer",
          "minimum": 1
        },
        "canonicalUrl": {
          "type": "string",
          "format": "uri"
        },
        "withdrawalReason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 10000
        },
        "editionHash": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        }
      },
      "required": [
        "schemaVersion",
        "id",
        "campaignId",
        "product",
        "productVersion",
        "corpusId",
        "corpusVersion",
        "corpusHash",
        "editionId",
        "protocolHash",
        "participationHash",
        "publishedAt",
        "status",
        "totalAttempts",
        "criticalErrors",
        "usefulResponses",
        "unavailable",
        "attemptHashes",
        "compared",
        "canonicalUrl",
        "editionHash"
      ]
    }
  }
}
