Files
KyeongminandClaude Opus 4.8 b836e79ee1 wip: phase_z2 evidence 파이프라인 + matching 실험(phase2~26) + 프론트 trace 패널 진행분 스냅샷
- src: phase_z2 composition/mapper/pipeline/placement_planner/retry, ai_fallback(prompts/schema/validate), mdx_text_atoms 신규
- Front: PipelineTracePanel 신규, FramePanel/SlideCanvas/Home/designAgentApi 등 갱신 + 테스트 4종 추가
- templates/phase_z2: catalog(component_expansion_registry, node_slot_mapping 신규), frames, families, slide_base 갱신
- tests/matching: phase2~26 매칭 실험 스크립트·리포트·온톨로지 전체 (미커밋 진행분)
- tests: b4_v4 evidence, task5~28.5 시리즈, regression(imp95 baseline) 등 신규 테스트 대량 추가
- docs/reference: MDX 구조 인벤토리, MDX→Frame 구조 계약 문서
- scripts: mdx 계약/parity/coverage/viewport 체크, gitea comment, run sync 유틸
- .gitignore: tmp*.json, chromedriver, .orchestrator, *.pkl, Front_test* 등 임시/스냅샷 제외

미완성 작업의 보존용 스냅샷 커밋 (2026-07-02)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 17:03:42 +09:00

