{
  "version": "screenplay_product_quality.v1",
  "generated_at": "2026-04-10T04:36:59.246691Z",
  "meta": {
    "run_dir": "/wwwb/aitools/writer/outputs/screenplay_expansion_exec/primary/xiyouji_now11_contract_smoke_recheck_live_deepseek_v2",
    "source_paths": {
      "screenplay": "03d_screenplay.json",
      "dramart_package": "03e_dramart_package.json",
      "prompt_guard": "05b_storyboard_guard.json"
    },
    "thresholds": {
      "screenplay": {
        "max_multi_scene_source_block_count": 0,
        "max_multi_time_mode_block_count": 0,
        "max_special_label_missing_block_count": 0,
        "max_scene_element_stacking_block_count": 0,
        "max_purity_warn_block_count": 1,
        "max_fallback_placeholder_block_count": 0,
        "max_template_leak_block_count": 0,
        "max_summary_tone_block_count": 0,
        "max_chronicle_tone_block_count": 0,
        "max_weak_performable_tension_block_count": 0,
        "max_delayed_scene_entry_block_count": 0,
        "max_event_bundle_summary_block_count": 0,
        "max_excerpt_summary_lead_block_count": 0,
        "max_expository_voiceover_lead_block_count": 0,
        "max_adaptation_meta_leakage_block_count": 0
      },
      "writing_strategy": {
        "max_subject_anchor_gap_count": 0,
        "max_dialogue_attribution_gap_count": 0,
        "max_action_anchor_gap_count": 0,
        "max_location_anchor_gap_count": 0,
        "max_abstract_prose_risk_count": 0
      },
      "dramart_upload": {
        "min_upload_script_char_count": 600,
        "max_semi_structured_line_ratio_warn": 0.18,
        "max_semi_structured_line_ratio_fail": 0.35
      },
      "prompt_guard": {
        "require_text_quality_status": "pass",
        "require_tri_layer_status": "pass",
        "require_dramart_delivery_status": "pass"
      },
      "spot_check": {
        "risk_block_limit": 4,
        "normal_block_limit": 2
      }
    }
  },
  "screenplay": {
    "episode_count": 9,
    "block_count": 57,
    "blocked_block_count": 0,
    "purity_warn_block_count": 0,
    "overlong_block_count": 0,
    "multi_scene_source_block_count": 0,
    "multi_time_mode_block_count": 0,
    "special_label_missing_block_count": 0,
    "scene_element_stacking_block_count": 0,
    "flashback_tag_block_count": 10,
    "montage_tag_block_count": 3,
    "template_leak_block_count": 0,
    "fallback_placeholder_block_count": 0,
    "summary_tone_block_count": 0,
    "chronicle_tone_block_count": 0,
    "weak_performable_tension_block_count": 0,
    "delayed_scene_entry_block_count": 0,
    "adaptation_meta_leakage_block_count": 0,
    "event_bundle_summary_block_count": 0,
    "excerpt_summary_lead_block_count": 0,
    "expository_voiceover_lead_block_count": 0,
    "risk_blocks": [
      {
        "episode_id": "EP0005",
        "block_id": "EP0005B002",
        "title": "【闪回】【蒙太奇】孙悟空与众猴开仙酒会",
        "lead_scene_id": "S0033",
        "presentation_mode": "montage",
        "time_modes": [
          "flashback"
        ],
        "reason_count": 2,
        "reasons": [
          "special_tag:闪回",
          "special_tag:蒙太奇"
        ],
        "screenplay_preview": "（花果山，水帘洞内，孙悟空逃回后不久）\n孙悟空一个筋斗翻进水帘洞，将怀里揣着的仙酒、蟠桃一股脑倒在石桌上。他满面红光，得意地拍着胸脯：“孩儿们！俺老孙今日在天庭，好生快活！那蟠桃会上的琼浆玉液，全被我搬回来了！”众猴欢呼雀跃，争抢着仙酒痛饮。孙悟空自己也抱起酒坛，仰头痛饮，酒液顺着嘴角流下。他醉眼朦胧，又掏出几粒金丹，像吃炒豆般丢进嘴里，嘎嘣作响。洞内一片…"
      },
      {
        "episode_id": "EP0009",
        "block_id": "EP0009B004",
        "title": "【闪回】【蒙太奇】太宗目睹十八层地狱惨状",
        "lead_scene_id": "S0068",
        "presentation_mode": "montage",
        "time_modes": [
          "flashback"
        ],
        "reason_count": 2,
        "reasons": [
          "special_tag:闪回",
          "special_tag:蒙太奇"
        ],
        "screenplay_preview": "（幽冥界·奈河桥边）\n太宗随崔判官前行，忽闻桥下传来凄厉哭嚎。太宗驻足，循声望去，只见桥下血水翻涌，无数罪魂在其中沉浮挣扎，受尽铜蛇铁狗撕咬。太宗面色煞白，惊问：判官，此是何地？崔判官：陛下，此乃奈河桥，桥下便是十八层地狱入口。太宗再望，见远处另有金桥、银桥，有善人、神佛安稳通过，与这奈河惨状形成鲜明对比。太宗：为何有此分别？崔判官：善恶有报，功过自分。陛…"
      },
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B002",
        "title": "【传闻】石猴带领众猴进入水帘洞",
        "lead_scene_id": "S0003",
        "presentation_mode": "dialogue",
        "time_modes": [
          "rumor"
        ],
        "reason_count": 1,
        "reasons": [
          "special_tag:传闻"
        ],
        "screenplay_preview": "（花果山，水帘洞内，数年后）\n洞内石桌石椅俱全，众猴正簇拥着石猴，将一盘盘鲜果美酒奉上。一只老猴高声提议：“大王今日带我等寻得这洞天福地，免受风雨之苦，我等愿拜大王为‘美猴王’！”众猴齐声欢呼，纷纷跪拜。美猴王端坐石座，满面春风，与众猴宴饮作乐。酒过三巡，他却忽然放下酒杯，眉头紧锁，眼中竟滚下泪来。众猴惊问：“大王为何烦恼？”美猴王长叹一声：“今日虽在此称…"
      },
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B003",
        "title": "【蒙太奇】众猴饯行盛宴",
        "lead_scene_id": "S0004",
        "presentation_mode": "montage",
        "time_modes": [
          "mainline"
        ],
        "reason_count": 1,
        "reasons": [
          "special_tag:蒙太奇"
        ],
        "screenplay_preview": "（花果山，次日清晨）\n水帘洞外，众猴已备好木筏与瓜果。美猴王立于岸边，众猴围着他，有的递上鲜果，有的抹着眼泪。一只老猴上前，声音哽咽：“大王此去，不知何日能归？”美猴王接过一个桃子，目光坚定：“待我寻得长生不老之法，必回花果山，与尔等同享！”说罢，他转身跃上木筏，撑起竹篙。众猴齐声呼喊，目送木筏缓缓驶入茫茫大海。\n（蒙太奇）\n木筏在波涛中起伏，美猴王的身影…"
      }
    ],
    "normal_blocks": [
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B001",
        "title": "仙石迸裂、石猴诞生",
        "lead_scene_id": "S0002",
        "presentation_mode": "action",
        "time_modes": [
          "mainline"
        ],
        "reason_count": 0,
        "reasons": [],
        "screenplay_preview": "（东胜神洲，花果山巅，黄昏）\n天地混沌初开，山顶一块受日月精华的仙石骤然迸裂，一只石猴从中跳出，双目射出两道金光，直冲云霄。金光惊动天庭灵霄宝殿，玉皇大天尊端坐宝座，被金光晃了眼，皱眉问道：“下界何事喧哗？”千里眼与顺风耳领命出列探查。千里眼望向花果山，顺风耳侧耳倾听，片刻后回禀：“启奏陛下，乃东胜神洲花果山一仙石产一石猴，在那里拜四方，眼运金光，射冲斗府…"
      },
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B004",
        "title": "美猴王在山中听到歌声，循声发现一砍柴樵夫。",
        "lead_scene_id": "S0005",
        "presentation_mode": "dialogue",
        "time_modes": [
          "mainline"
        ],
        "reason_count": 0,
        "reasons": [],
        "screenplay_preview": "（西牛贺洲，山林中，数日后）\n美猴王在林间穿行，忽闻远处传来悠扬歌声：“观棋柯烂，伐木丁丁……相逢处，非仙即道，静坐讲《黄庭》。”他精神一振，循声疾步而去。只见一樵夫正挥斧砍柴，口中唱着歌谣。美猴王从树后跳出，拱手便拜：“老神仙！弟子稽首了！”樵夫吓了一跳，连忙放下斧头：“不当人！不当人！我拙汉衣食不全，怎敢当‘神仙’二字？”美猴王急切道：“你唱‘相逢处，…"
      }
    ]
  },
  "writing_strategy": {
    "status": "pass",
    "block_count": 57,
    "pass_block_count": 57,
    "warn_block_count": 0,
    "fail_block_count": 0,
    "subject_anchor_gap_count": 0,
    "dialogue_attribution_gap_count": 0,
    "action_anchor_gap_count": 0,
    "location_anchor_gap_count": 0,
    "abstract_prose_risk_count": 0,
    "next_fix_focus": []
  },
  "dramart_upload": {
    "platform_status": "pass",
    "upload_ready": true,
    "asset_ready": true,
    "storyboard_ready": "unknown",
    "upload_script_char_count": 29066,
    "upload_script_line_count": 449,
    "semi_structured_line_count": 0,
    "semi_structured_line_ratio": 0.0,
    "status": "pass",
    "semi_structured_line_samples": [],
    "upload_script_preview": "# 西游记前十回\n\n## 故事大纲\n故事核心：花果山仙石迸裂，石猴诞生。他勇探水帘洞称王，却因恐惧死亡而踏上寻仙之路，最终拜入菩提祖师门下，三次追问“可得长生么？”，展现其坚定不移的求道之心。\n核心钩子：花果山顶，仙石迸裂，一道金光直冲霄汉，惊动天庭。这石中诞生的灵猴，将如何搅动三界？\n\n## 主要人物\n- 石猴（剧本中亦作：齐天大圣 / 美猴王 / 猴王）：后称齐天大圣\n- 玉皇大天尊（剧本中亦作：玉帝 / 大天尊 / 玄穹高上帝）：亦称玉皇大帝\n- 哪吒三太子（剧本中亦作：哪吒 / 哪吒太子 / 惠岸行者）：…"
  },
  "prompt_guard": {
    "shot_count": 223,
    "issue_count": 0,
    "delivery_fix_queue_size": 0,
    "text_quality_acceptance_status": "pass",
    "tri_layer_acceptance_status": "pass",
    "dramart_delivery_acceptance_status": "pass"
  },
  "spot_check": {
    "risk_blocks": [
      {
        "episode_id": "EP0005",
        "block_id": "EP0005B002",
        "title": "【闪回】【蒙太奇】孙悟空与众猴开仙酒会",
        "lead_scene_id": "S0033",
        "presentation_mode": "montage",
        "time_modes": [
          "flashback"
        ],
        "reason_count": 2,
        "reasons": [
          "special_tag:闪回",
          "special_tag:蒙太奇"
        ],
        "screenplay_preview": "（花果山，水帘洞内，孙悟空逃回后不久）\n孙悟空一个筋斗翻进水帘洞，将怀里揣着的仙酒、蟠桃一股脑倒在石桌上。他满面红光，得意地拍着胸脯：“孩儿们！俺老孙今日在天庭，好生快活！那蟠桃会上的琼浆玉液，全被我搬回来了！”众猴欢呼雀跃，争抢着仙酒痛饮。孙悟空自己也抱起酒坛，仰头痛饮，酒液顺着嘴角流下。他醉眼朦胧，又掏出几粒金丹，像吃炒豆般丢进嘴里，嘎嘣作响。洞内一片…"
      },
      {
        "episode_id": "EP0009",
        "block_id": "EP0009B004",
        "title": "【闪回】【蒙太奇】太宗目睹十八层地狱惨状",
        "lead_scene_id": "S0068",
        "presentation_mode": "montage",
        "time_modes": [
          "flashback"
        ],
        "reason_count": 2,
        "reasons": [
          "special_tag:闪回",
          "special_tag:蒙太奇"
        ],
        "screenplay_preview": "（幽冥界·奈河桥边）\n太宗随崔判官前行，忽闻桥下传来凄厉哭嚎。太宗驻足，循声望去，只见桥下血水翻涌，无数罪魂在其中沉浮挣扎，受尽铜蛇铁狗撕咬。太宗面色煞白，惊问：判官，此是何地？崔判官：陛下，此乃奈河桥，桥下便是十八层地狱入口。太宗再望，见远处另有金桥、银桥，有善人、神佛安稳通过，与这奈河惨状形成鲜明对比。太宗：为何有此分别？崔判官：善恶有报，功过自分。陛…"
      },
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B002",
        "title": "【传闻】石猴带领众猴进入水帘洞",
        "lead_scene_id": "S0003",
        "presentation_mode": "dialogue",
        "time_modes": [
          "rumor"
        ],
        "reason_count": 1,
        "reasons": [
          "special_tag:传闻"
        ],
        "screenplay_preview": "（花果山，水帘洞内，数年后）\n洞内石桌石椅俱全，众猴正簇拥着石猴，将一盘盘鲜果美酒奉上。一只老猴高声提议：“大王今日带我等寻得这洞天福地，免受风雨之苦，我等愿拜大王为‘美猴王’！”众猴齐声欢呼，纷纷跪拜。美猴王端坐石座，满面春风，与众猴宴饮作乐。酒过三巡，他却忽然放下酒杯，眉头紧锁，眼中竟滚下泪来。众猴惊问：“大王为何烦恼？”美猴王长叹一声：“今日虽在此称…"
      },
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B003",
        "title": "【蒙太奇】众猴饯行盛宴",
        "lead_scene_id": "S0004",
        "presentation_mode": "montage",
        "time_modes": [
          "mainline"
        ],
        "reason_count": 1,
        "reasons": [
          "special_tag:蒙太奇"
        ],
        "screenplay_preview": "（花果山，次日清晨）\n水帘洞外，众猴已备好木筏与瓜果。美猴王立于岸边，众猴围着他，有的递上鲜果，有的抹着眼泪。一只老猴上前，声音哽咽：“大王此去，不知何日能归？”美猴王接过一个桃子，目光坚定：“待我寻得长生不老之法，必回花果山，与尔等同享！”说罢，他转身跃上木筏，撑起竹篙。众猴齐声呼喊，目送木筏缓缓驶入茫茫大海。\n（蒙太奇）\n木筏在波涛中起伏，美猴王的身影…"
      }
    ],
    "normal_blocks": [
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B001",
        "title": "仙石迸裂、石猴诞生",
        "lead_scene_id": "S0002",
        "presentation_mode": "action",
        "time_modes": [
          "mainline"
        ],
        "reason_count": 0,
        "reasons": [],
        "screenplay_preview": "（东胜神洲，花果山巅，黄昏）\n天地混沌初开，山顶一块受日月精华的仙石骤然迸裂，一只石猴从中跳出，双目射出两道金光，直冲云霄。金光惊动天庭灵霄宝殿，玉皇大天尊端坐宝座，被金光晃了眼，皱眉问道：“下界何事喧哗？”千里眼与顺风耳领命出列探查。千里眼望向花果山，顺风耳侧耳倾听，片刻后回禀：“启奏陛下，乃东胜神洲花果山一仙石产一石猴，在那里拜四方，眼运金光，射冲斗府…"
      },
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B004",
        "title": "美猴王在山中听到歌声，循声发现一砍柴樵夫。",
        "lead_scene_id": "S0005",
        "presentation_mode": "dialogue",
        "time_modes": [
          "mainline"
        ],
        "reason_count": 0,
        "reasons": [],
        "screenplay_preview": "（西牛贺洲，山林中，数日后）\n美猴王在林间穿行，忽闻远处传来悠扬歌声：“观棋柯烂，伐木丁丁……相逢处，非仙即道，静坐讲《黄庭》。”他精神一振，循声疾步而去。只见一樵夫正挥斧砍柴，口中唱着歌谣。美猴王从树后跳出，拱手便拜：“老神仙！弟子稽首了！”樵夫吓了一跳，连忙放下斧头：“不当人！不当人！我拙汉衣食不全，怎敢当‘神仙’二字？”美猴王急切道：“你唱‘相逢处，…"
      }
    ],
    "recommended_manual_sample_count": 6
  },
  "summary": {
    "status": "pass",
    "fail_count": 0,
    "warn_count": 0,
    "issue_count": 0,
    "top_issues": []
  },
  "checks": [
    {
      "id": "artifacts.screenplay",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "screenplay 工件必须存在",
      "actual": true,
      "expected": true
    },
    {
      "id": "artifacts.dramart_package",
      "stage": "dramart_upload",
      "status": "pass",
      "severity": "info",
      "message": "dramart_upload 工件必须存在",
      "actual": true,
      "expected": true
    },
    {
      "id": "artifacts.prompt_guard",
      "stage": "prompt_guard",
      "status": "pass",
      "severity": "info",
      "message": "prompt_guard 工件必须存在",
      "actual": true,
      "expected": true
    },
    {
      "id": "screenplay.multi_scene_source_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "screenplay block 必须保持单场景来源纯度",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.multi_time_mode_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "screenplay block 不得混装多个时间模式",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.special_label_missing_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "特殊时间/表现块必须显式标记 flashback / montage 等标签",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.scene_element_stacking_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "screenplay block 开头不能把多个场景元素硬堆在一起，导致场面失焦",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.purity_warn_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "screenplay purity warn block 数必须保持在冻结阈值内",
      "actual": 0,
      "expected": 1
    },
    {
      "id": "screenplay.fallback_placeholder_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "canonical screenplay 不能重新出现 fallback placeholder 正文污染",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.template_leak_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "canonical screenplay 不能重新出现模板句泄漏",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.summary_tone_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "canonical screenplay 不能重新滑回摘要式概述正文",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.chronicle_tone_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "canonical screenplay 不能重新滑回章回/编年串讲口吻",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.weak_performable_tension_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "高人物密度 block 不能只剩抽象压力总结，必须落回可表演张力",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.delayed_scene_entry_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "正文开头不能先承接前场或长句过桥，真正场面入点必须尽快出现",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.event_bundle_summary_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "多个事件不能被打包成流程说明书式梗概，必须保留可拍现场",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.excerpt_summary_lead_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "正文首句不能退化成摘录式概述导语",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.expository_voiceover_lead_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "正文起笔不能退化成全知说明式旁白导语",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "screenplay.adaptation_meta_leakage_block_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "info",
      "message": "adaptation 元信息不能泄漏到最终 screenplay 正文",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "writing_strategy.subject_anchor_gap_count",
      "stage": "writing_strategy",
      "status": "pass",
      "severity": "info",
      "message": "正文必须保留清晰主体锚点，不能退化到只剩无主体描述",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "writing_strategy.dialogue_attribution_gap_count",
      "stage": "writing_strategy",
      "status": "pass",
      "severity": "info",
      "message": "对白必须具备可归属说话人，不能回退到无归属发言",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "writing_strategy.action_anchor_gap_count",
      "stage": "writing_strategy",
      "status": "pass",
      "severity": "info",
      "message": "正文应保持动作落点，避免滑回只讲结果不见动作的说明写法",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "writing_strategy.location_anchor_gap_count",
      "stage": "writing_strategy",
      "status": "pass",
      "severity": "info",
      "message": "正文应保留可见空间锚点，避免场面悬空",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "writing_strategy.abstract_prose_risk_count",
      "stage": "writing_strategy",
      "status": "pass",
      "severity": "info",
      "message": "正文不能退化成抽象解释或总结式 prose，必须回到可拍信息",
      "actual": 0,
      "expected": 0
    },
    {
      "id": "dramart_upload.upload_script_char_count",
      "stage": "dramart_upload",
      "status": "pass",
      "severity": "info",
      "message": "Dramart 上传正文不能短到失去分集可读性",
      "actual": 29066,
      "expected": 600
    },
    {
      "id": "dramart_upload.semi_structured_line_ratio",
      "stage": "dramart_upload",
      "status": "pass",
      "severity": "info",
      "message": "Dramart 上传正文不能滑回半结构化说明书写法",
      "actual": 0.0,
      "expected": {
        "warn_at": 0.18,
        "fail_at": 0.35
      }
    },
    {
      "id": "prompt_guard.text_quality_status",
      "stage": "prompt_guard",
      "status": "pass",
      "severity": "info",
      "message": "prompt_guard 必须保持 text_quality 为 pass",
      "actual": "pass",
      "expected": "pass"
    },
    {
      "id": "prompt_guard.tri_layer_status",
      "stage": "prompt_guard",
      "status": "pass",
      "severity": "info",
      "message": "prompt_guard 必须保持 tri_layer 为 pass",
      "actual": "pass",
      "expected": "pass"
    },
    {
      "id": "prompt_guard.dramart_delivery_status",
      "stage": "prompt_guard",
      "status": "pass",
      "severity": "info",
      "message": "prompt_guard 必须保持 dramart_delivery 为 pass",
      "actual": "pass",
      "expected": "pass"
    }
  ]
}