{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:orbiplex:schema:operator-task-loop-mandate-payload:v1",
  "title": "operator-task-loop-mandate-payload.v1",
  "x-dia-workflow": "project",
  "x-dia-status": "draft",
  "x-dia-basis": [
    "doc/project/40-proposals/094-operator-task-packs-for-bounded-problem-solving.md"
  ],
  "description": "Signed, revocable delegation for one already opened loop, including future owner-admitted plans. Exact opening and binding commitments prevent renewal, rebinding or reuse. No publication, identity, configuration or network widening is granted.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema",
    "schema/v",
    "loop/query-id",
    "loop/opening-digest",
    "pins",
    "bounds",
    "agent/profiles",
    "delegate/ref",
    "allowed/actions",
    "valid/from",
    "valid/until",
    "confirmation/mode"
  ],
  "properties": {
    "agent/profiles": {
      "type": "array",
      "minItems": 1,
      "maxItems": 8,
      "uniqueItems": true,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["profile/ref", "profile/digest"],
        "properties": {
          "profile/ref": { "$ref": "corpus-task-pack-turn.prepare.request.v1.schema.json#/$defs/ref" },
          "profile/digest": { "$ref": "operator-task-common.v1.schema.json#/$defs/digest" }
        }
      }
    },
    "schema": {
      "const": "operator-task-loop-mandate-payload.v1"
    },
    "schema/v": {
      "const": 1
    },
    "loop/query-id": {
      "$ref": "operator-task-common.v1.schema.json#/$defs/ref"
    },
    "loop/opening-digest": {
      "$ref": "operator-task-common.v1.schema.json#/$defs/digest"
    },
    "pins": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "node/ref",
        "operator/binding-ref",
        "participant/ref",
        "binding/ref",
        "binding/digest",
        "task-profile/digest",
        "activation/generation"
      ],
      "properties": {
        "node/ref": {
          "$ref": "operator-task-common.v1.schema.json#/$defs/ref"
        },
        "operator/binding-ref": {
          "$ref": "operator-task-common.v1.schema.json#/$defs/operatorBindingRef"
        },
        "participant/ref": {
          "$ref": "operator-task-common.v1.schema.json#/$defs/ref"
        },
        "binding/ref": {
          "$ref": "operator-task-common.v1.schema.json#/$defs/ref"
        },
        "binding/digest": {
          "$ref": "operator-task-common.v1.schema.json#/$defs/digest"
        },
        "task-profile/digest": {
          "$ref": "operator-task-common.v1.schema.json#/$defs/digest"
        },
        "activation/generation": {
          "$ref": "operator-task-common.v1.schema.json#/$defs/counter"
        }
      }
    },
    "bounds": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "max/passages",
        "max/solver-passages",
        "max/reviewer-passages",
        "max/cycles",
        "max/experiments",
        "max/wall-time-ms"
      ],
      "properties": {
        "max/passages": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000
        },
        "max/solver-passages": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000
        },
        "max/reviewer-passages": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000
        },
        "max/cycles": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "max/experiments": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "max/wall-time-ms": {
          "type": "integer",
          "minimum": 1,
          "maximum": 86400000
        }
      }
    },
    "delegate/ref": {
      "const": "local-executor:task-pack-delegate"
    },
    "allowed/actions": {
      "type": "array",
      "minItems": 1,
      "maxItems": 5,
      "uniqueItems": true,
      "items": {
        "enum": [
          "model-turn",
          "communication",
          "chair-admit-reviewed",
          "experiment-plan",
          "experiment-step"
        ]
      }
    },
    "valid/from": {
      "$ref": "operator-task-common.v1.schema.json#/$defs/timestamp"
    },
    "valid/until": {
      "$ref": "operator-task-common.v1.schema.json#/$defs/timestamp"
    },
    "confirmation/mode": {
      "const": "delegated"
    }
  }
}
