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:
2026-07-02 17:03:42 +09:00
co-authored by Claude Opus 4.8
parent 97b7833a1b
commit b836e79ee1
527 changed files with 673036 additions and 717 deletions
+459
View File
@@ -0,0 +1,459 @@
<!DOCTYPE html>
<html lang="ko">
<head><meta charset="utf-8"><title>templates_v1 감사</title><style>
body { font-family: -apple-system, "Segoe UI", Pretendard, sans-serif; max-width: 1300px; margin: 2em auto; padding: 0 1.5em 4em; line-height: 1.65; color: #222; background: #f8fafc; }
h1 { border-bottom: 3px solid #2563eb; padding-bottom: 0.25em; }
h2 { margin-top: 2.5em; background: #e0e7ff; padding: 0.6em 0.9em; border-left: 4px solid #0a6; border-radius: 4px; }
h3 { margin-top: 1.5em; color: #1a365d; }
table { border-collapse: collapse; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,0.05); margin: 0.5em 0 1em; }
th, td { border: 1px solid #e2e8f0; padding: 8px 10px; text-align: left; vertical-align: top; }
th { background: #1e293b; color: #fff; font-weight: 700; text-align: center; }
code { background: #f4f4f4; padding: 1px 6px; border-radius: 3px; font-size: 0.9em; color: #111; }
strong { color: #0a6; }
</style></head>
<body>
<h1>templates_v1 + _COMPAT 구조 기준 갭 감사</h1>
<p><em>V3 의 "대안 탐색" 역할이 현재 세팅에서 왜 약한지 수치/사례로 규명. C.2 taxonomy v2 설계의 근거 자료.</em></p>
<h2>1. _COMPAT 커버리지 — V3 구분력의 근본 한계</h2>
<ul>
<li>전체 가능 쌍: <strong>11 MDX layouts × 30 Figma layouts = 330 쌍</strong></li>
<li>_COMPAT 에 실제 정의된 쌍: <strong>86 / 330 (26.1%)</strong></li>
<li>정의 안 된 쌍 (fallback 0.15): <strong>244 쌍 (73.9%)</strong></li>
</ul>
<h3>MDX layout 별 커버리지</h3>
<table>
<thead>
<tr>
<th>MDX layout</th>
<th style="text-align: right;">_COMPAT 정의 쌍</th>
<th style="text-align: right;">커버 Figma 유형</th>
<th style="text-align: right;">총 유형</th>
<th style="text-align: right;">커버리지</th>
<th style="text-align: right;">fallback 유형 수</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>3col-parallel</code> <strong>[섹션 03-1, 01-1, 02-1]</strong></td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">9</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">30.0%</td>
<td style="text-align: right;">21</td>
</tr>
<tr>
<td><code>cards-4</code></td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">5</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">16.7%</td>
<td style="text-align: right;">25</td>
</tr>
<tr>
<td><code>compare-2banner</code> <strong>[섹션 03-2]</strong></td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">10</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">33.3%</td>
<td style="text-align: right;">20</td>
</tr>
<tr>
<td><code>compare-2col</code></td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">10</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">33.3%</td>
<td style="text-align: right;">20</td>
</tr>
<tr>
<td><code>compare-rows</code> <strong>[섹션 01-2]</strong></td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">6</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">20.0%</td>
<td style="text-align: right;">24</td>
</tr>
<tr>
<td><code>multi-parallel</code></td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">6</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">20.0%</td>
<td style="text-align: right;">24</td>
</tr>
<tr>
<td><code>multi-section</code></td>
<td style="text-align: right;">6</td>
<td style="text-align: right;">5</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">16.7%</td>
<td style="text-align: right;">25</td>
</tr>
<tr>
<td><code>persona-3col</code> <strong>[섹션 02-2.2]</strong></td>
<td style="text-align: right;">10</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">23.3%</td>
<td style="text-align: right;">23</td>
</tr>
<tr>
<td><code>single-column</code> <strong>[섹션 02-2.1]</strong></td>
<td style="text-align: right;">17</td>
<td style="text-align: right;">14</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">46.7%</td>
<td style="text-align: right;">16</td>
</tr>
<tr>
<td><code>table-2col</code></td>
<td style="text-align: right;">9</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">23.3%</td>
<td style="text-align: right;">23</td>
</tr>
<tr>
<td><code>table-3col</code></td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;">23.3%</td>
<td style="text-align: right;">23</td>
</tr>
</tbody>
</table>
<h2>2. MDX layout 별 "대안 탐색" 풍부도</h2>
<p>각 MDX layout 에 대해 _COMPAT 에서 compat ≥ 0.7 인 Figma layout 이 몇 개 있나.
값이 작으면 그 MDX 구조에 "대안이 없음" — V3 가 대안을 제시할 재료가 부족한 상태.</p>
<table>
<thead>
<tr>
<th>MDX layout</th>
<th style="text-align: right;">고호환 (≥0.7)</th>
<th style="text-align: right;">중 (0.4~0.7)</th>
<th style="text-align: right;">저 (&lt;0.4)</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>3col-parallel</code></td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">1</td>
</tr>
<tr>
<td><code>cards-4</code></td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td><code>compare-2banner</code></td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;">3</td>
</tr>
<tr>
<td><code>compare-2col</code></td>
<td style="text-align: right;">6</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">3</td>
</tr>
<tr>
<td><code>compare-rows</code></td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td><code>multi-parallel</code></td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td><code>multi-section</code></td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td><code>persona-3col</code></td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">2</td>
</tr>
<tr>
<td><code>single-column</code></td>
<td style="text-align: right;">5</td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td><code>table-2col</code></td>
<td style="text-align: right;">5</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">1</td>
</tr>
<tr>
<td><code>table-3col</code></td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">0</td>
</tr>
</tbody>
</table>
<h2>3. structure_intent 분포</h2>
<ul>
<li>고유 intent 수: <strong>10</strong></li>
<li>전체 태그 수: 17</li>
<li>1 프레임만 쓰는 고아 intent: 6 — 많음 (구조 재사용 약함)</li>
</ul>
<table>
<thead>
<tr>
<th>intent</th>
<th style="text-align: right;">빈도</th>
<th>프레임</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>multi_attribute_comparison</code></td>
<td style="text-align: right;">5</td>
<td>18, 23, 24, 30, 31</td>
</tr>
<tr>
<td><code>concept_comparison</code></td>
<td style="text-align: right;">2</td>
<td>18, 23</td>
</tr>
<tr>
<td><code>problem_diagnosis</code></td>
<td style="text-align: right;">2</td>
<td>28, 17</td>
</tr>
<tr>
<td><code>industry_comparison</code></td>
<td style="text-align: right;">2</td>
<td>30, 31</td>
</tr>
<tr>
<td><code>requirement_list</code></td>
<td style="text-align: right;">1</td>
<td>13</td>
</tr>
<tr>
<td><code>persona_benefit</code></td>
<td style="text-align: right;">1</td>
<td>14</td>
</tr>
<tr>
<td><code>process_product_split</code></td>
<td style="text-align: right;">1</td>
<td>29</td>
</tr>
<tr>
<td><code>transformation_story</code></td>
<td style="text-align: right;">1</td>
<td>29</td>
</tr>
<tr>
<td><code>category_comparison</code></td>
<td style="text-align: right;">1</td>
<td>24</td>
</tr>
<tr>
<td><code>requirement_or_pillar</code></td>
<td style="text-align: right;">1</td>
<td>20</td>
</tr>
</tbody>
</table>
<p><strong>판정</strong>: 10개 intent, 32 프레임 — controlled vocabulary 느낌은 있으나 어휘 자체가 풍부하지 않음. 새 MDX 유형이 오면 기존 intent 에 억지로 매핑해야 할 가능성.</p>
<h2>4. slot 체계</h2>
<ul>
<li>고유 slot id: <strong>146</strong></li>
<li>프레임당 slot 수: 평균 6.3 · 최소 2 / 최대 10</li>
</ul>
<h3>가장 자주 쓰이는 slot id (Top 10)</h3>
<table>
<thead>
<tr>
<th>slot id</th>
<th style="text-align: right;">프레임 수</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>title</code></td>
<td style="text-align: right;">30</td>
</tr>
<tr>
<td><code>col_a_label</code></td>
<td style="text-align: right;">6</td>
</tr>
<tr>
<td><code>col_b_label</code></td>
<td style="text-align: right;">6</td>
</tr>
<tr>
<td><code>rows</code></td>
<td style="text-align: right;">5</td>
</tr>
<tr>
<td><code>col_c_label</code></td>
<td style="text-align: right;">3</td>
</tr>
<tr>
<td><code>pillar_1_label</code></td>
<td style="text-align: right;">2</td>
</tr>
<tr>
<td><code>pillar_2_label</code></td>
<td style="text-align: right;">2</td>
</tr>
<tr>
<td><code>pillar_3_label</code></td>
<td style="text-align: right;">2</td>
</tr>
<tr>
<td><code>category_1_label</code></td>
<td style="text-align: right;">2</td>
</tr>
<tr>
<td><code>category_2_label</code></td>
<td style="text-align: right;">2</td>
</tr>
</tbody>
</table>
<h2>5. V3 실패 사례 분해 (Holdout 평가 기준)</h2>
<p>V3 가 비합리/애매 판정 받은 섹션: 3 건.</p>
<h3>01-1 — 1. 용어 정의</h3>
<ul>
<li>MDX layout (코드 추출): <code>3col-parallel</code></li>
<li>V3 판정: <strong>ambiguous</strong> (30점)</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>V3 가 올린 Top-1</th>
<th>V1 이 잡은 1위</th>
</tr>
</thead>
<tbody>
<tr>
<td>Frame</td>
<td>20</td>
<td>1</td>
</tr>
<tr>
<td>fig_layout</td>
<td><code>3col-cards</code></td>
<td><code>circular-nodes</code></td>
</tr>
<tr>
<td>structure_compat</td>
<td><strong>0.9</strong></td>
<td><strong>0.15</strong></td>
</tr>
<tr>
<td>structure_intent</td>
<td>['requirement_or_pillar']</td>
<td>[]</td>
</tr>
</tbody>
</table>
<p><strong>진단</strong>: V3 가 올린 Frame 20 의 구조 호환도가 V1 의 합리적 1위 Frame 1 과 같거나 높음. 즉 _COMPAT 만으로는 <strong>의미적으로 더 맞는 프레임을 골라낼 근거 부족</strong>. structure_intent 나 content_affinity 같은 <strong>2차 신호</strong> 가 없어서 동일 layout family 안에서 분별이 안 됨.</p>
<h3>02-1 — 1. DX의 궁극적 목표</h3>
<ul>
<li>MDX layout (코드 추출): <code>3col-parallel</code></li>
<li>V3 판정: <strong>irrational</strong> (0점)</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>V3 가 올린 Top-1</th>
<th>V1 이 잡은 1위</th>
</tr>
</thead>
<tbody>
<tr>
<td>Frame</td>
<td>20</td>
<td>12</td>
</tr>
<tr>
<td>fig_layout</td>
<td><code>3col-cards</code></td>
<td><code>cycle-3way</code></td>
</tr>
<tr>
<td>structure_compat</td>
<td><strong>0.9</strong></td>
<td><strong>0.15</strong></td>
</tr>
<tr>
<td>structure_intent</td>
<td>['requirement_or_pillar']</td>
<td>[]</td>
</tr>
</tbody>
</table>
<p><strong>진단</strong>: V3 가 올린 Frame 20 의 구조 호환도가 V1 의 합리적 1위 Frame 12 과 같거나 높음. 즉 _COMPAT 만으로는 <strong>의미적으로 더 맞는 프레임을 골라낼 근거 부족</strong>. structure_intent 나 content_affinity 같은 <strong>2차 신호</strong> 가 없어서 동일 layout family 안에서 분별이 안 됨.</p>
<h3>02-2.1 — 2.1 업무 수행 과정(Process)의 변화</h3>
<ul>
<li>MDX layout (코드 추출): <code>single-column</code></li>
<li>V3 판정: <strong>irrational</strong> (0점)</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>V3 가 올린 Top-1</th>
<th>V1 이 잡은 1위</th>
</tr>
</thead>
<tbody>
<tr>
<td>Frame</td>
<td>3</td>
<td>11</td>
</tr>
<tr>
<td>fig_layout</td>
<td><code>list-numbered</code></td>
<td><code>3-category</code></td>
</tr>
<tr>
<td>structure_compat</td>
<td><strong>0.85</strong></td>
<td><strong>0.15</strong></td>
</tr>
<tr>
<td>structure_intent</td>
<td>[]</td>
<td>[]</td>
</tr>
</tbody>
</table>
<p><strong>진단</strong>: V3 가 올린 Frame 3 의 구조 호환도가 V1 의 합리적 1위 Frame 11 과 같거나 높음. 즉 _COMPAT 만으로는 <strong>의미적으로 더 맞는 프레임을 골라낼 근거 부족</strong>. structure_intent 나 content_affinity 같은 <strong>2차 신호</strong> 가 없어서 동일 layout family 안에서 분별이 안 됨.</p>
<h2>6. 결론 + taxonomy v2 설계 방향</h2>
<h3>주요 갭 3가지</h3>
<ol>
<li><strong>_COMPAT 커버리지 26.1% — 2/3 쌍이 fallback 0.15</strong>. V3 의 "구분력" 자체가 약함. 수동 테이블이 아니라 <strong>자동 계산 가능한 관계 그래프</strong> 필요.</li>
<li><strong>structure_intent 10개 — 어휘 얕음</strong>. 같은 layout family 안에서 프레임 간 의미 구분 불가. <strong>더 세분화된 의도 taxonomy + controlled vocabulary</strong> 필요.</li>
<li><strong>"대안 레이아웃" 필드 없음</strong>. 현재 스키마는 "이 layout 은 무엇인가" 만 기술. "이 layout 이 못 담는 콘텐츠 유형 / 대체 가능한 layout" 을 추가해야 V3 가 대안 탐색을 할 수 있음.</li>
</ol>
<h3>v2 taxonomy 에 추가할 필드 (제안)</h3>
<ul>
<li><code>content_affinity</code>: 이 layout 이 선호하는 콘텐츠 성격 enum (concept_definition / quantitative_compare / persona_benefit / process_steps / policy_requirements / ...)</li>
<li><code>slot_semantic_role</code>: 각 slot 이 담는 의미적 역할 (주체/시점/원인/결과/예시/...)</li>
<li><code>alternative_patterns</code>: 이 layout 의 대안 layout 목록 + 대체 조건</li>
<li><code>structure_intent</code> controlled vocab 정의 (현재 free-form → enum)</li>
<li>layout 관계 그래프 (수동 _COMPAT → 필드 기반 자동 계산)</li>
</ul>
</body></html>