# 카드뉴스 "..." 말줄임 재발 방지

## 문제
카드뉴스 body/card_list 슬라이드에서 description 텍스트가 카드 높이를 초과하면 "..."으로 잘림.
실제 발생 사례: `/home/jay/projects/ThreadAuto/output/cardnews_20260319_195308_01.png` (Read로 직접 확인할 것)

## 원인 위치 (cardnews.py)
- L1132-1135: `render_card_list()` — desc 3줄 초과 시 "..." 자름
- L1183-1186: `render_card_list()` — desc 2줄 초과 시 "..." 자름
- L1297-1306: `render_card_list()` — 카드 내 렌더링 공간 부족 시 "..." 표시
- L2338-2342: `render_body()` — max_card_h 초과 시 "..."

## 수정 방향 (2가지 동시 적용)

### 수정 1: 렌더러 — 폰트 축소 우선 전략
현재 `render_body()`는 desc 폰트를 36→30으로 축소 후 그래도 안 되면 "..." 처리.
하지만 `render_card_list()`와 `render_detail()`은 **폰트 축소 단계 없이 바로 "..."** 처리.

**수정:**
- `render_card_list()`와 `render_detail()`에도 동일한 폰트 축소 로직 추가
- 단계: (1) 기본 폰트 → (2) 80% 축소 폰트 → (3) 마지막 수단으로만 "..." 사용
- "..." 사용 시에도 문장 끝(마침표) 기준으로 자연스럽게 자를 것 (단어 중간 잘림 방지)

### 수정 2: 파이프라인 프롬프트 — description 길이 제한
파이프라인의 writing 단계 프롬프트에 각 항목 description 최대 글자 수를 명시.

**수정 대상 파일:** `/home/jay/projects/ThreadAuto/prompts/pipeline/03_writing.md`

**추가 규칙:**
- 카드뉴스 각 항목(item)의 description(desc): **최대 50자** (공백 포함)
- 50자 이내로 핵심만 담는 문장 1~2개
- 이유: 카드 면적 제한으로 긴 텍스트는 잘릴 수 있음

## 검증
1. 테스트 렌더링으로 "..." 발생하지 않는지 확인:
```python
cd /home/jay/projects/ThreadAuto
python3 -c "
from renderer.cardnews import CardNewsRenderer
r = CardNewsRenderer()
slides = [
    {'type': 'cover', 'title': '테스트', 'subtitle': '부제', 'category': '테스트', 'keywords': ['k']},
    {'type': 'card_list', 'title': '긴 텍스트 테스트', 'items': [
        {'label': '항목 A', 'desc': '매우 긴 설명 텍스트입니다. 이것은 오버플로우를 유발하기 위한 긴 문장으로, 카드 영역을 초과할 수 있습니다. 추가 텍스트.'},
        {'label': '항목 B', 'desc': '두번째 항목의 긴 설명입니다. 여러 줄에 걸쳐서 표시되어야 하는 텍스트를 테스트합니다. 더 긴 텍스트 추가.'},
        {'label': '항목 C', 'desc': '세번째 항목도 마찬가지로 길게 작성합니다. 오버플로우 처리가 폰트 축소로 해결되는지 확인합니다.'}
    ]},
    {'type': 'cta', 'title': 'CTA', 'cta_text': '테스트 CTA 문장입니다.'}
]
paths = r.render_from_slides(slides)
for p in paths: print(p)
"
```
2. 생성된 이미지를 Read로 확인: "..."이 나타나지 않아야 함
3. 기존 pytest 통과 확인

## 기존 테스트
```bash
cd /home/jay/projects/ThreadAuto && python3 -m pytest tests/ -x -q 2>&1 | tail -5
```
