{
  "version": "screenplay_reserve_repair.v1",
  "generated_at": "2026-04-15T17:09:50.529337Z",
  "run_dir": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/xiyouji_acceptance_smoke_20260401_v5_recheck_v2",
  "changed_block_count": 5,
  "changed_blocks": [
    {
      "block_id": "EP0001B005",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（斜月三星洞）\n猴王：孙悟空。\n猴王连说三声“好”并欣然接受此名。",
      "after_preview": "（斜月三星洞）\n石猴把“孙悟空”这句要紧话压低声线，对着猴王慢慢说开。\n菩提祖师说出“孙悟空”三字。\n猴王连说三声“好”并欣然接受此名。"
    },
    {
      "block_id": "EP0001B007",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（斜月三星洞）\n悟空：此间更无六耳。\n悟空三更夜访祖师。\n石猴看了悟空一眼，抬手示意他近前听道。\n悟空记下口诀返回。",
      "after_preview": "（斜月三星洞）\n“此间更无六耳”\n悟空三更夜访祖师。\n石猴看了悟空一眼，抬手示意他近前听道。\n悟空记下口诀返回。"
    },
    {
      "block_id": "EP0001B008",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（斜月三星洞）\n悟空：我不是逞强，只是不肯糊里糊涂退下去。\n悟空：少腮。\n石猴：弟子这话不是逞强，只想把门道听个分明。\n习得七十二变。\n祖师解释三灾利害。\n祖师暗示悟空与众不同。",
      "after_preview": "（斜月三星洞）\n悟空：我不是逞强，只是不肯糊里糊涂退下去。\n石猴把“少腮”这句要紧话压低声线，对着悟空慢慢说开。\n石猴：弟子这话不是逞强，只想把门道听个分明。\n习得七十二变。\n祖师解释三灾利害。\n祖师暗示悟空与众不同。"
    },
    {
      "block_id": "EP0002B004",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（花果山）\n悟空：神通觅。\n孙悟空呼风制造混乱。\n众猴见空中猴精惊慌。\n孙悟空担忧兵器不足。\n孙悟空驾筋斗云抵达傲来国。\n四老猴献策。\n孙悟空决定不使用“买”而使用“神通觅”，标志其从凡人思维向神通解决问题的转变，行动升级。",
      "after_preview": "（花果山）\n石猴把“神通觅”这句要紧话压低声线，对着悟空慢慢说开。\n孙悟空呼风制造混乱。\n众猴见空中猴精惊慌。\n孙悟空担忧兵器不足。\n孙悟空驾筋斗云抵达傲来国。\n四老猴献策。\n孙悟空决定不使用“买”而使用“神通觅”，标志其从凡人思维向神通解决问题的转变，行动升级。"
    },
    {
      "block_id": "EP0003B005",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（花果山）\n鬼王献袍称臣。\n提议齐天大圣。\n猴王穿赭黄袍。\n众猴排班朝拜。\n鬼王被封前部总督先锋。\n玉皇大天尊：弼马温。",
      "after_preview": "（花果山）\n鬼王献袍称臣。\n提议齐天大圣。\n猴王穿赭黄袍。\n众猴排班朝拜。\n鬼王被封前部总督先锋。\n悟空对天庭给予的“弼马温”身份的不满与反抗意识的萌芽。"
    }
  ],
  "downstream": {
    "dramart_package": {
      "run_dir": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/xiyouji_acceptance_smoke_20260401_v5_recheck_v2",
      "package_path": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/xiyouji_acceptance_smoke_20260401_v5_recheck_v2/03e_dramart_package.json",
      "upload_script_path": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/xiyouji_acceptance_smoke_20260401_v5_recheck_v2/03e_dramart_upload_script.md",
      "content_policy_version": "dramart_package_scope.v1",
      "risk_summary_present": true,
      "asset_action_summary_present": true
    },
    "dramart_storyboard": {
      "run_dir": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/xiyouji_acceptance_smoke_20260401_v5_recheck_v2",
      "storyboard_path": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/xiyouji_acceptance_smoke_20260401_v5_recheck_v2/05c_dramart_storyboard.json",
      "status": "pass",
      "shot_count": 74,
      "prompt_guard_status": "pass"
    }
  },
  "before": {
    "quality_gate": {
      "status": "warn",
      "broad_status": "warn",
      "top_issues": [
        {
          "id": "text_quality.short_block_ratio",
          "stage": "screenplay",
          "status": "warn",
          "severity": "warn",
          "failure_type": "text_quality_regression",
          "track_view": "delivery",
          "message": "short block ratio exceeds threshold",
          "actual": 0.578947,
          "expected": {
            "max_short_block_ratio": 0.2
          }
        },
        {
          "id": "text_quality.template_leak_ratio",
          "stage": "screenplay",
          "status": "warn",
          "severity": "warn",
          "failure_type": "text_quality_regression",
          "track_view": "delivery",
          "message": "template-leak block ratio exceeds threshold",
          "actual": 0.052632,
          "expected": {
            "max_template_leak_block_ratio": 0.0
          }
        },
        {
          "id": "text_quality.abstract_prose_risk_count",
          "stage": "screenplay",
          "status": "warn",
          "severity": "warn",
          "failure_type": "legacy_pressure_only",
          "track_view": "baseline",
          "message": "abstract prose risk count exceeds threshold",
          "actual": 7,
          "expected": {
            "max_abstract_prose_risk_count": 0
          }
        },
        {
          "id": "text_quality.action_anchor_gap_count",
          "stage": "screenplay",
          "status": "warn",
          "severity": "warn",
          "failure_type": "legacy_pressure_only",
          "track_view": "baseline",
          "message": "action anchor gap count exceeds threshold",
          "actual": 1,
          "expected": {
            "max_action_anchor_gap_count": 0
          }
        }
      ]
    },
    "product_quality": {
      "status": "fail",
      "fail_count": 1,
      "warn_count": 2,
      "issue_count": 3,
      "top_issues": [
        {
          "id": "screenplay.template_leak_block_count",
          "stage": "screenplay",
          "status": "fail",
          "message": "canonical screenplay 不能重新出现模板句泄漏",
          "actual": 1,
          "expected": 0
        },
        {
          "id": "writing_strategy.action_anchor_gap_count",
          "stage": "writing_strategy",
          "status": "warn",
          "message": "正文应保持动作落点，避免滑回只讲结果不见动作的说明写法",
          "actual": 1,
          "expected": 0
        },
        {
          "id": "writing_strategy.abstract_prose_risk_count",
          "stage": "writing_strategy",
          "status": "warn",
          "message": "正文不能退化成抽象解释或总结式 prose，必须回到可拍信息",
          "actual": 7,
          "expected": 0
        }
      ]
    }
  },
  "after": {
    "quality_gate": {
      "status": "fail",
      "broad_status": "fail",
      "top_issues": [
        {
          "id": "text_quality.dialogue_attribution_gap_count",
          "stage": "screenplay",
          "status": "fail",
          "severity": "error",
          "failure_type": "text_quality_regression",
          "track_view": "delivery",
          "message": "dialogue attribution gap count exceeds threshold",
          "actual": 1,
          "expected": {
            "max_dialogue_attribution_gap_count": 0
          }
        },
        {
          "id": "text_quality.short_block_ratio",
          "stage": "screenplay",
          "status": "warn",
          "severity": "warn",
          "failure_type": "text_quality_regression",
          "track_view": "delivery",
          "message": "short block ratio exceeds threshold",
          "actual": 0.526316,
          "expected": {
            "max_short_block_ratio": 0.2
          }
        },
        {
          "id": "text_quality.template_leak_ratio",
          "stage": "screenplay",
          "status": "warn",
          "severity": "warn",
          "failure_type": "text_quality_regression",
          "track_view": "delivery",
          "message": "template-leak block ratio exceeds threshold",
          "actual": 0.052632,
          "expected": {
            "max_template_leak_block_ratio": 0.0
          }
        },
        {
          "id": "text_quality.abstract_prose_risk_count",
          "stage": "screenplay",
          "status": "warn",
          "severity": "warn",
          "failure_type": "legacy_pressure_only",
          "track_view": "baseline",
          "message": "abstract prose risk count exceeds threshold",
          "actual": 2,
          "expected": {
            "max_abstract_prose_risk_count": 0
          }
        },
        {
          "id": "text_quality.action_anchor_gap_count",
          "stage": "screenplay",
          "status": "warn",
          "severity": "warn",
          "failure_type": "legacy_pressure_only",
          "track_view": "baseline",
          "message": "action anchor gap count exceeds threshold",
          "actual": 3,
          "expected": {
            "max_action_anchor_gap_count": 0
          }
        }
      ]
    },
    "product_quality": {
      "status": "fail",
      "fail_count": 2,
      "warn_count": 2,
      "issue_count": 4,
      "top_issues": [
        {
          "id": "screenplay.template_leak_block_count",
          "stage": "screenplay",
          "status": "fail",
          "message": "canonical screenplay 不能重新出现模板句泄漏",
          "actual": 1,
          "expected": 0
        },
        {
          "id": "writing_strategy.dialogue_attribution_gap_count",
          "stage": "writing_strategy",
          "status": "fail",
          "message": "对白必须具备可归属说话人，不能回退到无归属发言",
          "actual": 1,
          "expected": 0
        },
        {
          "id": "writing_strategy.action_anchor_gap_count",
          "stage": "writing_strategy",
          "status": "warn",
          "message": "正文应保持动作落点，避免滑回只讲结果不见动作的说明写法",
          "actual": 3,
          "expected": 0
        },
        {
          "id": "writing_strategy.abstract_prose_risk_count",
          "stage": "writing_strategy",
          "status": "warn",
          "message": "正文不能退化成抽象解释或总结式 prose，必须回到可拍信息",
          "actual": 2,
          "expected": 0
        }
      ]
    }
  }
}