# [Lv.1 fix] 소식지 교차검증 — 다페이지 codex 타임아웃 해소(60s→충분) + 이미지 부하 경감

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "server/newsletter_cross_verify.py"
    - "server/tests/test_newsletter_cross_verify.py"
  forbidden_paths:
    - ".github/**"
    - "extension/**"
    - "src/**"
    - "server/migrations/**"
    - "server/main.py"
    - "server/newsletter_review.py"
    - "server/newsletter_validation.py"
  commands: ["pytest","python3","git"]
  merge_policy: "none"
  ttl_hours: 10
```
> ★ base=현 origin/main(0e601ad). 라이브: codex 교차검증이 다페이지 PDF 에서 타임아웃→`cross_model_unavailable`. 병행 task-2912(업로드 파이프라인 백그라운드화, main.py)와 **파일 무중첩**.

## 배경 (ANU 실증 확정)
codex 로직 자체는 정상(1장 실측 16.8s, number_misread 정확 검출). 그러나:
- `_render_source_page_images` 가 **최대 6페이지**를 렌더 → cross_verify 가 **6장을 단일 codex exec 호출**(`-i` 반복)로 전달.
- `DEFAULT_TIMEOUT=60.0` → 6장×~17s ≫ 60s → codex 타임아웃 → graceful `cross_model_unavailable`. (그래서 회장 ABL생명 PDF 에서 숫자 오독을 codex 가 못 잡음.)
- task-2912 로 cross_verify 가 백그라운드 실행되므로 **타임아웃을 넉넉히 늘려도 업로드 응답과 무관**.

## 작업 (surgical, cross_verify.py 만)
1. **codex 타임아웃 상향**: `DEFAULT_TIMEOUT` 을 다페이지 수용 값으로(예: **240.0초**). run_review_pipeline 이 timeout 미지정으로 호출하므로 DEFAULT 상향이 그대로 반영됨.
2. **이미지 부하 경감**(codex 완주 보장):
   - cross_verify 내부에서 codex 에 넘기기 전 각 원본 이미지를 **긴 변 ~1400px 이하로 다운스케일**(PIL)해 임시파일로 저장 후 그 경로를 `-i` 로 전달(원본 파일은 불변, 임시 다운스케일본 사용·사용 후 정리). 텍스트 가독성 유지되는 선에서 토큰/시간 절감.
   - (또는 동등 효과: 페이지가 많을 때 상한을 두되, 숫자 누락 위험 없게 신중히. 다운스케일을 1순위 권장.)
3. graceful·플래그 스키마·extractive-only·확증편향 방지 프롬프트·codex argv(read-only·approval never·clean cwd) 전부 **불변**. 타임아웃/이미지 전처리만.

## 제약
- cross_verify.py + 그 테스트만. main.py·review·validation·migration 불변. codex 검출 로직·플래그 형식 불변.

## 검증
- `pytest server/tests/test_newsletter_cross_verify.py` 회귀 0(기존 codex mock 테스트 유지). 신규: DEFAULT_TIMEOUT≥240 / 다운스케일 경로가 원본 이미지를 변형하지 않고 임시본을 codex 에 넘김(mock 으로 -i 인자가 다운스케일 임시경로인지) / 다운스케일 실패 시 원본 경로로 graceful fallback.
- ★ L1 실측: 실제 여러 장(3~6) 이미지로 cross_verify 가 **타임아웃 없이 완주**하고 number_misread 를 검출하는지 측정(clean cwd), 보고서에 소요시간·결과 기록.

## 완료 (★ 순서 B)
- cross_verify.py + 테스트만. **dev6 금지** — dev3(다그다). 커밋 → push → **★ push 확인** → finish-task foreground 1회 → .done. ANU 독립검증·머지·재배포는 ANU.
