Sign in

← All schemas

Schema · coordinator/message

Coordinator message v0

One typed message between agents, sessions and the coordinator (RFC 0147.1). Delivery is at-least-once; receivers dedupe on id. Bodies carry ids, refs and short text only, never content, and a body is at most 8 KiB (the byte total is a server rule; fields are capped here). release.go is accepted only from an approvals sender.

Canonical $id, draft
https://schemas.inorbit.hr/coordinator/message/v0.json
01Versions

Each version is a file at its own address. The raw file is plain JSON, served without a sign-in.

02Fields

Fields of v0, the newest version, by path. A name ending in [] is each item of a list. Every field not listed is refused.

  • schemastringrequired

    Always"coordinator/message/v0"

  • idstringrequired

    pattern ^[0-9A-HJKMNP-TV-Z]{26}$

  • kindenumrequired

    One of"session.hello""session.heartbeat""session.bye""task.assign""task.progress""task.result""ask.open""ask.answer""review.request""review.result""handoff""plan.plan""plan.item""plan.link""plan.activity""plan.remove""release.ready""release.batch""release.go""release.status""release.rolled""ack""nack"

  • fromobjectrequired
  • from.agentstringrequired

    pattern ^(coordinator|session|worker|subagent|runner|approvals|owner):[A-Za-z0-9._-]{1,100}$

  • from.sessionstringoptional

    at least 1 charactersat most 100 characters

  • from.providerenumoptional

    One of"claude""codex""other"

  • from.accountstringoptional

    at least 1 charactersat most 100 characters

  • toanyrequired
  • thread_idstringoptional

    at least 1 charactersat most 100 characters

  • correlation_idstringoptional

    at least 1 charactersat most 100 characters

  • reply_tostringoptional

    pattern ^[0-9A-HJKMNP-TV-Z]{26}$

  • planobjectoptional
  • plan.planstringrequired

    at least 1 charactersat most 80 characters

  • plan.itemstringoptional

    at least 1 charactersat most 100 characters

  • atstringrequired

    pattern ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$at most 40 characters

  • expires_atstringoptional

    pattern ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$at most 40 characters

  • priorityenumoptional

    One of"low""normal""high""urgent"

  • bodyobjectrequired
03Examples

Valid documents with made-up values, as the repository's tests check them.

{
  "schema": "coordinator/message/v0",
  "id": "01J9Z3K5Q7R8S9T0V1W2X3Y00Q",
  "kind": "ack",
  "from": {
    "agent": "worker:tm-c1",
    "session": "tm-c1-message-schema",
    "provider": "claude",
    "account": "engineering"
  },
  "to": {
    "role": "coordinator"
  },
  "at": "2026-10-17T17:00:00Z",
  "body": {
    "message_id": "01J9Z3K5Q7R8S9T0V1W2X3Y001"
  },
  "reply_to": "01J9Z3K5Q7R8S9T0V1W2X3Y001"
}

The repository's tests also check 9 documents that this schema must refuse.

04Check a file against it

Replace the file name with yours.

