{
  "project_id": "005-Chiec-Banh-Cuoi-Di-Qua-Binh-Minh",
  "channel": "Gác Mái Audio",
  "status": "completed",
  "story_title": "Chiếc Bánh Cưới Đi Qua Bình Minh",
  "story_duration_target_minutes": [
    40,
    60
  ],
  "story_duration_seconds": 2536.872925,
  "active_version": "v1",
  "active_run": "run-002",
  "paths": {
    "root": "/data/video-pipeline/GacMaiAudio/project/005-Chiec-Banh-Cuoi-Di-Qua-Binh-Minh",
    "image": "image/",
    "audio": "audio/",
    "script": "script/",
    "story": "story/",
    "log": "log/",
    "output": "output/"
  },
  "active_paths": {
    "story_brief": "story/story-brief.json",
    "characters": "story/characters.json",
    "ledger": "story/ledger.json",
    "outline": "script/outline.json",
    "identity_registry": "script/identity-registry.json",
    "reveal_ledger": "script/reveal-ledger.json",
    "story_canon": "story/story-canon.txt",
    "spoken_narration_source": "story/spoken-narration-source.txt",
    "spoken_narration": "story/spoken-narration.txt",
    "tts_pronunciation_lexicon": "script/tts-pronunciation-lexicon.json",
    "tts_pronunciation_receipt": "log/tts-pronunciation.json",
    "tts_audio": "audio/story-full.wav",
    "layout": "image/layout-1920x1080.png",
    "intro": "output/intro/intro.mp4",
    "footage": "output/footage/footage.mp4",
    "final_master": "output/final.mp4",
    "final_upload": "output/final-upload.mp4",
    "metadata": "output/info.txt",
    "promotion_receipt": "log/promotion.json",
    "tts_receipt": "log/tts.json",
    "layout_receipt": "log/layout.json",
    "intro_receipt": "log/intro-render.json",
    "footage_receipt": "log/footage-job.json",
    "final_receipt": "log/final-render.json",
    "final_qa_receipt": "log/final-qa.json",
    "transcode_receipt": "log/transcode-upload.json",
    "metadata_receipt": "log/metadata.json",
    "publish_ready_receipt": "log/publish-ready.json",
    "postiz_identity_receipt": "log/postiz-identity.json",
    "postiz_media_receipt": "log/postiz-media.json",
    "postiz_schedule_receipt": "log/postiz-schedule.json",
    "cleanup_receipt": "log/cleanup.json",
    "tts_manifest": "script/tts-manifest.json",
    "intro_poster_master": "image/r2/intro-poster-master.png",
    "left_panel_master": "image/left-panel-master.png",
    "right_panel_master": "image/r2/right-panel-master.png",
    "left_panel_normalized": "image/left-panel-656x1080.png",
    "right_panel_normalized": "image/right-panel-656x1080.png",
    "intro_normalized": "image/intro-poster-1920x1080.png",
    "intro_poster": "image/intro-poster-1920x1080.png",
    "image_prompts": "image/prompts.json",
    "layout_manifest": "image/layout-manifest.json",
    "intro_voice": "audio/intro-voice.wav",
    "intro_silence": "audio/intro-silence-2s.wav",
    "intro_audio": "audio/intro-full.wav",
    "artwork_generation_receipt": "log/artwork-generation-active.json",
    "artwork_visual_receipt": "log/artwork-visual.json",
    "intro_voice_receipt": "log/intro-audio.json",
    "intro_audio_receipt": "log/intro-audio.json",
    "intro_qa_receipt": "log/intro-visual-qa.json",
    "completion_receipt": "log/completion-barrier.json",
    "story_manifest": "script/story-manifest.json",
    "candidate_validation_receipt": "log/run-002/candidate-validation.json",
    "semantic_review_receipt": "log/run-002/semantic-review.json",
    "originality_receipt": "log/run-002/originality.json"
  },
  "steps": {
    "preflight": "completed",
    "story": "completed",
    "pronunciation": "completed",
    "tts": "completed",
    "layout": "completed",
    "footage": "completed",
    "intro": "completed",
    "final_render": "completed",
    "transcode": "completed",
    "metadata": "completed",
    "publish_ready": "completed",
    "upload": "completed",
    "cleanup": "completed",
    "completion": "completed",
    "artwork": "completed"
  },
  "blocking_tasks": {
    "story_promotion_audit": {
      "status": "completed",
      "blocking": true,
      "verified": true,
      "receipt": "log/run-002/semantic-review.json",
      "candidate_sha256": "a73c556b40b85ef21b43121c1c80cf28a7bb241361f217d151a083f2674cb2ac",
      "outline_sha256": "eb872d9dfde46bcbc5f9e5a046c6f6fffeda73c52814b05a47557bfb350ee59f"
    }
  },
  "created_at": "2026-07-21T03:37:53.617720+00:00",
  "updated_at": "2026-07-21T09:35:26.996142+00:00",
  "candidate": {
    "path": "work/story/run-002/candidate.txt",
    "sha256": "a73c556b40b85ef21b43121c1c80cf28a7bb241361f217d151a083f2674cb2ac",
    "word_count": 9940,
    "predicted_duration_minutes": 43.0303
  },
  "rejected_runs": [
    {
      "run_id": "run-001",
      "receipt": "log/run-001/rejection.json",
      "candidate_sha256": "bd565c69844bce9cdd668a72a8e81da29127097cc6a0f1c85f0e8a191edfbe5f"
    }
  ],
  "runtime_contracts": {
    "tts": {
      "base_url": "http://192.168.40.33:7862",
      "health": "GET /health",
      "voices": "GET /voices",
      "create": "POST /tts",
      "response_mode": "synchronous_wav",
      "voice": "ngoc-huyen-vbee",
      "request_fields": [
        "text",
        "voice"
      ]
    },
    "intro_render": {
      "base_url": "http://192.168.1.104:8021",
      "health": "GET /health",
      "create": "POST /stickman-render-gpu",
      "encoder": "h264_nvenc",
      "local_fallback": false
    },
    "footage_render": {
      "base_url": "http://192.168.1.104:8022",
      "health": "GET /health",
      "create": "POST /v1/footage-render-huyenan/jobs",
      "encoder": "h264_nvenc",
      "local_fallback": false
    },
    "final_render": {
      "base_url": "http://192.168.1.104:8023",
      "health": "GET /health",
      "create": "POST /v1/huyenan-render-final/jobs",
      "encoder": "h264_nvenc",
      "local_fallback": false
    },
    "transcode": {
      "base_url": "http://192.168.1.104:8024",
      "health": "GET /health",
      "create": "POST /v1/huyenan-transcode-upload/jobs",
      "local_fallback": false
    }
  },
  "canon_sha256": "a73c556b40b85ef21b43121c1c80cf28a7bb241361f217d151a083f2674cb2ac",
  "spoken_narration_source_sha256": "a73c556b40b85ef21b43121c1c80cf28a7bb241361f217d151a083f2674cb2ac",
  "spoken_narration_sha256": "aae65b69ace36743115a309da2f3a06620360252aeccc32c3bd2946dad7f87bb",
  "story": {
    "status": "completed",
    "verified": true,
    "promotion_receipt": "log/promotion.json",
    "canon_sha256": "a73c556b40b85ef21b43121c1c80cf28a7bb241361f217d151a083f2674cb2ac",
    "word_count": 9940,
    "predicted_duration_minutes": 43.0303,
    "completed_at": "2026-07-21T06:14:08.443357+00:00"
  },
  "tts_pronunciation_lexicon_sha256": "a80a2ea5fef297b61d19e4cb6b5c8d6f9861349bd34e97b0421b1b5021a49f25",
  "pronunciation": {
    "status": "completed",
    "verified": true,
    "receipt": "log/tts-pronunciation.json",
    "source_sha256": "a73c556b40b85ef21b43121c1c80cf28a7bb241361f217d151a083f2674cb2ac",
    "output_sha256": "aae65b69ace36743115a309da2f3a06620360252aeccc32c3bd2946dad7f87bb",
    "replacement_count": 12,
    "unresolved_count": 0,
    "completed_at": "2026-07-21T06:14:09.549908+00:00"
  },
  "tts_plan": {
    "status": "locked",
    "verified": true,
    "path": "script/tts-manifest.json",
    "segment_count": 23,
    "segmentation_plan_sha256": "6d69fe43ce2cd53ec81602d14dcbd799edf1ffa7e5c7d8bd93ddf526111fde85",
    "created_at": "2026-07-21T06:14:10.411545+00:00"
  },
  "tts": {
    "status": "completed",
    "verified": true,
    "receipt": "log/tts.json",
    "artifact_sha256": "b6111cd1b09dec1f0c8b0937d5ade911fb78fa1e4f673d78da8ee22df9b44ff0",
    "duration_seconds": 2536.872925,
    "intro_audio_receipt": "log/intro-audio.json",
    "intro_audio_sha256": "fcc07620a071d0d15f9265775dbe782da12ddd11cbc4a3b8283c94bf6cbd7fee",
    "completed_at": "2026-07-21T06:37:22.197745+00:00"
  },
  "intro_audio": {
    "status": "completed",
    "verified": true,
    "receipt": "log/intro-audio.json",
    "artifact_sha256": "fcc07620a071d0d15f9265775dbe782da12ddd11cbc4a3b8283c94bf6cbd7fee",
    "duration_seconds": 10.440454,
    "completed_at": "2026-07-21T06:36:20.677437+00:00"
  },
  "artwork": {
    "status": "completed",
    "verified": true,
    "visual_receipt": "log/artwork-visual.json",
    "master_assets": {
      "intro": {
        "path": "image/r2/intro-poster-master.png",
        "sha256": "9411686c3aa07dd6051f07d63927addd4ae0881025e755eb8d0be26454cc7034",
        "generation_receipt": "log/artwork-generation-r2.json",
        "revision": "r2",
        "orientation": "landscape",
        "text_blocks": [
          "Gác Mái Audio",
          "Chiếc Bánh Cưới Đi Qua Bình Minh",
          "Truyện được phát độc quyền tại Gác Mái Audio, nghiêm cấm sao chép dưới mọi hình thức"
        ],
        "verified": true
      },
      "left_panel": {
        "path": "image/left-panel-master.png",
        "sha256": "28657fa34e2f9092e7439adbd463f9a80876297751f31e553988ecd034f24b50",
        "generation_receipt": "log/artwork-generation.json",
        "revision": "r1-preserved",
        "orientation": "portrait",
        "text_blocks": [
          "Gác Mái Audio",
          "Like • Chia sẻ • Đăng ký"
        ],
        "verified": true
      },
      "right_panel": {
        "path": "image/r2/right-panel-master.png",
        "sha256": "b5318be3535cd19ad9a9884ddd43991e5bc13e02694be645398e5292c1482232",
        "generation_receipt": "log/artwork-generation-r2.json",
        "revision": "r2",
        "orientation": "portrait",
        "text_blocks": [
          "Gác Mái Audio",
          "Chiếc Bánh Cưới Đi Qua Bình Minh",
          "Truyện được phát độc quyền tại Gác Mái Audio, nghiêm cấm sao chép dưới mọi hình thức"
        ],
        "verified": true
      }
    },
    "updated_at": "2026-07-21T06:46:12.320504+00:00",
    "generation_receipt": "log/artwork-generation-active.json",
    "visual_receipt_sha256": "7b5136b1f5002daadf16a3dbcc3d9ea2d15b6c9b82a32f52cff355e1684e2057"
  },
  "layout": {
    "status": "completed",
    "verified": true,
    "receipt": "log/layout.json",
    "receipt_sha256": "7d16b2cc86fd8993d3558be68432c9af0bdc20aec83364dd03b9ff81a7049a3f",
    "layout_sha256": "cac255f2072a89f9d0cb6e48931e218ddc1d9243ef4637963efe9f850bb7ddd2",
    "completed_at": "2026-07-21T06:51:48.263143+00:00"
  },
  "intro": {
    "status": "completed",
    "verified": true,
    "job_id": "gac-mai-005-intro-0d956012a768",
    "receipt": "log/intro-render.json",
    "receipt_sha256": "c1f59e2a3775626e92ef1b0c1e108dc48a499e2ab5d566559107661b16a53def",
    "artifact": "output/intro/intro.mp4",
    "artifact_sha256": "eb7110f9675f61cb2a49928a78392bfabd15959fc11c1dd2d7bddc04b42e36fc",
    "duration_seconds": 10.441,
    "server_encoder": "h264_nvenc",
    "completed_at": "2026-07-21T06:52:16.402857+00:00"
  },
  "footage": {
    "status": "completed",
    "verified": true,
    "job_id": "79ffe30bda604eb599e7d8260c1e5ae9",
    "receipt": "log/footage-job.json",
    "receipt_sha256": "816ffc3617f1d1005763093e957230a20b3a3f4f1d45e00af13c85d73e08c200",
    "artifact": "output/footage/footage.mp4",
    "artifact_sha256": "cfa5844210d3cce2b831385cf06b9667bce748819f3ad4d0b4f6b668a4e6f318",
    "artifact_bytes": 3181201306,
    "duration_seconds": 2536.873,
    "source_audio_discarded": true,
    "horizontal_mirror": "hflip",
    "visual_review_performed": false,
    "completed_at": "2026-07-21T08:59:22.470468+00:00"
  },
  "final": {
    "status": "completed",
    "verified": true,
    "job_id": "c2cf76f44a5c48b5972d0d8147c0139a",
    "receipt": "log/final-render.json",
    "receipt_sha256": "c3d01d58e9c9479a53804e2656c42852aa943793ccd0376fd0c5a0a722d2a3ee",
    "qa_receipt": "log/final-qa.json",
    "qa_receipt_sha256": "fa1603081e1ca8a8887f30691a30af911fce4ad959b50f43e76f2ab75798bb58",
    "artifact": "output/final.mp4",
    "artifact_sha256": "24a3f7cd5ee7727c4825a19bf413d74741d5c1586171eb577a441897ddfd4909",
    "artifact_bytes": 3254895593,
    "duration_seconds": 2547.314,
    "visual_review_performed": false,
    "frame_extraction_performed": false,
    "completed_at": "2026-07-21T09:15:11.000374+00:00"
  },
  "final_qa": {
    "status": "completed",
    "verified": true,
    "receipt": "log/final-qa.json",
    "artifact_sha256": "24a3f7cd5ee7727c4825a19bf413d74741d5c1586171eb577a441897ddfd4909",
    "completed_at": "2026-07-21T09:15:11.000374+00:00"
  },
  "transcode": {
    "status": "completed",
    "verified": true,
    "job_id": "24d3d02247644001aa65a674ba886d0e",
    "receipt": "log/transcode-upload.json",
    "receipt_sha256": "7dea1b25b02f47d354154d47f6cdc3e99702c182865093da6a0c048c43ce0675",
    "artifact": "output/final-upload.mp4",
    "artifact_sha256": "060566e8b9227963c38254d960fed3193c9366c055075c8aa81396d24c362762",
    "artifact_bytes": 775930793,
    "duration_seconds": 2547.314,
    "under_one_gb": true,
    "completed_at": "2026-07-21T09:27:06.888206+00:00"
  },
  "metadata": {
    "status": "completed",
    "verified": true,
    "receipt": "log/metadata.json",
    "receipt_sha256": "46e4b92d5ae6d819f420129103bf0c1a33b3c5686c0374676c0b8aa3574e7fc3",
    "artifact": "output/info.txt",
    "artifact_sha256": "a6d5c74de34f33edd97873ace0e731b5c2a2ed450fd2fdc997974fdc200e5a92",
    "youtube_title": "Truyện Audio | Chiếc Bánh Cưới Đi Qua Bình Minh (Full) | Gác Mái Audio",
    "completed_at": "2026-07-21T09:28:38.973251+00:00"
  },
  "publish_ready": {
    "status": "completed",
    "verified": true,
    "receipt": "log/publish-ready.json",
    "upload_sha256": "060566e8b9227963c38254d960fed3193c9366c055075c8aa81396d24c362762",
    "completed_at": "2026-07-21T09:28:54.399986+00:00"
  },
  "upload": {
    "status": "completed",
    "verified": true,
    "identity_receipt": "log/postiz-identity.json",
    "media_receipt": "log/postiz-media.json",
    "schedule_receipt": "log/postiz-schedule.json",
    "slot_local": "2026-07-22T09:20:00+07:00",
    "slot_utc": "2026-07-22T02:20:00Z",
    "posts": {
      "cmrilrryn0011j7c8kfzgx9zq": {
        "id": "cmruge793003oj7cbivheiobd",
        "state": "QUEUE",
        "publishDate": "2026-07-22T02:20:00.000Z"
      },
      "cmriltjyk0013j7c8l7dp3o5i": {
        "id": "cmruge79k003pj7cb6i51dbrh",
        "state": "QUEUE",
        "publishDate": "2026-07-22T02:20:00.000Z"
      }
    }
  },
  "cleanup": {
    "status": "completed",
    "verified": true,
    "receipt": "log/cleanup.json",
    "receipt_sha256": "f07af558731d3eae4e372804a3d12a89a4d0b9c428fc4ff590168c6988f6f201",
    "freed_bytes": 6436096899
  },
  "completion": {
    "status": "completed",
    "verified": true,
    "receipt": "log/completion-barrier.json",
    "receipt_sha256": "9533469e66c52a68c1577f6b55a5fa4c77f13c0f1573aa45f99d905fcc09b158",
    "completed_at": "2026-07-21T09:35:26.996142+00:00"
  }
}
