# 시나리오 검증 시스템 Phase 2 — Playwright E2E + 시나리오 시드 확충

## Lv.2 작업

## 배경
Phase 1 완료: impact_analyzer.py(task-1761.1) + scenario_runner.py + qc_verify.py 통합(task-1762.1)
Phase 2: Playwright E2E smoke test + 초기 시나리오 YAML 확충

## 작업 내용

### 1. Playwright 인증 세션 관리
`/home/jay/workspace/teams/shared/qc/auth/setup_auth.py`

Firebase Auth 로그인 → storageState JSON 저장:
```python
# 1회 실행으로 인증 세션 저장
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context()
    page = context.new_page()
    page.goto("http://localhost:3000")
    # Firebase Google Auth 로그인 처리
    # ... (Firebase REST API로 custom token 발급 → 브라우저에 주입)
    context.storage_state(path="auth/storageState.json")
```

대안 (Google OAuth 없이): Firebase Admin SDK로 custom token 생성 → 브라우저에서 `signInWithCustomToken` 호출.

### 2. Playwright 시나리오 러너
scenario_runner.py에 `type: playwright` 지원 추가:
```yaml
- id: SC-UI-001
  category: rendering
  target: ["FloatingTermDetection.tsx"]
  type: playwright
  steps:
    - action: "navigate http://localhost:3000/docs/{test_doc_id}"
      wait: networkidle
    - action: "fill input[placeholder='문서 검색...'] 위고비"
      wait: 2000
    - action: "assert_visible text=신규 용어로 생성"
    - action: "assert_in_viewport .absolute.bottom-full"
  priority: must
```

Playwright 러너 동작:
1. storageState.json로 인증된 context 생성
2. steps를 순서대로 실행 (navigate, fill, click, assert)
3. assert 실패 시 스크린샷 저장 → FAIL 반환

### 3. 시나리오 YAML 시드 확충

`scenarios/insuwiki/` (10개 추가):
- 문서 페이지 로드 + 컴포넌트 존재 확인 (BacklinksPanel, FloatingTermDetection, InlineReviewPanel)
- 드롭다운 가시성 검증 (boundingBox + overflow 조상 검사)
- 정제 API 데이터 흐름 (selectedMonth → --month 전달)
- 정제 cancel → resume 흐름
- 정제 progress polling 동작

`scenarios/dashboard/` (5개 추가):
- 대시보드 로드 + 탭 전환
- InsuWiki 탭 통계 표시
- 정제 프로세스 모니터 패널 동작
- 필수 파일 섹션 표시

### 4. qc_verify.py 연동
scenario_gate verifier에서 Lv.3+ 작업 시 playwright 타입 시나리오 필수 게이트로 적용.
Lv.1-2는 playwright 시나리오 SKIP 허용.

## 참조
- Phase 1 결과: `/home/jay/workspace/teams/shared/qc/` (impact_analyzer.py, scenario_runner.py)
- 3문서: `/home/jay/workspace/memory/plans/scenario-verification/`
- 미팅 기록: `/home/jay/workspace/memory/meetings/2026-04-13-scenario-verification-system.md`
- Playwright 설치 확인됨: `python3 -c "from playwright.sync_api import sync_playwright; print('OK')"`

## 검증 시나리오
1. `setup_auth.py` 실행 → `auth/storageState.json` 생성 확인
2. storageState로 InsuWiki 문서 페이지 접근 → 로그인 상태 확인
3. `scenario_runner.py --scenarios-dir scenarios/insuwiki` → playwright 타입 시나리오 실행 성공
4. 의도적으로 assert_visible 실패 시나리오 → FAIL + 스크린샷 저장 확인
5. 전체 시나리오 실행 시간 5분 이내 확인

## 보고서
`/home/jay/workspace/memory/reports/task-{TASK_ID}.md`
