{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "PreyLab experiment protocol v2",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "format",
    "schemaVersion",
    "numerical",
    "interventions"
  ],
  "properties": {
    "format": {
      "const": "preylab.experiment-protocol"
    },
    "schemaVersion": {
      "const": 2
    },
    "numerical": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "maxCells"
      ],
      "properties": {
        "maxCells": {
          "type": "integer",
          "minimum": 1,
          "maximum": 512
        }
      }
    },
    "interventions": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "supportBirthFraction",
        "supportLifespanMs",
        "mutationRate",
        "mutationStep"
      ],
      "properties": {
        "supportBirthFraction": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "supportLifespanMs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 3600000
        },
        "mutationRate": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "mutationStep": {
          "type": "number",
          "minimum": 0.005,
          "maximum": 0.25,
          "description": "Maximum signed step as a fraction of each continuous locus range; categorical loci move one valid option"
        }
      }
    }
  }
}
