{
  "status": "completed",
  "applicable_count": 1,
  "completed_count": 37,
  "failed_count": 0,
  "schema_version": 1,
  "config_hash": "0f574644ed25c78f",
  "data": {
    "cards": {
      "L04B01::S17_Shot2": {
        "bg_id": "L04B01",
        "shot_id": "S17_Shot2",
        "fp_id": "fp_rooftop_exterior",
        "card": {
          "card_id": "927600951fb9eeea",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L04B01",
          "shot_id": "S17_Shot2",
          "fp_id": "fp_rooftop_exterior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "855bdc18a75b6fe5",
            "space_model_hash": "0e3c0fce85e5494d",
            "zone_readback_hash": "b672bf95d1b0eb72",
            "shot_context_hash": "d9e902c2b8c1e6ad",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "rooftop_room_threshold",
                  "stair_access"
                ],
                "essential_elements": [
                  "water_tank",
                  "laundry_line",
                  "drying_platform",
                  "low_parapet"
                ],
                "openings": [
                  "open_roof_edges_with_low_parapet",
                  "passage_to_stair_access"
                ],
                "zone_id": "open_rooftop_deck",
                "zone_type": "deck"
              },
              {
                "adjacency": [
                  "open_rooftop_deck"
                ],
                "essential_elements": [
                  "rooftop_room_footprint",
                  "metal_entry_door",
                  "small_window"
                ],
                "openings": [
                  "entry_door_to_rooftop_room",
                  "small_window"
                ],
                "zone_id": "rooftop_room_threshold",
                "zone_type": "threshold"
              },
              {
                "adjacency": [
                  "open_rooftop_deck"
                ],
                "essential_elements": [
                  "stair_treads",
                  "stair_head_opening",
                  "roof_access_edge"
                ],
                "openings": [
                  "passage_to_open_rooftop_deck"
                ],
                "zone_id": "stair_access",
                "zone_type": "stairs"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L04B01",
            "bg_plate_visible_description": "고정 배경으로는 새벽빛에 젖은 옥상 난간의 낮은 윗선과 회색 안개 낀 옥상 가장자리만 얕은 초점으로 흐릿하게 잡힌다. 바닥과 외벽 표면은 극도로 좁은 시야와 흐림 때문에 거의 형태를 드러내지 않으며, 불 켜진 작은 창은 배경 안에 직접 보이지 않는다.",
            "camera_view_zone": "open_rooftop_deck",
            "confidence": 0.83,
            "diagnostics": [
              "Shot intent is an extreme close-up of the cat, so most declared rooftop layout elements are outside the frame.",
              "The rooftop room window is visible only as a reflected glow in the cat’s pupil, not as a directly framed architectural surface."
            ],
            "fp_id": "fp_rooftop_exterior",
            "missing_inputs": [],
            "not_visible_summary": "물탱크, 빨랫줄, 건조대, 계단 출입부와 계단참은 이 클로즈업에 들어오지 않는다. 옥탑방 문과 창 자체도 직접 보이지 않고, 창의 밝은 빛만 고양이 눈 안에 작게 비친다.",
            "scene_visible_description": "검은 고양이의 눈이 화면을 거의 가득 채우고, 가장자리에는 짧은 검은 털과 주둥이의 일부만 가까스로 보인다. 윤기 있는 동공 안에는 멀리 켜진 낡은 옥탑방 창빛이 작고 단단한 밝은 반사로 맺혀 있다. 뒤쪽 배경은 차가운 새벽 회색으로 녹아들며, 낮은 옥상 난간의 선만 부드럽게 흐려져 고양이가 옥상 가장자리에 있음을 암시한다.",
            "self_consistency": {
              "notes": "Structured zones match the shot description: the deck is the direct setting, while the rooftop room threshold is represented only by the reflected lit window. Stairs and other deck objects are excluded as off-frame.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S17_Shot2",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "고양이 뒤로 낮은 난간과 새벽 옥상 가장자리가 흐릿하게 보인다.",
                "matched_zone_id": "open_rooftop_deck",
                "observed_zone_type": "open rooftop deck",
                "present_elements": [
                  "low parapet",
                  "soft dawn roof-edge blur",
                  "cold exterior atmosphere"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.62,
                "evidence": "불 켜진 작은 창이 실제 배경이 아니라 고양이 눈의 반사로만 포착된다.",
                "matched_zone_id": "rooftop_room_threshold",
                "observed_zone_type": "rooftop room threshold",
                "present_elements": [
                  "reflected lit small window",
                  "warm rectangular glow"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L04B02::S4_Shot1": {
        "bg_id": "L04B02",
        "shot_id": "S4_Shot1",
        "fp_id": "fp_rooftop_exterior",
        "card": {
          "card_id": "6184cfe5fc6731bd",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L04B02",
          "shot_id": "S4_Shot1",
          "fp_id": "fp_rooftop_exterior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "855bdc18a75b6fe5",
            "space_model_hash": "0e3c0fce85e5494d",
            "zone_readback_hash": "b672bf95d1b0eb72",
            "shot_context_hash": "dc282568c6271678",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "rooftop_room_threshold",
                  "stair_access"
                ],
                "essential_elements": [
                  "water_tank",
                  "laundry_line",
                  "drying_platform",
                  "low_parapet"
                ],
                "openings": [
                  "open_roof_edges_with_low_parapet",
                  "passage_to_stair_access"
                ],
                "zone_id": "open_rooftop_deck",
                "zone_type": "deck"
              },
              {
                "adjacency": [
                  "open_rooftop_deck"
                ],
                "essential_elements": [
                  "rooftop_room_footprint",
                  "metal_entry_door",
                  "small_window"
                ],
                "openings": [
                  "entry_door_to_rooftop_room",
                  "small_window"
                ],
                "zone_id": "rooftop_room_threshold",
                "zone_type": "threshold"
              },
              {
                "adjacency": [
                  "open_rooftop_deck"
                ],
                "essential_elements": [
                  "stair_treads",
                  "stair_head_opening",
                  "roof_access_edge"
                ],
                "openings": [
                  "passage_to_open_rooftop_deck"
                ],
                "zone_id": "stair_access",
                "zone_type": "stairs"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L04B02",
            "bg_plate_visible_description": "높은 부감 시점에서 낡은 옥상 바닥이 넓게 펼쳐지고, 낮은 난간이 옥상 가장자리를 둘러싼다. 한쪽에는 옥탑방의 옅은 벽면과 지붕 형태, 출입문 자리와 작은 창이 내려다보이며, 다른 쪽에는 옥상으로 이어지는 계단 출입부와 계단면이 보인다. 물탱크, 빨랫줄 기둥, 건조대 같은 고정 구조물이 옥상 위에 놓여 있고, 바깥으로는 흐린 해안가 안개에 잠긴 주변 저층 건물의 지붕들이 희미하게 이어진다.",
            "camera_view_zone": "open_rooftop_deck",
            "confidence": 0.9,
            "diagnostics": [],
            "fp_id": "fp_rooftop_exterior",
            "missing_inputs": [],
            "not_visible_summary": "옥탑방 내부와 계단 아래층의 깊은 공간은 보이지 않는다. 화면은 옥상 전체를 넓게 잡지만, 주변 건물들은 안개 속 배경으로만 희미하게 보이며 세부는 읽히지 않는다.",
            "scene_visible_description": "낡은 빌라 옥상을 높은 곳에서 내려다보는 넓은 장면이다. 회색빛 옥상 바닥이 화면 대부분을 차지하고, 낮은 난간 안쪽에 물탱크와 건조대, 빨랫줄이 놓여 있다. 빨랫줄의 옷가지와 천은 바닷바람에 살짝 들리고, 옥탑방의 바랜 외벽과 출입문 쪽, 작은 창이 함께 보인다. 한쪽에는 계단 출입부가 열려 있어 옥상으로 올라오는 동선이 드러나며, 옥상 바깥의 해안가 저층 건물들은 짙은 안개와 푸른 회색 daylight 속에 흐릿하게 가라앉아 있다.",
            "self_consistency": {
              "notes": "구조화된 항목과 한국어 설명 모두 옥상 바닥을 주 피사체로 두고, 옥탑방 외부와 계단 출입부를 함께 보이는 부감 와이드 장면으로 일치한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S4_Shot1",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.95,
                "evidence": "broad roof surface dominates the overhead frame with parapet, tank, clothesline, and drying platform",
                "matched_zone_id": "open_rooftop_deck",
                "observed_zone_type": "open rooftop deck",
                "present_elements": [
                  "open roof floor",
                  "low parapet",
                  "water tank",
                  "laundry line",
                  "hanging laundry",
                  "drying platform"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.88,
                "evidence": "rooftop room mass is clearly framed with its door side and small window readable from above",
                "matched_zone_id": "rooftop_room_threshold",
                "observed_zone_type": "rooftop room exterior threshold",
                "present_elements": [
                  "rooftop room footprint",
                  "metal entry door",
                  "small window",
                  "weathered wall edges"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.82,
                "evidence": "stair opening at the roof edge is included in the wide overhead composition",
                "matched_zone_id": "stair_access",
                "observed_zone_type": "roof stair access",
                "present_elements": [
                  "stair treads",
                  "stair head opening",
                  "roof access edge",
                  "door at stair exit"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L04B03::S10_Shot3": {
        "bg_id": "L04B03",
        "shot_id": "S10_Shot3",
        "fp_id": "fp_rooftop_exterior",
        "card": {
          "card_id": "d9dc303699e0ca53",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L04B03",
          "shot_id": "S10_Shot3",
          "fp_id": "fp_rooftop_exterior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "855bdc18a75b6fe5",
            "space_model_hash": "0e3c0fce85e5494d",
            "zone_readback_hash": "b672bf95d1b0eb72",
            "shot_context_hash": "ce3d811f7d4de26a",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "rooftop_room_threshold",
                  "stair_access"
                ],
                "essential_elements": [
                  "water_tank",
                  "laundry_line",
                  "drying_platform",
                  "low_parapet"
                ],
                "openings": [
                  "open_roof_edges_with_low_parapet",
                  "passage_to_stair_access"
                ],
                "zone_id": "open_rooftop_deck",
                "zone_type": "deck"
              },
              {
                "adjacency": [
                  "open_rooftop_deck"
                ],
                "essential_elements": [
                  "rooftop_room_footprint",
                  "metal_entry_door",
                  "small_window"
                ],
                "openings": [
                  "entry_door_to_rooftop_room",
                  "small_window"
                ],
                "zone_id": "rooftop_room_threshold",
                "zone_type": "threshold"
              },
              {
                "adjacency": [
                  "open_rooftop_deck"
                ],
                "essential_elements": [
                  "stair_treads",
                  "stair_head_opening",
                  "roof_access_edge"
                ],
                "openings": [
                  "passage_to_open_rooftop_deck"
                ],
                "zone_id": "stair_access",
                "zone_type": "stairs"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L04B03",
            "bg_plate_visible_description": "흐리고 어두운 옥탑방 창문 유리가 화면을 크게 채우고, 그 주변으로 얼룩진 외벽의 거친 면이 좁게 붙어 보인다. 밤기운 속에서 유리는 차갑고 탁한 막처럼 보이며, 내부는 거의 검게 가라앉아 있다.",
            "camera_view_zone": "rooftop_room_threshold",
            "confidence": 0.86,
            "diagnostics": [
              "카메라 의도는 옥탑방 외벽의 창문을 정면으로 크게 잡는 구도이다.",
              "평면도상 창문과 외벽은 옥탑방 출입부 영역에 속하며, 다른 옥상 시설은 이 구도에서 벗어난다."
            ],
            "fp_id": "fp_rooftop_exterior",
            "missing_inputs": [],
            "not_visible_summary": "넓은 옥상 바닥 대부분과 물탱크, 빨랫줄, 건조대, 낮은 난간은 화면에 잡히지 않는다. 계단 출입부와 철문도 이 밀착된 창문 구도에서는 보이지 않거나 사실상 프레임 밖에 있다.",
            "scene_visible_description": "카메라는 옥탑방 바깥에서 창문을 정면으로 마주한다. 탁한 반투명 유리가 화면의 대부분을 차지하고, 얼룩진 외벽이 가장자리에서 답답하게 붙어 있다. 유리 너머로 얼굴을 알아볼 수 없는 묵직한 남자의 검은 실루엣이 번져 보이며, 밤의 차가운 빛 때문에 내부는 깊은 어둠처럼 느껴진다.",
            "self_consistency": {
              "notes": "구조화된 항목과 한국어 설명 모두 창문과 옥탑방 외벽이 주된 피사체이며, 넓은 옥상 시설과 계단은 보이지 않는다고 일치한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S10_Shot3",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.88,
                "evidence": "frosted rooftop window and adjacent exterior wall dominate the view",
                "matched_zone_id": "rooftop_room_threshold",
                "observed_zone_type": "threshold",
                "present_elements": [
                  "frosted window glass",
                  "weathered exterior wall",
                  "dark human silhouette behind the glass"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L04B03::S10_Shot4": {
        "bg_id": "L04B03",
        "shot_id": "S10_Shot4",
        "fp_id": "fp_rooftop_exterior",
        "card": {
          "card_id": "5fd591ed29ed99c2",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L04B03",
          "shot_id": "S10_Shot4",
          "fp_id": "fp_rooftop_exterior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "855bdc18a75b6fe5",
            "space_model_hash": "0e3c0fce85e5494d",
            "zone_readback_hash": "b672bf95d1b0eb72",
            "shot_context_hash": "cf1d1a8af702ae75",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "rooftop_room_threshold",
                  "stair_access"
                ],
                "essential_elements": [
                  "water_tank",
                  "laundry_line",
                  "drying_platform",
                  "low_parapet"
                ],
                "openings": [
                  "open_roof_edges_with_low_parapet",
                  "passage_to_stair_access"
                ],
                "zone_id": "open_rooftop_deck",
                "zone_type": "deck"
              },
              {
                "adjacency": [
                  "open_rooftop_deck"
                ],
                "essential_elements": [
                  "rooftop_room_footprint",
                  "metal_entry_door",
                  "small_window"
                ],
                "openings": [
                  "entry_door_to_rooftop_room",
                  "small_window"
                ],
                "zone_id": "rooftop_room_threshold",
                "zone_type": "threshold"
              },
              {
                "adjacency": [
                  "open_rooftop_deck"
                ],
                "essential_elements": [
                  "stair_treads",
                  "stair_head_opening",
                  "roof_access_edge"
                ],
                "openings": [
                  "passage_to_open_rooftop_deck"
                ],
                "zone_id": "stair_access",
                "zone_type": "stairs"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L04B03",
            "bg_plate_visible_description": "어두운 옥탑방 내부의 가까운 벽면과 흐릿한 창 가장자리만 배경으로 잡힌다. 창은 닫힌 듯하고, 바깥 옥상의 빛이 아주 약하게 새어 들어와 벽과 유리의 윤곽을 희미하게 만든다. 철문 바깥의 넓은 옥상 바닥이나 물탱크, 빨랫줄, 계단은 화면에 들어오지 않는다.",
            "camera_view_zone": "rooftop_room_threshold",
            "confidence": 0.62,
            "diagnostics": [
              "Camera intent describes an interior close-up, while the declared model is an exterior rooftop plate, so matching is limited to the rooftop-room footprint and window area.",
              "The supplied readback reference points to the open deck, but the described framing does not show the deck."
            ],
            "fp_id": "fp_rooftop_exterior",
            "missing_inputs": [],
            "not_visible_summary": "넓은 옥상 바닥, 물탱크, 빨랫줄, 건조대, 낮은 난간, 계단 출입부, 철문 바깥의 현관 앞 공간은 이 밀착 화면에서 보이지 않는다. 바깥 구조는 창가의 희미한 빛으로만 암시된다.",
            "scene_visible_description": "어두운 옥탑방 안에서 카메라가 인물의 얼굴과 어깨에 매우 가까이 붙어 흔들린다. 민숙의 일그러진 얼굴이 크게 걸리고, 맞은편에서는 검은 실루엣이 어깨 쪽으로 짓누르듯 다가와 구체적인 행동은 그림자와 압박감으로만 느껴진다. 뒤편에는 좁고 얼룩진 벽과 흐릿한 창 가장자리에서 새어 들어오는 약한 회색빛이 보여, 실내가 답답하고 빠져나갈 곳 없이 막힌 느낌을 준다.",
            "self_consistency": {
              "notes": "Structured zone match is limited to the rooftop-room threshold or footprint because the visible background is the dark room wall and window, not the exterior deck. Korean prose avoids internal identifiers and does not describe off-frame rooftop features as visible.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S10_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.62,
                "evidence": "tight interior view with dark wall and a faint window edge corresponding to the rooftop room footprint rather than the open roof surface",
                "matched_zone_id": "rooftop_room_threshold",
                "observed_zone_type": "dark rooftop room edge or threshold area",
                "present_elements": [
                  "cramped dark wall",
                  "faint frosted window edge",
                  "deep interior shadows"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "low_confidence"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='low_confidence'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B01::S5_Shot1": {
        "bg_id": "L05B01",
        "shot_id": "S5_Shot1",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "9bd0d648d65246c2",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B01",
          "shot_id": "S5_Shot1",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "8c4d434717ec2466",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B01",
            "bg_plate_visible_description": "좁은 옥탑방의 거실 일부와 뒤쪽으로 이어진 싱크대 공간이 보인다. 거실 쪽에는 바닥과 벽면, 작은 창에서 들어오는 흐린 낮빛, 식탁 주변의 생활 공간 일부가 잡히며, 텔레비전은 화면 밖에 가깝거나 비스듬히 놓여 직접적인 내용은 보이지 않는다. 뒤편 싱크대 공간에는 붙박이 조리대와 개수대, 수도꼭지, 조리대 상판과 벽면이 부드럽게 흐려진 배경으로 이어진다.",
            "camera_view_zone": "living_dining",
            "confidence": 0.86,
            "diagnostics": [],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "현관 쪽 문과 신발을 두는 턱, 양쪽 침실 내부, 욕실 내부는 이 카메라의 좁은 시야에 들어오지 않는다. 침대나 옷장, 커튼, 배낭, 인형, 세면대와 변기, 샤워 시설 같은 방과 욕실의 내용도 보이지 않는다. 텔레비전 방송 화면은 인물의 시선과 얼굴에 비치는 깜박임으로만 느껴지고, 화면 내용은 직접 잡히지 않는다.",
            "scene_visible_description": "앞치마를 두른 여성이 좁은 옥탑방 거실에서 텔레비전 쪽을 뚫어지게 바라보며 어두운 표정을 짓고 있다. 얼굴과 상체가 화면을 크게 차지하고, 작은 창에서 들어오는 희미한 낮빛과 텔레비전의 차가운 깜박임이 얼굴에 섞여 비친다. 뒤쪽으로는 생활감 있는 싱크대 공간이 흐릿하게 이어지고, 수도꼭지와 조리대, 끓는 냄비에서 오르는 김, 씻다 만 약초가 배경의 소리와 분위기를 만든다. 거실과 싱크대가 한눈에 붙어 보이는 비좁은 실내감이 강조된다.",
            "self_consistency": {
              "notes": "구조화된 항목과 서술 모두 거실을 주된 시야로 두고, 뒤편 싱크대 공간만 부분적으로 보이는 구도와 일치한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S5_Shot1",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "인물이 앉거나 서 있는 생활 공간이 주 프레임을 차지하고 작은 창빛과 텔레비전 방향의 깜박임이 작용한다.",
                "matched_zone_id": "living_dining",
                "observed_zone_type": "living",
                "present_elements": [
                  "거실 바닥과 벽면",
                  "식탁 주변의 생활 공간 일부",
                  "작은 창에서 들어오는 낮빛",
                  "텔레비전 방향에서 오는 희미한 깜박임",
                  "앞치마를 두른 인물"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.78,
                "evidence": "인물 뒤로 개수대와 조리대가 부드럽게 흐려져 보이고 냄비의 김이 배경에 걸린다.",
                "matched_zone_id": "sink_alcove",
                "observed_zone_type": "sink",
                "present_elements": [
                  "개수대",
                  "수도꼭지",
                  "조리대",
                  "끓는 냄비",
                  "약초가 놓인 쟁반",
                  "엷은 수증기"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B01::S5_Shot8": {
        "bg_id": "L05B01",
        "shot_id": "S5_Shot8",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "9af19e2a21e75566",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B01",
          "shot_id": "S5_Shot8",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "412f77e7fcd40ad5",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B01",
            "bg_plate_visible_description": "초점 밖으로 밀린 좁은 현관 쪽 배경만 희미하게 보인다. 현관 바닥의 낡고 따뜻한 색감, 문 주변의 좁은 틀과 낮은 단차가 부드러운 흐림 속에 남아 있으며, 거실과 이어지는 입구의 답답한 폭이 배경의 공간감을 만든다.",
            "camera_view_zone": "entry_threshold",
            "confidence": 0.79,
            "diagnostics": [
              "첨부 도면과 카메라 의도는 확인되었으나, 접사 초점 때문에 배경 구역 식별은 흐림에 의존한다.",
              "주 피사체는 인물의 손목이지만, 선언된 공간 중 화면에 남는 배경은 현관 쪽으로 판단된다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "침실들, 욕실, 싱크대 안쪽 설비, 식탁과 텔레비전이 있는 거실 대부분은 이 접사 화면에 잡히지 않는다. 화면은 손목 표식과 그 뒤로 흐려진 현관 분위기에 집중되어 다른 방의 가구나 창, 주방 도구는 확인되지 않는다.",
            "scene_visible_description": "화면 아래쪽 가까이에 민숙의 손목 안쪽이 크게 걸리고, 창백한 피부 위의 어두운 둥근 표식만 또렷하게 보인다. 인물의 얼굴은 보이지 않으며, 손목 뒤로는 옥탑방의 좁은 현관 부근이 흐릿하게 녹아든다. 낡은 바닥빛과 문틀, 작은 단차가 따뜻하지만 답답한 실내 분위기를 만들고, 배경은 표식의 불길한 선명함을 방해하지 않을 만큼 부드럽게 뭉개져 있다.",
            "self_consistency": {
              "notes": "구조화 항목과 한국어 설명 모두 손목 접사와 흐릿한 현관 배경만을 visible 범위로 다룬다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S5_Shot8",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.79,
                "evidence": "손목 뒤로 흐릿한 문틀과 낮은 단차, 좁은 현관 바닥이 배경에 남아 있음",
                "matched_zone_id": "entry_threshold",
                "observed_zone_type": "현관",
                "present_elements": [
                  "현관 바닥",
                  "문 주변 틀",
                  "낮은 단차",
                  "좁은 출입 공간"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B02::S25_Shot4": {
        "bg_id": "L05B02",
        "shot_id": "S25_Shot4",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "d6522e5f985ab88c",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B02",
          "shot_id": "S25_Shot4",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "047e7387258fe037",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B02",
            "bg_plate_visible_description": "낡고 거친 침실 벽면이 정면으로 보인다. 회색빛 석고 표면은 때가 묻고 긁힌 자국이 있으며, 벽 한가운데에는 거칠게 그어진 붉은 원이 남아 있다. 해질 무렵의 약한 금빛이 벽을 비스듬히 스치지만 방 안은 전반적으로 어둡고 눌린 분위기다.",
            "camera_view_zone": "daughter_bedroom",
            "confidence": 0.86,
            "diagnostics": [
              "Camera intent describes a close, square-on view inside the bedroom, focused on a wall mark and pinned photograph rather than a broad room view.",
              "The bedroom most consistent with the scene context is the smaller personal bedroom with curtain, backpack, and doll in the plan, though those furnishings are not in this tight framing."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "이 시야에는 거실과 식사 공간, 현관, 싱크대가 있는 좁은 공간, 다른 침실, 욕실이 들어오지 않는다. 침대나 가방, 인형, 창문 같은 방 안의 다른 물건도 프레임 밖에 있거나 거의 보이지 않는다.",
            "scene_visible_description": "카메라는 침실 안에서 벽을 정면으로 붙잡고 있다. 거칠고 어두운 벽면 위에 붉은 원이 크게 그려져 있고, 그 중심에는 피가 묻은 오래된 흑백사진이 핀으로 꽂혀 있다. 사진은 작지만 시선을 강하게 끌며, 주변의 낡은 벽 질감과 해질녘의 희미한 빛이 불길한 발견의 느낌을 만든다.",
            "self_consistency": {
              "notes": "Structured zone selection and Korean descriptions both describe a tight view inside the personal bedroom, centered on the marked wall and pinned photograph, while excluding the rest of the dwelling.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S25_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.86,
                "evidence": "tight frontal view of a bedroom wall with a red circle and pinned photograph",
                "matched_zone_id": "daughter_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "scuffed bedroom wall",
                  "rough red circle",
                  "blood-stained old black-and-white photograph",
                  "pin or tack",
                  "dusk shadow on plaster"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B02::S25_Shot7": {
        "bg_id": "L05B02",
        "shot_id": "S25_Shot7",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "96c2dd13baa8eef1",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B02",
          "shot_id": "S25_Shot7",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "6d0b119298193488",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B02",
            "bg_plate_visible_description": "침대가 놓인 작은 방의 벽과 바닥, 창이 있는 벽면, 열려 있는 문 너머로 이어지는 생활 공간의 일부가 보인다. 방 안쪽은 낮은 해질빛과 실내 그림자가 섞여 눌린 분위기이고, 바닥면은 어지럽혀진 흔적이 남을 만큼 드러나 있다. 문 밖으로는 식사 공간 쪽 바닥과 창 주변, 쓰러진 의자들이 걸쳐 보이며, 열려 있는 창 때문에 바깥의 어스름한 기운이 배경으로 스며든다.",
            "camera_view_zone": "daughter_bedroom",
            "confidence": 0.86,
            "diagnostics": [
              "Camera intent places the viewpoint inside the small bedroom near the foot of the bed, aimed at the bed corner.",
              "The widened framing plausibly includes the doorway into the living and dining area, allowing partial visibility of the open window and fallen chairs behind the subject.",
              "The supplied readback reference points to the living area, but the described camera position and bed-focused framing make the bedroom the dominant framed zone."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "출입구 쪽 현관과 싱크대가 있는 공간, 다른 침실, 욕실은 이 구도에서 직접 잡히지 않는다. 생활 공간도 전체가 아니라 방 문 너머로 창과 식탁 주변의 난장판 일부만 배경처럼 보인다.",
            "scene_visible_description": "카메라는 침대 발치 가까운 낮은 높이에서 침대 모서리를 향해 들어가며, 매트리스 가장자리에 주저앉은 수리영의 전신과 흐트러진 방을 함께 담는다. 구겨진 침구, 열린 창, 바닥에 흩어진 흔적, 방 문 너머로 보이는 쓰러진 식탁 의자들이 한 화면 안에서 압박감 있게 겹친다. 해질 무렵의 금빛과 푸른 실내 그림자가 섞여 방은 차갑고 불안하게 보이며, 침입 뒤에 남은 어지러움이 인물 뒤 배경 전체를 짓누른다.",
            "self_consistency": {
              "notes": "Structured zones list the small bedroom as the main visible space and the living and dining area as partially visible through the doorway, matching the Korean descriptions.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S25_Shot7",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.93,
                "evidence": "bed corner, curtain-side window area, backpack and doll room context match the small personal bedroom",
                "matched_zone_id": "daughter_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "bed",
                  "rumpled mattress edge",
                  "curtain and window area",
                  "backpack",
                  "doll",
                  "scattered floor traces"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.76,
                "evidence": "doorway behind the bedroom opens toward the dining area with window and toppled chairs visible in the background",
                "matched_zone_id": "living_dining",
                "observed_zone_type": "living and dining area",
                "present_elements": [
                  "open window",
                  "dining table area",
                  "overturned chairs",
                  "floor with muddy traces",
                  "dim interior wall and floor surfaces"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B02::S25_Shot9": {
        "bg_id": "L05B02",
        "shot_id": "S25_Shot9",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "8d25426840cce27f",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B02",
          "shot_id": "S25_Shot9",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "dfab56a19bc53586",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B02",
            "bg_plate_visible_description": "어스름한 방 안의 침대 가장자리와 구겨진 침구가 아주 가깝게 보이고, 그 너머의 벽과 가구는 회갈색 그림자 속에서 흐릿하게 가라앉아 있다. 배경은 침대 천의 질감과 어두운 실내 깊이만 겨우 느껴지는 고정된 방 내부로 남는다.",
            "camera_view_zone": "daughter_bedroom",
            "confidence": 0.82,
            "diagnostics": [
              "카메라 의도는 거실을 가리키는 참조를 포함하지만, 실제 프레이밍 설명은 침대 옆 초근접 삽입 화면이므로 침대와 개인 소품이 있는 작은 방으로 매칭했다.",
              "매크로 구도와 얕은 초점 때문에 방의 전체 구조나 문, 창, 커튼은 거의 식별되지 않는다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "현관, 거실 겸 식사 공간, 싱크대가 있는 공간, 다른 침실, 욕실은 이 구도에 들어오지 않는다. 열린 창, 넘어진 의자, 식탁, 텔레비전, 세면 설비 같은 다른 배경 요소도 화면 밖이다.",
            "scene_visible_description": "침대 가장자리 바로 곁에서 손이 구겨진 낡은 사진을 움켜쥔 채 화면을 압도한다. 손마디와 사진의 주름에는 희미한 저녁빛이 걸리고, 침대 천은 어둡고 무겁게 깔린다. 뒤쪽 방 안은 난장판의 기척만 남긴 채 흐릿한 그림자로 녹아들어, 사진과 꽉 쥔 손의 긴장감만 또렷하게 남는다.",
            "self_consistency": {
              "notes": "구조화된 항목과 서술 모두 침대가 있는 작은 방의 초근접 구도를 중심으로 하며, 다른 공간은 보이지 않는 것으로 처리했다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S25_Shot9",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.82,
                "evidence": "침대 가장자리와 침구가 근접 배경으로 보이며 나머지 방은 흐릿한 그림자에 묻힘",
                "matched_zone_id": "daughter_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "침대 가장자리",
                  "구겨진 침구",
                  "사진을 움켜쥔 손",
                  "어두운 실내 그림자",
                  "흐릿한 방 안 clutter"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B02::S27_Shot1": {
        "bg_id": "L05B02",
        "shot_id": "S27_Shot1",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "93982e15e7f0e465",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B02",
          "shot_id": "S27_Shot1",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "7979e5e14429b1d8",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B02",
            "bg_plate_visible_description": "해질녘의 탁한 빛이 들어오는 좁은 거실 겸 식사 공간이 배경으로 잡힌다. 낡은 바닥과 벽, 작은 창, 현관 쪽으로 이어지는 문틀과 문짝의 일부가 보이며, 주변 방문들과 통로는 가장자리에서만 암시된다. 고정된 구조물들은 어둡고 지저분한 그림자 속에 눌려 있어 방 안의 황량함이 강조된다.",
            "camera_view_zone": "living_dining",
            "confidence": 0.78,
            "diagnostics": [
              "카메라 의도는 거실 안 인물을 중심으로 하되 뒤의 어수선한 실내와 현관 쪽 흔들리는 문을 일부 보이게 하는 구도다.",
              "평면도와 장면 설명이 일치해 주시 공간은 비교적 명확하지만, 실제 렌즈 방향의 세부 각도는 일부 추정이 필요하다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "싱크대가 있는 조리 공간, 침실들, 욕실 내부는 이 구도에서 뚜렷하게 잡히지 않는다. 현관도 소리와 분위기를 만드는 일부 문짝과 통로만 보일 뿐, 바깥 옥상이나 문 전체는 주된 화면 밖에 있다.",
            "scene_visible_description": "혜수가 전화기를 귀에 댄 채 굳은 얼굴로 가까이 잡히고, 그녀 주변으로 난장판이 된 거실 겸 식사 공간이 흐릿하게 펼쳐진다. 뒤편에는 쓰러진 의자와 흐트러진 식탁 주변, 지저분한 바닥, 어두운 텔레비전 쪽 벽면, 작은 창으로 스며드는 차가운 저녁빛이 보인다. 현관 쪽 문짝은 바람에 흔들릴 듯 일부만 드러나며, 방 전체가 뒤진 뒤 방치된 듯한 불안한 분위기를 만든다.",
            "self_consistency": {
              "notes": "구조화 항목은 인물이 서 있는 거실을 주된 시야로 두고, 현관 쪽은 장면 설명에 맞게 부분 노출로만 처리했다. 보이지 않는 조리 공간과 침실, 욕실은 설명에서 제외하거나 미포착으로 정리했다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S27_Shot1",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "인물 뒤로 식탁, 의자, 텔레비전 벽면, 작은 창이 보이는 주된 실내 공간",
                "matched_zone_id": "living_dining",
                "observed_zone_type": "living and dining room",
                "present_elements": [
                  "전화기를 든 인물",
                  "흐트러진 식탁",
                  "쓰러진 의자",
                  "텔레비전 쪽 벽면",
                  "스탠드 조명",
                  "작은 열린 창",
                  "어수선한 바닥"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.62,
                "evidence": "거실 너머로 바람에 흔들리는 출입문이 일부 암시됨",
                "matched_zone_id": "entry_threshold",
                "observed_zone_type": "entry threshold",
                "present_elements": [
                  "금속 출입문 일부",
                  "문틀",
                  "잠금장치가 있는 문 가장자리",
                  "낮은 신발 디딤 부분"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B03::S18_Shot1": {
        "bg_id": "L05B03",
        "shot_id": "S18_Shot1",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "e89ec2274fbcca20",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B03",
          "shot_id": "S18_Shot1",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "7b3d3c7bd0769189",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B03",
            "bg_plate_visible_description": "침대 가장자리와 구겨진 침구가 화면 가까이에 크게 잡히고, 뒤로는 희미한 침실 벽과 어두운 실내의 좁은 여백만 보인다. 고정된 배경은 잠자리 주변의 낮은 침대 면, 매트리스 모서리, 바닥과 벽의 일부 정도로 제한된다.",
            "camera_view_zone": "main_bedroom",
            "confidence": 0.86,
            "diagnostics": [
              "카메라 의도는 침대 곁의 매우 가까운 인물 중심 구도이므로 평면도상의 침실 영역 일부만 보이는 것으로 판단했다.",
              "제공된 시선 참조에는 거실 쪽 언급이 있으나, 실제 프레이밍 설명과 장면 맥락은 침대가 있는 방 내부에 더 부합한다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "거실과 식탁, 현관, 싱크대가 있는 조리 공간, 다른 침실, 욕실은 이 가까운 침대 옆 구도에 들어오지 않는다. 옷장이나 작은 탁자도 프레임이 너무 조여져 뚜렷하게 보이지 않을 가능성이 크다.",
            "scene_visible_description": "수리영의 웅크린 옆얼굴과 감긴 눈이 화면을 거의 채우고, 뺨은 침대 가장자리에 닿을 듯 가까워 보인다. 뒤쪽에는 밤새 기다린 흔적처럼 구겨진 침구와 침대 모서리가 눌린 감정의 경계처럼 붙어 있고, 희미한 아침빛과 실내 그림자가 섞여 방 전체가 지치고 정적인 분위기로 보인다. 화면 가장자리에는 침실의 어두운 여백만 조금 남아 있다.",
            "self_consistency": {
              "notes": "구조화 항목과 서술 모두 침대가 있는 침실 일부만 보이는 가까운 구도를 가리킨다. 보이지 않는 다른 공간은 별도로 제외했다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S18_Shot1",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.86,
                "evidence": "침대 가장자리와 침구, 희미한 침실 벽이 인물 뒤로 가까이 보인다.",
                "matched_zone_id": "main_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "bed",
                  "bedding fabric",
                  "bedroom wall",
                  "dim room edge"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B03::S18_Shot15": {
        "bg_id": "L05B03",
        "shot_id": "S18_Shot15",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "4172ac872d73a7e5",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B03",
          "shot_id": "S18_Shot15",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "04a2bd86ee71e0f5",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B03",
            "bg_plate_visible_description": "고정 배경으로는 생활 공간의 흐릿한 실내 벽면과 바닥 일부, 식탁 주변의 부드러운 윤곽이 잡힌다. 배경은 깊이감만 주는 정도로 눌려 보이며, 문이나 다른 방의 세부 구조는 알아보기 어렵다.",
            "camera_view_zone": "living_dining",
            "confidence": 0.86,
            "diagnostics": [
              "평면도와 촬영 의도는 제공되었으며, 근접 구도 때문에 배경 세부 식별은 제한적입니다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "현관, 싱크대가 있는 공간, 침실들, 욕실은 이 구도에서 드러나지 않는다. 생활 공간도 인물 뒤 배경으로만 일부 보이며, 가구와 벽면의 윤곽 외 세부는 흐림에 묻힌다.",
            "scene_visible_description": "수리영의 얼굴이 크게 잡히고, 손바닥이 뺨에 닿는 순간이 가장 선명하게 고정된다. 맞은 뺨의 붉은 기운과 피부 접촉이 시선을 붙잡고, 뒤편에는 식탁 가장자리와 실내 벽, 가정집의 희미한 물건들이 흐릿하게 깔린다. 아침의 어두운 실내광이 전체를 낮게 누르며, 생활 공간은 사건이 벌어진 장소를 암시하는 배경으로만 남는다.",
            "self_consistency": {
              "notes": "구조화된 항목은 생활 공간만 부분적으로 보이는 근접 구도와 일치하며, 산문 설명도 같은 범위만 서술합니다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S18_Shot15",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "blurred dining table edge and interior wall behind the close foreground face",
                "matched_zone_id": "living_dining",
                "observed_zone_type": "living and dining area",
                "present_elements": [
                  "dining table edge",
                  "interior wall",
                  "indistinct household background shapes"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B04::S18_Shot13": {
        "bg_id": "L05B04",
        "shot_id": "S18_Shot13",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "9b9b25993ac20869",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B04",
          "shot_id": "S18_Shot13",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "ca36afc7df7d2da0",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B04",
            "bg_plate_visible_description": "식탁 상판이 화면을 단단하게 받치고 있고, 사진틀의 딱딱한 테두리가 평평한 표면 위에 안정적으로 놓여 있다. 주변 벽이나 다른 가구는 거의 잡히지 않으며, 고정된 배경으로는 식사 공간의 테이블 표면과 그 위의 정적인 받침감만 느껴진다.",
            "camera_view_zone": "living_dining",
            "confidence": 0.91,
            "diagnostics": [
              "카메라 의도가 식탁 위 사진을 정면에 가깝게 보는 클로즈업으로 제시되어, 도면상 식탁이 놓인 거실 겸 식사 공간에 대응시켰다.",
              "프레임 규모가 매우 가까워 인접 공간은 실제 화면에 들어오지 않는 것으로 판단했다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "현관, 싱크대가 있는 공간, 침실들, 욕실은 이 클로즈업 화면에 잡히지 않는다. 거실의 텔레비전, 창, 조명 같은 주변 요소도 사진과 식탁 표면에 가려지거나 프레임 밖에 있다.",
            "scene_visible_description": "카메라는 식탁 높이에서 거의 정면으로 놓인 액자 사진을 꽉 잡는다. 단단한 사진틀과 깨끗한 식탁 상판은 현실감 있게 고정되어 있지만, 사진 속 환하게 웃는 여성의 얼굴은 아래로 번지고 무너져 내리는 듯 일그러져 보인다. 화면은 식사 공간 전체가 아니라 사진 표면과 테두리, 그 아래의 테이블 질감에 집중되어 있으며, 주변 방의 구조는 거의 드러나지 않는다.",
            "self_consistency": {
              "notes": "구조화된 항목은 식탁 위 사진을 중심으로 한 매우 가까운 화면과 일치한다. 보이는 공간은 거실 겸 식사 공간의 일부로 한정된다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S18_Shot13",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.92,
                "evidence": "식탁 위 액자 사진과 테이블 표면이 화면의 중심을 차지한다.",
                "matched_zone_id": "living_dining",
                "observed_zone_type": "거실 겸 식사 공간",
                "present_elements": [
                  "식탁 상판",
                  "액자 사진",
                  "사진틀",
                  "사진 속 인물 이미지",
                  "평평한 테이블 표면"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B05::S12_Shot6": {
        "bg_id": "L05B05",
        "shot_id": "S12_Shot6",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "ad9703852886d6c3",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B05",
          "shot_id": "S12_Shot6",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "c683bb22ee4b6896",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B05",
            "bg_plate_visible_description": "작은 침실의 어두운 바닥과 침대 끝, 창가에 모여 접힌 커튼, 창 주변 벽면이 주로 보인다. 생활감 있는 방의 고정 배경은 좁고 눌린 느낌이며, 거실 쪽에서 새어 들어온 약한 빛이 바닥과 커튼 가장자리를 희미하게 스친다. 핏자국이나 시신 같은 사건성 요소를 제외하면, 침대와 커튼, 창, 바닥, 벽이 이 화면의 안정적인 배경을 이룬다.",
            "camera_view_zone": "daughter_bedroom",
            "confidence": 0.89,
            "diagnostics": [
              "카메라 의도 설명은 커튼과 침대가 있는 침실 내부의 폭로 장면과 강하게 일치한다.",
              "제공된 시점 참조에는 거실이 언급되지만, 실제 구도 설명의 지배 요소는 커튼 딸린 침실이다.",
              "거실의 빛은 분위기로 작용하지만 화면에 공간 자체가 뚜렷하게 들어온다고 보기 어렵다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "현관, 거실의 식탁과 텔레비전, 싱크가 있는 조리 공간, 다른 침실, 욕실은 이 구도에서 직접 포착되지 않는다. 거실 스탠드나 텔레비전의 희미한 영향은 빛으로만 느껴질 수 있으며, 공간 자체의 구조나 가구는 화면 밖에 가깝다.",
            "scene_visible_description": "카메라는 작은 침실 안에서 낮은 시선으로 커튼이 젖혀진 창가 쪽을 바라본다. 침대 끝과 어두운 얼룩이 번진 바닥이 앞쪽에서 시선을 끌고, 그 흔적은 커튼 가장자리 옆에 힘없이 앉아 있는 여인의 몸으로 이어진다. 커튼은 급히 걷힌 듯 구겨져 있고, 방 안은 희미한 실내등과 바깥쪽 생활 공간에서 새어 들어온 약한 빛 때문에 회색빛 그림자에 잠겨 있다. 좁은 방의 일상적인 침대와 커튼, 창가가 살해 현장의 충격적인 정적과 대비된다.",
            "self_consistency": {
              "notes": "구조화된 항목과 한국어 설명 모두 커튼과 침대가 있는 침실 내부만을 주된 가시 공간으로 다룬다. 다른 공간은 빛의 영향만 언급하고 직접 보이는 공간으로 세지 않았다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S12_Shot6",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.91,
                "evidence": "bedroom with bed, curtain, window edge, and stained floor dominates the reveal framing",
                "matched_zone_id": "daughter_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "bed foot",
                  "drawn-back curtain",
                  "window edge",
                  "bedroom floor",
                  "dark floor stains",
                  "motionless seated body beside the curtain"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B05::S12_Shot11": {
        "bg_id": "L05B05",
        "shot_id": "S12_Shot11",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "ad18184de2621b6a",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B05",
          "shot_id": "S12_Shot11",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "68abd3199caf4605",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B05",
            "bg_plate_visible_description": "낮고 가까운 시야에는 방 바닥의 거칠고 더러운 표면이 크게 깔리고, 가장자리에는 젖혀진 커튼의 흐릿한 밑단이 살짝 걸린다. 벽이나 침대 같은 큰 구조물은 거의 보이지 않고, 차갑고 어두운 실내 조명 속에서 바닥 질감만 강조된다.",
            "camera_view_zone": "daughter_bedroom",
            "confidence": 0.86,
            "diagnostics": [
              "카메라 의도는 거실 참조를 포함하지만, 실제 프레이밍 설명은 커튼이 있는 딸의 방 바닥에 놓인 손과 사진의 삽입에 해당한다.",
              "삽입 쇼트라 방 전체가 아니라 바닥과 커튼 일부만 확인된다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "거실의 식탁, 텔레비전, 스탠드, 현관, 싱크대, 다른 침실, 욕실은 이 가까운 삽입 구도에 들어오지 않는다. 같은 방 안의 침대, 창문, 가방, 인형도 프레임 밖이거나 식별되지 않는다.",
            "scene_visible_description": "바닥에 거의 붙은 낮은 시점에서 굳은 손가락이 반쯤 구겨진 사진을 움켜쥔 모습이 중심에 잡힌다. 사진은 프레임을 완전히 덮지 않아 손가락, 소매 끝, 더럽고 어두운 바닥 질감이 주변에 남아 있다. 한쪽 가장자리에는 젖혀진 커튼 밑단이 흐릿하게 걸려 있어, 이 장면이 커튼 뒤에서 발견된 시신 곁의 방 안이라는 느낌을 준다.",
            "self_consistency": {
              "notes": "구조화된 가시 구역은 커튼이 있는 침실의 부분적 바닥 삽입만 포함하며, 한국어 설명도 같은 범위만 묘사한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S12_Shot11",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.86,
                "evidence": "커튼 밑단과 방 바닥이 손과 사진 주변에 좁게 보임",
                "matched_zone_id": "daughter_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "floor surface",
                  "curtain hem",
                  "half-crumpled photograph",
                  "rigid hand",
                  "sliver of sleeve"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B05::S12_Shot14": {
        "bg_id": "L05B05",
        "shot_id": "S12_Shot14",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "b608bb5da00e87aa",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B05",
          "shot_id": "S12_Shot14",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "e30eac6106b48757",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B05",
            "bg_plate_visible_description": "침대 머리맡 위쪽의 어두운 벽면이 가까이 보이고, 그 위에 젖은 피처럼 보이는 커다란 붉은 원형 자국이 고정된 배경의 중심을 차지한다. 화면 아래쪽에는 침대 가장자리만 얕게 걸쳐 있어 벽과 잠자리의 관계를 짐작하게 한다. 방 안은 차갑고 희미한 빛과 무거운 그림자로 눌려 있으며, 다른 가구나 문, 창은 거의 보이지 않는다.",
            "camera_view_zone": "daughter_bedroom",
            "confidence": 0.88,
            "diagnostics": [
              "카메라 의도의 보조 참조는 거실 쪽을 가리키지만, 실제 프레이밍 설명은 침대 옆에서 침대 위 벽을 올려다보는 가까운 구도이므로 침실 벽면으로 판단했다.",
              "평면도에서 침대와 커튼이 함께 있는 침실이 사건 맥락의 방과 가장 잘 맞는다."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "거실과 식사 공간, 출입구, 싱크가 있는 공간, 다른 침실, 욕실은 이 가까운 구도에 잡히지 않는다. 커튼 뒤쪽이나 바닥의 흔적, 식탁, 텔레비전, 현관문 같은 요소도 화면 밖에 있다.",
            "scene_visible_description": "카메라는 침대 곁에서 약간 낮게 벽을 올려다보며 멈춰 있다. 침대 위 벽면에는 피로 그린 듯 불규칙하고 선명한 붉은 원이 크게 떠 있고, 그 자국이 화면의 시선을 거의 모두 가져간다. 아래에는 침대 가장자리만 살짝 보이며, 사람은 들어오지 않는다. 방 안의 공기는 어둡고 눅눅하게 가라앉아 있고, 붉은 자국만이 침묵 속에서 섬뜩하게 도드라진다.",
            "self_consistency": {
              "notes": "구조화된 항목과 한국어 설명 모두 침대가 있는 방의 벽면과 침대 가장자리만 보이는 가까운 구도를 동일하게 설명한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S12_Shot14",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "Close view of a bedroom wall above a bed, with only the bed edge grazing the foreground.",
                "matched_zone_id": "daughter_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "wall above bed",
                  "large red circle mark",
                  "bed edge",
                  "dim interior shadow"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B06::S14_Shot4": {
        "bg_id": "L05B06",
        "shot_id": "S14_Shot4",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "03b4c6657c96263e",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B06",
          "shot_id": "S14_Shot4",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "0710ae4369cab124",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B06",
            "bg_plate_visible_description": "차갑고 평평한 실내 조명 아래, 작은 침실의 깨끗한 바닥과 옅은 벽면, 창가 쪽 커튼이 걸린 벽이 보인다. 침대 위쪽 벽은 아무 표식 없이 말끔하고, 커튼 뒤편의 빈 공간도 얼룩이나 흔적 없이 비어 있어 방 전체가 지나치게 정돈된 배경처럼 느껴진다.",
            "camera_view_zone": "daughter_bedroom",
            "confidence": 0.9,
            "diagnostics": [],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "현관, 거실 겸 식사 공간, 싱크대가 있는 좁은 주방 쪽, 다른 침실, 욕실은 이 시선 안에 들어오지 않는다. 식탁이나 텔레비전, 출입문, 세면대와 샤워 공간 같은 다른 생활 영역의 내용도 보이지 않는다.",
            "scene_visible_description": "카메라는 작은 침실 안쪽에서 침대와 커튼이 있는 벽을 향해 넓게 고정되어 있다. 왼쪽 중간에는 가지런한 침대가 놓여 있고, 그 위의 벽은 붉은 표시나 얼룩 없이 비어 있다. 오른쪽에는 벌어진 커튼과 그 주변의 텅 빈 공간이 크게 보이며, 시신이나 피의 흔적은 전혀 없다. 아래쪽으로는 닦아낸 듯 깨끗한 바닥이 넓게 펼쳐져 차갑고 불길한 정돈감을 만든다. 방 안의 작은 물건들은 흐트러짐 없이 놓여 있어, 오히려 사라진 흔적이 더 두드러져 보인다.",
            "self_consistency": {
              "notes": "구조화된 항목과 한국어 설명 모두 작은 침실 내부의 침대, 커튼, 깨끗한 바닥과 빈 벽면만을 중심으로 설명하며, 다른 생활 공간은 보이지 않는 것으로 처리했다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S14_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "camera is placed inside the small bedroom and aimed toward the bed, curtain wall, and clean empty floor",
                "matched_zone_id": "daughter_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "bed",
                  "curtain",
                  "window wall",
                  "spotless floor",
                  "blank wall above the bed",
                  "backpack",
                  "doll"
                ],
                "visibility": "visible"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L05B06::S14_Shot8": {
        "bg_id": "L05B06",
        "shot_id": "S14_Shot8",
        "fp_id": "fp_rooftop_room_interior",
        "card": {
          "card_id": "eb0098d06d06e6f9",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L05B06",
          "shot_id": "S14_Shot8",
          "fp_id": "fp_rooftop_room_interior",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "879e4c879b41c543",
            "space_model_hash": "ffb8c78a8b3debd5",
            "zone_readback_hash": "c8cfbdd4f433ea09",
            "shot_context_hash": "662f958268956938",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "living_dining",
                  "sink_alcove"
                ],
                "essential_elements": [
                  "metal_entry_door",
                  "door_lock",
                  "shoe_step"
                ],
                "openings": [
                  "exterior_rooftop_door",
                  "interior_passage_to_living"
                ],
                "zone_id": "entry_threshold",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "sink_alcove",
                  "main_bedroom",
                  "daughter_bedroom",
                  "bathroom"
                ],
                "essential_elements": [
                  "tv",
                  "dining_table",
                  "chairs",
                  "small_window",
                  "floor_lamp"
                ],
                "openings": [
                  "small_window",
                  "door_to_entry",
                  "doors_to_bedrooms",
                  "door_to_bathroom",
                  "open_passage_to_sink_alcove"
                ],
                "zone_id": "living_dining",
                "zone_type": "living"
              },
              {
                "adjacency": [
                  "entry_threshold",
                  "living_dining"
                ],
                "essential_elements": [
                  "sink",
                  "faucet",
                  "counter",
                  "cooktop",
                  "pot",
                  "herb_tray"
                ],
                "openings": [
                  "open_passage_to_living"
                ],
                "zone_id": "sink_alcove",
                "zone_type": "sink"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "wardrobe",
                  "small_table"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "main_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "bed",
                  "curtain",
                  "window",
                  "backpack",
                  "doll"
                ],
                "openings": [
                  "door_to_living",
                  "window_with_curtain"
                ],
                "zone_id": "daughter_bedroom",
                "zone_type": "bedroom"
              },
              {
                "adjacency": [
                  "living_dining"
                ],
                "essential_elements": [
                  "washbasin",
                  "mirror",
                  "toilet",
                  "shower"
                ],
                "openings": [
                  "door_to_living"
                ],
                "zone_id": "bathroom",
                "zone_type": "bath"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L05B06",
            "bg_plate_visible_description": "작은 침실 안의 옅은 바닥과 벽면이 낮은 시선으로 보이고, 침대와 커튼이 달린 창 주변, 정리된 가구 배치가 부드럽게 배경에 걸린다. 바닥은 깨끗하고 마른 상태로 비어 있어 어떤 흔적도 남아 있지 않다.",
            "camera_view_zone": "daughter_bedroom",
            "confidence": 0.78,
            "diagnostics": [
              "Shot context emphasizes the girl's room, clean floor, backpack, doll, curtain, and vanished evidence.",
              "The provided camera view reference points to the living area, but the described framed background elements correspond more strongly to the small bedroom with backpack and doll."
            ],
            "fp_id": "fp_rooftop_room_interior",
            "missing_inputs": [],
            "not_visible_summary": "현관, 거실 겸 식사 공간, 싱크대가 있는 쪽, 다른 침실, 욕실은 이 구도에서 실질적으로 잡히지 않는다. 식탁, 텔레비전, 조리대, 욕실 설비 같은 다른 공간의 요소도 화면 밖에 있다.",
            "scene_visible_description": "낮은 높이의 카메라가 수리영의 상반신을 약간 비껴서 붙잡고, 그녀는 화면의 한쪽에 치우친 채 아래를 내려다본다. 시선 아래에는 깨끗하게 비어 있는 바닥이 드러나며, 핏자국이나 흐트러진 흔적은 보이지 않는다. 뒤쪽으로는 침실의 정돈된 분위기와 함께 가방과 인형이 희미하게 놓여 있고, 침대와 커튼 주변도 차갑고 말끔하게 가라앉아 있다. 전체적으로 지나치게 정리된 방 안의 공백이 불안하게 강조된다.",
            "self_consistency": {
              "notes": "Structured zone selection follows the visible bedroom props and clean floor described in the shot context; prose avoids internal identifiers and card references.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S14_Shot8",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.82,
                "evidence": "clean floor patch, bed area, curtain, backpack, and doll align with the small bedroom region",
                "matched_zone_id": "daughter_bedroom",
                "observed_zone_type": "bedroom",
                "present_elements": [
                  "clean bare floor",
                  "bed area",
                  "curtain and window side",
                  "backpack",
                  "doll",
                  "muted interior walls"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "low_confidence"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='low_confidence'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L08B01::S8_Shot4": {
        "bg_id": "L08B01",
        "shot_id": "S8_Shot4",
        "fp_id": "fp_l08_street_storefront",
        "card": {
          "card_id": "f11b238ea86ab95b",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L08B01",
          "shot_id": "S8_Shot4",
          "fp_id": "fp_l08_street_storefront",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "8d56a3f973fb3cc5",
            "space_model_hash": "801aabea3b4af5dc",
            "zone_readback_hash": "407fbe964574e02b",
            "shot_context_hash": "c6cb6709c8c97b81",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "cctv_wall_area"
                ],
                "essential_elements": [
                  "glass_sliding_entrance",
                  "display_window_strips",
                  "sign_band_rectangles",
                  "service_wall_panels"
                ],
                "openings": [
                  "glass_sliding_entrance_to_mart_interior",
                  "open_frontage_to_sidewalk",
                  "facade_continuation_to_cctv_wall_area"
                ],
                "zone_id": "mart_storefront",
                "zone_type": "storefront"
              },
              {
                "adjacency": [
                  "mart_storefront",
                  "bicycle_parking",
                  "cctv_wall_area",
                  "curb_vendor_strip",
                  "street_curb_lane"
                ],
                "essential_elements": [
                  "paving_grid",
                  "curb_edge",
                  "streetlight_pole",
                  "open_pedestrian_paths"
                ],
                "openings": [
                  "open_pedestrian_edges",
                  "open_access_to_mart_storefront",
                  "open_access_to_bicycle_parking",
                  "open_access_to_cctv_wall_area",
                  "open_access_to_curb_vendor_strip",
                  "open_access_to_street_curb_lane"
                ],
                "zone_id": "sidewalk_frontage",
                "zone_type": "sidewalk"
              },
              {
                "adjacency": [
                  "sidewalk_frontage"
                ],
                "essential_elements": [
                  "bicycle_rack",
                  "parked_bicycle_glyphs",
                  "wheel_stands",
                  "low_rail"
                ],
                "openings": [
                  "open_access_to_sidewalk_frontage"
                ],
                "zone_id": "bicycle_parking",
                "zone_type": "bike_parking"
              },
              {
                "adjacency": [
                  "mart_storefront",
                  "sidewalk_frontage"
                ],
                "essential_elements": [
                  "exterior_wall_face",
                  "old_cctv_camera",
                  "camera_conduit",
                  "utility_box"
                ],
                "openings": [
                  "open_access_from_sidewalk_frontage",
                  "facade_continuation_to_mart_storefront"
                ],
                "zone_id": "cctv_wall_area",
                "zone_type": "wall"
              },
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "street_curb_lane"
                ],
                "essential_elements": [
                  "street_food_cart_stall_footprints",
                  "canopy_outlines",
                  "counter_tables",
                  "trash_bin"
                ],
                "openings": [
                  "open_access_to_sidewalk_frontage",
                  "open_access_to_street_curb_lane"
                ],
                "zone_id": "curb_vendor_strip",
                "zone_type": "vendor_strip"
              },
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "curb_vendor_strip"
                ],
                "essential_elements": [
                  "roadway_lane",
                  "curb_line",
                  "curb_lane_markings",
                  "storm_drain"
                ],
                "openings": [
                  "open_road_edges",
                  "open_access_to_sidewalk_frontage",
                  "open_access_to_curb_vendor_strip"
                ],
                "zone_id": "street_curb_lane",
                "zone_type": "street"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L08B01",
            "bg_plate_visible_description": "고정 배경은 형광등 아래의 빽빽한 매장 진열대와 통로 끝 유리 출입부, 유리에 번지는 저녁빛과 네온 반사로만 읽힌다. 제공된 외부 배경판과 직접 맞는 요소는 전면 유리와 바깥 보도의 흐릿한 기운에 그친다.",
            "camera_view_zone": "",
            "confidence": 0.32,
            "diagnostics": [
              "촬영 의도는 실내 매장 통로를 설명하지만, 제공된 평면은 마트 외부 전면과 보도 중심이다.",
              "선언된 외부 구역과 실제 프레이밍 설명의 대응이 제한적이어서 낮은 신뢰도로만 부분 매칭했다."
            ],
            "fp_id": "fp_l08_street_storefront",
            "missing_inputs": [
              "실내 매장 통로 평면 또는 외부를 향한 시야 정보"
            ],
            "not_visible_summary": "자전거 거치 공간, 노점 자리, 차도, 감시 장치가 붙은 벽면은 화면에서 보이지 않는다. 전면 간판과 진열창 전체, 포장된 보도 표면도 뚜렷하게 포착되지 않는다.",
            "scene_visible_description": "카메라는 마트 내부 통로에서 박스를 든 직원 가까이에 머무는 장면처럼 보인다. 카메라 가까이의 종이 상자가 시야를 크게 가리고, 직원의 몸통은 프레임 한쪽에 걸린다. 양옆으로 가득 찬 진열대가 이어져 좁은 통로감을 만들며, 멀리 매장 전면 유리에는 어스름한 바깥빛과 네온 반사가 희미하게 비친다.",
            "self_consistency": {
              "notes": "구조화 항목은 촬영 의도에서 확인되는 전면 유리와 바깥 보도 암시만 반영했으며, 실내 통로는 선언된 외부 구역과 직접 일치하지 않는다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S8_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.35,
                "evidence": "통로 끝 유리 출입부와 저녁빛 반사가 언급됨",
                "matched_zone_id": "mart_storefront",
                "observed_zone_type": "마트 전면",
                "present_elements": [
                  "유리 출입부",
                  "전면 유리 반사",
                  "저녁빛과 네온빛 번짐"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.22,
                "evidence": "유리 너머의 바깥빛만 희미하게 암시됨",
                "matched_zone_id": "sidewalk_frontage",
                "observed_zone_type": "보도",
                "present_elements": [
                  "흐릿한 바깥 보도 기운",
                  "네온빛 반사"
                ],
                "visibility": "occluded"
              }
            ],
            "vlm_reported_state": "low_confidence"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "needs_review",
          "diagnostics": [
            "vlm missing_inputs non-empty (→needs_review): ['실내 매장 통로 평면 또는 외부를 향한 시야 정보']",
            "needs_review (missing_inputs/low-conf) → inject hold",
            "(ref) vlm_reported_state='low_confidence'"
          ],
          "leaks": []
        },
        "card_state": "needs_review",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L08B02::S8_Shot5": {
        "bg_id": "L08B02",
        "shot_id": "S8_Shot5",
        "fp_id": "fp_l08_street_storefront",
        "card": {
          "card_id": "0ffe9a9b9b498687",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L08B02",
          "shot_id": "S8_Shot5",
          "fp_id": "fp_l08_street_storefront",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "8d56a3f973fb3cc5",
            "space_model_hash": "801aabea3b4af5dc",
            "zone_readback_hash": "407fbe964574e02b",
            "shot_context_hash": "8415877460531fd3",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "cctv_wall_area"
                ],
                "essential_elements": [
                  "glass_sliding_entrance",
                  "display_window_strips",
                  "sign_band_rectangles",
                  "service_wall_panels"
                ],
                "openings": [
                  "glass_sliding_entrance_to_mart_interior",
                  "open_frontage_to_sidewalk",
                  "facade_continuation_to_cctv_wall_area"
                ],
                "zone_id": "mart_storefront",
                "zone_type": "storefront"
              },
              {
                "adjacency": [
                  "mart_storefront",
                  "bicycle_parking",
                  "cctv_wall_area",
                  "curb_vendor_strip",
                  "street_curb_lane"
                ],
                "essential_elements": [
                  "paving_grid",
                  "curb_edge",
                  "streetlight_pole",
                  "open_pedestrian_paths"
                ],
                "openings": [
                  "open_pedestrian_edges",
                  "open_access_to_mart_storefront",
                  "open_access_to_bicycle_parking",
                  "open_access_to_cctv_wall_area",
                  "open_access_to_curb_vendor_strip",
                  "open_access_to_street_curb_lane"
                ],
                "zone_id": "sidewalk_frontage",
                "zone_type": "sidewalk"
              },
              {
                "adjacency": [
                  "sidewalk_frontage"
                ],
                "essential_elements": [
                  "bicycle_rack",
                  "parked_bicycle_glyphs",
                  "wheel_stands",
                  "low_rail"
                ],
                "openings": [
                  "open_access_to_sidewalk_frontage"
                ],
                "zone_id": "bicycle_parking",
                "zone_type": "bike_parking"
              },
              {
                "adjacency": [
                  "mart_storefront",
                  "sidewalk_frontage"
                ],
                "essential_elements": [
                  "exterior_wall_face",
                  "old_cctv_camera",
                  "camera_conduit",
                  "utility_box"
                ],
                "openings": [
                  "open_access_from_sidewalk_frontage",
                  "facade_continuation_to_mart_storefront"
                ],
                "zone_id": "cctv_wall_area",
                "zone_type": "wall"
              },
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "street_curb_lane"
                ],
                "essential_elements": [
                  "street_food_cart_stall_footprints",
                  "canopy_outlines",
                  "counter_tables",
                  "trash_bin"
                ],
                "openings": [
                  "open_access_to_sidewalk_frontage",
                  "open_access_to_street_curb_lane"
                ],
                "zone_id": "curb_vendor_strip",
                "zone_type": "vendor_strip"
              },
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "curb_vendor_strip"
                ],
                "essential_elements": [
                  "roadway_lane",
                  "curb_line",
                  "curb_lane_markings",
                  "storm_drain"
                ],
                "openings": [
                  "open_road_edges",
                  "open_access_to_sidewalk_frontage",
                  "open_access_to_curb_vendor_strip"
                ],
                "zone_id": "street_curb_lane",
                "zone_type": "street"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L08B02",
            "bg_plate_visible_description": "어둡게 젖은 차도 너머로 보이는 마트 외부 배경이다. 넓은 보도 바닥이 마트 유리 출입문과 진열창 앞에 펼쳐져 있고, 매장 간판 띠와 밝은 유리면이 밤의 차가운 색감 속에서 희미하게 빛난다. 보도 가장자리에는 노점 자리와 자전거를 세워 두는 구역이 일부 걸리며, 한쪽 벽면에는 감시 카메라와 배관, 전기함이 붙어 있어 낡은 외부 벽 느낌을 만든다. 전경에는 젖은 차도와 curb 선, 희미한 차선 반사가 보인다.",
            "camera_view_zone": "sidewalk_frontage",
            "confidence": 0.82,
            "diagnostics": [
              "Camera intent explicitly places the view across the street and emphasizes the sidewalk and supermarket frontage.",
              "The floor-plan reference supports a frontal view where street, curb-side uses, sidewalk, storefront, and side wall can all fall into a wide frame.",
              "Vendor and bicycle areas are treated as partial because the shot intent prioritizes the isolated sidewalk figure rather than those side uses."
            ],
            "fp_id": "fp_l08_street_storefront",
            "missing_inputs": [],
            "not_visible_summary": "마트 내부 깊숙한 공간은 유리 너머의 밝은 기운 정도만 느껴질 뿐 실제 동선이나 진열대는 포착되지 않는다. 보도와 매장 정면이 중심이라 자전거 보관 공간과 노점 자리, 차도는 화면 가장자리나 전경 일부로만 보이며, 거리의 다른 상점 내부나 멀리 이어지는 도로 풍경은 담기지 않는다.",
            "scene_visible_description": "카메라는 길 건너 낮은 시선에서 마트 앞을 넓게 바라본다. 어두운 보도 위에 수리영이 홀로 서 있고, 손에 든 휴대전화의 차가운 작은 빛만 얼굴과 손 주변을 희미하게 밝힌다. 뒤쪽으로는 밝지만 닿을 수 없어 보이는 마트 유리 출입문과 진열창, 간판 띠가 크게 자리하고, 빈 보도와 젖은 차도는 붉은 네온과 가로등 빛을 끊어진 반사로 흘린다. 보도 가장자리에는 노점 자리와 자전거 보관 구역이 일부 보이고, 한쪽 벽의 감시 카메라와 설비가 외로운 거리감을 더한다.",
            "self_consistency": {
              "notes": "Structured zones and Korean descriptions consistently describe a wide across-street view dominated by the sidewalk, with storefront behind it and curb-side areas only partially visible.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S8_Shot5",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.92,
                "evidence": "broad tiled pedestrian pavement dominates the middle ground in front of the mart",
                "matched_zone_id": "sidewalk_frontage",
                "observed_zone_type": "sidewalk",
                "present_elements": [
                  "wide paving surface",
                  "curb edge",
                  "streetlight pole",
                  "small pavement drains",
                  "open pedestrian space",
                  "isolated standing figure with phone glow"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.88,
                "evidence": "glass entrance, display windows, and sign band form the bright background behind the sidewalk",
                "matched_zone_id": "mart_storefront",
                "observed_zone_type": "storefront",
                "present_elements": [
                  "glass sliding entrance",
                  "large display windows",
                  "horizontal sign band",
                  "front wall panels",
                  "bright interior glow through glass"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.72,
                "evidence": "side wall continuation with mounted camera hardware is visible at the storefront edge",
                "matched_zone_id": "cctv_wall_area",
                "observed_zone_type": "exterior wall",
                "present_elements": [
                  "plain exterior wall face",
                  "mounted surveillance camera",
                  "exposed conduit",
                  "utility box"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.61,
                "evidence": "curb-side stall shapes and canopy silhouettes sit along the near edge of the sidewalk view",
                "matched_zone_id": "curb_vendor_strip",
                "observed_zone_type": "vendor strip",
                "present_elements": [
                  "street food cart outlines",
                  "canopy forms",
                  "counter tables",
                  "trash bin"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.58,
                "evidence": "bike racks and parked bicycle shapes appear along the curb-side edge of the wide frame",
                "matched_zone_id": "bicycle_parking",
                "observed_zone_type": "bike parking",
                "present_elements": [
                  "bicycle rack",
                  "parked bicycles",
                  "wheel stands",
                  "low rail"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.76,
                "evidence": "wet asphalt foreground and curb markings are seen from the camera position across the street",
                "matched_zone_id": "street_curb_lane",
                "observed_zone_type": "street",
                "present_elements": [
                  "roadway surface",
                  "curb line",
                  "lane markings",
                  "storm drain",
                  "wet reflective asphalt"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L08B03::S19_Shot4": {
        "bg_id": "L08B03",
        "shot_id": "S19_Shot4",
        "fp_id": "fp_l08_street_storefront",
        "card": {
          "card_id": "cdb02289cd789d32",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L08B03",
          "shot_id": "S19_Shot4",
          "fp_id": "fp_l08_street_storefront",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "8d56a3f973fb3cc5",
            "space_model_hash": "801aabea3b4af5dc",
            "zone_readback_hash": "407fbe964574e02b",
            "shot_context_hash": "dd0caf8f362ce2e8",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "cctv_wall_area"
                ],
                "essential_elements": [
                  "glass_sliding_entrance",
                  "display_window_strips",
                  "sign_band_rectangles",
                  "service_wall_panels"
                ],
                "openings": [
                  "glass_sliding_entrance_to_mart_interior",
                  "open_frontage_to_sidewalk",
                  "facade_continuation_to_cctv_wall_area"
                ],
                "zone_id": "mart_storefront",
                "zone_type": "storefront"
              },
              {
                "adjacency": [
                  "mart_storefront",
                  "bicycle_parking",
                  "cctv_wall_area",
                  "curb_vendor_strip",
                  "street_curb_lane"
                ],
                "essential_elements": [
                  "paving_grid",
                  "curb_edge",
                  "streetlight_pole",
                  "open_pedestrian_paths"
                ],
                "openings": [
                  "open_pedestrian_edges",
                  "open_access_to_mart_storefront",
                  "open_access_to_bicycle_parking",
                  "open_access_to_cctv_wall_area",
                  "open_access_to_curb_vendor_strip",
                  "open_access_to_street_curb_lane"
                ],
                "zone_id": "sidewalk_frontage",
                "zone_type": "sidewalk"
              },
              {
                "adjacency": [
                  "sidewalk_frontage"
                ],
                "essential_elements": [
                  "bicycle_rack",
                  "parked_bicycle_glyphs",
                  "wheel_stands",
                  "low_rail"
                ],
                "openings": [
                  "open_access_to_sidewalk_frontage"
                ],
                "zone_id": "bicycle_parking",
                "zone_type": "bike_parking"
              },
              {
                "adjacency": [
                  "mart_storefront",
                  "sidewalk_frontage"
                ],
                "essential_elements": [
                  "exterior_wall_face",
                  "old_cctv_camera",
                  "camera_conduit",
                  "utility_box"
                ],
                "openings": [
                  "open_access_from_sidewalk_frontage",
                  "facade_continuation_to_mart_storefront"
                ],
                "zone_id": "cctv_wall_area",
                "zone_type": "wall"
              },
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "street_curb_lane"
                ],
                "essential_elements": [
                  "street_food_cart_stall_footprints",
                  "canopy_outlines",
                  "counter_tables",
                  "trash_bin"
                ],
                "openings": [
                  "open_access_to_sidewalk_frontage",
                  "open_access_to_street_curb_lane"
                ],
                "zone_id": "curb_vendor_strip",
                "zone_type": "vendor_strip"
              },
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "curb_vendor_strip"
                ],
                "essential_elements": [
                  "roadway_lane",
                  "curb_line",
                  "curb_lane_markings",
                  "storm_drain"
                ],
                "openings": [
                  "open_road_edges",
                  "open_access_to_sidewalk_frontage",
                  "open_access_to_curb_vendor_strip"
                ],
                "zone_id": "street_curb_lane",
                "zone_type": "street"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L08B03",
            "bg_plate_visible_description": "마트 외벽의 높은 벽면이 주로 보이고, 낡은 감시 카메라가 브래킷과 배선에 매달려 있다. 벽을 따라 내려오는 관과 작은 설비함, 아침빛을 받은 고정 외장면이 배경을 이룬다. 프레임 아래로는 보행 공간의 바닥 일부와 비어 있는 외부 여백이 살짝 잡힌다.",
            "camera_view_zone": "cctv_wall_area",
            "confidence": 0.87,
            "diagnostics": [
              "Primary match is based on the wall-mounted surveillance camera and conduit area being the visual target of the upward-tilted shot.",
              "Sidewalk is included only as nearby foreground context because the camera stands beside the wall and keeps the character near the pedestrian edge."
            ],
            "fp_id": "fp_l08_street_storefront",
            "missing_inputs": [],
            "not_visible_summary": "마트의 유리 출입문과 진열창이 있는 정면부는 거의 잡히지 않으며, 자전거 거치 공간과 노점 구역, 차도와 배수구 같은 도로 쪽 요소는 프레임 밖이다.",
            "scene_visible_description": "수리영이 마트 외벽 옆에서 옆모습으로 멈춰 서 있고, 손가락이 높은 벽면의 낡은 감시 카메라를 가리킨다. 카메라는 작은 단서처럼 벽에 붙어 있으며, 배선과 설비함이 함께 보여 조사 중인 분위기를 만든다. 주변은 이른 아침처럼 조용하고, 보행 공간은 비어 있어 인물의 시선과 손끝이 벽 위의 장치를 향해 선명하게 이어진다.",
            "self_consistency": {
              "notes": "Structured zones and Korean descriptions both emphasize the surveillance wall as the main background, with only a partial sidewalk foreground and other exterior areas excluded.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S19_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.94,
                "evidence": "high exterior wall with old surveillance camera, conduit, and utility box",
                "matched_zone_id": "cctv_wall_area",
                "observed_zone_type": "exterior wall with surveillance fixture",
                "present_elements": [
                  "old wall-mounted surveillance camera",
                  "camera bracket",
                  "camera conduit",
                  "utility box",
                  "weathered exterior wall face"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.7,
                "evidence": "foreground pedestrian paving beside the wall and open approach space",
                "matched_zone_id": "sidewalk_frontage",
                "observed_zone_type": "sidewalk frontage",
                "present_elements": [
                  "paved pedestrian surface",
                  "open walkway area",
                  "quiet exterior space near the wall"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L08B03::S19_Shot6": {
        "bg_id": "L08B03",
        "shot_id": "S19_Shot6",
        "fp_id": "fp_l08_street_storefront",
        "card": {
          "card_id": "1a37b198558f28c0",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L08B03",
          "shot_id": "S19_Shot6",
          "fp_id": "fp_l08_street_storefront",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "8d56a3f973fb3cc5",
            "space_model_hash": "801aabea3b4af5dc",
            "zone_readback_hash": "407fbe964574e02b",
            "shot_context_hash": "1586131ce096faa3",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "cctv_wall_area"
                ],
                "essential_elements": [
                  "glass_sliding_entrance",
                  "display_window_strips",
                  "sign_band_rectangles",
                  "service_wall_panels"
                ],
                "openings": [
                  "glass_sliding_entrance_to_mart_interior",
                  "open_frontage_to_sidewalk",
                  "facade_continuation_to_cctv_wall_area"
                ],
                "zone_id": "mart_storefront",
                "zone_type": "storefront"
              },
              {
                "adjacency": [
                  "mart_storefront",
                  "bicycle_parking",
                  "cctv_wall_area",
                  "curb_vendor_strip",
                  "street_curb_lane"
                ],
                "essential_elements": [
                  "paving_grid",
                  "curb_edge",
                  "streetlight_pole",
                  "open_pedestrian_paths"
                ],
                "openings": [
                  "open_pedestrian_edges",
                  "open_access_to_mart_storefront",
                  "open_access_to_bicycle_parking",
                  "open_access_to_cctv_wall_area",
                  "open_access_to_curb_vendor_strip",
                  "open_access_to_street_curb_lane"
                ],
                "zone_id": "sidewalk_frontage",
                "zone_type": "sidewalk"
              },
              {
                "adjacency": [
                  "sidewalk_frontage"
                ],
                "essential_elements": [
                  "bicycle_rack",
                  "parked_bicycle_glyphs",
                  "wheel_stands",
                  "low_rail"
                ],
                "openings": [
                  "open_access_to_sidewalk_frontage"
                ],
                "zone_id": "bicycle_parking",
                "zone_type": "bike_parking"
              },
              {
                "adjacency": [
                  "mart_storefront",
                  "sidewalk_frontage"
                ],
                "essential_elements": [
                  "exterior_wall_face",
                  "old_cctv_camera",
                  "camera_conduit",
                  "utility_box"
                ],
                "openings": [
                  "open_access_from_sidewalk_frontage",
                  "facade_continuation_to_mart_storefront"
                ],
                "zone_id": "cctv_wall_area",
                "zone_type": "wall"
              },
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "street_curb_lane"
                ],
                "essential_elements": [
                  "street_food_cart_stall_footprints",
                  "canopy_outlines",
                  "counter_tables",
                  "trash_bin"
                ],
                "openings": [
                  "open_access_to_sidewalk_frontage",
                  "open_access_to_street_curb_lane"
                ],
                "zone_id": "curb_vendor_strip",
                "zone_type": "vendor_strip"
              },
              {
                "adjacency": [
                  "sidewalk_frontage",
                  "curb_vendor_strip"
                ],
                "essential_elements": [
                  "roadway_lane",
                  "curb_line",
                  "curb_lane_markings",
                  "storm_drain"
                ],
                "openings": [
                  "open_road_edges",
                  "open_access_to_sidewalk_frontage",
                  "open_access_to_curb_vendor_strip"
                ],
                "zone_id": "street_curb_lane",
                "zone_type": "street"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L08B03",
            "bg_plate_visible_description": "차가운 아침빛 아래 옅은 색 포장 바닥이 비어 있고, 뒤쪽으로 마트 외벽의 유리 출입구와 쇼윈도 일부, 낮은 간판 띠와 벽면 패널이 흐릿하게 걸린다. 배경은 인물을 받쳐 주는 정도로만 보이며, 매장 정면의 구조와 보행 공간의 건조한 질감이 조용하게 남아 있다.",
            "camera_view_zone": "sidewalk_frontage",
            "confidence": 0.82,
            "diagnostics": [
              "카메라 의도상 인물의 상반신이 프레임을 크게 차지하므로 배경 구역의 식별은 부분적이다.",
              "마트 정면은 흐린 배경으로 보이지만, 자전거 주차 공간과 노점 구역, 차도는 프레이밍 설명상 제외된다."
            ],
            "fp_id": "fp_l08_street_storefront",
            "missing_inputs": [],
            "not_visible_summary": "자전거 거치 공간, 노점이 늘어선 가장자리, 차도와 배수구 쪽은 이 타이트한 인물 중심 구도에 들어오지 않는다. 외벽의 감시 카메라가 있는 구역도 사건 맥락상 가까운 장소이지만, 이 컷에서는 장비 자체가 뚜렷하게 잡힌다고 보기 어렵다.",
            "scene_visible_description": "수리영의 상반신이 화면을 크게 차지하고, 휴대전화를 귀에 바짝 댄 채 굳은 표정으로 한쪽을 응시한다. 그녀 주변에는 비어 있는 야외 보행 공간이 좁게 남아 긴장감을 만들고, 뒤로는 마트의 유리문과 쇼윈도, 옅은 외벽이 부드럽게 흐려져 있다. 전체적으로 한산한 이른 아침의 차가운 공기와 조용한 마트 앞 분위기가 느껴진다.",
            "self_consistency": {
              "notes": "구조화 항목은 인물 뒤와 주변에 보이는 보행 공간 및 마트 정면 일부만 포함하며, 설명문도 같은 범위로 제한했다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S19_Shot6",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "인물 주변에 비어 있는 포장 보행 공간과 옅은 바닥 질감이 보임",
                "matched_zone_id": "sidewalk_frontage",
                "observed_zone_type": "sidewalk",
                "present_elements": [
                  "pale paved walking surface",
                  "open pedestrian space",
                  "subtle pavement tile seams"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.74,
                "evidence": "인물 뒤로 마트 정면의 유리와 벽면 요소가 흐릿하게 배경으로 걸림",
                "matched_zone_id": "mart_storefront",
                "observed_zone_type": "storefront",
                "present_elements": [
                  "soft glass entrance area",
                  "display window portions",
                  "light facade panels",
                  "sign band area"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L10B01::S11_Shot2": {
        "bg_id": "L10B01",
        "shot_id": "S11_Shot2",
        "fp_id": "fp_connection_stairs",
        "card": {
          "card_id": "b3bd3192301a8216",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L10B01",
          "shot_id": "S11_Shot2",
          "fp_id": "fp_connection_stairs",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "7a441746e2a8f65c",
            "space_model_hash": "46e1a9d6d10971ba",
            "zone_readback_hash": "25474a5a3261f619",
            "shot_context_hash": "e8de13eca08b4e7c",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "transition_zone",
            "zones": [
              {
                "adjacency": [
                  "rooftop_entrance_landing"
                ],
                "essential_elements": [
                  "stair_treads",
                  "handrail",
                  "low_boundary_wall",
                  "open_lower_passage"
                ],
                "openings": [
                  "open lower passage",
                  "open connection to rooftop landing"
                ],
                "zone_id": "exterior_stair_run",
                "zone_type": "stairs"
              },
              {
                "adjacency": [
                  "exterior_stair_run"
                ],
                "essential_elements": [
                  "small_landing",
                  "parapet_edge",
                  "short_exterior_wall",
                  "metal_entrance_door",
                  "door_swing_arc",
                  "doorway_threshold"
                ],
                "openings": [
                  "open connection to stair run",
                  "rooftop entrance door"
                ],
                "zone_id": "rooftop_entrance_landing",
                "zone_type": "landing"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L10B01",
            "bg_plate_visible_description": "좁은 외부 계단의 젖은 콘크리트 벽, 닳고 어두워진 계단 디딤면, 가장자리 난간 일부, 위로 이어지는 어두운 계단 통로만 보인다. 옥상 입구나 철문은 드러나지 않고, 배경은 압축된 계단 내부에 머문다.",
            "camera_view_zone": "exterior_stair_run",
            "confidence": 0.82,
            "diagnostics": [
              "카메라 설명이 계단 중간의 밀착 프레임을 가리켜 옥상 쪽 참은 보이지 않는 것으로 처리했다.",
              "인물 중심의 가까운 구도라 배경 요소는 가장자리에서 부분적으로만 확인된다."
            ],
            "fp_id": "fp_connection_stairs",
            "missing_inputs": [],
            "not_visible_summary": "옥상 쪽 작은 참과 현관 철문, 문턱, 낮은 외벽은 화면 밖에 있어 확인되지 않는다. 계단 아래로 열리는 통로도 보이지 않는다.",
            "scene_visible_description": "좁은 외부 계단에서 수리영이 몸을 움츠리고 손으로 코와 입을 막은 채 역한 냄새에 반응한다. 젖고 얼룩진 콘크리트 벽이 어깨 가까이 붙어 있고, 닳은 계단 모서리와 난간 일부가 흐릿하게 스친다. 위쪽은 어둡고 차가운 외부 불빛만 희미하게 번져 답답한 통로처럼 느껴진다.",
            "self_consistency": {
              "notes": "구조화된 항목과 서술 모두 계단 구간만 실제로 포착되며 옥상 입구 쪽 공간은 제외된다는 판단으로 일치한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S11_Shot2",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.88,
                "evidence": "tight handheld frame on the stair run with treads and side wall at the margins",
                "matched_zone_id": "exterior_stair_run",
                "observed_zone_type": "narrow exterior stairway",
                "present_elements": [
                  "concrete stair treads",
                  "close stained stair wall",
                  "blurred handrail edge",
                  "dark upper stair passage"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L10B01::S11_Shot4": {
        "bg_id": "L10B01",
        "shot_id": "S11_Shot4",
        "fp_id": "fp_connection_stairs",
        "card": {
          "card_id": "1104738c874ee5d1",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L10B01",
          "shot_id": "S11_Shot4",
          "fp_id": "fp_connection_stairs",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "7a441746e2a8f65c",
            "space_model_hash": "46e1a9d6d10971ba",
            "zone_readback_hash": "25474a5a3261f619",
            "shot_context_hash": "062a802c6753cdcd",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "transition_zone",
            "zones": [
              {
                "adjacency": [
                  "rooftop_entrance_landing"
                ],
                "essential_elements": [
                  "stair_treads",
                  "handrail",
                  "low_boundary_wall",
                  "open_lower_passage"
                ],
                "openings": [
                  "open lower passage",
                  "open connection to rooftop landing"
                ],
                "zone_id": "exterior_stair_run",
                "zone_type": "stairs"
              },
              {
                "adjacency": [
                  "exterior_stair_run"
                ],
                "essential_elements": [
                  "small_landing",
                  "parapet_edge",
                  "short_exterior_wall",
                  "metal_entrance_door",
                  "door_swing_arc",
                  "doorway_threshold"
                ],
                "openings": [
                  "open connection to stair run",
                  "rooftop entrance door"
                ],
                "zone_id": "rooftop_entrance_landing",
                "zone_type": "landing"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L10B01",
            "bg_plate_visible_description": "고정 배경으로는 옥상 쪽 작은 콘크리트 바닥과 짧은 외벽, 문턱, 부식된 철문, 그리고 문틈 너머의 불 꺼진 검은 내부가 보인다. 차갑고 약한 외부광이 녹슨 문 표면과 젖은 듯한 바닥 질감을 스치고, 실내 쪽은 거의 빛이 닿지 않는 어둠으로 남아 있다.",
            "camera_view_zone": "rooftop_entrance_landing",
            "confidence": 0.9,
            "diagnostics": [
              "카메라 의도가 문 앞 옥상 쪽 작은 머무름 공간을 정면에 가깝게 바라보는 클로즈 구도와 일치한다.",
              "계단 구간은 문을 향한 접근 구도에서 주요 시야 밖으로 판단된다."
            ],
            "fp_id": "fp_connection_stairs",
            "missing_inputs": [],
            "not_visible_summary": "외부 계단의 디딤면, 난간, 아래쪽 통로는 이 문 앞 클로즈 구도에서 포착되지 않는다. 인물도 배제되어 보이지 않으며, 어둠 너머의 실내 구조는 식별되지 않는다.",
            "scene_visible_description": "옥상에 선 카메라는 낡고 녹슨 철문을 비스듬히 마주 본다. 문은 반쯤 열린 상태로, 벌어진 틈 사이로 빛이 닿지 않는 검은 내부가 깊게 드러난다. 주변에는 거칠고 습기 어린 콘크리트 바닥, 짧은 외벽, 문턱이 함께 잡히며, 인물 없이 문과 어둠만이 불길하게 프레임을 채운다.",
            "self_consistency": {
              "notes": "구조화된 가시 영역과 한국어 설명 모두 문 앞 옥상 머무름 공간과 반쯤 열린 철문, 어두운 내부 틈을 중심으로 일치한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S11_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.94,
                "evidence": "camera is positioned on the rooftop and faces the half-open rusty entrance door across the small exterior threshold",
                "matched_zone_id": "rooftop_entrance_landing",
                "observed_zone_type": "rooftop entrance landing",
                "present_elements": [
                  "small concrete landing",
                  "short exterior wall",
                  "parapet edge",
                  "half-open rusty metal entrance door",
                  "doorway threshold",
                  "dark interior gap beyond the door"
                ],
                "visibility": "visible"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L11B01::S13_Shot2": {
        "bg_id": "L11B01",
        "shot_id": "S13_Shot2",
        "fp_id": "fp_roadside_below",
        "card": {
          "card_id": "97c3f4d677239dc9",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L11B01",
          "shot_id": "S13_Shot2",
          "fp_id": "fp_roadside_below",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "7280a4161d0477be",
            "space_model_hash": "a0027e27f5755c2d",
            "zone_readback_hash": "9e6aec37f5bc81fe",
            "shot_context_hash": "adc925033d7a1ac9",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "site_surface",
            "zones": [
              {
                "adjacency": [
                  "building_frontage"
                ],
                "essential_elements": [
                  "narrow_road",
                  "curb",
                  "vehicle_stopping_strip",
                  "street_edge"
                ],
                "openings": [
                  "open_road_edges",
                  "curb_access_to_entry"
                ],
                "zone_id": "open_roadside",
                "zone_type": "roadside"
              },
              {
                "adjacency": [
                  "open_roadside",
                  "rear_courtyard_bike_area",
                  "rooftop_stair_access"
                ],
                "essential_elements": [
                  "building_footprint_edge",
                  "main_entrance_gate",
                  "exterior_landing",
                  "low_boundary_wall"
                ],
                "openings": [
                  "street_gate",
                  "courtyard_passage",
                  "stair_entry"
                ],
                "zone_id": "building_frontage",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "building_frontage",
                  "rooftop_stair_access"
                ],
                "essential_elements": [
                  "paved_courtyard",
                  "recessed_back_corner",
                  "bicycle_parking_area",
                  "low_boundary_wall"
                ],
                "openings": [
                  "entry_passage",
                  "stair_passage"
                ],
                "zone_id": "rear_courtyard_bike_area",
                "zone_type": "yard"
              },
              {
                "adjacency": [
                  "building_frontage",
                  "rear_courtyard_bike_area"
                ],
                "essential_elements": [
                  "stair_treads",
                  "stair_landing",
                  "handrail",
                  "stairwell_opening"
                ],
                "openings": [
                  "lower_stair_entry",
                  "upward_stair_continuation"
                ],
                "zone_id": "rooftop_stair_access",
                "zone_type": "stairs"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L11B01",
            "bg_plate_visible_description": "어두운 도로변의 젖은 포장과 턱, 낮은 담장과 열린 출입문, 건물 앞 외부 랜딩이 보인다. 그 뒤로 어둡게 파인 계단 입구와 난간, 계단참 일부가 이어지고, 옆으로는 포장된 마당의 가장자리와 자전거를 세울 수 있는 공간이 조금 드러난다. 고정 배경은 밤의 차가운 질감과 젖은 바닥 반사로 유지된다.",
            "camera_view_zone": "building_frontage",
            "confidence": 0.78,
            "diagnostics": [
              "평면은 상부 시점이어서 실제 눈높이 프레임의 담장과 출입문 차폐는 카메라 의도에 맞춰 보수적으로 판단했다.",
              "도로 쪽에서 건물로 바라보는 구도라 마당 깊은 곳은 부분 노출로 처리했다."
            ],
            "fp_id": "fp_roadside_below",
            "missing_inputs": [],
            "not_visible_summary": "마당 안쪽의 깊은 포장 공간과 식재 가장자리 대부분은 화면에 크게 잡히지 않는다. 계단도 입구와 일부 난간만 보이며 위로 이어지는 내부는 어둠 속으로 사라진다. 도로의 긴 흐름이나 차량 전체도 프레임 밖에 가깝다.",
            "scene_visible_description": "젖은 도로변에서 건물 앞 출입부를 향해 고정된 넓은 시야다. 수리영이 멍한 얼굴로 가운데에 서 있고, 뒤로 낮은 담장과 열린 출입문, 외부 랜딩이 받쳐 준다. 더 안쪽에는 어둡게 열린 계단 입구와 난간이 보여 옥상 쪽에서 내려온 동선을 암시한다. 옆으로는 포장된 마당 일부와 자전거를 세우는 공간이 살짝 보이며, 화면 밖의 사이렌 불빛이 젖은 바닥과 얼굴, 벽면을 붉고 푸르게 번갈아 스친다.",
            "self_consistency": {
              "notes": "구조화된 항목과 한국어 묘사는 모두 도로변, 건물 앞 출입부, 계단 입구, 마당 일부만 보이는 구성으로 일치한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S13_Shot2",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.84,
                "evidence": "camera stands at the street edge and the foreground reads as wet pavement with curb access",
                "matched_zone_id": "open_roadside",
                "observed_zone_type": "roadside",
                "present_elements": [
                  "wet roadside pavement",
                  "curb",
                  "street edge",
                  "vehicle stopping strip"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.9,
                "evidence": "the frontal frame centers the gate, landing, low wall, and building edge behind the subject",
                "matched_zone_id": "building_frontage",
                "observed_zone_type": "entry",
                "present_elements": [
                  "main entrance gate",
                  "exterior landing",
                  "low boundary wall",
                  "building footprint edge",
                  "street access opening"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.8,
                "evidence": "a dark stair mouth and rail are visible beyond the entry, receding away from the road",
                "matched_zone_id": "rooftop_stair_access",
                "observed_zone_type": "stairs",
                "present_elements": [
                  "stair opening",
                  "stair landing",
                  "handrail",
                  "visible stair treads"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.58,
                "evidence": "the side of the frame through the entry reveals a slice of paved courtyard and bicycle area beyond",
                "matched_zone_id": "rear_courtyard_bike_area",
                "observed_zone_type": "yard",
                "present_elements": [
                  "paved courtyard surface",
                  "low boundary wall",
                  "glimpsed bicycle parking area"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L11B01::S13_Shot4": {
        "bg_id": "L11B01",
        "shot_id": "S13_Shot4",
        "fp_id": "fp_roadside_below",
        "card": {
          "card_id": "ad6e3c09c1b94acc",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L11B01",
          "shot_id": "S13_Shot4",
          "fp_id": "fp_roadside_below",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "7280a4161d0477be",
            "space_model_hash": "a0027e27f5755c2d",
            "zone_readback_hash": "9e6aec37f5bc81fe",
            "shot_context_hash": "d4c81a394bda66ab",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "site_surface",
            "zones": [
              {
                "adjacency": [
                  "building_frontage"
                ],
                "essential_elements": [
                  "narrow_road",
                  "curb",
                  "vehicle_stopping_strip",
                  "street_edge"
                ],
                "openings": [
                  "open_road_edges",
                  "curb_access_to_entry"
                ],
                "zone_id": "open_roadside",
                "zone_type": "roadside"
              },
              {
                "adjacency": [
                  "open_roadside",
                  "rear_courtyard_bike_area",
                  "rooftop_stair_access"
                ],
                "essential_elements": [
                  "building_footprint_edge",
                  "main_entrance_gate",
                  "exterior_landing",
                  "low_boundary_wall"
                ],
                "openings": [
                  "street_gate",
                  "courtyard_passage",
                  "stair_entry"
                ],
                "zone_id": "building_frontage",
                "zone_type": "entry"
              },
              {
                "adjacency": [
                  "building_frontage",
                  "rooftop_stair_access"
                ],
                "essential_elements": [
                  "paved_courtyard",
                  "recessed_back_corner",
                  "bicycle_parking_area",
                  "low_boundary_wall"
                ],
                "openings": [
                  "entry_passage",
                  "stair_passage"
                ],
                "zone_id": "rear_courtyard_bike_area",
                "zone_type": "yard"
              },
              {
                "adjacency": [
                  "building_frontage",
                  "rear_courtyard_bike_area"
                ],
                "essential_elements": [
                  "stair_treads",
                  "stair_landing",
                  "handrail",
                  "stairwell_opening"
                ],
                "openings": [
                  "lower_stair_entry",
                  "upward_stair_continuation"
                ],
                "zone_id": "rooftop_stair_access",
                "zone_type": "stairs"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L11B01",
            "bg_plate_visible_description": "어두운 야외 공간의 흐릿한 바닥과 낮은 경계 구조가 인물 뒤로 희미하게 깔린다. 밤이라 고정된 표면은 선명하게 드러나지 않고, 차가운 어둠 속에 비상등 색만 부드럽게 스친다.",
            "camera_view_zone": "rear_courtyard_bike_area",
            "confidence": 0.72,
            "diagnostics": [
              "카메라가 매우 가까운 인물 클로즈업으로 설정되어 있어 배경 공간 단서는 대부분 흐릿하고 부분적이다.",
              "제공된 시선 기준은 뒤쪽 마당 영역을 주된 배경 위치로 가리킨다.",
              "도로변 불빛과 사이렌은 화면 분위기에 영향을 주지만, 도로 구조 자체는 뚜렷하게 프레이밍되지 않는다."
            ],
            "fp_id": "fp_roadside_below",
            "missing_inputs": [],
            "not_visible_summary": "도로와 curb, 출입문과 정면 진입부, 계단의 디딤판과 난간, 자전거 거치 구역의 구체적인 형태는 이 클로즈업에서 선명하게 잡히지 않는다. 화면은 인물의 얼굴에 거의 잠겨 있어 주변 배치 대부분은 프레임 밖이거나 흐릿하게만 암시된다.",
            "scene_visible_description": "수리영의 젖은 눈과 벌어진 입술이 화면을 거의 채우고, 위쪽 가장자리에는 혜수의 어깨와 턱선이 흐릿하게 걸린다. 뒤쪽으로는 밤의 마당 같은 어두운 외부 공간이 초점 밖으로 물러나 있으며, 차갑고 붉은 비상등의 반사가 얼굴과 배경을 번갈아 스친다. 공간 자체보다 충격을 받은 표정과 숨 막히는 대치감이 중심이 되는 프레임이다.",
            "self_consistency": {
              "notes": "구조화된 항목은 뒤쪽 마당만 부분적으로 보인다고 보고하며, 한국어 설명도 인물 클로즈업 뒤의 흐릿한 야외 마당 배경으로 일관된다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S13_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.72,
                "evidence": "인물 뒤로 흐릿한 포장된 외부 마당과 낮은 경계가 배경처럼 남아 있음",
                "matched_zone_id": "rear_courtyard_bike_area",
                "observed_zone_type": "yard",
                "present_elements": [
                  "흐릿한 포장 바닥",
                  "어두운 외부 마당 분위기",
                  "낮은 경계 구조의 암시",
                  "비상등에 물든 배경 그림자"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L13B01::S21_Shot5": {
        "bg_id": "L13B01",
        "shot_id": "S21_Shot5",
        "fp_id": "fp_l13_police_office_main",
        "card": {
          "card_id": "9eb085b5cedd04fd",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L13B01",
          "shot_id": "S21_Shot5",
          "fp_id": "fp_l13_police_office_main",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "6a5317df249be8d8",
            "space_model_hash": "c02ead8e5f0b84da",
            "zone_readback_hash": "2e6dbe74d819fedb",
            "shot_context_hash": "5201a228592873ef",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "hyesu_desk_zone",
                  "duty_detective_desk_zone"
                ],
                "essential_elements": [
                  "clustered_desks",
                  "task_chairs",
                  "filing_cabinets",
                  "office_partition",
                  "entry_door",
                  "windows"
                ],
                "openings": [
                  "main_entry_door",
                  "interior_exit_door",
                  "windows"
                ],
                "zone_id": "main_detective_work_area",
                "zone_type": "office"
              },
              {
                "adjacency": [
                  "main_detective_work_area",
                  "duty_detective_desk_zone"
                ],
                "essential_elements": [
                  "desk",
                  "task_chair",
                  "paperwork",
                  "photo_document_spread",
                  "coffee_cup",
                  "writing_tools"
                ],
                "openings": [
                  "open_to_main_work_area"
                ],
                "zone_id": "hyesu_desk_zone",
                "zone_type": "desk"
              },
              {
                "adjacency": [
                  "main_detective_work_area",
                  "hyesu_desk_zone"
                ],
                "essential_elements": [
                  "desk",
                  "task_chair",
                  "computer_monitor",
                  "keyboard",
                  "office_phone",
                  "paperwork"
                ],
                "openings": [
                  "open_to_main_work_area"
                ],
                "zone_id": "duty_detective_desk_zone",
                "zone_type": "workstation"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L13B01",
            "bg_plate_visible_description": "책상 가장자리와 그 위에 흩어진 인쇄물 일부가 흐릿하게 전경을 만들고, 뒤로는 형광등 아래의 경찰 사무실 내부가 부드럽게 흐려져 보인다. 여러 업무용 책상, 의자, 낮은 칸막이의 덩어리감만 배경으로 잡히며, 문이나 창문 같은 외곽 구조는 이 가까운 구도에서는 뚜렷하게 드러나지 않는다.",
            "camera_view_zone": "main_detective_work_area",
            "confidence": 0.82,
            "diagnostics": [
              "카메라는 책상 가까이에서 인물 반응을 좁게 잡는 구도이므로 전경 책상과 후경 사무실만 확실히 판별된다.",
              "평면도상 개인 책상 구역과 넓은 업무 구역의 인접 관계가 장면 설명과 일치한다.",
              "가까운 인물과 얕은 초점 때문에 먼 업무 구역의 세부 가구 식별은 제한적이다."
            ],
            "fp_id": "fp_l13_police_office_main",
            "missing_inputs": [],
            "not_visible_summary": "다른 독립된 업무석의 모니터와 전화기, 사무실 출입문, 창가, 서류장 같은 외곽 요소는 이 가까운 반응 구도에서 거의 잡히지 않는다. 사무실 전체 배치나 각 책상의 세부 물건도 화면 밖이거나 흐림 처리되어 확인하기 어렵다.",
            "scene_visible_description": "책상 모서리 가까이에서 바라본 아주 가까운 반응 숏이다. 수리영의 놀란 얼굴과 크게 뜬 눈이 화면을 지배하고, 아래쪽 가장자리에는 책상 위에 흩어진 섬뜩한 사진과 서류가 흐릿한 밝고 어두운 얼룩처럼 걸린다. 그녀의 어깨 뒤로는 사람이 빠져나간 경찰 사무실의 책상과 칸막이, 의자들이 희미한 배경 덩어리로 물러나 있어, 개인적인 충격과 텅 빈 사무실 분위기가 함께 보인다.",
            "self_consistency": {
              "notes": "구조화 항목은 전경의 개인 책상 일부와 후경의 넓은 사무실 일부만 포함하며, 한국어 설명도 같은 범위만 묘사한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S21_Shot5",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.88,
                "evidence": "foreground desk corner with blurred scattered prints and paperwork",
                "matched_zone_id": "hyesu_desk_zone",
                "observed_zone_type": "desk",
                "present_elements": [
                  "desk corner",
                  "blurred photograph prints",
                  "paperwork",
                  "writing surface"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.78,
                "evidence": "soft office desks and partitions receding behind the seated figure",
                "matched_zone_id": "main_detective_work_area",
                "observed_zone_type": "office",
                "present_elements": [
                  "clustered desks",
                  "task chairs",
                  "low office partitions",
                  "general office floor area"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L13B01::S21_Shot8": {
        "bg_id": "L13B01",
        "shot_id": "S21_Shot8",
        "fp_id": "fp_l13_police_office_main",
        "card": {
          "card_id": "636d9b189e7ee939",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L13B01",
          "shot_id": "S21_Shot8",
          "fp_id": "fp_l13_police_office_main",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "6a5317df249be8d8",
            "space_model_hash": "c02ead8e5f0b84da",
            "zone_readback_hash": "2e6dbe74d819fedb",
            "shot_context_hash": "6ec2ce679a4f1ecf",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "hyesu_desk_zone",
                  "duty_detective_desk_zone"
                ],
                "essential_elements": [
                  "clustered_desks",
                  "task_chairs",
                  "filing_cabinets",
                  "office_partition",
                  "entry_door",
                  "windows"
                ],
                "openings": [
                  "main_entry_door",
                  "interior_exit_door",
                  "windows"
                ],
                "zone_id": "main_detective_work_area",
                "zone_type": "office"
              },
              {
                "adjacency": [
                  "main_detective_work_area",
                  "duty_detective_desk_zone"
                ],
                "essential_elements": [
                  "desk",
                  "task_chair",
                  "paperwork",
                  "photo_document_spread",
                  "coffee_cup",
                  "writing_tools"
                ],
                "openings": [
                  "open_to_main_work_area"
                ],
                "zone_id": "hyesu_desk_zone",
                "zone_type": "desk"
              },
              {
                "adjacency": [
                  "main_detective_work_area",
                  "hyesu_desk_zone"
                ],
                "essential_elements": [
                  "desk",
                  "task_chair",
                  "computer_monitor",
                  "keyboard",
                  "office_phone",
                  "paperwork"
                ],
                "openings": [
                  "open_to_main_work_area"
                ],
                "zone_id": "duty_detective_desk_zone",
                "zone_type": "workstation"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L13B01",
            "bg_plate_visible_description": "낮은 탁상 시점에서 책상 상판과 그 위의 종이 더미, 작은 메모지, 필기구가 크게 보인다. 뒤쪽에는 경찰 사무실의 업무용 책상 일부와 켜진 모니터가 흐릿한 형태로 걸리며, 형광등 아래의 딱딱하고 차가운 사무 환경만 희미하게 남는다.",
            "camera_view_zone": "hyesu_desk_zone",
            "confidence": 0.78,
            "diagnostics": [
              "Shot intent is an extreme tabletop insert, so zone matching is based on visible desk contents rather than the full floor-plan geometry.",
              "The blurred monitor in the background suggests a neighboring workstation but its spatial match is less certain than the foreground desk."
            ],
            "fp_id": "fp_l13_police_office_main",
            "missing_inputs": [],
            "not_visible_summary": "사무실 전체의 책상 군집, 출입문, 창문, 파일 캐비닛, 넓은 통로와 벽면 구조는 이 카메라에 거의 잡히지 않는다. 다른 자리들의 세부 배치도 초점 밖이거나 화면 밖에 있어 확인되지 않는다.",
            "scene_visible_description": "카메라는 책상 표면에 아주 낮게 붙어 작은 메모지를 중심으로 잡는다. 수리영의 손목과 손가락이 전경을 크게 가리고, 볼펜 끝이 종이를 눌러 급하게 메모를 남기는 순간이 보인다. 주변에는 서류, 흐트러진 종이, 필기구 같은 책상 물건들이 얕은 초점으로 퍼져 있고, 뒤쪽에는 위치 결과를 띄운 듯한 업무용 모니터가 흐릿하게 남아 긴장감을 만든다.",
            "self_consistency": {
              "notes": "Structured zones focus on the foreground desk and the partly visible blurred workstation monitor; Korean prose describes the same close tabletop insert without using internal identifiers.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S21_Shot8",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "foreground desktop with paperwork, note, pen, and writing hand dominates the frame",
                "matched_zone_id": "hyesu_desk_zone",
                "observed_zone_type": "desk",
                "present_elements": [
                  "책상 상판",
                  "작은 메모지",
                  "볼펜",
                  "글씨 쓰는 손",
                  "흩어진 서류",
                  "증거 사진처럼 보이는 종이",
                  "필기구"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.52,
                "evidence": "blurred office monitor and workstation clutter appear beyond the foreground hand",
                "matched_zone_id": "duty_detective_desk_zone",
                "observed_zone_type": "workstation",
                "present_elements": [
                  "흐릿한 모니터",
                  "업무용 책상 일부",
                  "키보드처럼 보이는 장비",
                  "주변 서류"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L13B02::S16_Shot3": {
        "bg_id": "L13B02",
        "shot_id": "S16_Shot3",
        "fp_id": "fp_l13_police_office_main",
        "card": {
          "card_id": "b77e1790360a564f",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L13B02",
          "shot_id": "S16_Shot3",
          "fp_id": "fp_l13_police_office_main",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "6a5317df249be8d8",
            "space_model_hash": "c02ead8e5f0b84da",
            "zone_readback_hash": "2e6dbe74d819fedb",
            "shot_context_hash": "f3928f1e40289669",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "hyesu_desk_zone",
                  "duty_detective_desk_zone"
                ],
                "essential_elements": [
                  "clustered_desks",
                  "task_chairs",
                  "filing_cabinets",
                  "office_partition",
                  "entry_door",
                  "windows"
                ],
                "openings": [
                  "main_entry_door",
                  "interior_exit_door",
                  "windows"
                ],
                "zone_id": "main_detective_work_area",
                "zone_type": "office"
              },
              {
                "adjacency": [
                  "main_detective_work_area",
                  "duty_detective_desk_zone"
                ],
                "essential_elements": [
                  "desk",
                  "task_chair",
                  "paperwork",
                  "photo_document_spread",
                  "coffee_cup",
                  "writing_tools"
                ],
                "openings": [
                  "open_to_main_work_area"
                ],
                "zone_id": "hyesu_desk_zone",
                "zone_type": "desk"
              },
              {
                "adjacency": [
                  "main_detective_work_area",
                  "hyesu_desk_zone"
                ],
                "essential_elements": [
                  "desk",
                  "task_chair",
                  "computer_monitor",
                  "keyboard",
                  "office_phone",
                  "paperwork"
                ],
                "openings": [
                  "open_to_main_work_area"
                ],
                "zone_id": "duty_detective_desk_zone",
                "zone_type": "workstation"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L13B02",
            "bg_plate_visible_description": "형광등이 차갑게 비추는 경찰 사무실 안에서 당직 책상 표면과 사무용 의자, 모니터가 놓이는 자리, 키보드와 전화기가 있는 업무용 가구가 보인다. 그 너머로 열린 사무 공간의 책상 군, 낮은 칸막이, 파일 캐비닛, 벽면 게시판 같은 사무실 배경이 흐릿하게 이어진다.",
            "camera_view_zone": "main_detective_work_area",
            "confidence": 0.78,
            "diagnostics": [
              "평면도는 위에서 본 도식이므로 실제 눈높이 구도에서 보이는 벽면 배경은 촬영 의도와 공간 배치를 함께 대조했다."
            ],
            "fp_id": "fp_l13_police_office_main",
            "missing_inputs": [],
            "not_visible_summary": "문서와 커피잔이 넓게 펼쳐진 별도의 개인 책상 쪽은 이 구도에서 중심적으로 잡히지 않는다. 사무실의 출입문, 창가, 먼 책상 군과 캐비닛 대부분도 배경으로만 희미하거나 프레임 밖에 머문다.",
            "scene_visible_description": "카메라는 당직 형사의 자리에서 책상 위를 낮게 가로질러 혜수를 정면으로 바라본다. 책상 위의 어수선한 업무 물건과 켜진 휴대전화 화면이 가까운 앞쪽에 크게 걸리고, 그 뒤로 긴장한 혜수의 눈과 얼굴이 선명하게 보인다. 가까운 가장자리에는 앉아 있는 형사의 어깨가 흐릿하게 걸리며, 뒤편에는 야간 경찰 사무실의 칸막이와 책상, 서류가 붙은 게시판이 차갑고 피로한 형광등 아래 깔린다.",
            "self_consistency": {
              "notes": "구조화 항목과 서술 모두 당직 책상, 혜수 너머의 열린 사무 공간, 가까운 형사의 흐릿한 존재만을 다루며 프레임 밖 공간은 제외했다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S16_Shot3",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.83,
                "evidence": "가까운 당직 책상 표면과 업무 장비가 시선의 출발점에 놓인다.",
                "matched_zone_id": "duty_detective_desk_zone",
                "observed_zone_type": "workstation",
                "present_elements": [
                  "desk",
                  "task chair",
                  "computer monitor",
                  "keyboard",
                  "office phone",
                  "paperwork",
                  "foreground tabletop",
                  "held mobile phone"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.74,
                "evidence": "혜수 뒤로 열린 경찰 사무실의 책상과 칸막이 배경이 이어진다.",
                "matched_zone_id": "main_detective_work_area",
                "observed_zone_type": "office",
                "present_elements": [
                  "clustered desks",
                  "task chairs",
                  "office partitions",
                  "filing cabinets",
                  "notice board or posted wall surface",
                  "fluorescent office lighting"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L13B02::S16_Shot5": {
        "bg_id": "L13B02",
        "shot_id": "S16_Shot5",
        "fp_id": "fp_l13_police_office_main",
        "card": {
          "card_id": "24920a5fced90a82",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L13B02",
          "shot_id": "S16_Shot5",
          "fp_id": "fp_l13_police_office_main",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "6a5317df249be8d8",
            "space_model_hash": "c02ead8e5f0b84da",
            "zone_readback_hash": "2e6dbe74d819fedb",
            "shot_context_hash": "5694500e7be64dc4",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "hyesu_desk_zone",
                  "duty_detective_desk_zone"
                ],
                "essential_elements": [
                  "clustered_desks",
                  "task_chairs",
                  "filing_cabinets",
                  "office_partition",
                  "entry_door",
                  "windows"
                ],
                "openings": [
                  "main_entry_door",
                  "interior_exit_door",
                  "windows"
                ],
                "zone_id": "main_detective_work_area",
                "zone_type": "office"
              },
              {
                "adjacency": [
                  "main_detective_work_area",
                  "duty_detective_desk_zone"
                ],
                "essential_elements": [
                  "desk",
                  "task_chair",
                  "paperwork",
                  "photo_document_spread",
                  "coffee_cup",
                  "writing_tools"
                ],
                "openings": [
                  "open_to_main_work_area"
                ],
                "zone_id": "hyesu_desk_zone",
                "zone_type": "desk"
              },
              {
                "adjacency": [
                  "main_detective_work_area",
                  "hyesu_desk_zone"
                ],
                "essential_elements": [
                  "desk",
                  "task_chair",
                  "computer_monitor",
                  "keyboard",
                  "office_phone",
                  "paperwork"
                ],
                "openings": [
                  "open_to_main_work_area"
                ],
                "zone_id": "duty_detective_desk_zone",
                "zone_type": "workstation"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L13B02",
            "bg_plate_visible_description": "낮은 시선에 책상 상판의 낡은 모서리가 크게 깔리고, 그 너머로 차가운 형광등을 받은 경찰서 업무 공간의 칸막이와 사무용 가구 일부가 눌린 배경처럼 보인다. 벽과 바닥, 책상 면, 사무실 칸막이가 단단하고 건조한 배경판을 이룬다.",
            "camera_view_zone": "main_detective_work_area",
            "confidence": 0.74,
            "diagnostics": [
              "근접 책상 프레이밍이라 넓은 사무실 전체가 아니라 책상 주변과 칸막이 배경만 판단 가능하다.",
              "책상 주인이 별도 개인 자리인지 당직 자리인지 장면 설명만으로는 약간 모호하지만, 배경 칸막이와 업무 공간 맥락이 넓은 사무실 쪽에 더 잘 맞는다."
            ],
            "fp_id": "fp_l13_police_office_main",
            "missing_inputs": [],
            "not_visible_summary": "별도의 개인 책상 구역에 놓인 커피잔과 문서 더미, 컴퓨터와 전화기가 갖춰진 독립된 당직용 자리, 출입문과 창가 쪽의 넓은 사무실 가장자리는 이 근접 구도에서 거의 잡히지 않는다.",
            "scene_visible_description": "카메라는 책상 높이까지 낮아져 혜수의 꽉 쥔 손과 밀려난 서류가 먼저 시야를 압박한다. 책상 너머로 몸을 숙인 혜수의 상체와 얼굴이 중앙을 누르고, 김형사는 가까운 가장자리에서 압축된 실루엣처럼 걸린다. 주변은 차가운 형광등 아래 사무실 칸막이와 업무용 가구가 흐릿하게 둘러싸며, 책상이 두 사람 사이의 긴장을 받치는 단단한 판처럼 보인다.",
            "self_consistency": {
              "notes": "구조화 항목과 한국어 설명 모두 근접한 책상 대치와 그 뒤의 경찰서 업무 공간 일부만을 가리킨다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S16_Shot5",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.76,
                "evidence": "낮은 책상 시선 뒤로 사무실 칸막이와 업무용 가구 일부가 보이며, 대치가 넓은 업무 공간 안에서 일어난다.",
                "matched_zone_id": "main_detective_work_area",
                "observed_zone_type": "사무실 업무 공간",
                "present_elements": [
                  "책상 상판",
                  "책상 가장자리",
                  "흐트러진 서류",
                  "사무실 칸막이",
                  "업무용 의자 일부",
                  "멀리 압축되어 보이는 책상 윤곽"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L14B01::S22_Shot2": {
        "bg_id": "L14B01",
        "shot_id": "S22_Shot2",
        "fp_id": "fp_l14_police_exterior_main",
        "card": {
          "card_id": "473a7972ae576196",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L14B01",
          "shot_id": "S22_Shot2",
          "fp_id": "fp_l14_police_exterior_main",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "4ad4200db6d15652",
            "space_model_hash": "157cc52e4688fe1b",
            "zone_readback_hash": "fcb6bec38c309ed4",
            "shot_context_hash": "13905826f9e3950c",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "bicycle_parking",
                  "departure_path"
                ],
                "essential_elements": [
                  "building_facade_edge",
                  "entrance_doors",
                  "shallow_steps",
                  "window_bands"
                ],
                "openings": [
                  "main_entrance_doors",
                  "front_windows",
                  "open_forecourt_edge"
                ],
                "zone_id": "station_frontage",
                "zone_type": "frontage"
              },
              {
                "adjacency": [
                  "station_frontage",
                  "departure_path"
                ],
                "essential_elements": [
                  "bicycle_racks",
                  "parked_bicycle",
                  "paved_stand_area"
                ],
                "openings": [
                  "open_access_to_frontage",
                  "open_access_to_path"
                ],
                "zone_id": "bicycle_parking",
                "zone_type": "bicycle parking"
              },
              {
                "adjacency": [
                  "station_frontage",
                  "bicycle_parking"
                ],
                "essential_elements": [
                  "curb",
                  "street_edge",
                  "driveway_apron",
                  "pedestrian_path"
                ],
                "openings": [
                  "open_street_exit",
                  "open_access_to_forecourt"
                ],
                "zone_id": "departure_path",
                "zone_type": "path"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L14B01",
            "bg_plate_visible_description": "낮빛 아래 경찰서의 거리 쪽 외벽이 배경으로 길게 지나간다. 유리 출입문과 얕은 계단, 가로로 이어진 창문 띠, 넓은 포장 앞마당이 안정적인 배경을 이룬다. 아래쪽에는 보도와 차도 가장자리, 진입로 같은 포장 면이 보이고, 한쪽에는 자전거 거치대와 세워진 자전거가 있는 주차 구역이 짧게 스쳐 보인다.",
            "camera_view_zone": "station_frontage",
            "confidence": 0.86,
            "diagnostics": [
              "카메라 의도와 평면의 주요 배치가 서로 잘 맞아 주요 배경을 안정적으로 식별할 수 있다.",
              "추적 촬영이므로 가장자리의 주차 구역과 도로 쪽은 부분적으로만 잡히는 것으로 판단했다."
            ],
            "fp_id": "fp_l14_police_exterior_main",
            "missing_inputs": [],
            "not_visible_summary": "경찰서 내부나 출입문 안쪽 공간은 보이지 않는다. 건물 정면 전체를 정적인 정면 구도로 담는 장면은 아니며, 자전거 거치 구역과 도로 가장자리는 이동하는 인물을 따라가며 일부만 프레임에 들어온다.",
            "scene_visible_description": "낮의 경찰서 앞을 따라 카메라가 낮게 움직이며, 수리영이 자전거를 타고 급히 지나가는 모습이 넓게 잡힌다. 그녀의 전신과 자전거, 굽힌 무릎과 페달을 밟는 동작이 함께 보이고, 뒤로는 경찰서 외벽과 유리 출입문, 얕은 계단, 창문들이 흐르듯 지나간다. 바닥에는 회색 포장면과 보도, 차도 가장자리가 이어지고, 한쪽에는 자전거 거치대와 세워진 자전거가 있는 주차 공간이 순간적으로 배경 질감을 더한다.",
            "self_consistency": {
              "notes": "구조화된 항목과 한국어 설명 모두 경찰서 정면을 주 배경으로 보고, 자전거 주차 구역과 거리 쪽 통로를 보조적으로만 포함한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S22_Shot2",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.93,
                "evidence": "경찰서 외벽, 유리 출입문, 얕은 계단과 가로 창문이 추적 배경의 중심을 이룬다.",
                "matched_zone_id": "station_frontage",
                "observed_zone_type": "frontage",
                "present_elements": [
                  "건물 정면 외벽",
                  "유리 출입문",
                  "얕은 계단",
                  "가로로 이어진 창문",
                  "넓은 포장 앞마당"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.78,
                "evidence": "자전거 거치대와 세워진 자전거가 건물 앞 한쪽에서 스쳐 지나가는 배경 요소로 보인다.",
                "matched_zone_id": "bicycle_parking",
                "observed_zone_type": "bicycle parking",
                "present_elements": [
                  "자전거 거치대",
                  "세워진 자전거",
                  "포장된 주차 면"
                ],
                "visibility": "partial"
              },
              {
                "confidence": 0.8,
                "evidence": "자전거가 달려 나가는 방향의 보도와 차도 가장자리, 진입 포장면이 하단 배경과 바닥면으로 잡힌다.",
                "matched_zone_id": "departure_path",
                "observed_zone_type": "path",
                "present_elements": [
                  "보도 가장자리",
                  "차도 경계",
                  "진입로 포장",
                  "거리 쪽 바닥면"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L15B01::S20_Shot4": {
        "bg_id": "L15B01",
        "shot_id": "S20_Shot4",
        "fp_id": "fp_l15_admin_security_office",
        "card": {
          "card_id": "6484526168f78053",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L15B01",
          "shot_id": "S20_Shot4",
          "fp_id": "fp_l15_admin_security_office",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "7200cc98672446e8",
            "space_model_hash": "b581f2abfb8c72e4",
            "zone_readback_hash": "0ce99a2cb3b48127",
            "shot_context_hash": "f5f33ac2122708d4",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "media_handoff_area"
                ],
                "essential_elements": [
                  "monitor_desk",
                  "cctv_monitors",
                  "computer_terminal",
                  "office_chair",
                  "file_cabinet"
                ],
                "openings": [
                  "interior_office_door"
                ],
                "zone_id": "cctv_review_area",
                "zone_type": "security"
              },
              {
                "adjacency": [
                  "cctv_review_area"
                ],
                "essential_elements": [
                  "handoff_table",
                  "media_copy_station",
                  "document_tray",
                  "visitor_chairs",
                  "storage_shelf"
                ],
                "openings": [
                  "interior_office_door"
                ],
                "zone_id": "media_handoff_area",
                "zone_type": "admin"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L15B01",
            "bg_plate_visible_description": "어둡게 눌린 작은 사무실의 배경만 아주 좁게 남아 있다. 벽면과 문 주변의 흐릿한 어둠, 업무 공간의 그림자 정도가 보이며, 책상이나 장비는 대부분 화면 밖으로 잘려 있다. 감시 화면은 직접 보이지 않고 차가운 빛의 방향만 느껴진다.",
            "camera_view_zone": "media_handoff_area",
            "confidence": 0.62,
            "diagnostics": [
              "평면도는 위에서 본 도식이고, 이 샷은 인물 얼굴에 극단적으로 밀착한 구도라 고정 배경 요소가 거의 남지 않는다.",
              "감시 화면과 책상은 시선과 조명을 설명하는 오프프레임 요소로 판단했으며, 직접 보이는 영역에는 포함하지 않았다."
            ],
            "fp_id": "fp_l15_admin_security_office",
            "missing_inputs": [],
            "not_visible_summary": "감시 모니터 줄, 보안 직원의 작업 책상, 의자, 파일 캐비닛은 화면에 잡히지 않는다. 인수인계용 테이블, 복사 장비, 문서 트레이, 방문 의자, 보관 선반도 대부분 잘려 보이지 않아 공간의 기능을 분명히 보여 주지는 못한다.",
            "scene_visible_description": "혜수의 얼굴과 찡그린 미간이 화면을 거의 채우고, 시선은 바로 앞 프레임 밖의 감시 화면을 향해 있다. 차가운 모니터 빛이 눈가와 이마를 깎아내듯 비추고, 주변 사무실은 깊은 회색 그림자로 가라앉아 있다. 배경의 벽과 업무 공간은 흐릿하고 좁게만 남아, 인물이 어두운 화면을 집중해서 들여다보는 긴장감이 전면에 드러난다.",
            "self_consistency": {
              "notes": "구조화된 항목과 서술 모두 인물 밀착 구도에서 행정 업무 공간이 일부만 배경으로 남는다는 판단으로 일치한다. 다만 고정 사물의 직접 노출이 적어 공간 매칭은 완전하지 않다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S20_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.58,
                "evidence": "감시 화면 쪽에서 인물에게 밀착해 들어가며, 인물 뒤의 업무 공간이 어둡고 흐릿하게만 남음",
                "matched_zone_id": "media_handoff_area",
                "observed_zone_type": "업무 인수인계 공간",
                "present_elements": [
                  "희미한 벽면",
                  "문 주변의 어두운 배경",
                  "업무 공간 그림자",
                  "차가운 화면빛이 닿는 주변 암부"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "low_confidence"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='low_confidence'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L15B01::S20_Shot7": {
        "bg_id": "L15B01",
        "shot_id": "S20_Shot7",
        "fp_id": "fp_l15_admin_security_office",
        "card": {
          "card_id": "0f8ab0342549c51d",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L15B01",
          "shot_id": "S20_Shot7",
          "fp_id": "fp_l15_admin_security_office",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "7200cc98672446e8",
            "space_model_hash": "b581f2abfb8c72e4",
            "zone_readback_hash": "0ce99a2cb3b48127",
            "shot_context_hash": "9fd1cd5c719e5723",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [
                  "media_handoff_area"
                ],
                "essential_elements": [
                  "monitor_desk",
                  "cctv_monitors",
                  "computer_terminal",
                  "office_chair",
                  "file_cabinet"
                ],
                "openings": [
                  "interior_office_door"
                ],
                "zone_id": "cctv_review_area",
                "zone_type": "security"
              },
              {
                "adjacency": [
                  "cctv_review_area"
                ],
                "essential_elements": [
                  "handoff_table",
                  "media_copy_station",
                  "document_tray",
                  "visitor_chairs",
                  "storage_shelf"
                ],
                "openings": [
                  "interior_office_door"
                ],
                "zone_id": "media_handoff_area",
                "zone_type": "admin"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L15B01",
            "bg_plate_visible_description": "낮은 책상 높이에서 보이는 고정 배경은 어둡고 닳은 업무용 책상 표면이 대부분을 차지한다. 뒤쪽에는 복사나 자료 이관에 쓰이는 장비가 검은 직사각형 덩어리처럼 흐릿하게 걸리고, 차가운 모니터빛이 책상 모서리와 주변 장비 윤곽에 희미하게 묻어난다. 벽이나 출입문, 의자와 선반은 이 가까운 구도에서는 거의 드러나지 않는다.",
            "camera_view_zone": "media_handoff_area",
            "confidence": 0.88,
            "diagnostics": [
              "첨부 평면도와 촬영 의도가 서로 맞아, 자료를 건네거나 복사하는 쪽의 책상 위 근접 구도로 판단된다.",
              "구도가 매우 가까워 다른 공간은 화면 밖으로 빠진 것으로 보았다."
            ],
            "fp_id": "fp_l15_admin_security_office",
            "missing_inputs": [],
            "not_visible_summary": "보안 모니터를 검토하는 쪽의 책상, 여러 감시 화면, 직원 의자, 파일 보관장은 이 삽입 구도에 잡히지 않는다. 자료 인계 공간 안에서도 방문자 의자, 큰 선반, 방 전체의 문과 벽 구조는 거의 보이지 않거나 화면 밖이다.",
            "scene_visible_description": "책상 바로 위에서 잡은 아주 가까운 삽입 화면이다. 혜수의 손가락이 작은 이동식 저장 장치를 단단히 쥐고 있고, 손마디의 긴장과 눌린 피부가 화면의 중심 감정이 된다. 저장 장치는 손과 책상에 비해 작고 현실적인 크기로 보이며, 금속 단자 가장자리만 차가운 빛을 받아 번뜩인다. 주변은 어두운 책상 표면과 흐릿한 사무 장비의 그림자로 눌려 있고, 사람 얼굴이나 방 전체 구조는 보이지 않는다.",
            "self_consistency": {
              "notes": "구조화된 항목과 서술 모두 자료 인계 책상 위의 근접 삽입 화면만을 설명하며, 보안 감시 구역은 보이지 않는 것으로 정리했다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S20_Shot7",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "자료를 건네는 책상 위에서 손과 저장 장치가 크게 잡히고 뒤쪽 장비가 흐릿하게 보인다.",
                "matched_zone_id": "media_handoff_area",
                "observed_zone_type": "administrative media handoff workspace",
                "present_elements": [
                  "handoff desk surface",
                  "USB memory held in hand",
                  "blurred media copy equipment",
                  "dim technical clutter",
                  "cold monitor spill light"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L19B01::S28_Shot6": {
        "bg_id": "L19B01",
        "shot_id": "S28_Shot6",
        "fp_id": "fp_l19_deck",
        "card": {
          "card_id": "7e49c309bd810474",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L19B01",
          "shot_id": "S28_Shot6",
          "fp_id": "fp_l19_deck",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "dc80800f3fe457a9",
            "space_model_hash": "436fa1d091df7aef",
            "zone_readback_hash": "1ddf4a228d5699f6",
            "shot_context_hash": "2fa3518fec1110c0",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "wheelhouse_threshold"
                ],
                "essential_elements": [
                  "low_gunwale",
                  "deck_hatch",
                  "cleats",
                  "work_crate"
                ],
                "openings": [
                  "open_edges",
                  "passage_to_wheelhouse_threshold"
                ],
                "zone_id": "open_deck",
                "zone_type": "deck"
              },
              {
                "adjacency": [
                  "open_deck"
                ],
                "essential_elements": [
                  "wheelhouse_bulkhead",
                  "entry_door",
                  "threshold_step",
                  "small_window"
                ],
                "openings": [
                  "door_to_wheelhouse",
                  "passage_to_open_deck"
                ],
                "zone_id": "wheelhouse_threshold",
                "zone_type": "threshold"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L19B01",
            "bg_plate_visible_description": "해질 무렵의 젖은 갑판 바닥이 카메라 쪽 전경에 낮게 깔리고, 정면에는 조타실 입구의 단단한 문틀과 문지방이 화면을 고정한다. 열린 출입구 안쪽은 어둡게 가라앉아 있으며, 소금기와 얼룩이 묻은 유리 패널과 선실 벽면이 희미한 반사를 만든다. 문 너머로는 불이 꺼진 조종 공간의 어두운 윤곽만 일부 느껴진다.",
            "camera_view_zone": "wheelhouse_threshold",
            "confidence": 0.83,
            "diagnostics": [
              "카메라가 갑판 쪽에 서 있지만 정면으로 조타실 출입구를 겨누는 구도이므로 입구 전환부를 주시 영역으로 판단했다.",
              "첨부 평면도는 상단 중앙의 출입 전환부와 그 앞의 넓은 갑판 영역만 선언 구역과 명확히 대응된다."
            ],
            "fp_id": "fp_l19_deck",
            "missing_inputs": [],
            "not_visible_summary": "갑판의 넓은 후방 영역, 해치, 작업용 상자, 여러 고정 장치와 낮은 난간 대부분은 이 구도에서 화면 밖이거나 가장자리로 밀려난다. 조타실 내부 전체도 출입구 뒤의 어둠으로만 암시될 뿐, 별도 공간으로 선명하게 드러나지는 않는다.",
            "scene_visible_description": "카메라는 젖은 외부 갑판에서 조타실 입구를 정면으로 바라본다. 화면 중심에는 입구를 가로막고 선 인물이 문틀 사이를 막아 서 있고, 양쪽 문설주와 문지방이 몸을 단단한 틀처럼 둘러싼다. 인물 뒤쪽의 조타실 안은 푸른 회색 그림자로 어둡게 잠겨 있으며, 얼룩진 유리와 희미한 조종 장치의 윤곽이 부분적으로 보인다. 카메라 쪽 전경에는 차갑고 축축한 갑판 바닥이 짧게 눌려 보이며, 열린 바깥 공간과 막힌 출입구의 대비가 강조된다.",
            "self_consistency": {
              "notes": "구조화 항목은 정면의 조타실 출입 전환부와 전경의 외부 갑판만 포함하며, 한국어 설명도 같은 범위만 묘사한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S28_Shot6",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "정면 중앙의 열린 출입구, 문틀, 문지방, 어두운 선실 쪽 면이 화면의 핵심 구조를 이룬다.",
                "matched_zone_id": "wheelhouse_threshold",
                "observed_zone_type": "조타실 입구 전환부",
                "present_elements": [
                  "조타실 외벽",
                  "열린 출입문",
                  "문틀",
                  "문지방",
                  "작은 유리 패널",
                  "어두운 내부로 이어지는 통로"
                ],
                "visibility": "visible"
              },
              {
                "confidence": 0.72,
                "evidence": "카메라 쪽 전경에 젖은 외부 바닥이 짧게 보이며 입구 앞 접근선으로 압축된다.",
                "matched_zone_id": "open_deck",
                "observed_zone_type": "외부 갑판",
                "present_elements": [
                  "젖은 갑판 바닥",
                  "입구 앞 접근 공간",
                  "희미한 난간 가장자리"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L19B02::S28_Shot4": {
        "bg_id": "L19B02",
        "shot_id": "S28_Shot4",
        "fp_id": "fp_l19_deck",
        "card": {
          "card_id": "7a500187be69bbaf",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L19B02",
          "shot_id": "S28_Shot4",
          "fp_id": "fp_l19_deck",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "dc80800f3fe457a9",
            "space_model_hash": "436fa1d091df7aef",
            "zone_readback_hash": "1ddf4a228d5699f6",
            "shot_context_hash": "daf17ab47b78fcd3",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "exterior_plate",
            "zones": [
              {
                "adjacency": [
                  "wheelhouse_threshold"
                ],
                "essential_elements": [
                  "low_gunwale",
                  "deck_hatch",
                  "cleats",
                  "work_crate"
                ],
                "openings": [
                  "open_edges",
                  "passage_to_wheelhouse_threshold"
                ],
                "zone_id": "open_deck",
                "zone_type": "deck"
              },
              {
                "adjacency": [
                  "open_deck"
                ],
                "essential_elements": [
                  "wheelhouse_bulkhead",
                  "entry_door",
                  "threshold_step",
                  "small_window"
                ],
                "openings": [
                  "door_to_wheelhouse",
                  "passage_to_open_deck"
                ],
                "zone_id": "wheelhouse_threshold",
                "zone_type": "threshold"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L19B02",
            "bg_plate_visible_description": "인물 뒤로 흐릿하게 젖은 갑판 가장자리와 낮은 난간이 걸리고, 해질녘 바다 안개가 회색빛과 금빛으로 번져 보인다. 배의 고정 구조물은 얕은 심도로 대부분 흐려져 있으며, 갑판의 넓은 면이나 조타실 출입부는 뚜렷하게 드러나지 않는다.",
            "camera_view_zone": "open_deck",
            "confidence": 0.86,
            "diagnostics": [
              "Tight close-up framing makes the environment secondary, with the deck match based mainly on railing, deck-edge, and exterior sea backdrop cues."
            ],
            "fp_id": "fp_l19_deck",
            "missing_inputs": [],
            "not_visible_summary": "조타실 쪽 출입문과 문턱, 작은 창은 이 구도에서 거의 잡히지 않는다. 갑판의 해치, 크레이트, 클리트 같은 고정물도 인물의 얼굴과 얕은 초점에 가려 프레임 밖이거나 식별되지 않는다.",
            "scene_visible_description": "해질 무렵 작은 배의 갑판에서 인우의 얼굴이 화면 대부분을 채운다. 놀라 크게 뜬 눈과 벌어진 입이 가까이 보이고, 아래쪽 앞에는 수리영이 내민 낡은 사진의 가장자리만 흐릿한 압박감처럼 걸린다. 배의 낮은 난간과 갑판 가장자리는 인물 뒤에서 흐려진 사선으로 지나가며, 바다 안개와 어두워지는 빛이 배경을 축축하고 불안하게 만든다.",
            "self_consistency": {
              "notes": "Structured zone list includes only the deck as visible, matching the prose descriptions that limit the frame to a close-up on the exterior deck with rail and sea haze in the background.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S28_Shot4",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.88,
                "evidence": "tight exterior close-up still shows the low rail, deck edge, and open sea haze behind the subject",
                "matched_zone_id": "open_deck",
                "observed_zone_type": "deck",
                "present_elements": [
                  "low gunwale or railing",
                  "deck edge",
                  "damp exterior deck surface glimpsed in blur",
                  "blurred photograph edge in the foreground",
                  "dusk sea haze beyond the boat"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L20B01::S29_Shot8": {
        "bg_id": "L20B01",
        "shot_id": "S29_Shot8",
        "fp_id": "fp_l20_wheelhouse",
        "card": {
          "card_id": "2ca761b32f75949d",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L20B01",
          "shot_id": "S29_Shot8",
          "fp_id": "fp_l20_wheelhouse",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "0e48d44b35665fc6",
            "space_model_hash": "21ee6ab9a93fb1cb",
            "zone_readback_hash": "75b2c59781a5dda1",
            "shot_context_hash": "7b22c643667bc366",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [],
                "essential_elements": [
                  "helm_wheel",
                  "control_console",
                  "instrument_gauges",
                  "navigation_display",
                  "radio_unit",
                  "windows"
                ],
                "openings": [
                  "door to exterior deck",
                  "front windows",
                  "side windows"
                ],
                "zone_id": "wheelhouse",
                "zone_type": "wheelhouse"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L20B01",
            "bg_plate_visible_description": "어둡고 좁은 조타 공간의 벽과 창, 조종 콘솔 일부가 인물 뒤로 눌리듯 보인다. 소금기와 때가 낀 창은 흐린 황금빛을 약하게 들이고, 콘솔 위의 조타륜, 항해 표시 화면, 계기판, 무전 장치가 그림자 속에 부분적으로 드러난다. 벽면에는 희미한 붉은 원형 표식이 어둔 얼룩 사이에 남아 불길한 배경을 만든다.",
            "camera_view_zone": "wheelhouse",
            "confidence": 0.9,
            "diagnostics": [],
            "fp_id": "fp_l20_wheelhouse",
            "missing_inputs": [],
            "not_visible_summary": "카메라는 매우 가까운 정면 구도라 조타 공간 전체를 담지 않는다. 출입문, 의자, 수납장, 바닥의 넓은 영역, 측면 벽 대부분은 화면 밖이거나 인물에게 가려진다. 선언된 다른 공간은 없다.",
            "scene_visible_description": "가까운 정면 구도에서 수리영이 의식을 잃고 인우의 어깨와 가슴 쪽으로 무너져 있다. 수리영의 머리와 상체가 아래쪽에 처지고, 인우의 굳은 얼굴은 그 위에서 차갑게 정지해 있다. 배경에는 어두운 조타 공간의 벽, 흐릿한 창, 조종 콘솔 가장자리, 원형 계기와 조타륜 일부가 인물들 사이와 뒤편으로 비친다. 희미한 붉은 원형 표식이 어둠 속에서 작게 드러나 불길한 분위기를 강화한다.",
            "self_consistency": {
              "notes": "구조화된 항목과 서술 모두 가까운 정면 구도에서 조타 공간 일부만 보인다는 판단으로 일치한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S29_Shot8",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "가까운 정면 구도 뒤로 조타륜과 계기판, 흐린 창, 조종 콘솔이 부분적으로 보인다.",
                "matched_zone_id": "wheelhouse",
                "observed_zone_type": "조타실",
                "present_elements": [
                  "조타륜",
                  "조종 콘솔",
                  "계기판",
                  "항해 표시 화면",
                  "무전 장치",
                  "흐린 창문",
                  "붉은 원형 표식"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      },
      "L20B02::S29_Shot3": {
        "bg_id": "L20B02",
        "shot_id": "S29_Shot3",
        "fp_id": "fp_l20_wheelhouse",
        "card": {
          "card_id": "2b5b49b8235ce1dc",
          "schema_version": 1,
          "prompt_version": "1",
          "model": "openai/gpt-5.5",
          "provider": "openai",
          "bg_id": "L20B02",
          "shot_id": "S29_Shot3",
          "fp_id": "fp_l20_wheelhouse",
          "fp_sot_mode": "zone",
          "input_contract": "zone_projection_card_v1",
          "source_hashes": {
            "fp_render_hash": "0e48d44b35665fc6",
            "space_model_hash": "21ee6ab9a93fb1cb",
            "zone_readback_hash": "75b2c59781a5dda1",
            "shot_context_hash": "ef6b6a4acd826593",
            "prompt_version": "1",
            "pack_version": "1.202606030307",
            "schema_version": 1,
            "model": "openai/gpt-5.5",
            "provider": "openai",
            "fp_sot_mode": "zone"
          },
          "space_model": {
            "space_type": "interior_room",
            "zones": [
              {
                "adjacency": [],
                "essential_elements": [
                  "helm_wheel",
                  "control_console",
                  "instrument_gauges",
                  "navigation_display",
                  "radio_unit",
                  "windows"
                ],
                "openings": [
                  "door to exterior deck",
                  "front windows",
                  "side windows"
                ],
                "zone_id": "wheelhouse",
                "zone_type": "wheelhouse"
              }
            ]
          },
          "vlm_output": {
            "bg_id": "L20B02",
            "bg_plate_visible_description": "낮고 가까운 시선에 더럽고 긁힌 조타실의 작업 표면만 아주 좁게 보인다. 소금기에 바랜 질감과 때가 낀 가장자리, 얕은 그림자가 배경을 이루며, 해질녘의 탁한 빛이 표면을 어둡고 누렇게 눌러 보이게 한다.",
            "camera_view_zone": "wheelhouse",
            "confidence": 0.9,
            "diagnostics": [],
            "fp_id": "fp_l20_wheelhouse",
            "missing_inputs": [],
            "not_visible_summary": "조타실의 넓은 구조는 거의 잡히지 않는다. 조타 장치, 계기판, 항해 화면, 무전기, 창문, 출입문, 의자와 수납 가구 같은 주변 설비는 프레임 밖이거나 식별되지 않는다.",
            "scene_visible_description": "낡고 살짝 말린 흑백 사진이 더러운 조타실 표면 위에 납작하게 놓여 있고, 수리영의 손끝이 사진 속 여자아이의 얼굴을 세게 누르고 있다. 눌린 손끝의 피부와 손톱 가장자리가 크게 보이며, 사진의 종이 결, 바랜 흰색과 어두운 인쇄면이 거의 화면을 채운다. 가장자리에는 긁힌 표면과 때, 짧은 그림자만 남아 이 장면이 좁고 어두운 조타실 안에서 벌어지고 있음을 겨우 알려 준다.",
            "self_consistency": {
              "notes": "구조화된 항목과 서술 모두 매우 가까운 삽입 구도로 조타실 내부의 작은 표면만 보인다는 내용으로 일치한다.",
              "prose_matches_structured": "consistent"
            },
            "shot_id": "S29_Shot3",
            "status": "ok",
            "visible_zones": [
              {
                "confidence": 0.9,
                "evidence": "낡은 사진과 손끝이 더러운 조타실 표면 위에 크게 잡히고, 주변 설비는 거의 잘려 보인다.",
                "matched_zone_id": "wheelhouse",
                "observed_zone_type": "조타실 내부의 작업 표면",
                "present_elements": [
                  "낡은 흑백 사진",
                  "손끝과 손톱 가장자리",
                  "긁힌 조타실 작업 표면",
                  "때와 얕은 그림자"
                ],
                "visibility": "partial"
              }
            ],
            "vlm_reported_state": "ok"
          }
        },
        "validation": {
          "validator_state": "ok",
          "card_state": "pass",
          "diagnostics": [
            "(ref) vlm_reported_state='ok'"
          ],
          "leaks": []
        },
        "card_state": "pass",
        "validator_state": "ok",
        "real_vlm_call": true,
        "real_vlm_call_count": 1
      }
    },
    "card_state_counts": {
      "pass": 36,
      "needs_review": 1,
      "blocked": 0
    },
    "sot_mode": "zone",
    "input_contract": "zone_projection_card_v1",
    "schema_version": 1,
    "prompt_version": "1.202606030307",
    "real_vlm_call_count": 37,
    "image_api_call_count": 0,
    "llm_call_count": 0
  },
  "step_id": "shot_zone_projection_card",
  "run_id": "4c08acee-bbe9-43f9-ace2-6e072ddd1cf0",
  "resolved_model": "gpt",
  "updated_at": "2026-06-03T03:21:52.313651+00:00",
  "project_config_snapshot": {}
}