Phase N+O: 컨테이너 기반 레이아웃 + Step B 제거 + 전면 정리

- Phase N: catalog 개선, fallback 전면 제거, Kei API 무한 재시도, topic_id 버그 수정
- Phase O: 컨테이너 스펙 계산(비중→px), 블록 스펙 확정, 렌더러 container div
- Step B(Sonnet) 제거: Kei(A-2)+코드로 대체. STEP_B_PROMPT/fallback/DOWNGRADE_MAP 삭제
- Selenium: container div 감지 추가
- catalog.yaml: ref_chars 구조 변환 + FAISS 재빌드
- 문서 전면 갱신: README, PROGRESS, IMPROVEMENT, Phase I~O md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-27 15:20:51 +09:00
parent ffad1ba82a
commit b0bcffc0f6
28 changed files with 8450 additions and 1530 deletions

View File

@@ -375,6 +375,161 @@ CLAUDE.md 요구사항 전수검토 결과 발견된 미구현/부분구현/위
---
## Phase J: 블록 선택 권한 구조 재정의 + 최종 검토 Kei 전환 (7개) ✅ 완료
> **실행 상세:** [IMPROVEMENT-PHASE-J.md](IMPROVEMENT-PHASE-J.md)
> Phase I 완료 후 결과물 3회 비교에서 확인. Sonnet(팀장)이 Opus(실장) 추천을 엎고, 자기가 만든 문제를 자기가 검토하는 구조적 문제.
### Phase J-A: 팀장 권한 제한 + 가이드 수정 (5개)
- J-1: STEP_B_PROMPT "Opus 추천 존중" 규칙 강화 — "참고" → "기본 사용, 변경 금지"
- J-2: section-header-bar body 사용 금지 — BODY_FORBIDDEN_MAP에 추가 (삭제 처리)
- J-3a: purpose 가이드 수정 — 용어정의/근거사례에서 card-icon-desc 제거 → card-numbered
- J-3b: catalog.yaml 수정 — "용어 정의 → card-icon-desc" → "card-numbered"
- J-6: sidebar 카드 1열 강제 — 템플릿 column_override + design_director 주입
### Phase J-B: 편집자 강화 (1개)
- J-4: source 슬롯 금지 규칙 — EDITOR_PROMPT에 출처 규칙 추가 (Kei 편집자 경유)
### Phase J-C: 최종 검토 Kei 전환 (1개)
- J-7: Stage 5 _review_balance() → Kei API 호출로 전환 — KEI_REVIEW_PROMPT + call_kei_final_review() 신규
---
## Phase K: communicative role 기반 시각적 위계 + 콘텐츠 시퀀싱 (8개)
> **실행 상세:** [IMPROVEMENT-PHASE-K.md](IMPROVEMENT-PHASE-K.md)
> Phase J 이후에도 결과물 품질 미개선. purpose를 분류하고도 시각적 결과에 반영하지 않은 것이 근본 원인.
> 사용자 반복 요청(콘텐츠 구조 흐름)을 이번에 전부 반영.
### K-Step 1: 콘텐츠 설계 (가장 중요)
- K-1: purpose → 시각적 위계 매핑 (핵심전달=주인공, 문제제기=compact)
- K-2: purpose 기반 인지 흐름 순서 원칙 (하드코딩 아닌 원칙)
- K-4: purpose별 분량 제약 (문제제기 max 100자, 핵심전달 200-400자 등)
### K-Step 2: 블록 선택 정확성
- K-3: purpose별 허용/금지 블록 매핑
- K-6: sidebar 시각적 무게 조절
- K-8: 비교 블록 맥락 안내
### K-Step 3: 코드 + 검수
- K-5: column_override 보존 (content_editor.py)
- K-7: Kei 검수에 구조 흐름 검증 추가
---
## Phase K-1: 파이프라인 스텝별 중간 산출물 로컬 저장
> **실행 상세:** [IMPROVEMENT-PHASE-K1.md](IMPROVEMENT-PHASE-K1.md)
> 각 스텝에서 뭘 결정했고 왜 그렇게 했는지를 파일로 저장. 사용자가 확인하고 피드백 가능.
- `data/runs/{timestamp}/` 폴더에 step별 JSON + HTML 저장
- step1 (Kei 분석) → step2 (블록 매핑) → step3 (텍스트) → step4 (렌더링) → step5 (검수) → final
---
## Phase L: 렌더링 측정 에이전트 + Purpose 기반 공간 할당 + 수학적 조정 (11건)
> **실행 상세:** [IMPROVEMENT-PHASE-L.md](IMPROVEMENT-PHASE-L.md)
> Phase I~K에서 미충족 7건 + 부분충족 4건의 근본 원인: 실제 렌더링 px 측정 없음.
> LLM 추정이 아닌 코드 계산 + 브라우저 측정으로 전환.
### L-Step 1: 공간 할당 엔진
- PURPOSE_WEIGHT 비율 할당 + allocate_height_budget() 함수
- calculate_trim_chars() 수학적 글자 수 계산
### L-Step 2: 렌더링 측정 에이전트
- measure_rendered_heights() — Selenium headless
- 각 zone/block의 scrollHeight, clientHeight, overflow 정확 측정
### L-Step 3: CSS max-height 제약
- purpose별 할당 높이를 CSS max-height로 적용
- 물리적으로 넘치지 않게 구조적 보장
### L-Step 4: 피드백 루프
- 측정 → 초과 시 수학적 축약량 계산 → 편집자 재호출 → 재측정
- Kei 검수에 실제 px 수치 전달 → 근거 있는 검수
---
## Phase M: 비중 시스템 + 역할-블록 매핑 + 블록 안전성 + 원본 보존 (9건)
> **실행 상세:** [IMPROVEMENT-PHASE-M.md](IMPROVEMENT-PHASE-M.md)
> P-1~P-9 문제점 전수 진단. 비중 시스템(Kei 판단, 하드코딩 아님) 기반 전면 재설계.
### M-Step 1: [긴급] Kei 비중 시스템 (P-1 + P-2 + P-4)
- Kei가 콘텐츠마다 본심/배경/첨부/결론 + weight 판단
- PURPOSE_WEIGHT 하드코딩 제거 → Kei 출력 weight 사용
- weight → px 변환 → 블록 크기/배치 자동 결정
### M-Step 2: [중요] 역할-블록 매핑 (P-3)
- 역할 × 콘텐츠 성격 → 블록 결정 매트릭스
---
## Phase N: 4대 핵심 문제 해결 ✅ 완료
> **실행 상세:** [IMPROVEMENT-PHASE-N.md](IMPROVEMENT-PHASE-N.md)
> catalog 개선, fallback 전면 제거, topic_id 버그 수정, 무한 재시도 체계.
- N-1: 블록 선택 코드 레벨 강제 — Kei 확정 블록을 Sonnet이 변경 불가 + topic_id/id 양쪽 체크
- N-2: 사이드바 섹션 제목 — Kei가 section_title 출력 + divider-text 자동 삽입
- N-3: max-height CSS 래퍼 제거 — 콘텐츠는 _max_chars로 사전 조절, CSS로 사후 자르기 금지
- N-4: Stage 5 스크린샷 검수 — Selenium 스크린샷 → Opus 멀티모달로 실제 렌더링 보고 검수
- **Kei API 무한 재시도** — 모든 Kei API 호출을 성공할 때까지 무한 재시도. fallback/기본값/rule-based 대체 전면 제거
- **catalog.yaml 전면 개선** — 38개 블록의 when/not_for/purpose_fit 재작성 + FAISS 인덱스 재빌드
- **삭제:** manual_classify(), _apply_defaults(), _downgrade_fallback(), PURPOSE_FALLBACK 대체용 코드
---
## Phase O: 컨테이너 기반 레이아웃 시스템 🟡 진행 중
> **실행 상세:** [IMPROVEMENT-PHASE-O.md](IMPROVEMENT-PHASE-O.md)
> Phase N 완료 후 여전히 비중이 시각에 반영 안 되는 근본 문제 해결.
**핵심 원칙:** "비중이 컨테이너를 확정 → 컨테이너가 블록을 제약 → 블록이 콘텐츠를 제약"
- O-1: 컨테이너 스펙 계산 — ✅ 완료 (calculate_container_specs)
- O-2: 블록 선택에 컨테이너 제약 전달 — ✅ 완료 (Kei 프롬프트 + height_cost 검증)
- O-3: 블록 스펙 확정 — ✅ 완료 (finalize_block_specs)
- O-4: 편집자에 블록 스펙 전달 — ✅ 완료 (_container_height_px, _max_items 등)
- O-5: 렌더러 비중 기반 grid row — ✅ 완료 (container div 생성)
- O-6: 파이프라인 흐름 변경 — ✅ 완료 (Phase M 코드 교체)
- O-7: 리포트 확장 — 🟡 미완 (새 중간 산출물 표시 추가 필요)
- **미세 조정 필요:** 배경 117px / topic 2개 = 58px에 medium 블록 안 맞는 문제
- **Selenium 측정:** container div 셀렉터 추가 필요
### Step B 제거 + 죽은 코드 정리 ✅ 완료
Phase O에서 Kei(A-2) + 코드가 모든 것을 결정하면서 Step B(Sonnet)가 완전히 무력화됨 → 제거.
**삭제된 코드:**
- `STEP_B_PROMPT` (~100줄 프롬프트)
- Step B Sonnet API 호출 코드 (~250줄)
- `_fallback_layout()` (Step B 실패 시 rule-based)
- `PURPOSE_FALLBACK` (미등록 블록 대체)
- `DOWNGRADE_MAP` (블록 다운그레이드)
- `_downgrade_fallback()` (비상 교체)
- `_apply_defaults()` (편집 실패 시 기본값)
- `import anthropic` (design_director.py에서)
- O-6: 파이프라인 흐름 변경 — 1B 후 컨테이너 계산, Step B 후 블록 스펙 확정
- O-7: 리포트에 컨테이너/블록 스펙 표시
**기존 코드 교체 (충돌 해결):**
- `_max_height_px``_container_height_px` (pipeline.py 155~198행 교체)
- `allocate_height_budget()``calculate_container_specs()` (호출부 교체)
- `_max_chars` 단일값 → `_max_items` + `_max_chars_per_item` (content_editor.py 교체)
- Selenium `_MEASURE_SCRIPT` — container div 셀렉터 추가
- Phase L 축소 로직 — `_max_chars_total` 축소로 변경
- fonttools 의존성 + Pretendard .ttf 파일 추가
### M-Step 3: [중요] 블록 안전성 (P-5 + P-6 + P-7 + P-8)
- Figma 블록 식별, zone 적합성 맵, 글자 수용량, 내부 overflow 감지
### M-Step 4: [보통] 원본 보존 (P-9)
- source_text 직접 전달, 재작성 금지 강화
---
## Phase별 의존 관계
```