# Threads API 카드뉴스 업로드 실패 원인분석 및 수정

## 문제 상황
task-1398.1 카드뉴스 5장 발행 시 Instagram은 성공(Post ID: 18346557121215868), Threads는 실패.
에러: HTTP 400 Bad Request, error_subcode 2207052 (미디어 URI 요건 불충족)
4/3에는 성공했으나 4/4에 실패 → 간헐적 또는 새로운 문제.

## 사전 조사 결과

### 인프라 상태 (정상)
- 이미지 서버(HTTP 8080): 실행 중
- Tailscale Funnel: 활성화, 이미지 URL 공개 접근 가능 확인
- URL 형식: `https://aidevserver.tail2cdab6.ts.net/images/`

### Instagram vs Threads 차이점
- Instagram: 로컬 파일 직접 업로드 또는 CDN URL → 성공
- Threads: Tailscale Funnel 통해 공개 URL 제공 → 실패

### 의심 원인들
1. **`is_carousel_item` 파라미터 타입**: Threads client.py에서 `True`(boolean), Instagram에서 `"true"`(string)
2. **Threads API 캐러셀 파라미터 변경**: Meta API 버전 업데이트
3. **Tailscale Funnel URL 일시적 접근 불가**: 타이밍 이슈
4. **이미지 크기/포맷 제한**: Threads API의 이미지 요건 변경

## 조사 및 수정 범위

### A. API 클라이언트 코드 분석
- `/home/jay/projects/ThreadAuto/api/client.py` — `post_carousel()` 메서드 (line 73-109)
  - `_create_container()` 호출 시 파라미터 확인
  - `is_carousel_item` 타입 (boolean vs string) 수정 테스트
- `/home/jay/projects/ThreadAuto/api/instagram_client.py` — 비교 분석
- 디버그 스크립트 참조: `/home/jay/projects/ThreadAuto/output/upload_test_20260317/debug_carousel.py`

### B. 이미지 서버 안정성 확인
- `/home/jay/projects/ThreadAuto/publisher/image_server.py`
- Threads API가 이미지를 가져올 때 접근 가능한지 실시간 확인
- Funnel URL의 응답 시간, SSL 인증서 상태

### C. Threads API 에러 상세 분석
- 에러 응답 body 전체 확인 (error_subcode 2207052 상세)
- Meta Graph API 문서에서 2207052 코드 의미 확인
- API 버전별 파라미터 차이 확인

### D. 과거 성공/실패 이력 비교
- `/home/jay/projects/ThreadAuto/output/` 에서 최근 publish_result 파일들 비교
- `/home/jay/projects/ThreadAuto/logs/` 에서 Threads 관련 로그
- 성공한 4/3과 실패한 4/4의 차이점 (API 호출 파라미터, 이미지 크기 등)

### E. 수정 및 테스트
- 원인 확인 후 코드 수정
- Threads API 테스트 업로드로 수정 검증
- 실제 업로드까지는 하지 말 것 (테스트용 draft/dry-run만)

## 프로젝트 경로
- `/home/jay/projects/ThreadAuto/`

## 산출물
1. 원인분석 보고서 (정확한 실패 원인 + 재현 조건)
2. 코드 수정 (client.py 또는 image_server.py)
3. 테스트 결과 (기존 테스트 통과 + 수정 검증)
