"""W21B-w5 fixup — v6-compatible FP prompt version SOT lock.

v8/v9 가 floor_plan_prompt.py 에서 v6-compatible 로 승격됐으나 하류 consumer
gate(overlay payload / dossier / geometry·semantic readback / shot-aware
plan·preflight / light sidecar)가 독자적으로 ``{"6","7"}`` 만 허용해
not_applicable 로 빈 산출물을 내던 wiring 누락(BG 0개) 재발 방지. 모든 gate
상수가 단일 SOT(app.core.fp_prompt_compat)를 참조하는지 잠근다.
"""
from app.core.fp_prompt_compat import V6_COMPATIBLE_FP_PROMPT_VERSIONS as SOT


def test_sot_includes_v6_through_v10():
    # v10 = v6 schema 의 additive superset (scale_guideline 추가) — 기존
    # v6-family 필드/계약 무변경이므로 consumer gate 집합에 포함.
    assert SOT == frozenset({"6", "7", "8", "9", "10", "11"})


def test_all_consumer_gate_constants_reference_single_sot():
    """gate 상수가 전부 동일 SOT 객체를 참조 — 새 v6-compatible pack 추가 시 한 곳만 갱신."""
    from app.modules.pipeline.floor_plan_prompt import _V6_COMPATIBLE_SELECTORS
    from app.core.steps.floor_plan_semantic_readback_step import (
        _COMPATIBLE_FP_PROMPT_VERSIONS,
    )
    from app.core.steps.floor_plan_light_sidecar_step import (
        _SUPPORTED_FP_PROMPT_VERSIONS,
    )

    assert _V6_COMPATIBLE_SELECTORS is SOT
    assert _COMPATIBLE_FP_PROMPT_VERSIONS is SOT
    assert _SUPPORTED_FP_PROMPT_VERSIONS is SOT


def test_preflight_local_set_matches_sot():
    """shot_aware_bg_preflight 는 app-namespace 격리(pure validator)라 SOT 를 import
    못 하고 로컬 set 을 복제한다 — 값이 SOT 와 일치하는지 잠가 drift 를 막는다.
    """
    from app.modules.pipeline.shot_aware_bg_preflight import (
        _V6_COMPATIBLE_FP_VERSIONS,
    )

    assert _V6_COMPATIBLE_FP_VERSIONS == SOT
