{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "dispatch.status.v1",
  "title": "Dispatch status state machine v1",
  "description": "task-2645 회장 verbatim — dispatch.py cron_response=ok 단독 final success 보지 않음. spawn verification gate 통과 후에만 DISPATCH_VERIFIED_SPAWN.",
  "type": "object",
  "required": ["state", "task_id"],
  "properties": {
    "schema": {
      "const": "dispatch.status.v1"
    },
    "task_id": {
      "type": "string",
      "minLength": 1
    },
    "state": {
      "type": "string",
      "enum": [
        "DISPATCH_PRECHECK_BLOCKED",
        "DISPATCH_SUBMITTED_UNVERIFIED",
        "DISPATCH_VERIFIED_SPAWN",
        "DISPATCH_SILENT_DROP_HOLD",
        "DISPATCH_ERROR"
      ],
      "description": "회장 verbatim 5 상태. DISPATCH_SUBMITTED_UNVERIFIED 단독 final success 보고 금지 (ANCHOR-1)."
    },
    "cron_id": {
      "type": ["string", "null"]
    },
    "cron_response_status": {
      "type": ["string", "null"],
      "description": "cokacdir --cron 등록 응답 status. ok 라 해도 단독 final success 아님."
    },
    "prompt_byte_classification": {
      "type": ["object", "null"],
      "description": "utils.prompt_byte_classifier.PromptByteClassification.to_json() 결과"
    },
    "spawn_verification": {
      "type": ["object", "null"],
      "description": "utils.dispatch_spawn_verifier.SpawnVerificationResult.to_json() 결과"
    },
    "reasons": {
      "type": "array",
      "items": { "type": "string" }
    },
    "is_final_success": {
      "type": "boolean",
      "description": "회장 보고 가능 여부. state=DISPATCH_VERIFIED_SPAWN 일 때만 true."
    },
    "is_hold_for_chair": {
      "type": "boolean",
      "description": "state=DISPATCH_SILENT_DROP_HOLD 일 때 true — 회장 보고 hold."
    }
  },
  "additionalProperties": true
}
