# task-1695.1 완료 보고서: 블로그 이미지 생성 전략 재설계 Agent Meeting

## S - Situation
블로그 이미지 생성 파이프라인(image_router.py)이 5개 유형(infographic, comparison_table, checklist, process_flow, chart)의 이미지를 Claude CLI(haiku) HTML 생성 → Playwright PNG 변환으로 운영 중이다. 광고 배너(Satori 템플릿, 하이브리드, Gemini)는 안정적으로 높은 품질을 달성하고 있다.

## C - Complication
7차례 수정(task-1616.1 ~ task-1670.1)에도 불구하고 블로그 이미지 품질 문제가 반복된다. 스크린샷 분석 결과 5개 이미지 중 #3(Gemini photo)만 양호, #1은 아이콘만 배치, #5는 프롬프트 텍스트가 이미지에 그대로 출력되는 핵심 버그가 재발했다. 모든 수정이 parametric(프롬프트 수정, 가이드라인 주입, QC 게이트)이었으며 아키텍처 변경 없이 동일 실패 반복 중이다.

## Q - Question
LLM이 매번 HTML을 새로 생성하는 비결정적 파이프라인을 유지한 채 품질 문제를 해결할 수 있는가, 아니면 광고 배너처럼 사전 정의 템플릿 기반으로 근본적 아키텍처 전환이 필요한가?

## A - Answer
Agent Meeting(hybrid 모드, thorough 깊이, 2 사이클) 결과, **사전 정의 Satori 템플릿 + LLM JSON 데이터 추출 방식으로 아키텍처 전환**이 전원 합의되었다. 핵심 변경: (1) `_prompt_to_html()` → `_extract_structured_json()` 교체, LLM은 HTML 생성하지 않고 JSON 데이터 추출만 수행, (2) satori_cli.js에 --json 모드 추가, 5유형별 고정 레이아웃, (3) Composition 패턴(레이아웃 셸 5개 + design-tokens.json)으로 템플릿 관리, (4) LLM 토큰 75% 절감 예상.

## Agent Meeting 상세

### 참여자
- 토르(백엔드): 파이프라인 아키텍처, 구현 계획 설계
- 미미르(UX/UI): 정보 아키텍처, 디자인 토큰, 품질 기준 정량화
- 로키(레드팀): DA — 템플릿 폭발 우려, 복잡도 증가 경고, HTML 후처리 대안 제시
- 비너스(디자인): 유형별 디자인 원칙, 네이티브 HTML 전환 제안

### 근본 원인 분석 (전원 합의)
- 광고 배너: **결정론적** 파이프라인 (템플릿 + 변수 치환 → 동일 입력 = 동일 출력)
- 블로그 이미지: **비결정론적** 파이프라인 (LLM이 매번 HTML 재생성 → 품질 편차)
- 핵심 차이: LLM에게 "디자인"을 위임(블로그) vs "데이터만" 위임(배너)
- 7차례 수정이 모두 실패한 이유: 비결정성 위에서의 확률 개선 시도에 불과

