# task-664.1 완료 보고서: 카드뉴스형 Threads 포스팅

**작업자**: 오딘(팀장), 토르(백엔드), 프레이야(프론트엔드)
**작업일**: 2026-03-17

---

## SCQA

**S**: ThreadAuto 프로젝트의 5단계 파이프라인과 CardNewsRenderer가 구축되어 있어 카드뉴스 콘텐츠 생성부터 Threads 업로드까지의 자동화 인프라가 갖추어져 있다.

**C**: 파이프라인이 `slide_type` 필드로 출력하는데 렌더러는 `type` 필드를 기대하여, 모든 슬라이드가 body 타입으로 폴백되는 필드명 불일치 버그가 존재했다.

**Q**: 버그를 수정하고 DB 마케팅 주제의 카드뉴스를 정상 생성하여 Threads에 게시할 수 있는가?

**A**: 렌더러의 `render_from_slides()`에 `slide_type` 폴백을 추가하여 버그를 수정했다. 5단계 파이프라인으로 콘텐츠 생성(검수 53/70점), 6장 카드뉴스 렌더링, Threads carousel 업로드까지 전 과정을 성공적으로 완료했다.

---

## 실행 결과

### 1단계: 콘텐츠 생성
- 토픽: "DB 마케팅으로 고객 확보하는 법" (정보제공 카테고리)
- 파이프라인 검수 점수: **53/70** (합격 기준 42점)
- 슬라이드 6장 생성:
  1. cover: "3년 뒤 어떤 설계사로 남을까"
  2. card_list: "아웃바운드 설계사의 하루"
  3. card_list: "인바운드 설계사의 한 달"
  4. detail: "자동 유입이 가능한 3가지 레이어"
  5. detail: "3년 뒤 격차를 만드는 결정적 변수"
  6. cta: "내 DB 구조 점검해드립니다"

### 2단계: 어투 검증
- 위반 1건 발견 → 수정 완료: "줄어들거든요" → "줄어듭니다"
- 제목: 6개 모두 명사형/구문형 (서술형 없음)
- 본문: 11개 문장 모두 합니다/습니다 체 준수

### 3단계: 카드뉴스 렌더링
- 6장 렌더링 성공 (51KB~119KB)
- 텍스트 가시성, 레이아웃, 밝은 테마 대비 모두 정상

### 4단계: Threads 업로드
- **threads_post_id**: `18111416935667578`
- **게시물 URL**: https://www.threads.net/@서울대보험쌤/post/18111416935667578
- Carousel 6장 정상 업로드
- Firestore 이력 기록: history_id `9ddd1f43-c8f9-4f30-b359-038b5d86e33f`

---

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **렌더러 slide_type 필드명 불일치** — `render_from_slides()`에서 `slide.get("type") or slide.get("slide_type", "body")` 폴백 추가
   - 수정 파일: `/home/jay/projects/ThreadAuto/renderer/cardnews.py:2155`
2. **어투 위반 (비격식체 "거든요")** — "줄어들거든요" → "줄어듭니다"로 수정
   - 수정 파일: `output/cardnews_content.json` (Slide 2, items[2].description)
3. **CTA 슬라이드 중간 영역 비어있음** — items 없는 cta 타입 슬라이드의 레이아웃 특성. 기능적 문제 아니므로 현 상태 유지 (개선 여지 있음)

### 범위 외 미해결 (1건)
1. **Firestore ADC 미설정** — 범위 외 사유: 인프라/환경 설정 문제. 로컬 파일 폴백으로 정상 동작 중

---

## 산출물
1. 보고서: `memory/reports/task-664.1.md`
2. 콘텐츠 JSON: `/home/jay/projects/ThreadAuto/output/cardnews_content.json`
3. 카드뉴스 이미지: `/home/jay/projects/ThreadAuto/output/cardnews_20260317_233153_0*.png` (6장)
4. 카드뉴스 이미지 (업로드용): `/home/jay/projects/ThreadAuto/output/cardnews_20260317_233408_0*.png` (6장)
5. Threads 게시물: https://www.threads.net/@서울대보험쌤/post/18111416935667578

## 생성/수정 파일 목록
- 수정: `/home/jay/projects/ThreadAuto/renderer/cardnews.py` (line 2155, slide_type 폴백)
- 생성: `/home/jay/projects/ThreadAuto/output/cardnews_content.json`
- 생성: `/home/jay/projects/ThreadAuto/output/cardnews_20260317_233153_0*.png` (6장)
- 생성: `/home/jay/projects/ThreadAuto/output/cardnews_20260317_233408_0*.png` (6장)

## 검증 증거
- 파이프라인 검수 점수: 53/70 (42점 합격 기준 초과)
- 어투 검증: 위반 1건 → 수정 완료, 최종 0건
- 이미지 렌더링: 6장 모두 파일 크기 > 0 (51KB~119KB)
- 시각적 확인: 커버/카드리스트/디테일/CTA 4개 슬라이드 타입 정상 렌더링
- Threads API: success=true, threads_post_id=18111416935667578

## QC 자동 검증 결과
- **overall**: PASS
- file_check: PASS (보고서 4249 bytes)
- data_integrity: PASS
- tdd_check: SKIP (Lv.1 실행 작업, 1줄 버그픽스이므로 TDD 대상 외)
- critical_gap: PASS
- 요약: 3 PASS, 7 SKIP
