figma_to_html_agent/:
- Figma MCP 기반 블록 추출 에이전트 (CLAUDE.md, PLAN.md, PROCESS.md 등)
- block-tests/: Figma→HTML 변환 결과물 (bim-3roles-cards 등)
- templates_staging/: Jinja2 템플릿 + meta.yaml + example.yaml
- figma-analysis/, figma-assets/: Figma 분석 데이터 + 에셋
- scripts/: gradient_math.py 등 유틸리티
설정:
- .mcp.json: Figma MCP 서버 연결 설정
- .claude/settings.json: Claude Code 프로젝트 설정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 루트의 IMPROVEMENT-PHASE-*.md, PHASE-*.md 등 45개 → docs/history/로 이동
- docs/block-tests/ 오래된 블록 테스트 HTML 삭제 (figma_to_html_agent로 대체)
- docs/figma-analysis/, docs/figma-assets/, docs/figma-screenshots/ 정리
- docs/test-*.html 등 초기 테스트 파일 정리
- 참고 페이지/ 스크린샷 정리
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
파이프라인 현황 문서 신규 작성:
- Stage 0~4 전체 흐름, Type A/B/B'/B'' 구분, MDX↔유형 매핑
- 단계별 파일/함수 맵, 데이터 흐름, 현재 구현 상태
- ARCHITECTURE_OVERVIEW.md는 3/27 스냅샷으로 archived 처리
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- hero-icon-cards_1.html: hero-icon-cards 변형 (icon → 소제목+불릿 계층)
- compare-detail-gradient.html: 하단 2열 비교 블록 (Figma Frame 4 기반)
- 오답노트.md: 절대 하지 말아야 하는 실수 목록
- figma_to_html.py: Figma→HTML 변환 스크립트
- static/figma-assets/: Figma export 이미지 (배지, 화살표)
- 주의: compare-detail-gradient CSS 폰트 크기가 임의 수정됨 — 원본 복원 필요
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- block_assembler_b2.py: B'' 전용 조립 함수 (별도 파일)
- 상단: 색상 바 제목 + 소제목(accent 색상) + 불릿(들여쓰기)
- 하단: 색상 바 제목 + 표(있으면) + 불릿
- border/gradient 박스 없음, 여백과 폰트로 구분
- 이제부터 스타일 세부 조정은 하나씩 반영 예정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- block_assembler B': 카드 div에 flex:1 추가 → 가로 균등 높이/폭
- block_assembler: [핵심요약:] 이후 라인 break → 결론 텍스트가 하단에 섞이는 문제 해결
- 남은 문제: 하단 좌 콘텐츠 잘림, 상단 자연(여건) 불릿 잘림
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- block_assembler B': 카드 3개 이상 + 이미지 없음 → 가로(row) 배치
- block_assembler B': section title이 카드 제목, D1은 카드 내 bold 불릿
- block_assembler: overflow:auto → overflow:hidden, [핵심요약:] 마커 필터
- block_assembler: \x01 바이트 수정
- pipeline: Selenium 실측 기반 zone 간 재배분 (allocated-scrollHeight로 slack 계산)
- pipeline: surplus 최대 50%만 이전 (하단 최소 공간 보장)
- pipeline: bottom_left/bottom_right → Selenium bottom zone 매핑
- kei_client: 상단은 팝업 대상 제외, 하단에서만 팝업 분리
결과: 02번/03번 모두 overflow 없이 정상 출력
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- build_escalation_report 결과에 Selenium overflow px 정보 추가
- Kei가 실측 overflow를 인식하고 popup 결정을 내림 (7건)
- 미완: Kei popup 결정이 상단/하단좌 조립에 미반영 + 결정 과격 (전부 팝업)
- 다음: popup 결정 조립 반영 + Kei 가이드 개선 (일부만 팝업, 핵심은 유지)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- pipeline: filled→측정→Kei 재판단→재조립 루프 (최대 3회)
- pipeline: Selenium overflow가 있으면 calculate_fit과 무관하게 에스컬레이션
- 문제: build_escalation_report가 Selenium 측정 결과를 포함하지 않아 Kei가 빈 결정 반환
- 다음: content family 기반 범용 파이프라인 설계 필요 (Phase X-C)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- block_assembler + assemble_stage2: 기존 [이미지:] 패턴에 ![markdown image 패턴 추가
- 02번 상단 "소통과 신뢰" 카드에 이미지 경로가 불릿으로 표시되던 문제 해결
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- slide_measurer: data URI → 임시파일 방식 (대용량 HTML 측정 가능)
- pipeline: Type B zone 간 재배분 (top↔bottom 공간 이전)
- pipeline: overflow 분기에 top/bottom zone 추가
- kei_client: 에스컬레이션 prompt 개선
- 텍스트 원문 보존 원칙 명시 (삭제/요약/압축 금지)
- action을 popup만으로 제한
- 실제 역할명 목록을 prompt에 전달
- block_assembler: Kei popup 결정 반영 (해당 역할 콘텐츠 → 팝업 링크)
결과: 02번 상단 카드 3개 모두 표시, 하단 우측 표 → 팝업 분리
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Selenium 측정 실패 (data URI 크기 제한)
- overflow 분기에 Type B zone 없음
- calculate_fit에서 Type B 역할 인식 불가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- XBX-1: normalizer 불릿 depth 보존 (D1/D2 마커) + 조립 로직 계층 반영
- XBX-3: 하단 구조 개선 — 하나의 큰 박스 안에 중제목 헤더 + 세로 구분선 2분할
- XBX-5: before→filled→after 파이프라인 연결 확인 (filled 2.2MB, 측정/재배분 정상)
- XBX-6: Type B에서 Sonnet 재구성 + renderer 스킵 — code_assembled 직접 사용
- final.html: 4,934 bytes → 2.2MB (Type B 정상 출력)
- Type A 코드 한 글자도 안 건드림
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- PHASE-X-BX.md: 유형 B 미완료 6개 task 수행 방향 상세 (02번 먼저 → 03번 확장)
- PHASE-X-C.md: 서브존 프리셋 기반 범용 레이아웃 방향
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- block_assembler: _assemble_slide_html_type_b 추가 (filled/after용 HTML 생성)
- fit_verifier: redistribute()가 ROLE_ZONE_MAP 대신 containers zone 사용
- renderer: render_slide_from_html()에 zone 기반 높이 탐색 추가
- pipeline: 팝업 HTML CSS를 콘텐츠 유형별(table/list/text) 분기
- run_from_stage1b: MDX 파일 하드코딩 제거 + layout_template 전달 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
03번 하단 구조:
- 좌(2.1): 3개 소주제(Digital화+표, GIS+BIM, Solution) 각각 불릿 있음
- 우(2.2): 3개 소주제(품질향상, 정보물추가, 효율화) 각각 불릿 있음
- 결론: 원본 그대로
문제: _assemble_type_b가 내용을 제대로 조립 못 함
다음 세션: 하단 좌/우 내용 정확히 조립 + 렌더링 확인
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- _assemble_type_b: 상단에 해당하는 모든 level=2 section을 합침
(03번처럼 기술/사람/자연이 별도 section으로 분리된 경우 대응)
- 하단 대목차: level=3 바로 앞의 level=2 section으로 정확히 찾기
- 03번 결과: 상단 카드(기술/사람/자연) + 하단(과정혁신/결과변화) 정상
- 02번 영향 없음
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
현재 상태:
- 유형 A: ✅ 동작
- 유형 B: code_assembled만 동작, 파이프라인(filled/after) 미연결
- 핵심 문제: block_assembler가 고정 4역할만 처리 → 유형 B 지원 필요
다음 세션:
1. block_assembler 유형 B 지원
2. 컨테이너 크기 맞춤 (Selenium 측정 기반)
3. 유형 A 깨지지 않는지 확인
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
핵심 변경:
- mdx_normalizer: ### (h3) 소목차도 section으로 분리 (기존 ## 만)
- _assemble_type_b: Kei structured_text 대신 normalized.sections에서 직접 텍스트
- 대목차/소목차 계층 구조 그대로 반영
결과:
- 슬라이드 제목: 원본 MDX frontmatter 그대로
- 대목차: "DX 기반 Process 혁신에 따른 주체별 기대효과"
- 소목차 좌: "업무 수행 과정(Process)의 변화"
- 소목차 우: "DX 시행 주체별 기대효과" + 팝업 링크 + Kei 요약 표
- 캡션: normalized.images alt text
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
X-B-3~5 완료:
- space_allocator: build_containers_type_b() 추가
- assemble_stage2: _assemble_type_b() 추가 (소제목 카드형)
- pipeline.py: layout_template 분기 (A/B)
- pipeline_context: Analysis.layout_template 필드
- validators: 유형 B 검증 완화
텍스트 보존 강화:
- KEI_PROMPT: 제목 원본 그대로, 텍스트 재작성 금지
- KEI_STRUCTURED_TEXT_PROMPT: 소제목 유지, 원본 문장 그대로
원본 MDX 복구:
- samples/mdx_batch/02.mdx: 표 데이터 누락 수정 (원본에서 재복사)
미해결 (다음 세션):
- 들여쓰기: 대제목→중제목→소제목→본문 계층 구조
- 이미지 캡션: [그림 제목] 형식 (대괄호 포함)
- 상단 컨테이너: 빈칸 위로 붙이기
- 카드 디자인: 안전과품질/생산성향상/소통과신뢰 디자인 개선
- 제목: Kei가 원본 제목 바꾸는 문제 잔존
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
X-B-1: KEI_PROMPT에 유형 B 옵션 추가
- 유형 A: 기존 배경/본심/첨부/결론 (참조자료 있는 콘텐츠)
- 유형 B: 본심1(상단)+본심2(하단2분할)+결론 (본문만으로 구성)
- Kei가 콘텐츠 보고 A/B 선택, layout_template 필드로 반환
- 검증: 01번→A, 02번→B 정확히 선택
X-B-2: 검증기 완화
- 유형 A: 본심 필수 유지
- 유형 B: 결론(footer)만 필수, 자유 역할명 허용
- 섹션 수 차이 허용 확대 (유형 B: 4)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- V'-2: 표 공간 계산에 V'-4(결론 위까지 채움) 높이 반영
→ Kei에게 정확한 행 수 전달 (1행 → 5행)
- V'-2: 이미지 높이를 실제 비율로 계산 (sub_layout 고정값 대신)
→ 200/2.73 = 73px (기존 172px → 공간 100px 확보)
- footer 최소 높이: design tokens 기반 동적 계산
→ weight 0.05일 때 26px → 53px 보장
- assemble_stage2: 이미지 높이도 실제 비율 반영
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
폰트 위계 적용:
- 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>