- 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>
13 KiB
templates_v2 스키마 초안 (C.2-a)
C.1 감사에서 드러난 갭 3가지를 해소하기 위한 스키마 확장 초안.
_COMPAT커버리지 26% → 필드 기반 자동 파생으로 100%structure_intent어휘 얕음 (10개, 6 고아) → controlled vocab 확장alternative_patterns필드 부재 → 명시적 대안 관계 추가
1. 새 필드: content_affinity (12개 enum)
역할: layout 이 선호하는 콘텐츠 성격 — V3 의 의미 구분 핵심 신호.
| # | 값 | 의미 | 예시 MDX / Figma |
|---|---|---|---|
| 1 | concept_definition |
용어/개념 정의 | "BIM이란", "DX란" · Frame 18 |
| 2 | concept_comparison |
2+ 개념의 차이점 비교 | "BIM vs DX" · Frame 18 |
| 3 | goal_axes |
목표의 핵심 축 나열 (N개) | "DX의 궁극적 목표" · Frame 12 |
| 4 | persona_benefit |
주체별 혜택/역할 | "발주자/설계자/시공자 기대효과" · Frame 14 |
| 5 | process_steps |
순서 있는 단계 (1→2→3) | "1단계 계획 → 2단계 설계" |
| 6 | before_after_change |
전/후 상태 전환 | "AS-IS → TO-BE" · Frame 29 |
| 7 | capability_requirements |
요구 역량/조건 나열 | "필수조건", "S/W 필요" · Frame 13, 20 |
| 8 | comparative_matrix |
N개 × M축 비교표 | 관점별 대비표 · Frame 18 (rows 형식) |
| 9 | stakeholder_roles |
이해당사자별 역할 | "정부/민간/학계" |
| 10 | policy_requirements |
정책/제도 틀 | "정부주도 BIM 도입" · Frame 27 |
| 11 | tool_ecosystem |
도구/SW 생태계 | "Revit, Navisworks 등" |
| 12 | interrelation |
N개 요소의 상호관계 (순환/벤다이어그램) | "용어간 상호관계" · Frame 1, 12 |
복수 태깅 허용: Frame 18 = [concept_comparison, comparative_matrix] 처럼 primary + secondary.
1-1. 경계 정의 (경계가 붙는 값들)
stakeholder_rolesvspersona_benefitstakeholder_roles= 주체별 역할/책임/관계 (누가 무엇을 하는가 — 정부 주도 / 민간 수행 / 학계 연구)persona_benefit= 주체별 기대효과/혜택 (발주자가 얻는 것 / 설계자가 얻는 것)- 같은 주체 나열이라도 "역할 정의" 면 roles, "얻는 효과" 면 benefit
policy_requirementsvscapability_requirementspolicy_requirements= 정책/제도/거버넌스 틀 (정부 BIM 도입 정책, 법적 프레임)capability_requirements= 기술/도구/역량 요건 (S/W 필수, 인력 필요)- 이름이 좁게 읽힐 수 있으나
requirements_constraints같은 넓은 이름은capability_requirements와 겹칠 위험이 있어 분리 유지
2. 확장: structure_intent (10 → 9 통제 어휘)
역할: layout 이 시각적으로 전달하려는 의도 — content_affinity 와 직교 축.
기존 10개는 자유 서술이라 고아 다수. 9개 통제 어휘 로 압축 + 확장.
| 값 | 의미 | 기존 매핑 |
|---|---|---|
binary_compare |
2개 항목 대비 | concept_comparison 일부 |
multi_parallel |
N개 항목 병렬 나열 | requirement_list, requirement_or_pillar |
hierarchy |
상위-하위 관계 | (신규) |
sequence |
순서 있는 흐름 | transformation_story 일부 |
state_transition |
전/후 상태 전환 (AS-IS ↔ TO-BE, Process 혁신) | (신규 — 사용자 피드백 반영) |
cycle_interrelation |
순환 / 상호관계 | (신규 — 고아였던 곳 흡수) |
matrix_coverage |
다차원 커버리지 | multi_attribute_comparison, category_comparison |
persona_mapping |
주체별 매핑 | persona_benefit, industry_comparison |
singleton_emphasis |
단일 강조 | problem_diagnosis 일부 |
state_transition 별도 축 필요성: content_affinity 의 before_after_change 는 "콘텐츠가 전/후 변화를 다룬다" 는 의미. state_transition 은 "레이아웃이 그 변화를 시각적으로 대비 표현 한다" 는 의도. 둘은 직교 — before_after_change 콘텐츠를 multi_parallel 레이아웃에 담을 수도, state_transition 레이아웃에 담을 수도 있음.
3. 신규 필드: alternative_patterns
역할: 이 layout 이 담지 못하는 경우 의미적 대안 layout 을 명시. _COMPAT 의 빈 공간을 메움.
alternative_patterns:
- pattern: cycle-3way
reason: "3개 요소를 순환/상호관계로 표현할 때"
confidence: 0.8
- pattern: circular-nodes
reason: "N개 요소를 radial 로 배치"
confidence: 0.6
출처 혼합 전략 (사용자 지시대로):
- (a) 기존
_COMPAT중 confidence ≥ 0.7 인 관계 흡수 - (b) V3 실패 케이스에서 드러난 관계 수동 추가 (
cycle-3way↔3col-parallel등) - (c) 최종적으로
family + layout + content_affinity + structure_intent유사도로 자동 파생 가능하게 설계
4. 자동 layout 호환도 파생 공식
수작업 _COMPAT 대신:
layout_compat_v2(a, b) =
0.25 × family_match(a.family, b.family) # exact match = 1, else 0
+ 0.20 × axis_match(a.axis, b.axis)
+ 0.20 × relation_type_match(a.relation_type, b.relation_type)
+ 0.15 × cardinality_overlap(a.cardinality, b.cardinality)
+ 0.20 × jaccard(a.alternative_patterns, b.layout) # 명시된 대안에 있으면 +
→ 330 쌍 전부 자동 계산 가능. _COMPAT 수작업 테이블 폐기.
V3 매칭 공식 (2차 신호 반영):
v3_score = 0.40 × layout_compat_v2
+ 0.35 × jaccard(mdx.content_affinity, frame.content_affinity)
+ 0.25 × jaccard(mdx.structure_intent, frame.structure_intent)
5. 완성된 templates_v2 엔트리 예시 (5개 우선 검토 대상)
Frame 18 (1171281195) — BIM과 DX의 이해
visual_pattern:
family: table
layout: compare-rows
axis: vertical
relation_type: compare
cardinality: { ideal: 2, min: 2, max: 2 }
content_affinity:
- concept_comparison # primary
- comparative_matrix # rows 로 다축 비교
structure_intent:
- binary_compare # primary
- matrix_coverage # secondary
alternative_patterns:
- { pattern: table-2col, reason: "같은 2개 비교를 컬럼 방식으로", confidence: 0.9 }
- { pattern: compare-2col, reason: "2열 병렬 비교", confidence: 0.8 }
Frame 12 (cycle-3way) — 건설산업의 목표 (BIM의 목적) ⚠ V3 실패 핵심
visual_pattern:
family: diagram
layout: cycle-3way
axis: radial
relation_type: parallel
cardinality: { ideal: 3, min: 3, max: 3 }
content_affinity:
- goal_axes # primary — 건설산업 3대 목표
- interrelation # secondary — 3요소 순환 구조
structure_intent:
- cycle_interrelation # primary
- multi_parallel # secondary — 3개 병렬로도 볼 수 있음
alternative_patterns:
- { pattern: 3col-parallel, reason: "3개 목표를 평면 나열로", confidence: 0.7 }
- { pattern: circular-nodes, reason: "radial 배치 대안", confidence: 0.6 }
Frame 20 (3col-cards) — 디지털 전환(DX)은 S/W가 필수다
visual_pattern:
family: card
layout: 3col-cards
axis: horizontal
relation_type: parallel
cardinality: { ideal: 3, min: 3, max: 3 }
content_affinity:
- capability_requirements # primary — S/W 등 필수 역량
- tool_ecosystem # secondary (도구 언급)
structure_intent:
- multi_parallel # primary
alternative_patterns:
- { pattern: 3col-parallel, reason: "카드 없이 텍스트만", confidence: 0.8 }
- { pattern: cards-4, reason: "4개로 확장", confidence: 0.5 }
중요: Frame 12 와 Frame 20 은 둘 다 3col-parallel 과 관계가 있으나 — Frame 12 = goal_axes, Frame 20 = capability_requirements. content_affinity 가 다름 → V3 v2 가 MDX "DX 의 궁극적 목표"(goal_axes) 를 받으면 Frame 12 를 우선할 수 있음.
Frame 29 (compare-2banner-top-2col-bottom) — 과정(Process)의 혁신
visual_pattern:
family: diagram
layout: compare-2banner-top-2col-bottom
axis: vertical
relation_type: compare
cardinality: { ideal: 2, min: 2, max: 2 }
content_affinity:
- before_after_change # primary — Process 혁신 (전/후)
- concept_comparison # secondary
structure_intent:
- state_transition # primary — AS-IS → TO-BE 대비 (사용자 피드백 반영)
- binary_compare # secondary
alternative_patterns:
- { pattern: compare-2col, reason: "단순 2열 비교로", confidence: 0.8 }
- { pattern: 2col-paired, reason: "짝지은 2열", confidence: 0.7 }
Frame 3 (list-numbered) — 국외
visual_pattern:
family: list
layout: list-numbered
axis: vertical
relation_type: sequence
cardinality: { ideal: 4, min: 3, max: 8 }
content_affinity:
- policy_requirements # primary — 국외 정책 사례
- stakeholder_roles # secondary
structure_intent:
- sequence # primary
- multi_parallel # secondary
alternative_patterns:
- { pattern: list-stacked, reason: "번호 없는 리스트로", confidence: 0.9 }
- { pattern: bullet-cards, reason: "항목을 카드로", confidence: 0.6 }
Frame 11 (3-category) — 시공단계 BIM 모델과 정보 활용 구분
visual_pattern:
family: card
layout: 3-category
axis: horizontal
relation_type: parallel
cardinality: { ideal: 3, min: 3, max: 3 }
content_affinity:
- concept_definition # primary — 3가지 개념 구분
- concept_comparison # secondary
structure_intent:
- multi_parallel # primary
- matrix_coverage # secondary
alternative_patterns:
- { pattern: 3col-parallel, reason: "카테고리 없이 병렬", confidence: 0.8 }
- { pattern: persona-3col, reason: "주체별 매핑으로", confidence: 0.5 }
6. V3 실패 케이스가 어떻게 해결되는가 (02-1 시뮬레이션)
MDX 02-1 "1. DX의 궁극적 목표" (가상 라벨)
mdx_layout: 3col-parallel
content_affinity: [goal_axes] # 3대 목표
structure_intent: [multi_parallel]
현재 V3 (_COMPAT 기반)
- Frame 20
3col-cardscompat 0.9 → 1위 - Frame 12
cycle-3waycompat 0.15 fallback → 낮은 순위
V3 v2 (새 스키마)
Frame 12 점수:
layout_compat_v2:
family_match(3col-parallel, cycle-3way) → diagram vs diagram* → 0
axis_match(?, radial) → 0
relation_type_match(parallel, parallel) → 1 * 0.20 = 0.20
cardinality_overlap(3, 3) → 1 * 0.15 = 0.15
jaccard(alt_patterns, 3col-parallel): Frame 12 has 3col-parallel as alt (conf 0.7) → 0.20 * 0.7 = 0.14
total ≈ 0.49
content_affinity: jaccard([goal_axes], [goal_axes, interrelation]) = 1/2 = 0.5
structure_intent: jaccard([multi_parallel], [cycle_interrelation, multi_parallel]) = 1/2 = 0.5
v3_score = 0.40 × 0.49 + 0.35 × 0.5 + 0.25 × 0.5 = 0.196 + 0.175 + 0.125 = 0.496
Frame 20 점수:
layout_compat_v2:
family_match(3col-parallel, 3col-cards) → ?/card → 0
relation_type_match(parallel, parallel) → 1 * 0.20 = 0.20
cardinality_overlap(3, 3) → 1 * 0.15 = 0.15
alt_patterns match (Frame 20 has 3col-parallel as alt conf 0.8): 0.20 * 0.8 = 0.16
total ≈ 0.51
content_affinity: jaccard([goal_axes], [capability_requirements, tool_ecosystem]) = 0/3 = 0
structure_intent: jaccard([multi_parallel], [multi_parallel]) = 1
v3_score = 0.40 × 0.51 + 0.35 × 0 + 0.25 × 1 = 0.204 + 0 + 0.25 = 0.454
결과: Frame 12 (0.496) > Frame 20 (0.454) → V3 v2 가 올바른 1위 선택.
핵심: content_affinity jaccard 에서 Frame 12 (goal_axes 공유) 가 Frame 20 (공유 없음) 을 앞섬.
7. C.2-b 실행 계획 (AI 초안 생성 + 사용자 검토)
단계
- AI 배치 스크립트 (
pipeline_12_generate_templates_v2.py) — 32 프레임에 새 필드 생성- 입력: 기존 analysis.md + structure_ontology.yaml
- 출력:
structure_ontology_v2.yaml(draft) + 프레임별 신뢰도
- 사용자 검토 우선순위 (사용자 지정):
- 1순위: Frame 12, 20, 29, 3, 11 (Holdout 실패 핵심)
- 2순위: 3col / cycle / table / process 계열
- 3순위: 나머지 일괄
- 승인된
structure_ontology_v2.yaml고정 → V3 매칭 로직 v2 재구현
8. 변경 이력
- v2-draft-01 (초안): content_affinity 12개, structure_intent 8개, 가중치 0.40/0.35/0.25
- v2-draft-02 (사용자 피드백 반영, 현재):
- content_affinity 12개 유지 —
stakeholder_roles↔persona_benefit/policy_requirements↔capability_requirements경계 정의 §1-1 추가 - structure_intent 9개 로 확장 —
state_transition추가 (AS-IS ↔ TO-BE 용 별도 축) - 가중치 0.40/0.35/0.25 유지. 추후 0.35/0.40/0.25 실험 여지 (content_affinity 비중 상향)
- Frame 29 예시 업데이트 —
state_transitionprimary
- content_affinity 12개 유지 —
9. 남은 결정 / C.2-b 로 진행 조건
C.2-b (AI 배치 라벨링) 진입 조건 모두 충족:
- content_affinity enum 확정 (12개)
- structure_intent enum 확정 (9개)
- alternative_patterns 스키마 확정 (혼합 전략)
- V3 매칭 공식 초기 가중치 확정 (0.40/0.35/0.25)
- 우선 검토 프레임 5개 확정 (12, 20, 29, 3, 11)
→ C.2-b (32 프레임 AI 일괄 라벨링 초안 생성) 진행 가능.