# task-680: 카드뉴스 생성 + Threads Carousel 업로드 (재시도)

## 작업 레벨: Lv.1

## 배경
task-677.1에서 카드뉴스 업로드를 시도했으나, Threads에 carousel(이미지)이 아닌 텍스트만 게시됨. 제이회장님이 직접 확인한 결과 카드 이미지가 없었음. 작업 실패 판정.

## 목표
새로운 주제로 카드뉴스를 생성하고, **반드시 Carousel(이미지 슬라이드)로** Threads에 업로드한다.

## 실행 절차
1. 토픽 선택: `content/topic_selector.py`의 `select_single_topic()`으로 자동 선택
2. 콘텐츠 생성: `FiveStagePipeline().generate(topic, content_type="cardnews")` — slides JSON 생성
3. 카드뉴스 렌더링: `renderer/cardnews.py`의 `CardNewsRenderer`로 PNG 이미지 생성
4. **Carousel 업로드 필수**: `api/client.py`의 `ThreadsClient`로 **carousel** 타입으로 업로드
   - 단순 텍스트 post_text()가 아닌 **이미지 carousel** 방식 사용
   - Tailscale Funnel 또는 공개 URL로 이미지 서빙 후 Threads API에 image_url 전달

## 검증 기준 (반드시 확인)
1. PNG 이미지 파일이 최소 3장 이상 생성됨
2. 각 이미지 파일 크기 > 10KB (빈 이미지 아님)
3. Threads API 응답에서 post_id 반환
4. **★ 업로드 후 Threads API로 게시물 조회하여 media_type이 CAROUSEL인지 확인**
   - `GET /{post_id}?fields=media_type` 호출
   - media_type이 "CAROUSEL_ALBUM"이어야 성공
   - TEXT만 나오면 실패 → 원인 분석 후 재시도
5. 실패 시 에러 로그 전체 보존 (성공 건만 보고 금지)

## 주의사항
- task-677.1 실패 원인: carousel가 아닌 텍스트로 게시됨. 원인 분석 필수.
- 토큰 경로: `/home/jay/projects/ThreadAuto/.tokens/token.json`
- 이미지 서빙: Tailscale Funnel 사용 (`https://aidevserver.tail2cdab6.ts.net/images/`)
- 카드뉴스 출력 경로: `/home/jay/projects/ThreadAuto/output/` 하위

## 수정 금지
- 기존 코드 수정 없음. 기존 파이프라인 실행만.
- 단, carousel 업로드가 실패하는 코드 버그가 있다면 수정 후 보고.