### 기각된 전략
- **전략 B (Gemini 통합)**: Gemini는 텍스트 렌더링 본질적 취약. 한글 정확도 낮음. photo 유형에만 제한 사용.
- **전략 C (프롬프트 강화)**: 7번 실패가 증거. 프롬프트로 픽셀 정밀도 제어 불가.
- **HTML 후처리 정규화 (로키 DA 대안)**: 구조적 실패(#1 아이콘만, #5 프롬프트 출력)는 후처리로 해결 불가. 반박 수용.
- **Screenshot-as-a-Service (로키 비관습 대안)**: 블로그에 OG 최적화 히어로 섹션 미존재. 기각.
- **Figma API (로키 Cycle 1 대안)**: 외부 서비스 의존성 추가. 현 단계에서 불필요한 복잡도.

### 구현 계획 핵심

**수정 대상 파일:**
- `/home/jay/workspace/tools/ai-image-gen/image_router.py`: `_prompt_to_html()` → `_extract_structured_json()` 교체
- `/home/jay/workspace/tools/ai-image-gen/satori-test/satori_cli.js`: --json 모드 추가
- `/home/jay/workspace/tools/ai-image-gen/test_image_router.py`: 테스트 갱신
- 신규: `infographic_schema.py` (JSON 스키마 정의)
- 신규: `design-tokens.json` (디자인 토큰)

**파이프라인 변경:**
```
[기존] 블로그 본문 → Claude CLI(haiku) → HTML 생성 → Playwright → PNG
[신규] 블로그 본문 → Claude CLI(haiku) → JSON 추출 → Satori 템플릿 → PNG
```

**성공 기준:** 5유형 × 3프롬프트 = 15개 이미지 모두 자동 QC 통과

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **DA 복잡도 우려 반영** — Jinja2+Playwright 이중 렌더링 경로를 Satori 단일 경로로 통합하여 복잡도 감소
2. **유형 분류 SPOF 우려 반영** — "generic" fallback 타입 추가로 분류 실패 시 안전 경로 확보
3. **Temporal Interrogation OPEN 항목 4건 모두 RESOLVED** — items 최대 개수, design-tokens 우선순위, Mock 구조, 재시도 전략 확정

## 산출물 파일
- `/home/jay/workspace/memory/meetings/2026-04-12-blog-image-strategy-redesign.md`
- `/home/jay/workspace/memory/reports/task-1695.1.md`

## 모델 사용 기록
- 토르 (Cycle 1, 2): opus / 파이프라인 아키텍처 분석 + 구현 계획 / 정당성: Lv.4 전략 작업
- 미미르 (Cycle 1, 2): opus / UX 요구사항 + 디자인 토큰 설계 / 정당성: Lv.4 전략 작업
- 로키 (Cycle 1, 2 DA): opus / 레드팀 분석 + DA / 정당성: Lv.4 전략 작업, DA 필수
- 비너스 (Cycle 1): opus / 디자인 품질 분석 / 정당성: Lv.4 전략 작업
- Temporal Interrogation (토르): opus / 시간대별 결정사항 식별 / 정당성: 미팅 필수 절차

## 셀프 QC

- [x] 1. 다른 파일에 영향 미치는가? → 이 작업은 Agent Meeting으로 코드 변경 없음. 후속 구현 작업에서 영향 파일: image_router.py, satori_cli.js, test_image_router.py
- [x] 2. 엣지 케이스? → 혼합형 콘텐츠(비교표+체크리스트) → generic fallback으로 처리
- [x] 3. 작업 지시와 일치? → Lv.4 Agent Meeting 실행, 근본 원인 분석 + 해결 전략 합의 + 구현 계획 도출 완료
- [x] 4. 에러 처리와 보안? → JSON 스키마 검증, 재시도 로직, fallback 체인 설계 포함
- [x] 5. 테스트 커버리지? → 15개 이미지 매트릭스 + 자동 QC 5개 기준 설계 완료
- [x] 6. 이슈 모두 해결? → DA 우려사항 3건 모두 반영하여 설계 수정 완료
- [x] 7. 코드 아키텍처 원칙? → N/A (Agent Meeting, 코드 변경 없음)
- [x] 8. 인터페이스 변경 시 문서 갱신? → N/A (Agent Meeting, 코드 변경 없음)
- [x] 9. HTML/PNG 대응? → N/A (Agent Meeting, 이미지 생성 없음)
- [x] 10. CLAUDE.md 100줄 미만? → 팀 CLAUDE.md 미변경

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

### 수정 파일 목록
- /home/jay/workspace/memory/meetings/2026-04-12-blog-image-strategy-redesign.md: 1회 (Write)
- /home/jay/workspace/memory/reports/task-1695.1.md: 1회 (Write)
- /home/jay/workspace/memory/tasks/task-1695.1.md: 1회 (dispatch)

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

