Files
C.E.L_Slide_test2/PHASE-T-REMAINING.md
kyeongmin 1f7579cf64 Phase W + V' 완료: before→filled→after 파이프라인 + 조립 로직 수정
Phase W:
- weight 비율 초기 배정 (space_allocator header 높이 반영)
- block_assembler 공통 조립 함수 (filled/assembled 통합)
- filled → Selenium 측정 → context 저장
- sidebar overflow 확장 + body 재배분
- sub_layouts 사전 계산 (이미지 누락 해결)

Phase V':
- 팝업 링크 우측상단 배치 (인라인 → position:absolute)
- 표 내용 Kei 판단 (공란 크기 계산 → 행/열 산출 → Kei 요약)
- 출처 라벨 삭제 + 이미지 아래 캡션 배치
- after 공란 제거 (결론 바로 위까지 body/sidebar 채움)

추가:
- V-10 bold 키워드: 기계적 추출 → Kei 문맥 판단
- ** 마크다운 → <strong> 변환
- [이미지:] 마커 제거 (bold 변환 전 처리)
- grid-template-rows AFTER 크기 반영 (Sonnet final)
- assemble_stage2 CSS font-size override, white-space fix
- 하드코딩 전수 검토 완료
- 본심 여러 topic 텍스트 합침

Phase X 계획 문서 작성 (동적 역할 구조)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 05:00:52 +09:00

5.0 KiB
Raw Blame History

Phase T 잔여 작업 — 프롬프트 동적 생성 + 미반영 사항

작성일: 2026-04-02 상태: Phase T 구조(Stage 0~5)는 완성. 하지만 핵심인 프롬프트가 Phase S 하드코딩 그대로. 이 문서: 프롬프트 교체 + 미반영 사항 전체 리스트 + 실행 계획.


1. 전체 문제 리스트

1-1. 프롬프트 하드코딩 (근본 문제)

html_generator.py의 BG_PROMPT, CORE_PROMPT, SIDEBAR_PROMPT, FOOTER_PROMPT 4개가 Phase S 때 만든 고정 CSS 값(9px, 10px, #f8fafc, padding:14px 등)으로 박혀있음. Phase T에서 계산한 폰트 위계, 디자인 예산, 블록 레퍼런스가 결과에 반영되지 않는 근본 원인.

1-2. 폰트 크기 위계 미반영

Phase T Stage 1.5a에서 계산: 핵심=14px, 본심=12px, 배경=11px, 첨부=10px. 하지만 프롬프트가 배경=9px, 첨부=10px 등 다른 값을 하드코딩. → 프롬프트가 Phase T 위계 값을 사용해야 함.

1-3. 배경-본심 가로 길이 불일치

sidebar-right 구조에서 배경과 본심은 같은 body zone에 있으므로 가로 폭이 동일해야 함. 현재 프롬프트가 각각 다른 width를 지정할 수 있어서 Sonnet이 다르게 생성. → "body 영역 전체 폭 100%" 강제.

1-4. 들여쓰기 불일치

불릿(•) 첫째줄 텍스트 시작점과 둘째줄 시작점이 정확히 일직선이어야 함. 글씨 크기가 영역마다 다르므로(배경 11px, 본심 12px, 첨부 10px) 들여쓰기 px도 각 폰트에 맞게. padding-left와 text-indent를 폰트 크기 기준으로 계산.

계산 방식:

  • 불릿 마커 "• " 폭 ≈ font_size × 1.2 (한글 기준)
  • padding-left = ceil(font_size × 1.2)
  • text-indent = -padding-left
영역 폰트 padding-left text-indent
배경 (11px) 11px 14px -14px
본심 (12px) 12px 15px -15px
첨부 (10px) 10px 12px -12px

1-5. 블록 선택 → 컨테이너 맞춤 재구성 미반영

Phase T의 핵심 목적:

  • Stage 1.7에서 relation_type + expression_hint → 참고 블록 선택
  • 선택된 블록의 구조(색상, 레이아웃, 패턴)를 따르되 컨테이너 크기에 맞게 재구성
  • AI가 "발명"하지 않고 검증된 블록 구조를 따르게

현재: Stage 1.7이 블록을 선택하고 레퍼런스 HTML을 생성하지만, 프롬프트가 이것을 무시하고 하드코딩 CSS를 따름. → 프롬프트가 레퍼런스 HTML을 "따르라"고 지시해야 함.

1-6. 팝업(상세 내용) 별도 HTML 분리

본문에 다 넣을 수 없는 상세 내용(DX-BIM 비교표 12행 등)은:

  1. final.html에는 "상세보기" 링크만
  2. 상세 내용은 별도 첨부 HTML 파일로 생성

출력 구조:

data/runs/{run_id}/
├── final.html                    ← 슬라이드 본문
├── 첨부1_DX_BIM_비교표.html       ← details에서 분리된 상세
├── 첨부2_xxx.html                 ← 필요 시 추가
└── ...

1-7. 동일 내용 중복 금지

같은 내용이 본문에 2번 나오면 안 됨. 예: "DX와 BIM 비교표 보기" 링크 + 본문에 비교표 전체 → 중복. 비교표는 첨부 HTML로 분리하고, 본문에는 링크만.


2. 수정 완료 항목 (이미 처리됨)

# 항목 파일 상태
A 동적 비율 72:28 grid 반영 renderer.py 완료
B body-footer 공란 제거 renderer.py 완료
C L4 overflow 시 재생성 트리거 pipeline.py 완료

3. 실행 계획

Step R-1: 프롬프트 동적 생성 함수 (1-1, 1-2, 1-3, 1-4, 1-5, 1-7 해결)

파일: html_generator.py

하드코딩 BG_PROMPT/CORE_PROMPT/SIDEBAR_PROMPT/FOOTER_PROMPT를 삭제하고, build_area_prompt(role, context) 함수로 교체.

이 함수가 context에서 가져오는 것:

  • font_size ← context.font_hierarchy (1-2)
  • width ← context.containers[role].width_px (1-3)
  • height ← context.containers[role].height_px
  • indent_px ← font_size 기반 계산 (1-4)
  • reference_html ← context.references[role].design_reference_html (1-5)
  • design_budget ← context.containers[role].design_budget
  • "중복 금지" 규칙 (1-7)

Step R-2: 팝업 별도 HTML 생성 (1-6 해결)

파일: pipeline.py (Stage 5), html_generator.py

Stage 0에서 추출된 popups[]를 별도 HTML 파일로 생성. final.html에는 "상세보기" 링크만 남기고, 상세 내용은 첨부N_제목.html로 저장.

Step R-3: 검증 + 시뮬레이션

파일: scripts/test_phase_t_audit.py 확장

  • 프롬프트에 하드코딩 px 값이 없는지 검사
  • font_hierarchy 값이 프롬프트에 반영되는지 확인
  • 들여쓰기 CSS가 폰트 크기 기반인지 확인
  • 레퍼런스 HTML이 프롬프트에 포함되는지 확인
  • 팝업 별도 HTML 생성 확인
  • 실제 데이터로 전체 시뮬레이션

4. 실행 순서

Step R-1 (프롬프트 동적 생성) → Step R-3 (검증)
Step R-2 (팝업 분리)          → Step R-3 (검증)

R-1이 가장 크고 핵심. R-2는 독립 작업.