{
  "schema_version": 1,
  "run_id": "run-002",
  "status": "locked",
  "candidate_path": "/data/video-pipeline/HaTramAudio/project/003-Mui-Huong-Trong-Ban-Di-Chuc/work/story/run-002/spoken-narration.candidate.txt",
  "canonical_title": "Mùi Hương Trong Bản Di Chúc",
  "authority_sha256": {
    "script/story-brief.json": "736aa91871c9681e5b3c8afa20b1c43d0e308565b453ca6367feb52c32be11ec",
    "script/identity-registry.json": "74bb5323e374ebb0fea0e7107c8181c0801a2787af858bd53422b09ed07cc38e",
    "script/reveal-ledger.json": "fb4e526cc5b13861b03c119d11449305cb931ef9193a9ea0027a7983494fd6d3",
    "script/outline.json": "d38ec8346d51812344598f20800163533a7a4751d8acd1f527d4529f5f4721cb"
  },
  "encoding": "UTF-8 strict",
  "word_count": {
    "method": "len(text.split())",
    "min": 10500,
    "max": 12500
  },
  "narration_hygiene": {
    "forbid_heading_or_scene_marker": true,
    "forbid_json_or_production_notes": true,
    "forbid_cta": true,
    "line_anchored_marker_patterns": [
      "^(Chương|Phần|Cảnh)\\s*(?:\\d+|[:\\-])",
      "^(\\*\\*\\*|---|===)$"
    ],
    "forbidden_meta_terms": [
      "TODO",
      "PLACEHOLDER",
      "source_canon_sha256",
      "scene_id",
      "production note",
      "ghi chú sản xuất",
      "like và đăng ký kênh"
    ]
  },
  "identity": {
    "required_full_names": [
      "Tống Vãn Chi",
      "Cố Trạch Ngôn",
      "Tạ Minh Châu",
      "Lục Hoài Sinh",
      "Cố Dư An"
    ],
    "allowed_short_names": [
      "Vãn Chi",
      "Trạch Ngôn",
      "Minh Châu",
      "Hoài Sinh",
      "Dư An"
    ],
    "forbidden_single_name_tokens": [
      "Chi",
      "Ngôn",
      "Châu",
      "Sinh",
      "An"
    ],
    "single_token_scan_rule": "Normalize Unicode NFC; temporarily remove all allowed full names and allowed two-syllable short names; then match forbidden tokens as standalone words. Review common-noun contexts before failing.",
    "common_noun_exclusions": [
      "cảnh sát",
      "tình trạng",
      "an toàn",
      "sinh ra",
      "châu báu"
    ]
  },
  "required_story_evidence_groups": [
    {
      "id": "E01",
      "description": "teaser công bố di chúc và lọ hương bị đập",
      "aliases": [
        "buổi công bố",
        "đập vỡ",
        "lọ hương"
      ]
    },
    {
      "id": "E02",
      "description": "ba tầng hương trong di chúc",
      "aliases": [
        "ba tầng hương",
        "tầng hương thứ ba"
      ]
    },
    {
      "id": "E03",
      "description": "kho giống cây và mã lô",
      "aliases": [
        "kho giống",
        "mã lô"
      ]
    },
    {
      "id": "E04",
      "description": "NDA bị từ chối và hợp đồng giữ quyền tố giác",
      "aliases": [
        "NDA",
        "quyền tố giác",
        "sửa hợp đồng"
      ]
    },
    {
      "id": "E05",
      "description": "mẫu lưu và chuỗi bảo quản cứu xưởng Mộc Tê",
      "aliases": [
        "mẫu lưu",
        "chuỗi bảo quản",
        "Mộc Tê"
      ]
    },
    {
      "id": "E06",
      "description": "vụ cháy bị lợi dụng để tráo nguyên liệu",
      "aliases": [
        "vụ cháy",
        "tráo lô nguyên liệu"
      ]
    },
    {
      "id": "E07",
      "description": "chất định hương xuất hiện sau ngày niêm phong",
      "aliases": [
        "chất định hương",
        "sau ngày niêm phong"
      ]
    },
    {
      "id": "E08",
      "description": "ba chuyên gia độc lập nhận biết mẫu giả",
      "aliases": [
        "ba chuyên gia",
        "chuyên gia độc lập"
      ]
    },
    {
      "id": "E09",
      "description": "quyền biểu quyết bảo vệ kho giống và quyền tác giả",
      "aliases": [
        "quyền biểu quyết",
        "quyền tác giả",
        "kho giống"
      ]
    },
    {
      "id": "E10",
      "description": "kết Mộc Tê mở lại và Trạch Ngôn là khách hàng đầu tiên",
      "aliases": [
        "mở lại Mộc Tê",
        "khách hàng đầu tiên"
      ]
    }
  ],
  "reveal_order": [
    "R1",
    "R2",
    "R3",
    "R4",
    "R5"
  ],
  "originality": {
    "corpus_snapshot": "/data/video-pipeline/HaTramAudio/project/003-Mui-Huong-Trong-Ban-Di-Chuc/work/story/run-002/originality-corpus-snapshot.json",
    "normalization": "Unicode NFC + casefold + whitespace tokenization",
    "ngram_size": 14,
    "max_ngram_overlap": 8,
    "max_exact_token_run": 30,
    "reject_duplicate_paragraphs": true
  },
  "promotion_requirements": {
    "all_checks_verified": true,
    "voice_test_verified": true,
    "predicted_duration_minutes": [
      40,
      60
    ],
    "authority_must_match_immediately_before_promotion": true
  },
  "created_at": "2026-07-19T04:15:48.541436Z",
  "updated_at": "2026-07-19T04:16:38.409764Z"
}
