# task-1654.1 완료 보고서: 이미지 파이프라인 정리

## SCQA

**S**: 이미지 생성 파이프라인(image_router.py)이 Gemini, GPT Image, Satori, Hybrid, Claude CLI 5개 생성 경로를 지원하며, task-1650.1에서 텍스트 렌더링 근본 원인이 해결되었다.

**C**: (1) 제이회장님 지시로 OpenAI 이미지 생성(GPT Image) 사용 금지가 결정되었으나 코드에 잔존, (2) Claude CLI(Haiku) 호출 시 간헐적 빈 응답에 재시도 없이 바로 실패 처리, (3) Satori fallback이 인포그래픽 프롬프트를 단순 텍스트로만 렌더링.

**Q**: GPT Image 코드를 완전 제거하고, Claude CLI 안정성과 Satori 인포그래픽 품질을 확보할 수 있는가?

**A**: 3개 작업 모두 완료. GPT Image 관련 코드 전면 제거(함수/fallback/API키/테스트), Claude CLI에 최대 3회 재시도+1초 대기 로직 추가, Satori에 4종 인포그래픽 레이아웃(process_flow/comparison_table/checklist/infographic) 추가. pytest 89건 전체 통과, GPT 참조 0건 확인.

## 작업 상세

### 1. GPT Image 관련 코드 전면 제거
- `_generate_gpt()` 함수 삭제 (52줄, openai/requests import 포함)
- `_FALLBACK_CHAIN[PHOTOREALISTIC]`: `("gemini", "gpt")` → `("gemini", None)`
- `_call_method()` dispatch에서 `"gpt"` 키 제거
- `_load_env_keys()`에서 `OPENAI_API_KEY` 참조 제거
- 파일 상단 docstring 업데이트

### 2. Claude CLI 빈 응답 재시도
- `_prompt_to_html()`에 `max_attempts = 3` 재시도 루프 추가
- returncode != 0 또는 빈/비HTML 응답 시 1초 대기 후 재시도
- 각 시도마다 `log.warning()` 기록
- 3회 실패 시 `""` 반환 → Satori fallback 자연스럽게 트리거

### 3. Satori fallback 인포그래픽 최적화
- `satori_cli.js`에 4개 레이아웃 함수 추가:
  - `getProcessFlowDesign()`: 골드 번호 원 + 화살표 세로 배열
  - `getComparisonTableDesign()`: 파랑/주황 2컬럼 비교
  - `getChecklistDesign()`: 녹색 ✓ 아이콘 리스트
  - `getInfographicDesign()`: 제목+카드 섹션 배열
- `main()`에서 `[유형]` 접두사 감지 → switch 분기
- graceful degradation: 파싱 실패 시 기존 `getCardDesign()` fallback

### 테스트 갱신
- GPT 관련 8개 클래스/메서드 제거/재작성
- `TestGenerateImageGeminiFailure` 4개 테스트 신규 (GPT fallback → 에러 반환)
- `TestPromptToHtmlRetry` 6개 테스트 신규 (재시도 로직 검증)
- `TestFallbackMaxAttempts` hybrid/infographic 경로로 재작성

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **server.py/gemini_pro_generate.py에 GPT 참조 없음 확인** — grep 전수 검색으로 수정 불필요 확인
2. **satori_cli.js 인포그래픽 파싱 실패 시 기본 카드 fallback 누락** — try-catch + 빈 배열 체크로 graceful degradation 추가
3. **테스트에서 method_used="gpt" 하드코딩 잔존** — "satori"로 변경

## 산출물 파일

- `/home/jay/workspace/tools/ai-image-gen/image_router.py`
- `/home/jay/workspace/tools/ai-image-gen/test_image_router.py`
- `/home/jay/workspace/tools/ai-image-gen/satori-test/satori_cli.js`

## 테스트 결과

- pytest: **89 passed** in 4.29s
- GPT/OpenAI 참조 전수 검색: **0건** (image_router.py, test_image_router.py, gemini_pro_generate.py)
- py_compile: image_router.py ✅, test_image_router.py ✅

## 모델 사용 기록

- 토르(백엔드): image_router.py GPT 제거 + CLI 재시도 / sonnet
- 프레이야(프론트엔드): satori_cli.js 인포그래픽 레이아웃 / sonnet
- 헤임달(테스터): test_image_router.py 테스트 갱신 / sonnet

## 세션 통계
- 총 도구 호출: 20회

### 수정 파일 목록
- /home/jay/workspace/tools/ai-image-gen/test_image_router.py: 8회 (Edit)
- /home/jay/workspace/tools/ai-image-gen/image_router.py: 6회 (Edit)
- /home/jay/workspace/tools/ai-image-gen/satori-test/satori_cli.js: 2회 (Edit)
- bash_cmd: 2회 (Bash)
- /home/jay/workspace/memory/reports/task-1654.1.md: 1회 (Write)
- /home/jay/workspace/memory/tasks/task-1654.1.md: 1회 (dispatch)

### 도구 사용 현황
- Edit: 16회
- Bash: 2회
- Write: 1회
- dispatch: 1회

