# 2026-03-06 렌더러 종합 피드백 v4 풀미팅

- **일시**: 2026-03-06 12:36
- **참석**: 헤르메스(팀장), 불칸(백엔드), 이리스(프론트엔드), 아테나(UX/UI), 아르고스(테스터)
- **안건**: 제이회장님 피드백 7건 구현 방안 논의
- **작업 ID**: task-304.1

## 피드백별 합의 결과

### FB-1. 제목 줄바꿈 로직 개선
- **담당**: 불칸
- **합의**: `engine.py`의 `wrap_text()`를 공백 기준 단어 단위 줄바꿈으로 전면 교체
  - 1차: 공백으로 단어 분리 후 단어 단위로 줄 채움
  - 2차: 단어 자체가 max_width 초과 시에만 글자 단위 분리
  - `\n` 줄바꿈 존중 (기존 paragraph split 유지)
- **아테나 의견**: "어떻게", "커리어를" 같은 한글 단어가 중간에서 잘리면 가독성 치명적. 공백 단위면 충분
- **아르고스**: 엣지케이스 — 공백 없는 초장문(영문 URL 등)은 글자 단위 폴백 필요

### FB-2. TIP 블록 겹침 방지
- **담당**: 불칸
- **합의**: `render_detail()`에서 TIP 렌더 전 남은 공간 체크
  - `remaining = safe_bottom - cur_y - watermark_space`
  - 남은 공간 < 100px → TIP 생략
  - 남은 공간 < 160px → TIP 높이를 남은 공간으로 축소, 텍스트 1줄 + "..." 처리
- **아르고스**: 인포박스 3개 + 긴 TIP 조합으로 엣지케이스 테스트 필수

### FB-3. ㄴ 장식과 워터마크 겹침 해결
- **담당**: 이리스
- **합의**: 좌하단 ㄴ 코너 장식의 y좌표를 40px 위로 이동
  - 변경: `by = self.HEIGHT - margin - 40`
  - 워터마크(우하단)는 현재 위치 유지
- **아테나 의견**: 장식과 워터마크의 시각적 분리가 핵심. 40px이면 충분

### FB-4. 동그라미 숫자 첫줄 높이 align
- **담당**: 이리스
- **합의**: badge_cy를 제목 첫 줄의 폰트 크기 중앙으로 계산
  - 변경: `badge_cy = y + font_size // 2` (기존: `y + (font_size + line_spacing) // 2`)
  - card_list와 detail 모두 동일 적용

### FB-5. subtitle 들여쓰기 (큰제목과 align)
- **담당**: 이리스
- **합의**: 동그라미 뱃지가 있는 슬라이드에서 subtitle의 x좌표를 title_x와 동일하게
  - `sub_x = title_x` (뱃지 있을 때)
  - max_width도 조정: `sub_max_w = WIDTH - sub_x - margin`
  - card_list, detail 모두 적용

### FB-6. 박스 내 description 들여쓰기
- **담당**: 불칸
- **합의**: description 렌더링 시 title 대비 30px 들여쓰기
  - card_list 카드: `desc_x = text_x + 30`, `desc_max_w = text_w - 30`
  - detail 인포박스 (_draw_info_box): 동일 적용
- **아테나 의견**: 30px이 제목 글자크기 48pt의 약 63%로 적절한 시각 위계

### FB-7. 캔버스 오버플로우 강화
- **담당**: 아르고스 (검증), 불칸 (구현)
- **합의**:
  - card_list: 이미 safe_bottom 체크 있음. 아이템 렌더링 중단 로직 유지+강화
  - detail: 인포박스 렌더 전 총 높이 사전 계산, 초과 시 마지막 인포박스 생략
  - 모든 슬라이드: 렌더링 후 경계 침범 여부 콘솔 로그 출력 (print)

## 테스트 계획 (아르고스)
1. 5개 테마 전체 파이프라인 테스트 (기존 test_pipeline_v3.json 사용)
2. 긴 제목 엣지케이스 (20자+ 제목)
3. 인포박스 3개 + 긴 TIP 텍스트
4. 오버플로우 (아이템 4개+)
5. 각 FB 항목별 전/후 비교

## 다음 단계
- 불칸: engine.py wrap_text 개선 + cardnews.py FB-2/6/7
- 이리스: cardnews.py FB-3/4/5
- 아르고스: 테스트 수행
- 헤르메스: 통합 + 보고서
