# [Lv.2] 소식지 업로드 UI — "자동(권장)" 기본 + 수동 파싱모드 고급 접이식

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "src/pages/AdminNewsletters.tsx"
    - "src/components/newsletter/**"
    - "src/**/*.test.tsx"
  forbidden_paths:
    - ".github/**"
    - "extension/**"
    - "server/**"
  commands: ["npm","npx","vite","git"]
  merge_policy: "none"
  ttl_hours: 12
```
> ★ base=현 origin/main. 근거: 회장 결정. 새 백엔드(task-2916)가 자동 판별+텍스트레이어 정확추출로 바뀌므로, 업로드 UI의 수동 "파싱 모드" 노출이 오히려 사고원인(회장이 텍스트 PDF에 Vision 강제→오독). 병행 task-2916은 server/ 만이라 무중첩.

## 배경
현 업로드 다이얼로그(`AdminNewsletters.tsx`)는 **파싱 모드 라디오**(자동 분석/표 데이터 추출/이미지 분석(Vision)/MarkItDown 변환) + **Vision 모델(Sonnet/Opus)**을 전면 노출. 새 파이프라인은 자동으로 텍스트/이미지를 판별해 텍스트 소식지는 정확 추출(pdf-inspector)하므로, 사용자가 모드를 고를 필요가 없고 오히려 잘못 고르면 품질이 나빠짐.

## 작업 (UI, 다이얼로그 정보위계 재편 — 기능/API 계약은 유지)
1. **기본 = "자동 (권장)"**: 업로드 다이얼로그 상단에 기본 선택된 "자동(권장)" 하나만 눈에 띄게. 설명: "시스템이 문서를 자동 분석해 최적 방식으로 추출합니다(텍스트는 정확 추출, 이미지는 AI 분석)." 사용자는 파일만 올리면 되게.
   - 이 "자동"은 백엔드에 **`parse_mode="auto"`**로 전송(기존 API 계약 그대로 — 백엔드가 auto에서 판별/텍스트레이어 우선 처리). ★ **기본 선택을 auto로**(현재 코드가 기본을 무엇으로 두든 auto로).
2. **"고급 옵션" 접이식(기본 접힘)**으로 수동 모드 강등:
   - 접이식(details/accordion/Collapsible) 안에 기존 수동 모드(표 데이터 추출=table / 이미지 분석(Vision)=vision / MarkItDown=markitdown)와 Vision 모델(Sonnet/Opus) 배치.
   - 문구로 "자동 결과가 이상할 때만 사용" 안내. Vision 모델 선택은 vision 모드일 때만 노출.
3. **기능·전송 값 불변**: 각 모드가 백엔드에 보내는 `parse_mode`/`vision_model` 값은 기존 그대로(auto/table/vision/markitdown, sonnet/opus). API·업로드 로직 변경 금지 — **UI 배치/기본값/노출만** 변경.

## 제약
- src/ 만. server·extension 불변. 업로드 fetch·필드·기존 기능(파일선택·보험사·발행월·제목·수동텍스트) 회귀 0. 계약(parse_mode 값) 불변.

## 검증
- `npm run build` PASS + tsc 0. 신규 테스트: 기본 선택이 auto / 고급 접이식 기본 접힘 / 고급 펼치면 table·vision·markitdown 선택 가능 / vision 선택 시 모델 선택 노출 / 각 선택이 올바른 parse_mode 값 전송.
- ★ **실렌더 스크린샷 육안**: 다이얼로그가 "자동(권장)" 기본 + "고급 옵션" 접힌 상태로 뜨는지.

## 완료 (★ 순서 B)
- src/ 만. **dev6 금지** — dev2(오딘). 커밋 → push → **★ push 확인** → **npm run build PASS 확인** → finish-task foreground 1회 → .done. ANU 독립검증(실렌더)·머지·배포는 ANU.

## goal_assertions (auto-generated)
- `npm run build`
