# CI-5 — e2e 시나리오2 flaky 제거 (외부 네트워크 비의존 동기화)

## worktree / branch
- `/home/jay/projects/InsuRo/.worktrees/ci-5` · `task/ci-5-260719` · base `cc7476bfbd9f6b3ae3c99f9a7136cc9f94cd3ada`

## expected_files (정확히 1파일)
```yaml
allowed_resources:
  paths: ["tests/e2e/keyword-analysis-info-generate.spec.ts"]
  new_file_limit: 0
  commands: ["git","npm","npx","node"]
  merge_policy: "none"
```

## 문제 (ANU 재현 + Codex 확인)
- `tests/e2e/keyword-analysis-info-generate.spec.ts:405` — "인포키워드 서버 연결에 실패했습니다" toast 미출현으로 실패(9 passed / 1 failed).
- spec 은 이미 `page.route` 로 502 를 mock 하지만, **mocked 502 관측 전에 toast assertion 이 실행**되어 흔들린다.
- 앱 코드는 정상: `src/pages/InfoKeyword.tsx:391-393,455-456` 이 502 `detail` 을 toast 로 노출한다 → **불안정한 쪽은 E2E 동기화**.

## ★ 수정 요구 (회장 지시 — 4항목 전부 고정)
1. **route 등록을 클릭 전에 완료**한다.
2. **클릭과 `waitForResponse` 를 `Promise.all` 로 동기화**한다.
3. **정확한 URL 매칭**으로 **mocked 502 응답을 실제로 관측**한다(느슨한 glob 로 다른 요청을 잡지 말 것).
4. 그 **뒤에** toast 를 assert 한다.

⚠️ **외부 네트워크 성공에 의존하지 말 것.** mock 만으로 결정적으로 통과해야 한다.
⚠️ **금지**: `test.skip` · `retries` 증설 · timeout 무한 증가 · assertion 완화 · "Failed to fetch 미노출" 검증(407-408행) 제거

## 완료 판정
- `npx playwright test tests/e2e/keyword-analysis-info-generate.spec.ts --grep '시나리오2'` → PASS
- **연속 5회 실행 전부 PASS**(안정성 증명, 로그 첨부)
- 해당 spec **전체** 실행 시 기존 통과 케이스 유지(테스트 개수 감소 0)
- skip/xfail 증가 0

## ★ 절대 제약 (전 task 공통 — 회장 확정)
- **child PR 생성 0 · main merge 0.** 브랜치 커밋만. 수거는 ANU 가 parent 로 한다.
- **커밋 정확히 1개.**
- **expected_files 밖 수정 0.** 위반 시 STOP_REPORT.
- 대상 저장소 = **InsuRo**. 위 worktree **안에서** 수행.

## 보고
- 보고서: `/home/jay/workspace/memory/reports/ci-5-260719.md` (**저장소 밖 · git stage 0**)
- 내용: diff / 4항목 각 적용 근거 / **연속 5회 실행 원문 출력** / 테스트 카운트(전후) / MATCH·GAP
- 봇 종료 전 ANU callback(envelope만·UTF-8 ≤3900B, collector=ANU key c119085addb0f8b7)
