# task-1006.1: 카드뉴스 파이프라인 가드레일 + CrossPublisher 자동생성 + category 파라미터화

## 배경
task-1002.1 분석 결과, 2팀이 CrossPublisher를 직접 호출할 때 ContentGeneratorV2를 거치지 않아 부실한 카드뉴스가 생성됨.
3가지 미해결 사항을 한정승인으로 모두 해결할 것.

## 작업 항목

### 1. render_all 빈 slides 방어 로직 (방안 1)
- **수정 위치**: `threads_publisher.py:156`, `instagram_publisher.py:106` (동일 분기)
- slides가 빈 리스트일 때 ValueError raise
- slides 키 자체가 없을 때 logger.warning 출력 (레거시 후방호환 유지)
- 참고 코드 (task-1002.1 보고서):
```python
if content and "slides" in content and isinstance(content["slides"], list):
    if len(content["slides"]) == 0:
        raise ValueError("content['slides']가 빈 리스트입니다. ContentGeneratorV2로 콘텐츠를 먼저 생성하세요.")
    # V2 경로
else:
    logger.warning("slides 키 없음 — render_all 레거시 경로 사용. 콘텐츠 품질이 저하될 수 있습니다.")
    # 레거시 경로
```

### 2. CrossPublisher에 콘텐츠 자동 생성 기능 (방안 2)
- **수정 위치**: `cross_publisher.py`
- `content` 미제공 또는 `slides` 키 없을 시, 내부에서 ContentGeneratorV2를 호출하여 slides 자동 생성
- 이렇게 하면 인라인 스크립트에서 CrossPublisher를 직접 호출해도 항상 V2 품질 보장
- auto_generate=True 파라미터로 제어 (기본값 True)

### 3. render_all category 파라미터화
- **수정 위치**: `cardnews.py:2535`
- 현재 `"고민공감"` 하드코딩 → category 파라미터로 변경
- 기본값은 `"고민공감"` 유지 (후방호환)
- render_all 호출하는 모든 곳에서 category를 전달할 수 있도록 시그니처 수정

## 참고 파일
- 분석 보고서: `/home/jay/workspace/memory/reports/task-1002.1.md`
- ThreadAuto 프로젝트: `/home/jay/projects/ThreadAuto/`
- cardnews.py: `/home/jay/projects/ThreadAuto/cardnews/cardnews.py`
- threads_publisher.py: `/home/jay/projects/ThreadAuto/publisher/threads_publisher.py`
- instagram_publisher.py: `/home/jay/projects/ThreadAuto/publisher/instagram_publisher.py`
- cross_publisher.py: `/home/jay/projects/ThreadAuto/publisher/cross_publisher.py`
- ContentGeneratorV2: `/home/jay/projects/ThreadAuto/content/generator_v2.py`

## 완료 기준
- 3가지 수정 모두 적용
- 기존 테스트 통과 (pytest)
- pyright 0 errors
- CrossPublisher 직접 호출 시에도 V2 품질 카드뉴스 생성 확인 (dry-run 또는 로그 확인)
