Files
C.E.L_Slide_test2/ISSUE_DRAFTS_2026-07-02.md
KyeongminandClaude Fable 5 4d7c401779
Multi-MDX Regression (IMP-91) / multi-mdx-regression (push) Failing after 9m49s
test: 통합 스냅샷 재생성 스크립트 추가 + 회귀 테스트 갱신 (#29 후속 작업분)
- 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>
2026-08-12 11:13:44 +09:00

11 KiB
Raw Permalink Blame History

이슈 초안 — 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)도 같은 위치에 미보존 상태.

작업

  1. figma_to_html_agent/를 repo 최상위로 이동 (문서 + blocks + scripts).
  2. scripts/figma_to_html.py 중복 제거, gradient_math.py import 경로 정리.
  3. MCP(Figma Desktop Dev Mode) 의존성·.mcp.json 샘플 문서화.
  4. .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이 존재한다는 뜻 — 매칭이 맞아도 렌더링 불가.

작업

  1. frame_contracts.yaml 기준 32개 frame의 상태 매트릭스 작성 (contract 유무 / partial HTML 유무 / promoted 여부).
  2. 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 진행.
  3. 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)가 캐시되지 않아 사후 육안 비교 기준이 없음.

작업

  1. blocks/{frame_id}/에 Figma 원본 스크린샷 캐시 저장 (fetch_figma_screenshots.py 활용).
  2. promoted 블록마다 source frame_id를 frame_contracts.yaml에 정식 필드로 기록.
  3. 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일 — 가장 빠르게 정확도를 올릴 수 있는 지점.

작업

  1. Frame 14 anchor_sets 재라벨링 + 도메인 키워드 보강.
  2. 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가 들어올수록 사전 유지비 증가.

작업

  1. 분류 프롬프트 설계 + 기존 4 TARGET/holdout으로 정확도 비교 (사전 vs LLM vs 하이브리드).
  2. 비용 고려해 "사전 1차 + 저신뢰 시 LLM" 하이브리드 우선 검토.
  3. 판정 근거를 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).

작업

  1. slot 축을 frame 선별 가중에서 제거하고 label 게이트 역할로만 유지.
  2. cardinality 중복 가중 해소 후 가중치 재정규화.
  3. 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).

작업

  1. mapper/builder가 node_slot_mapping.yaml을 실제로 로드·검증하도록 배선 (T25).
  2. DxEffect expansion end-to-end 테스트 후 status: planned 해제.
  3. AI schema hints를 주요 frame(three_persona_benefits, quadrant 등)으로 확장.
  4. component_name 하드코딩 제거.

완료 조건: node→slot 매핑 위반이 파이프라인에서 검출되고, DxEffect 외 컴포넌트 1개 이상 추가 등록.


B-5. 표 전체 행 추출 + 이미지 frame 매칭 (약점 #7·#8)

배경

  • 4행 표에서 첫 행만 본문으로 추출, 나머지 행 무시 (DECK 정직성 점검에서 발견).
  • 그림/이미지 frame은 본문 텍스트 패턴만 분석해 매칭이 약함.

작업

  1. _extract_markdown_table 및 관련 파서가 전 행을 atom으로 보존하도록 수정, check_phase_z2_render_text_coverage.py로 검증.
  2. image_ref node type의 매칭 신호 설계 (alt 텍스트, 주변 문맥).

완료 조건: 표 포함 MDX의 render_text_coverage에서 missing 행 0.


그룹 C — 파이프라인 신뢰성 (empty shell 제거·배선 완성)

C-1. Emergency P2~P5 완수 — empty shell 완전 제거

배경

  • mdx 0105 rescue 세션(emergency.md): root cause 3개(C1 catalog gap all-reject / C2 section key mismatch / C3 V4 source 누락) 식별 후 **P1 진단만 완료, P2P5 미실행**.
  • 정책은 이미 확정됨: reject → ai_adaptation_required status, empty_shell terminal 제거, generic_fallback은 기존 catalog 활용.

작업 (emergency.md의 priority 순서 그대로)

  1. P2: V4 후보 보존 + 3-status 분류 (auto_renderable / ai_adaptation_required / blocked_runtime).
  2. P2.5: Section key alignment (child → parent pool merge universal policy).
  3. P3: empty_shell terminal 제거 + generic_fallback mandatory. — generic fallback frame(three_parallel_requirements, 1171281190 하드코딩)이 모든 MDX 타입을 커버하는지 검증 포함.
  4. P4: AI fallback 호출 trace 검증.
  5. 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의 실제 호출처 없음

작업

  1. plan_placement() 호출부에 v4_candidates 전달 + flag ON 경로 통합 테스트.
  2. Step 11에서 selection_trace JSON 직렬화·응답 포함.
  3. 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 등 신규 필드도 동일.

작업

  1. 백엔드 응답과 프론트 타입(designAgentApi.ts) 필드 대조표 작성.
  2. 누락 필드는 백엔드에서 생성 추가, 계약 테스트(스키마 검증) 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 (추적성) 커버리지·품질 보강