{
  "run_id": "20260331T034748647652Z",
  "generated_at": "2026-03-31T04:20:37.622645Z",
  "stages": [
    {
      "ts_start": "2026-03-31T03:47:54.752994Z",
      "ts_end": "2026-03-31T03:47:54.792311Z",
      "duration_sec": 0.039,
      "stage": "chunks",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Ingestion & Chunking Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/_derived_inputs/xiyouji_pg23962_ch1_4.txt",
          "kind": "novel_text"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01_chunks.json",
          "kind": "chunks"
        }
      ],
      "metrics": {
        "chunks": 12,
        "max_chars": 2200,
        "limit_chunks": 12,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T03:47:54.811104Z",
      "ts_end": "2026-03-31T03:47:54.955786Z",
      "duration_sec": 0.145,
      "stage": "ontology",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Ontology & Taxonomy Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01_chunks.json",
          "kind": "chunks"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01b_ontology_samples.json",
          "kind": "ontology_samples"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01c_ontology_candidates.json",
          "kind": "ontology_candidates"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01d_ontology.json",
          "kind": "ontology_doc"
        }
      ],
      "metrics": {
        "samples": 12,
        "candidate_entity_types": 5,
        "candidate_relation_types": 5,
        "taxonomy_entity_types": 12,
        "taxonomy_relations": 5,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T03:47:54.977567Z",
      "ts_end": "2026-03-31T04:04:40.480012Z",
      "duration_sec": 1005.502,
      "stage": "kg",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Knowledge Graph Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01_chunks.json",
          "kind": "chunks"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01d_ontology.json",
          "kind": "ontology_doc"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02_kg.json",
          "kind": "kg_summary"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02_kg_store.json",
          "kind": "kg_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02_kg_observations.jsonl",
          "kind": "kg_observations"
        }
      ],
      "metrics": {
        "entities": 97,
        "relations": 97,
        "observations": 316,
        "ambiguous_entity_forks": 5,
        "chunks": 12,
        "ontology_loaded": true,
        "high_density_chunks": 12,
        "supplement_chunks": 7,
        "max_entity_limit": 14,
        "max_relation_limit": 14,
        "kg_window_size": 1,
        "kg_window_concurrency": 1,
        "kg_warmup_chunks": 12,
        "kg_window_batches": 0,
        "kg_parallel_chunks": 0,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:04:40.522567Z",
      "ts_end": "2026-03-31T04:04:40.875371Z",
      "duration_sec": 0.353,
      "stage": "closure_fix",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Contextual Closure & Cleanup Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02_kg_store.json",
          "kind": "kg_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02_kg_observations.jsonl",
          "kind": "kg_observations"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02a_kg_closure.json",
          "kind": "kg_summary_closure"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02a_kg_store_closure.json",
          "kind": "kg_store_closure"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02a_kg_closure_decisions.json",
          "kind": "kg_closure_decisions"
        }
      ],
      "metrics": {
        "entities": 96,
        "relations": 96,
        "closure_decision_count": 0,
        "closure_drop_count": 0,
        "closure_merge_count": 0,
        "stub_cleanup_dropped_entities": 0,
        "stub_cleanup_dropped_relations": 0,
        "stub_cleanup_merged_duplicate_entities": 0,
        "stub_cleanup_merged_same_name_entities": 1,
        "stub_cleanup_merged_duplicate_relations": 1,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:04:40.903374Z",
      "ts_end": "2026-03-31T04:04:41.032574Z",
      "duration_sec": 0.129,
      "stage": "type_consolidation",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Ontology & Taxonomy Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02a_kg_store_closure.json",
          "kind": "kg_store_closure"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01d_ontology.json",
          "kind": "ontology_doc"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02b_type_candidates.json",
          "kind": "type_candidates"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02c_type_consolidation.json",
          "kind": "type_consolidation"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02d_kg_store_consolidated.json",
          "kind": "kg_store_consolidated"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02d_kg_consolidated.json",
          "kind": "kg_summary_consolidated"
        }
      ],
      "metrics": {
        "candidates": 61,
        "apply_type_count": 1,
        "apply_subtype_count": 15,
        "review_type_count": 2,
        "review_subtype_count": 25,
        "other_before": 8,
        "other_after": 7,
        "ontology_loaded": true,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:04:41.064682Z",
      "ts_end": "2026-03-31T04:04:41.135554Z",
      "duration_sec": 0.071,
      "stage": "kg_lite",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Knowledge Graph Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02d_kg_consolidated.json",
          "kind": "kg_summary_consolidated"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02d_kg_store_consolidated.json",
          "kind": "kg_store_consolidated"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02i_kg_lite.json",
          "kind": "kg_lite"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02i_kg_lite_store.json",
          "kind": "kg_lite_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02i_kg_lite_decisions.json",
          "kind": "kg_lite_decisions"
        }
      ],
      "metrics": {
        "input_entities": 96,
        "input_relations": 96,
        "kept_entities": 89,
        "kept_relations": 89,
        "dropped_entities": 7,
        "dropped_relations": 7,
        "identity_conflict_groups": 2,
        "identity_conflict_entities": 4,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:04:41.182046Z",
      "ts_end": "2026-03-31T04:04:41.261413Z",
      "duration_sec": 0.079,
      "stage": "entity_registry",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Entity Registry & Asset Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02i_kg_lite_store.json",
          "kind": "kg_lite_store"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02i_kg_lite.json",
          "kind": "kg_lite"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02g_entity_voice_cards.json",
          "kind": "entity_voice_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02h_entity_assets.json",
          "kind": "entity_assets"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/entity_registry/20260331T034748647652Z__02e_entity_registry.json",
          "kind": "entity_registry_snapshot"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/entity_registry/20260331T034748647652Z__02f_entity_visual_cards.json",
          "kind": "entity_visual_cards_snapshot"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/entity_registry/20260331T034748647652Z__02g_entity_voice_cards.json",
          "kind": "entity_voice_cards_snapshot"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/entity_registry/20260331T034748647652Z__02h_entity_assets.json",
          "kind": "entity_assets_snapshot"
        }
      ],
      "metrics": {
        "entity_registry_entities": 89,
        "entity_visual_cards": 89,
        "entity_voice_cards": 38,
        "entity_asset_bindings": 89,
        "locked_count": 0,
        "needs_review_count": 1,
        "identity_conflict_entities": 4,
        "identity_conflict_groups": 2,
        "kg_context_layer": "kg_lite",
        "parallel_with_scenes": true,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:04:41.182110Z",
      "ts_end": "2026-03-31T04:08:10.392511Z",
      "duration_sec": 209.21,
      "stage": "scenes",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Scene Segmentation Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/01_chunks.json",
          "kind": "chunks"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02i_kg_lite_store.json",
          "kind": "kg_lite_store"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/scenes/20260331T034748647652Z__03_scenes.json",
          "kind": "scenes_snapshot"
        }
      ],
      "metrics": {
        "scenes": 25,
        "chunks": 12,
        "continued_scenes": 0,
        "scene_with_characters": 24,
        "scene_with_locations": 25,
        "kg_context_loaded": true,
        "kg_context_layer": "kg_lite",
        "scenes_concurrency": 1,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:08:10.416173Z",
      "ts_end": "2026-03-31T04:08:10.428397Z",
      "duration_sec": 0.012,
      "stage": "chronology",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Chronology & Narrative Time Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02i_kg_lite_store.json",
          "kind": "kg_lite_store"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03b_chronology.json",
          "kind": "chronology"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/chronology/20260331T034748647652Z__03b_chronology.json",
          "kind": "chronology_snapshot"
        }
      ],
      "metrics": {
        "scenes": 25,
        "chronology_groups": 24,
        "chronology_edges": 25,
        "chronology_conflicts": 0,
        "low_confidence_scenes": 1,
        "explicit_anchors": 7,
        "kg_context_layer": "kg_lite",
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:08:10.446934Z",
      "ts_end": "2026-03-31T04:15:05.721316Z",
      "duration_sec": 415.274,
      "stage": "adaptation",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Adaptation & Story Editor Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03_scenes.json",
          "kind": "scenes"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03b_chronology.json",
          "kind": "chronology"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02i_kg_lite.json",
          "kind": "kg_lite"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03c_adaptation.json",
          "kind": "adaptation"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/adaptation/20260331T034748647652Z__03c_adaptation.json",
          "kind": "adaptation_snapshot"
        }
      ],
      "metrics": {
        "scenes": 25,
        "retain_scenes": 19,
        "compress_scenes": 4,
        "bridge_scenes": 2,
        "retained_scene_groups": 19,
        "beat_count": 19,
        "drop_from_script_scenes": 6,
        "hard_merge_groups": 5,
        "kg_context_layer": "kg_lite",
        "adaptation_concurrency": 1,
        "resumed_items": 0,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:15:05.746378Z",
      "ts_end": "2026-03-31T04:20:37.408165Z",
      "duration_sec": 331.662,
      "stage": "screenplay",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Screenplay & Dramart Packaging Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03c_adaptation.json",
          "kind": "adaptation"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03d_screenplay.json",
          "kind": "screenplay"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/screenplay/20260331T034748647652Z__03d_screenplay.json",
          "kind": "screenplay_snapshot"
        }
      ],
      "metrics": {
        "episodes": 3,
        "blocks": 19,
        "source_scene_refs": 19,
        "character_bindings": 28,
        "screenplay_concurrency": 1,
        "target_units_per_episode": 6,
        "resumed_items": 0,
        "resumed": false
      }
    },
    {
      "ts_start": "2026-03-31T04:20:37.436512Z",
      "ts_end": "2026-03-31T04:20:37.548663Z",
      "duration_sec": 0.112,
      "stage": "dramart_package",
      "status": "ok",
      "run_id": "20260331T034748647652Z",
      "agent": "Screenplay & Dramart Packaging Agent",
      "inputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03d_screenplay.json",
          "kind": "screenplay"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02e_entity_registry.json",
          "kind": "entity_registry"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02f_entity_visual_cards.json",
          "kind": "entity_visual_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02g_entity_voice_cards.json",
          "kind": "entity_voice_cards"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/02h_entity_assets.json",
          "kind": "entity_assets"
        }
      ],
      "outputs": [
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03e_dramart_package.json",
          "kind": "dramart_package"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/logs/stage_artifacts/dramart_package/20260331T034748647652Z__03e_dramart_package.json",
          "kind": "dramart_package_snapshot"
        },
        {
          "path": "/wwwb/aitools/writer/outputs/xiyouji_acceptance_smoke_20260331_v1/03e_dramart_upload_script.md",
          "kind": "dramart_upload_script"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260331T034748647652Z/03e_dramart_upload_script.md",
          "kind": "dramart_upload_script_snapshot"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260331T034748647652Z/episodes",
          "kind": "dramart_upload_episode_dir"
        },
        {
          "path": "logs/stage_artifacts/dramart_package_uploads/20260331T034748647652Z/parts",
          "kind": "dramart_upload_part_dir"
        }
      ],
      "metrics": {
        "episodes": 3,
        "character_bios": 23,
        "location_assets": 10,
        "prop_assets": 14,
        "voice_suggestions": 23,
        "checklist_items": 72,
        "upload_script_chars": 13806,
        "upload_episode_files": 3,
        "upload_part_files": 1,
        "resumed": false
      }
    }
  ],
  "stage_items": {
    "total": 52,
    "ok": 52,
    "partial": 0,
    "error": 0
  },
  "llm_calls": {
    "total": 59,
    "ok": 59,
    "error": 0
  },
  "run_errors": 0
}