{
  "audit_type": "final_focused_tts_release_audit_rev2",
  "language": "vi",
  "project_id": "gacmai_20260714_205305",
  "verdict": "PASS",
  "verdict_reason": "Rev2 đã dọn đúng 11 điểm đích: 8 cue F02 được chuyển từ diễn giải giới hạn lặp lại sang hành động hoặc ô để trống, và 3 nhãn F03 được chuyển thành động tác sân khấu. P6-P11 vẫn có độ chính xác hồ sơ cần thiết nhưng không còn blocker phát hành cụ thể; nhịp nghe đã đủ tự nhiên cho TTS, không áp tiêu chuẩn hoàn mỹ phong cách vô hạn. Continuity, phạm vi E01-E09, cast, naming, mô-típ, aftercare, kết thúc và intro đều được giữ nguyên về chức năng.",
  "source_modified": false,
  "sources_read": {
    "story_package_rev2": "/home/hermes/gacmai_20260714_205305_story_package_rev2.json",
    "editorial_audit_rev1": "/home/hermes/gacmai_20260714_205305_editorial_motif_audit_rev1.json",
    "continuity_audit_rev1": "/home/hermes/gacmai_20260714_205305_continuity_audit_rev1.json",
    "duplication_audit_rev2": "/home/hermes/gacmai_20260714_205305_story_duplication_audit_rev2.json",
    "comparison_parent_rev1": "/home/hermes/gacmai_20260714_205305_story_package_rev1.json"
  },
  "exact_checks": {
    "revision_delta": {
      "status": "PASS",
      "declared_exact_replacements": 11,
      "verified_exact_replacements": 11,
      "f02_replacements": 8,
      "f03_replacements": 3,
      "changed_story_parts": [6, 7, 8, 9, 10, 11],
      "rev1_parent_sha256_matches": true,
      "rev1_parent_sha256": "51a15c0ec693176f3c9f6e52cb73c09c27a9061c939e502b504c9d6b7e0b33d1"
    },
    "f02_cleanup": {
      "status": "PASS",
      "all_8_rev1_exact_cues_absent": true,
      "replacement_modes": {
        "action": 5,
        "blank_fields_or_unfilled_destination": 3
      },
      "verified_replacements": [
        {"part": 6, "result": "Nghi Hòa dừng kết luận ở sự khác biệt giữa cơ chế màu và lời quảng bá, rồi chuyển bảng đo cho Tịnh San."},
        {"part": 7, "result": "Nghi Hòa gạch tuyến khai báo khỏi bảng hành trình. Ô nơi đến thực tế vẫn để trống."},
        {"part": 8, "result": "Nghi Hòa đặt dữ liệu nhiệt độ cạnh cân sàn, còn ô nội dung thùng và người chuyển vẫn để trống."},
        {"part": 9, "result": "Hai ô về người ra lệnh và thành phần nước được để trống."},
        {"part": 10, "result": "Nghi Hòa đặt hai cuộn cạnh nhau và kết luận chúng mang cùng mã nhưng không cùng nguồn dệt. Sau câu ấy, cô nhường chỗ cho bàn máy giặt."},
        {"part": 10, "result": "Nghi Hòa ghi kết quả dưới mục đối chiếu lời quảng bá, rồi dừng bút."},
        {"part": 11, "result": "Tịnh San ký quyết định thuộc phạm vi chứng nhận rồi chuyển các hồ sơ còn lại đến đúng nơi tiếp nhận."},
        {"part": 11, "result": "Cuối phiên, từng hồ sơ rời bàn theo một hướng khác nhau."}
      ]
    },
    "f03_cleanup": {
      "status": "PASS",
      "all_3_rev1_labels_absent": true,
      "new_prompt_or_production_leakage": false,
      "verified_replacements": [
        {"part": 10, "removed": "các lớp này", "replacement": "các dữ liệu"},
        {"part": 10, "removed": "Nghi Hòa chuyển sang lớp quyền kiểm soát.", "replacement": "Nghi Hòa đặt bản phân quyền điều phối mẫu lên bàn."},
        {"part": 10, "removed": "Bùi Cảnh Du trình lớp riêng về nước thải.", "replacement": "Bùi Cảnh Du bước tới với bảng cân bằng nước thải."}
      ]
    },
    "audio_prose_p6_p11": {
      "status": "PASS",
      "release_blocker_found": false,
      "new_exact_blocker_cues": [],
      "assessment": "Các câu giới hạn còn lại phục vụ setup, payoff hoặc phân quyền tại điểm quyết định; chúng không còn lặp dày theo cùng một nhịp diễn giải. Những thay thế bằng động tác, chuyển vật chứng và ô để trống tạo nhịp nghe tự nhiên hơn mà không làm mơ hồ logic. P6-P11 đủ tự nhiên để phát hành TTS."
    },
    "evidence_e01_e09": {
      "status": "PASS",
      "ids_checked": ["E01", "E02", "E03", "E04", "E05", "E06", "E07", "E08", "E09"],
      "ledger_metadata_unchanged_from_rev1": true,
      "scope_preserved_by_action_or_blank_fields": true,
      "no_evidence_drift": true,
      "no_new_evidence": true,
      "no_new_decisive_evidence_after_part_9": true,
      "no_confession_as_decisive_evidence": true,
      "note": "Các chỗ cắt lời giải thích vẫn biểu hiện giới hạn qua dừng kết luận, chuyển vật chứng, nhường lượt, hoặc để trống nơi đến, nội dung thùng, người chuyển, người ra lệnh và thành phần nước."
    },
    "paragraphs": {
      "status": "PASS",
      "parts": 12,
      "paragraphs_per_part": [11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11],
      "total_natural_paragraphs": 132
    },
    "naming_and_cast": {
      "status": "PASS",
      "bare_surname_violations": 0,
      "bare_surnames_checked": ["Tống", "Kỷ", "Bùi", "Đường", "Phan", "Hứa"],
      "cast_count": 6,
      "cast": ["Tống Nghi Hòa", "Kỷ Thừa Quân", "Bùi Cảnh Du", "Đường Mạn Chi", "Phan Dục Thành", "Hứa Tịnh San"],
      "named_seventh_character": false
    },
    "story_invariants": {
      "status": "PASS",
      "motif_intact": true,
      "strategic_restraint_intact": true,
      "aftercare_part_12_intact": true,
      "closed_ending_intact": true,
      "spoken_intro_intact": true,
      "authority_and_consequences_intact": true,
      "parts_1_to_5_story_text_unchanged_from_rev1": true,
      "part_12_story_text_unchanged_from_rev1": true
    },
    "deterministic_duplication_rev2": {
      "status": "PASS",
      "sentences_audited": 675,
      "paragraphs_audited": 132,
      "violations": 0,
      "exact_sentence_groups": 0,
      "exact_paragraph_groups": 0,
      "repeated_ngram_groups": 0,
      "near_duplicate_pairs": 0
    }
  },
  "blocking_findings": [],
  "downstream_gate": {
    "status": "OPEN",
    "decision": "APPROVED_FOR_TTS_RELEASE",
    "pass_required_for_production": true,
    "blocking_findings": 0,
    "required_actions_before_release": [],
    "note": "Cho phép chuyển sang TTS/thu âm và khóa bản dựng từ rev2. Không yêu cầu thêm vòng sửa phong cách nếu không xuất hiện lỗi sản xuất mới."
  },
  "checksum": {
    "algorithm": "sha256",
    "source_file_sha256": "2796b126fd08c284be855619de12de27e5888e4b44d60ae277b9455b539e66b4",
    "audit_checksum_scope": "Canonical JSON UTF-8 với sort_keys=true, separators=(',', ':'), loại trừ riêng checksum.audit_file_sha256 để tránh tự tham chiếu.",
    "audit_file_sha256": "39e5592a7bd1f63727e86aa0a8f38549fed8397edf6a38963c7f3d03bb2e6015"
  }
}
