{
  "version": "2026-09-17",
  "scope": "English story and phrase video production",
  "priority": "Episode production_policy.json overrides older workflow_rules provider and chaining defaults.",
  "provider": "ComfyUI / 本機 MiniMax H3",
  "story_rules": [
    "正常對話負責交代目標、分歧、推理、反應與笑點；教學短句只在自然需要時出現，不把每句對話都縮成目標短句。",
    "先有角色目標、阻礙和結果，再放入自然用得到的教學短句。",
    "刪掉重複描述看得見的動作，不要求固定的教學短句占比。",
    "對話用收縮形式及簡短回應；目標短句本身保留標準拼寫。",
    "每個鏡頭最多一個核心動作；因果必須看得到，不能只靠台詞說明。"
  ],
  "shot_rules": {
    "target_seconds": [
      4,
      8
    ],
    "max_consecutive_extensions": 1,
    "max_continuous_shot_seconds": 12,
    "limit_note": "這是本專案防止累積漂移的保守製作上限，不是平台能力上限；有例外時必須記錄理由與 QA。",
    "default_transition": "motivated_cut",
    "same_shot": "只接立即前一段已核准 master 的實際尾幀；核對交付 frame0",
    "new_shot": "從核准原始角色、場景、道具素材重置；記錄視線、站位、道具狀態；不要拿劣化尾幀當新角色圖。"
  },
  "prompt_contract": [
    "鏡位與原始參考",
    "開場道具/站位狀態",
    "單一可見動作",
    "說話者與精確台詞",
    "聆聽者反應及結束狀態",
    "必要聲音限制：無配樂、旁白、字幕"
  ],
  "prompt_rules": [
    "生成指令只含當前鏡頭；歷史失敗、反覆否定及內部 QA 放在資料欄位，不塞進 prompt。",
    "延續只描述新增動作，不重述已完成的開蓋／拿起等動作。",
    "最多一位說話者為預設；需要自然雙人對話時記錄明確輪流時序並單獨驗嘴型。",
    "一輪失敗後先分類原因：語意、道具狀態、聲線、嘴型、畫質；最多兩次同設計重試，之後改鏡頭設計。"
  ],
  "qa_gates": [
    "story_causality",
    "speaker_and_exact_dialogue",
    "voice_identity",
    "lip_sync",
    "character_and_prop_identity",
    "color_against_original_anchor",
    "first_frame_if_same_shot",
    "audio_timestamps",
    "native_master_resolution"
  ],
  "qa_rules": [
    "PENDING 不等於 PASS；不得從備註內「已確認」等字眼推定狀態。",
    "顏色比對既比相鄰段，也比原始錨點；相鄰變化小仍可能累積嚴重偏色。",
    "STT 不取代聽感與嘴型審核。",
    "不得用凍格、局部貼圖或裁切掩蓋語意／角色漂移。",
    "任何新版本改動，都要將依賴它的 FULL 標記待重組；重組記錄每個輸入 master SHA256。"
  ],
  "master_policy": {
    "preserve_original": true,
    "never_promote_preview": true,
    "record": [
      "master_path",
      "master_sha256",
      "native_resolution",
      "preview_path",
      "transforms"
    ],
    "native_1080_preferred": true,
    "native_720_may_be_content_approved": true,
    "upscale_is_not_native_hd": true
  },
  "generation_state": "story_and_phrase_production",
  "budget_rule": "使用既有本機模型，不使用 Flow、不呼叫付費 API。",
  "sources": [],
  "voice_policy": "Use fixed EP01 S03-derived Mia/Leo F5-TTS references for all final dialogue; native H3 audio only for motion timing and QA, never published. No music. Validate mouth timing before publication.",
  "episode_structure": {
    "story_groups": 5,
    "story_shots": 20,
    "standalone_phrases": 7
  },
  "phrase_novelty": {
    "required": true,
    "include_story_dialogue": true,
    "source": "phrase_novelty.json",
    "normalization": "case, punctuation, apostrophe shape, whitespace and common contractions",
    "on_duplicate": "block submission and revise scene/dialogue; changing punctuation does not make a new phrase"
  },
  "revision_guard": "Canonical plan video pointers and ep05_completion selection files identify current checked production outputs.",
  "dialogue_generation_paused": false,
  "voice_issue": "Historical cross-shot native voice variation: final dialogue now uses fixed original-character F5 references, with separate timing and visual checks before publication.",
  "voice_acceptance": "同角色至少兩句不同台詞並排聽測，確認音色、音高及語氣一致後，再與畫面做嘴型驗收。STT 只驗文字，不核准聲線。",
  "shot_rule_exceptions": [
    {
      "shots": [
        "S01A",
        "S01B"
      ],
      "actual_continuous_seconds": 13.166667,
      "extension_depth": 1,
      "reason": "One extension preserves visible Mia sidestep, shoe contact and full missed ball travel; next reaction resets checked original-identity closeup. All frames independently calibrated to original field.",
      "qa": "generated/r1_s01b_v1/visual_qa.json"
    }
  ],
  "paused_at": "2026-09-20T07:12:24.366745+08:00",
  "resumed_at": "2026-09-20T08:29:42.902775+08:00",
  "runtime_issue": null,
  "resumed_after_verified_repair_at": "2026-09-20T15:43:39.329414+08:00"
}