{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "schemas/callback_batch_aggregation_v1.json",
  "title": "callback_batch_aggregation_v1",
  "description": "task-2644 우선순위-6 — 병렬 작업 sibling callback all-settled 판단. 6 자동 진행 허용 中 'batch sibling callback wait' + 'all-settled batch adjudication' 의 file-state 근거. spec sha256: b27da557d4245bce476cd63f4ab174aefc8a25d2da07ec2c8d2c83b01ee96153.",
  "type": "object",
  "required": ["schema_version", "batch_id", "siblings", "all_settled", "aggregation_status"],
  "properties": {
    "schema_version": {"const": "v1"},
    "batch_id": {"type": "string", "minLength": 1},
    "siblings": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": ["callback_id", "task_id", "status"],
        "properties": {
          "callback_id": {"type": "string"},
          "task_id": {"type": "string"},
          "status": {
            "type": "string",
            "enum": ["PENDING", "RECEIVED", "TERMINAL_PASS", "TERMINAL_FAIL", "TIMEOUT"]
          },
          "received_at": {"type": ["string", "null"], "format": "date-time"}
        }
      }
    },
    "all_settled": {"type": "boolean",
      "description": "true 일 때만 BATCH_ADJUDICATE 진입 · false 면 WAIT_FOR_BATCH_SIBLINGS"},
    "aggregation_status": {
      "type": "string",
      "enum": [
        "WAITING_SIBLINGS",
        "ALL_PASS_PROMOTABLE",
        "MIXED_REQUIRE_ADJUDICATION",
        "ALL_FAIL_BLOCKED",
        "TIMEOUT_PARTIAL"
      ]
    },
    "aggregated_at": {"type": "string", "format": "date-time"},
    "next_action_hint": {
      "type": ["string", "null"],
      "enum": [
        "REQUEST_CHAIR_MERGE_APPROVAL",
        "REPORT_CRITICAL7",
        "DISPATCH_AUTO_REMEDIATION",
        "HOLD_FOR_CHAIR",
        "WAIT_FOR_BATCH_SIBLINGS",
        "BATCH_ADJUDICATE",
        "NOOP_TERMINAL",
        null
      ]
    }
  },
  "additionalProperties": true
}
