Files
C.E.L_Slide_test2/PHASE-X.md

6.4 KiB

Phase X: 템플릿 기반 동적 레이아웃

작성일: 2026-04-06 상태: 계획 수립


배경

현재 파이프라인은 모든 MDX를 "배경/본심/첨부/결론" 4칸에 억지로 끼워넣는다. 배경이 없는 콘텐츠도 배경을 만들어내고, 3분할이 적절한 콘텐츠도 2분할로 넣는다. Kei가 내용을 잘못 파악한 게 아니라, "4칸을 채워라"는 지시가 잘못된 것이다.

핵심 아이디어

미리 정의된 레이아웃 템플릿 중 Kei가 콘텐츠에 맞는 것을 선택한다.

  • Kei가 자유롭게 구조를 만드는 것이 아님 (불안정)
  • 옵션을 주고 고르게 함 (안정적)
  • 하드코딩 아님 — 어떤 MDX가 와도 적절한 템플릿이 선택됨

고정 영역

모든 템플릿 공통:

  • 상단: 슬라이드 제목 헤더 (항상 존재)
  • 하단: 결론 footer (항상 존재)
  • 중간: 템플릿에 따라 달라지는 영역

중간 영역 템플릿 옵션

A. body + sidebar

┌──────────┬─────┐
│ 본심1    │참조  │
│ 본심2    │     │
└──────────┴─────┘

적합: 참조자료(용어 정의 등)가 별도로 있는 콘텐츠 예시: 01번 MDX (DX/BIM 용어 정립)

B. 상단 wide + 하단 2분할

┌─────────────────┐
│ 강조/핵심        │
├────────┬────────┤
│ 항목1  │ 항목2   │
└────────┴────────┘

적합: 핵심 1개 + 두 가지 측면 비교/설명 예시: 03번 MDX (필수요건 + 과정혁신/결과변화)

C. 상단 wide + 하단 3분할

┌─────────────────┐
│ 강조/핵심        │
├─────┬─────┬─────┤
│항목1│항목2│항목3 │
└─────┴─────┴─────┘

적합: 핵심 1개 + 세 가지 항목 병렬 예시: 02번 MDX (궁극적 목표 + 발주처/설계사/시공사)

D. 2분할 (좌우 대등)

┌────────┬────────┐
│ 항목1  │ 항목2   │
│        │        │
└────────┴────────┘

적합: 두 가지 비교/대비

E. 단일 전체

┌─────────────────┐
│                 │
│ 본심 (전체)      │
│                 │
└─────────────────┘

적합: 하나의 흐름, 분할 불필요

F. 상단 wide + 하단 2분할 + 보조 sidebar

┌─────────────┬───┐
│ 강조/핵심   │참조│
├──────┬──────┤   │
│항목1 │항목2 │   │
└──────┴──────┴───┘

적합: B + sidebar 조합


프로세스

1. Kei가 MDX 원본을 읽고 내용 분석
   → 핵심 메시지, 콘텐츠 구조 파악

2. Kei가 꼭지를 나눔 (개수와 역할명 자유)
   → "핵심목표 1개, 주체별 기대효과 3개, 결론 1개"
   → 역할명: 고정 4칸 아님. 콘텐츠에 맞는 이름 사용

3. Kei가 템플릿 선택
   → "꼭지 구조를 보니 C템플릿이 맞다"
   → 옵션 A~F 중 하나

4. Kei가 각 영역에 꼭지 배정 + weight
   → 상단: 핵심목표(0.3)
   → 하단좌: 발주처(0.2), 하단중: 설계사(0.2), 하단우: 시공사(0.2)
   → footer: 결론(0.1)

5. 파이프라인이 템플릿대로 컨테이너 생성 → BEFORE

6. 콘텐츠 채움 → 측정 → 재배분 → FILLED → AFTER

7. 조립 → code_assembled / final

작업 리스트

X-1: 템플릿 정의

  • 옵션 A~F의 구체적 컨테이너 구조 정의
  • 각 옵션의 zone 이름, 비율 계산 공식, 좌표 계산 로직
  • src/design_director.pyLAYOUT_TEMPLATES 정의
  • 하드코딩 아님: 템플릿은 구조만 정의, 크기는 weight와 슬라이드 크기에서 동적 계산

X-2: Kei 프롬프트 수정

  • KEI_PROMPT에 템플릿 A~F 옵션 제시
  • Kei가 콘텐츠를 보고 layout: "C" 선택
  • page_structure의 역할명이 자유 (배경/본심 고정 아님)
  • 각 역할에 zone 배정 (상단/하단좌/하단우 등)
  • 하드코딩 아님: Kei가 콘텐츠마다 다른 선택을 함

X-3: space_allocator 템플릿 기반 컨테이너 생성

  • 선택된 템플릿에 따라 컨테이너 좌표/크기 생성
  • weight 비율로 각 영역 크기 결정
  • select_preset()build_layout_from_template()
  • 하드코딩 아님: 템플릿 구조 + weight + 슬라이드 크기로 동적 계산

X-4: block_assembler / assemble_stage2 동적 역할

  • ["배경", "본심", "첨부", "결론"] 고정 루프 → page_structure.keys() 동적 루프
  • 좌표 계산은 X-3에서 생성한 컨테이너 정보 사용
  • 색상/폰트: 역할 수에 맞게 동적 배분
  • 하드코딩 아님: 역할 수가 3개든 5개든 동작

X-5: 나머지 파일 동적화

  • step_visualizer: before/after 시각화에서 동적 역할 루프
  • fit_verifier: 4역할 고정 → 동적 역할
  • html_generator: Sonnet에게 동적 영역 수만큼 생성 요청
  • renderer: 동적 grid-template 생성
  • 하드코딩 아님: 모두 ctx.containers.keys() 기반

X-6: 검증

  • 01번 MDX → A템플릿 → 기존과 동일하거나 더 나은 결과
  • 02번 MDX → C템플릿 → 상단 강조 + 하단 3분할
  • 03번 MDX → B템플릿 → 상단 요건 + 하단 2분할
  • 텍스트가 컨테이너 안에 있음
  • 공란 최소
  • 01번이 깨지면 롤백

주의사항

  • 하드코딩 절대 금지: 특정 MDX에만 동작하는 코드 없음
  • 01번 보호: Phase X 전에 git commit 완료 (1f7579c). 깨지면 롤백
  • 점진적 진행: X-1 → X-2 후 Kei 응답 확인 → X-3~X-5 순차 진행
  • 각 단계마다 검증

관련 코드 (고정 역할 참조 현황)

파일 참조 수 수정 범위
src/html_generator.py 54건 X-5
src/step_visualizer.py 32건 X-5
src/space_allocator.py 26건 X-3
scripts/assemble_stage2.py 26건 X-4
src/kei_client.py 18건 X-2
src/block_assembler.py 17건 X-4
src/fit_verifier.py 16건 X-5
src/pipeline.py 15건 X-3~X-5
src/renderer.py 7건 X-5
src/pipeline_context.py 4건 필요 시
합계 215건