{
  "review_agent": "theatrical_readiness_board",
  "readiness_level": "theatrical_export_candidate",
  "score_100": 95.6,
  "planning_score_100": 95.3,
  "production_score_100": 95.6,
  "greenlight_thresholds": {
    "planning_greenlight": ">= 82 planning score and no shootability blockers",
    "provider_generation": "planning greenlight plus approved identity/style assets",
    "final_export": "production score >= 86, final_edit_review pass, and human viewing pass"
  },
  "criteria": [
    {
      "name": "story_engine",
      "score": 5.0,
      "weight": 1.4,
      "status": "pass",
      "note": "Protagonist, desire, pressure, dilemma, visible motif, and ending image are explicit.",
      "evidence": {
        "protagonist": "最后一位档案管理员",
        "arena": "潮湿、安静、随时可能失压的海底城市",
        "inciting_object": "一段和现实不一致的私人记忆",
        "antagonist_or_pressure": "一个温和却无处不在的 AI 系统",
        "desire": "确认哪一段记忆仍然属于自己",
        "dilemma": "保留被修饰后的安稳生活与公开刺痛所有人的真相",
        "dramatic_question": "最后一位档案管理员 能否在 一个温和却无处不在的 AI 系统 吞没真相之前完成 确认哪一段记忆仍然属于自己？",
        "visible_motif": "反复出现的旧照片、光斑和错位影像",
        "private_stakes": "如果失败，主角会连自己为什么坚持都忘掉。",
        "ending_image": "主角把最后的证据交给海面方向的一束光。"
      },
      "improvement_actions": [
        "Rewrite the story engine before shot generation if protagonist/desire/dilemma are generic."
      ]
    },
    {
      "name": "causal_beat_chain",
      "score": 5.0,
      "weight": 1.2,
      "status": "pass",
      "note": "Each beat should cause the next beat, not simply describe a mood.",
      "evidence": [
        "异常被看见，所以主角无法继续普通日常。",
        "主角试图否认，所以异常暴露出私人代价。",
        "外部压力介入，所以主角必须主动调查。",
        "调查带来证据，所以系统开始反制。",
        "反转重写目标，所以主角之前的方法失效。",
        "失败夺走退路，所以主角必须选择立场。",
        "选择被执行，所以世界状态发生可见改变。",
        "改变已经发生，所以结尾只留下情绪回声。"
      ],
      "improvement_actions": [
        "Rewrite weak beats as cause/effect actions with one irreversible turn per beat."
      ]
    },
    {
      "name": "emotional_arc",
      "score": 5.0,
      "weight": 1.1,
      "status": "pass",
      "note": "The emotional value should change across the film and land in the final beat.",
      "evidence": [
        "curiosity_over_confusion",
        "intimacy_over_distance",
        "alarm_over_denial",
        "agency_over_passivity",
        "revelation_over_assumption",
        "loss_over_control",
        "choice_over_survival",
        "resonance_over_explanation"
      ],
      "improvement_actions": [
        "Assign a distinct emotional value shift to each beat and make the last shot pay it off visually."
      ]
    },
    {
      "name": "visual_motif_payoff",
      "score": 5.0,
      "weight": 1.0,
      "status": "pass",
      "note": "A tangible motif should recur and change state at turning points.",
      "evidence": {
        "motif": "反复出现的旧照片、光斑和错位影像",
        "anchors": [
          "反复出现的旧照片、光斑和错位影像 第一次以不合逻辑的方式出现",
          "反复出现的旧照片、光斑和错位影像 被主角触碰、收起或误认",
          "反复出现的旧照片、光斑和错位影像 和外部压力发生第一次碰撞",
          "反复出现的旧照片、光斑和错位影像 被拆解成可追踪的线索",
          "反复出现的旧照片、光斑和错位影像 暴露出隐藏层或反向含义",
          "反复出现的旧照片、光斑和错位影像 几乎被摧毁或从主角手中消失",
          "反复出现的旧照片、光斑和错位影像 被主角主动使用，改变局面",
          "反复出现的旧照片、光斑和错位影像 以安静、明确的新状态留在结尾"
        ]
      },
      "improvement_actions": [
        "Make the motif visible in setup, midpoint reversal, crisis, final choice, and ending image."
      ]
    },
    {
      "name": "coverage_and_blocking",
      "score": 5.0,
      "weight": 1.0,
      "status": "pass",
      "note": "The shotlist should provide editable coverage: space, character, insert, action, reaction, transition.",
      "evidence": {
        "establishing": 8,
        "character": 8,
        "insert": 8,
        "action": 8,
        "reaction": 8,
        "transition": 8
      },
      "improvement_actions": [
        "Add missing coverage types or reduce repeated shot roles inside each beat."
      ]
    },
    {
      "name": "cinematic_specificity",
      "score": 4.48,
      "weight": 1.0,
      "status": "pass",
      "note": "Shots should describe visible behavior, framing, camera motivation, and story consequence.",
      "evidence": [
        "建立空间规则和异常入口：反复出现的旧照片、光斑和错位影像 第一次以不合逻辑的方式出现。",
        "让观众看见主角如何决定靠近或回避这一转折：最后一位档案管理员 在 潮湿、安静、随时可能失压的海底城市 的日常流程里看见第一个异常：一段和现实不一致的私人记忆 不该出现在那里。",
        "用一个可反复追踪的道具/细节承载线索：反复出现的旧照片、光斑和错位影像 第一次以不合逻辑的方式出现。",
        "用一个明确行动推动因果链：异常被看见，所以主角无法继续普通日常。",
        "记录选择造成的情绪后果，并让观众追问：潮湿、安静、随时可能失压的海底城市 为什么在第一个画面里就不对劲？",
        "把当前转折的后果带入下一场，保留 反复出现的旧照片、光斑和错位影像 第一次以不合逻辑的方式出现 的视觉回声。",
        "建立空间规则和异常入口：反复出现的旧照片、光斑和错位影像 被主角触碰、收起或误认。",
        "让观众看见主角如何决定靠近或回避这一转折：最后一位档案管理员 尝试用熟悉的规则解释异常，却发现 如果失败，主角会连自己为什么坚持都忘掉。"
      ],
      "improvement_actions": [
        "Replace abstract purposes with physical actions, visible decisions, and concrete props."
      ]
    },
    {
      "name": "generation_feasibility",
      "score": 4.0,
      "weight": 1.0,
      "status": "watch",
      "note": "High ambition must still be shootable by video models without overloaded single shots.",
      "evidence": {
        "status": "pass_with_constraints",
        "blocking_shots": []
      },
      "improvement_actions": [
        "Split or simplify every blocked shot before spending provider budget."
      ]
    },
    {
      "name": "identity_and_style_control",
      "score": 4.0,
      "weight": 0.9,
      "status": "watch",
      "note": "Film-level continuity needs approved identity, location, style, and first-frame assets.",
      "evidence": {
        "asset_gate_status": "ready_for_visual_review",
        "summary": {
          "total_assets": 35,
          "proxy_assets": 0,
          "missing_or_empty_assets": 0,
          "visual_review_assets": 35
        }
      },
      "improvement_actions": [
        "Generate and review global style, protagonist, location, and first-frame assets before I2V."
      ]
    },
    {
      "name": "continuity_contract",
      "score": 5.0,
      "weight": 0.8,
      "status": "pass",
      "note": "Each shot should carry explicit identity, location, style, motif, and reroll rules before provider generation.",
      "evidence": {
        "total_shots": 48,
        "risk_counts": {
          "low": 17,
          "medium": 30,
          "high": 1
        },
        "mode_counts": {
          "text_to_video": 17,
          "image_to_video": 30,
          "first_last_frame": 1
        },
        "identity_required_shots": 16,
        "first_frame_required_shots": 31,
        "last_frame_required_shots": 1,
        "required_asset_references": 94
      },
      "improvement_actions": [
        "Regenerate quality/continuity_contract.json and ensure every I2V/first-last-frame shot has asset and reroll contracts."
      ]
    },
    {
      "name": "render_budget_realism",
      "score": 5.0,
      "weight": 0.8,
      "status": "pass",
      "note": "Important or risky shots need enough candidate attempts to select a strong take.",
      "evidence": {
        "total_candidates": 136,
        "shot_count": 48
      },
      "improvement_actions": [
        "Raise candidate counts for high-risk story turns; do not depend on first-take success."
      ]
    },
    {
      "name": "post_production_traceability",
      "score": 5.0,
      "weight": 0.8,
      "status": "pass",
      "note": "Every final clip should be traceable to selected sources, segment QC, and an EDL.",
      "evidence": {
        "missing_segments": 0,
        "final_edit_status": "pass"
      },
      "improvement_actions": [
        "Populate takes, run segment QC, then lock the EDL only from selected reviewed clips."
      ]
    }
  ]
}
