{
  "version": "screenplay_product_quality.v1",
  "generated_at": "2026-04-08T20:05:45.051805Z",
  "meta": {
    "run_dir": "/wwwb/aitools/writer/outputs/daozu_conflict_downstream_trim8_20260329_v1",
    "source_paths": {
      "screenplay": "03d_screenplay.json",
      "dramart_package": "03e_dramart_package.json",
      "prompt_guard": ""
    },
    "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": 2,
    "block_count": 11,
    "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": 0,
    "montage_tag_block_count": 0,
    "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": [],
    "normal_blocks": [
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B001",
        "title": "墨竹山与魔尊法相",
        "lead_scene_id": "S0001",
        "presentation_mode": "dramatize",
        "time_modes": [
          "unknown"
        ],
        "reason_count": 0,
        "reasons": [],
        "screenplay_preview": "（全景）妖兽蛰伏、毒瘴缭绕的墨竹山，延绵三千里，十四峰险峻异常。\n（推近）镜头推向山中一处突兀的平地，开凿痕迹明显，绝非天然形成。\n（特写）平地中央，一尊八臂六首、造型诡异的石制法相静静矗立，非人面貌透着说不出的邪异与威严。"
      },
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B002",
        "title": "画地为牢",
        "lead_scene_id": "S0002",
        "presentation_mode": "dialogue",
        "time_modes": [
          "mainline"
        ],
        "reason_count": 0,
        "reasons": [],
        "screenplay_preview": "墨竹林中的法坛边，一名蒙面修士沉默地领来一群童子。童子们眼神呆滞，不哭不闹。\n怀抱朱木剑的老道走上前，用剑尖在地上画出一个发光的圆圈，将童子们圈在其中。\n老道（背对众人，声音低沉）：入夜后，不可出此圈。\n（李凡内心OS）李凡：这……这是什么鬼地方？我真的穿越了？还是仙侠世界？"
      }
    ]
  },
  "writing_strategy": {
    "status": "pass",
    "block_count": 11,
    "pass_block_count": 11,
    "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": "unknown",
    "upload_ready": false,
    "asset_ready": false,
    "storyboard_ready": "unknown",
    "upload_script_char_count": 4898,
    "upload_script_line_count": 166,
    "semi_structured_line_count": 25,
    "semi_structured_line_ratio": 0.150602,
    "status": "pass",
    "semi_structured_line_samples": [
      "场景：竹山",
      "转场：镜头从法相上拉，转入墨竹林场景。",
      "人物：李凡、老道、修道士",
      "场景：墨竹林、法坛",
      "转场：李凡的思绪闪回到穿越之初。"
    ],
    "upload_script_preview": "# 道祖是克苏鲁\n\n## 故事大纲\n故事核心：穿越者李凡被掳至险恶的墨竹山，在诡异老道的看管下，激活了一个只会搞心态的“心理健康维护系统”，并在双月异象后，因隐瞒所见而与老道陷入信任危机。\n核心钩子：镜头掠过妖兽横行、毒瘴弥漫的三千里墨竹山，最终聚焦于一处人力开凿的平地。平地中央，一尊八臂六首、非人型的魔尊法相巍然矗立，昭示着这个世界超自然与神秘的力量。\n\n## 主要人物\n- 李凡：核心角色\n- 老道：险些道化魔形\n- 山主：核心角色\n- 修道士：三个皂衣青冠，锦帛覆面的修道士\n\n## 分集导览\n- 第01集 魔…"
  },
  "prompt_guard": {},
  "spot_check": {
    "risk_blocks": [],
    "normal_blocks": [
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B001",
        "title": "墨竹山与魔尊法相",
        "lead_scene_id": "S0001",
        "presentation_mode": "dramatize",
        "time_modes": [
          "unknown"
        ],
        "reason_count": 0,
        "reasons": [],
        "screenplay_preview": "（全景）妖兽蛰伏、毒瘴缭绕的墨竹山，延绵三千里，十四峰险峻异常。\n（推近）镜头推向山中一处突兀的平地，开凿痕迹明显，绝非天然形成。\n（特写）平地中央，一尊八臂六首、造型诡异的石制法相静静矗立，非人面貌透着说不出的邪异与威严。"
      },
      {
        "episode_id": "EP0001",
        "block_id": "EP0001B002",
        "title": "画地为牢",
        "lead_scene_id": "S0002",
        "presentation_mode": "dialogue",
        "time_modes": [
          "mainline"
        ],
        "reason_count": 0,
        "reasons": [],
        "screenplay_preview": "墨竹林中的法坛边，一名蒙面修士沉默地领来一群童子。童子们眼神呆滞，不哭不闹。\n怀抱朱木剑的老道走上前，用剑尖在地上画出一个发光的圆圈，将童子们圈在其中。\n老道（背对众人，声音低沉）：入夜后，不可出此圈。\n（李凡内心OS）李凡：这……这是什么鬼地方？我真的穿越了？还是仙侠世界？"
      }
    ],
    "recommended_manual_sample_count": 2
  },
  "summary": {
    "status": "fail",
    "fail_count": 1,
    "warn_count": 0,
    "issue_count": 1,
    "top_issues": [
      {
        "id": "artifacts.prompt_guard",
        "stage": "prompt_guard",
        "status": "fail",
        "message": "prompt_guard 工件必须存在",
        "actual": false,
        "expected": true
      }
    ]
  },
  "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": "fail",
      "severity": "error",
      "message": "prompt_guard 工件必须存在",
      "actual": false,
      "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": 4898,
      "expected": 600
    },
    {
      "id": "dramart_upload.semi_structured_line_ratio",
      "stage": "dramart_upload",
      "status": "pass",
      "severity": "info",
      "message": "Dramart 上传正文不能滑回半结构化说明书写法",
      "actual": 0.150602,
      "expected": {
        "warn_at": 0.18,
        "fail_at": 0.35
      }
    }
  ]
}