140 lines
6.2 KiB
Python
Raw Permalink 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.
"""MD → HTML 변환 (PNG 미리보기 크게 보이게 + 읽기 쉬운 스타일)"""
import markdown
from pathlib import Path
HERE = Path(__file__).parent
CSS = """
<style>
body {
font-family: -apple-system, 'Segoe UI', 'Malgun Gothic', sans-serif;
max-width: 1800px;
margin: 0 auto;
padding: 24px;
line-height: 1.6;
color: #1e293b;
background: #f8fafc;
}
h1 { color: #1e293b; border-bottom: 3px solid #2563eb; padding-bottom: 12px; }
h2 {
color: #1a365d;
background: #e0e7ff;
padding: 10px 16px;
border-radius: 6px;
margin-top: 32px;
}
hr { border: none; border-top: 1px solid #cbd5e1; margin: 24px 0; }
table {
border-collapse: collapse;
width: 100%;
margin: 12px 0 24px;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.05);
}
th, td {
border: 1px solid #e2e8f0;
padding: 10px;
text-align: left;
vertical-align: top;
}
th {
background: #1e293b;
color: #fff;
font-weight: 700;
text-align: center;
width: 120px;
}
td:first-child {
background: #f1f5f9;
font-weight: 600;
text-align: center;
width: 120px;
}
td img {
max-width: 260px;
height: auto;
display: block;
margin: 0 auto 6px;
border: 1px solid #cbd5e1;
border-radius: 4px;
}
td br + strong { color: #2563eb; }
</style>
"""
def convert(md_path: Path, html_path: Path, title: str):
md_content = md_path.read_text(encoding="utf-8")
html_body = markdown.markdown(md_content, extensions=["tables", "attr_list"])
html = f"""<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>{title}</title>
{CSS}
</head>
<body>
{html_body}
</body>
</html>
"""
html_path.write_text(html, encoding="utf-8")
print(f"생성: {html_path}")
def main():
pairs = [
("MATRIX_CASE1.md", "MATRIX_CASE1.html", "CASE 1 - 원본 텍스트"),
("MATRIX_CASE2.md", "MATRIX_CASE2.html", "CASE 2 - 양쪽 가중"),
("MATRIX_CASE3.md", "MATRIX_CASE3.html", "CASE 3 - 목차만"),
("MATRIX_17.md", "MATRIX_17.html", "MATRIX 17 (기존)"),
("MATRIX.md", "MATRIX.html", "MATRIX (기존 7섹션)"),
("RESULT_BY_SECTION.md", "RESULT_BY_SECTION.html", "결과 by 섹션 (기존)"),
("KEYWORD_REPORT.md", "KEYWORD_REPORT.html", "키워드 전체 리포트"),
("MATRIX_PHASE2.md", "MATRIX_PHASE2.html", "Phase 2 — 7개 방법 (키워드+구조+의미)"),
("MATRIX_PHASE3.md", "MATRIX_PHASE3.html", "Phase 3 — 9개 방법 (의미 5 family)"),
("MATRIX_PHASE4.md", "MATRIX_PHASE4.html", "Phase 4 — 의미 15개 (5 family × 3 전략)"),
("MATRIX_PHASE4_1순위.md", "MATRIX_PHASE4_1순위.html", "Phase 4 — 1순위만 (5 유닛 × 15 방법)"),
("MATRIX_PHASE5.md", "MATRIX_PHASE5.html", "Phase 5 — Case 2 (세부 단위 7개 방법)"),
("MATRIX_PHASE6.md", "MATRIX_PHASE6.html", "Phase 6 — 4개 유닛 × 7개 방법"),
("MATRIX_PHASE7.md", "MATRIX_PHASE7.html", "Phase 7 — 2~3단계 파이프라인 검증"),
("MATRIX_PHASE8.md", "MATRIX_PHASE8.html", "Phase 8 — Distinctive-Kiwi 전처리 강화"),
("MATRIX_PHASE9.md", "MATRIX_PHASE9.html", "Phase 9 — 제목 포함+가중치 후 8개 방법 재평가"),
("MATRIX_PHASE10.md", "MATRIX_PHASE10.html", "Phase 10 — 타이틀 ONLY 매칭"),
("MATRIX_PHASE11.md", "MATRIX_PHASE11.html", "Phase 11 — Asymmetric + Ensemble"),
("MATRIX_PHASE12.md", "MATRIX_PHASE12.html", "Phase 12 — 키워드 수준 매칭 진단"),
("MATRIX_PHASE13.md", "MATRIX_PHASE13.html", "Phase 13 — 방법별 매칭 상세 진단"),
("MATRIX_PHASE14.md", "MATRIX_PHASE14.html", "Phase 14 — 3개 개선 방법 통합표"),
("MATRIX_PHASE14_SAMPLE.md", "MATRIX_PHASE14_SAMPLE.html", "Phase 14 샘플 — AI-Meta 동작 과정"),
("MATRIX_PHASE15.md", "MATRIX_PHASE15.html", "Phase 15 — 키워드 실패 → AI 구조+의미 성공"),
("MATRIX_PHASE16.md", "MATRIX_PHASE16.html", "Phase 16 — 3축 매칭(구조×내용×키워드)"),
("MATRIX_PHASE17.md", "MATRIX_PHASE17.html", "Phase 17 — 32개 analysis.md 전체 3축 매칭"),
("MATRIX_PHASE18.md", "MATRIX_PHASE18.html", "Phase 18 — 키워드만 (baseline)"),
("MATRIX_PHASE19.md", "MATRIX_PHASE19.html", "Phase 19 — synonym + 키워드"),
("MATRIX_PHASE20.md", "MATRIX_PHASE20.html", "Phase 20 — synonym + 키워드 + 내용"),
("MATRIX_PHASE21.md", "MATRIX_PHASE21.html", "Phase 21 — synonym + 키워드 + 내용 + 구조 (old)"),
("MATRIX_PHASE21b.md", "MATRIX_PHASE21b.html", "Phase 21b — ontology 구조축 (tie-breaker)"),
("MATRIX_PHASE22.md", "MATRIX_PHASE22.html", "Phase 22 — 정제 anchor keywords only (baseline)"),
("MATRIX_PHASE23.md", "MATRIX_PHASE23.html", "Phase 23 — anchor + content summary"),
("MATRIX_PHASE24.md", "MATRIX_PHASE24.html", "Phase 24 — anchor + content + legacy structure ontology"),
("MATRIX_PHASE25.md", "MATRIX_PHASE25.html", "Phase 25 — Template-fit-v1 (최종 운영 체계)"),
("MATRIX_PHASE26.md", "MATRIX_PHASE26.html", "Phase 26 — 매칭 방법 비교 종합 + Figma DB 설계 결론"),
("SYNONYMS_REPORT.md", "SYNONYMS_REPORT.html", "Synonym 사전 관리 기준"),
("FIGMA_AUDIT.md", "FIGMA_AUDIT.html", "Figma 32개 구조 검수 리포트"),
("DOMAIN_TERMS_REPORT.md", "DOMAIN_TERMS_REPORT.html", "Domain Terms 검수 리포트 (synonyms 관리 도구)"),
("FIGMA_KEYWORDS_REPORT.md", "FIGMA_KEYWORDS_REPORT.html", "Figma 32 프레임 후보 키워드 검수"),
("BEPS_SUMMARY_REPORT.md", "BEPS_SUMMARY_REPORT.html", "BEPS 기반 통합 정리 (키워드 + 구조 + 프레임)"),
("KEYWORD_BASE_DRAFT.md", "KEYWORD_BASE_DRAFT.html", "Keyword Base 분류 초안 (검수용)"),
("INTENT_DIAGNOSTIC_REPORT.md", "INTENT_DIAGNOSTIC_REPORT.html", "Structure Intent 진단 (점수 통합 전 검수)"),
("CLEAN_ANCHOR_SETS_REPORT.md", "CLEAN_ANCHOR_SETS_REPORT.html", "anchor_sets 정리 리포트 (Milestone 2)"),
]
for md_name, html_name, title in pairs:
md_path = HERE / md_name
if not md_path.exists():
continue
convert(md_path, HERE / html_name, title)
if __name__ == "__main__":
main()