# task-704.1 완료 보고서: 텍스트 포스트 줄바꿈 규칙 추가

## SCQA

**S**: 카드뉴스 캡션에는 줄바꿈 규칙(한 줄 10~15자, 의미 단위 줄바꿈, \n\n 단락 구분)이 적용되어 가독성이 좋으나, text_* 포스트에는 동일 규칙이 없다.

**C**: text_* 포스트가 줄바꿈 없이 뭉텅이로 출력되어 Threads 피드에서 가독성이 크게 떨어진다. 제이회장님 지시: "텍스트 줄바꿈 규칙은 카드뉴스 본문 쓰는 규칙과 동일하게 설정할것"

**Q**: 파이프라인 5단계(writing → hooking → review)와 비파이프라인 경로(prompts_v2.py)에 text_* 줄바꿈 규칙을 추가하여 모든 텍스트 포스트에 줄바꿈이 적용되도록 할 수 있는가?

**A**: 4개 파일에 줄바꿈 규칙을 추가 완료. 시스템 프롬프트 내부(LLM에 직접 전달되는 영역)에 규칙을 배치하여 실효성 확보. pyright 0 에러. 기존 자수 규칙(text_data 80~120자 등) 변경 없음.

## 수정 파일 목록 (4개)

### 1. `prompts/pipeline/03_writing.md` — 3곳 변경
- **159~164행**: 시스템 프롬프트 내부에 `## text_* 줄바꿈 스타일 (필수)` 섹션 신규 추가 (캡션 줄바꿈 규칙 바로 아래)
- **283행**: 유저 프롬프트 JSON 출력 형식의 "text" 필드에 `줄바꿈 포함 \n 활용` 명시
- **289~294행**: 유저 프롬프트 코드블록 밖에 text_* 줄바꿈 스타일 섹션 추가 (문서 참조용)
- **375행**: text_data 예시 출력의 "text" 값을 줄바꿈 적용 형태로 업데이트

### 2. `prompts/pipeline/04_hooking.md` — 1곳 변경
- **129~130행**: 규칙 8번 추가 — "text_*의 줄바꿈(\n) 구조를 반드시 유지한다. 후킹 최적화 시 줄바꿈을 제거하지 않는다."

### 3. `prompts/pipeline/05_review.md` — 1곳 변경
- **95~97행**: G 섹션(자수/포맷 검사)에 text_* 줄바꿈 검사 항목 3개 추가:
  - \n 포함 여부 / 한 줄 15자 초과 여부 / \n\n 단락 구분 여부

### 4. `content/prompts_v2.py` — 1곳 변경
- **116~122행**: 비파이프라인 경로에 `**text_* 포스트 본문 줄바꿈 스타일 (필수)**` 블록 추가

## 발견 이슈 및 해결

### 자체 해결 (1건)
1. **유저 프롬프트 코드블록 바깥 배치 문제** — 시스템 프롬프트 내부에 동일 규칙을 중복 배치하여 해결
   - 발견 경위: `pipeline_prompts.py`의 `_extract_code_block`이 비탐욕 정규식으로 첫 번째 코드블록만 추출 → 유저 프롬프트의 중첩 ```json 이후 내용은 LLM에 전달되지 않음
   - 해결: 시스템 프롬프트 블록(18~207행)은 단일 깨끗한 코드블록이므로, 159~164행에 text_* 줄바꿈 규칙을 추가하여 LLM에 확실히 전달되도록 함
   - 검증: 시스템 프롬프트 내 ``` 마커가 18행(열기)과 207행(닫기)뿐이므로 `_extract_code_block`이 전체 내용을 정상 추출

## 테스트 결과
- pyright 검증: `/home/jay/projects/ThreadAuto/content/prompts_v2.py` — **0 에러, 0 경고**
- 프롬프트 파일 (.md): pyright 대상 아님. 구조적 검증 완료
- ⚠️ 파이프라인 실행 검증(LLM API 호출)은 API 토큰 소모를 고려하여 미실행. 실제 text_data 생성 시 줄바꿈 포함 여부 확인 필요

## QC 자동 검증 결과

```json
{
  "task_id": "task-704.1",
  "verified_at": "2026-03-19T09:50:34",
  "overall": "PASS (조건부)",
  "checks": {
    "pyright_check": "PASS (0 errors, 0 warnings)",
    "style_check": "PASS (black OK, isort OK)",
    "critical_gap": "PASS",
    "data_integrity": "PASS",
    "test_runner": "SKIP (관련 테스트 파일 0개, 정당한 SKIP)",
    "file_check": "FAIL (.done 미존재 — finish-task.sh로 생성 예정)",
    "tdd_check": "FAIL (Lv.1 프롬프트/문서 수정 작업, TDD 적용 대상 아님)"
  },
  "summary": "4 PASS, 2 FAIL(비실질), 4 SKIP"
}
```

- file_check FAIL: .done 파일은 finish-task.sh에서 생성되므로 순환 의존성. 비실질적 FAIL.
- tdd_check FAIL: QC 규칙 명시 — "Lv.2+ 코딩 작업에만 의미 있음. Lv.1 단순 수정/설정/문서 작업은 SKIP 처리." 본 작업은 프롬프트 텍스트 수정으로 Lv.1에 해당.
