# task-1798 완료 보고서 — ThreadAuto TypeA~E 죽은 템플릿 코드 삭제

## SCQA

**S**: ThreadAuto 프로젝트에는 TypeA~TypeE 5종의 단일 이미지 템플릿 렌더링 코드가 존재하며, 관련 함수/메서드/테스트/CLI 명령이 renderer/, pipeline/, scheduler/, web/, cli.py, tests/ 전반에 분산되어 있다.

**C**: TypeA~E 단일 이미지 렌더링은 초기 프로토타입으로, 실제 운영에서는 `run_cardnews()` → `CardNewsRenderer` 멀티슬라이드 경로만 사용한다. 죽은 코드가 약 1,500줄 이상 잔존하여 유지보수 부담과 코드 가독성을 저해한다.

**Q**: TypeA~E 관련 죽은 코드를 안전하게 삭제하면서, 실제 카드뉴스 파이프라인(`pipeline --upload`)은 정상 동작하도록 유지할 수 있는가?

**A**: renderer/templates.py, pipeline/scheduler_data.py 2개 파일을 완전 삭제하고, orchestrator.py에서 `_get_renderer_class`, `_content_to_render_data`, `render_image`, `run_single`, `run_batch` 5개 함수/메서드를 제거했다. cli.py에서 `render` 명령과 TypeA~E 파이프라인 경로를 제거하고, scheduler/cron_runner.py와 web/api.py의 cascading 참조도 `run_cardnews()`로 전환했다. 관련 테스트 파일 4개도 정리 완료. 전체 138건 테스트 통과, 실패 0건. `grep -r "TypeA" pipeline/ renderer/` 결과 0건 확인.

## 작업 내용

### 삭제된 파일 (2개)
- `/home/jay/projects/ThreadAuto/renderer/templates.py` — TypeA~E 클래스 5개 + 헬퍼 함수 3개 (571줄)
- `/home/jay/projects/ThreadAuto/pipeline/scheduler_data.py` — DAILY_SCHEDULE + 유틸 함수 3개 (71줄)

### 수정된 소스 파일 (5개)
- `/home/jay/projects/ThreadAuto/renderer/__init__.py` — TypeA~E import 및 __all__ 항목 제거
- `/home/jay/projects/ThreadAuto/pipeline/orchestrator.py` — `_TEMPLATE_CLASS_MAP`, `_get_renderer_class()`, `_content_to_render_data()`, `render_image()`, `run_single()`, `run_batch()`, DAILY_SCHEDULE import 제거. `run_cardnews()`, `collect_sources()`, `generate_content()`, `save_to_store()` 유지
- `/home/jay/projects/ThreadAuto/scheduler/cron_runner.py` — DAILY_SCHEDULE import 제거, `_execute_slot`/`_retry_slot`의 `run_single()` → `run_cardnews(upload=True)` 전환, 미사용 CronTrigger import 제거
- `/home/jay/projects/ThreadAuto/web/api.py` — `api_publish_post` 엔드포인트의 `run_single()` → `run_cardnews(upload=True)` 전환
- `/home/jay/projects/ThreadAuto/cli.py` — `render` 명령 삭제, `_TEMPLATE_MAP` 삭제, `pipeline` 명령 기본값 `"TypeA"` → `"cardnews"` 변경, TypeA~E 파이프라인 경로 삭제, `scheduler-status` 명령 DAILY_SCHEDULE 직접 참조 제거

### 수정된 테스트 파일 (4개)
- `/home/jay/projects/ThreadAuto/tests/test_renderer.py` — TestTypeA~E 5개 클래스 및 헬퍼 함수 삭제, TestFontManager/TestBaseRenderer 유지
- `/home/jay/projects/ThreadAuto/tests/test_pipeline.py` — TestSchedulerData, TestGetScheduleForTime, TestGetNextSchedule, TestGetTemplateTypeForSlot, TestContentToRenderData 5개 클래스 삭제, Firestore/ImageUploader/Orchestrator 테스트 유지
- `/home/jay/projects/ThreadAuto/tests/test_scheduler.py` — DAILY_SCHEDULE import 제거, CronTrigger 패치 제거, `run_single` → `run_cardnews` 테스트 전환
- `/home/jay/projects/ThreadAuto/tests/test_web_dashboard.py` — `mock_orch.run_single` → `mock_orch.run_cardnews` 변경

