# [fix] 정보성 키워드 분석 거짓 실패(5분 timeout) 수정 — 프론트 폴링 상한

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "src/pages/InfoKeyword.tsx"
    - "src/**/__tests__/**"
  forbidden_paths:
    - "extension/**"
    - "server/**"
    - ".github/**"
  commands:
    - "npx vitest"
    - "npx tsc"
    - "git"
  merge_policy: "none"
  ttl_hours: 6
```
> ★ merge_policy=none — PR OPEN 유지. 머지=아누 Codex+독립검증.

## 문제 (실측 확정)
`src/pages/InfoKeyword.tsx` "AI키워드분석 - 정보성 키워드" — 백엔드(InfoKeyword 워커)는 분석을 **정상 완료**(실측 343초, 키워드 5개)하는데, 프론트 폴링 상한이 **고정 300초**라 그 전에 포기 → "분석 시간이 초과되었습니다"(destructive toast) → 사용자에겐 **거짓 실패**. 실제로는 성공.
- `363: POLL_MAX_SECONDS = 300` · `505: MAX_ATTEMPTS = 300/5 = 60` · `526: timeout toast`.
- 실 소요 = 키워드 수 × (블로그 10개 × Playwright+Claude 비전) → 5개 시 300초 초과 상시.

## 수정 (프론트 상한 현실화)
1. **폴링 상한을 키워드 수 비례 동적화**: 예) `POLL_MAX_SECONDS = clamp(base + perKeyword × 키워드수, 300, 900)` (예: base 120 + perKeyword 120 → 5개=720초). 상수·계산은 합리적 값으로. **실측 343초를 여유있게 커버**(단일 키워드도 최소 300 유지).
2. `pollProgress.max`·`MAX_ATTEMPTS` 이 동적 상한을 따라가게(현재 상수 참조부 `363,365,488,505,508` 정합).
3. **타임아웃 문구 완화(선택·권장)**: 진짜 초과 시 "실패"가 아니라 "분석이 예상보다 오래 걸립니다 — 잠시 후 다시 확인해주세요"로. (하드 실패 축소)
4. 90초 `AbortController`(line 380)는 **개별 요청** 타임아웃이라 무관 — 건드리지 마라.

## 제약
- **프론트만**(`InfoKeyword.tsx`). 워커(`InfoKeyword/worker/`)·서버·확장 미변경.
- 상한 상향만, 다른 폴링 로직·요청 abort·UI 흐름 불변.
- 워커 결과 인메모리 유실(재시작 시)은 **별건 후속**(이 task 범위 밖) — 보고서에 1줄 명시.

## 검증
- 키워드 수 N 에 따라 `POLL_MAX_SECONDS`/`MAX_ATTEMPTS`/`pollProgress.max` 가 동적으로 커지는지(단위테스트 or 계산 검증).
- 5개 키워드 시 상한 ≥ ~700초(343초 여유 커버).
- 단일 키워드 최소 300초 유지(회귀 0).
- `npx tsc` 타입 클린 · 기존 InfoKeyword 관련 테스트 회귀 0.

## 완료
- `src/pages/InfoKeyword.tsx`(+테스트) 외 변경 0 (`git diff --stat`)
- **dev6 금지** — dev1. worktree finish → PR(OPEN 유지·머지 금지) → ANU 독립검증.
- **ANU callback**(UTF-8 ≤3900 bytes, envelope).

## goal_assertions (auto-generated)
- `npx tsc`
