---
task_id: task-2401
type: checklist
scope: task
created: 2026-05-03
updated: 2026-05-03
status: completed
---

# 체크리스트: task-2401

**task**: task-2401

---

## Phase 1 — 분석 (마르둑)

- [x] A. task-2389 evidence PNG 시각 분석 (한글 □□□, 빈 검은 화면 확인)
- [x] B. 폰트 환경 확인 (Pretendard / NotoSansCJK 위치)
- [x] C. 근본원인 도출 (`hybrid-image/patterns/_satori.py:131-156` Pillow silent fallback)
- [x] D. tesseract 미설치 확인 → 픽셀 기반 검증으로 대체 결정
- [x] E. 3문서 작성

## Phase 2 — Codex 사전 검증 (마르둑)

- [x] A. sanitize 게이트 통과 (PII 0건)
- [x] B. codex_gate_check.py 위험 5건 식별 + 보완 설계 plan/context-notes 반영

## Phase 3 — 구현 (엔키 백엔드)

- [x] A. `skills/satori-cardnews/_satori.py` 신규 작성 — silent fallback 0건, install_silent_fallback_guard
- [x] B. `skills/satori-cardnews/scripts/verify_korean.py` 신규 작성 — pixel + string match + optional OCR
- [x] C. `skills/satori-cardnews/scripts/render_one.py` + `render_html.mjs` + `__init__.py` 생성
- [x] D. pyright 진단 0건 정리

## Phase 4 — 회귀 테스트 (닌기르수 테스터)

- [x] A. `tests/design-team/test_ids_phase1_korean_font_embed.py` 18 scenario
- [x] B. pytest 전체 PASS (18/18)

## Phase 5 — L1 evidence (닌기르수 테스터)

- [x] A. `memory/reports/task-2401-evidence-25-stratified/` 디렉토리 생성
- [x] B. 25 PNG stratified 실 렌더 (5 카테고리 × 5 패턴, 5 사이즈 Latin square)
- [x] C. 25장 모두 verify_korean PASS (results.json 25/25)
- [x] D. 1차 vs 2차 비교 비주얼 보고서 (`comparison.md`)

## Phase 6 — 게이트/머지 (마르둑)

- [x] A. `memory/events/task-2389.escalate.acked` 생성 (회장 승인 메모 첨부)
- [x] B. 마아트 독립 검증 통과 (CONDITIONAL_PASS → 권고 3건 반영 후 강화)
- [ ] C. git commit + push
- [ ] D. G3 독립 검증 PASS
- [ ] E. 보고서 작성 (`memory/reports/task-2401.md`)
- [ ] F. finish-task.sh 호출

## 검증

- [x] 18 회귀 테스트 PASS
- [x] 25 PNG 모두 verify_korean PASS
- [x] 1차 PNG vs 2차 PNG 비교 thumbnail 첨부 (comparison.md)
- [x] 회귀 0 (hybrid-image, magazine-ppt-ko 등 무변경 git status로 확인)
- [x] mypy/pyright 0 (strict 모드)
- [x] L1 스모크테스트 결과 보고서 기록
