---
task_id: task-2401
type: plan
scope: task
created: 2026-05-03
updated: 2026-05-03
status: in-progress
---

# 계획서: task-2401 — IDS Phase 1 재작업 (satori 한글 폰트 임베드 fix)

**task**: task-2401
**목표**: task-2389 silent corruption (한글 □□□, 빈 검은 화면) 영구 차단 — satori 명시 폰트 로드 + silent fallback 제거 + 픽셀/string 검증 게이트 + 25장 stratified L1 evidence
**승인**: 회장 (2026-05-03) "다 제대로 해야지? 대충 만들고 퀄리티 거지같은거면 왜 일을하냐"
**근거**: `memory/reports/task-2389-evidence/l1_smoke_supabase_h4.png` (시각 검증 — 한글 글리프 □□□)

---

## 목표

1. 한글 깨짐(□□□)을 100% 차단: `_satori.py`의 silent Pillow fallback 제거 → Node.js Satori 강제 + 폰트 부재 시 FileNotFoundError raise
2. silent pass 차단: pytest "PASS"가 시각 결과를 보장하도록 픽셀/string 검증 게이트 도입
3. 25장 stratified PNG L1 evidence: 카테고리 5 × 패턴 5 × 사이즈 5에서 25장 추출 → 모두 검증 PASS
4. 회귀 테스트 15+ scenario로 silent corruption 영구 차단

## 범위

### 포함
- `skills/satori-cardnews/_satori.py` 신규 생성 (silent fallback 0건, 명시 폰트 로드)
- `skills/satori-cardnews/scripts/verify_korean.py` 신규 생성 (픽셀 + string match)
- `tests/design-team/test_ids_phase1_korean_font_embed.py` 회귀 테스트 15+
- 25장 PNG 재렌더 + 검증 결과 + 1차 vs 2차 비교 보고서
- `memory/events/task-2389.escalate.acked` 생성

### 제외
- `skills/hybrid-image/**`, `tools/ai-image-gen/**` 수정 (변경 금지)
- 신규 design-md 추가 (1차에서 60종 이미 구축)
- tesseract 설치 (sudo 비번 미보유 → 픽셀 기반 검증으로 대체)

## 위임 계획

- Phase 1 (분석): **마르둑** — task-2389 PNG 분석, 폰트 환경 확인, 근본원인 도출
- Phase 2 (구현): **엔키 (백엔드)** — `_satori.py` + `verify_korean.py` 작성
- Phase 3 (회귀 테스트): **닌기르수 (테스터)** — 15+ scenario 테스트 작성
- Phase 4 (L1 evidence): **닌기르수** — 25장 PNG 실 렌더 + 검증 + 비교 보고서
- Phase 5 (독립 검증): **마아트** (횡단) — silent pass 패턴 재발 방지 검증
- Phase 6 (게이트/머지): **마르둑** — Codex/G3/finish-task.sh

## 검증 기준

- pytest: `pytest tests/design-team/test_ids_phase1_korean_font_embed.py -v` → 15+ PASS, 0 fail
- 25 PNG 검증: 모두 `verify_korean.py` PASS (tofu 0, 색상 다양성 ≥10색, 빈 화면 ≤80%)
- Silent fallback 검증: Node.js 부재 mock → FileNotFoundError raise (silent pass 0)
- 1차 vs 2차 비교 PNG: thumbnail로 시각 차이 명확
- mypy/pyright: 0건
- G3 verifier: PASS

## tesseract 미설치 대응

apt sudo 비번 미보유 → tesseract 설치 불가. 대체 검증 강화:
1. 픽셀 검사: tofu glyph (UCS undefined → fallback box) 자동 검출, 색상 다양성 ≥10, blank ratio ≤80%
2. HTML string match: 입력 한글 100% HTML에 존재
3. PNG byte 크기: ≥10KB (1×1 placeholder 차단)
4. Glyph width 통계: 단조로운 width = tofu 의심
이후 tesseract 설치되면 verify_korean.py가 자동으로 OCR 보강 (코드 준비됨)
