# outdoor_frame_mode — 레인2 샷별 구도 판정 (E2E6 피드백 ③)

> 사용자 지시(2026-07-16): 인공 구조물 多(건물·큰 인공 복잡 구조물) 샷은
> '야외 맵→스케치' 단계 제외 — 스틸 참조 재설계(seed 직참조), 판별은 LLM.
> Codex 설계 합의(2026-07-16): 독립 샷별 CP, lane plan 확장 금지.

## 계약

- **판정 대상**: 현재 authoritative 선택 샷 중 lane plan `structure_plate`
  바인딩 전부 (레인1 map_marker 비대상 — 구조물 없음 전제).
- **frame_mode** (LLM, gpt — 분석 계열):
  - `structure_dominant`: 인공 구조물(건물·큰 인공 설치물)이 프레임의 주
    피사체 — 정면·클로즈·디테일·개구부 중심. 맵→스케치가 구조물 표현을
    왜곡하므로 스케치 생략.
  - `layout_dominant`: 배치·이동·방향 관계가 주 — 부감·개활 구도.
    현행 마커 맵→스케치 유지.
- **entry**: {status, frame_mode, confidence, evidence[{source_field,
  quote}], rationale_ko}. 인용 원문 실재 검증(whitespace 정규화만),
  완전성 parity(대상 샷 전부 entry 필수), 누락/실패/저신뢰 재시도 소진
  = fail-closed, allow_partial_downstream=False. mixed 임의 라우팅 금지.
- **소비 (shot_conti_light lane 분기)**:
  - structure_dominant → geometry/PIL/스케치 생략, lane_conti entry
    `status="direct_seed"` (정상 정책 결과 명시 — skipped 아님).
  - layout_dominant → 기존 경로(`status="ok"`+sketch).
  - flag ON 인데 frame_mode entry 부재 = AppError(조용한 하강 금지).
- **소비 (still_recipe lane 참조)**: `direct_seed` 샷 —
  - `location_ref_mode` 결정·기록: classify 가 prev 를 명시 판정했으면
    `prev_only`(refs=[prev+엔티티], seed 제외), 아니면
    `seed_only`(refs=[seed+엔티티]). 암묵 seed+prev 혼합 금지 (Codex C2).
  - 카메라·배치=텍스트 SOT 유지(기존 lane_ref_mode="seed" location
    authority 재사용). layout_dominant 샷은 기존 그대로(스케치+seed+prev
    — 설계 v2 명시 결정, frame_mode 도입 후에도 유지).
- **flag**: `outdoor_frame_mode_enabled` default OFF — OFF 면 스텝
  not_applicable + 소비처 기존 byte-identical.
- **order**: 21.78 (outdoor_lane_plan 21.775 뒤, structure_seed 21.92 앞).
  depends_on=[outdoor_lane_plan, shot_validator, shot_selection,
  scene_save, shot_staging(camera_direction 연출 병기)].
- **hash**: 팩 버전+모델+schema_version, conti/still 소비처 hash 에
  ON 시만 스탬프.

## 태스크

1. 모듈 outdoor_frame_mode.py: 프롬프트 조립+판정 실행+검증(인용·parity)
   — 결정론 부분 TDD.
2. 팩 prompts/_base/outdoor_frame_mode/1.x (judge system+schema).
3. 스텝 OutdoorFrameModeStep + 등록(STEP_CLASSES/manifest/applicability).
4. shot_conti_light lane 분기 direct_seed 처리 + hash 스탬프.
5. still_recipe direct_seed 참조 분기(location_ref_mode)+records 기록
   + hash 스탬프.
6. 결정론 테스트 + Codex 리뷰 + (E2E7 에서 flag ON 검증).
