{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "schemas/normal_completion_callback_binding.schema.json",
  "title": "task-2553+37.normal_callback_binding_v1",
  "description": "task-2553+37 §2.4 — normal completion callback prompt/contract 의 fallback_cron_id binding 을 필수화한다 (SECONDARY 해소 — FALLBACK_ID_NOT_BOUND). 표준 entrypoint(run_wired_normal_completion_callback_collector)는 이 binding 의 fallback_cron_id 로 operational_collector_wiring::run_operational_completion_callback_collector 를 경유한다 (PRIMARY 해소 — COLLECTOR_PATH_NOT_WIRED). +32 dispatch.executor_completion_contract 4-tuple mandatory 규칙(normal_collector_cron_id·fallback_callback_cron_id 둘 다 필수)과 정합하며 약화하지 않는다. registry/checkpoint(+29/+30/+31)는 recovery layer 이며 본 primary path 를 대체하지 않는다.",
  "type": "object",
  "required": [
    "schema",
    "task_id",
    "dispatch_cron_id",
    "normal_collector_cron_id",
    "fallback_cron_id",
    "chat_id",
    "fallback_cron_id_binding_required",
    "collector_path_contract"
  ],
  "additionalProperties": true,
  "properties": {
    "schema": { "const": "task-2553+37.normal_callback_binding_v1" },
    "task_id": { "type": "string", "minLength": 1 },
    "dispatch_cron_id": { "type": "string", "minLength": 1 },
    "normal_collector_cron_id": {
      "type": "string",
      "minLength": 1,
      "description": "§4.5/+32 §6.12 — MANDATORY lifecycle signal. null/empty 면 binding invalid (NO-CRON 으로도 면제 불가)."
    },
    "fallback_cron_id": {
      "type": "string",
      "minLength": 1,
      "description": "§2.4 — MANDATORY. 부재/공백 → binding invalid → seam 미진입·cron-remove 0·fallback 보존 (§2.5). dispatch-fired marker.callback_policy_a.fallback_callback_cron_id 와 일치해야 하며 mismatch → seam 미진입 (§2.5)."
    },
    "chat_id": {
      "type": "integer",
      "const": 6937032012,
      "description": "ANU 소유 chat. 불일치 → binding invalid (live verifier ② 도달 전 차단)."
    },
    "fallback_cron_id_binding_required": {
      "type": "boolean",
      "const": true,
      "description": "§2.4 — 항상 true. callback mandatory rule 약화 금지(§5)."
    },
    "collector_path_contract": {
      "type": "string",
      "description": "§2.1 — 표준 collector 경로가 operational_collector_wiring entrypoint 를 경유함을 명시. registry/checkpoint = recovery only."
    },
    "callback_register_command_template": {
      "type": "string",
      "description": "외부 cron tooling(cokacdir) 등록 템플릿 — schema 산출만, 본 모듈은 실제 cron 등록 0."
    },
    "plus32_4tuple_valid": {
      "type": "boolean",
      "const": true,
      "description": "§2.9 — +32 Callback4Tuple validate_4tuple 통과(충돌 0)."
    }
  }
}
