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>
This commit is contained in:
kmlee1andClaude Opus 4.8 committed 2026-07-02 17:03:42 +09:00
1 parent 97b7833a1b
commit b836e79ee1
527 files changed
+673036 -717

No files matched your search

@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html lang="ko"><head><meta charset="utf-8"><title>첨부 6 — Figma DB 정리 방안</title>
<style>
@page { size: A4 portrait; margin: 14mm 14mm 16mm 14mm; }
* { box-sizing: border-box; }
body {
font-family: -apple-system, "Segoe UI", Pretendard, "Malgun Gothic", "Apple SD Gothic Neo", sans-serif;
background: white; color: #1e293b; margin: 0;
font-size: 10pt; line-height: 1.45;
}
@media print {
body { margin: 0; }
.avoid-break { page-break-inside: avoid; }
.page-break { page-break-before: always; }
}
@media screen {
body { max-width: 210mm; margin: 10mm auto; box-shadow: 0 4px 24px rgba(0,0,0,0.12); padding: 14mm; background: #fff; }
}
h1 { font-size: 15pt; border-bottom: 2pt solid #2563eb; padding-bottom: 4pt; margin: 0 0 6pt 0; color: #0f172a; }
h2 { font-size: 11pt; color: #1e293b; margin: 10pt 0 5pt; padding: 3pt 6pt; background: #e0e7ff; border-left: 3pt solid #0a6; border-radius: 2pt; }
h3 { font-size: 10pt; margin: 6pt 0 3pt; color: #1a365d; font-weight: 700; }
p { margin: 4pt 0; }
.meta-bar { color: #64748b; font-size: 8.5pt; margin: -3pt 0 8pt; font-style: italic; }
.note { background: #fef3c7; border-left: 3pt solid #f59e0b; padding: 4pt 8pt; margin: 6pt 0; font-size: 9pt; color: #78350f; border-radius: 2pt; }
.fail-note { background: #fee2e2; border-left: 3pt solid #dc2626; padding: 4pt 8pt; margin: 4pt 0; font-size: 9pt; color: #991b1b; border-radius: 2pt; }
.ok-note { background: #d1fae5; border-left: 3pt solid #059669; padding: 4pt 8pt; margin: 4pt 0; font-size: 9pt; color: #065f46; border-radius: 2pt; }
.mdx-card { background: #f8fafc; border: 0.5pt solid #cbd5e1; border-radius: 4pt; padding: 6pt 8pt; margin: 4pt 0; }
.mdx-title { font-weight: 700; color: #0f172a; font-size: 10.5pt; margin-bottom: 2pt; }
.mdx-excerpt { color: #475569; font-size: 9pt; margin: 2pt 0 4pt; line-height: 1.4; }
.kw-chip { display: inline-block; padding: 1pt 6pt; background: #dbeafe; color: #1e40af; border-radius: 8pt; font-size: 8pt; margin: 1pt 2pt 1pt 0; font-family: ui-monospace, monospace; }
.kw-set-chip { background: #fce7f3; color: #9f1239; }
.kw-rel-chip { background: #e0e7ff; color: #3730a3; }
table { border-collapse: collapse; width: 100%; font-size: 9pt; margin: 4pt 0; }
th, td { border: 0.5pt solid #cbd5e1; padding: 3pt 5pt; text-align: left; vertical-align: top; }
th { background: #1e293b; color: white; font-weight: 700; font-size: 8.5pt; }
code { background: #f1f5f9; padding: 0 3pt; border-radius: 2pt; font-family: ui-monospace, Menlo, monospace; font-size: 8.5pt; color: #0f172a; }
.frame-thumb { max-width: 100%; height: auto; border: 0.5pt solid #94a3b8; border-radius: 3pt; display: block; }
.frame-cell { text-align: center; vertical-align: top; padding: 3pt; }
.frame-label { font-size: 8.5pt; color: #0f172a; font-weight: 600; margin-top: 2pt; }
.frame-score { font-family: ui-monospace, monospace; font-size: 8pt; color: #059669; }
.frame-desc { font-size: 7.5pt; color: #64748b; line-height: 1.25; margin-top: 1pt; }
.label-badge { display: inline-block; padding: 1pt 5pt; border-radius: 2pt; font-size: 7.5pt; font-weight: 700; }
.label-use_as_is { background: #d1fae5; color: #065f46; }
.label-light_edit { background: #dbeafe; color: #1e40af; }
.label-restructure { background: #fef3c7; color: #92400e; }
.label-reject { background: #fee2e2; color: #991b1b; }
.answer-box { background: #fff3cd; border: 1.5pt solid #dc2626; border-radius: 3pt; padding: 2pt; }
.flex-grid { display: table; width: 100%; border-spacing: 0; }
.flex-row { display: table-row; }
.flex-cell { display: table-cell; vertical-align: top; padding: 2pt; }
ol.steps { margin: 4pt 0; padding-left: 16pt; }
ol.steps li { margin: 3pt 0; line-height: 1.5; }
.step-title { font-weight: 700; color: #1e293b; }
.step-fail { color: #991b1b; font-size: 8.5pt; font-style: italic; }
.step-ok { color: #065f46; font-size: 8.5pt; }
/* V1 매칭 상세 (ATTACH_01) 전용 */
.page-header-small { font-size: 8pt; color: #64748b; text-align: right; margin: 0 0 2pt 0; }
.frame-match { border: 0.5pt solid #cbd5e1; border-radius: 4pt; padding: 6pt 8pt; margin: 4pt 0; background: #fafafa; }
.frame-match.answer { border: 1pt solid #dc2626; background: #fffbeb; }
.frame-match h3 { margin: 0 0 3pt 0; font-size: 10pt; }
.fm-body { display: table; width: 100%; }
.fm-thumb { display: table-cell; width: 32mm; vertical-align: top; padding-right: 6pt; }
.fm-thumb img { max-width: 30mm; height: auto; border: 0.5pt solid #94a3b8; border-radius: 2pt; display: block; }
.fm-thumb .frame-desc { font-size: 7pt; color: #64748b; margin-top: 2pt; line-height: 1.25; }
.fm-detail { display: table-cell; vertical-align: top; }
.kw-line { margin: 3pt 0; font-size: 8.5pt; line-height: 1.4; }
.kw-line strong { color: #0f172a; font-weight: 700; }
.hit-chip { color: #065f46; background: #d1fae5; padding: 1pt 5pt; border-radius: 2pt; font-size: 8pt; display: inline-block; margin: 0 2pt; }
.miss-chip { color: #991b1b; background: #fee2e2; padding: 1pt 5pt; border-radius: 2pt; font-size: 8pt; display: inline-block; margin: 0 2pt; }
.hit-inline { color: #065f46; font-weight: 600; }
.miss-inline { color: #991b1b; }
.ratio { color: #64748b; font-family: ui-monospace, monospace; font-size: 7.5pt; }
.frame-match ul { margin: 2pt 0; padding-left: 14pt; font-size: 8.5pt; }
.frame-match li { line-height: 1.4; margin: 1pt 0; }
.section-tag { display: inline-block; padding: 2pt 6pt; border-radius: 2pt; font-size: 8pt; font-weight: 700; margin-left: 4pt; vertical-align: middle; }
.tag-matched { background: #d1fae5; color: #065f46; }
.tag-unmatched { background: #fee2e2; color: #991b1b; }
</style></head><body><h1>첨부 6 — Figma DB 정리 방안 (Frame 12 예시)</h1><div class="meta-bar">템플릿-fit 스키마 기반. 32 프레임 + BEPs 외 디자인들을 동일 스키마로 정리.</div><div class="flex-grid avoid-break"><div class="flex-row"><div class="flex-cell" style="width:40%"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAIuCAYAAAAha3r/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwADsXhJREFUeAHsfQeAHVXZ9jv33m3ZTe89oaUQIPROAooIqPRiJWAFVIqgfhYS9Ps/xQYoiJ+NADZABRRQLJDQO0kgCUkgvbftffee/zynzTlz5+5uCnxC3gdu7tyZM6fP7HnedqLGxkZBDAaDwWAwGAwGg8FgMN7VyNG7EEIIyufz1NnZIT95nJGfyHyTO85mspQrKaEoitRnd5SrP3lZvi0rWTZRJspQlMlQRn52T5n5lHaG7cmivGyWdjfQz7q9ea9OsnRVvK5LRvYz+nd3tFfnr8e3o6NDlY3fMXSZOJXL5dRnd43vngr0dXt7m+pn9CfGc3eN5Z4M+77oaG+nznynd6XwfYH3FPr83TyPbX/kZV/oZzp+luNm4z0SuXeKva+zs1O974FcroSyb8G7jsFgMBgMBuPdgHelAACLwert22jdutXUWF9PeblATNJ/rCj79utHo0aPo759+wULa7sQbZcL87xbmIeLck1os1RiBAj2vvq6Wtq8eSM1NtSTkEIAS4szMg3qge8+ffvSkKHDqbKyapeIFMpra2uTbd1K27ZtpbaWlgT110clpSU0YNAgGjhwMJWWlhUlEZZIWwEGFtr4j4oQaPRNg+zfLZs3UX19nSQxedM3WgiAtuL23r370OAhw9T37iCOIKS1NdtlmfXU0FCXEACYlstTlb17y74eQP369euWOClBBj7eGGviEY67yd2moOS8KPytz+mu0H35TiLP6Jf6+lravm2b7Ot6JQAYNGgI9e7Th8rKylmwsgtQ7wv53NTVVuvnR763kjI8zJmKXr2oT59+1K//APW+6S5PLZQTVHxe+kLCtLnd9bkoioWXu3P8IdCrkc/11s2bqaWlOXgWFYxQD/0waPAQNf86OtrVO2jbti3U1NhIAwYOosqqKurffyALqRgMBoPBYDBS8B8lANBaZGG+0xasyWNy5zTp1Iva1tYW2rJlEx1z7DTqDq+8/AJVVYGIl7pzWIhvl6S6saGBmpoaHMHEYtwuSqGV6yUJfL9+AxQZgsYJAoO1a1fR4Ucc0225C+a/TOPG71OwSEUe0LbmQQYMk7aEWtVBlouyoBHEd2Njg/o+/IijuyxvxYo3FWEeOLCs4JrV8DY3NyvBBRbf6APUDQKD8vIKtaguKytTC3BLgDs6OmnDhnV08CGHU3dY8vpCqqioUPklEQgeOvNKG6q0zdlcYClhyQYW/evWraUjjzq223JffOEZKXgIx7ew/VKQ0dBI1dV6zH1tI8ZbzTirhfQHw9bf/GPvc0IYlVaf0USuUhMUI/ixJM3OW+GNdZJXhVYVfildefDERM+/d0dIW6ucCyuWv0FTDz6cekkiumnjBlq/fi2tWrWcRowYpYRnZXJ+YA7u6cIAKzhEn+P5gRANc9paTFgNvi8w3LZtM+2770RFZrvCSy88S1VSoNWVAADPMeZvdfU29V6IhQDenFE/i82hyDslvNsiLVEzafA+6D9goBLo4VnE+wLkPZyKCSukgqnqlWnmfEtzo2rDoYcfSV1htZx7G+Qc7CWfp82bNqnnd5/9JtBQKVRFu+e/8qLqTzxnLKBiMBgMBoPBCPEfIwDAgrmpqVFp7vFNhmq7daMiR2bhTCENIgp1Wq0trbRREtPDDj+q23Ib6gs1yG2trVLjuZUOOfSIbu9/6aXnJLHbVxEgtKGutpZ6grq6OkUOfGARvXXrZqqp3q4tCCyh8NawWUmKQboGQgsrF+BtbS3U3tbWbXnQjpWWheQbi20IS9DnW7duUSa00NRDqFFWVqqEDagThCmrVr4pCUgfGjpshNRG9lH1wMK7rraGegJoj4ekaOoh8EAdcB15Ncuxb5aEAigtxSK+Ui3kq6p6S4FLpSRApYbo1FNPAELguyekAYIMaGH3kgKZQpeC7pGgOqnX1NyV/blm9QpJoED2cqputTXVSviSFABY7a89p7mbfgbcnDfprHDAs5ouEEaAOFZV9THCqp499loQtk32f29F/oGhw4arD56bhQtfpS2bN1Kfvv2VRla3q2vCpQmw/c50aY2Ccetq7HQ+GZe+q3GzLijFtMLW9Dx23SleXtIU35qgt7W1Kk0+NNIY21YjSEPfl1f0Uv2PZwfzGIIwzLWWpibjvtM16uV8V0LBLgAyvmHDWpo0aYqzxnkrgPa/+cYS5VbU0Fgvn9lmKTxsImuuD/iCLCsgM1y/6PMCaya827rDtq3baPGiBTTlwKlSiDqehktBlAXeFYMGD1VWSeVjKozAksFgMBgMBoNh8R8kANDkd7BcvMFku8vFvK+ZTbsuV51l5bFG7b+uuYpem/8K2RXosSdMo69+Y5a6lkYwYLgPwtwTgMCBJJeU5E3cgXiRfsN/z5LaqpVkl7vHnjCdPvLxi3QZorDcdkkgqrdtocO6sSDAYvuNZUskoag0ZeZNXWroa7KtMTMk+p8f3KhcHVQ7vT5Vwoq6WqVJgwXEYYcdqawK0jB8xEj1DdeGJa8vpv79+9Ow4SMdSbP43V2z6anH55Bt7wEHTaXPff4K3d68CBTnuA+Cns2bNkhhzXoaOWq0IpZVcgHfu09flQaCgSZJkCBUWb1qhRrrkaPGKEsE32f6tltupocfuF+1G2UcN226G1/RA3Jl+8KfM28VQBAhvNFChxpFBtvaSuL57neST46T59N+F0tPWgBQK8vDd6UUpnQH1AfzDMKhSfsfoM49KccWc+kASbwgDLIWGCtXvEkvPPe01Ar3p0yULTRS8I5hOVNSWqqEBbCIgBYX2lo/VoMte5sUSuH5cs+Ub4ohSAndINCokOQaAqQGIzQrbAypMuECA811aWloDYK5iPK2btlC9XU11CHnVmTr7FU+C/Pzfv3l+A1WWnCcg9AAGnAIDDdt2iifDe1yMm78XkpAZ4G2YI7BgqJVPucjR45WVjU+UVfz+C/3m+KE7OeD1fOrxyNfaBaSgBLYyHq8HfO4oaFB9TveOYcediS9Fbjs0zP0gcC8EPThj8+g4+Q7dPSYsTRp8v5KqGLx6oJ5tHrlSjr9Q2fSfhMm0ZzH/qnGOunexWAwGAwGg7Gn4z9IACC1YXIRPmTIUNodwELYYtGCV+iZJ+eqYywFx40dFyfUdt3BveAQeY9gfuOaK+nVV+eTtT845vjp9GVDMLGg79dvlSQEZbL+zZIEbHD3PS0J09NPzDV3SfIjc7ACAFuOD8QIAOHtDh3tHVLr1mTujxwvAMG757ezA6HIV785U5G2mCNGhihsoTVrVtHBBx+uiIjFGimweOqJOa5+Y2RfQdOGPIYMGaY+ixYuoOVvLqXhw0cFgoxnZFvvvusOp71et3qlEwCYFqsPBCbQLKOsUaPH0Hvfd1pqO0EM8QGpGjtuvDJvfvXVV1SQr5amZpdu4fx59OyTcxzfHC/TxiV2r81XggxPcPMHKchYs2qV065bRJYVWjNqy9kphZs5vwCShGUcXSjJC4C2Q8uclwKvRikA2Xe/ifR2Yd4rLyota2UP0mKOQLs/bPgIR2S/+JmLVb8cIwVon738CjpNki1g3Pi9NdHqxuc6MgHcGhsalQAHftvblOVJJw0dOoz6yDy0ZlwowUNfSbaHy/LzRYSByAv3L1r4Kk0/6WSlAU/T4Nty169fRzU126SQcVhACjEm69etob322keO2MiiVgC6vK3qOcO8hNAS8TfWyXshGDjq6GNTXVwACA3wkXIBZR3w5htLlWWNtXYCMI+fwbNnhSUF76Wu5zIuK1N8AwgTFsr3ltbMR+R5toTyIqHFqVGU0M2LcG737duXPvP5K/UlZS2RV9ZSbxXu+c2drhIw9Dj+hBPVeQhfLPkH8cf7Ge9ZzB8ICPCumjR5ihRurlMWAd3FTWAwGAwGg8HYk/AfZB8plP+3xd/+en+Pzct9nPqBM6mPXAD6mngEo8tG1v8Zgfji9FqpGC6sQ19rUovoZxWR1+nGjo0J5qTJByjzdETYx+L/wIMO8colryxJQiIvkJZH3C3C3QOIzjrlRForSbR1hjhNtu1b37/RKPeFq08co8AE3itCenEJBAHm7rBMOPqY453W/+7fzKaf33ITLVww37OtiPO68GMz6Jqvz6TRUiAwef8DlV/4ypXLpfazJW4vYbcB276wn213QvO9WWpK4aIx9ZDDHLmsk5rEvz14P70mSVDsRiFof6kFPfWDZ6hyIag46ujjFZFdsXyZyzob6Y9w/Uw7Du+eu39zhxJm+MID3RPxv7p24VU/G7/3YPlhBQAqDYQwkkB1trd7Zc6mtwr2mQBZ6+zGjNwCGnEQ3f2nHES2fhDooG/xLHzFCMBgvQEhAbStPYW18IDVB9DY2EjLlixW1iCjpLAEVgEgyX1kuj7dmIRXb9+uzN5xT3cYKVnkwoXzlYuLJep4dmCqDyJu69UVIOBrbW1TbhsQMiIWwpFHHuusKjCPX5Ok9G9/fUA9Z3YW7H+QnMcfMPNYklK8J+a98gItf2MZHXa4tvjBHM5FSuGtkJSn9EST7dF8ekQ+T3+Qc9meF0XLine truncated