{
  "project_id": "25052026-001-Ngo-Quyen",
  "title": "NGÔ QUYỀN — TIẾNG SÓNG BẠCH ĐẰNG MỞ LẠI NON SÔNG",
  "series": "Việt Sử Kể Lại",
  "current_step": 14,
  "overall_status": "in_progress",
  "steps": [
    {
      "step": 1,
      "name": "Receive story/input and create project folder",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/script/source_story.txt"
      ]
    },
    {
      "step": 2,
      "name": "Clean story and split scene/dense plan",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/script/scenes.json"
      ]
    },
    {
      "step": 3,
      "name": "Create character_bible.json",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/script/character_bible.json"
      ]
    },
    {
      "step": 4,
      "name": "Create/validate/approve scenes.json or dense plan",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/script/scenes.json",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/script/plan_summary.json"
      ]
    },
    {
      "step": 5,
      "name": "Generate required character reference images first, then generate all scene images using approved character refs when recurring characters appear",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/characters",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/images/scenes",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/logs/scene_images_parallel_summary.json",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/script/character_reference_plan.json"
      ]
    },
    {
      "step": 6,
      "name": "Generate 2 final thumbnails by GPT image",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/output/thumbnails/thumb_16x9_final.png",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/output/thumbnails/thumb_9x16_final.png"
      ]
    },
    {
      "step": 7,
      "name": "Generate TTS for each scene",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/audio/scenes",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/logs/omnivoice_parallel_summary.json"
      ]
    },
    {
      "step": 8,
      "name": "Build master narration timeline on worker",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/logs/step8_scene_audio_probe_segments.json",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/logs/step8_compose_tts_master.json",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/audio/master_narration.wav"
      ]
    },
    {
      "step": 9,
      "name": "Probe real audio/part durations on worker",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/logs/step9_master_probe.json"
      ]
    },
    {
      "step": 10,
      "name": "Run ASR on master audio for word timestamps",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/script/asr_master_words.json",
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/logs/step10_asr_master.json"
      ]
    },
    {
      "step": 11,
      "name": "Create subtitles from source text mapped to ASR word timestamps",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/subtitles/subtitles.srt"
      ]
    },
    {
      "step": 12,
      "name": "Clamp subtitle safe gaps and validate no overlap",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/subtitles/subtitles_safe_gap_validation.json"
      ]
    },
    {
      "step": 13,
      "name": "Split render into sync-safe parts by timeline/audio/subtitle offsets",
      "status": "completed",
      "evidence": [
        "/data/video-pipeline/Youtube-Video-Maker/Project/25052026-001-Ngo-Quyen/script/render_parts_plan_offset_safe.json"
      ]
    },
    {
      "step": 14,
      "name": "Render each part with 8015 offset/slice-safe workflow",
      "status": "in_progress",
      "evidence": []
    },
    {
      "step": 15,
      "name": "Concat sync-safe parts on worker",
      "status": "pending",
      "evidence": []
    },
    {
      "step": 16,
      "name": "QA early/mid/late main file",
      "status": "pending",
      "evidence": []
    },
    {
      "step": 17,
      "name": "Create project intro using the required intro format",
      "status": "pending",
      "evidence": []
    },
    {
      "step": 18,
      "name": "Final package intro/outro/BGM sync-safe on worker",
      "status": "pending",
      "evidence": []
    },
    {
      "step": 19,
      "name": "QA final, write output/info.json, and only then report approved output",
      "status": "pending",
      "evidence": []
    }
  ],
  "updated_utc": "2026-05-26T08:17:02.613029+00:00",
  "notes": [
    {
      "utc": "2026-05-25T16:50:00+00:00",
      "note": "Blocked at step 7. Initial parallel TTS attempt failed 0/144 because VieNeuTTS had no model loaded ('Vui lòng tải model trước!'). During recovery, AGENTS.md workflow file was not present in the project/repo tree, and this project lacks step8+ scripts/artifacts required to continue the approved 19-step worker-only pipeline without guessing payloads. See logs/blocker_20260525T1650Z.json."
    },
    {
      "utc": "2026-05-25T18:33:00+00:00",
      "note": "Re-audited from current state after scene image regen confirmation. Verified 144/144 scene images present, but step 6 thumbnails are still absent and step 7+ outputs remain missing (0 scene audios, no master audio, no subtitles, no render parts, no main/final). Existing helper script tmp/project_py/ngo_quyen_pipeline_retry.py is non-compliant with locked rules: intro text not exact required form, subtitles built by naive word chunking instead of source-text mapped to ASR timings, and smooth render lacks mandatory compensation pass. Stopped to avoid violating AGENTS.md/MEMORY.md. See logs/blocker_20260525T1833Z_reaudit.json."
    },
    {
      "utc": "2026-05-26T00:07:00+00:00",
      "note": "Reverified current state from disk: scene images 144/144, thumbnails 2/2, OmniVoice scene TTS 144/144 are present; master audio/subtitles/ASR/render/main/final remain absent. Audited available step8-19 scripts and found no approved project-local/repo implementation that proves full compliant worker pipeline for Ngô Quyền. The only discovered retry script tmp/project_py/ngo_quyen_pipeline_retry.py is non-compliant with locked rules: uses VietNeu intro TTS path, intro text not exact locked form, naive fixed-size subtitle chunking instead of source-text-to-ASR mapping, smooth transition duration 0.35 instead of locked 0.5, and no mandatory compensation pass before concat. Stopped at step 8 and wrote blocker evidence: logs/blocker_20260526T0007Z_step8_19_compliance.json."
    }
  ]
}