# task-720.1 완료 보고서: Threads 텍스트 포스트 업로드 1건

## SCQA

**S**: ThreadAuto 파이프라인이 카드뉴스(TypeA~E) 및 V2 카드뉴스 발행을 지원하며, TextContentGenerator를 통한 텍스트 전용 포스트 생성 기능도 구현되어 있다.

**C**: CLI `pipeline --type text` 명령이 미지원 상태로, 텍스트 전용 포스트 업로드 시 TextContentGenerator + ThreadsPublisher를 직접 조합하는 스크립트가 필요했다. 작업 지시서의 명령어(`python3 cli.py pipeline --type text --upload`)가 실제 CLI 인터페이스와 불일치.

**Q**: TextContentGenerator + ThreadsPublisher 직접 호출로 텍스트 전용 포스트 1건을 정상 업로드할 수 있는가?

**A**: `run_text_post.py` 스크립트를 작성하여 토픽 선택 → 텍스트 생성(Claude CLI) → 문장 완결성 검증 → Threads API 업로드까지 성공 완료. post_id `18083052221615915` 확인. 글자수 184자, text_story 타입, 문장 잘림 없음.

## 업로드 결과

- **post_id**: `18083052221615915`
- **text_type**: text_story (경험담/사례)
- **토픽 카테고리**: 정보제공
- **토픽 제목**: 약정조건 충족 시 이직 후에도 잔여수수료 지급되는 구조
- **글자수**: 184자
- **Threads API 응답**: HTTP 200 OK

## 텍스트 전문

```
실제 사례 하나 공유하면, 전속 7년차 P설계사가 TOP사업단으로 옮길 때 제일 걱정한 게 잔여수수료였거든요. 약정조건 충족 상태라 이직 후에도 월 85만원이 12개월간 그대로 입금된 거임. 2025년 기준 유지율 80% 넘으면 잔여분 나오는 구조인데 모르는 사람이 많음. 서울대보험쌤 상담 후 약정 확인하고 움직인 게 컸다고 🔑

#GA이직 #잔여수수료
```

## 주제 요약

GA 이직 시 잔여수수료 지급 구조에 대한 실제 사례 공유. 전속 7년차 설계사가 약정조건 충족 후 이직하여 월 85만원을 12개월간 수령한 경험담.

## 생성/수정 파일 목록

- `/home/jay/projects/ThreadAuto/run_text_post.py` — 텍스트 포스트 생성+업로드 스크립트 (신규)
- `/home/jay/projects/ThreadAuto/content/evergreen_topics.json` — used_count 1 증가 (자동 갱신)

## 발견 이슈 및 해결

### 자체 해결 (3건)

1. **CLI `--type text` 미지원** — `run_text_post.py` 스크립트를 작성하여 TextContentGenerator + ThreadsPublisher 직접 호출로 우회
   - 상세: CLI pipeline 명령은 TypeA~TypeE (이미지) 및 cardnews만 지원. 텍스트 전용 타입은 별도 스크립트 필요.

2. **텍스트 생성 검증 실패 2회** — TextContentGenerator 내부 재시도 로직(MAX_RETRIES=3)으로 자동 해결. 3차 시도에서 통과.
   - 상세: 1, 2차 시도에서 길이/블랙리스트 검증 실패 후 3차에서 184자 text_story 생성 성공.

3. **문장 끝 이모지 경고** — 마지막 문자가 이모지(🔑)로 ending_chars 검증에서 warning 발생. 실제 내용상 문장은 "컸다고 🔑"로 완결 상태. SNS 포스트 특성상 이모지 마무리는 허용 범위.

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

1. **CLI에 `--type text` 파이프라인 미통합** — 범위 외 사유: 기존 CLI 아키텍처 변경이 필요하며 별도 기능 개발 작업으로 분리 권장

## 테스트 결과

- Threads API 호출: HTTP 200 OK (성공)
- 텍스트 생성: 3차 시도에서 검증 통과 (정상 재시도 로직)
- 문장 잘림 검증: 잘림 없음 (184자 완결 문장)
- Firestore: ADC 미설정으로 로컬 파일 폴백 동작 (기존 설계대로)

## QC 자동 검증

- **overall**: PASS
- **결과**: 3 PASS, 7 SKIP
- file_check: PASS (보고서 3657 bytes 확인)
- data_integrity: PASS (task-timers.json 정합성 확인)
- critical_gap: PASS (CRITICAL 이슈 없음)
- api_health, test_runner, tdd_check, schema_contract, pyright_check, style_check, scope_check: SKIP (해당 없음 — Lv.1 시스템 작업, 코드 변경 아닌 파이프라인 실행)
