- tests/integration/scripts/regenerate_snapshots.py: 스냅샷 일괄 재생성 도구 - 통합 스냅샷 9종 갱신, 회귀/유닛 테스트 7건 보강 - ISSUE_DRAFTS_2026-07-02.md: 7/2 전수 검토 이슈 초안 보존 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
11 KiB
이슈 초안 — 2026-07-02 스냅샷(b836e79) 전수 검토 결과
검토 범위: PLAN/PROGRESS/emergency.md 등 계획 문서, tests/matching 진단 리포트,
b836e79커밋 코드 diff, figma_to_html_agent(미통합) 전체. 목표: ① Figma→HTML 변환이 정확히 되고 ② 그 HTML에 콘텐츠 내용·의미가 반영되어 정리되는 상태.
그룹 A — Figma→HTML 변환 정확도
A-1. figma_to_html_agent를 메인 repo로 통합 (유실 위험 제거)
배경
- Figma→HTML 변환기 본체(MCP 추출 + 수학 변환 + 검증 프로세스 문서 PROCESS.md/MATH.md/RULES.md)가
Front_test_v515/figma_to_html_agent/에만 존재하며, 이 디렉토리는 gitignore 처리되어 어디에도 백업이 없음. - 메인 repo에는 사본 스크립트(
scripts/figma_to_html.py)와 메타데이터만 있음. - 32개 frame 변환 산출물(blocks/{frame_id}/index.html, texts.md, flat.md)도 같은 위치에 미보존 상태.
작업
figma_to_html_agent/를 repo 최상위로 이동 (문서 + blocks + scripts).scripts/figma_to_html.py중복 제거, gradient_math.py import 경로 정리.- MCP(Figma Desktop Dev Mode) 의존성·.mcp.json 샘플 문서화.
- .gitignore에서 해당 경로 제외 확인 후 커밋.
완료 조건: 변환기 전체가 origin/main에 push되어 로컬 디스크 유실 시에도 복구 가능.
A-2. 잔여 Figma frame 프로모션 완료 (8/32 → 32/32)
배경
- Figma frame 32개 중 promoted(본체 편입) 8개, static(1:1 변환만) 6개+, 나머지는 staged 미작성.
- placement_planner에 "contract-only 템플릿 skip" 로직(
b4_partial_missing_skip, IMP-95 u6)이 있다는 것은 contract는 있으나 partial HTML이 없는 frame이 존재한다는 뜻 — 매칭이 맞아도 렌더링 불가.
작업
- frame_contracts.yaml 기준 32개 frame의 상태 매트릭스 작성 (contract 유무 / partial HTML 유무 / promoted 여부).
- static 6개(process-products-2col, scene-with-numbered-list-4, framework-3section-label-body, bordered-3paragraphs, cards-3-category-bim-diagram, dx-banner-3perspective)부터 staged → promoted 진행.
- partial 없는 contract-only frame 목록을 문서화하고 순차 해소.
완료 조건: V4가 선택한 어떤 frame도 "partial 없음"으로 skip되지 않음.
A-3. Figma 원본 추적성(provenance) 강화
배경
- promoted 블록은 Jinja2 파라미터화 과정에서 Figma 원본 좌표·구조 추적성이 손실됨. 현재 provenance 테스트(test_imp49_partial_figma_provenance.py)는 색상 literal만 비교.
get_screenshot결과(Figma 원본 PNG)가 캐시되지 않아 사후 육안 비교 기준이 없음.
작업
- blocks/{frame_id}/에 Figma 원본 스크린샷 캐시 저장 (fetch_figma_screenshots.py 활용).
- promoted 블록마다 source frame_id를 frame_contracts.yaml에 정식 필드로 기록.
- provenance 테스트를 색상 외 구조(슬롯 수, 주요 영역 배치)까지 확장.
완료 조건: 임의의 promoted 블록에서 "원본 Figma frame → HTML 요소" 대응을 문서·테스트로 확인 가능.
그룹 B — 콘텐츠 의미 → HTML 반영 (매칭 품질)
B-1. 02-2.2 매칭 실패 교정 — TARGET 4/4 달성
배경
- V4 종합 판정 TARGET 3/4 (75%). 실패 케이스 02-2.2: 정답 Frame 14가 V4 순위 7위, 모든 후보 reject.
- 근본 원인: Frame 14의 anchor_sets 키워드가 MDX 02-2.2 본문과 거의 안 겹침 (tests/PIPELINE.md:230-232).
- 문서상 예상 공수 1~2일 — 가장 빠르게 정확도를 올릴 수 있는 지점.
작업
- Frame 14 anchor_sets 재라벨링 + 도메인 키워드 보강.
- holdout(02-2.1 등)으로 과적합 여부 교차 확인.
완료 조건: TARGET 4/4, holdout 정확도 하락 없음.
B-2. MDX 콘텐츠 성격·시각 의도 분류를 키워드 사전 → LLM 판정으로 대체
배경
- V3 구조 매칭의 "콘텐츠 성격(12 카테고리)·시각 의도(9 카테고리)"가 키워드 사전 매칭이라 오분류 발생 (예: 01-2가 policy_requirements로 오분류). tests/PROGRESS.md 약점 #2·#3, 예상 공수 3~5일.
- 일반 표현을 못 잡는 구조적 한계 — 새 MDX가 들어올수록 사전 유지비 증가.
작업
- 분류 프롬프트 설계 + 기존 4 TARGET/holdout으로 정확도 비교 (사전 vs LLM vs 하이브리드).
- 비용 고려해 "사전 1차 + 저신뢰 시 LLM" 하이브리드 우선 검토.
- 판정 근거를 pipeline_trace에 기록해 사후 검증 가능하게.
완료 조건: 01-2 오분류 해소 + TARGET/holdout 분류 정확도 리포트 갱신.
B-3. V4 스코어링 재조정 — ablation 결과 반영
배경
- ablation으로 확인된 사실: slot 축(가중 0.15)은 frame 선별에 무영향(Top-1 7/7 동일), cardinality는 axis(0.20)+slot.within(0.075)로 같은 신호가 중복 가중됨 (tests/PROGRESS.md 약점 #5·#6, V4_SLOT_ABLATION.md).
작업
- slot 축을 frame 선별 가중에서 제거하고 label 게이트 역할로만 유지.
- cardinality 중복 가중 해소 후 가중치 재정규화.
- TARGET/holdout 재실행으로 회귀 없음 확인.
완료 조건: 재조정된 가중치로 TARGET ≥ 기존, confidence 분포 문서화.
B-4. 슬롯 의미 매핑 계약(T25) 실제 배선 + 컴포넌트 확장(T23) 커버리지
배경
- "BIM → col_a_label" 같은 편집 슬롯 의미 매핑 부재가 약점 #4로 기록됨.
- 이번 스냅샷에서 node_slot_mapping.yaml(11 node × 9 slot 매트릭스)이 정의됐으나 runtime에서 읽는 배선 미확인 (주석: "T25 will wire builders/mappers to validate").
- component_expansion_registry.yaml은 DxEffect 1개 entry뿐이고 status: planned. persona role label도 "DxEffect" 하드코딩 (src/phase_z2_pipeline.py L281-284).
- AI schema hints도 three_parallel_requirements 1개 frame만 정의 (L216-241).
작업
- mapper/builder가 node_slot_mapping.yaml을 실제로 로드·검증하도록 배선 (T25).
- DxEffect expansion end-to-end 테스트 후 status: planned 해제.
- AI schema hints를 주요 frame(three_persona_benefits, quadrant 등)으로 확장.
- component_name 하드코딩 제거.
완료 조건: node→slot 매핑 위반이 파이프라인에서 검출되고, DxEffect 외 컴포넌트 1개 이상 추가 등록.
B-5. 표 전체 행 추출 + 이미지 frame 매칭 (약점 #7·#8)
배경
- 4행 표에서 첫 행만 본문으로 추출, 나머지 행 무시 (DECK 정직성 점검에서 발견).
- 그림/이미지 frame은 본문 텍스트 패턴만 분석해 매칭이 약함.
작업
_extract_markdown_table및 관련 파서가 전 행을 atom으로 보존하도록 수정, check_phase_z2_render_text_coverage.py로 검증.- image_ref node type의 매칭 신호 설계 (alt 텍스트, 주변 문맥).
완료 조건: 표 포함 MDX의 render_text_coverage에서 missing 행 0.
그룹 C — 파이프라인 신뢰성 (empty shell 제거·배선 완성)
C-1. Emergency P2~P5 완수 — empty shell 완전 제거
배경
- mdx 01
05 rescue 세션(emergency.md): root cause 3개(C1 catalog gap all-reject / C2 section key mismatch / C3 V4 source 누락) 식별 후 **P1 진단만 완료, P2P5 미실행**. - 정책은 이미 확정됨: reject →
ai_adaptation_requiredstatus, empty_shell terminal 제거, generic_fallback은 기존 catalog 활용.
작업 (emergency.md의 priority 순서 그대로)
- P2: V4 후보 보존 + 3-status 분류 (auto_renderable / ai_adaptation_required / blocked_runtime).
- P2.5: Section key alignment (child → parent pool merge universal policy).
- P3: empty_shell terminal 제거 + generic_fallback mandatory. — generic fallback frame(three_parallel_requirements, 1171281190 하드코딩)이 모든 MDX 타입을 커버하는지 검증 포함.
- P4: AI fallback 호출 trace 검증.
- P5: Frontend candidate panel status surface.
완료 조건: mdx 01~05 전부 empty shell 없이 슬라이드 출력.
C-2. V4 evidence 경로(PHASE_Z_B4_V4_EVIDENCE) end-to-end 배선
배경
_select_frame_v4_aware()(placement_planner L180-285)와 selection_trace 필드까지 구현됐으나:- env flag 기본 OFF에 call site에서 v4_candidates 전달 여부 미확인
- Step 11 trace 직렬화 wiring은 "u4 out of scope"로 명시적 미구현
partial_exists()callback의 실제 호출처 없음
작업
- plan_placement() 호출부에 v4_candidates 전달 + flag ON 경로 통합 테스트.
- Step 11에서 selection_trace JSON 직렬화·응답 포함.
- flag ON/OFF SHA parity 회귀 테스트(기존 test_b4_v4_evidence_off_sha_parity.py) 통과 유지.
완료 조건: flag ON 실행에서 V4 rank 기반 frame 선택이 trace로 확인되고, OFF 시 기존 출력과 SHA 동일.
C-3. pipeline_trace / ai_trace 백엔드-프론트 계약 검증
배경
- 프론트 PipelineTracePanel(신규 216줄)이
RunMeta.pipeline_trace,ai_trace스키마(sections/units/zones, skip_reasons 등)를 기대하지만, 백엔드가 이 JSON을 실제 생성·응답에 포함하는지 미확인. ignoreUserOverrides플래그,coverage_state,rationale.ai_adaptation_required등 신규 필드도 동일.
작업
- 백엔드 응답과 프론트 타입(designAgentApi.ts) 필드 대조표 작성.
- 누락 필드는 백엔드에서 생성 추가, 계약 테스트(스키마 검증) 1본 작성.
완료 조건: 실제 run에서 PipelineTracePanel이 전 섹션 상태를 표시.
C-4. SlideCanvas.tsx 한글 주석 인코딩 손상 복구 (소형)
배경
- Front/client/src/components/SlideCanvas.tsx L1~80 부근 한글 주석이 깨진 채 커밋됨 ("?ㅼ젣", "?쒖떆" — CP949↔UTF-8 오변환 패턴). 기능 코드는 정상.
작업: 깨진 주석 복원(git 히스토리의 정상 버전 참조) 후 UTF-8로 재저장. 에디터/훅에 인코딩 고정 설정 검토.
완료 조건: 파일 전체 UTF-8 정상, diff에 주석 복원만 포함.
제안 우선순위 (의존 관계 기준)
| 순위 | 이슈 | 이유 |
|---|---|---|
| 1 | A-1 (변환기 통합) | 백업 없는 유실 위험 — 즉시 |
| 2 | C-1 (Emergency P2~P5) | 진행 중 작업, 정책 확정 상태 |
| 3 | B-1 (02-2.2 교정) | 1~2일로 TARGET 4/4 |
| 4 | C-2 (V4 evidence 배선) | 이미 절반 구현된 코드 완성 |
| 5 | C-3 (trace 계약) + C-4 (인코딩) | 프론트 검증 기반 확보 |
| 6 | B-4 (슬롯 매핑 배선) | "의미 반영" 목표의 핵심 |
| 7 | A-2 (frame 32개 완성) | 매칭 성공해도 렌더 불가인 갭 해소 |
| 8 | B-2, B-3 (분류 LLM화, V4 재조정) | 정확도 상한 돌파 |
| 9 | B-5 (표/이미지), A-3 (추적성) | 커버리지·품질 보강 |