# task-1000.1: 카드뉴스 생성 + 스레드 업로드 E2E 검증 보고서

**작성일**: 2026-03-25
**작성자**: 헤르메스 (dev1 팀장)
**팀원**: 불칸(백엔드), 아르고스(테스터)

---

## SCQA

**S**: ThreadAuto 시스템이 운영 중이며, 카드뉴스 V2 렌더러 + Threads 업로드 파이프라인의 전체 E2E 검증이 필요한 상황이다.

**C**: 시스템 업그레이드 후 파이프라인의 실제 동작 여부가 미검증 상태였고, 브랜딩 요소 3종(서울대보험크루 badge, 서울대보험쌤 watermark, 인카다이렉트 TOP사업단 bar) 중 1종이 렌더링되지 않는 갭과 fact_guard가 CLI 파이프라인에 미통합된 아키텍처 갭이 발견되었다.

**Q**: 카드뉴스 생성 → Threads 업로드 E2E 파이프라인이 정상 작동하는가?

**A**: 핵심 파이프라인(카드뉴스 생성 + Threads 업로드)은 정상 동작 확인. 6장 1080x1350 PNG 이미지 생성(2분 7초) 후 Threads 업로드 성공(Post ID: 18072856829199159). 단, 브랜딩 1종 미렌더링과 fact_guard CLI 미통합은 별도 작업으로 해결 필요.

---

## Phase 1: 현재 상태 점검

### 테스트 실행
- **결과**: 420 passed / 1 failed (exit code 1)
- **실패 테스트**: `tests/test_crawler.py::TestRSSFeeds::test_rss_feeds_defined`
  - 원인: RSS_FEEDS 9개 vs 예상 10개 (기존 이슈, 본 작업 범위 외)

### 의존성
- Pillow 11.3.0 ✅
- anthropic 0.84.0 ✅
- requests 2.32.5 ✅

### 환경 설정
- `.env` 파일: 존재 (THREADS_APP_ID/SECRET, INSTAGRAM_APP_ID/SECRET 등 설정)
- `.tokens/token.json`: 존재 (access_token, token_type, expires_at, user_id 4개 키 SET)
- `.tokens/instagram_token.json`: 존재
- ANTHROPIC_API_KEY: 불필요 (claude CLI subprocess 방식 사용)

### 핵심 파일
- cli.py, run_card_post.py, run_full_pipeline.py ✅
- renderer/cardnews.py, pipeline/orchestrator.py ✅
- publisher/threads_publisher.py ✅
- publisher/threads_client.py: 미존재 (threads_publisher.py에 통합 구조)

---

## Phase 2: 카드뉴스 생성 테스트

### 생성 결과 (1차 - 업로드 없이)
- **명령**: `python3 cli.py pipeline -t cardnews --source news`
- **토픽**: 보케어·네이버 등록으로 개인 마케팅 채널 구축하기
- **카테고리**: 정보제공 / **테마**: PurplePink
- **이미지**: 6장 (cardnews_20260325_102920_00~05.png)
- **해상도**: 1080x1350 (전 장 동일)
- **파일 크기**: 84KB ~ 135KB
- **소요 시간**: 약 2분 7초
- **경고**: Firestore 초기화 실패 → 로컬 파일 폴백 (비치명적)

### 5개 테마 확인
코드에 5개 테마 모두 정상 정의 및 등록:
1. NavyGold (전문적·고급)
2. BlackRed (강렬·임팩트)
3. GreenWhite (신선·자연)
4. PurplePink (트렌디·감각적)
5. OrangeCream (따뜻·친근)

순환 이터레이터(`cycle`)로 자동 교대 선택 → 1차 PurplePink, 2차 NavyGold 확인.

### 브랜딩 요소
- "서울대보험크루" badge: ✅ 커버(00) 좌상단 핑크 pill badge
- "서울대보험쌤" watermark: ✅ 커버 좌하단 48pt bold + 본문/CTA 우하단 24pt 60% opacity
- "인카다이렉트 TOP사업단" bar: ❌ **미렌더링** (아래 이슈 참조)

### fact_guard 검증
- `cli.py pipeline` 경로에 fact_guard 미통합 (아래 이슈 참조)
- `run_card_post.py` 경로에만 fact_guard 검증 포함

---

## Phase 3: Threads 업로드 테스트

