{
  "status": "completed",
  "verified": true,
  "verdict": "PASS",
  "revision": "v3",
  "candidate_path": "work/story/run-001/candidate.txt",
  "candidate_sha256": "8800d03d32afee35d03f59afc0cd998b58a2353feefc437960f35f268bafdaab",
  "word_count": 10208,
  "word_count_method": "len(decoded_utf8.split())",
  "byte_count": 63064,
  "line_count": 1219,
  "predicted_minutes_at_231_wpm": 44.19047619047619,
  "nfc": true,
  "hidden_character_count": 0,
  "teaser_catchup_state_vector": {
    "occurrence_count": 2,
    "teaser_before_reset": true,
    "catchup_after_room_setup": true,
    "location": "phòng chụp ảnh khách sạn Vân Đình",
    "present_people": [
      "Hạ An Nhiên",
      "Lâm Cảnh Hoài",
      "Hạ Tuấn Thành",
      "Hạ Minh Châu",
      "Hạ Đình Sơn",
      "Tô Uyển Dung",
      "Hạ lão phu nhân",
      "người chụp ảnh",
      "hai nhân viên"
    ],
    "prop": "chiếc ghế gỗ thứ bảy có vết xước hình trăng khuyết",
    "decision_owner": "Hạ An Nhiên",
    "action_order": [
      "Tuấn Thành yêu cầu dời ghế",
      "An Nhiên giữ/kéo ghế",
      "Cảnh Hoài hỏi vị trí",
      "An Nhiên cho phép đứng cạnh nhưng không với tư cách anh trai"
    ],
    "verified": true
  },
  "timeline_checks": {
    "opens_D7": true,
    "D4": true,
    "D3": true,
    "D2": true,
    "D1": true,
    "D0": true,
    "D_plus_1": true,
    "D_plus_90": true,
    "strict_marker_order": true
  },
  "causal_architecture_checks": {
    "official_family_statement": true,
    "distributed_approval": true,
    "private_evidence_withheld_at_climax": true,
    "protagonist_consequence": true,
    "romantic_reciprocal_cost": true,
    "first_date_only_at_D90": true
  },
  "dialogue_turns_over_40_words_diagnostic": [
    {
      "line": 537,
      "word_count": 41,
      "text": "“Ngày hai đứa sinh, tầng sơ sinh phải sơ tán vì cháy kho điện. Vòng tên bị tháo trong lúc chuyển lồng ấp. Một nhân viên ghi sai số giường. Trần Tú Mai chỉ hỗ trợ đưa trẻ xuống tầng dưới.”"
    },
    {
      "line": 989,
      "word_count": 42,
      "text": "“Tôi đã biết câu ấy từ tuần trước. Tôi không viết, nhưng tôi đã đồng ý chụp bức ảnh chỉ có sáu người và đã không phản đối. Tôi sợ nếu có thêm một người con, phần của tôi sẽ ít đi.”"
    },
    {
      "line": 993,
      "word_count": 41,
      "text": "“Tôi vẫn là Hạ Minh Châu. Tôi không trả lại cha mẹ đã nuôi mình, căn phòng đã sống hay chiếc vòng bà nội trao. Nhưng tôi từ chối chữ duy nhất nếu nó cần một người khác không có tên.”"
    },
    {
      "line": 1003,
      "word_count": 49,
      "text": "“Tôi soạn bản gọi Hạ An Nhiên là người nhận hỗ trợ. Tôi đề nghị chặn liên lạc trực tiếp giữa hai người vì cho rằng có thể kiểm soát tình hình qua luật sư. Tôi dùng việc bảo vệ Minh Châu để hợp thức hóa cách làm ấy.”"
    },
    {
      "line": 1013,
      "word_count": 46,
      "text": "“Bản cuối do tôi phê duyệt.” Giọng ông khô. “Tôi đổi cụm con gái ruột thành người có liên quan vì sợ ảnh hưởng quỹ và giá trị doanh nghiệp. Tôi cũng đặt tiền cạnh điều khoản bảo mật. Không phải nhóm truyền thông tự làm.”"
    },
    {
      "line": 1023,
      "word_count": 48,
      "text": "“Tôi đọc bản nháp. Tôi từng hỏi có nên gọi tên An Nhiên rồi xóa câu hỏi vì sợ chồng và con trai phản đối. Tôi biết báo cáo bệnh viện tám tháng và đã xin chờ qua tiệc. Sự im lặng ấy là lựa chọn của tôi.”"
    },
    {
      "line": 1069,
      "word_count": 45,
      "text": "“Tôi chỉ nói phần thuộc quyền mình. Tôi là Hạ An Nhiên, con ruột bị trao nhầm. Tôi không phải người nhận hỗ trợ nhân đạo, không phải bí mật cần quản lý và không phải lý do để Hạ Minh Châu mất gia đình.”"
    }
  ],
  "dialogue_hard_limit_applied": false,
  "audio_qa_interpretation": "Long turns are punctuated public accountability statements with explicit reaction pauses; no 40-word hard invariant exists in loaded skill.",
  "part_sha256": [
    "cc4519b52bdf4574caf2b2646e3c35f0b41802ac52967d8a3e438b61c5739ec8",
    "5c4c6c2a85d2e9872aebe2531f7d38c97413d0fc828784f98ab8b554f7152087",
    "2b5669bcd8fd767063e395c8a9e76eaa6c1cbd14fe2b373edb900d240ac96149",
    "debc854670b09bef5136adcaeb2929bfbc2c946b38d971f9c717ba1c7e590f6d"
  ],
  "assembly": "exact part bytes in order with one blank line between parts and one final newline",
  "completed_at": "2026-07-21T13:37:59.684115+00:00"
}
