Files
C.E.L_Slide_test2/PROGRESS.md
kyeongmin 85c680f02a docs + V4 catalog + samples + Phase Q legacy 보존
전체 26 files (20 추가 + 6 수정), 10507 insertions.

Phase Z 문서 :
- docs/architecture/PHASE-Z-CHANGE-LOG.md (신설) — axis-by-axis 의사결정 history
  (newest-on-top). Step 7-A 부터 6 entry 박힘 + 2026-05-08 / 2026-05-08 #2
  (compat 매트릭스 폐기 / 6-B 폐기 / F14 표현 정정 / label gate policy 분리).
- docs/architecture/PHASE-Z-PIPELINE-OVERVIEW.md (수정) — Step 5/6/9 Gap note
  append (구조 무변, append-only). 6-B 폐기 사실 + Refinement F.
- docs/architecture/PHASE-Z-PIPELINE-STATUS-BOARD.md (수정) — snapshot date
  2026-05-08 갱신. §3 핵심 missing item 5 (Step 5/6/9 boundary axis breakdown
  + 폐기 기록). §6 한 줄 갱신 — 다음 axis 후보 A~F.

Project root docs :
- PLAN.md / PROGRESS.md / README.md (수정) — 토큰 체계 / 폴더 구조 / 설계 문서 /
  역할 분리 반영.
