{
  "version": "screenplay_reserve_repair.v1",
  "generated_at": "2026-04-15T16:16:35.924445Z",
  "run_dir": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/laocan_acceptance_smoke_20260401_v1_recheck_v2",
  "changed_block_count": 4,
  "changed_blocks": [
    {
      "block_id": "EP0001B002",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（登州）\n三人：你先站住，把眼前最要紧的一句听清。\n德慧生：救的内心萌芽到底该怎么办？\n德慧生盯住三人不放，非要追问出救与不救。\n三人相约登蓬莱阁。\n通过望远镜发现危船。\n德慧生首次惊呼发现危险。\n德慧生通过望远镜发现那艘在巨浪中挣扎、看似不妙的帆船。\n三人对危船状况的初步观察与讨论。",
      "after_preview": "（登州）\n三人相约登蓬莱阁。\n通过望远镜发现危船。\n德慧生首次惊呼发现危险。\n三人对危船状况的初步观察与讨论。\n德慧生通过望远镜发现那艘在巨浪中挣扎、看似不妙的帆船。\n老残与两位朋友同游蓬莱阁，夜间饮酒等待日出，并观察到海上的帆船。"
    },
    {
      "block_id": "EP0002B002",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（戏台）\n黑妞简短说书作为过渡，观众站在人堆里，脸色一下子就绷住了，时间提示，表演意外收场，众人散去，老残汇银做衣。\n黑妞简短说书作为过渡。\n观众：黑驴段。\n观众站在人堆里，脸色一下子就绷住了。\n时间提示。\n表演意外收场，众人散去。\n士子提及金线泉的奥秘，将老残（及观众）的注意力从娱乐（说书）引向一个待解的谜题（自然/超自然现象）",
      "after_preview": "（戏台）\n观众：黑驴段。\n游览趵突泉。\n老残汇银做衣。\n与士子探讨金线泉。\n黑妞简短说书作为过渡。\n时间提示。"
    },
    {
      "block_id": "EP0002B006",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（抚署）\n张宫保的出场与外貌，老残对贾让与王景治河策略的对比分析，老残承诺呈递说帖，张宫保求教河工治理。\n老残盯住张宫保不放，非要追问出王景。\n老残对贾让与王景治河策略的对比分析。\n老残：王景。\n老残承诺呈递说帖。\n老残提出“王景”的名字并简要阐述其理念。",
      "after_preview": "（抚署）\n老残承诺呈递说帖。\n老残对贾让与王景治河策略的对比分析。\n老残提出“王景”的名字并简要阐述其理念。"
    },
    {
      "block_id": "EP0002B008",
      "issue_codes": [
        "abstract:residual_fallback_noise"
      ],
      "before_preview": "（客栈）\n老残否认抚台邀请。\n老残：打扫南书房。\n差官不仅送来酒席，更传达“打扫南书房”的明确指令。\n老残压着嗓子挤出一句：“打扫南书房”",
      "after_preview": "（客栈）\n老残否认抚台邀请。\n老残回到客栈，掌柜道喜并转述抚台邀约的传闻，随后宫保差人送来酒席。"
    }
  ],
  "downstream": {
    "dramart_package": {
      "run_dir": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/laocan_acceptance_smoke_20260401_v1_recheck_v2",
      "package_path": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/laocan_acceptance_smoke_20260401_v1_recheck_v2/03e_dramart_package.json",
      "upload_script_path": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/laocan_acceptance_smoke_20260401_v1_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/laocan_acceptance_smoke_20260401_v1_recheck_v2",
      "storyboard_path": "/wwwb/aitools/writer/outputs/quality_gates/s6_step11_focus_recheck_v2/laocan_acceptance_smoke_20260401_v1_recheck_v2/05c_dramart_storyboard.json",
      "status": "pass",
      "shot_count": 71,
      "prompt_guard_status": "fail"
    }
  },
  "before": {
    "quality_gate": {
      "status": "pass",
      "broad_status": "warn",
      "top_issues": [
        {
          "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": 4,
          "expected": {
            "max_abstract_prose_risk_count": 0
          }
        }
      ]
    },
    "product_quality": {
      "status": "fail",
      "fail_count": 1,
      "warn_count": 3,
      "issue_count": 4,
      "top_issues": [
        {
          "id": "writing_strategy.abstract_prose_risk_count",
          "stage": "writing_strategy",
          "status": "warn",
          "message": "正文不能退化成抽象解释或总结式 prose，必须回到可拍信息",
          "actual": 4,
          "expected": 0
        },
        {
          "id": "prompt_guard.text_quality_status",
          "stage": "prompt_guard",
          "status": "warn",
          "message": "prompt_guard 必须保持 text_quality 为 pass",
          "actual": "warning",
          "expected": "pass"
        },
        {
          "id": "prompt_guard.tri_layer_status",
          "stage": "prompt_guard",
          "status": "warn",
          "message": "prompt_guard 必须保持 tri_layer 为 pass",
          "actual": "warning",
          "expected": "pass"
        },
        {
          "id": "prompt_guard.dramart_delivery_status",
          "stage": "prompt_guard",
          "status": "fail",
          "message": "prompt_guard 必须保持 dramart_delivery 为 pass",
          "actual": "fail",
          "expected": "pass"
        }
      ]
    }
  },
  "after": {
    "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.315789,
          "expected": {
            "max_short_block_ratio": 0.2
          }
        },
        {
          "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": 1,
          "expected": {
            "max_abstract_prose_risk_count": 0
          }
        }
      ]
    },
    "product_quality": {
      "status": "fail",
      "fail_count": 1,
      "warn_count": 3,
      "issue_count": 4,
      "top_issues": [
        {
          "id": "writing_strategy.abstract_prose_risk_count",
          "stage": "writing_strategy",
          "status": "warn",
          "message": "正文不能退化成抽象解释或总结式 prose，必须回到可拍信息",
          "actual": 1,
          "expected": 0
        },
        {
          "id": "prompt_guard.text_quality_status",
          "stage": "prompt_guard",
          "status": "warn",
          "message": "prompt_guard 必须保持 text_quality 为 pass",
          "actual": "warning",
          "expected": "pass"
        },
        {
          "id": "prompt_guard.tri_layer_status",
          "stage": "prompt_guard",
          "status": "warn",
          "message": "prompt_guard 必须保持 tri_layer 为 pass",
          "actual": "warning",
          "expected": "pass"
        },
        {
          "id": "prompt_guard.dramart_delivery_status",
          "stage": "prompt_guard",
          "status": "fail",
          "message": "prompt_guard 必须保持 dramart_delivery 为 pass",
          "actual": "fail",
          "expected": "pass"
        }
      ]
    }
  }
}