## 테스트 결과
- pytest 138건 전체 통과 (tests/test_renderer.py, tests/test_pipeline.py, tests/test_scheduler.py, tests/test_web_dashboard.py)
- 실패: 0건
- `grep -r "TypeA" pipeline/ renderer/` → 0건 (검증 시나리오 통과)
- `cli.py --help`에서 `render` 명령 부재 확인 (render-video는 CardNewsRenderer 기반으로 유지)
- orchestrator에서 `run_single`, `run_batch`, `render_image` 메서드 부재 확인

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **cron_runner.py에서 에러 결과 미처리** — `_execute_slot()`에서 `run_cardnews()` 변환 시 `result.get("error")` 체크 누락. RuntimeError raise 로직 추가 (`scheduler/cron_runner.py:98`)
2. **CronTrigger import 잔존** — DAILY_SCHEDULE 기반 job 등록 코드 제거 후 CronTrigger import가 미사용 상태. import 라인 삭제 (`scheduler/cron_runner.py:14`)
3. **테스트 픽스처 CronTrigger 패치 실패** — cron_runner.py에서 CronTrigger를 제거했으나, test_scheduler.py의 3개 픽스처가 `patch("scheduler.cron_runner.CronTrigger")`를 사용하여 AttributeError 발생. 3개 픽스처 모두에서 CronTrigger 패치 제거 (`tests/test_scheduler.py`)

### 범위 외 미해결 (0건)
없음

## 셀프 QC 체크리스트
- [x] 1. 영향 파일: renderer/__init__.py, pipeline/orchestrator.py, scheduler/cron_runner.py, web/api.py, cli.py, tests/ 4개 파일
- [x] 2. 엣지 케이스: DAILY_SCHEDULE 빈 상태에서 CronRunner 정상 동작, scheduler-status 빈 스케줄 처리
- [x] 3. 작업 지시와 정확히 일치: TypeA~E 코드 삭제, run_cardnews 유지, pipeline --upload 정상
- [x] 4. 에러 처리/보안: cron_runner에서 에러 결과 체크 추가 완료
- [x] 5. 테스트 커버리지: 138건 전체 통과, TypeA~E 관련 테스트만 삭제
- [x] 6. 발견 이슈 모두 해결: 3건 자체 해결
- [x] 7. 코드 아키텍처: SOLID/DRY 위반 없음, 죽은 코드 제거로 SRP 향상
- [x] 8. 인터페이스 변경: PipelineOrchestrator에서 run_single/run_batch/render_image 메서드 제거, 외부 참조(web/api, scheduler, cli) 모두 run_cardnews로 전환 완료

## QC 자동 검증 결과
- overall: WARN (tdd_check WARN만 — 삭제 작업 특성상 TDD 순서 비적용)
- pyright_check: PASS (0 errors, 0 warnings)
- style_check: PASS (black, isort OK)
- file_check: PASS (6/6)
- data_integrity: PASS
- TRUST5: T=passed, R=passed, U=passed, S=passed, T=passed

## 모델 사용 기록
- 팀원: 불칸(백엔드) / 작업: 소스 코드 10개 파일 죽은 코드 삭제 / 사용 모델: sonnet
- 팀원: 아르고스(테스터) / 작업: 테스트 파일 4개 죽은 테스트 삭제 / 사용 모델: sonnet
- 팀장 직접 개입: cron_runner.py 에러 체크 누락 수정, CronTrigger import 정리, 테스트 픽스처 수정 (3건)

## 세션 통계
- 총 도구 호출: 40회

### 수정 파일 목록
- /home/jay/projects/ThreadAuto/scheduler/cron_runner.py: 11회 (Edit)
- /home/jay/projects/ThreadAuto/cli.py: 5회 (Edit)
- /home/jay/projects/ThreadAuto/pipeline/orchestrator.py: 5회 (Edit)
- bash_cmd: 5회 (Bash)
- /home/jay/projects/ThreadAuto/tests/test_scheduler.py: 4회 (Edit)
- /home/jay/projects/ThreadAuto/renderer/__init__.py: 2회 (Edit)
- /home/jay/projects/ThreadAuto/web/api.py: 2회 (Edit)
- /home/jay/workspace/memory/reports/task-1798.md: 2회 (Edit, Write)
- /home/jay/projects/ThreadAuto/tests/test_pipeline.py: 1회 (Write)
- /home/jay/projects/ThreadAuto/tests/test_renderer.py: 1회 (Write)
- /home/jay/projects/ThreadAuto/tests/test_web_dashboard.py: 1회 (Edit)
- /home/jay/workspace/memory/tasks/task-1798.md: 1회 (dispatch)

### 도구 사용 현황
- Edit: 31회
- Bash: 5회
- Write: 3회
- dispatch: 1회

