From 42d60e44a5df46e3942a2989e0bc57f138d9e125 Mon Sep 17 00:00:00 2001 From: kyeongmin Date: Mon, 6 Apr 2026 12:27:47 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=A0=95=EB=A6=AC:=20PHAS?= =?UTF-8?q?E-X-B,=20PHASE-X-PRIME,=20=EB=A9=94=EB=AA=A8=EB=A6=AC=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 현재 상태: - 유형 A: ✅ 동작 - 유형 B: code_assembled만 동작, 파이프라인(filled/after) 미연결 - 핵심 문제: block_assembler가 고정 4역할만 처리 → 유형 B 지원 필요 다음 세션: 1. block_assembler 유형 B 지원 2. 컨테이너 크기 맞춤 (Selenium 측정 기반) 3. 유형 A 깨지지 않는지 확인 Co-Authored-By: Claude Opus 4.6 (1M context) --- PHASE-X-B.md | 160 +++++++++++++++++++---------------------------- PHASE-X-PRIME.md | 151 +++++++++++++++++++++++++------------------- 2 files changed, 151 insertions(+), 160 deletions(-) diff --git a/PHASE-X-B.md b/PHASE-X-B.md index c6dcce0..0cf9d94 100644 --- a/PHASE-X-B.md +++ b/PHASE-X-B.md @@ -1,131 +1,101 @@ # Phase X-B: 유형 B 템플릿 추가 -> 작성일: 2026-04-06 +> 최종 업데이트: 2026-04-06 > 전제: 유형 A(배경+본심+첨부+결론) 기존 코드 건드리지 않음 --- ## 유형 B 구조 -02번 MDX (DX의 시행 목표 및 기대효과) 기준: +02번 MDX (DX의 시행 목표 및 기대효과) 기준. +MDX 원본 구조: +``` +title: DX의 시행 목표 및 기대효과 ← 슬라이드 제목 (frontmatter) +## 1. DX의 궁극적 목표 ← 상단 (level=2) + - 안전과 품질 / 생산성 향상 / 소통과 신뢰 ← 소제목 카드 + ![DX의 궁극적 목표](이미지) ← 상단 우측 이미지 +## 2. DX 기반 Process 혁신에 따른 주체별 기대효과 ← 하단 대목차 (level=2) + ### 2.1 업무 수행 과정(Process)의 변화 ← 하단 좌측 (level=3) + ### 2.2 DX 시행 주체별 기대효과 ← 하단 우측 (level=3) — 표 데이터 +:::note[핵심 요약] +* 고품질의 성과품, 비용 절감... ← 결론 (원본 그대로) +::: +``` +슬라이드 레이아웃: ``` ┌──────────────────────────────────────────┐ -│ 제목 │ +│ DX의 시행 목표 및 기대효과 (원본 title) │ ├───────────────────────┬──────────────────┤ -│ 본심1: DX 궁극적 목표 │ │ -│ ┌안전과 품질──────────┐│ [그림 2] │ -│ │• 불릿 ││ 궁극적 목표 │ -│ ├생산성 향상──────────┤│ 이미지 │ -│ │• 불릿 ││ (비율 맞춤) │ +│ DX의 궁극적 목표 │ │ +│ ┌안전과 품질──────────┐│ [이미지] │ +│ │• 불릿 ││ DX의 궁극적 │ +│ ├생산성 향상──────────┤││ 목표 │ +│ │• 불릿 ││ │ │ ├소통과 신뢰──────────┤│ │ │ │• 불릿 ││ │ │ └────────────────────┘│ │ -├───────────┬───────────┴──────────────────┤ -│ 본심2-좌 │ 본심2-우 │ -│ 프로세스 │ 주체별 기대효과 │ -│ 변화 │ [팝업→] │ -│ • 불릿 │ • 발주자: ... │ -│ • 불릿 │ • 시공자: ... │ -│ │ • 설계자: ... │ +├──────────────────────────────────────────┤ +│ DX 기반 Process 혁신에 따른 주체별 기대효과 │ ← 대목차 +├───────────┬──────────────────────────────┤ +│ 2.1 업무 │ 2.2 DX 시행 주체별 기대효과 │ +│ 수행 과정 │ [바로가기 →] (팝업 링크) │ +│ 변화 │ ┌ Kei 요약 표 ──────────┐ │ +│ • 생산방식 │ │ 구분│발주자│시공자│설계자│ │ +│ • 인지검토 │ │ ...│ ...│ ...│ ...│ │ +│ • 협업구조 │ └──────────────────────┘ │ +│ • 검증대응 │ │ ├───────────┴──────────────────────────────┤ -│ 결론 배너 │ +│ 결론: 고품질의 성과품, 비용 절감... (원본) │ └──────────────────────────────────────────┘ ``` -핵심: -- 상단: 텍스트(좌) + 이미지(우) 나란히 -- 하단: 2분할 -- 배경 없음, 첨부(sidebar) 없음 -- 이미지는 원본 위치에서 가져와서 컨테이너 크기에 맞게 비율 조정 -- 결론 항상 있음 -- PNG 구조를 따르되 디자인은 그대로 따라가기 - --- ## 진행 현황 -### X-B-1: KEI_PROMPT에 유형 B 옵션 추가 — ✅ 완료 -- 기존 유형 A 지시 유지 -- 유형 B 옵션 추가: "배경/첨부가 없는 콘텐츠는 본심1+본심2+결론 구조" -- Kei가 콘텐츠를 보고 A 또는 B 선택 -- 검증 결과: - - 01번 MDX → A 선택 ✅ - - 02번 MDX → B 선택 ✅ (역할: DX의_궁극적_목표/프로세스_혁신/주체별_기대효과/결론) - - 하드코딩 없음 ✅ -- 파일: `src/kei_client.py` — KEI_PROMPT 수정 +### X-B-1: KEI_PROMPT 유형 B 옵션 추가 — ✅ 완료 +### X-B-2: 검증기 완화 — ✅ 완료 +### X-B-3: space_allocator 유형 B 컨테이너 생성 — ✅ 완료 +### X-B-4: assemble_stage2 유형 B 조립 — ✅ 완료 (code_assembled) +### X-B-5: pipeline.py 분기 — ✅ 완료 -### X-B-2: 검증기(validators.py) 완화 — ✅ 완료 -- 유형 A: "본심" 필수 유지 -- 유형 B: 결론(footer) 필수, 본심 불필요, 자유 역할명 허용 -- 섹션 수 차이 허용: 유형 A는 2, 유형 B는 4 -- 하드코딩 없음 ✅ -- 파일: `src/validators.py` +### X-B-6: 검증 — ❌ 미완료 -### X-B-3: space_allocator에 유형 B 컨테이너 생성 — 미착수 -- 유형 A: 기존 `calculate_container_specs` 그대로 -- 유형 B: `build_containers_type_b()` 추가 - - 상단: 전체폭, weight 비율 - - 하단: 2분할, weight 비율 - - 이미지: 상단 우측, 실제 비율로 크기 계산 - - 결론: footer -- 파일: `src/space_allocator.py` +**code_assembled(assemble_stage2):** +- 제목/대목차/소목차/텍스트: MDX 원본에서 직접 가져옴 ✅ +- 팝업 링크 + Kei 요약 표 ✅ +- 이미지 + 캡션 ✅ +- 카드형 소제목 ✅ +- **하지만 렌더링에서 잘림** — 컨테이너 크기 vs 내용 크기 불일치 -### X-B-4: assemble_stage2에 유형 B 조립 로직 추가 — 미착수 -- 유형 A: 기존 코드 그대로 -- 유형 B: 새 조립 함수 - - 상단: 좌측 텍스트(카테고리별 카드) + 우측 이미지 - - 하단: 2분할 불릿 - - 이미지 아래 캡션, 팝업 링크 우측상단 - - 결론 배너 - - 좌표: 동적 계산 -- 파일: `scripts/assemble_stage2.py` - -### X-B-5: pipeline.py 분기 — 미착수 -- Stage 1.5a에서 `layout_template`에 따라 분기 - - "A" 또는 없음 → 기존 파이프라인 - - "B" → `build_containers_type_b()` -- Stage 1A에서 `layout_template`를 Analysis에 저장 (pipeline_context.py에 필드 추가 필요) -- 파일: `src/pipeline.py`, `src/pipeline_context.py` - -### X-B-6: 검증 — 미착수 -- 02번 MDX → 유형 B 선택 → 상단+이미지+하단2분할+결론 -- 01번 MDX → 유형 A 선택 → 기존과 동일 (깨지면 안 됨) -- 텍스트 컨테이너 안에 있음 -- 이미지 비율 맞음 -- 공란 최소 -- 하드코딩 없음 +**파이프라인(before→filled→after):** +- **유형 B에서 동작 안 함** — block_assembler가 고정 4역할만 처리 +- filled가 거의 빈 HTML (2997bytes) +- 이걸 해결해야 Selenium 측정 → 재배분이 가능 --- -## Kei 유형 선택 결과 (검증 완료) +## 다음 세션 핵심 작업 -### 01번 MDX → 유형 A -``` -layout_template: A -page_structure: - 배경: topics=[1], weight=0.20 - 본심: topics=[2,3,4], weight=0.55 - 첨부: topics=[5,6], weight=0.15 - 결론: topics=[7], weight=0.10 -``` +**1. block_assembler 유형 B 지원** +- `assemble_slide_html()`이 유형 B 역할도 처리 +- 또는 유형 B 전용 함수 추가 +- filled/after가 제대로 생성되어야 Selenium 측정 가능 -### 02번 MDX → 유형 B -``` -layout_template: B -page_structure: - DX의_궁극적_목표: zone=top, topics=[1], weight=0.45 - 프로세스_혁신: zone=bottom_left, topics=[2], weight=0.25 - 주체별_기대효과: zone=bottom_right, topics=[3], weight=0.20 - 결론: zone=footer, topics=[4], weight=0.10 -``` +**2. 컨테이너 크기 맞춤** +- 현재 렌더링 잘림 → Selenium 측정 후 재배분으로 해결 +- 이건 1번이 해결되면 자동으로 동작 + +**3. 01번(유형 A) 깨지지 않는지 확인** --- -## 주의사항 +## 핵심 원칙 -- 유형 A 코드 건드리지 않음 -- 유형 B는 별도 함수/분기로 추가 -- 01번이 깨지면 롤백 (git: c9677a6) - 하드코딩 절대 금지 -- 각 단계 완료 후 반드시 검증 (하드코딩, 모면용 코드, 기존 깨짐 여부) +- HTML 결과물 고치지 말고 파이프라인 프로세스 고칠 것 +- 제목/텍스트는 원본 MDX에서 그대로 (Kei가 바꾸지 않음) +- Kei가 재구성하는 건 빈 공간 채우기(표 요약)만 +- 유형 A 코드 건드리지 않고 유형 B 추가 +- normalized.sections에서 직접 텍스트 가져옴 (Kei structured_text 대신) diff --git a/PHASE-X-PRIME.md b/PHASE-X-PRIME.md index d5543d5..bb98af0 100644 --- a/PHASE-X-PRIME.md +++ b/PHASE-X-PRIME.md @@ -1,90 +1,111 @@ -# Phase X': 유형 B 파이프라인 개선 6건 +# Phase X': 유형 B 파이프라인 개선 -> 작성일: 2026-04-06 +> 최종 업데이트: 2026-04-06 > 전제: 유형 A 건드리지 않음. 유형 B 파이프라인 프로세스 수정. --- ## 현재 상태 -- 유형 A: ✅ 동작 (01번 MDX) -- 유형 B: 구조(상단+하단2분할+결론) 동작하나 품질 문제 6건 +- 유형 A (배경+본심+첨부+결론): ✅ 동작 (01번 MDX) +- 유형 B (상단+하단2분할+결론): **code_assembled만 동작, 파이프라인(before→filled→after) 미연결** + +## 완료된 것 + +### X'-1: 제목 원본 MDX에서 가져오기 ✅ +- `context.normalized.title` 사용 (Kei title 대신) +- 파일: `src/pipeline.py` Stage 1A + +### X'-2: 들여쓰기 계층 ✅ (code_assembled에서만) +- `###` 소제목 → 카드형 분리 +- 본문 불릿 indent 적용 +- 파일: `scripts/assemble_stage2.py` + +### X'-3: 이미지 캡션 ✅ +- `normalized.images` alt text에서 추출 +- 파일: `scripts/assemble_stage2.py` + +### X'-4: 상단 균등배분 ✅ +- `justify-content:space-between` +- 파일: `scripts/assemble_stage2.py` + +### X'-5: 카드 디자인 ✅ +- 다크 그라데이션 + 밝은 텍스트 +- 파일: `scripts/assemble_stage2.py` + +### X'-6: 표 요약 ✅ (code_assembled에서만) +- `normalized.tables` → pipeline V'-2에서 Kei 요약 → context 저장 +- `_assemble_type_b` 하단 우측에 표출 +- 파일: `src/pipeline.py`, `scripts/assemble_stage2.py` + +### MDX sections 계층 ✅ +- `mdx_normalizer`: `###` (h3) 소목차도 section으로 분리 +- `_assemble_type_b`: `normalized.sections`에서 직접 텍스트 가져오기 +- 대목차/소목차 계층 반영 --- -## 개선 항목 +## 핵심 미해결 문제 -### X'-1: 제목 — 원본 MDX에서 가져오기 +### 유형 B의 before→filled→after 파이프라인이 연결 안 됨 -**문제:** Kei가 슬라이드 제목을 임의로 바꿈 -**원인:** KEI_PROMPT가 title을 Kei에게 만들게 함 -**수정:** Stage 1A에서 Kei 반환 title 대신 `context.normalized.title` 사용 -**파일:** `src/pipeline.py` Stage 1A — 한 줄 수정 -**원칙:** MDX frontmatter의 title을 그대로. Kei는 구조만 판단. +**증거:** +- FILLED: 2997bytes, 한글 80자 (유형 A는 214KB) +- `block_assembler.assemble_slide_html()`이 고정 4역할(배경/본심/첨부/결론)만 처리 +- 유형 B의 자유 역할명(DX_궁극적_목표, 프로세스_변화 등)을 처리 못 함 +- 결과: filled/after가 거의 빈 HTML -### X'-2: 들여쓰기 계층 — 대/중/소제목+본문 +**해결 방향:** +- `block_assembler.assemble_slide_html()`이 유형 B 역할도 처리하도록 +- 또는 유형 B 전용 filled/after 함수 추가 +- `_assemble_type_b`(assemble_stage2)는 code_assembled 전용이므로, 파이프라인의 filled/after에는 별도 로직 필요 -**문제:** 모든 텍스트가 왼쪽 맞춤. 계층 구조 없음 -**원인:** `_assemble_type_b`에서 `##`, `###`, `•`, ` •` 레벨 구분 없이 처리 -**수정:** structured_text에서 `###`=소제목, `•`=본문, ` •`=하위로 인식하여 들여쓰기 -``` -대제목 (## → 꼭지 제목) - 중제목 (### → 카드 소제목) - 본문 (• → 불릿) - 하위 ( • → 하위 불릿) -``` -**파일:** `scripts/assemble_stage2.py` — `_assemble_type_b` 조립 로직 -**원칙:** structured_text의 레벨을 코드가 인식. 하드코딩 아님. +### 렌더링에서 잘림 -### X'-3: 이미지 캡션 — 원본 형식 그대로 +**증거:** +- code_assembled에 모든 내용이 HTML로 있지만 브라우저에서 보면 잘림 +- overflow:hidden + 컨테이너 크기 < 내용 크기 +- 상단 카드가 잘림, 결론이 안 보임 -**문제:** 캡션이 `DX의 궁극적 목표`로 나옴. 원본은 `[그림 2] DX의 궁극적 목표` -**원인:** `[이미지:]` 마커에서 제목만 추출. 원본 MDX의 `![제목](경로)` 형식 미반영 -**수정:** MDX 원본의 이미지 alt text에서 캡션 추출. `![DX의 궁극적 목표](/path)`에서 그대로 -**파일:** `scripts/assemble_stage2.py` — 캡션 추출 + `src/mdx_normalizer.py` (이미지 정보에 alt text 보존) -**원칙:** 원본 그대로. 없으면 빈 캡션. - -### X'-4: 상단 빈칸 — 컨테이너 내 균등 배분 - -**문제:** 상단 컨테이너에서 내용이 위로 몰리고 아래 빈칸 -**원인:** flex-direction: column + align-items: flex-start -**수정:** 컨테이너 내용이 전체 높이에 균등 배분되도록 flex 속성 조정 -**파일:** `scripts/assemble_stage2.py` — `_assemble_type_b` CSS -**원칙:** font_size/gap 기반 동적 계산. 하드코딩 아님. - -### X'-5: 카드 디자인 — 소제목 카드 개선 - -**문제:** 안전과품질/생산성향상/소통과신뢰 카드가 눈에 안 들어옴 -**원인:** 다크배경+노란제목 조합이 가독성 떨어짐 -**수정:** PNG 참고 — 각 카테고리별 구분되는 배경색(다크 그라데이션), 불릿 텍스트 밝은 색, 간격 조정 -**파일:** `scripts/assemble_stage2.py` — `_assemble_type_b` 카드 HTML -**원칙:** design tokens + font_size 기반 동적 계산. 색상은 팔레트에서 순환. - -### X'-6: 표 요약 — 하단 우측에 Kei 요약 표 배치 - -**문제:** 2.2 주체별 기대효과에 원본 표(발주자/시공자/설계자) 데이터가 있는데 결과에 빠짐 -**원인:** 유형 B에서 V'-2(표 요약) 프로세스가 미연결 -**수정:** 유형 A와 동일한 프로세스 — 코드가 하단 우측 공간 계산 → 행/열 수 산출 → Kei에게 원본 표 요약 요청 → 배치 -**파일:** `src/pipeline.py` V'-2 + `scripts/assemble_stage2.py` — `_assemble_type_b` 하단 우측 -**원칙:** 공간에 맞게 동적 계산. 원본 표를 Kei가 요약. +**해결 방향:** +- 컨테이너 크기 계산에서 내용 크기를 고려 +- 또는 Selenium 측정 후 재배분 (이건 filled→after 파이프라인이 동작해야 가능) --- -## 순서 +## Kei가 하는 일 (명확히 정리) -X'-1 → X'-2 → X'-3 → X'-4 → X'-5 → X'-6 +1. **꼭지 찾기 + 그루핑** — MDX 구조 분석 +2. **유형 선택 (A/B)** — 콘텐츠에 맞는 레이아웃 +3. **블록 선택** — 컨테이너에 맞는 블록 타입 +4. **공란에 표/팝업 요약** — 원문 최대 유지 +5. **bold 키워드 판단** — 문맥 기반 -각 단계 완료 후: -- 하드코딩 검사 -- 특정 MDX에만 동작하는 코드 아닌지 확인 -- 유형 A(01번) 깨지지 않는지 확인 +**나머지는 전부 MDX 원본에서 가져옴:** +- 제목, 대목차, 중목차, 소목차, 텍스트 — 원본 그대로 +- 핵심 요약 — 원본 그대로 +- Kei가 텍스트를 재작성하지 않음 --- -## 주의사항 +## 다음 세션 작업 순서 -- 유형 A 코드 건드리지 않음 -- 파이프라인 프로세스를 수정하는 것이지 HTML 결과물을 고치는 것이 아님 -- 하드코딩 절대 금지 -- 제목/텍스트는 원본 그대로 -- Kei가 재구성하는 건 빈 공간 채우기(표 요약)만 +1. **유형 B filled/after 파이프라인 연결** — block_assembler 또는 별도 함수 +2. **컨테이너 크기 vs 내용 크기 맞춤** — Selenium 측정 기반 재배분 +3. **렌더링 잘림 해결** — overflow 처리 +4. **01번(유형 A) 깨지지 않는지 확인** + +--- + +## 관련 파일 + +| 파일 | 역할 | 유형 B 상태 | +|------|------|------------| +| `src/kei_client.py` | KEI_PROMPT (유형 A/B 선택) | ✅ | +| `src/validators.py` | 검증기 (유형 B 완화) | ✅ | +| `src/space_allocator.py` | 컨테이너 생성 (build_containers_type_b) | ✅ | +| `src/pipeline.py` | 파이프라인 분기 (layout_template) | ✅ 분기만 | +| `src/pipeline_context.py` | Analysis.layout_template | ✅ | +| `src/mdx_normalizer.py` | ### 소목차 section 분리 | ✅ | +| `scripts/assemble_stage2.py` | _assemble_type_b (code_assembled) | ✅ | +| `src/block_assembler.py` | assemble_slide_html (filled/after) | ❌ 유형 B 미지원 |