Files
C.E.L_Slide_test2/IMPROVEMENT-REDESIGN.md
kyeongmin 85c680f02a docs + V4 catalog + samples + Phase Q legacy 보존
전체 26 files (20 추가 + 6 수정), 10507 insertions.

Phase Z 문서 :
- docs/architecture/PHASE-Z-CHANGE-LOG.md (신설) — axis-by-axis 의사결정 history
  (newest-on-top). Step 7-A 부터 6 entry 박힘 + 2026-05-08 / 2026-05-08 #2
  (compat 매트릭스 폐기 / 6-B 폐기 / F14 표현 정정 / label gate policy 분리).
- docs/architecture/PHASE-Z-PIPELINE-OVERVIEW.md (수정) — Step 5/6/9 Gap note
  append (구조 무변, append-only). 6-B 폐기 사실 + Refinement F.
- docs/architecture/PHASE-Z-PIPELINE-STATUS-BOARD.md (수정) — snapshot date
  2026-05-08 갱신. §3 핵심 missing item 5 (Step 5/6/9 boundary axis breakdown
  + 폐기 기록). §6 한 줄 갱신 — 다음 axis 후보 A~F.

Project root docs :
- PLAN.md / PROGRESS.md / README.md (수정) — 토큰 체계 / 폴더 구조 / 설계 문서 /
  역할 분리 반영.