- IMPROVEMENT-REDESIGN.md (신설) — Phase Z 설계 핵심 문서.
- PROCESS_OVERVIEW.html (신설) — 파이프라인 개요 시각.
- docs/tasks/* (신설) — Phase Z task 문서.

V4 catalog (Phase Z runtime 필수 의존성) :
- tests/matching/v4_full32_result.yaml (신설, 4888 줄) — V4 매칭 결과 32 frame
  × 10 MDX section. lookup_v4_match() / lookup_v4_candidates() 가 본 파일 read.
  Phase Z runtime 이 *없으면 즉시 abort* — clone 후 즉시 동작 가능 보장.

Samples :
- samples/mdx_batch/04.mdx (신설) — MDX04 기본 sample.
- samples/mdx/04. DX 지연 요인.mdx (신설) — MDX04 원본.

Phase Q legacy 보존 (별 axis "Phase Q audit & salvage" 영역) :
- src/block_matcher_tfidf.py / catalog_blocks.py / frame_extractor.py /
  pipeline_v2.py — Phase Q (옛 파이프라인) src 신규 untracked 파일들.
  Phase Z runtime 와 의존성 0. Phase Q audit axis 에서 검토 예정.
- scripts/eval_block_matcher.py / fetch_all_frame_screenshots.py /
  match_17_units_my_matcher.py / match_mdx_strict.py / match_mdx_to_frames_tfidf.py /
  ocr_augment_texts.py / run_pipeline_v2.py / previews/ — Phase Q 작업 시
  사용한 옛 script. 같이 보존.
- run_mdx03_pipeline.py (수정) — Phase Q 진입점 (no flag) + Phase Z 진입점
  (--phase-z2 flag) 동시 wrapper. Phase Z 만 사용 시 `python -m
  src.phase_z2_pipeline samples/mdx_batch/03.mdx <run_id>` 직접 호출.

비-scope :
- tests/matching/ (v4_full32_result.yaml 외 ~63MB) — V4 진화 history /
  reports / DECK / ATTACH. Phase Q audit axis 에서 검토.
- tests/pipeline/ (~15MB) — pipeline data. Phase Q audit 영역.
- templates/catalog/blocks.yaml — 옛 block catalog. Phase Q audit.
- templates/phase_z2/frames/ — 옛 frame partial 위치. Phase Q audit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 09:47:58 +09:00

339 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Design Agent — 진행 상황
## 현재 상태 요약 (2026-04-01 기준)
| 상태 | 내용 |
|------|------|
| **완료** | Phase 1~5 기반, A~Q 개선, R(실패), S(설계), **T 전체 완료** |
| **Phase T 결과** | 11 Step 완료 (T-0~T-10). 통합 테스트 31/31 통과. 신규 5파일, 수정 4파일+yaml |
| **다음** | 실제 MDX + Kei API + Sonnet API로 end-to-end 실행. Phase ZZ는 파이프라인 안정화 이후 |
---
## ✅ 완성된 것
### 파이프라인 핵심
- 5단계 파이프라인 작동 (1A→1B→컨테이너계산→A-2→블록스펙→3→4→측정→5)
- Kei API 무한 재시도 (모든 Kei 호출. fallback 없음. 제한 없음)
- Step B(Sonnet 블록 매핑) 제거 — Kei(A-2) + 코드(Phase O)로 대체
- 죽은 코드 전면 정리 (STEP_B_PROMPT, _fallback_layout, PURPOSE_FALLBACK, DOWNGRADE_MAP, _downgrade_fallback, _apply_defaults, manual_classify)
### 블록/카탈로그
- 블록 라이브러리 38개 (6 카테고리)
- catalog.yaml 개선 완료 (when/not_for/purpose_fit)
- FAISS 인덱스 재빌드 완료 (bge-m3, 38블록)
- topic_id/id 양쪽 체크 버그 수정
### 레이아웃
- 프리셋 자동 선택 (sidebar-right, two-column, hero-detail, single-column)
- Kei 비중 시스템 (page_structure weight — 콘텐츠마다 동적)
- Phase O 컨테이너 스펙 계산 (calculate_container_specs)
- Phase O 블록 스펙 확정 (finalize_block_specs)
- 비중 기반 grid row 컨테이너 (renderer.py)
### 측정/검수
- Phase L Selenium 렌더링 측정 (scrollHeight/clientHeight)
- Phase N-4 스크린샷 캡처 (slide.screenshot_as_base64)
- Stage 5 Opus 멀티모달 검수
### 인프라
- 중간 산출물 추적 (data/runs/{timestamp}/)
- 실행 리포트 생성 (scripts/generate_run_report.py)
- SSE 스트리밍 유틸 (sse_utils.py)
- 이미지 크기 측정 + base64 삽입 (image_utils.py)
### 버그 수정 완료
- BF-1~BF-10: 전부 수정 완료 (SSE 파싱, Jinja2 변수, 한글, body 겹침, 제목, topic_id, 예산, grid, catalog 캐시)
---
## ✅ Phase P 실행 완료 + 결과 분석 (2026-03-27~28)
### 실행 결과
- **실행 데이터:** `data/runs/1774599277829/`
- **최종 슬라이드 품질:** 20/100점
### 발견된 근본 문제 5가지
| # | 근본 원인 | 증상 |
|---|----------|------|
| R1 | FAISS 텍스트 임베딩이 시각 블록을 매칭하지 못함 | "hierarchy" 관계인데 venn 대신 comparison-2col 선택 |
| R2 | Opus 추천에 catalog 검증 없음 | 존재하지 않는 블록 5개 환각 (arrow-flow, hierarchy-tree 등) |
| R3 | overflow 해소 실패 시 출력 차단 없음 | 배경 117px에 330px 콘텐츠 → 겹침 상태로 출력 |
| R4 | 블록 중복 사용 제한 없음 | 5개 topic에 3종류 블록만 사용 (38개 중 7.9%) |
| R5 | 공간 배분이 일방향 | 배경 20%에 topic 2개 강제 → card-numbered(205px)가 컨테이너(117px)에 안 맞음 |
### Phase P 접근법의 구조적 한계
- 3후보 × 5topics = **15번 렌더링 + 15번 AI 호출 → ~40분 소요**
- 15개 중 10개 폐기 (작업의 2/3 낭비)
- 업계 조사 결과, **다후보 렌더링 비교 방식은 어떤 상용/오픈소스 도구도 사용하지 않음**
- 블록 유형 선택은 **렌더링 전에 결정할 수 있는 문제** (콘텐츠 relation_type 기반)
### 업계 조사 결과 (2026-03-28)
| 접근법 | 대표 사례 | 핵심 원리 |
|--------|----------|----------|
| 제약 기반 레이아웃 엔진 | Beautiful.ai | AI는 콘텐츠만, 레이아웃은 규칙 엔진이 결정론적으로 |
| 템플릿 검색 + AI 커스터마이징 | Canva | 벡터 검색으로 템플릿 매칭, AI가 텍스트/색상만 교체 |
| NLP 관계 유형 → 시각화 매핑 | Napkin.ai | 계층/비교/프로세스 감지 → 다이어그램 유형 자동 선택 |
| 시각적 자기교정 | VASCAR (2024) | 생성→렌더링→비전 모델 평가→개선, 훈련 불필요 |
| 참조 기반 학습 | PPTAgent (EMNLP 2025) | 기존 프레젠테이션에서 디자인 패턴 귀납적 학습 |
**업계 합의:** AI가 레이아웃을 직접 결정하면 안 된다. AI는 콘텐츠만, 레이아웃은 제약 엔진이 담당.
---
## 📋 Phase Q: 제약 기반 블록 선택 + 글자수 예산 시스템 (설계 확정)
**상세:** [IMPROVEMENT-PHASE-Q.md](IMPROVEMENT-PHASE-Q.md)
**핵심 원칙:** "계산 먼저, AI 판단 나중에, 렌더링은 검증만"
### 실행 스텝
| 스텝 | 내용 | 유형 | 파일 | 의존성 | 상태 |
|------|------|------|------|--------|------|
| Q-1 | catalog.yaml 메타데이터 보강 (min_height_px, relation_types, category, min/max_items) | 데이터 | `templates/catalog.yaml` | ✅ 완료 |
| Q-2 | relation_type → 블록 카테고리 결정론적 매핑 엔진 | 신규 | `src/block_selector.py` | ✅ 완료 |
| Q-3 | 글자수 예산 계산 엔진 | 추가 | `src/space_allocator.py` | ✅ 완료 |
| Q-4 | Kei 블록 선택 프롬프트 재설계 (필터링된 2-3개만 제시) | 수정 | `src/kei_client.py` | ✅ 완료 |
| Q-5 | pipeline.py 재구성 (Phase P 15-render → Phase Q 단일 경로) | 수정 | `src/pipeline.py` | ✅ 완료 |
| Q-6 | 비전 모델 품질 게이트 (VASCAR식) | 신규 | `src/kei_client.py` | ✅ 완료 |
| Q-7 | overflow 수학적 조정 (LaTeX 글루 모델) | 추가 | `src/space_allocator.py` | ✅ 완료 |
| Q-8 | 출력 차단 정책 + P0 재시도 제한 (30회/300초) | 추가 | `src/pipeline.py` | ✅ 완료 |
### 기대 효과
| 지표 | Phase P | Phase Q 목표 |
|------|---------|-------------|
| 슬라이드 품질 | 20/100 | 70-80/100 |
| 처리 시간 | ~40분 | ~8-12분 |
| API 호출 | ~25회 | ~8회 |
| 유령 블록 | 5건 발생 | 불가능 |
| overflow 출력 | 허용 | 차단 |
---
## Phase 이력
| Phase | 내용 | 상태 | 비고 |
|-------|------|------|------|
| 1~3 | 기반 구축 + 블록 템플릿 + AI 파이프라인 | 완료 | |
| 4 | UI + 출력 | 완료 | |
| 5 | 블록 라이브러리 확장 (38개) | 완료 | |
| A~D | 슬라이드 품질 핵심 | 완료 | 일부 Phase O로 대체 |
| G | Kei API 통신 정상화 | 완료 | |
| H | 스토리라인 설계 기반 전환 | 완료 | |
| I | 전수 정합성 복구 (14건) | 완료 | |
| J | 블록 선택 권한 재정의 | 완료 | Step B 제거로 일부 무력화 |
| K | purpose 기반 시각적 위계 | 완료 | |
| K-1 | 중간 산출물 저장 | 완료 | |
| L | Selenium 렌더링 측정 | 완료 | |
| M | Kei 비중 시스템 | 완료 | Phase O로 교체 |
| N | 4대 핵심 문제 해결 | 완료 | |
| **O** | **컨테이너 기반 레이아웃** | **완료** | 코드 + 미해결 3건 해결 + Step B 제거 |
| **P** | **다후보 렌더링 비교 선택** | **완료** | 실행됨. 결과 20/100점 → Phase Q로 방향 전환 |
| **Q** | **제약 기반 블록 선택 + 글자수 예산** | **코드 완료** | Q-1~Q-8 구현 + fill_candidates 복원. 블록 선택 개선 확인 |
| **R** | **하이브리드 블록 시스템 (variant 추가)** | **실패** | 기존 블록 선택 구조 위에 패치만 추가. P=Q=R 동일 구조. |
| **R'** | **접근 C: 블록 CSS 참고 + AI 구조 결정** | **설계** | 방향만 확정. Kei API HTML 생성 실패 확인. |
| **S** | **검증 기반 확정 — Claude HTML 생성 + 검증된 프롬프트 규칙** | **설계 확정** | 영역별 검증 합격. Claude Sonnet 확정. |
| **T** | **폰트 위계 + 파이프라인 기반 정비 + 디자인 레퍼런스** | **완료** | 11 Step 완료. 통합 테스트 31/31 통과. |
---
## ❌ Phase R 실패 기록
Phase R은 접근 C로 가기로 합의했으나, 구현에서 기존 블록 선택 시스템 위에 variant 패치만 추가.
**P = Q = R: 세 개 다 "블록 선택 → 슬롯 채우기" 근본 구조가 동일.**
결과물 34점. C_reference.png(70점) 수준에 전혀 도달 못함.
근본 원인: 기존 코드(block_selector, catalog, fill_candidates)를 유지하면서 최소 변경으로 해결하려는 관성.
---
## 📋 Phase R': 접근 C — 블록 CSS 참고 + AI 구조 결정 (설계 확정)
> ⚠️ **Legacy — Phase Z 로 대체됨 (2026-04-28)**
>
> Phase R' 의 "AI 가 HTML 구조를 직접 생성" 흐름은 Phase Z 에서 다음과 같이 변경됨:
> - **HTML 구조** = `slide-base.html` + 코드 (Jinja2) 가 결정 (AI 가 생성하지 않음)
> - **AI 의 역할** = zone 안의 콘텐츠 / 텍스트 매핑 / 텍스트 다듬기 / 디자인 변형만
> - **자유 디자인 금지** — 항상 Figma 프레임 DB 참고
>
> 아래 R' 설계 내용은 히스토리 / 참고용. 실제 구현은 [`IMPROVEMENT-REDESIGN.md`](IMPROVEMENT-REDESIGN.md) 의 5 단계 흐름 따름.
**상세:** [IMPROVEMENT-PHASE-R-PRIME.md](IMPROVEMENT-PHASE-R-PRIME.md)
### 핵심 전환
```
P=Q=R (실패): 블록이 구조를 결정 → 콘텐츠를 슬롯에 채움
R' (접근 C): 콘텐츠가 구조를 결정 → 블록 CSS를 참고하여 HTML 생성
```
### 프로세스 변경
> ⚠️ **아래 표는 폐기된 Phase R' 기록이며 신규 구현 지시가 아니다.** 새 구현은 [IMPROVEMENT-REDESIGN.md](IMPROVEMENT-REDESIGN.md) 의 Phase Z 5 단계 흐름 따름.
| 단계 | 현재 (P=Q=R) | R' (접근 C) |
|------|-------------|------------|
| 1단계 Kei 분석 | 유지 | 유지 |
| 1.5단계 컨셉 구체화 | 유지 | 유지 |
| 컨테이너 계산 | 유지 | 유지 |
| 프리셋 선택 | 유지 | 유지 |
| **2단계** | block_selector → 블록 선택 | **제거** → html_generator가 AI HTML 생성 |
| **3단계** | fill_candidates → 슬롯 채우기 | **제거** → html_generator에 통합 |
| 4단계 렌더링 | render_slide (블록 템플릿) | render_slide_from_html (AI HTML 삽입) |
| 검증 | Selenium + 비전 모델 | 유지 |
### 실행 스텝
| 스텝 | 내용 | 파일 | 상태 |
|------|------|------|------|
| R'-1 | 디자인 토큰 + 블록 CSS 패턴을 프롬프트용 텍스트로 추출 | 신규 `src/design_tokens.py` | 대기 |
| R'-2 | few-shot 예시 슬라이드 정리 | `data/examples/` | 대기 |
| R'-3 | AI HTML 생성 함수 구현 | 신규 `src/html_generator.py` | 대기 |
| R'-4 | pipeline.py 2-3단계 교체 (블록 선택+채우기 → html_generator) | `src/pipeline.py` | 대기 |
| R'-5 | 렌더러에 AI HTML 삽입 함수 추가 | `src/renderer.py` | 대기 |
| R'-6 | HTML 정화 + 토큰 위반 검증 | 신규 `src/html_validator.py` | 대기 |
| R'-7 | 테스트 (2개 콘텐츠) | `scripts/test_phase_r_prime.py` | 대기 |
### 회귀 방지 — 호출하면 안 되는 함수
- `select_block_candidates()` — 블록 선택 회귀
- `fill_candidates()` / `fill_content()` — 슬롯 채우기 회귀
- `select_block_for_topics()` — 블록 선택 AI 회귀
- `finalize_block_specs()` — 블록 스펙 회귀
### 합격 기준
C_reference.png와 동일 수준의 결과를 **자동으로** 생성:
- topic 합침 가능
- 포함 관계 시각화 가능
- 핵심 메시지 별도 강조 가능
- 원본 텍스트 보존 (자유도 15-20)
- 720px overflow 없음
---
## Phase R' 이후 방향
- 디자인 참조 DB 구축 → 성공한 슬라이드를 few-shot으로 축적
- Playwright 마이그레이션 → 더 빠른 측정 + PDF 내보내기
---
## Phase Z: 매칭 시스템 통합 설계 (2026-04-28)
### 배경
별도 검증한 매칭 시스템 (V1~V4) 을 기존 design_agent pipeline 에 통합하기 위한 설계.
**매칭 시스템 (`tests/matching/`) 검증 결과**:
- V1 키워드 매칭 (Logistic Regression 가중치, TARGET 4/4 LOOCV 검증)
- V2 의미 매칭 (ko-sroberta cosine)
- V3 구조 매칭 (layout / content_affinity / structure_intent)
- V4 종합 판정 (5축 + 라벨)
- TARGET 정답률 3/4 (75%), BM25 / IDF 보다 우위
- V4 slot 축 ablation: Top-1 매칭 7/7 동일 (slot 축 frame 선별 무영향)
### 설계 결정 사항
**위계 + 용어 정리** :
```
[ slide ] 1280×720
├─ slide-title ← MDX 대목차 제목
├─ slide-divider (고정)
├─ slide-body ≈ 1200×590 ← 콘텐츠 영역
│ └─ 레이아웃 (Type A/B/B'/B'')
│ └─ Zone (top/bottom_l/bottom_r 등)
│ └─ 프레임 (Figma 디자인 단위)
└─ slide-footer ← MDX 대목차 결론
```
**5 단계 새 흐름**:
1. STAGE 1 — MDX 분석 + 레이아웃 매칭 (Type A/B/B'/B'')
2. STAGE 2 — Zone 별 텍스트 1차 배치
3. STAGE 3 — Zone 별 프레임 매칭 (완벽 / 어정쩡 / 안 됨 분기)
4. STAGE 4 — 프레임 검토 + 컨테이너 조정 (5 차 Fallback)
5. STAGE 5 — HTML 조립 + 검증 + 출력
**핵심 원칙**:
- MDX 1 파일 = 대목차 1 개 = 슬라이드 1 장
- 텍스트 원문 무손실 보존 (본문 미리보기 + 팝업 원문)
- 자유 디자인 금지 (항상 Figma 프레임 DB 참고)
- 불일치 시 레이아웃 회귀 (콘텐츠 줄이지 않고 그릇 변경)
### 산출물 (이번 세션)
| 파일 | 용도 |
|---|---|
| [`IMPROVEMENT-REDESIGN.md`](IMPROVEMENT-REDESIGN.md) | 매칭 시스템 통합 설계 문서 (전체 명세) |
| [`PROCESS_OVERVIEW.html`](PROCESS_OVERVIEW.html) | 임원 보고용 A4 2 페이지 (프로세스 + 구조도) |
| [`tests/PIPELINE.md`](tests/PIPELINE.md) | V1~V4 통합 정리 + frame 단위 명확화 |
| [`tests/pipeline/`](tests/pipeline/) | 매칭 시스템 코드 + 결과 + 보고서 (분류 복사본) |
### 다음 단계 (구현)
`IMPROVEMENT-REDESIGN.md`**단계적 진행 계획** 참조.
- **Phase Z-1**: 통합 prototype (MDX 03 회귀 통과)
- **Phase Z-2**: 매칭 + 프리셋 통합
- **Phase Z-3**: 컨테이너 검증 + Fallback
- **Phase Z-4**: 전체 통합 + 검증
### 발견된 약점 (8가지) — Phase Z 진행 시 대응
`IMPROVEMENT-REDESIGN.md` 11 장 (리스크) + `tests/PROGRESS.md` 약점 표 참조.
핵심 :
- 02-2.2 매칭 실패 (Frame 14 anchor 재라벨링 필요)
- 32 frame DB 사이즈 라벨링 부족 (zone 단위 vs 슬라이드 단위)
- slot 의미 매핑 부재
- V3 콘텐츠 성격 분류 부정확 (키워드 사전 한계)
---
## Phase Z-1 사전 작업 진행 (2026-04-28)
> **Phase Z-1 자체는 진행 중**. 본 entry 는 사전 작업 중 **Frame / Style Inventory 완료** 만 기록.
### ✅ 완료 — Frame / Style Inventory (사전 작업 일부)
| 산출 | 위치 | 내용 |
|---|---|---|
| Frame Integration Map | [`docs/architecture/FRAME-INTEGRATION-MAP.md`](docs/architecture/FRAME-INTEGRATION-MAP.md) | 32 frame Zone 적용 분류 (`zone_direct` / `zone_adapt` / `zone_extract` / `reference_only`). row 21~28 Figma ID 정정. 1171281171 부록 처리 |
| Frame Style Inventory | [`docs/architecture/PHASE-Z-FRAME-STYLE-INVENTORY.md`](docs/architecture/PHASE-Z-FRAME-STYLE-INVENTORY.md) | 32 frame (변환 14 + 미변환 18) + Token 18 행 (covered 7 / gap 5 / hierarchy 3 / hold 3) + Legacy 6 행 |
### ⬜ 다음 — Phase Z-2 본격 (catalog / runtime 설계)
- Phase Z-1 의 catalog / runtime 설계 prep 부분 (slide-base 검증 등) 은 미진행
- Phase Z-2 본격 (매칭 + 4 프리셋 통합) 도 미진행
### ⚠️ 미실행 / 의도적으로 보류
- 기존 `templates/blocks/` 삭제 / 교체 실행
- catalog / runtime 구현
- `templates/styles/frame-patterns/` 신규 파일 생성
- `templates/styles/tokens/``gap_candidate` token 추가
- legacy structures 6 파일 삭제
→ 모두 **승인 전 보류**. Frame / Style Inventory 는 추출 / 검증 단계이고, 실제 변경은 별도 승인 단계.
---
## 프로젝트 구조
| 항목 | 파일 | 상태 |
|------|------|------|
| 프로젝트 규칙 | CLAUDE.md | Phase Z 반영 (2026-04-28) |
| 개선 계획 (이전) | IMPROVEMENT.md | Phase R' 반영 |
| **개선 계획 (신규)** | **IMPROVEMENT-REDESIGN.md** | **Phase Z 매칭 시스템 통합 (2026-04-28)** |
| 임원 보고용 | PROCESS_OVERVIEW.html | Phase Z 흐름 반영 |
| 진행 추적 | PROGRESS.md | 이 파일 (2026-04-28 갱신) |
| 전체 감사 | CLEANUP-AUDIT.md | 유효/무력화 분류 완료 |
| Phase별 상세 | IMPROVEMENT-PHASE-{A~R'}.md | 각 Phase 기록 |
| Phase R 실패 기록 | IMPROVEMENT-PHASE-R.md | 블록 선택 위에 variant 패치 — 실패 |
| Phase R' 설계 | IMPROVEMENT-PHASE-R-PRIME.md | 접근 C 기반 재설계 |
| 매칭 시스템 (별도 검증) | tests/PIPELINE.md + tests/pipeline/ | V1~V4 검증 완료 (2026-04-27) |
| README | README.md | Phase Z 반영 |