폰트 위계 적용:
- key-msg: 11→14px (가장 중요, 가장 큰 폰트)
- core: 12px 유지
- bg: 11px/9-10px 유지
- sidebar: 제목 14→11px, 불릿 12→10px (가장 덜 중요, 가장 작은 폰트)
불릿 충돌 수정:
- BG/SIDEBAR: <style> 블록 금지, 인라인 style만 사용
- CORE의 .bp::before CSS가 BG의 .bp에 적용되는 문제 해결
pipeline.py 통합:
- generate_slide_html() → generate_with_retry() 교체
- step2b_verification.json 저장 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
수정:
- sidebar 너비 420→380px (space_allocator 실측값 반영)
- 글자폭 비율 출처 명확화 (space_allocator.py 실측)
- body 배경 예시 계산 추가
추가:
- 원인 3가지 명시 (폰트 위계 부재, 블록 디자인 선택 부재, 비율 고정)
- 근본 원칙 3가지 (폰트 먼저, body 키우기, 사전 판단)
- 다단 레이아웃 판단 기준 + 전환 조건
- 비율 변경 시 구체적 px 계산 + 효과 비교표
- 블록 디자인 선택 문제 섹션 (Phase T 범위 외, 별도 검토)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
핵심 14px > 본문 12px > 배경 10-12px > 첨부 9-11px 위계 확정.
폰트가 먼저, 컨테이너가 따라가는 계산 순서 정의.
보수적 추정 + 검증 1회 하이브리드 접근 설계.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
포함 내용:
- Phase P/Q/R/S 설계 문서 (IMPROVEMENT-PHASE-*.md)
- 영역별 검증 스크립트 (scripts/verify_*.py, test_*.py)
- 블록 템플릿 추가 (cards, emphasis 변형)
- 코드 수정: block_search, content_editor, design_director, slide_measurer
- catalog.yaml 블록 목록 업데이트
- CLAUDE.md, PROGRESS.md, README.md 업데이트
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
블록 선택 방식(Phase P/Q/R) 폐기 → Claude Sonnet이 영역별 HTML 직접 생성.
생성-검증 분리: content_verifier.py로 텍스트 보존/금지 콘텐츠/구조를 코드 검증.
주요 변경:
- src/html_generator.py: 4개 프롬프트 템플릿(BG/CORE/SIDEBAR/FOOTER) + 영역별 Claude 호출
- src/content_verifier.py: L1 텍스트 보존, L2 금지 콘텐츠, L3 구조 검증 + 재시도 루프
- src/html_validator.py: 보안 검증(script/iframe 제거)
- src/renderer.py: render_slide_from_html() 추가, area div overflow:hidden
- scripts/test_phase_s.py: generate_with_retry() 통합, step2b_verification 결과 저장
- 배경 라이트 디자인(#f8fafc), 개조식 어미 변환, 축약 금지 규칙
다음 과제: 폰트 위계(핵심14>본문12>배경10-12>첨부9-11) + 동적 컨테이너 계산
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 후보 3개 (FAISS 2 + Opus 1) → 컨테이너에 맞게 재구성 → 실제 렌더링 → Kei 스크린샷 판단
- 14건 문제 진단 포함 (블록 의미 왜곡, height_cost 부정확, 컨테이너 불일치 등)
- 미해결 사항 확정: 텍스트=Kei 편집, 선택=스크린샷, 전부 안맞으면=정확도 최고로
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase K에서 넣은 "용어정의 max 50자" 등 하드코딩 분량 제약이
Phase O의 동적 계산(_max_chars_per_item)과 충돌하여 매번 과도한 축약 발생.
하드코딩 6줄 삭제. 컨테이너 제약에 위임.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase I: 전수 정합성 복구 + 넘침 처리 패러다임 전환 (14개 항목)
- I-14: SSE 유틸 공통 추출 (src/sse_utils.py 신규, 3개 파일 중복 제거)
- I-13: dead code 3건 삭제 (_call_anthropic_direct, _extract_sse_text x2) + import anthropic 제거
- I-1: STEP_B_PROMPT purpose 가이드 미존재 블록 3개 → 실존 블록 교체
- I-2: catalog.yaml not_for 13건 미존재 블록 참조 교체/제거
- I-12: BLOCK_SLOTS 주석 개수 수정 (cards 9, visuals 6, emphasis 10)
- I-10: INDEX.md 38개 동기화 (삭제된 8개 블록 행 제거)
- I-11: README.md 38개 동기화 (_legacy 제거, 트리/개수 정리)
- I-3: PURPOSE_FALLBACK 상수 + purpose 기반 미등록 블록 교체
- I-7: compare-pill-pair 단독 사용 금지 검증
- I-4: 38개 블록 전체에 slot_desc 추가
- I-5: 편집자 프롬프트에 slot_desc 전달 로직
- I-6: 제목 유사도 70% 초과 시 자동 교정
- I-9: 넘침 판단 Kei API 호출 (KEI_OVERFLOW_PROMPT, call_kei_overflow_judgment)
- I-8: 대형 콘텐츠 정보 Kei overflow 프롬프트에 포함
프로세스 재설계:
- Stage 2.5 제거 → Stage 5에서 Sonnet 감지 + Kei 판단 통합
- _review_balance() 확장: zone 예산 + overflow_detected action 추가
- Stage 5 루프에 Kei 넘침 판단 호출 통합
- _apply_adjustments()에 kei_trim/kei_restructure action 추가
- _build_overflow_context(), _convert_kei_judgment() 헬퍼 함수 추가
- DOWNGRADE_MAP은 Kei API 실패 시 비상용으로만 잔존
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
전수 검토 결과 발견:
- 실제 블록 38개 (문서 46개 표기 → 8개 미존재)
- STEP_B_PROMPT가 미존재 블록 3개를 적극 추천 (프롬프트 자기모순)
- catalog.yaml not_for에서 미존재 블록 참조
- 슬롯 의미 미전달 → 편집자가 source/rows/cards 채우지 못함
13개 항목 3패턴 분류:
A. 프롬프트 자기모순 해소 (I-1~I-3)
B. 슬롯 의미 전달 (I-4~I-5)
C. 코드 안전망 확장 (I-6~I-9)
D. 문서 동기화 (I-10~I-13)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
H-1a: KEI_PROMPT에 제목 중복 방지 지시 추가
H-1b: KEI_PROMPT_B (컨셉 구체화) + refine_concepts() 신규 함수
- 각 꼭지의 relation_type, expression_hint, source_data 판단
- 1회 호출로 전체 꼭지 처리
- session_id: "design-agent-refine" (별도)
- 실패 시 1단계-A 결과 그대로 반환 (pipeline 안 멈춤)
H-5: 팀장에게 relation_type + expression_hint + source_data 전달
- 꼭지 요약에 관계/표현/원본데이터 포함
section-title-with-bg body 금지:
- STEP_B_PROMPT에 규칙 추가
- BODY_FORBIDDEN_MAP + _validate_height_budget에서 코드 레벨 교체
manual_classify fallback 동기화:
- core_message, purpose, source_hint 기본값 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1단계 A/B 분리 계획에 대한 정밀 검토 결과:
- refine_concepts() 실패 처리: A 결과 그대로 사용
- source_data 하류 전달 경로 추가
- section-title-with-bg body 배치 금지 규칙
- 1회 호출로 모든 꼭지 처리 명시
- manual_classify() fallback 동기화
- session_id "design-agent-refine" 별도
- 제목 중복 방지 지시
- expression_hint 역할 재정의 (관계 성격만, 블록 이름은 Opus가)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
H-1: KEI_PROMPT 재설계
- "꼭지 추출" → "슬라이드 스토리라인 설계"
- 핵심 메시지(core_message) 먼저 파악
- 각 위치의 목적(purpose) 부여: 문제제기/근거사례/핵심전달/용어정의/결론강조/구조시각화
- 원본 텍스트 범위(source_hint) 명시
- 원본 보존 원칙 강조
H-2: EDITOR_PROMPT 수정
- "세련된 편집" → "원본 최대 보존, 약간만 축약"
- "빈 슬롯 금지" 명시
- purpose 기반 텍스트 배치
H-3: STEP_B_PROMPT 보강
- purpose 기반 블록 선택 가이드 추가 (참고, 강제 아님)
- 출력 JSON에 purpose 필드 추가
H-4: fill_content()에서 purpose 전달
- slot_requirements에 목적(purpose) 1줄 추가
코드 구조 변경 없음. 프롬프트만 수정. persona_agent 수정 0건.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
다른 Claude가 커밋 시 의도치 않게 삭제한 핵심 템플릿 파일 복원:
- cards/card-text-grid.html
- emphasis/conclusion-accent-bar.html
- emphasis/quote-left-border.html
- emphasis/details-block.html
- visuals/layer-diagram.html
- visuals/pyramid-hierarchy.html
- visuals/timeline-horizontal.html
- visuals/timeline-vertical.html
- _legacy/ 전체 (13개)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. kei_client.py: Kei API가 마크다운 리스트(- ) 접두사로 JSON 응답 시 전처리하여 파싱
2. image_utils.py: base_path+상대경로 이중 시 파일명 rglob 재탐색
3. design_director.py:
- conclusion 꼭지 → footer zone + conclusion-accent-bar 코드 레벨 강제
- _validate_height_budget(): zone별 height_cost 합산 검증, 초과 시 큰 블록 자동 교체
- Opus 추천 프롬프트에 zone 배정 규칙 명시 (conclusion→footer 등)
4. main.py: 서버 startup 시 FAISS 인덱스 + bge-m3 모델 미리 로드
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. kei_client.py _parse_json(): Kei가 마크다운 리스트 접두사(- )를 붙여
JSON 응답하는 경우 전처리하여 파싱. 원본 + 클린 버전 둘 다 시도.
2. image_utils.py: base_path와 상대경로가 이중으로 붙는 경우
파일명으로 rglob 재탐색하여 실제 파일 위치 찾기.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 5단계 파이프라인 상세 (Kei API/Opus/Sonnet 역할 구분)
- 블록 라이브러리 46개 (6 카테고리) 전체 목록
- FAISS 블록 검색 설명 + 인덱스 빌드 방법
- 레이아웃 프리셋 zone 예산 추가
- 기술 스택 단계별 AI 역할 구분
- 프로젝트 구조 전체 반영 (신규 파일 포함)
- 핵심 원칙 업데이트 (컨테이너 예산, grid 코드 결정 등)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1단계 (실장):
- Kei API 연동 복구 (타임아웃 무제한, Kei persona 사고)
- 정보 구조 파악 단계 추가 (본문 흐름 vs 참조 분리)
- 각 꼭지에 role(flow/reference) 부여
- fallback: Anthropic 직접 호출 (info_structure + role 포함)
2단계 (팀장):
- info_structure + role 기반 배치 규칙 추가
- flow → 좌측/메인, reference → 우측/사이드
- detail_target → 본문 제외
- 중복 방지 규칙
파이프라인:
- pipeline.py import re 추가
Figma 관련 (다른 Claude Code 작업분):
- catalog.yaml, figma-screenshots, figma-analysis, 테스트 HTML
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
DA-12: 1단계 Kei 실장 — 꼭지 2~5개 추출 + 레이어/강조/배치/이미지/표/자세히보기 판단
DA-13: 2단계 디자인 팀장 — catalog 연동 + 블록 매핑 + 공간 배분 + 글자 수 가이드
DA-13b: 3단계 텍스트 편집자 — 글자 수 가이드 참고, 의미 우선 편집 + 자세히보기(요약+상세)
DA-14: 4단계 실무자(AI+코드) + 5단계 팀장 재검토 (균형 점검 → 2차 조정)
문서:
- CLAUDE.md: 5단계 프로세스 + 이미지/표/자세히보기 처리 원칙
- PLAN.md: DA-12~14 태스크 전면 재작성
- PROGRESS.md: 동기화
- FIGMA-COMPONENT-EXTRACTION-PLAN.md: 모드 독립 블록, 변환 규칙, image-block/details-block, MCP, 토큰 매핑
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>