Files
C.E.L_Slide_test2/tests/matching/ATTACH_04_STRUCTURE_VOCAB.html
T
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

79 lines
11 KiB
HTML
Raw 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.
<!DOCTYPE html>
<html lang="ko"><head><meta charset="utf-8"><title>첨부 4 — 구조 매칭 키워드</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>첨부 4 — 구조 매칭 키워드 (controlled vocabulary)</h1><div class="meta-bar">V3 구조 매칭이 단순 layout 일치가 아니라 <strong>의미 + 시각 의도</strong>로 프레임을 구분하도록 하는 어휘 정의. 이 vocab 이 없으면 "3열 병렬" 같은 같은 layout 안에서 다른 콘텐츠의 프레임이 뒤섞여 구분 불가.</div><h2>content_affinity — 12종 (의미 축, 콘텐츠 성격)</h2><table><thead><tr><th style="width:22%"></th><th style="width:32%">의미</th><th>예시 (MDX 또는 Frame)</th></tr></thead><tbody><tr><td><code>concept_definition</code></td><td>용어/개념의 정의</td><td>"BIM이란", "DX란" · Frame 11 (BIM 활용 3분류 정의)</td></tr><tr><td><code>concept_comparison</code></td><td>2+ 개념의 차이점 비교</td><td>"BIM vs DX" · Frame 18</td></tr><tr><td><code>goal_axes</code></td><td>목표의 핵심 축 나열 (N개)</td><td>"DX의 궁극적 목표 3축" · Frame 12 (안전/품질/생산성)</td></tr><tr><td><code>persona_benefit</code></td><td>주체별 혜택/기대효과</td><td>"발주자/설계자/시공자 기대효과" · Frame 14</td></tr><tr><td><code>process_steps</code></td><td>순서 있는 단계 (1→2→3)</td><td>"1단계 계획 → 2단계 설계"</td></tr><tr><td><code>before_after_change</code></td><td>전/후 상태 전환</td><td>"AS-IS → TO-BE" · Frame 29</td></tr><tr><td><code>capability_requirements</code></td><td>요구 역량/조건/도구</td><td>"필수조건", "S/W 필수" · Frame 13, 20</td></tr><tr><td><code>comparative_matrix</code></td><td>N개 × M축 비교표</td><td>"관점별 다축 대비" · Frame 18, 23</td></tr><tr><td><code>stakeholder_roles</code></td><td>주체별 역할/책임/관계</td><td>"정부 주도 / 민간 수행"</td></tr><tr><td><code>policy_requirements</code></td><td>정책/제도/거버넌스 틀</td><td>"정부주도 BIM 도입" · Frame 27</td></tr><tr><td><code>tool_ecosystem</code></td><td>도구/SW 생태계</td><td>"Revit, Navisworks 등"</td></tr><tr><td><code>interrelation</code></td><td>N개 요소의 상호관계/순환</td><td>"용어간 상호관계" · Frame 12 cycle-3way</td></tr></tbody></table><h2>structure_intent — 9종 (시각 의도, 레이아웃이 전달하는 방식)</h2><table><thead><tr><th style="width:22%"></th><th style="width:32%">의미</th><th>대표 layout</th></tr></thead><tbody><tr><td><code>binary_compare</code></td><td>2개 항목 대비</td><td><code>compare-2col, table-2col, cards-3-compare</code></td></tr><tr><td><code>multi_parallel</code></td><td>N개 항목 병렬 나열</td><td><code>3col-parallel, cards-3-header, cards-4-grid</code></td></tr><tr><td><code>hierarchy</code></td><td>상위-하위 관계 (계층)</td><td><code>central-5-goals, radial-diagram-5</code></td></tr><tr><td><code>sequence</code></td><td>순서 있는 흐름</td><td><code>list-numbered, split-panel-numbered</code></td></tr><tr><td><code>state_transition</code></td><td>전/후 상태 전환 대비</td><td><code>compare-2banner-top-2col-bottom</code></td></tr><tr><td><code>cycle_interrelation</code></td><td>순환/상호관계</td><td><code>cycle-3way, circular-nodes</code></td></tr><tr><td><code>matrix_coverage</code></td><td>다차원 커버리지</td><td><code>compare-rows, table-3col, paired-rows-2x2</code></td></tr><tr><td><code>persona_mapping</code></td><td>주체별 매핑</td><td><code>persona-3col, 2col-paired</code></td></tr><tr><td><code>singleton_emphasis</code></td><td>단일 강조</td><td><code>diagram-labels, side-card</code></td></tr></tbody></table><h2>alternative_patterns — 대안 레이아웃 관계</h2><p style="font-size:9pt">각 프레임이 "이 내용을 못 담을 때 어떤 다른 layout 이 대체 가능한가" 를 명시. 기존 방식은 수작업 호환도 테이블(<code>_COMPAT</code>, 커버리지 26%)이었고, 새 스키마는 프레임별 <code>alternative_patterns</code> 필드로 파생.</p><table><thead><tr><th style="width:25%">예시 프레임</th><th style="width:25%">기본 layout</th><th>대안 패턴</th></tr></thead><tbody><tr><td>Frame 12 · 건설산업 목표</td><td><code>cycle-3way</code></td><td><code>3col-parallel</code> (0.7, 수동 시드 — 순환 대신 평면 병렬), <code>circular-nodes</code> (0.6, 수동 시드 — radial 대안)</td></tr><tr><td>Frame 18 · BIM vs DX</td><td><code>compare-rows</code></td><td><code>table-2col</code>, <code>compare-2col</code>, <code>2col-paired</code> (파생 — 2-way 비교 계열)</td></tr><tr><td>Frame 29 · Process 혁신</td><td><code>compare-2banner-top-2col-bottom</code></td><td><code>compare-2col</code>, <code>table-2col</code>, <code>2col-paired</code> (파생)</td></tr></tbody></table><h2>왜 이 vocab 이 필요한가 — 원인/효과</h2><table><thead><tr><th style="width:40%">이 축이 없으면 발생하는 문제</th><th>이 축이 해결하는 것</th></tr></thead><tbody><tr><td>"3열 병렬" 프레임끼리 구분 불가 — Frame 12 (목표 3축) 와 Frame 20 (S/W 필수 3관점) 둘 다 3열인데 의미 다름</td><td><code>content_affinity</code><code>goal_axes</code> vs <code>capability_requirements</code> 로 구분</td></tr><tr><td>"compare-rows" 와 "table-2col" 이 다른 layout 처럼 보이지만 실제론 같은 2-way 비교</td><td><code>alternative_patterns</code> 에 명시 — 자동 대체 가능</td></tr><tr><td>"혁신", "전환" 같은 단어가 과매칭 — 거의 모든 MDX 에 <code>state_transition</code> 붙음</td><td>STRONG 패턴(AS-IS/TO-BE/이중 변환) 없이는 인정 안 함 — validator 강화</td></tr></tbody></table></body></html>