{
  "version": "1.0",
  "generated_at": "2026-03-28T13:35:54.957974Z",
  "candidate": {
    "summary": {
      "run_dir": "daozu_kg_current_chain_30_20260328_v1",
      "run_id": "20260328T125822484685Z",
      "created_at": "2026-03-28T12:58:22.508753Z",
      "out_dir": "outputs/daozu_kg_current_chain_30_20260328_v1",
      "input_path": "/wwwb/aitools/writer/input/道祖是克苏鲁.txt",
      "input_sha256": "5c05796b90b9a1956f3fe767cd8288965db478acac5dbed44f64419f0fea185d",
      "provider": "deepseek",
      "video_provider": "doubao",
      "enable_video": false,
      "style_preset": "电影化叙事，细节清晰，角色形象一致，光照连续",
      "limits": {
        "max_chars": 1800,
        "limit_chunks": 30,
        "limit_scenes": null,
        "limit_shots": null
      },
      "status": "ok",
      "errors": 0,
      "counts": {
        "chunks": 30,
        "ontology_samples": 30,
        "ontology_candidate_entity_types": 7,
        "ontology_candidate_relation_types": 8,
        "ontology_entity_taxonomy": 13,
        "ontology_relation_taxonomy": 8,
        "observations": 664,
        "entities": 114,
        "relations": 156,
        "type_candidates": 80,
        "type_apply_type_count": 8,
        "type_apply_subtype_count": 24,
        "type_other_before": 9,
        "type_other_after": 1,
        "entity_registry_entities": 0,
        "entity_visual_cards": 0,
        "entity_voice_cards": 0,
        "entity_asset_bindings": 0,
        "scenes": 0,
        "chronology_scenes": 0,
        "chronology_groups": 0,
        "chronology_edges": 0,
        "chronology_conflicts": 0,
        "adaptation_scenes": 0,
        "adaptation_groups": 0,
        "adaptation_beats": 0,
        "adaptation_retain_scenes": 0,
        "adaptation_compress_scenes": 0,
        "adaptation_bridge_scenes": 0,
        "adaptation_drop_scenes": 0,
        "scripts": 0,
        "shots": 0,
        "style_fixed_positive_terms": 0,
        "style_fixed_negative_terms": 0,
        "style_provider_profiles": 0,
        "style_manual_override_slots": 0,
        "style_reference_ready_entities": 0,
        "storyboards": 0,
        "prompt_guard_shots": 0,
        "prompt_guard_pass_shots": 0,
        "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",
        "scripts": "04_scripts.json",
        "style_bible": "04b_style_bible.json",
        "storyboard": "05_storyboard.json",
        "prompt_guard": "05b_storyboard_guard.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"
      },
      "updated_at": "2026-03-28T13:35:54.943946Z",
      "run_uid": "20260328T125822484685Z",
      "run_key": "20260328T125822484685Z",
      "trace_scope": "live",
      "is_current_live": true,
      "archive_rel": "",
      "web_paths": {
        "run_root": "",
        "logs_dir": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/",
        "llm_dir": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/llm/",
        "manifest": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/run_manifest.json",
        "project": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/project.json",
        "report_html": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/run_report.html",
        "report_md": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/run_report.md",
        "metrics": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/run_metrics.json",
        "events": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/run_events.jsonl",
        "errors": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/run_errors.jsonl",
        "stage_timings": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/stage_timings.jsonl",
        "llm_calls": "/novel2video/runs/daozu_kg_current_chain_30_20260328_v1/logs/llm_calls.jsonl"
      }
    },
    "counts": {
      "chunks": 30,
      "ontology_samples": 30,
      "ontology_candidate_entity_types": 7,
      "ontology_candidate_relation_types": 8,
      "ontology_entity_taxonomy": 13,
      "ontology_relation_taxonomy": 8,
      "observations": 664,
      "entities": 114,
      "relations": 156,
      "type_candidates": 80,
      "type_apply_type_count": 8,
      "type_apply_subtype_count": 24,
      "type_other_before": 9,
      "type_other_after": 1,
      "entity_registry_entities": 0,
      "entity_visual_cards": 0,
      "entity_voice_cards": 0,
      "entity_asset_bindings": 0,
      "scenes": 0,
      "chronology_scenes": 0,
      "chronology_groups": 0,
      "chronology_edges": 0,
      "chronology_conflicts": 0,
      "adaptation_scenes": 0,
      "adaptation_groups": 0,
      "adaptation_beats": 0,
      "adaptation_retain_scenes": 0,
      "adaptation_compress_scenes": 0,
      "adaptation_bridge_scenes": 0,
      "adaptation_drop_scenes": 0,
      "scripts": 0,
      "shots": 0,
      "style_fixed_positive_terms": 0,
      "style_fixed_negative_terms": 0,
      "style_provider_profiles": 0,
      "style_manual_override_slots": 0,
      "style_reference_ready_entities": 0,
      "storyboards": 0,
      "prompt_guard_shots": 0,
      "prompt_guard_pass_shots": 0,
      "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,
      "llm_calls": 40,
      "run_errors": 0
    },
    "stage_rows": [
      {
        "ts_start": "2026-03-28T12:58:27.290633Z",
        "ts_end": "2026-03-28T12:58:28.122900Z",
        "duration_sec": 0.832,
        "stage": "chunks",
        "status": "ok",
        "run_id": "20260328T125822484685Z",
        "agent": "Ingestion & Chunking Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/input/道祖是克苏鲁.txt",
            "kind": "novel_text"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/01_chunks.json",
            "kind": "chunks"
          }
        ],
        "metrics": {
          "chunks": 30,
          "max_chars": 1800,
          "limit_chunks": 30,
          "resumed": false
        }
      },
      {
        "ts_start": "2026-03-28T12:58:28.141287Z",
        "ts_end": "2026-03-28T12:58:28.268680Z",
        "duration_sec": 0.127,
        "stage": "ontology",
        "status": "ok",
        "run_id": "20260328T125822484685Z",
        "agent": "Ontology & Taxonomy Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/01_chunks.json",
            "kind": "chunks"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/01b_ontology_samples.json",
            "kind": "ontology_samples"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/01c_ontology_candidates.json",
            "kind": "ontology_candidates"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/01d_ontology.json",
            "kind": "ontology_doc"
          }
        ],
        "metrics": {
          "samples": 30,
          "candidate_entity_types": 7,
          "candidate_relation_types": 8,
          "taxonomy_entity_types": 13,
          "taxonomy_relations": 8,
          "resumed": false
        }
      },
      {
        "ts_start": "2026-03-28T12:58:28.288608Z",
        "ts_end": "2026-03-28T13:31:57.335982Z",
        "duration_sec": 2009.047,
        "stage": "kg",
        "status": "ok",
        "run_id": "20260328T125822484685Z",
        "agent": "Knowledge Graph Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/01_chunks.json",
            "kind": "chunks"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/01d_ontology.json",
            "kind": "ontology_doc"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02_kg.json",
            "kind": "kg_summary"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02_kg_store.json",
            "kind": "kg_store"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02_kg_observations.jsonl",
            "kind": "kg_observations"
          }
        ],
        "metrics": {
          "entities": 114,
          "relations": 156,
          "observations": 664,
          "ambiguous_entity_forks": 9,
          "chunks": 30,
          "ontology_loaded": true,
          "high_density_chunks": 12,
          "supplement_chunks": 10,
          "max_entity_limit": 14,
          "max_relation_limit": 14,
          "kg_window_size": 1,
          "kg_window_concurrency": 1,
          "kg_warmup_chunks": 30,
          "kg_window_batches": 0,
          "kg_parallel_chunks": 0,
          "resumed": false
        }
      },
      {
        "ts_start": "2026-03-28T13:31:57.369574Z",
        "ts_end": "2026-03-28T13:31:57.705166Z",
        "duration_sec": 0.336,
        "stage": "closure_fix",
        "status": "ok",
        "run_id": "20260328T125822484685Z",
        "agent": "Contextual Closure & Cleanup Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02_kg_store.json",
            "kind": "kg_store"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02_kg_observations.jsonl",
            "kind": "kg_observations"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02a_kg_closure.json",
            "kind": "kg_summary_closure"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02a_kg_store_closure.json",
            "kind": "kg_store_closure"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02a_kg_closure_decisions.json",
            "kind": "kg_closure_decisions"
          }
        ],
        "metrics": {
          "entities": 112,
          "relations": 155,
          "closure_decision_count": 2,
          "closure_drop_count": 0,
          "closure_merge_count": 2,
          "stub_cleanup_dropped_entities": 0,
          "stub_cleanup_dropped_relations": 0,
          "stub_cleanup_merged_duplicate_entities": 0,
          "stub_cleanup_merged_same_name_entities": 0,
          "stub_cleanup_merged_duplicate_relations": 1,
          "resumed": false
        }
      },
      {
        "ts_start": "2026-03-28T13:31:57.736035Z",
        "ts_end": "2026-03-28T13:31:57.904607Z",
        "duration_sec": 0.169,
        "stage": "type_consolidation",
        "status": "ok",
        "run_id": "20260328T125822484685Z",
        "agent": "Ontology & Taxonomy Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02a_kg_store_closure.json",
            "kind": "kg_store_closure"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/01d_ontology.json",
            "kind": "ontology_doc"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02b_type_candidates.json",
            "kind": "type_candidates"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02c_type_consolidation.json",
            "kind": "type_consolidation"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02d_kg_store_consolidated.json",
            "kind": "kg_store_consolidated"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02d_kg_consolidated.json",
            "kind": "kg_summary_consolidated"
          }
        ],
        "metrics": {
          "candidates": 80,
          "apply_type_count": 8,
          "apply_subtype_count": 24,
          "review_type_count": 11,
          "review_subtype_count": 28,
          "other_before": 9,
          "other_after": 1,
          "ontology_loaded": true,
          "resumed": false
        }
      },
      {
        "ts_start": "2026-03-28T13:31:57.942860Z",
        "ts_end": "2026-03-28T13:31:58.045241Z",
        "duration_sec": 0.102,
        "stage": "kg_lite",
        "status": "ok",
        "run_id": "20260328T125822484685Z",
        "agent": "Knowledge Graph Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02d_kg_consolidated.json",
            "kind": "kg_summary_consolidated"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02d_kg_store_consolidated.json",
            "kind": "kg_store_consolidated"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02i_kg_lite.json",
            "kind": "kg_lite"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02i_kg_lite_store.json",
            "kind": "kg_lite_store"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_current_chain_30_20260328_v1/02i_kg_lite_decisions.json",
            "kind": "kg_lite_decisions"
          }
        ],
        "metrics": {
          "input_entities": 112,
          "input_relations": 155,
          "kept_entities": 111,
          "kept_relations": 154,
          "dropped_entities": 1,
          "dropped_relations": 1,
          "resumed": false
        }
      }
    ],
    "stage_metrics": {
      "chunks": {
        "status": "ok",
        "duration_sec": 0.832,
        "metrics": {
          "chunks": 30,
          "max_chars": 1800,
          "limit_chunks": 30,
          "resumed": false
        }
      },
      "ontology": {
        "status": "ok",
        "duration_sec": 0.127,
        "metrics": {
          "samples": 30,
          "candidate_entity_types": 7,
          "candidate_relation_types": 8,
          "taxonomy_entity_types": 13,
          "taxonomy_relations": 8,
          "resumed": false
        }
      },
      "kg": {
        "status": "ok",
        "duration_sec": 2009.047,
        "metrics": {
          "entities": 114,
          "relations": 156,
          "observations": 664,
          "ambiguous_entity_forks": 9,
          "chunks": 30,
          "ontology_loaded": true,
          "high_density_chunks": 12,
          "supplement_chunks": 10,
          "max_entity_limit": 14,
          "max_relation_limit": 14,
          "kg_window_size": 1,
          "kg_window_concurrency": 1,
          "kg_warmup_chunks": 30,
          "kg_window_batches": 0,
          "kg_parallel_chunks": 0,
          "resumed": false
        }
      },
      "closure_fix": {
        "status": "ok",
        "duration_sec": 0.336,
        "metrics": {
          "entities": 112,
          "relations": 155,
          "closure_decision_count": 2,
          "closure_drop_count": 0,
          "closure_merge_count": 2,
          "stub_cleanup_dropped_entities": 0,
          "stub_cleanup_dropped_relations": 0,
          "stub_cleanup_merged_duplicate_entities": 0,
          "stub_cleanup_merged_same_name_entities": 0,
          "stub_cleanup_merged_duplicate_relations": 1,
          "resumed": false
        }
      },
      "type_consolidation": {
        "status": "ok",
        "duration_sec": 0.169,
        "metrics": {
          "candidates": 80,
          "apply_type_count": 8,
          "apply_subtype_count": 24,
          "review_type_count": 11,
          "review_subtype_count": 28,
          "other_before": 9,
          "other_after": 1,
          "ontology_loaded": true,
          "resumed": false
        }
      },
      "kg_lite": {
        "status": "ok",
        "duration_sec": 0.102,
        "metrics": {
          "input_entities": 112,
          "input_relations": 155,
          "kept_entities": 111,
          "kept_relations": 154,
          "dropped_entities": 1,
          "dropped_relations": 1,
          "resumed": false
        }
      }
    },
    "quality_metrics": {
      "chunks": {
        "chunk_count": 30,
        "avg_chunk_chars": 1737.133,
        "max_chunk_chars": 1800,
        "avg_fill_ratio": 0.965074,
        "oversize_chunks": 0
      },
      "ontology": {
        "sample_count": 30,
        "sample_coverage_ratio": 1.0,
        "candidate_entity_types": 7,
        "candidate_relation_types": 8,
        "taxonomy_entity_types": 13,
        "taxonomy_relations": 8
      },
      "kg": {
        "entity_count": 114,
        "relation_count": 156,
        "observation_count": 664,
        "entity_per_chunk": 3.8,
        "relation_per_chunk": 5.2,
        "observation_per_chunk": 22.133333,
        "ambiguous_entity_forks": 9,
        "supplement_ratio": 0.833333,
        "ontology_loaded": true
      },
      "type_consolidation": {
        "candidate_count": 80,
        "auto_apply_total": 32,
        "review_total": 39,
        "other_before": 9,
        "other_after": 1,
        "other_reduction": 8,
        "other_reduction_ratio": 0.888889,
        "ontology_loaded": true
      }
    }
  },
  "baseline": {
    "summary": {
      "run_dir": "daozu_phase1_baseline_20260322_residualfix",
      "run_id": "20260322T045649833344Z",
      "created_at": "2026-03-22T04:56:49.857015Z",
      "out_dir": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix",
      "input_path": "/wwwb/aitools/writer/input/道祖是克苏鲁.txt",
      "input_sha256": "5c05796b90b9a1956f3fe767cd8288965db478acac5dbed44f64419f0fea185d",
      "provider": "deepseek",
      "video_provider": "doubao",
      "enable_video": false,
      "style_preset": "cinematic, detailed, consistent character design, coherent lighting",
      "limits": {
        "max_chars": 1800,
        "limit_chunks": 30,
        "limit_scenes": null,
        "limit_shots": null
      },
      "status": "ok",
      "errors": 0,
      "counts": {
        "chunks": 30,
        "ontology_samples": 30,
        "ontology_candidate_entity_types": 7,
        "ontology_candidate_relation_types": 8,
        "ontology_entity_taxonomy": 13,
        "ontology_relation_taxonomy": 8,
        "observations": 637,
        "entities": 123,
        "relations": 168,
        "type_candidates": 93,
        "type_apply_type_count": 6,
        "type_apply_subtype_count": 28,
        "type_other_before": 6,
        "type_other_after": 0,
        "entity_registry_entities": 0,
        "entity_visual_cards": 0,
        "entity_voice_cards": 0,
        "entity_asset_bindings": 0,
        "scenes": 0,
        "chronology_scenes": 0,
        "chronology_groups": 0,
        "chronology_edges": 0,
        "chronology_conflicts": 0,
        "adaptation_scenes": 0,
        "adaptation_groups": 0,
        "adaptation_beats": 0,
        "adaptation_retain_scenes": 0,
        "adaptation_compress_scenes": 0,
        "adaptation_bridge_scenes": 0,
        "adaptation_drop_scenes": 0,
        "scripts": 0,
        "shots": 0,
        "style_fixed_positive_terms": 0,
        "style_fixed_negative_terms": 0,
        "style_provider_profiles": 0,
        "style_manual_override_slots": 0,
        "style_reference_ready_entities": 0,
        "storyboards": 0,
        "prompt_guard_shots": 0,
        "prompt_guard_pass_shots": 0,
        "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",
        "scripts": "04_scripts.json",
        "style_bible": "04b_style_bible.json",
        "storyboard": "05_storyboard.json",
        "prompt_guard": "05b_storyboard_guard.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"
      },
      "updated_at": "2026-03-28T13:35:54.956018Z",
      "run_uid": "20260322T045649833344Z",
      "run_key": "20260322T045649833344Z",
      "trace_scope": "live",
      "is_current_live": true,
      "archive_rel": "",
      "web_paths": {
        "run_root": "",
        "logs_dir": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/",
        "llm_dir": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/llm/",
        "manifest": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/run_manifest.json",
        "project": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/project.json",
        "report_html": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/run_report.html",
        "report_md": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/run_report.md",
        "metrics": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/run_metrics.json",
        "events": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/run_events.jsonl",
        "errors": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/run_errors.jsonl",
        "stage_timings": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/stage_timings.jsonl",
        "llm_calls": "/novel2video/runs/daozu_phase1_baseline_20260322_residualfix/logs/llm_calls.jsonl"
      }
    },
    "counts": {
      "chunks": 30,
      "ontology_samples": 30,
      "ontology_candidate_entity_types": 7,
      "ontology_candidate_relation_types": 8,
      "ontology_entity_taxonomy": 13,
      "ontology_relation_taxonomy": 8,
      "observations": 637,
      "entities": 123,
      "relations": 168,
      "type_candidates": 93,
      "type_apply_type_count": 6,
      "type_apply_subtype_count": 28,
      "type_other_before": 6,
      "type_other_after": 0,
      "entity_registry_entities": 0,
      "entity_visual_cards": 0,
      "entity_voice_cards": 0,
      "entity_asset_bindings": 0,
      "scenes": 0,
      "chronology_scenes": 0,
      "chronology_groups": 0,
      "chronology_edges": 0,
      "chronology_conflicts": 0,
      "adaptation_scenes": 0,
      "adaptation_groups": 0,
      "adaptation_beats": 0,
      "adaptation_retain_scenes": 0,
      "adaptation_compress_scenes": 0,
      "adaptation_bridge_scenes": 0,
      "adaptation_drop_scenes": 0,
      "scripts": 0,
      "shots": 0,
      "style_fixed_positive_terms": 0,
      "style_fixed_negative_terms": 0,
      "style_provider_profiles": 0,
      "style_manual_override_slots": 0,
      "style_reference_ready_entities": 0,
      "storyboards": 0,
      "prompt_guard_shots": 0,
      "prompt_guard_pass_shots": 0,
      "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,
      "llm_calls": 38,
      "run_errors": 0
    },
    "stage_rows": [
      {
        "ts_start": "2026-03-22T04:56:50.172247Z",
        "ts_end": "2026-03-22T04:56:51.062037Z",
        "duration_sec": 0.89,
        "stage": "chunks",
        "status": "ok",
        "run_id": "20260322T045649833344Z",
        "agent": "Ingestion & Chunking Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/input/道祖是克苏鲁.txt",
            "kind": "novel_text"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/01_chunks.json",
            "kind": "chunks"
          }
        ],
        "metrics": {
          "chunks": 30,
          "max_chars": 1800,
          "limit_chunks": 30,
          "resumed": false
        }
      },
      {
        "ts_start": "2026-03-22T04:56:51.079523Z",
        "ts_end": "2026-03-22T04:56:51.192997Z",
        "duration_sec": 0.113,
        "stage": "ontology",
        "status": "ok",
        "run_id": "20260322T045649833344Z",
        "agent": "Ontology & Taxonomy Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/01_chunks.json",
            "kind": "chunks"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/01b_ontology_samples.json",
            "kind": "ontology_samples"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/01c_ontology_candidates.json",
            "kind": "ontology_candidates"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/01d_ontology.json",
            "kind": "ontology_doc"
          }
        ],
        "metrics": {
          "samples": 30,
          "candidate_entity_types": 7,
          "candidate_relation_types": 8,
          "taxonomy_entity_types": 13,
          "taxonomy_relations": 8,
          "resumed": false
        }
      },
      {
        "ts_start": "2026-03-22T04:56:51.212320Z",
        "ts_end": "2026-03-22T05:26:27.795451Z",
        "duration_sec": 1776.583,
        "stage": "kg",
        "status": "ok",
        "run_id": "20260322T045649833344Z",
        "agent": "Knowledge Graph Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/01_chunks.json",
            "kind": "chunks"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/01d_ontology.json",
            "kind": "ontology_doc"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/02_kg.json",
            "kind": "kg_summary"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/02_kg_store.json",
            "kind": "kg_store"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/02_kg_observations.jsonl",
            "kind": "kg_observations"
          }
        ],
        "metrics": {
          "entities": 123,
          "relations": 168,
          "observations": 637,
          "ambiguous_entity_forks": 20,
          "chunks": 30,
          "ontology_loaded": true,
          "high_density_chunks": 12,
          "supplement_chunks": 8,
          "max_entity_limit": 14,
          "max_relation_limit": 14,
          "kg_observation_rows": 637,
          "kg_observation_rows_dropped": 0,
          "kg_entity_redirect_applied": 0,
          "kg_relation_redirect_applied": 0,
          "stub_cleanup_dropped_entities": 0,
          "stub_cleanup_dropped_relations": 0,
          "stub_cleanup_merged_duplicate_entities": 0,
          "stub_cleanup_merged_same_name_entities": 0,
          "stub_cleanup_merged_duplicate_relations": 0,
          "resumed": false
        }
      },
      {
        "ts_start": "2026-03-22T05:26:27.826875Z",
        "ts_end": "2026-03-22T05:26:27.987879Z",
        "duration_sec": 0.161,
        "stage": "type_consolidation",
        "status": "ok",
        "run_id": "20260322T045649833344Z",
        "agent": "Ontology & Taxonomy Agent",
        "inputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/02_kg_store.json",
            "kind": "kg_store"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/01d_ontology.json",
            "kind": "ontology_doc"
          }
        ],
        "outputs": [
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/02b_type_candidates.json",
            "kind": "type_candidates"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/02c_type_consolidation.json",
            "kind": "type_consolidation"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/02d_kg_store_consolidated.json",
            "kind": "kg_store_consolidated"
          },
          {
            "path": "/wwwb/aitools/writer/outputs/daozu_kg_large_20260322_residualfix/02d_kg_consolidated.json",
            "kind": "kg_summary_consolidated"
          }
        ],
        "metrics": {
          "candidates": 93,
          "apply_type_count": 6,
          "apply_subtype_count": 28,
          "review_type_count": 13,
          "review_subtype_count": 34,
          "other_before": 6,
          "other_after": 0,
          "ontology_loaded": true,
          "resumed": false
        }
      }
    ],
    "stage_metrics": {
      "chunks": {
        "status": "ok",
        "duration_sec": 0.89,
        "metrics": {
          "chunks": 30,
          "max_chars": 1800,
          "limit_chunks": 30,
          "resumed": false
        }
      },
      "ontology": {
        "status": "ok",
        "duration_sec": 0.113,
        "metrics": {
          "samples": 30,
          "candidate_entity_types": 7,
          "candidate_relation_types": 8,
          "taxonomy_entity_types": 13,
          "taxonomy_relations": 8,
          "resumed": false
        }
      },
      "kg": {
        "status": "ok",
        "duration_sec": 1776.583,
        "metrics": {
          "entities": 123,
          "relations": 168,
          "observations": 637,
          "ambiguous_entity_forks": 20,
          "chunks": 30,
          "ontology_loaded": true,
          "high_density_chunks": 12,
          "supplement_chunks": 8,
          "max_entity_limit": 14,
          "max_relation_limit": 14,
          "kg_observation_rows": 637,
          "kg_observation_rows_dropped": 0,
          "kg_entity_redirect_applied": 0,
          "kg_relation_redirect_applied": 0,
          "stub_cleanup_dropped_entities": 0,
          "stub_cleanup_dropped_relations": 0,
          "stub_cleanup_merged_duplicate_entities": 0,
          "stub_cleanup_merged_same_name_entities": 0,
          "stub_cleanup_merged_duplicate_relations": 0,
          "resumed": false
        }
      },
      "type_consolidation": {
        "status": "ok",
        "duration_sec": 0.161,
        "metrics": {
          "candidates": 93,
          "apply_type_count": 6,
          "apply_subtype_count": 28,
          "review_type_count": 13,
          "review_subtype_count": 34,
          "other_before": 6,
          "other_after": 0,
          "ontology_loaded": true,
          "resumed": false
        }
      }
    },
    "quality_metrics": {
      "chunks": {
        "chunk_count": 30,
        "avg_chunk_chars": 1737.133,
        "max_chunk_chars": 1800,
        "avg_fill_ratio": 0.965074,
        "oversize_chunks": 0
      },
      "ontology": {
        "sample_count": 30,
        "sample_coverage_ratio": 1.0,
        "candidate_entity_types": 7,
        "candidate_relation_types": 8,
        "taxonomy_entity_types": 13,
        "taxonomy_relations": 8
      },
      "kg": {
        "entity_count": 123,
        "relation_count": 168,
        "observation_count": 637,
        "entity_per_chunk": 4.1,
        "relation_per_chunk": 5.6,
        "observation_per_chunk": 21.233333,
        "ambiguous_entity_forks": 20,
        "supplement_ratio": 0.666667,
        "ontology_loaded": true
      },
      "type_consolidation": {
        "candidate_count": 93,
        "auto_apply_total": 34,
        "review_total": 47,
        "other_before": 6,
        "other_after": 0,
        "other_reduction": 6,
        "other_reduction_ratio": 1.0,
        "ontology_loaded": true
      }
    }
  },
  "candidate_validation": {
    "artifact_paths": {
      "chunks": "outputs/daozu_kg_current_chain_30_20260328_v1/01_chunks.json",
      "ontology_samples": "outputs/daozu_kg_current_chain_30_20260328_v1/01b_ontology_samples.json",
      "ontology_candidates": "outputs/daozu_kg_current_chain_30_20260328_v1/01c_ontology_candidates.json",
      "ontology_doc": "outputs/daozu_kg_current_chain_30_20260328_v1/01d_ontology.json",
      "kg_store": "outputs/daozu_kg_current_chain_30_20260328_v1/02_kg_store.json",
      "kg_summary": "outputs/daozu_kg_current_chain_30_20260328_v1/02_kg.json",
      "kg_store_closure": "outputs/daozu_kg_current_chain_30_20260328_v1/02a_kg_store_closure.json",
      "kg_summary_closure": "outputs/daozu_kg_current_chain_30_20260328_v1/02a_kg_closure.json",
      "kg_closure_decisions": "outputs/daozu_kg_current_chain_30_20260328_v1/02a_kg_closure_decisions.json",
      "type_candidates": "outputs/daozu_kg_current_chain_30_20260328_v1/02b_type_candidates.json",
      "type_consolidation": "outputs/daozu_kg_current_chain_30_20260328_v1/02c_type_consolidation.json"
    },
    "missing": [],
    "errors": {
      "chunks": [],
      "ontology_samples": [],
      "ontology_candidates": [],
      "ontology_doc": [],
      "kg_store": [],
      "kg_summary": [],
      "kg_store_closure": [],
      "kg_summary_closure": [],
      "kg_closure_decisions": [],
      "type_candidates": [],
      "type_consolidation": []
    },
    "is_valid": true
  },
  "baseline_validation": {
    "artifact_paths": {
      "chunks": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/01_chunks.json",
      "ontology_samples": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/01b_ontology_samples.json",
      "ontology_candidates": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/01c_ontology_candidates.json",
      "ontology_doc": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/01d_ontology.json",
      "kg_store": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/02_kg_store.json",
      "kg_summary": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/02_kg.json",
      "kg_store_closure": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/02a_kg_store_closure.json",
      "kg_summary_closure": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/02a_kg_closure.json",
      "kg_closure_decisions": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/02a_kg_closure_decisions.json",
      "type_candidates": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/02b_type_candidates.json",
      "type_consolidation": "baselines/phase1/runs/daozu_phase1_baseline_20260322_residualfix/02c_type_consolidation.json"
    },
    "missing": [
      "kg_store_closure",
      "kg_summary_closure",
      "kg_closure_decisions"
    ],
    "errors": {
      "chunks": [],
      "ontology_samples": [],
      "ontology_candidates": [],
      "ontology_doc": [],
      "kg_store": [],
      "kg_summary": [],
      "type_candidates": [],
      "type_consolidation": []
    },
    "is_valid": false
  },
  "diff": {
    "chunks": {
      "baseline": 30,
      "candidate": 30,
      "delta": 0,
      "pct": 0.0
    },
    "ontology_samples": {
      "baseline": 30,
      "candidate": 30,
      "delta": 0,
      "pct": 0.0
    },
    "ontology_candidate_entity_types": {
      "baseline": 7,
      "candidate": 7,
      "delta": 0,
      "pct": 0.0
    },
    "ontology_candidate_relation_types": {
      "baseline": 8,
      "candidate": 8,
      "delta": 0,
      "pct": 0.0
    },
    "ontology_entity_taxonomy": {
      "baseline": 13,
      "candidate": 13,
      "delta": 0,
      "pct": 0.0
    },
    "ontology_relation_taxonomy": {
      "baseline": 8,
      "candidate": 8,
      "delta": 0,
      "pct": 0.0
    },
    "entities": {
      "baseline": 123,
      "candidate": 114,
      "delta": -9,
      "pct": -7.317
    },
    "relations": {
      "baseline": 168,
      "candidate": 156,
      "delta": -12,
      "pct": -7.143
    },
    "observations": {
      "baseline": 637,
      "candidate": 664,
      "delta": 27,
      "pct": 4.239
    },
    "type_candidates": {
      "baseline": 93,
      "candidate": 80,
      "delta": -13,
      "pct": -13.978
    },
    "type_apply_type_count": {
      "baseline": 6,
      "candidate": 8,
      "delta": 2,
      "pct": 33.333
    },
    "type_apply_subtype_count": {
      "baseline": 28,
      "candidate": 24,
      "delta": -4,
      "pct": -14.286
    },
    "type_other_before": {
      "baseline": 6,
      "candidate": 9,
      "delta": 3,
      "pct": 50.0
    },
    "type_other_after": {
      "baseline": 0,
      "candidate": 1,
      "delta": 1,
      "pct": null
    },
    "llm_calls": {
      "baseline": 38,
      "candidate": 40,
      "delta": 2,
      "pct": 5.263
    },
    "run_errors": {
      "baseline": 0,
      "candidate": 0,
      "delta": 0,
      "pct": null
    }
  },
  "quality_overview": [
    {
      "stage": "chunks",
      "title": "Chunks",
      "baseline_status": "ok",
      "candidate_status": "ok",
      "baseline_duration_sec": 0.89,
      "candidate_duration_sec": 0.832,
      "metrics": [
        {
          "key": "chunk_count",
          "label": "Chunk 数",
          "kind": "int",
          "baseline": 30,
          "candidate": 30,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "avg_chunk_chars",
          "label": "平均 Chunk 字数",
          "kind": "float1",
          "baseline": 1737.133,
          "candidate": 1737.133,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "max_chunk_chars",
          "label": "最大 Chunk 字数",
          "kind": "int",
          "baseline": 1800,
          "candidate": 1800,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "avg_fill_ratio",
          "label": "平均填充率",
          "kind": "pct1",
          "baseline": 0.965074,
          "candidate": 0.965074,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "oversize_chunks",
          "label": "超长 Chunk 数",
          "kind": "int",
          "baseline": 0,
          "candidate": 0,
          "delta": 0.0,
          "pct": null
        }
      ]
    },
    {
      "stage": "ontology",
      "title": "Ontology",
      "baseline_status": "ok",
      "candidate_status": "ok",
      "baseline_duration_sec": 0.113,
      "candidate_duration_sec": 0.127,
      "metrics": [
        {
          "key": "sample_count",
          "label": "抽样数",
          "kind": "int",
          "baseline": 30,
          "candidate": 30,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "sample_coverage_ratio",
          "label": "抽样覆盖率",
          "kind": "pct1",
          "baseline": 1.0,
          "candidate": 1.0,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "candidate_entity_types",
          "label": "候选实体类型数",
          "kind": "int",
          "baseline": 7,
          "candidate": 7,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "candidate_relation_types",
          "label": "候选关系类型数",
          "kind": "int",
          "baseline": 8,
          "candidate": 8,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "taxonomy_entity_types",
          "label": "实体 Taxonomy 大小",
          "kind": "int",
          "baseline": 13,
          "candidate": 13,
          "delta": 0.0,
          "pct": 0.0
        },
        {
          "key": "taxonomy_relations",
          "label": "关系 Taxonomy 大小",
          "kind": "int",
          "baseline": 8,
          "candidate": 8,
          "delta": 0.0,
          "pct": 0.0
        }
      ]
    },
    {
      "stage": "kg",
      "title": "KG",
      "baseline_status": "ok",
      "candidate_status": "ok",
      "baseline_duration_sec": 1776.583,
      "candidate_duration_sec": 2009.047,
      "metrics": [
        {
          "key": "entity_count",
          "label": "实体数",
          "kind": "int",
          "baseline": 123,
          "candidate": 114,
          "delta": -9.0,
          "pct": -7.317
        },
        {
          "key": "relation_count",
          "label": "关系数",
          "kind": "int",
          "baseline": 168,
          "candidate": 156,
          "delta": -12.0,
          "pct": -7.143
        },
        {
          "key": "observation_count",
          "label": "Observation 数",
          "kind": "int",
          "baseline": 637,
          "candidate": 664,
          "delta": 27.0,
          "pct": 4.239
        },
        {
          "key": "entity_per_chunk",
          "label": "每 Chunk 实体数",
          "kind": "float2",
          "baseline": 4.1,
          "candidate": 3.8,
          "delta": -0.3,
          "pct": -7.317
        },
        {
          "key": "relation_per_chunk",
          "label": "每 Chunk 关系数",
          "kind": "float2",
          "baseline": 5.6,
          "candidate": 5.2,
          "delta": -0.4,
          "pct": -7.143
        },
        {
          "key": "observation_per_chunk",
          "label": "每 Chunk Observation 数",
          "kind": "float2",
          "baseline": 21.233333,
          "candidate": 22.133333,
          "delta": 0.9,
          "pct": 4.239
        },
        {
          "key": "ambiguous_entity_forks",
          "label": "歧义分叉数",
          "kind": "int",
          "baseline": 20,
          "candidate": 9,
          "delta": -11.0,
          "pct": -55.0
        },
        {
          "key": "supplement_ratio",
          "label": "补抽占比",
          "kind": "pct1",
          "baseline": 0.666667,
          "candidate": 0.833333,
          "delta": 0.166666,
          "pct": 25.0
        },
        {
          "key": "ontology_loaded",
          "label": "已加载 Ontology",
          "kind": "bool",
          "baseline": true,
          "candidate": true,
          "delta": null,
          "pct": null,
          "changed": false
        }
      ]
    },
    {
      "stage": "type_consolidation",
      "title": "Type Consolidation",
      "baseline_status": "ok",
      "candidate_status": "ok",
      "baseline_duration_sec": 0.161,
      "candidate_duration_sec": 0.169,
      "metrics": [
        {
          "key": "candidate_count",
          "label": "候选实体数",
          "kind": "int",
          "baseline": 93,
          "candidate": 80,
          "delta": -13.0,
          "pct": -13.978
        },
        {
          "key": "auto_apply_total",
          "label": "自动应用总数",
          "kind": "int",
          "baseline": 34,
          "candidate": 32,
          "delta": -2.0,
          "pct": -5.882
        },
        {
          "key": "review_total",
          "label": "待复核总数",
          "kind": "int",
          "baseline": 47,
          "candidate": 39,
          "delta": -8.0,
          "pct": -17.021
        },
        {
          "key": "other_before",
          "label": "收敛前 Other",
          "kind": "int",
          "baseline": 6,
          "candidate": 9,
          "delta": 3.0,
          "pct": 50.0
        },
        {
          "key": "other_after",
          "label": "收敛后 Other",
          "kind": "int",
          "baseline": 0,
          "candidate": 1,
          "delta": 1.0,
          "pct": null
        },
        {
          "key": "other_reduction",
          "label": "Other 减少数",
          "kind": "int",
          "baseline": 6,
          "candidate": 8,
          "delta": 2.0,
          "pct": 33.333
        },
        {
          "key": "other_reduction_ratio",
          "label": "Other 压缩率",
          "kind": "pct1",
          "baseline": 1.0,
          "candidate": 0.888889,
          "delta": -0.111111,
          "pct": -11.111
        },
        {
          "key": "ontology_loaded",
          "label": "已加载 Ontology",
          "kind": "bool",
          "baseline": true,
          "candidate": true,
          "delta": null,
          "pct": null,
          "changed": false
        }
      ]
    }
  ],
  "golden_manifest": {},
  "status": "needs-review"
}