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

## SCQA

**S**: ThreadAuto 시스템의 텍스트 전용 포스트 업로드 파이프라인(`run_text_post.py`)이 구현 완료되어 운영 중이다.

**C**: 1차 실행 시 `text_data` 타입에서 텍스트 생성 검증이 3회 연속 실패(길이 초과 추정)하여 RuntimeError가 발생했다. 2차 실행에서 `text_insight` 타입으로 토픽이 변경되어 생성 및 업로드에 성공했다.

**Q**: Threads 텍스트 전용 포스트를 정상적으로 1건 게시할 수 있는가?

**A**: 2차 실행에서 성공적으로 업로드 완료. post_id `18098740258974665`, 176자, text_insight 타입. 수치 검증(fact_guard) 통과, Threads API 200 응답 확인.

## 실행 결과

- **1차 시도**: 실패
  - 토픽: "자동차·일반보험 비교 시스템으로 고객 신뢰를 얻는 법" (정보제공)
  - text_type: `text_data` (max 120자)
  - 실패 원인: `text_generator.py`의 `_validate()` 검증 3회 연속 실패 → RuntimeError
  - 에러: `RuntimeError: 텍스트 생성 실패: 3회 시도 후 검증 통과 못함 (text_type=text_data)`

- **2차 시도**: 성공
  - 토픽: "보험 영업 윤리 강화 트렌드와 전문 설계사의 역할" (업계동향)
  - text_type: `text_insight` (max 140자)
  - 수치 검증: 통과
  - Threads API 응답: HTTP 200 (컨테이너 생성 + 발행 모두 성공)
  - **post_id**: `18098740258974665`
  - **글자수**: 176자
  - **해시태그**: #보험영업윤리 #GA시장

## 게시물 본문

```
최근 발표된 건데요,
금융당국이 영업 윤리를
대폭 강화하고 있습니다.

영업 윤리란
고객 이익 최우선 원칙을
현장에서 실천하는 것이죠.

불완전판매 관리가
엄격해질수록
전문성 있는 설계사만
살아남게 됩니다.

서울대보험쌤의 분석으로는
이 흐름이 실력파에겐
오히려 기회가 되거든요.

준법이 곧 경쟁력인
시대입니다 📋

#보험영업윤리 #GA시장
```

## 발견 이슈 및 해결

### 자체 해결 (0건)
해당 없음 (스크립트 실행 작업으로 코드 변경 없음)

### 범위 외 미해결 (2건)
1. **text_data 타입 생성 검증 반복 실패** — 범위 외 사유: text_data 타입(max 120자)에서 Claude CLI가 길이 제한 내 텍스트를 생성하지 못하는 패턴이 있음. text_generator.py의 프롬프트 또는 max_length 조정이 필요할 수 있으나, 본 작업(업로드 1건)의 범위 밖.
2. **Firestore 초기화 실패 (ADC 미설정)** — 범위 외 사유: `Your default credentials were not found` 경고가 발생하나, 로컬 파일 폴백으로 동작하여 업로드에는 영향 없음. 인프라 설정 이슈.

## 생성/수정 파일
없음 (스크립트 실행 작업)

## 테스트 결과
- Threads API: POST /threads → HTTP 200, POST /threads_publish → HTTP 200
- 수치 검증(fact_guard): 통과
- 발행 이력 저장: history_id `ccf6adf9-6042-4b95-848a-84bf843557d2`

## QC 자동 검증

```json
{
  "task_id": "task-750.1",
  "verified_at": "2026-03-21T10:34:43",
  "overall": "PASS",
  "summary": "3 PASS, 7 SKIP",
  "checks": {
    "file_check": "PASS",
    "data_integrity": "PASS",
    "critical_gap": "PASS",
    "api_health": "SKIP (비서버 작업)",
    "test_runner": "SKIP (코드 변경 없음)",
    "tdd_check": "SKIP (Lv.1 작업)",
    "pyright_check": "SKIP (코드 변경 없음)",
    "style_check": "SKIP (코드 변경 없음)",
    "scope_check": "SKIP",
    "schema_contract": "SKIP"
  }
}
```