VS Code, JetBrains: settings
"json.schemas": [
  { "fileMatch": ["my-file.json"], "url": "https://schemas.inorbit.hr/coordinator/message/v0.json" }
]
check-jsonschema
check-jsonschema --schemafile https://schemas.inorbit.hr/coordinator/message/v0.json my-file.json
ajv-cli
ajv validate --spec=draft2020 -s <(curl -s https://schemas.inorbit.hr/coordinator/message/v0.json) -d my-file.json
curl
curl -s https://schemas.inorbit.hr/coordinator/message/v0.json
05The schema itself

The raw file of v0, as published.

schemas.inorbit.hr/coordinator/message/v0.json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schemas.inorbit.hr/coordinator/message/v0.json",
  "title": "Coordinator message v0",
  "description": "One typed message between agents, sessions and the coordinator (RFC 0147.1). Delivery is at-least-once; receivers dedupe on id. Bodies carry ids, refs and short text only, never content, and a body is at most 8 KiB (the byte total is a server rule; fields are capped here). release.go is accepted only from an approvals sender.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema",
    "id",
    "kind",
    "from",
    "to",
    "at",
    "body"
  ],
  "properties": {
    "schema": {
      "const": "coordinator/message/v0"
    },
    "id": {
      "type": "string",
      "pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
    },
    "kind": {
      "enum": [
        "session.hello",
        "session.heartbeat",
        "session.bye",
        "task.assign",
        "task.progress",
        "task.result",
        "ask.open",
        "ask.answer",
        "review.request",
        "review.result",
        "handoff",
        "plan.plan",
        "plan.item",
        "plan.link",
        "plan.activity",
        "plan.remove",
        "release.ready",
        "release.batch",
        "release.go",
        "release.status",
        "release.rolled",
        "ack",
        "nack"
      ]
    },
    "from": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "agent"
      ],
      "properties": {
        "agent": {
          "type": "string",
          "pattern": "^(coordinator|session|worker|subagent|runner|approvals|owner):[A-Za-z0-9._-]{1,100}$"
        },
        "session": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "provider": {
          "enum": [
            "claude",
            "codex",
            "other"
          ]
        },
        "account": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      }
    },
    "to": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "agent"
          ],
          "properties": {
            "agent": {
              "type": "string",
              "pattern": "^(coordinator|session|worker|subagent|runner|approvals|owner):[A-Za-z0-9._-]{1,100}$"
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "role"
          ],
          "properties": {
            "role": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "thread_id"
          ],
          "properties": {
            "thread_id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "broadcast"
          ],
          "properties": {
            "broadcast": {
              "const": true
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "approvals"
          ],
          "properties": {
            "approvals": {
              "const": true
            }
          }
        }
      ]
    },
    "thread_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "correlation_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "reply_to": {
      "type": "string",
      "pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
    },
    "plan": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "plan"
      ],
      "properties": {
        "plan": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "item": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      }
    },
    "at": {
      "type": "string",
      "maxLength": 40,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$"
    },
    "expires_at": {
      "type": "string",
      "maxLength": 40,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$"
    },
    "priority": {
      "enum": [
        "low",
        "normal",
        "high",
        "urgent"
      ]
    },
    "body": {
      "type": "object"
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "kind": {
            "const": "session.hello"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_session_hello"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "session.heartbeat"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_session_heartbeat"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "session.bye"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_session_bye"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "task.assign"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_task_assign"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "task.progress"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_task_progress"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "task.result"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_task_result"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "ask.open"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_ask_open"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "ask.answer"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_ask_answer"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "review.request"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_review_request"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "review.result"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_review_result"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "handoff"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_handoff"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "plan.plan"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_plan_plan"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "plan.item"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_plan_item"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "plan.link"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_plan_link"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "plan.activity"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_plan_activity"
          },
          "plan": {
            "required": [
              "item"
            ]
          }
        },
        "required": [
          "plan"
        ]
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "plan.remove"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_plan_remove"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "release.ready"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_release_ready"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "release.batch"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_release_batch"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "release.go"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_release_go"
          },
          "from": {
            "type": "object",
            "properties": {
              "agent": {
                "pattern": "^approvals:"
              }
            }
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "release.status"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_release_status"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "release.rolled"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_release_rolled"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "ack"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_ack"
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "nack"
          }
        },
        "required": [
          "kind"
        ]
      },
      "then": {
        "properties": {
          "body": {
            "$ref": "#/$defs/body_nack"
          }
        }
      }
    }
  ],
  "$defs": {
    "body_session_hello": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "role"
      ],
      "properties": {
        "role": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "capabilities": {
          "type": "array",
          "maxItems": 32,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "worktree": {
          "type": "string",
          "minLength": 1,
          "maxLength": 300
        },
        "branch": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      }
    },
    "body_session_heartbeat": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "status"
      ],
      "properties": {
        "status": {
          "enum": [
            "idle",
            "working",
            "blocked"
          ]
        },
        "item": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "note": {
          "type": "string",
          "minLength": 1,
          "maxLength": 300
        }
      }
    },
    "body_session_bye": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "reason"
      ],
      "properties": {
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 300
        }
      }
    },
    "body_task_assign": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "title"
      ],
      "properties": {
        "title": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "brief": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000
        },
        "ref": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      }
    },
    "body_task_progress": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500
        },
        "percent": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100
        }
      }
    },
    "body_task_result": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "outcome"
      ],
      "properties": {
        "outcome": {
          "enum": [
            "done",
            "failed",
            "cancelled"
          ]
        },
        "summary": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1000
        },
        "pr": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "repo",
            "number"
          ],
          "properties": {
            "repo": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "number": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2147483647
            }
          }
        }
      }
    },
    "body_ask_open": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "question"
      ],
      "properties": {
        "question": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1000
        },
        "options": {
          "type": "array",
          "minItems": 2,
          "maxItems": 4,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        }
      }
    },
    "body_ask_answer": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "answer"
      ],
      "properties": {
        "answer": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1000
        }
      }
    },
    "body_review_request": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "pr"
      ],
      "properties": {
        "pr": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "repo",
            "number"
          ],
          "properties": {
            "repo": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "number": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2147483647
            }
          }
        },
        "focus": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500
        }
      }
    },
    "body_review_result": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "pr",
        "verdict"
      ],
      "properties": {
        "pr": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "repo",
            "number"
          ],
          "properties": {
            "repo": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "number": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2147483647
            }
          }
        },
        "verdict": {
          "enum": [
            "pass",
            "hold",
            "fail"
          ]
        },
        "findings": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000
        }
      }
    },
    "body_handoff": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "summary"
      ],
      "properties": {
        "summary": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000
        },
        "refs": {
          "type": "array",
          "maxItems": 16,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        }
      }
    },
    "body_plan_plan": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "title"
      ],
      "properties": {
        "title": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "summary": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1000
        }
      }
    },
    "body_plan_item": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "kind": {
          "enum": [
            "goal",
            "step",
            "prd",
            "rfc",
            "adr",
            "study",
            "diagram",
            "pr",
            "note"
          ]
        },
        "parent": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "title": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "status": {
          "enum": [
            "proposed",
            "building",
            "ready",
            "done",
            "dropped"
          ]
        },
        "body": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000
        }
      }
    },
    "body_plan_link": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "from",
        "to"
      ],
      "properties": {
        "from": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "to": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      }
    },
    "body_plan_activity": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500
        }
      }
    },
    "body_plan_remove": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      }
    },
    "body_release_ready": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "pr",
        "head"
      ],
      "properties": {
        "pr": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "repo",
            "number"
          ],
          "properties": {
            "repo": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "number": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2147483647
            }
          }
        },
        "head": {
          "type": "string",
          "pattern": "^[0-9a-f]{40}$"
        }
      }
    },
    "body_release_batch": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "batch",
        "prs"
      ],
      "properties": {
        "batch": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "prs": {
          "type": "array",
          "minItems": 1,
          "maxItems": 64,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "repo",
              "number"
            ],
            "properties": {
              "repo": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "number": {
                "type": "integer",
                "minimum": 1,
                "maximum": 2147483647
              }
            }
          }
        }
      }
    },
    "body_release_go": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "batch"
      ],
      "properties": {
        "batch": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "note": {
          "type": "string",
          "minLength": 1,
          "maxLength": 300
        }
      }
    },
    "body_release_status": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "batch",
        "state"
      ],
      "properties": {
        "batch": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "state": {
          "enum": [
            "queued",
            "gating",
            "merging",
            "rolling",
            "done",
            "failed"
          ]
        },
        "detail": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500
        }
      }
    },
    "body_release_rolled": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "batch",
        "commit"
      ],
      "properties": {
        "batch": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "commit": {
          "type": "string",
          "pattern": "^[0-9a-f]{40}$"
        },
        "deployments": {
          "type": "array",
          "maxItems": 32,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          }
        }
      }
    },
    "body_ack": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "message_id"
      ],
      "properties": {
        "message_id": {
          "type": "string",
          "pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
        }
      }
    },
    "body_nack": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "message_id",
        "reason"
      ],
      "properties": {
        "message_id": {
          "type": "string",
          "pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
        },
        "reason": {
          "enum": [
            "unknown_kind",
            "invalid",
            "forbidden",
            "expired",
            "unknown_target",
            "plan_mismatch",
            "stale_head",
            "main_moved"
          ]
        },
        "detail": {
          "type": "string",
          "minLength": 1,
          "maxLength": 300
        }
      }
    }
  }
}