{
  "version": "screenplay_quality_gate.v2",
  "generated_at": "2026-04-08T08:43:43.913561Z",
  "candidate_run_dir": "outputs/xiyouji_now11_s1_step1_closeout_live_v3",
  "gate_config": {
    "structure": {
      "require_artifacts": true,
      "require_non_empty_episodes": true,
      "require_non_empty_blocks": true,
      "max_missing_episode_source_refs": 0,
      "max_missing_block_source_refs": 0,
      "max_missing_block_group_refs": 0,
      "max_missing_block_beat_refs": 0,
      "max_missing_time_mode_count": 0,
      "max_empty_block_text_count": 0
    },
    "text_quality": {
      "short_block_char_threshold": 120,
      "max_short_block_ratio": 0.2,
      "summary_like_char_threshold": 180,
      "max_summary_like_ratio": 0.15,
      "max_dialogue_sparse_ratio": 0.35,
      "max_narration_overload_ratio": 0.35,
      "max_chronicle_tone_ratio": 0.0,
      "max_summary_tone_ratio": 0.0,
      "max_weak_performable_tension_ratio": 0.0,
      "max_delayed_scene_entry_ratio": 0.0,
      "max_event_bundle_summary_ratio": 0.0,
      "max_excerpt_summary_lead_ratio": 0.0,
      "max_fallback_placeholder_ratio": 0.0,
      "max_template_leak_ratio": 0.0,
      "max_title_card_meta_ratio": 0.0,
      "max_expository_voiceover_lead_ratio": 0.0
    },
    "dramart": {
      "min_upload_script_chars": 2000,
      "min_upload_script_chars_floor": 600,
      "min_upload_script_chars_per_episode": 850,
      "min_upload_script_chars_per_block": 450,
      "require_upload_ready_summary": true,
      "max_missing_character_bio_ratio": 0.05,
      "max_missing_visual_card_ratio": 0.05,
      "max_missing_voice_card_ratio": 0.05,
      "max_missing_asset_binding_ratio": 0.05,
      "max_missing_identity_summary_ratio": 0.05
    },
    "manual_review": {
      "warn_on_run_needs_rewrite": true,
      "warn_on_episode_needs_rewrite": true,
      "warn_on_block_needs_rewrite": true,
      "warn_on_continuity_issue": true,
      "warn_on_summary_tone": true,
      "warn_on_weak_dialogue": true,
      "warn_on_bad_episode_boundary": true
    },
    "writing_strategy": {
      "max_subject_anchor_gap_count": 0,
      "max_dialogue_attribution_gap_count": 0,
      "max_location_anchor_gap_count": 0
    }
  },
  "candidate": {
    "run_dir": "xiyouji_now11_s1_step1_closeout_live_v3",
    "run_id": "20260408T065332658669Z",
    "created_at": "2026-04-08T07:24:54.606827Z",
    "out_dir": "outputs/xiyouji_now11_s1_step1_closeout_live_v3",
    "input_path": "input/西游记前十回.txt",
    "input_sha256": "7d629dc9a5cf237966935cbbc7140db4c341e5f08be33f21ead2c26ca64c9025",
    "provider": "deepseek",
    "video_provider": "seedance",
    "enable_video": false,
    "style_preset": "电影化叙事，细节清晰，角色形象一致，光照连续",
    "limits": {
      "max_chars": 1800,
      "limit_chunks": null,
      "limit_scenes": null,
      "limit_shots": null
    },
    "status": "ok",
    "errors": 0,
    "counts": {
      "chunks": 0,
      "ontology_samples": 0,
      "ontology_candidate_entity_types": 0,
      "ontology_candidate_relation_types": 0,
      "ontology_entity_taxonomy": 0,
      "ontology_relation_taxonomy": 0,
      "observations": 0,
      "entities": 0,
      "relations": 0,
      "type_candidates": 0,
      "type_apply_type_count": 0,
      "type_apply_subtype_count": 0,
      "type_other_before": 0,
      "type_other_after": 0,
      "entity_registry_entities": 97,
      "entity_visual_cards": 97,
      "entity_voice_cards": 38,
      "entity_asset_bindings": 97,
      "scenes": 68,
      "chronology_scenes": 68,
      "chronology_groups": 49,
      "chronology_edges": 77,
      "chronology_conflicts": 0,
      "adaptation_scenes": 68,
      "adaptation_groups": 55,
      "adaptation_beats": 55,
      "adaptation_retain_scenes": 57,
      "adaptation_compress_scenes": 11,
      "adaptation_bridge_scenes": 0,
      "adaptation_drop_scenes": 11,
      "screenplay_episodes": 9,
      "screenplay_blocks": 57,
      "screenplay_source_scene_refs": 57,
      "dramart_package_episodes": 9,
      "dramart_package_character_bios": 37,
      "dramart_package_location_assets": 24,
      "dramart_package_prop_assets": 7,
      "dramart_package_checklist": 109,
      "dramart_package_upload_chars": 30641,
      "dramart_review_checklist_done": 0,
      "dramart_review_checklist_open": 0,
      "dramart_review_upload_parts_done": 0,
      "dramart_review_upload_parts_open": 0,
      "dramart_review_episode_upload_done": 0,
      "dramart_review_episode_upload_open": 0,
      "dramart_review_events": 0,
      "scripts": 57,
      "shots": 223,
      "style_fixed_positive_terms": 9,
      "style_fixed_negative_terms": 10,
      "style_provider_profiles": 2,
      "style_manual_override_slots": 6,
      "style_reference_ready_entities": 0,
      "storyboards": 223,
      "storyboard_ready_status": "pass",
      "storyboard_ready_pass_count": 223,
      "storyboard_ready_warn_count": 0,
      "storyboard_ready_fail_count": 0,
      "storyboard_ready_issue_count": 0,
      "prompt_guard_shots": 223,
      "prompt_guard_pass_shots": 223,
      "prompt_guard_warning_shots": 0,
      "prompt_guard_fail_shots": 0,
      "prompt_guard_issue_count": 0,
      "segments": 0,
      "captions": 0,
      "audio_tasks": 0,
      "audio_results": 0,
      "video_tasks": 0,
      "video_results": 0,
      "manual_video_attempts": 0,
      "manual_video_task_covered_count": 0,
      "manual_video_result_ready_count": 0,
      "manual_video_eval_count": 0,
      "manual_video_selected_count": 0
    },
    "paths": {
      "project": "project.json",
      "manifest": "run_manifest.json",
      "chunks": "01_chunks.json",
      "ontology_samples": "01b_ontology_samples.json",
      "ontology_candidates": "01c_ontology_candidates.json",
      "ontology_doc": "01d_ontology.json",
      "kg": "02_kg.json",
      "kg_store": "02_kg_store.json",
      "kg_observations": "02_kg_observations.jsonl",
      "kg_closure": "02a_kg_closure.json",
      "kg_store_closure": "02a_kg_store_closure.json",
      "kg_closure_decisions": "02a_kg_closure_decisions.json",
      "type_candidates": "02b_type_candidates.json",
      "type_consolidation": "02c_type_consolidation.json",
      "kg_consolidated": "02d_kg_consolidated.json",
      "kg_store_consolidated": "02d_kg_store_consolidated.json",
      "entity_registry": "02e_entity_registry.json",
      "entity_visual_cards": "02f_entity_visual_cards.json",
      "entity_voice_cards": "02g_entity_voice_cards.json",
      "entity_assets": "02h_entity_assets.json",
      "kg_lite": "02i_kg_lite.json",
      "kg_lite_store": "02i_kg_lite_store.json",
      "kg_lite_decisions": "02i_kg_lite_decisions.json",
      "kg_deep": "02j_kg_deep.json",
      "kg_deep_store": "02j_kg_deep_store.json",
      "kg_deep_decisions": "02j_kg_deep_decisions.json",
      "scenes": "03_scenes.json",
      "chronology": "03b_chronology.json",
      "adaptation": "03c_adaptation.json",
      "screenplay": "03d_screenplay.json",
      "dramart_package": "03e_dramart_package.json",
      "dramart_upload_script": "03e_dramart_upload_script.md",
      "dramart_review_state": "03f_dramart_review_state.json",
      "scripts": "04_scripts.json",
      "style_bible": "04b_style_bible.json",
      "storyboard": "05_storyboard.json",
      "prompt_guard": "05b_storyboard_guard.json",
      "dramart_storyboard": "05c_dramart_storyboard.json",
      "timeline": "06_timeline.json",
      "audio_tasks": "06b_audio_tasks.json",
      "audio_results": "06c_audio_results.json",
      "video_tasks": "07_video_tasks.json",
      "video_results": "07_video_results.json",
      "manual_video_runs": "07b_manual_video_runs.json",
      "manual_video_eval": "07c_manual_video_eval.json",
      "events": "logs/run_events.jsonl",
      "errors": "logs/run_errors.jsonl",
      "stage_timings": "logs/stage_timings.jsonl",
      "llm_calls": "logs/llm_calls.jsonl",
      "report_html": "logs/run_report.html",
      "report_md": "logs/run_report.md",
      "metrics": "logs/run_metrics.json"
    },
    "dramart_review_status": "",
    "dramart_review_updated_at": "",
    "updated_at": "2026-04-08T08:43:43.892847Z",
    "run_uid": "20260408T065332658669Z",
    "run_key": "20260408T065332658669Z",
    "trace_scope": "live",
    "is_current_live": true,
    "archive_rel": "",
    "web_paths": {
      "run_root": "",
      "logs_dir": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/",
      "llm_dir": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/llm/",
      "manifest": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/run_manifest.json",
      "project": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/project.json",
      "report_html": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/run_report.html",
      "report_md": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/run_report.md",
      "metrics": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/run_metrics.json",
      "events": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/run_events.jsonl",
      "errors": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/run_errors.jsonl",
      "stage_timings": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/stage_timings.jsonl",
      "llm_calls": "/novel2video/runs/xiyouji_now11_s1_step1_closeout_live_v3/logs/llm_calls.jsonl"
    }
  },
  "artifacts": {
    "adaptation": "outputs/xiyouji_now11_s1_step1_closeout_live_v3/03c_adaptation.json",
    "screenplay": "outputs/xiyouji_now11_s1_step1_closeout_live_v3/03d_screenplay.json",
    "dramart_package": "outputs/xiyouji_now11_s1_step1_closeout_live_v3/03e_dramart_package.json",
    "dramart_storyboard": "outputs/xiyouji_now11_s1_step1_closeout_live_v3/05c_dramart_storyboard.json",
    "screenplay_review_state": "outputs/xiyouji_now11_s1_step1_closeout_live_v3/03d_screenplay_review_state.json"
  },
  "metrics": {
    "adaptation_item_count": 68,
    "retained_scene_group_count": 55,
    "beat_count": 55,
    "drop_from_script_count": 11,
    "hard_merge_count": 21,
    "episode_count": 9,
    "block_count": 57,
    "episode_summary_count": 9,
    "source_scene_ref_count": 57,
    "source_group_ref_count": 57,
    "source_beat_ref_count": 57,
    "character_binding_count": 257,
    "location_binding_count": 121,
    "unique_character_entity_count": 37,
    "unique_location_entity_count": 22,
    "missing_episode_source_ref_count": 0,
    "missing_block_source_ref_count": 0,
    "missing_block_group_ref_count": 0,
    "missing_block_beat_ref_count": 0,
    "missing_time_mode_count": 0,
    "empty_block_text_count": 0,
    "avg_block_char_count": 343.93,
    "short_block_count": 2,
    "short_block_ratio": 0.035088,
    "summary_like_block_count": 0,
    "summary_like_block_ratio": 0.0,
    "dialogue_block_count": 47,
    "dialogue_block_ratio": 0.824561,
    "dialogue_eligible_block_count": 57,
    "dialogue_sparse_block_count": 10,
    "dialogue_sparse_block_ratio": 0.175439,
    "dialogue_guard_block_count": 57,
    "dialogue_guard_miss_count": 10,
    "dialogue_guard_miss_ratio": 0.175439,
    "continuity_guard_block_count": 46,
    "narration_overload_block_count": 1,
    "narration_overload_block_ratio": 0.017544,
    "chronicle_tone_block_count": 0,
    "chronicle_tone_block_ratio": 0.0,
    "summary_tone_block_count": 0,
    "summary_tone_block_ratio": 0.0,
    "weak_performable_tension_block_count": 0,
    "weak_performable_tension_block_ratio": 0.0,
    "delayed_scene_entry_block_count": 0,
    "delayed_scene_entry_block_ratio": 0.0,
    "event_bundle_summary_block_count": 0,
    "event_bundle_summary_block_ratio": 0.0,
    "excerpt_summary_lead_block_count": 0,
    "excerpt_summary_lead_block_ratio": 0.0,
    "fallback_placeholder_block_count": 0,
    "fallback_placeholder_block_ratio": 0.0,
    "template_leak_block_count": 0,
    "template_leak_block_ratio": 0.0,
    "title_card_meta_block_count": 0,
    "title_card_meta_block_ratio": 0.0,
    "expository_voiceover_lead_block_count": 0,
    "expository_voiceover_lead_block_ratio": 0.0,
    "character_bio_count": 37,
    "missing_character_bio_count": 0,
    "missing_character_bio_ratio": 0.0,
    "episode_summary_missing_character_bio_count": 0,
    "upload_script_char_count": 30641,
    "package_contract_present": true,
    "content_policy_version": "dramart_package_scope.v1",
    "content_policy_roles_valid": 1,
    "content_policy_source_truth_valid": 1,
    "episode_summary_source_ref_missing_count": 0,
    "episode_summary_source_ref_invalid_count": 0,
    "upload_bundle_source_ref_present": 1,
    "upload_bundle_source_ref_valid": 1,
    "upload_episode_source_ref_missing_count": 0,
    "upload_episode_source_ref_invalid_count": 0,
    "upload_part_count": 1,
    "upload_part_source_ref_missing_count": 0,
    "upload_part_source_ref_invalid_count": 0,
    "asset_contract_item_count": 105,
    "asset_missing_init_action_count": 0,
    "asset_invalid_init_action_count": 0,
    "asset_missing_risk_summary_count": 0,
    "asset_missing_source_ref_count": 0,
    "asset_invalid_source_ref_count": 0,
    "asset_review_required_count": 4,
    "asset_review_required_ratio": 0.038095,
    "package_risk_summary_present": 1,
    "package_risk_item_count": 364,
    "package_risk_flag_count": 6,
    "asset_ready_summary_present": true,
    "asset_ready_summary_inferred": 0,
    "asset_ready_status": "pass",
    "asset_ready_issue_count": 0,
    "asset_ready_fail_count": 0,
    "asset_ready_warn_count": 0,
    "upload_ready_summary_present": true,
    "upload_ready_summary_inferred": 0,
    "upload_ready_status": "pass",
    "upload_ready_issue_count": 1,
    "upload_ready_fail_count": 0,
    "upload_ready_warn_count": 0,
    "upload_ready_info_count": 1,
    "upload_has_global_preface": 1,
    "upload_time_layer_annotation_recommended": 1,
    "storyboard_ready_summary_present": true,
    "storyboard_ready_status": "pass",
    "storyboard_ready_issue_count": 0,
    "storyboard_ready_fail_count": 0,
    "storyboard_ready_warn_count": 0,
    "storyboard_ready_shot_count": 223,
    "storyboard_ready_episode_mapped_count": 223,
    "storyboard_ready_block_mapped_count": 223,
    "asset_suggestion_character_count": 37,
    "asset_suggestion_location_count": 24,
    "asset_suggestion_prop_count": 7,
    "asset_suggestion_voice_count": 37,
    "missing_visual_card_count": 0,
    "missing_visual_card_ratio": 0.0,
    "missing_voice_card_count": 0,
    "missing_voice_card_ratio": 0.0,
    "missing_asset_binding_count": 0,
    "missing_asset_binding_ratio": 0.0,
    "missing_identity_summary_count": 0,
    "missing_identity_summary_ratio": 0.0,
    "expected_min_upload_script_chars": 2000,
    "time_mode_distribution": {
      "mainline": 32,
      "rumor": 6,
      "flashback": 10,
      "insertion": 2,
      "dream": 7
    },
    "manual_review_present": false,
    "manual_review_event_count": 0,
    "manual_review_run_status": "unreviewed",
    "manual_review_episode_total": 0,
    "manual_review_episode_unreviewed_count": 0,
    "manual_review_episode_accepted_count": 0,
    "manual_review_episode_needs_rewrite_count": 0,
    "manual_review_episode_open_count": 0,
    "manual_review_block_total": 0,
    "manual_review_block_unreviewed_count": 0,
    "manual_review_block_accepted_count": 0,
    "manual_review_block_needs_rewrite_count": 0,
    "manual_review_block_open_count": 0,
    "manual_review_continuity_issue_count": 0,
    "manual_review_summary_tone_count": 0,
    "manual_review_weak_dialogue_count": 0,
    "manual_review_bad_episode_boundary_count": 0,
    "writing_strategy_status": "pass",
    "writing_strategy_checked_block_count": 57,
    "subject_anchor_gap_count": 0,
    "dialogue_attribution_gap_count": 0,
    "location_anchor_gap_count": 0,
    "action_anchor_gap_count": 5,
    "abstract_prose_risk_count": 0,
    "writing_strategy_next_fix_focus": [
      "retain_action_anchor"
    ]
  },
  "checks": [
    {
      "id": "artifacts.adaptation",
      "stage": "screenplay_gate",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "adaptation artifact is present",
      "actual": "outputs/xiyouji_now11_s1_step1_closeout_live_v3/03c_adaptation.json",
      "expected": "existing file path"
    },
    {
      "id": "artifacts.screenplay",
      "stage": "screenplay_gate",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "screenplay artifact is present",
      "actual": "outputs/xiyouji_now11_s1_step1_closeout_live_v3/03d_screenplay.json",
      "expected": "existing file path"
    },
    {
      "id": "artifacts.dramart_package",
      "stage": "screenplay_gate",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "dramart_package artifact is present",
      "actual": "outputs/xiyouji_now11_s1_step1_closeout_live_v3/03e_dramart_package.json",
      "expected": "existing file path"
    },
    {
      "id": "structure.adaptation_items",
      "stage": "adaptation",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "adaptation items are present",
      "actual": 68,
      "expected": ">= 1"
    },
    {
      "id": "structure.episodes",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "screenplay episodes are present",
      "actual": 9,
      "expected": ">= 1"
    },
    {
      "id": "structure.blocks",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "screenplay blocks are present",
      "actual": 57,
      "expected": ">= 1"
    },
    {
      "id": "structure.character_bios",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart character bios are present",
      "actual": 37,
      "expected": ">= 1"
    },
    {
      "id": "structure.episode_summaries",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart episode summaries are present",
      "actual": 9,
      "expected": ">= 1"
    },
    {
      "id": "structure.upload_bundle",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart upload bundle is present",
      "actual": true,
      "expected": true
    },
    {
      "id": "structure.upload_ready_summary",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart upload-ready summary is present",
      "actual": true,
      "expected": true
    },
    {
      "id": "structure.asset_ready_summary",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart asset-ready summary is present",
      "actual": true,
      "expected": true
    },
    {
      "id": "structure.storyboard_ready_summary",
      "stage": "storyboard",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart storyboard-ready summary is present",
      "actual": true,
      "expected": true
    },
    {
      "id": "contract.content_policy_version",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "dramart package content-policy version is present",
      "actual": "dramart_package_scope.v1",
      "expected": {
        "content_policy_version": "non-empty string"
      }
    },
    {
      "id": "contract.content_policy_roles",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "dramart package content-policy roles are valid",
      "actual": true,
      "expected": {
        "required_roles": [
          "asset_suggestion_layer",
          "export_layer",
          "risk_reveal_layer"
        ]
      }
    },
    {
      "id": "contract.content_policy_source_of_truth",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "dramart package source-of-truth map is present",
      "actual": true,
      "expected": {
        "required_keys": [
          "asset_bindings",
          "entity_registry",
          "screenplay",
          "visual_cards",
          "voice_cards"
        ]
      }
    },
    {
      "id": "contract.episode_summary_source_ref_missing_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_episode_summary_source_ref_missing_count": 0
      }
    },
    {
      "id": "contract.episode_summary_source_ref_invalid_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_episode_summary_source_ref_invalid_count": 0
      }
    },
    {
      "id": "contract.upload_episode_source_ref_missing_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_upload_episode_source_ref_missing_count": 0
      }
    },
    {
      "id": "contract.upload_episode_source_ref_invalid_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_upload_episode_source_ref_invalid_count": 0
      }
    },
    {
      "id": "contract.upload_part_source_ref_missing_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_upload_part_source_ref_missing_count": 0
      }
    },
    {
      "id": "contract.upload_part_source_ref_invalid_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_upload_part_source_ref_invalid_count": 0
      }
    },
    {
      "id": "contract.asset_missing_init_action_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_asset_missing_init_action_count": 0
      }
    },
    {
      "id": "contract.asset_invalid_init_action_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_asset_invalid_init_action_count": 0
      }
    },
    {
      "id": "contract.asset_missing_risk_summary_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_asset_missing_risk_summary_count": 0
      }
    },
    {
      "id": "contract.asset_missing_source_ref_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_asset_missing_source_ref_count": 0
      }
    },
    {
      "id": "contract.asset_invalid_source_ref_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "contract field stays valid",
      "actual": 0,
      "expected": {
        "max_asset_invalid_source_ref_count": 0
      }
    },
    {
      "id": "contract.upload_bundle_source_ref_present",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "dramart upload bundle source_ref is present",
      "actual": true,
      "expected": true
    },
    {
      "id": "contract.upload_bundle_source_ref_valid",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "dramart upload bundle source_ref is valid",
      "actual": true,
      "expected": true
    },
    {
      "id": "contract.package_risk_summary_present",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "contract_regression",
      "track_view": "delivery",
      "message": "dramart package risk_summary is present",
      "actual": true,
      "expected": true
    },
    {
      "id": "structure.episode_sources",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "missing episode source refs stay within threshold",
      "actual": 0,
      "expected": {
        "max_missing_episode_source_ref_count": 0
      }
    },
    {
      "id": "structure.block_sources",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "missing block source refs stay within threshold",
      "actual": 0,
      "expected": {
        "max_missing_block_source_ref_count": 0
      }
    },
    {
      "id": "structure.block_group_sources",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "missing block group refs stay within threshold",
      "actual": 0,
      "expected": {
        "max_missing_block_group_ref_count": 0
      }
    },
    {
      "id": "structure.block_beat_sources",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "missing block beat refs stay within threshold",
      "actual": 0,
      "expected": {
        "max_missing_block_beat_ref_count": 0
      }
    },
    {
      "id": "structure.time_modes",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "missing time modes stay within threshold",
      "actual": 0,
      "expected": {
        "max_missing_time_mode_count": 0
      }
    },
    {
      "id": "structure.empty_block_text",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "structure_regression",
      "track_view": "delivery",
      "message": "empty block text count stays within threshold",
      "actual": 0,
      "expected": {
        "max_empty_block_text_count": 0
      }
    },
    {
      "id": "text_quality.short_block_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "short block ratio stays within threshold",
      "actual": 0.035088,
      "expected": {
        "max_short_block_ratio": 0.2
      }
    },
    {
      "id": "text_quality.summary_like_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "summary-like block ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_summary_like_block_ratio": 0.15
      }
    },
    {
      "id": "text_quality.dialogue_sparse_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "dialogue-sparse block ratio stays within threshold",
      "actual": 0.175439,
      "expected": {
        "max_dialogue_sparse_block_ratio": 0.35
      }
    },
    {
      "id": "text_quality.narration_overload_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "narration-overload block ratio stays within threshold",
      "actual": 0.017544,
      "expected": {
        "max_narration_overload_block_ratio": 0.35
      }
    },
    {
      "id": "text_quality.chronicle_tone_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "chronicle-tone block ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_chronicle_tone_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.summary_tone_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "summary-tone block ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_summary_tone_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.weak_performable_tension_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "weak performable tension ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_weak_performable_tension_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.delayed_scene_entry_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "delayed scene entry ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_delayed_scene_entry_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.event_bundle_summary_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "event bundle summary ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_event_bundle_summary_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.excerpt_summary_lead_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "excerpt-summary lead ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_excerpt_summary_lead_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.fallback_placeholder_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "fallback-placeholder block ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_fallback_placeholder_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.template_leak_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "template-leak block ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_template_leak_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.title_card_meta_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "title-card meta block ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_title_card_meta_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.expository_voiceover_lead_ratio",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "expository voiceover lead ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_expository_voiceover_lead_block_ratio": 0.0
      }
    },
    {
      "id": "text_quality.subject_anchor_gap_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "subject anchor gap count stays within threshold",
      "actual": 0,
      "expected": {
        "max_subject_anchor_gap_count": 0
      }
    },
    {
      "id": "text_quality.dialogue_attribution_gap_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "error",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "dialogue attribution gap count stays within threshold",
      "actual": 0,
      "expected": {
        "max_dialogue_attribution_gap_count": 0
      }
    },
    {
      "id": "text_quality.location_anchor_gap_count",
      "stage": "screenplay",
      "status": "pass",
      "severity": "warn",
      "failure_type": "text_quality_regression",
      "track_view": "delivery",
      "message": "location anchor gap count stays within threshold",
      "actual": 0,
      "expected": {
        "max_location_anchor_gap_count": 0
      }
    },
    {
      "id": "dramart.upload_script_chars",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart upload script length meets minimum threshold",
      "actual": 30641,
      "expected": {
        "min_upload_script_chars": 2000
      }
    },
    {
      "id": "dramart.upload_ready_status",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart upload-ready status is pass",
      "actual": "pass",
      "expected": {
        "status": "pass"
      }
    },
    {
      "id": "dramart.upload_ready_fail_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart upload-ready fail count stays at zero",
      "actual": 0,
      "expected": {
        "max_upload_ready_fail_count": 0
      }
    },
    {
      "id": "dramart.upload_ready_warn_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart upload-ready warn count stays at zero",
      "actual": 0,
      "expected": {
        "max_upload_ready_warn_count": 0
      }
    },
    {
      "id": "dramart.asset_ready_status",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart asset-ready status is pass",
      "actual": "pass",
      "expected": {
        "status": "pass"
      }
    },
    {
      "id": "dramart.asset_ready_fail_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "error",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart asset-ready fail count stays at zero",
      "actual": 0,
      "expected": {
        "max_asset_ready_fail_count": 0
      }
    },
    {
      "id": "dramart.asset_ready_warn_count",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart asset-ready warn count stays at zero",
      "actual": 0,
      "expected": {
        "max_asset_ready_warn_count": 0
      }
    },
    {
      "id": "dramart.storyboard_ready_status",
      "stage": "storyboard",
      "status": "pass",
      "severity": "error",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart storyboard-ready status is pass",
      "actual": "pass",
      "expected": {
        "status": "pass"
      }
    },
    {
      "id": "dramart.storyboard_ready_fail_count",
      "stage": "storyboard",
      "status": "pass",
      "severity": "error",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart storyboard-ready fail count stays at zero",
      "actual": 0,
      "expected": {
        "max_storyboard_ready_fail_count": 0
      }
    },
    {
      "id": "dramart.storyboard_ready_warn_count",
      "stage": "storyboard",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "dramart storyboard-ready warn count stays at zero",
      "actual": 0,
      "expected": {
        "max_storyboard_ready_warn_count": 0
      }
    },
    {
      "id": "dramart.missing_character_bio_ratio",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "missing character bio ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_missing_character_bio_ratio": 0.05
      }
    },
    {
      "id": "dramart.missing_visual_card_ratio",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "missing visual card ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_missing_visual_card_ratio": 0.05
      }
    },
    {
      "id": "dramart.missing_voice_card_ratio",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "missing voice card ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_missing_voice_card_ratio": 0.05
      }
    },
    {
      "id": "dramart.missing_asset_binding_ratio",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "missing asset binding ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_missing_asset_binding_ratio": 0.05
      }
    },
    {
      "id": "dramart.missing_identity_summary_ratio",
      "stage": "dramart_package",
      "status": "pass",
      "severity": "warn",
      "failure_type": "platform_readiness_regression",
      "track_view": "delivery",
      "message": "missing identity summary ratio stays within threshold",
      "actual": 0.0,
      "expected": {
        "max_missing_identity_summary_ratio": 0.05
      }
    }
  ],
  "summary": {
    "check_count": 67,
    "failure_count": 0,
    "warning_count": 0,
    "delivery_failure_count": 0,
    "delivery_warning_count": 0,
    "baseline_failure_count": 0,
    "baseline_warning_count": 0,
    "failure_type_counts": {
      "delivery": {},
      "baseline": {}
    }
  },
  "top_issues": [],
  "recommendations": [],
  "status": "pass",
  "broad_status": "pass",
  "failure_buckets": {
    "delivery": {},
    "baseline": {}
  }
}