"""SOT: floor_plan_prompt 의 v6-호환 (v6-compatible) 버전 집합.

v6 / v7 / v8 / v9 pack 은 **동일한 출력 schema** 를 공유한다
(``numbered_elements`` 의 base/overlay partition + use/ignore array,
``camera_recommendations`` 의 bg_id contract). schema.json 은 v6~v9 가
byte-identical 이며, v7=system Rule11, v8=system space-type +
user_template ``{space_type_block}``, v9=system scale-fidelity 로 **프롬프트
semantics 만** 달라질 뿐 출력 계약은 동일하다.

v10 은 v6 schema 의 **additive superset** — 필수 필드 ``scale_guideline``
(층수·대략 높이/크기·개구부 수 등 최소 공간 규모 가이드. 평면 도면에는
수직 규모 정보가 없어 하류의 볼륨 변환[스케치/입면/렌더]이 전부 1층으로
붕괴하는 결함의 방지 메타데이터 — 근거: 씬 원문·제작자 정정·visual_world_rules
만, 무근거 시 시대/지역 전형 보수 범위+typical 표기)를 추가한다. v11 은 v10 schema byte-identical + system 규칙(단일 연속 위치 마커 계약, 2026-07-17 E2E7 실측)만 추가 — 출력 계약 무변경. v6 가 정의한
기존 필드·계약은 무변경 → 기존 consumer gate 관점에서 v6-호환 집합에 포함.

따라서 floor_plan_prompt 의 출력(numbered_elements / overlay payload /
camera_recommendations)을 소비하는 하류 step 들 — overlay payload, base
location dossier, geometry/semantic readback, shot-aware plan/preflight,
light sidecar — 은 모두 이 집합으로 gate 해야 한다. 과거에는 각 consumer 가
독자적으로 ``{"6", "7"}`` 를 하드코딩해, v8/v9 승격 시 consumer gate 만
못 따라와 ``not_applicable`` 로 빈 산출물을 내는 wiring 누락이 있었다
(W21B-w5 fresh E2E 에서 background_prompt 가 overlay payload None 으로 전체
실패). 새 v6-호환 pack 추가 시 **이 한 곳만** 갱신한다.
"""

V6_COMPATIBLE_FP_PROMPT_VERSIONS = frozenset({"6", "7", "8", "9", "10", "11"})

# v10+ 전용: 출력에 ``scale_guideline`` (필수 string) 을 carry 하는 버전 집합.
# validator 의 mocked / strict-off provider 안전망 분기가 이 집합으로 gate 한다
# (on-disk schema.json 이 1차 강제, 이 집합은 2차 점검용).
SCALE_GUIDELINE_FP_PROMPT_VERSIONS = frozenset({"10", "11"})
