{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://flow.jig.md/schemas/schema-1.json",
  "title": "FLOW Schema/1 file",
  "description": "Machine-checkable structural profile for a root Schema/1 file. Reference existence, acyclicity, aggregate limits, and the deterministic work meter are additional normative checks.",
  "type": "object",
  "required": [
    "$schema"
  ],
  "properties": {
    "$schema": {
      "const": "https://flow.jig.md/schemas/schema-1.json"
    },
    "$defs": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/schema"
      }
    }
  },
  "allOf": [
    {
      "$ref": "#/$defs/keyword-object"
    }
  ],
  "unevaluatedProperties": false,
  "$defs": {
    "schema": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/schema-object"
        }
      ]
    },
    "schema-object": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/$defs/keyword-object"
        }
      ],
      "unevaluatedProperties": false
    },
    "keyword-object": {
      "type": "object",
      "properties": {
        "$ref": {
          "type": "string",
          "pattern": "^#/\\$defs/[A-Za-z][A-Za-z0-9]{0,63}$"
        },
        "$comment": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "examples": {
          "type": "array"
        },
        "type": {
          "oneOf": [
            {
              "$ref": "#/$defs/simple-type"
            },
            {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "items": {
                "$ref": "#/$defs/simple-type"
              }
            }
          ]
        },
        "enum": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/scalar"
          }
        },
        "const": {
          "$ref": "#/$defs/scalar"
        },
        "allOf": {
          "$ref": "#/$defs/nonempty-schema-array"
        },
        "anyOf": {
          "$ref": "#/$defs/nonempty-schema-array"
        },
        "oneOf": {
          "$ref": "#/$defs/nonempty-schema-array"
        },
        "not": {
          "$ref": "#/$defs/schema"
        },
        "if": {
          "$ref": "#/$defs/schema"
        },
        "then": {
          "$ref": "#/$defs/schema"
        },
        "else": {
          "$ref": "#/$defs/schema"
        },
        "properties": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/schema"
          }
        },
        "required": {
          "$ref": "#/$defs/string-array"
        },
        "additionalProperties": {
          "$ref": "#/$defs/schema"
        },
        "minProperties": {
          "$ref": "#/$defs/nonnegative-integer"
        },
        "maxProperties": {
          "$ref": "#/$defs/nonnegative-integer"
        },
        "dependentRequired": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/string-array"
          }
        },
        "dependentSchemas": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/schema"
          }
        },
        "prefixItems": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/schema"
          }
        },
        "items": {
          "$ref": "#/$defs/schema"
        },
        "contains": {
          "$ref": "#/$defs/schema"
        },
        "minContains": {
          "$ref": "#/$defs/nonnegative-integer"
        },
        "maxContains": {
          "$ref": "#/$defs/nonnegative-integer"
        },
        "minItems": {
          "$ref": "#/$defs/nonnegative-integer"
        },
        "maxItems": {
          "$ref": "#/$defs/nonnegative-integer"
        },
        "minLength": {
          "$ref": "#/$defs/nonnegative-integer"
        },
        "maxLength": {
          "$ref": "#/$defs/nonnegative-integer"
        },
        "minimum": {
          "type": "number"
        },
        "exclusiveMinimum": {
          "type": "number"
        },
        "maximum": {
          "type": "number"
        },
        "exclusiveMaximum": {
          "type": "number"
        }
      }
    },
    "simple-type": {
      "enum": [
        "null",
        "boolean",
        "object",
        "array",
        "number",
        "integer",
        "string"
      ]
    },
    "scalar": {
      "type": [
        "null",
        "boolean",
        "number",
        "string"
      ]
    },
    "nonempty-schema-array": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/schema"
      }
    },
    "string-array": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "nonnegative-integer": {
      "type": "integer",
      "minimum": 0
    }
  }
}