# task-2984 — InsuRo 처리방침 게시: PWA 설치 배너 억제 + 프로덕션 배포

**레벨**: Lv.2 (기능 수정 + 배포) · **팀**: dev2-team (오딘) · **회장 승인 완료** (2026-08-20)

## 배경
task-2983(PR#235)로 개인정보처리방침이 `main=d8ee3e6`에 머지됐으나 **배포 미실행** 상태다.
ANU 실브라우저 검증에서 **PWA 설치 배너가 `/privacy` 법정 고지 화면을 가리는 현상**이 재현됐다.
회장님 결정: 배너를 억제한 뒤 게시한다. 지금 그냥 게시하면 가려진 화면이 그대로 공개된다.

## 선행 조건 (반드시 먼저)
로컬 저장소가 뒤처져 있다. 작업 시작 전 확인·동기화할 것.
- 현재 로컬 HEAD = `49c17a9` (task-2979) / **원격 `origin/main` = `d8ee3e6` (task-2983 PR#235)**
- `git pull --ff-only origin main` 으로 맞춘 뒤 시작한다.
- **재기동만으로는 반영이 아니다.** pull + 빌드 + 배포 3단계를 모두 거칠 것.

## 목표
1. `/privacy` 를 포함한 법정 고지 화면에서 PWA 설치 배너가 뜨지 않게 한다.
2. 수정본을 프로덕션에 게시한다.

## 범위 (엄수)
**수정 허용**: `src/components/PwaInstallPrompt.tsx` 만.

**수정 금지**:
- `src/App.tsx` — 라우트 조건으로 억제하고 싶어도 App.tsx 를 건드리지 말 것. 배너 컴포넌트 내부에서 현재 경로를 읽어 스스로 렌더를 건너뛰는 방식으로 구현한다.
- `src/pages/CustomerChat.tsx` 및 OAuth/로그인 관련 파일 — **task-2985 가 동시에 작업 중**이다. 건드리면 충돌한다.

이유: task-2984 와 task-2985 를 병렬로 돌리기 위해 무중첩을 강제한다. 파일이 겹치면 병렬이 성립하지 않는다.

## 구현 지침
- 억제 대상 경로: `/privacy` 및 이후 추가될 법정 고지 경로. 경로 목록을 컴포넌트 상단에 상수로 두어 나중에 추가하기 쉽게 한다.
- 배너를 완전히 제거하지 말 것. **다른 화면에서는 기존대로 동작해야 한다.**
- 코딩 4원칙 준수: 가장 단순한 해결책, 주변 코드 무수정.

## 검증 (전부 실행 후 증거 첨부)
1. `npm run build` EXIT=0
2. `npx vitest run` — task-2983 기준 **1226 passed** 유지. 감소하면 중단하고 보고.
3. **실브라우저**(Playwright, 빌드 산출물 기준):
   - `/privacy` 진입 → 배너 **미표시** + 처리방침 전문 렌더 + 콘솔 에러 0
   - 임의의 다른 화면 1곳 → 배너 **정상 표시**(회귀 없음 증명)
   - 두 화면 스크린샷 첨부. 픽스처가 아닌 실제 렌더임을 명시할 것.

## 배포 (검증 통과 후)
```
source .env.keys
wrangler pages deploy dist --project-name insuro --branch main
```
- 배포 후 **프로덕션 URL 로 `/privacy` 재확인** (로컬 빌드 확인으로 대체 금지).
- `/api/status` 의 sha 를 배포한 커밋과 대조해 반영을 실측한다.
- 배포 로그와 프로덕션 스크린샷을 보고서에 남긴다.

## 주의 — 과거 사고 재발 방지
- SPA 라서 `/privacy` 의 md5 가 루트와 같은 것은 **정상**이다. 이걸 부재 근거로 쓰지 말 것. 판정은 **브라우저 렌더 + 번들 문자열 검출**로 한다.
- "빌드 PASS = 실동작"이 아니다. 실브라우저 E2E 를 반드시 돌린다.
- 보고서에 "N passed" 를 쓸 때는 **로컬인지 CI 인지** 명시한다.

## 완료 조건
빌드 0 · 회귀 1226 유지 · 실브라우저 2화면 증거 · 배포 성공 · 프로덕션 `/privacy` 실측 확인 · sha 대조 일치

## allowed_resources (본 task의 capability)

```yaml
allowed_resources:
  paths:
    - "src/components/PwaInstallPrompt.tsx"
    - "src/components/__tests__/**"
    - "tests/**"
    - "e2e/**"
    - "memory/reports/task-2984.md"
  forbidden_paths:
    - "src/App.tsx"
    - "src/pages/CustomerChat.tsx"
    - ".github/**"
    - "memory/events/*.cron-*"
  commands:
    - "npm run build"
    - "npx vitest run"
    - "npx playwright test"
    - "wrangler pages deploy"
  merge_policy: "tiered"
  ttl_hours: 48
```

## 보고
완료 시 `memory/reports/task-2984.md` 작성 후 ANU 콜백. 콜백 프롬프트는 **UTF-8 3900 bytes 이하**, 봉투에는 경로와 한 줄 요약만 담고 상세는 보고서에 둔다.

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