{
  "version": "screenplay_product_quality.v1",
  "generated_at": "2026-04-10T09:51:51.189548Z",
  "meta": {
    "run_dir": "/wwwb/aitools/writer/outputs/xiyouji_now11_s5_step7_frontload_live_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众猴簇拥着美猴王来到海边，石桌上摆满瓜果美酒，一场饯行盛宴正酣。一只老猴举杯上前，声音哽咽：“大王，此去山高水远，不知何日能归？”美猴王接过酒杯一饮而尽，目光坚定地望向茫茫大海：“我此去，定要寻得长生不老之术，回来与你们共享！”说罢，他转身走向岸边简陋的木筏。众猴齐声高呼：“大王保重！”美猴王独自登筏，撑篙离岸。木筏在波涛中渐行渐…"
      }
    ],
    "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": "（开篇诗视觉化呈现：混沌初开，天地分判，镜头掠过四大部洲，最终聚焦于东胜神洲傲来国的花果山。山顶一块受日月精华的仙石，在黄昏时分骤然迸裂，产出一只石卵，见风化作一个五官俱备、四肢皆全的石猴。石猴眼中射出两道金光，直冲霄汉。金光惊动了天庭灵霄宝殿。殿内，玉皇大天尊端坐宝座，被金光惊扰。玉帝：千里眼、顺风耳何在？速去南天门，看是何方下界妖物作祟。千里眼与顺风耳…"
      },
      {
        "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": 28244,
    "upload_script_line_count": 348,
    "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- 哪吒三太子（剧本中亦作：哪吒 / 哪吒太子 / 惠岸行者）：哪吒三太子为三坛海会大神；托塔天王二太子\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众猴簇拥着美猴王来到海边，石桌上摆满瓜果美酒，一场饯行盛宴正酣。一只老猴举杯上前，声音哽咽：“大王，此去山高水远，不知何日能归？”美猴王接过酒杯一饮而尽，目光坚定地望向茫茫大海：“我此去，定要寻得长生不老之术，回来与你们共享！”说罢，他转身走向岸边简陋的木筏。众猴齐声高呼：“大王保重！”美猴王独自登筏，撑篙离岸。木筏在波涛中渐行渐…"
      }
    ],
    "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": "（开篇诗视觉化呈现：混沌初开，天地分判，镜头掠过四大部洲，最终聚焦于东胜神洲傲来国的花果山。山顶一块受日月精华的仙石，在黄昏时分骤然迸裂，产出一只石卵，见风化作一个五官俱备、四肢皆全的石猴。石猴眼中射出两道金光，直冲霄汉。金光惊动了天庭灵霄宝殿。殿内，玉皇大天尊端坐宝座，被金光惊扰。玉帝：千里眼、顺风耳何在？速去南天门，看是何方下界妖物作祟。千里眼与顺风耳…"
      },
      {
        "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": 28244,
      "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"
    }
  ]
}