{
  "status": "completed",
  "completed_count": 15,
  "applicable_count": 15,
  "failed_count": 0,
  "config_hash": "227191140fca22c3",
  "grounding_v2_chunk_schema": "1",
  "data": {
    "characters": [
      {
        "short_id": "C01",
        "name": "학생",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#3",
          "final_id": "C01",
          "owner_type": "character",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-1",
                "start": 98,
                "end": 100
              },
              "source_quote": "학생"
            },
            {
              "source_span": {
                "segment_id": "scene-1",
                "start": 204,
                "end": 206
              },
              "source_quote": "학생"
            },
            {
              "source_span": {
                "segment_id": "scene-1",
                "start": 225,
                "end": 227
              },
              "source_quote": "학생"
            },
            {
              "source_span": {
                "segment_id": "scene-3",
                "start": 20,
                "end": 22
              },
              "source_quote": "학생"
            },
            {
              "source_span": {
                "segment_id": "scene-3",
                "start": 167,
                "end": 169
              },
              "source_quote": "학생"
            },
            {
              "source_span": {
                "segment_id": "scene-4",
                "start": 19,
                "end": 21
              },
              "source_quote": "학생"
            }
          ],
          "evidence_quotes": [
            "검은 교복 윗도리 깃 안쪽에 두른 흰 천이 때가 타서 누렇다.",
            "손에는 검정 고무신 한 켤레를 들고 있다."
          ],
          "visual_brief": "검은 단추식 교복을 입고 낡은 흰 깃받이 천을 두른 학생. 장면 후반에는 이발을 마치고 고무신을 신는다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s1#1",
            "s1#2",
            "s1#3",
            "s1#4",
            "s3#1",
            "s3#3",
            "s4#1",
            "s4#2"
          ],
          "hard_to_generate": false,
          "viewers_would_notice": false,
          "search_terms_native": [],
          "language_lock_native": "",
          "registration": {
            "registered": true,
            "reason": "shot_appearances=8",
            "disposition": "registered",
            "final_id": "C01"
          }
        }
      },
      {
        "short_id": "C02",
        "name": "이발사",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#4",
          "final_id": "C02",
          "owner_type": "character",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-1",
                "start": 174,
                "end": 177
              },
              "source_quote": "이발사"
            },
            {
              "source_span": {
                "segment_id": "scene-3",
                "start": 35,
                "end": 38
              },
              "source_quote": "이발사"
            }
          ],
          "evidence_quotes": [
            "안에서 이발사가 흰 무명 겉옷 소매를 걷어 올린 채 나온다.",
            "이발사가 흰 겉옷 소매를 다시 한 번 걷고 가위를 든다."
          ],
          "visual_brief": "흰 무명 작업 겉옷의 소매를 걷은 이발사. 학생 곁에서 가위를 들고 일한다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s1#2",
            "s3#2",
            "s3#3"
          ],
          "hard_to_generate": false,
          "viewers_would_notice": false,
          "search_terms_native": [],
          "language_lock_native": "",
          "registration": {
            "registered": true,
            "reason": "shot_appearances=3",
            "disposition": "registered",
            "final_id": "C02"
          }
        }
      },
      {
        "short_id": "C03",
        "name": "노인",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#5",
          "final_id": "C03",
          "owner_type": "character",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 114,
                "end": 116
              },
              "source_quote": "노인"
            },
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 234,
                "end": 236
              },
              "source_quote": "노인"
            },
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 328,
                "end": 330
              },
              "source_quote": "노인"
            },
            {
              "source_span": {
                "segment_id": "scene-4",
                "start": 124,
                "end": 126
              },
              "source_quote": "노인"
            }
          ],
          "evidence_quotes": [
            "긴 겉옷을 입은 노인이 걸상 끝에 앉아 있다.",
            "노인이 모자를 집어 쓰고 일어선다.",
            "긴 겉옷 자락이 바람에 한 번 부풀었다 가라앉는다."
          ],
          "visual_brief": "긴 전통식 겉옷과 챙 없는 둥근 모자를 갖춘 노인. 국밥집 걸상에 앉았다가 골목으로 걸어간다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s2#1",
            "s2#3",
            "s2#5",
            "s2#6",
            "s4#4",
            "s4#5"
          ],
          "hard_to_generate": false,
          "viewers_would_notice": false,
          "search_terms_native": [],
          "language_lock_native": "",
          "registration": {
            "registered": true,
            "reason": "shot_appearances=6",
            "disposition": "registered",
            "final_id": "C03"
          }
        }
      },
      {
        "short_id": "C04",
        "name": "주인",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#6",
          "final_id": "C04",
          "owner_type": "character",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 177,
                "end": 179
              },
              "source_quote": "주인"
            },
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 245,
                "end": 247
              },
              "source_quote": "주인"
            }
          ],
          "evidence_quotes": [
            "주인이 됫박으로 쌀을 되어 자루에 붓는다.",
            "주인은 벽에 붙은 종이를 손등으로 가리킨다."
          ],
          "visual_brief": "국밥집에서 됫박으로 쌀을 재고 벽의 차림표를 가리키는 주인.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s2#2",
            "s2#3",
            "s2#4"
          ],
          "hard_to_generate": false,
          "viewers_would_notice": false,
          "search_terms_native": [],
          "language_lock_native": "",
          "registration": {
            "registered": true,
            "reason": "shot_appearances=3",
            "disposition": "registered",
            "final_id": "C04"
          }
        }
      }
    ],
    "locations": [
      {
        "short_id": "L01",
        "name": "골목",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#0",
          "final_id": "L01",
          "owner_type": "location",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-1",
                "start": 20,
                "end": 25
              },
              "source_quote": "골목 어귀"
            },
            {
              "source_span": {
                "segment_id": "scene-4",
                "start": 7,
                "end": 9
              },
              "source_quote": "골목"
            }
          ],
          "evidence_quotes": [
            "골목 어귀에 이발소 회전 간판이 느리게 돈다.",
            "코가 위로 살짝 올라간 모양이 흙바닥에 자국을 남긴다."
          ],
          "visual_brief": "근대 도시의 이발소와 국밥집이 마주한 좁은 흙바닥 골목. 낡고 차분한 거리 풍경이다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s1#1",
            "s1#2",
            "s1#3",
            "s1#4",
            "s1#5",
            "s4#1",
            "s4#2",
            "s4#3",
            "s4#4",
            "s4#5"
          ],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "일제강점기 골목",
            "근대 도시 골목",
            "흙바닥 골목"
          ],
          "language_lock_native": "한국어로 근대 한반도 도시 골목의 시대적 외관을 검색한다.",
          "registration": {
            "registered": true,
            "reason": "shot_appearances=10",
            "disposition": "registered",
            "final_id": "L01"
          }
        }
      }
    ],
    "props": [
      {
        "short_id": "P01",
        "name": "나무 상",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#18",
          "final_id": "P01",
          "owner_type": "prop",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 33,
                "end": 37
              },
              "source_quote": "나무 상"
            },
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 49,
                "end": 50
              },
              "source_quote": "상"
            }
          ],
          "evidence_quotes": [
            "길 건너 국밥집은 흙바닥에 나무 상이 낮게 깔려 있다.",
            "상 옆으로 긴 나무 걸상이 벽을 따라 놓였다."
          ],
          "visual_brief": "국밥집 흙바닥에 낮게 놓인 전통식 나무 상.",
          "shot_binding_status": "not_in_catalog_shots",
          "shot_appearance_ids": [],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "옛 나무 밥상",
            "낮은 나무 상",
            "전통 식당 나무상"
          ],
          "language_lock_native": "한국어로 근대 한반도 서민 식당의 낮은 나무 상을 검색한다.",
          "registration": {
            "registered": true,
            "reason": "grounding_exception",
            "disposition": "registered",
            "final_id": "P01"
          }
        }
      },
      {
        "short_id": "P02",
        "name": "됫박",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#22",
          "final_id": "P02",
          "owner_type": "prop",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 181,
                "end": 183
              },
              "source_quote": "됫박"
            }
          ],
          "evidence_quotes": [
            "주인이 됫박으로 쌀을 되어 자루에 붓는다."
          ],
          "visual_brief": "주인이 쌀의 부피를 재어 자루에 붓는 전통식 됫박.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s2#2"
          ],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "옛 됫박",
            "나무 됫박",
            "쌀 됫박"
          ],
          "language_lock_native": "한국어로 근대 한반도에서 사용한 전통식 됫박을 검색한다.",
          "registration": {
            "registered": true,
            "reason": "grounding_exception",
            "disposition": "registered",
            "final_id": "P02"
          }
        }
      },
      {
        "short_id": "P03",
        "name": "네모난 나무통",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#25",
          "final_id": "P03",
          "owner_type": "prop",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 201,
                "end": 208
              },
              "source_quote": "네모난 나무통"
            }
          ],
          "evidence_quotes": [
            "네모난 나무통 옆면의 쇠 띠가 빛을 받아 한 줄 반짝인다."
          ],
          "visual_brief": "국밥집에 놓인 각진 나무통. 옆면을 쇠 띠로 둘러 보강했다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s2#2"
          ],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "옛 네모 나무통",
            "쇠띠 나무통",
            "근대 곡물 나무통"
          ],
          "language_lock_native": "한국어로 근대 한반도의 쇠 띠를 두른 네모난 나무통을 검색한다.",
          "registration": {
            "registered": true,
            "reason": "grounding_exception",
            "disposition": "registered",
            "final_id": "P03"
          }
        }
      },
      {
        "short_id": "P04",
        "name": "네모난 나무통 옆면의 쇠 띠",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#26",
          "final_id": "P04",
          "owner_type": "prop",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 201,
                "end": 216
              },
              "source_quote": "네모난 나무통 옆면의 쇠 띠"
            }
          ],
          "evidence_quotes": [
            "네모난 나무통 옆면의 쇠 띠가 빛을 받아 한 줄 반짝인다."
          ],
          "visual_brief": "네모난 나무통의 옆면을 가로질러 두른 금속 보강 띠. 빛을 받아 한 줄로 반짝인다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s2#2"
          ],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "나무통 쇠띠",
            "목통 금속 보강띠",
            "옛 나무통 철띠"
          ],
          "language_lock_native": "한국어로 옛 나무통에 두르는 금속 보강 띠를 검색한다.",
          "registration": {
            "registered": true,
            "reason": "grounding_exception",
            "disposition": "registered",
            "final_id": "P04"
          }
        }
      },
      {
        "short_id": "P05",
        "name": "가위",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#28",
          "final_id": "P05",
          "owner_type": "prop",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-3",
                "start": 59,
                "end": 61
              },
              "source_quote": "가위"
            }
          ],
          "evidence_quotes": [
            "이발사가 흰 겉옷 소매를 다시 한 번 걷고 가위를 든다."
          ],
          "visual_brief": "이발사가 한 손에 든 단순한 수동식 이발 가위.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s3#3"
          ],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "옛 이발 가위",
            "근대 이발소 가위",
            "수동 이발 가위"
          ],
          "language_lock_native": "한국어로 20세기 전반 이발사가 사용한 수동 가위를 검색한다.",
          "registration": {
            "registered": true,
            "reason": "grounding_exception",
            "disposition": "registered",
            "final_id": "P05"
          }
        }
      }
    ],
    "location_parts": [
      {
        "short_id": "LP01",
        "name": "나무 미닫이문",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#15",
          "final_id": "LP01",
          "owner_type": "location_part",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-1",
                "start": 79,
                "end": 86
              },
              "source_quote": "나무 미닫이문"
            },
            {
              "source_span": {
                "segment_id": "scene-1",
                "start": 250,
                "end": 254
              },
              "source_quote": "미닫이문"
            }
          ],
          "evidence_quotes": [
            "그 아래로 나무 미닫이문이 반쯤 열려 있다.",
            "미닫이문이 나무틀째 덜컹이며 닫힌다."
          ],
          "visual_brief": "이발소 입구의 오래된 나무 미닫이문. 처음에는 반쯤 열려 있고 이후 나무틀이 흔들리며 닫힌다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s1#1",
            "s1#2",
            "s1#5"
          ],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "옛 가게 나무 미닫이문",
            "근대 상점 미닫이문",
            "이발소 나무문"
          ],
          "language_lock_native": "한국어로 근대 한반도 상점의 나무 미닫이문을 검색한다.",
          "registration": {
            "registered": true,
            "reason": "shot_appearances=3",
            "disposition": "registered",
            "final_id": "LP01"
          }
        }
      },
      {
        "short_id": "LP02",
        "name": "문턱",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#16",
          "final_id": "LP02",
          "owner_type": "location_part",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-1",
                "start": 233,
                "end": 235
              },
              "source_quote": "문턱"
            },
            {
              "source_span": {
                "segment_id": "scene-4",
                "start": 33,
                "end": 35
              },
              "source_quote": "문턱"
            }
          ],
          "evidence_quotes": [
            "학생은 신발을 문턱 옆에 내려놓고 들어간다.",
            "문턱 옆에 두었던 검정 고무신을 신는다."
          ],
          "visual_brief": "이발소 나무 미닫이문 아래의 낡은 문턱. 바깥 흙바닥과 실내를 가른다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s1#3",
            "s1#4",
            "s4#1",
            "s4#2"
          ],
          "hard_to_generate": false,
          "viewers_would_notice": true,
          "search_terms_native": [],
          "language_lock_native": "",
          "registration": {
            "registered": true,
            "reason": "shot_appearances=4",
            "disposition": "registered",
            "final_id": "LP02"
          }
        }
      },
      {
        "short_id": "LP03",
        "name": "벽에 붙은 종이",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#20",
          "final_id": "LP03",
          "owner_type": "location_part",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 75,
                "end": 83
              },
              "source_quote": "벽에 붙은 종이"
            },
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 249,
                "end": 257
              },
              "source_quote": "벽에 붙은 종이"
            }
          ],
          "evidence_quotes": [
            "벽에 붙은 종이에 붓으로 쓴 차림과 값이 번져 있다.",
            "주인은 벽에 붙은 종이를 손등으로 가리킨다.",
            "종이 귀퉁이가 말려 올라가 글자 하나가 가려져 있다."
          ],
          "visual_brief": "국밥집 벽에 붙인 종이 차림표. 붓글씨로 차림과 값을 적었으며 먹이 번졌고 한 귀퉁이가 말려 올라갔다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s2#4"
          ],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "옛 식당 종이 차림표",
            "붓글씨 음식값 종이",
            "근대 식당 벽 차림표"
          ],
          "language_lock_native": "한국어로 근대 한반도 식당의 붓글씨 종이 차림표를 검색한다.",
          "registration": {
            "registered": true,
            "reason": "grounding_exception",
            "disposition": "registered",
            "final_id": "LP03"
          }
        }
      },
      {
        "short_id": "LP05",
        "name": "창",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#29",
          "final_id": "LP05",
          "owner_type": "location_part",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-3",
                "start": 67,
                "end": 68
              },
              "source_quote": "창"
            }
          ],
          "evidence_quotes": [
            "창으로 든 빛이 바닥에 네모나게 떨어진다."
          ],
          "visual_brief": "이발소 안으로 빛을 들이는 창. 창의 형태를 따라 바닥에 네모난 빛이 생긴다.",
          "shot_binding_status": "not_in_catalog_shots",
          "shot_appearance_ids": [],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "근대 상점 창문",
            "옛 이발소 창문",
            "나무틀 창문"
          ],
          "language_lock_native": "한국어로 근대 한반도 상점의 창문을 검색한다.",
          "registration": {
            "registered": true,
            "reason": "grounding_exception",
            "disposition": "registered",
            "final_id": "LP05"
          }
        }
      },
      {
        "short_id": "LP04",
        "name": "값을 적은 나무판",
        "description": "",
        "visual_traits": [],
        "grounding_provenance": {
          "adapter_contract": "3.202609012800",
          "local_id": "c0#31",
          "final_id": "LP04",
          "owner_type": "location_part",
          "occurrences": [
            {
              "source_span": {
                "segment_id": "scene-3",
                "start": 95,
                "end": 104
              },
              "source_quote": "값을 적은 나무판"
            },
            {
              "source_span": {
                "segment_id": "scene-2",
                "start": 308,
                "end": 309
              },
              "source_quote": "판"
            }
          ],
          "evidence_quotes": [
            "벽에는 값을 적은 나무판이 걸려 있다.",
            "판은 가로로 길고, 글자를 붓으로 눌러 썼다.",
            "아래쪽 끝에 못 하나가 반쯤 박힌 채 남아 있다."
          ],
          "visual_brief": "이발소 벽에 건 가로로 긴 나무 가격판. 요금을 붓글씨로 눌러 썼고 아래쪽 끝에는 못 하나가 반쯤 박혀 있다.",
          "shot_binding_status": "bound_complete",
          "shot_appearance_ids": [
            "s3#4"
          ],
          "hard_to_generate": true,
          "viewers_would_notice": true,
          "search_terms_native": [
            "옛 이발소 가격표",
            "붓글씨 나무 가격판",
            "근대 이발소 요금표"
          ],
          "language_lock_native": "한국어로 근대 한반도 이발소의 붓글씨 나무 가격판을 검색한다.",
          "registration": {
            "registered": true,
            "reason": "grounding_exception",
            "disposition": "registered",
            "final_id": "LP04"
          }
        }
      }
    ],
    "removed": [],
    "merges": [],
    "merge_provenance_asked": false,
    "merge_refused": [],
    "projected_from": "grounding_chunk",
    "projection_contract": "3.202609012800"
  },
  "step_id": "entity_merge",
  "run_id": "d4548b81-8033-4822-bc62-07df7d97e569",
  "resolved_model": "gpt",
  "updated_at": "2026-09-01T18:09:21.477940+00:00",
  "schema_version": 1,
  "project_config_snapshot": {
    "required_owner_types": [
      "character",
      "location",
      "location_part",
      "outlook",
      "prop"
    ]
  }
}