{
  "run_id": "20260402T181811723622Z",
  "generated_at": "2026-04-06T10:16:24.251513Z",
  "stages": [
    {
      "ts_start": "2026-04-02T18:18:20.457395Z",
      "ts_end": "2026-04-02T18:18:20.497207Z",
      "duration_sec": 0.04,
      "stage": "chunks",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Ingestion & Chunking Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/input/西游记前十回.txt",
          "kind": "novel_text"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01_chunks.json",
          "kind": "chunks"
        }
      ],
      "metrics": {
        "chunks": 14,
        "max_chars": 5000,
        "limit_chunks": null,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:18:20.515810Z",
      "ts_end": "2026-04-02T18:18:20.668207Z",
      "duration_sec": 0.152,
      "stage": "ontology",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Ontology & Taxonomy Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01_chunks.json",
          "kind": "chunks"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01b_ontology_samples.json",
          "kind": "ontology_samples"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01c_ontology_candidates.json",
          "kind": "ontology_candidates"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01d_ontology.json",
          "kind": "ontology_doc"
        }
      ],
      "metrics": {
        "samples": 14,
        "candidate_entity_types": 7,
        "candidate_relation_types": 6,
        "taxonomy_entity_types": 12,
        "taxonomy_relations": 6,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:18:20.688294Z",
      "ts_end": "2026-04-02T18:28:03.660951Z",
      "duration_sec": 582.973,
      "stage": "kg",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Knowledge Graph Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01_chunks.json",
          "kind": "chunks"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01d_ontology.json",
          "kind": "ontology_doc"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02_kg.json",
          "kind": "kg_summary"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02_kg_store.json",
          "kind": "kg_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02_kg_observations.jsonl",
          "kind": "kg_observations"
        }
      ],
      "metrics": {
        "entities": 98,
        "relations": 118,
        "observations": 295,
        "ambiguous_entity_forks": 3,
        "chunks": 14,
        "ontology_loaded": true,
        "high_density_chunks": 3,
        "supplement_chunks": 3,
        "max_entity_limit": 14,
        "max_relation_limit": 14,
        "kg_window_size": 3,
        "kg_window_concurrency": 3,
        "kg_warmup_chunks": 1,
        "kg_window_batches": 4,
        "kg_parallel_chunks": 12,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:28:03.688325Z",
      "ts_end": "2026-04-02T18:28:03.990894Z",
      "duration_sec": 0.303,
      "stage": "closure_fix",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Contextual Closure & Cleanup Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02_kg_store.json",
          "kind": "kg_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02_kg_observations.jsonl",
          "kind": "kg_observations"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02a_kg_closure.json",
          "kind": "kg_summary_closure"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02a_kg_store_closure.json",
          "kind": "kg_store_closure"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02a_kg_closure_decisions.json",
          "kind": "kg_closure_decisions"
        }
      ],
      "metrics": {
        "entities": 97,
        "relations": 117,
        "closure_decision_count": 1,
        "closure_drop_count": 1,
        "closure_merge_count": 0,
        "stub_cleanup_dropped_entities": 1,
        "stub_cleanup_dropped_relations": 1,
        "stub_cleanup_merged_duplicate_entities": 0,
        "stub_cleanup_merged_same_name_entities": 0,
        "stub_cleanup_merged_duplicate_relations": 0,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:28:04.023299Z",
      "ts_end": "2026-04-02T18:28:04.175534Z",
      "duration_sec": 0.152,
      "stage": "type_consolidation",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Ontology & Taxonomy Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02a_kg_store_closure.json",
          "kind": "kg_store_closure"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01d_ontology.json",
          "kind": "ontology_doc"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02b_type_candidates.json",
          "kind": "type_candidates"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02c_type_consolidation.json",
          "kind": "type_consolidation"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02d_kg_store_consolidated.json",
          "kind": "kg_store_consolidated"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02d_kg_consolidated.json",
          "kind": "kg_summary_consolidated"
        }
      ],
      "metrics": {
        "candidates": 66,
        "apply_type_count": 5,
        "apply_subtype_count": 14,
        "review_type_count": 1,
        "review_subtype_count": 23,
        "other_before": 15,
        "other_after": 10,
        "ontology_loaded": true,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:28:04.214039Z",
      "ts_end": "2026-04-02T18:28:04.291630Z",
      "duration_sec": 0.078,
      "stage": "kg_lite",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Knowledge Graph Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02d_kg_consolidated.json",
          "kind": "kg_summary_consolidated"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02d_kg_store_consolidated.json",
          "kind": "kg_store_consolidated"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02i_kg_lite.json",
          "kind": "kg_lite"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02i_kg_lite_store.json",
          "kind": "kg_lite_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02i_kg_lite_decisions.json",
          "kind": "kg_lite_decisions"
        }
      ],
      "metrics": {
        "input_entities": 97,
        "input_relations": 117,
        "kept_entities": 87,
        "kept_relations": 107,
        "dropped_entities": 10,
        "dropped_relations": 10,
        "identity_conflict_groups": 0,
        "identity_conflict_entities": 0,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:28:04.319262Z",
      "ts_end": "2026-04-02T18:28:04.433031Z",
      "duration_sec": 0.114,
      "stage": "entity_registry",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Entity Registry & Asset Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02i_kg_lite_store.json",
          "kind": "kg_lite_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02i_kg_lite.json",
          "kind": "kg_lite"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02g_entity_voice_cards.json",
          "kind": "entity_voice_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02h_entity_assets.json",
          "kind": "entity_assets"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/entity_registry/20260402T181811723622Z__02e_entity_registry.json",
          "kind": "entity_registry_snapshot"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/entity_registry/20260402T181811723622Z__02f_entity_visual_cards.json",
          "kind": "entity_visual_cards_snapshot"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/entity_registry/20260402T181811723622Z__02g_entity_voice_cards.json",
          "kind": "entity_voice_cards_snapshot"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/entity_registry/20260402T181811723622Z__02h_entity_assets.json",
          "kind": "entity_assets_snapshot"
        }
      ],
      "metrics": {
        "entity_registry_entities": 87,
        "entity_visual_cards": 87,
        "entity_voice_cards": 38,
        "entity_asset_bindings": 87,
        "locked_count": 0,
        "needs_review_count": 5,
        "identity_conflict_entities": 0,
        "identity_conflict_groups": 0,
        "kg_context_layer": "kg_lite",
        "parallel_with_scenes": true,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:28:04.319356Z",
      "ts_end": "2026-04-02T18:30:40.638444Z",
      "duration_sec": 156.319,
      "stage": "scenes",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Scene Segmentation Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/01_chunks.json",
          "kind": "chunks"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02i_kg_lite_store.json",
          "kind": "kg_lite_store"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/scenes/20260402T181811723622Z__03_scenes.json",
          "kind": "scenes_snapshot"
        }
      ],
      "metrics": {
        "scenes": 68,
        "chunks": 14,
        "continued_scenes": 2,
        "scene_with_characters": 67,
        "scene_with_locations": 65,
        "kg_context_loaded": true,
        "kg_context_layer": "kg_lite",
        "scenes_concurrency": 3,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:30:40.681564Z",
      "ts_end": "2026-04-02T18:30:40.718886Z",
      "duration_sec": 0.037,
      "stage": "chronology",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Chronology & Narrative Time Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02i_kg_lite_store.json",
          "kind": "kg_lite_store"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03b_chronology.json",
          "kind": "chronology"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/chronology/20260402T181811723622Z__03b_chronology.json",
          "kind": "chronology_snapshot"
        }
      ],
      "metrics": {
        "scenes": 68,
        "chronology_groups": 49,
        "chronology_edges": 77,
        "chronology_conflicts": 0,
        "low_confidence_scenes": 0,
        "explicit_anchors": 46,
        "kg_context_layer": "kg_lite",
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:30:40.742255Z",
      "ts_end": "2026-04-02T18:36:40.992016Z",
      "duration_sec": 360.25,
      "stage": "adaptation",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Adaptation & Story Editor Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03b_chronology.json",
          "kind": "chronology"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02i_kg_lite.json",
          "kind": "kg_lite"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03c_adaptation.json",
          "kind": "adaptation"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/adaptation/20260402T181811723622Z__03c_adaptation.json",
          "kind": "adaptation_snapshot"
        }
      ],
      "metrics": {
        "scenes": 68,
        "retain_scenes": 57,
        "compress_scenes": 11,
        "bridge_scenes": 0,
        "retained_scene_groups": 55,
        "beat_count": 55,
        "drop_from_script_scenes": 11,
        "hard_merge_groups": 10,
        "kg_context_layer": "kg_lite",
        "adaptation_concurrency": 3,
        "resumed_items": 0,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:36:41.036811Z",
      "ts_end": "2026-04-02T18:40:38.799477Z",
      "duration_sec": 237.763,
      "stage": "screenplay",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Screenplay & Dramart Packaging Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03c_adaptation.json",
          "kind": "adaptation"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02e_entity_registry.json",
          "kind": "entity_registry"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03d_screenplay.json",
          "kind": "screenplay"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/screenplay/20260402T181811723622Z__03d_screenplay.json",
          "kind": "screenplay_snapshot"
        }
      ],
      "metrics": {
        "episodes": 9,
        "blocks": 50,
        "source_scene_refs": 57,
        "character_bindings": 98,
        "screenplay_concurrency": 3,
        "target_units_per_episode": 6,
        "resumed_items": 0,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:40:38.847703Z",
      "ts_end": "2026-04-02T18:40:39.140922Z",
      "duration_sec": 0.293,
      "stage": "dramart_package",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Screenplay & Dramart Packaging Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03d_screenplay.json",
          "kind": "screenplay"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02g_entity_voice_cards.json",
          "kind": "entity_voice_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02h_entity_assets.json",
          "kind": "entity_assets"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03e_dramart_package.json",
          "kind": "dramart_package"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/dramart_package/20260402T181811723622Z__03e_dramart_package.json",
          "kind": "dramart_package_snapshot"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03e_dramart_upload_script.md",
          "kind": "dramart_upload_script"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/03e_dramart_upload_script.md",
          "kind": "dramart_upload_script_snapshot"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/episodes",
          "kind": "dramart_upload_episode_dir"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/parts",
          "kind": "dramart_upload_part_dir"
        }
      ],
      "metrics": {
        "episodes": 9,
        "character_bios": 37,
        "location_assets": 24,
        "prop_assets": 11,
        "voice_suggestions": 37,
        "checklist_items": 116,
        "upload_script_chars": 50180,
        "upload_episode_files": 9,
        "upload_part_files": 1,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:40:39.232380Z",
      "ts_end": "2026-04-02T18:40:39.315025Z",
      "duration_sec": 0.083,
      "stage": "kg_deep",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Knowledge Graph Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02d_kg_consolidated.json",
          "kind": "kg_summary_consolidated"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02d_kg_store_consolidated.json",
          "kind": "kg_store_consolidated"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03c_adaptation.json",
          "kind": "adaptation"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02j_kg_deep.json",
          "kind": "kg_deep"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02j_kg_deep_store.json",
          "kind": "kg_deep_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02j_kg_deep_decisions.json",
          "kind": "kg_deep_decisions"
        }
      ],
      "metrics": {
        "input_entities": 97,
        "input_relations": 117,
        "kept_entities": 97,
        "kept_relations": 117,
        "scene_count": 68,
        "seed_entities": 62,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:40:39.343165Z",
      "ts_end": "2026-04-02T18:59:22.766196Z",
      "duration_sec": 1123.423,
      "stage": "script",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Script & Shot Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03b_chronology.json",
          "kind": "chronology"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/03c_adaptation.json",
          "kind": "adaptation"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02j_kg_deep.json",
          "kind": "kg_deep"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/04_scripts.json",
          "kind": "scripts"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/script/20260402T181811723622Z__04_scripts.json",
          "kind": "scripts_snapshot"
        }
      ],
      "metrics": {
        "scripts": 57,
        "shots": 223,
        "dialogue_lines": 387,
        "narration_shots": 72,
        "chronology_bound_scripts": 57,
        "chronology_non_mainline_scripts": 25,
        "chronology_reordered_scripts": 55,
        "adaptation_bound_scripts": 57,
        "script_source_scenes": 57,
        "script_skipped_by_adaptation": 11,
        "kg_context_layer": "kg_deep",
        "script_concurrency": 3,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-02T18:59:22.856408Z",
      "ts_end": "2026-04-02T18:59:22.858610Z",
      "duration_sec": 0.002,
      "stage": "style_bible",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Style Bible & Prompt QA Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/02h_entity_assets.json",
          "kind": "entity_assets"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/04_scripts.json",
          "kind": "scripts"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/04b_style_bible.json",
          "kind": "style_bible"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_first10_20260403_v3/logs/stage_artifacts/style_bible/20260402T181811723622Z__04b_style_bible.json",
          "kind": "style_bible_snapshot"
        }
      ],
      "metrics": {
        "fixed_positive_term_count": 9,
        "fixed_negative_term_count": 10,
        "provider_profile_count": 2,
        "manual_override_slot_count": 6,
        "reference_ready_entity_count": 0,
        "script_scene_count": 57,
        "script_shot_count": 223,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-04-06T10:15:13.366030Z",
      "ts_end": "2026-04-06T10:15:13.418921Z",
      "duration_sec": 0.053,
      "stage": "screenplay",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Screenplay & Dramart Packaging Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03c_adaptation.json",
          "kind": "adaptation"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03d_screenplay.json",
          "kind": "screenplay"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/screenplay/20260402T181811723622Z__03d_screenplay.json",
          "kind": "screenplay_snapshot"
        }
      ],
      "metrics": {
        "episodes": 9,
        "blocks": 50,
        "source_scene_refs": 57,
        "character_bindings": 77,
        "screenplay_concurrency": 1,
        "target_units_per_episode": 6,
        "resumed_items": 9,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:15:13.419218Z",
      "ts_end": "2026-04-06T10:15:13.605047Z",
      "duration_sec": 0.186,
      "stage": "dramart_package",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Screenplay & Dramart Packaging Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03d_screenplay.json",
          "kind": "screenplay"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02g_entity_voice_cards.json",
          "kind": "entity_voice_cards"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02h_entity_assets.json",
          "kind": "entity_assets"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03e_dramart_package.json",
          "kind": "dramart_package"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/dramart_package/20260402T181811723622Z__03e_dramart_package.json",
          "kind": "dramart_package_snapshot"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03e_dramart_upload_script.md",
          "kind": "dramart_upload_script"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/03e_dramart_upload_script.md",
          "kind": "dramart_upload_script_snapshot"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/episodes",
          "kind": "dramart_upload_episode_dir"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/parts",
          "kind": "dramart_upload_part_dir"
        }
      ],
      "metrics": {
        "episodes": 9,
        "character_bios": 37,
        "location_assets": 24,
        "prop_assets": 8,
        "voice_suggestions": 37,
        "checklist_items": 110,
        "upload_script_chars": 27417,
        "upload_episode_files": 9,
        "upload_part_files": 1,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:15:13.605300Z",
      "ts_end": "2026-04-06T10:15:13.621392Z",
      "duration_sec": 0.016,
      "stage": "kg_deep",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Knowledge Graph Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02d_kg_consolidated.json",
          "kind": "kg_summary_consolidated"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02d_kg_store_consolidated.json",
          "kind": "kg_store_consolidated"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03c_adaptation.json",
          "kind": "adaptation"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02j_kg_deep.json",
          "kind": "kg_deep"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02j_kg_deep_store.json",
          "kind": "kg_deep_store"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02j_kg_deep_decisions.json",
          "kind": "kg_deep_decisions"
        }
      ],
      "metrics": {
        "input_entities": 97,
        "input_relations": 117,
        "kept_entities": 97,
        "kept_relations": 117,
        "scene_count": 68,
        "seed_entities": 62,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:16:23.109492Z",
      "ts_end": "2026-04-06T10:16:23.163291Z",
      "duration_sec": 0.054,
      "stage": "screenplay",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Screenplay & Dramart Packaging Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03c_adaptation.json",
          "kind": "adaptation"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03d_screenplay.json",
          "kind": "screenplay"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/screenplay/20260402T181811723622Z__03d_screenplay.json",
          "kind": "screenplay_snapshot"
        }
      ],
      "metrics": {
        "episodes": 9,
        "blocks": 50,
        "source_scene_refs": 57,
        "character_bindings": 77,
        "screenplay_concurrency": 1,
        "target_units_per_episode": 6,
        "resumed_items": 9,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:16:23.163518Z",
      "ts_end": "2026-04-06T10:16:23.349068Z",
      "duration_sec": 0.186,
      "stage": "dramart_package",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Screenplay & Dramart Packaging Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03d_screenplay.json",
          "kind": "screenplay"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02g_entity_voice_cards.json",
          "kind": "entity_voice_cards"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02h_entity_assets.json",
          "kind": "entity_assets"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03e_dramart_package.json",
          "kind": "dramart_package"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/dramart_package/20260402T181811723622Z__03e_dramart_package.json",
          "kind": "dramart_package_snapshot"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03e_dramart_upload_script.md",
          "kind": "dramart_upload_script"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/03e_dramart_upload_script.md",
          "kind": "dramart_upload_script_snapshot"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/episodes",
          "kind": "dramart_upload_episode_dir"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260402T181811723622Z/parts",
          "kind": "dramart_upload_part_dir"
        }
      ],
      "metrics": {
        "episodes": 9,
        "character_bios": 37,
        "location_assets": 24,
        "prop_assets": 8,
        "voice_suggestions": 37,
        "checklist_items": 110,
        "upload_script_chars": 27417,
        "upload_episode_files": 9,
        "upload_part_files": 1,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:16:23.349326Z",
      "ts_end": "2026-04-06T10:16:23.364779Z",
      "duration_sec": 0.015,
      "stage": "kg_deep",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Knowledge Graph Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02d_kg_consolidated.json",
          "kind": "kg_summary_consolidated"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02d_kg_store_consolidated.json",
          "kind": "kg_store_consolidated"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03c_adaptation.json",
          "kind": "adaptation"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02j_kg_deep.json",
          "kind": "kg_deep"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02j_kg_deep_store.json",
          "kind": "kg_deep_store"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02j_kg_deep_decisions.json",
          "kind": "kg_deep_decisions"
        }
      ],
      "metrics": {
        "input_entities": 97,
        "input_relations": 117,
        "kept_entities": 97,
        "kept_relations": 117,
        "scene_count": 68,
        "seed_entities": 62,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:16:23.364944Z",
      "ts_end": "2026-04-06T10:16:23.478539Z",
      "duration_sec": 0.114,
      "stage": "script",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Script & Shot Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03b_chronology.json",
          "kind": "chronology"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03c_adaptation.json",
          "kind": "adaptation"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02j_kg_deep.json",
          "kind": "kg_deep"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/04_scripts.json",
          "kind": "scripts"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/script/20260402T181811723622Z__04_scripts.json",
          "kind": "scripts_snapshot"
        }
      ],
      "metrics": {
        "scripts": 57,
        "shots": 223,
        "dialogue_lines": 387,
        "narration_shots": 72,
        "chronology_bound_scripts": 57,
        "chronology_non_mainline_scripts": 25,
        "chronology_reordered_scripts": 55,
        "adaptation_bound_scripts": 57,
        "script_source_scenes": 57,
        "script_skipped_by_adaptation": 11,
        "kg_context_layer": "kg_deep",
        "script_concurrency": 1,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:16:23.478800Z",
      "ts_end": "2026-04-06T10:16:23.479734Z",
      "duration_sec": 0.001,
      "stage": "style_bible",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Style Bible & Prompt QA Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02h_entity_assets.json",
          "kind": "entity_assets"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/04_scripts.json",
          "kind": "scripts"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/04b_style_bible.json",
          "kind": "style_bible"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/style_bible/20260402T181811723622Z__04b_style_bible.json",
          "kind": "style_bible_snapshot"
        }
      ],
      "metrics": {
        "fixed_positive_term_count": 9,
        "fixed_negative_term_count": 10,
        "provider_profile_count": 2,
        "manual_override_slot_count": 6,
        "reference_ready_entity_count": 0,
        "script_scene_count": 57,
        "script_shot_count": 223,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:16:23.479876Z",
      "ts_end": "2026-04-06T10:16:24.201614Z",
      "duration_sec": 0.722,
      "stage": "storyboard",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Storyboard & Prompt Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/04_scripts.json",
          "kind": "scripts"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/03b_chronology.json",
          "kind": "chronology"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/02h_entity_assets.json",
          "kind": "entity_assets"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/04b_style_bible.json",
          "kind": "style_bible"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/05_storyboard.json",
          "kind": "storyboard"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/05c_dramart_storyboard.json",
          "kind": "dramart_storyboard"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/storyboard/20260402T181811723622Z__05_storyboard.json",
          "kind": "storyboards_snapshot"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/storyboard/20260402T181811723622Z__05c_dramart_storyboard.json",
          "kind": "dramart_storyboard_snapshot"
        }
      ],
      "metrics": {
        "storyboards": 223,
        "duration_seconds": 1132.1,
        "non_mainline_storyboards": 98,
        "visual_noted_storyboards": 223,
        "style_locked_storyboards": 223,
        "dynamic_content_storyboards": 223,
        "bound_entity_uids": 67,
        "bound_visual_card_ids": 67,
        "bound_asset_binding_ids": 67,
        "storyboard_ready_status": "pass",
        "storyboard_ready_pass_count": 223,
        "storyboard_ready_warn_count": 0,
        "storyboard_ready_fail_count": 0,
        "storyboard_ready_issue_count": 0,
        "storyboard_ready_episode_mapped_count": 223,
        "storyboard_ready_block_mapped_count": 223,
        "storyboard_ready_reference_media_count": 222,
        "storyboard_ready_voice_count": 223,
        "top_shot_roles": {
          "character": 57,
          "dialogue_or_action": 57,
          "opening": 57,
          "closing": 52
        },
        "top_characters": {
          "石猴": 106,
          "阿傩": 37,
          "孙悟空": 32,
          "众猴": 29,
          "哪吒三太子": 23,
          "唐太宗": 23,
          "泾河龙王": 23,
          "玉皇大天尊": 22
        },
        "storyboard_concurrency": 1,
        "resumed": true
      }
    },
    {
      "ts_start": "2026-04-06T10:16:24.201874Z",
      "ts_end": "2026-04-06T10:16:24.246333Z",
      "duration_sec": 0.044,
      "stage": "prompt_guard",
      "status": "ok",
      "run_id": "20260402T181811723622Z",
      "agent": "Style Bible & Prompt QA Agent",
      "inputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/05_storyboard.json",
          "kind": "storyboard"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/04b_style_bible.json",
          "kind": "style_bible"
        }
      ],
      "outputs": [
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/05b_storyboard_guard.json",
          "kind": "prompt_guard"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/prompt_guard/20260402T181811723622Z__05b_storyboard_guard.json",
          "kind": "prompt_guard_snapshot"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/05d_delivery_repair_contract.json",
          "kind": "delivery_repair_contract"
        },
        {
          "path": "outputs/xiyouji_first10_now11_scriptfocus_20260406_v1/logs/stage_artifacts/prompt_guard/20260402T181811723622Z__05d_delivery_repair_contract.json",
          "kind": "delivery_repair_contract_snapshot"
        }
      ],
      "metrics": {
        "shot_count": 223,
        "pass_shot_count": 223,
        "warning_shot_count": 0,
        "fail_shot_count": 0,
        "issue_count": 0,
        "error_issue_count": 0,
        "warning_issue_count": 0,
        "english_issue_count": 0,
        "style_pollution_issue_count": 0,
        "missing_block_issue_count": 0,
        "length_drift_issue_count": 0,
        "delivery_repair_candidate_count": 20,
        "delivery_repair_action_count": 20,
        "delivery_repair_owner_stage_count": 1,
        "parallel_with_timeline": false,
        "resumed": true
      }
    }
  ],
  "stage_items": {
    "total": 183,
    "ok": 183,
    "partial": 0,
    "error": 0
  },
  "llm_calls": {
    "total": 186,
    "ok": 186,
    "error": 0
  },
  "run_errors": 0
}