### 업로드 결과
- **명령**: `python3 cli.py pipeline -t cardnews --source news --upload`
- **결과**: 성공
- **Post ID**: `18072856829199159`
- **토픽**: 교육이 부실해서 스스로 공부해야 하는 상황이에요
- **카테고리**: 고민공감 / **테마**: NavyGold
- **슬라이드**: 6장 (cardnews_20260325_103620_00~05.png)
- **Instagram cross_publish**: 미실행 (cli.py pipeline 경로에서 CrossPublisher 미호출)
- **테스트 게시물**: 삭제하지 않음 (제이회장님 확인 대기)

---

## Phase 4: 발견 이슈 및 해결

### 자체 해결 (0건)
해당 없음 (파이프라인 실행 중 에러 없이 성공)

### 범위 외 미해결 (4건)

1. **"인카다이렉트 TOP사업단" bar 미렌더링** — 범위 외 사유: 렌더러 기능 추가 = 새 feature 개발, E2E 검증 범위 초과
   - 원인: `cardnews.py`가 `BRAND_NAME_PRIMARY`/`BrandingBar`를 import하지 않으며, 하단 bar draw 코드 자체 부재
   - `themes.py`에 `BrandingBar` 클래스 정의는 있으나 사용처 없음
   - **권고**: 별도 작업으로 `cardnews.py`에 하단 bar 렌더링 로직 추가

2. **fact_guard CLI 파이프라인 미통합** — 범위 외 사유: 아키텍처 변경, E2E 검증 범위 초과
   - `cli.py pipeline` → `orchestrator.py` 경로에 fact_guard 호출 없음
   - `run_card_post.py`, `run_full_pipeline.py`에만 fact_guard 포함
   - **권고**: `orchestrator.py`의 `run_cardnews()`에 fact_guard 검증 단계 추가

3. **Instagram cross_publish CLI 미지원** — 범위 외 사유: 설계 결정 사항
   - `cli.py pipeline --upload`은 `ThreadsPublisher`만 호출, `CrossPublisher` 미사용
   - `.env`에 `CROSS_POST_ENABLED=true` 설정되어 있으나 적용 안 됨
   - **권고**: `--upload` 시 `CrossPublisher` 경로 연동 또는 별도 플래그 추가

4. **기존 테스트 1건 실패** — 범위 외 사유: 본 작업과 무관한 기존 이슈
   - `test_rss_feeds_defined`: RSS_FEEDS 9개 vs 예상 10개
   - ⚠️ 기존 테스트 실패 1건 (본 작업 범위 외): `TestRSSFeeds::test_rss_feeds_defined`

---

## 테스트 결과 증거

### pytest (기존 테스트)
```
420 passed, 1 failed
FAILED tests/test_crawler.py::TestRSSFeeds::test_rss_feeds_defined
  AssertionError: RSS_FEEDS에 10개 피드가 있어야 하나 현재 9개입니다.
```

### E2E 생성 테스트
```
카드뉴스 V2 결과:
  토픽: 보케어·네이버 등록으로 개인 마케팅 채널 구축하기
  카테고리: 정보제공 / 테마: PurplePink
  슬라이드: 6장 / 이미지: 6개
```

### E2E 업로드 테스트
```
카드뉴스 V2 결과:
  토픽: 교육이 부실해서 스스로 공부해야 하는 상황이에요
  카테고리: 고민공감 / 테마: NavyGold
  슬라이드: 6장 / 이미지: 6개
  업로드: 성공 / Post ID: 18072856829199159
```

---

## 생성/수정 파일 목록

이 작업은 E2E 검증 전용이며 코드 수정 없음.

- 생성: `/home/jay/workspace/memory/reports/task-1000.1.md` (본 보고서)
- 생성(자동): `/home/jay/projects/ThreadAuto/output/cardnews_20260325_102920_00~05.png` (1차 생성)
- 생성(자동): `/home/jay/projects/ThreadAuto/output/cardnews_20260325_103620_00~05.png` (2차 생성+업로드)

---

## QC 체크리스트

- [x] 1. 다른 파일에 영향: 없음 (코드 수정 없음)
- [x] 2. 엣지 케이스: N/A (검증 작업)
- [x] 3. 작업 지시와 일치: Phase 1~4 전체 수행 완료
- [x] 4. 에러 처리/보안: API 키/토큰 값 미노출 확인
- [x] 5. 테스트 커버리지: 기존 테스트 420/421 pass
- [x] 6. 발견 이슈 처리: 4건 모두 범위 외 사유 명시