- IMPROVEMENT-REDESIGN.md (신설) — Phase Z 설계 핵심 문서.
- PROCESS_OVERVIEW.html (신설) — 파이프라인 개요 시각.
- docs/tasks/* (신설) — Phase Z task 문서.

V4 catalog (Phase Z runtime 필수 의존성) :
- tests/matching/v4_full32_result.yaml (신설, 4888 줄) — V4 매칭 결과 32 frame
  × 10 MDX section. lookup_v4_match() / lookup_v4_candidates() 가 본 파일 read.
  Phase Z runtime 이 *없으면 즉시 abort* — clone 후 즉시 동작 가능 보장.

Samples :
- samples/mdx_batch/04.mdx (신설) — MDX04 기본 sample.
- samples/mdx/04. DX 지연 요인.mdx (신설) — MDX04 원본.

Phase Q legacy 보존 (별 axis "Phase Q audit & salvage" 영역) :
- src/block_matcher_tfidf.py / catalog_blocks.py / frame_extractor.py /
  pipeline_v2.py — Phase Q (옛 파이프라인) src 신규 untracked 파일들.
  Phase Z runtime 와 의존성 0. Phase Q audit axis 에서 검토 예정.
- scripts/eval_block_matcher.py / fetch_all_frame_screenshots.py /
  match_17_units_my_matcher.py / match_mdx_strict.py / match_mdx_to_frames_tfidf.py /
  ocr_augment_texts.py / run_pipeline_v2.py / previews/ — Phase Q 작업 시
  사용한 옛 script. 같이 보존.
- run_mdx03_pipeline.py (수정) — Phase Q 진입점 (no flag) + Phase Z 진입점
  (--phase-z2 flag) 동시 wrapper. Phase Z 만 사용 시 `python -m
  src.phase_z2_pipeline samples/mdx_batch/03.mdx <run_id>` 직접 호출.

비-scope :
- tests/matching/ (v4_full32_result.yaml 외 ~63MB) — V4 진화 history /
  reports / DECK / ATTACH. Phase Q audit axis 에서 검토.
- tests/pipeline/ (~15MB) — pipeline data. Phase Q audit 영역.
- templates/catalog/blocks.yaml — 옛 block catalog. Phase Q audit.
- templates/phase_z2/frames/ — 옛 frame partial 위치. Phase Q audit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 09:47:58 +09:00

579 lines
24 KiB
Markdown
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.
# Pipeline 개선 — 매칭 시스템 통합 (Redesign)
> **작성일**: 2026-04-28
> **목적**: 매칭 시스템 (V1~V4) 테스트 결과를 기존 design_agent pipeline 에 통합. AI 호출을 줄이고 결정론적 매칭 + 정밀한 공간 관리를 결합.
> **상태**: 설계 단계. 실행은 사용자 승인 후 단계적 진행.
---
## 1. 배경 / 문제의식
### 기존 pipeline 의 한계
| 문제 | 현황 |
|---|---|
| AI 호출 과다 | Stage 1A / 1B / 1B-ST / 1.7 / 1.8 / 2 / 4 — 5~6 회 호출 |
| Type A/B/B'/B'' 하드코딩 | 콘텐츠별 전용 코드 분기 (오답노트 #2 위반 우려) |
| 블록 catalog 50+ 개 vs 실제 사용 7.9% | Phase P 결과 — 다양성 부족 |
| 유령 블록 / overflow 출력 | Phase Q 에서 일부 해결 |
### 매칭 시스템 (V1~V4) 테스트 결과
`tests/matching/` 에서 별도 검증한 결과:
| 항목 | 결과 |
|---|---|
| TARGET 정답률 | 3/4 (75%) — Logistic Regression 가중치 학습 + LOOCV 4/4 검증 |
| BM25 / IDF 비교 | 현 방식 우위 (4/4 vs 3/4) |
| V4 slot 축 ablation | Top-1 매칭 7/7 동일 — slot 축 frame 선별 무영향 확인 |
| 발견된 약점 | 8 가지 (`tests/PROGRESS.md` 참조) |
### 통합 필요성
매칭 시스템이 **콘텐츠 분석 / 디자인 추천** 부분을 코드로 대체 가능함을 확인. 단, 1280×720 안 정밀 공간 관리는 매칭 시스템이 다루지 않으므로 기존 pipeline 의 공간 관리 로직 (`space_allocator`, `fit_verifier`, `slide_measurer`) 은 유지 필요.
**콘텐츠 분석은 매칭 시스템, 공간 관리는 기존 pipeline** 으로 책임 분리.
---
## 2. 영역 분리 — 3 가지
| 영역 | 무엇을 하나 | 누가 담당 |
|---|---|---|
| **A. 콘텐츠 분석 / 디자인 추천** | "이 MDX 콘텐츠에 어떤 디자인이 어울리나?" | **매칭 시스템 V1~V4 (신규)** |
| **B. 공간 관리 / 사이즈 조정** | "1280×720 안에 어떻게 끼워 넣나? overflow 안 나게?" | **기존 pipeline (유지)** |
| **C. HTML 생성 / 슬롯 채움** | "선택된 디자인에 MDX 텍스트를 어떻게 넣나?" | **기존 + V4 label 분기** |
### 핵심 원칙
- A 는 매칭 시스템으로 완전 대체 (AI 호출 줄임)
- B 는 절대 손대지 않음 (정밀한 공간 관리는 기존 로직이 검증됨)
- C 는 매칭 결과의 label 에 따라 분기 (코드 / AI 1회 / Sonnet 재구성)
---
## 3. 핵심 결정 사항 (확정)
### 3.1 처리 단위
```
MDX 1 파일 = 대목차 1개 = 슬라이드 1장
└ 중목차들 = 슬라이드 안의 frame 들 (조합)
└ 소목차들 = 더 작은 단위 frame 또는 슬롯
```
### 3.2 매칭 알고리즘 — 소→중→대 합치기 룰
```
[1단계] 모든 소목차에 V1~V4 매칭 시도
각 소목차의 best frame 도출
[2단계] 같은 중목차 내 소목차 매칭이 비슷하면 → 중목차로 묶어서 다시 매칭
더 큰 frame 단위로 합치기 가능한지 확인
[3단계] 중목차들이 비슷하면 → 대목차로 묶어서 매칭
슬라이드 1장 전체를 1 frame 으로 처리 가능한지 확인
→ 가장 적합한 합치기 단위 + frame 조합 채택
```
### 3.3 레이아웃 프리셋
기존 design_agent 의 4 가지 Type 으로 시작:
| 프리셋 | 조건 | 비고 |
|---|---|---|
| Type A | 참조 자료 (용어 정의 등) 별도 존재 | 기존 그대로 유지 (오답노트 #7) |
| Type B | 본문 흐름만 | 기존 그대로 |
| Type B' | 카드형 + 표 | 기존 그대로 |
| Type B'' | 색상바 + 여백 분리 | 기존 그대로 |
→ 4 개로 시작. 운영하면서 부족하면 추가.
### 3.4 V4 label 분기
매칭 결과의 label 이 후속 작업 비용을 결정:
| label | confidence | 후속 작업 | 비용 |
|---|---|---|---|
| use_as_is | ≥ 0.90 | 슬롯에 텍스트만 매핑 | 자동, AI 0회 |
| light_edit | ≥ 0.75 | AI 가 슬롯 텍스트 다듬기 | AI 1회 |
| restructure | ≥ 0.60 | 가장 유사 frame 참고 + Sonnet 변형 | 사람 + AI |
| reject | < 0.60 | 대안 frame 시도 → 그래도 안 되면 유사 frame 참고 | 사람 + AI |
### 3.5 자유 HTML 생성 금지
→ 항상 frame DB 의 어떤 frame 을 참고하여 생성. Phase R' 식 자유 디자인은 X.
### 3.6 텍스트 원문 보존 원칙 (절대 룰)
> **슬라이드 본문은 preview / 요약 가능하지만, MDX 원문은 popup / detail 에 무손실 보존한다.**
- 슬라이드 본문에 표시되는 것 = 일부 / 핵심 / preview 가능
- 단, 원문이 잘리거나 사라지지 않음 — 항상 팝업 / "자세히 보기" 에 무손실 저장
- "텍스트 압축 / trim / restructure" 같은 처리 금지 (오답노트 #5 준수)
- 안 들어가면 슬라이드를 키우는 게 아니라 → 본문은 preview, 팝업에 원문 보존
- AI 가 텍스트를 "줄여서 채워 넣지" 않는다 — preview 로 가공 후, 원문은 detail 에 보존
### 3.7 팝업 처리 룰
- MDX 에 팝업 콘텐츠 (`<details>`) 가 있으면 별도 보존
- 슬라이드 1장 룰 절대 유지 (2장으로 분리 X)
- 처리: **본문 요약 / 일부만 표시 + "자세히 보기" 클릭 → 팝업으로 전체**
- 전체를 팝업으로 빼는 것 X
- 팝업 콘텐츠도 MDX 원문 무손실 (3.6 원칙 적용)
---
## 4. 위계 + 용어 정리
### 4.1 슬라이드 위계
```
[ 슬라이드 ] 1280 × 720
├─ slide-title ← MDX 대목차 제목 (자동 매핑)
├─ slide-divider (고정)
├─ slide-body ≈ 1200 × 590 ─ ★ 여기에 콘텐츠
│ │
│ └─ 레이아웃 (Type A / B / B' / B'')
│ │
│ └─ Zone (top / bottom_l / bottom_r 등)
│ │
│ └─ 프레임 (Figma 디자인)
└─ slide-footer ← MDX 대목차 결론 (자동 매핑)
```
### 4.2 용어
| 용어 | 의미 | 단위 / 위치 |
|---|---|---|
| **슬라이드** | 1280×720 한 장 | 가장 큰 단위 |
| **slide-base** | 배경 + 제목 + 구분선 + 결론 pill (모든 슬라이드 공통 그릇) | `templates/blocks/slide-base.html` 고정 |
| **slide-body** | 본문 가용 영역 (≈ 1200×590) | slide-base 안 |
| **레이아웃 (Layout)** | Type A / B / B' / B'' (4 가지 프리셋) | slide-body 안 |
| **Zone (영역)** | 레이아웃이 결정한 콘텐츠 구역 (top / bottom 등) | 레이아웃 안 |
| **컨테이너 (Container)** | zone 의 px 명세 (코드 레벨 표현) | zone 의 구체화 |
| **프레임 (Frame)** | Figma 디자인 단위 (= 기존 "블록") | zone 안 |
### 4.3 MDX → 슬라이드 매핑
| MDX 위치 | 슬라이드 위치 |
|---|---|
| `# 대목차 제목` | `slide-title` |
| 본문 (`##` / `###` 중·소목차) | `slide-body` 안 — 레이아웃 / zone / 프레임 |
| `# 대목차 결론` (있을 시) | `slide-footer` |
| `<details>` 팝업 콘텐츠 | 슬라이드 위 별도 레이어 |
### 4.4 매칭 시스템 (V1~V4) 의 frame 단위 — 명확화
- 매칭 시스템에서 **frame 32 개를 슬라이드 1장 단위로 검증** 함 (예: Frame 18 = BIM/DX 비교 슬라이드 통째로)
- 새 흐름에서는 **frame = zone 안 디자인 단위**
- → frame DB 라벨링 재검토 필요 (사이즈 분류: "슬라이드 전체 / zone 1 개 / 작은 박스")
- 8.1 항목 (32 frame 사이즈 라벨링) 의 핵심 작업
---
## 5. 새 Pipeline Flow
```
═══════════════════════════════════════════════════════════════
[전처리 — 한 번만, 결과 캐싱]
═══════════════════════════════════════════════════════════════
T-0. Figma frame DB 구축
· 각 frame 의 키워드 (핵심/세트/연관) 라벨링 ✅ 완료
· 각 frame 의 구조 (layout, family, relation_type,
cardinality, content_affinity,
structure_intent, slots,
alternative_patterns) 라벨링 ✅ 완료
· 각 frame 의 사이즈 비율 (전체 / 절반 / 1/3 / 박스) ✅ 대체 완료 (Zone 적용 분류 — `docs/architecture/FRAME-INTEGRATION-MAP.md` 의 `zone_direct/adapt/extract/reference_only`)
· 각 frame 의 스타일 / 시각 언어 인벤토리 ✅ 완료 (`docs/architecture/PHASE-Z-FRAME-STYLE-INVENTORY.md`)
T-1. (새 frame 추가 시) 자동 라벨링 룰
· 새 Figma frame 입력 → V3 의 detect_mdx_v2_profile 로 자동 감지
· 사람이 검수 후 DB 추가
T-2. 레이아웃 프리셋 정의 (4 개)
· 각 프리셋의 grid / area 정의
· 어떤 frame 사이즈 조합에 어울리나 메타 정보
═══════════════════════════════════════════════════════════════
[실행 — MDX 1 파일 처리 = 슬라이드 1 장 생성]
═══════════════════════════════════════════════════════════════
STAGE 1) MDX 분석 + 레이아웃 매칭 [코드]
· MDX 정규화 + 외부 컴포넌트 인라인 (Phase Y)
· 팝업 콘텐츠 (<details>) 별도 보존
· 대 / 중 / 소목차 트리 추출
· 콘텐츠 성격 분석 (V3 의 detect_mdx_v2_profile)
· 4 가지 레이아웃 (Type A / B / B' / B'') 중 1 개 결정
· MDX 대목차 제목 → slide-title
· MDX 대목차 결론 → slide-footer
STAGE 2) Zone 별 텍스트 1 차 배치 [코드]
· 레이아웃이 결정한 zone 들에 콘텐츠 분배
· 어떤 중 / 소목차가 어떤 zone 에 갈지 결정
· 컨테이너 (zone 의 px) 계산 — space_allocator.py
STAGE 3) Zone 별 프레임 매칭 (V1~V4 매칭 시스템) [코드 + label 분기 AI]
┌──────────────────────────────────────────────┐
│ 각 zone 의 콘텐츠와 Figma 프레임 DB 매칭 │
│ V1 키워드 → V2 의미 → V3 구조 → V4 종합 판정 │
│ │
│ 매칭 결과 분기: │
│ ├ 매칭 완벽 (use_as_is) → 텍스트 업데이트 │
│ ├ 매칭 어정쩡 (light_edit │
│ │ / restructure) → 디자인 참고 │
│ │ 재구성 (Sonnet) │
│ └ 매칭 안 됨 (reject) → 디자인 컨셉 │
│ 바탕 재구성 │
│ │
│ 자유 디자인 금지 — 항상 프레임 DB 참고 │
└──────────────────────────────────────────────┘
STAGE 4) 프레임 내용 검토 + 컨테이너 조정 [코드 + AI fallback]
· zone 별 검증 (넘침 / 공란 / 적정 / 불균형)
· 보정:
├ 넘침 → 본문 미리보기 + "자세히 보기" 팝업
│ (MDX 원문 절대 줄이지 않음 — 3.6 원칙)
├ 공란 → MDX 팝업 콘텐츠 있으면 일부 끌어옴
├ 적정 → 그대로
└ 불균형 → 레이아웃 자체 부적절 → STAGE 1 회귀
(5 차 Fallback — 6 장 참조)
STAGE 5) HTML 조립 + 검증 + 출력 [코드 + AI]
· slide-base.html (배경 + 제목 + 구분선 + 결론 pill)
+ slide-body 안 (레이아웃 + zone + 프레임)
+ slide-title / slide-footer 채움
+ 팝업 레이어
· Jinja2 렌더링
· 실측 검증 (Selenium) — 넘침 차단
· 시각 검증 (Vision — Opus) — 품질 평가
· final.html 출력
```
---
## 6. 컨테이너 검증 + Fallback 룰 (STAGE 4 상세)
### 6.1 검증 케이스 분류
```
[모든 컨테이너 검증 결과 종합]
케이스 1) 모두 적정
→ 다음 단계 진행
케이스 2) 일부 Overflow + 나머지 적정
→ 본문 요약 + "자세히 보기" 팝업 처리
케이스 3) 일부 Underflow (특정 컨테이너만 공란) + 나머지 정상
❗ 레이아웃 잘못 → STAGE 1 회귀 (레이아웃 재선택)
케이스 4) 일부 Overflow + 일부 Underflow 동시
❗ 레이아웃 잘못 (불균형) → STAGE 1 회귀 (레이아웃 재선택)
케이스 5) 모두 Underflow + 채울 콘텐츠 없음
✅ 공란 허용 (콘텐츠 자체가 적은 슬라이드)
```
### 6.2 5 차 Fallback (불균형 검출 시)
```
[1차] 매칭 → 적합 프리셋 → 검증
OK → 종료
불균형 → 2차
[2차] 다른 프리셋 시도 (예: Type B → Type B')
또는 frame 합치기 단위 변경 (소→중 또는 중→대)
OK → 종료
불균형 → 3차
[3차] 매칭 결과 자체 변경 (Top-1 → Top-2 frame)
OK → 종료
불균형 → 4차
[4차] AI 콘텐츠 조정 의뢰 (Sonnet 1회)
현재 매칭된 frame / zone / container 는 유지한 채,
zone 안 콘텐츠 분량과 슬롯 매핑만 AI 로 조정한다.
· 긴 텍스트 → 본문 preview + 팝업 원문 분리 제안
· 슬롯 의미 매핑 미세 조정
· 불필요한 반복 표현을 preview 에서 정리
· 원문은 popup / detail 에 무손실 보존
⚠️ AI 는 zone 안 콘텐츠만 조정한다.
⚠️ 레이아웃 / 프리셋 / 새 frame 결정 / HTML 구조 생성은 코드만 수행한다.
OK → 종료
안 되면 → 5차
[5차] 단일 프리셋 강제 (Type A 또는 가장 큰 frame 만 사용)
나머지 콘텐츠 → "자세히 보기" 팝업
OK → 종료
그래도 안 되면 → 사람 개입 알림
```
### 6.3 Fallback 단계별 비율 추정
| 단계 | 종료 비율 (가설) | 비용 |
|---|---|---|
| 1차 | 80%+ | 낮음 (코드만) |
| 2~3차 | 15% | 낮음 (코드만) |
| 4차 (AI) | 4% | 중간 |
| 5차 (단일 + 팝업) | 1% 이하 | 낮음 |
| 사람 개입 | 매우 드물게 | 최후 수단 |
→ 실제 비율은 MDX 데이터로 검증 필요. 일단 가설.
---
## 7. 단계적 진행 계획
### Phase Z-0 — 매칭 시스템 (✅ 완료)
```
✅ V1~V4 매칭 시스템 구축
✅ 32 frame 키워드 + 구조 라벨링
✅ TARGET 3/4 정답
✅ 보고서 (DECK 1~7)
```
### Phase Z-1 사전 작업 — 진행 중
```
✅ 완료 (2026-04-28)
· Frame Integration Map (32 frame Zone 적용 분류)
→ docs/architecture/FRAME-INTEGRATION-MAP.md
· Frame Style Inventory (32 frame + 18 token + 6 legacy)
→ docs/architecture/PHASE-Z-FRAME-STYLE-INVENTORY.md
⬜ 미진행 (Phase Z-1 본격 진입 전)
· catalog / runtime 설계 prep
· slide-base 검증
⚠️ 미실행 / 의도적으로 보류 (승인 전)
· 기존 templates/blocks 삭제 / 교체
· catalog / runtime 구현
· templates/styles/frame-patterns 신규 파일 생성
· 새 token (gap_candidate) 추가
```
### Phase Z-1 — 통합 prototype (본격)
```
[목표] MDX 03 (회귀 기준) 으로 매칭 시스템 + 기존 pipeline 통합 검증
작업:
· Stage 1.7 (블록 선택) 만 V4 로 교체
· 32 frame ↔ Type B/B'/B'' 매핑 테이블 작성
· MDX 03 결과 기존과 비교 (회귀 통과)
완료 기준:
· MDX 03 기존 결과 대비 overflow 없음
· 텍스트 누락 없음 (MDX 원문 무손실 보존, 3.6 원칙)
· AI 호출 수 감소 (Stage 1.7 의 Kei 1회 제거)
· 옵션 플래그 off 시 동일 경로 복귀 (회귀 방지)
리스크: 낮음 (한 곳만 교체)
산출물: 매칭 시스템이 기존 pipeline 안에서 작동 확인
```
### Phase Z-2 — 매칭 + 프리셋 통합
```
[목표] Type A/B/B'/B'' 프리셋과 매칭 결과 연결
작업:
· 매칭 결과 → 4 프리셋 중 1 개 자동 선택 룰
· 합치기 룰 (소→중→대) 구현
· MDX 02, 01 적용 검증
완료 기준:
· MDX 03 / 02 / 01 모두 매칭 + 프리셋 자동 선택 작동
· 합치기 룰이 소목차 → 중목차 → 대목차 순서로 작동
· MDX 원문 무손실 유지 (3.6 원칙)
리스크: 중간
산출물: MDX 03/02/01 모두 매칭 + 프리셋 자동
```
### Phase Z-3 — 컨테이너 검증 + Fallback
```
[목표] 컨테이너 별 검증 + 5 차 Fallback 로직
작업:
· 불균형 검출 룰 (Overflow / Underflow / 동시)
· STAGE 4 의 1~5 차 Fallback 단계 구현
· 팝업 처리 룰 (안 들어가면 자세히 보기)
완료 기준:
· 컨테이너 별 검증 (Overflow / Underflow / 불균형) 작동
· Fallback 5 차 단계 작동 (각 단계 독립 검증)
· 팝업 처리 — preview 본문 + 무손실 팝업
리스크: 중간 ~ 높음
산출물: 안정적 자동 처리
```
### Phase Z-4 — 전체 통합 + 검증
```
[목표] 새 pipeline 으로 모든 MDX 처리 + 회귀 확인
작업:
· MDX 03 / 02 / 01 회귀
· Selenium + Vision 검증
· AI 호출 수 / 처리 시간 측정
완료 기준:
· MDX 03 / 02 / 01 모두 새 pipeline 통과
· Vision 품질 평가 합격
· AI 호출 수 / 처리 시간 기존 대비 감소
산출물: 새 pipeline 완성
```
---
## 8. 검토 / 결정 필요한 항목
### 8.1 32 frame 의 사이즈 라벨링
frame DB 에 "이 frame 은 슬라이드 전체 / 위 절반 / 좌측 1/3 / 작은 박스" 같은 사이즈 분류 필요.
| 옵션 | 방법 |
|---|---|
| (a) 사용자 직접 분류 | 정확하지만 시간 소요 |
| (b) Figma 캔버스 사이즈 자동 추정 | 빠르지만 부정확 가능 |
| (c) 매칭 시스템의 기존 라벨 (layout) 활용 + 보완 | 절충 |
**추천 (c)** : 기존 layout 라벨 (compare-rows / table-2col / cards-3col 등) 을 사이즈 라벨에 매핑하는 룰 작성.
### 8.2 프리셋 자동 선택 룰
frame 들의 사이즈 / 개수 → 4 프리셋 중 1 개 선택하는 룰.
예시:
- frame 1 개 + 사이즈 = 슬라이드 전체 → Type A 또는 Type B 단일
- frame 2 개 + 사이즈 = 위/아래 절반 → Type B (상단 + 하단)
- frame 2 개 + 사이즈 = 좌/우 절반 → Type A (사이드바)
### 8.3 합치기 룰 종료 조건
소→중→대 합치기 룰에서 어디까지 합칠지 결정:
- 소목차 매칭 결과가 "비슷" 하다는 기준은?
- 같은 frame_id ? 같은 layout family ? V4 axes 일부 일치 ?
### 8.4 슬롯 매핑 — 코드 + AI 하이브리드 비율
- 어디까지 코드 휴리스틱? (제목 → title 같은 명확한 것)
- 어디부터 AI? (의미 매핑 / 사이즈 조정 / 텍스트 다듬기)
---
## 9. 회귀 방지 / 안전 원칙
### 9.1 기존 작동 코드 보존
- **Type A 코드** (오답노트 #7) — 절대 건드리지 않음
- **공간 관리 로직** (`space_allocator`, `fit_verifier`, `slide_measurer`) — 그대로 유지
- **Phase Y 진행 중 작업** — MDX 외부 컴포넌트 처리 그대로
### 9.2 회귀 검증
- 단계마다 **MDX 03 (회귀 기준)** 결과 기존과 비교
- 변경 전 / 변경 후 다음 항목 측정:
- 최종 HTML 의 시각 결과 (스크린샷 비교)
- AI 호출 수
- 처리 시간
- overflow 발생 여부
### 9.3 옵션 플래그 도입
```
USE_MATCHING_SYSTEM = False # 기본값
```
- 새 기능은 플래그로 도입
- 문제 발생 시 즉시 기존 경로로 fallback
- 안정화 후 기본값 True
### 9.4 핵심 원칙 (오답노트.md 준수)
- **거짓말 금지** — 못 하면 못 한다고 명시
- **하드코딩 금지** — 결과물 고치지 말고 프로세스 고침
- **검증 없이 넘어가지 마라** — 단계마다 실측 + 회귀
- **텍스트 원문 무손실 보존** — 슬라이드 본문은 preview / 일부만 표시 가능, MDX 원문은 팝업 / detail 에 무손실 보존 (3.6 원칙)
- **프로세스 만들어라** — 매번 사고하여 판단 (AI 든 코드든)
---
## 10. 참고 문서
### 우선순위 — 충돌 시 어느 문서가 최신인가
**매칭 시스템 관련**:
- ✅ 최신 기준 = `tests/PIPELINE.md` (V1~V4 통합 정리)
- ⚠️ `tests/matching/CURRENT_STATUS.md` 등 옛 문서는 **과거 기록 (참조 X)**
- 옛 문서에 "V2/V3/V4 미완료" 로 적혀 있어도 무시. 실제는 모두 완료.
**design_agent 전체**:
- ✅ 최신 기준 = `PIPELINE.md` + 이 문서 (`IMPROVEMENT-REDESIGN.md`)
- ⚠️ `ARCHITECTURE_OVERVIEW.md`**deprecated** (2026-03-27 스냅샷, Type A/B 분기 등 미반영)
### 매칭 시스템 (V1~V4)
| 문서 | 위치 |
|---|---|
| 매칭 시스템 V1~V4 통합 정리 | `tests/PIPELINE.md` |
| 매칭 시스템 진행 / 약점 | `tests/PROGRESS.md` |
| 매칭 시스템 단계별 계획 | `tests/PLAN.md` |
| 매칭 시스템 코드 + 결과 + 보고서 | `tests/pipeline/` |
| 매칭 시스템 원본 (보존) | `tests/matching/` |
### 기존 design_agent
| 문서 | 위치 |
|---|---|
| 현재 pipeline 흐름 | `PIPELINE.md` |
| 전체 Phase 이력 | `PROGRESS.md` |
| 단계별 계획 | `PLAN.md` |
| 절대 원칙 | `오답노트.md` |
| 프로젝트 규칙 | `CLAUDE.md` |
| README | `README.md` |
### 보고서 (임원 보고용)
| 문서 | 위치 |
|---|---|
| DECK 1~7 (TARGET / Holdout / 방법 / DB / 키워드) | `tests/pipeline/reports/DECK_*.html` |
---
## 11. 리스크 + 대응 방안
설계안에서 실행계획으로 넘어갈 때 고려해야 할 리스크.
| # | 리스크 | 대응 방안 |
|---|---|---|
| 1 | **V4 가 디자인 적합성은 보지만 공간 적합성은 보지 않음** | 기존 공간 관리 (B 영역, `space_allocator` / `fit_verifier`) 그대로 유지. STAGE 4 컨테이너 검증으로 보완. V4 confidence 와 별개로 컨테이너 단위 overflow / underflow 측정 |
| 2 | **slot 의미 매핑 부재** (BIM → col_a_label 같은 매핑 없음) | STAGE 3 (zone 별 프레임 매칭) 의 슬롯 매핑에 AI 1회 호출 (Sonnet). 또는 frame DB 에 매핑 룰 사전 정의. 매칭 시스템의 slot 축 ablation 결과 — 이 영역은 별도 작업 필요 |
| 3 | **32 frame DB 의 사이즈 라벨 부족** | 8.1 항목 결정 후 라벨링 작업 (사용자 직접 또는 매칭 시스템의 layout 라벨 활용). Phase Z-1 시작 전 완료 필요 |
| 4 | **기존 Type B'/B'' 하드코딩 관성 재발 위험** | 4 프리셋 안에서만 조합. 새 콘텐츠별 전용 코드 절대 금지 (오답노트 #2). 새 변형 필요 시 — 코드 분기 추가 X, frame DB 또는 프리셋 추가로 해결 |
| 5 | **보고서용 매칭 성능 ≠ 실제 렌더 품질** | TARGET 3/4 정답률은 매칭 단독 성능. 실제 슬라이드 품질은 Phase Z-1 ~ Z-4 단계마다 MDX 03 실 렌더 + Vision 평가 회귀 |
| 6 | **MDX 분석 키워드 사전의 부정확성** (V3) | Hybrid 룰 — 코드 자동 + Kei fallback (신뢰도 낮을 때). 또는 추후 LLM 분석으로 교체 (`tests/PROGRESS.md` 의 Phase E.1, E.2) |
| 7 | **합치기 룰 (소→중→대) 무한 재시도 위험** | Fallback 5 차로 명확히 종료 (STAGE 4). 각 단계 최대 1 회 시도. 5 차 후엔 사람 개입 알림 |
| 8 | **매칭 시스템의 02-2.2 매칭 실패 사례** | 매칭 시스템 자체 약점 (`tests/PROGRESS.md` 약점 #1). Phase Z-1 진행 전 frame 14 의 anchor_sets 재라벨링 필요 (사전 작업) |
---
## 다음 단계
1. **이 문서 검토** — 사용자 + 협업자
2. **검토 사항 (7장) 결정** — 4 가지 항목
3. **리스크 대응 (11장) 사전 작업** — 32 frame 사이즈 라벨링 + frame 14 재라벨링
4. **Phase Z-1 시작** — 통합 prototype
5. **단계별 회귀 검증** — MDX 03 기준