Phase I 실행 완료 + 프로세스 재설계 (Stage 2.5 → Stage 5)

Phase I: 전수 정합성 복구 + 넘침 처리 패러다임 전환 (14개 항목)
- I-14: SSE 유틸 공통 추출 (src/sse_utils.py 신규, 3개 파일 중복 제거)
- I-13: dead code 3건 삭제 (_call_anthropic_direct, _extract_sse_text x2) + import anthropic 제거
- I-1: STEP_B_PROMPT purpose 가이드 미존재 블록 3개 → 실존 블록 교체
- I-2: catalog.yaml not_for 13건 미존재 블록 참조 교체/제거
- I-12: BLOCK_SLOTS 주석 개수 수정 (cards 9, visuals 6, emphasis 10)
- I-10: INDEX.md 38개 동기화 (삭제된 8개 블록 행 제거)
- I-11: README.md 38개 동기화 (_legacy 제거, 트리/개수 정리)
- I-3: PURPOSE_FALLBACK 상수 + purpose 기반 미등록 블록 교체
- I-7: compare-pill-pair 단독 사용 금지 검증
- I-4: 38개 블록 전체에 slot_desc 추가
- I-5: 편집자 프롬프트에 slot_desc 전달 로직
- I-6: 제목 유사도 70% 초과 시 자동 교정
- I-9: 넘침 판단 Kei API 호출 (KEI_OVERFLOW_PROMPT, call_kei_overflow_judgment)
- I-8: 대형 콘텐츠 정보 Kei overflow 프롬프트에 포함

프로세스 재설계:
- Stage 2.5 제거 → Stage 5에서 Sonnet 감지 + Kei 판단 통합
- _review_balance() 확장: zone 예산 + overflow_detected action 추가
- Stage 5 루프에 Kei 넘침 판단 호출 통합
- _apply_adjustments()에 kei_trim/kei_restructure action 추가
- _build_overflow_context(), _convert_kei_judgment() 헬퍼 함수 추가
- DOWNGRADE_MAP은 Kei API 실패 시 비상용으로만 잔존

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-26 13:06:21 +09:00
parent 1c65255f04
commit ffad1ba82a
11 changed files with 1982 additions and 535 deletions

View File

@@ -328,31 +328,50 @@ CLAUDE.md 요구사항 전수검토 결과 발견된 미구현/부분구현/위
---
## Phase I: 전수 정합성 복구 + 10가지 런타임 문제 해결 (13개)
## Phase I: 전수 정합성 복구 + 넘침 처리 패러다임 전환 (14개) ✅ 완료
> **실행 상세:** [IMPROVEMENT-PHASE-I.md](IMPROVEMENT-PHASE-I.md)
> 전수 검토에서 발견된 프롬프트 자기모순 + 슬롯 의미 미전달 + 코드 안전망 부족 해결.
> **핵심 변경: 넘침 시 DOWNGRADE_MAP 자동 교체 → Kei 판단 호출로 전환.**
### 패턴 A: 프롬프트 자기모순 (I-1~I-3) — 최우선
- I-1: STEP_B_PROMPT에서 미존재 블록 3개(quote-left-border, card-text-grid, layer-diagram) → 실존 블록으로 교체
- I-2: catalog.yaml not_for에서 미존재 블록 참조 → 실존 블록으로 교체
- I-3: 미등록 블록 교체를 callout-solution 일괄 → purpose 기반 교체
### Phase I-A: 정합성 복구 (7개) ✅
- I-14: `_stream_sse_tokens()` 3개 파일 중복 → `src/sse_utils.py` 공통 유틸 추출
- I-13: dead code 3건 삭제 (`_call_anthropic_direct`, `_extract_sse_text` x2) + `import anthropic` 제거
- I-1: STEP_B_PROMPT purpose 가이드 미존재 블록 3개 → 실존 블록으로 교체
- I-2: catalog.yaml not_for 13건 미존재 블록 참조 교체/제거
- I-12: BLOCK_SLOTS 주석 개수 수정 (cards 9, visuals 6, emphasis 10)
- I-10: INDEX.md 38개로 동기화 (삭제된 8개 블록 행 제거)
- I-11: README.md 38개로 동기화 (_legacy 제거, 트리/개수 정리)
### 패턴 B: 슬롯 의미 미전달 (I-4~I-5)
- I-4: BLOCK_SLOTS 38개 블록에 slot_desc 추가 (각 슬롯의 의미/예시/구조)
- I-5: 편집자 프롬프트에 slot_desc 전달
### Phase I-B: 블록 선택 + 슬롯 의미 (5개) ✅
- I-3: `PURPOSE_FALLBACK` 상수 + purpose 기반 미등록 블록 교체
- I-7: compare-pill-pair 단독 사용 금지 검증 (`COMPARISON_BLOCKS`)
- I-4: 38개 블록 전체에 `slot_desc` 추가 (각 슬롯 의미/형식/예시)
- I-5: 편집자 프롬프트에 slot_desc 전달 로직 (Kei API 경유)
- I-6: 제목 유사도 70% 초과 시 자동 교정 (`SequenceMatcher`)
### 패턴 C: 코드 안전망 (I-6~I-9)
- I-6: 제목 유사도 검증 (70% 이상 → 자동 교정)
- I-7: compare-pill-pair 단독 사용 금지 (비교 테이블 없으면 comparison-2col로 교체)
- I-8: 대형 테이블(5행+) → detail_target 자동 설정
- I-9: DOWNGRADE_MAP 확장 (medium → compact) + 다단계 교체
### Phase I-C: 넘침 처리 패러다임 전환 (2개) ✅
- I-9: `_validate_height_budget()` → overflow 반환 (블록 교체 안 함) + `_downgrade_fallback()` 비상 분리 + `KEI_OVERFLOW_PROMPT` + `call_kei_overflow_judgment()` Kei API 호출 + pipeline Stage 2.5 추가 (trim/restructure 분기)
- I-8: 대형 콘텐츠(테이블/이미지) 정보를 Kei overflow 프롬프트에 포함
### 문서 동기화 (I-10~I-13)
- I-10: INDEX.md 미존재 블록 제거 (46→38)
- I-11: README.md 동기화 (블록 수, Sonnet fallback 제거)
- I-12: BLOCK_SLOTS 주석 수정
- I-13: 데드 코드(_call_anthropic_direct) 제거
---
## 프로세스 재검토: 검증 시점 문제 (Phase I 후속)
> **상세:** [IMPROVEMENT-PROCESS-REVIEW.md](IMPROVEMENT-PROCESS-REVIEW.md)
> Phase I 실행 후 발견. Stage 2.5의 넘침 판단이 텍스트 없는 시점에서 실행되는 구조적 문제.
**문제:** 6건 (내용 없이 판단, 판단 주체 잘못됨, HTML 있는데 넘침 안 봄, Kei 없음, 높이 측정 없음, 루프에 누락)
**원인:** Phase I에서 DOWNGRADE_MAP → Kei 판단으로 메커니즘만 변경, 위치(Stage 2.5)는 기존 코드 관성으로 유지
**해결:** Stage 2.5 제거 → Stage 5에서 Sonnet 감지 + Kei 판단 통합
- P-1: Stage 2.5 제거 (pipeline.py)
- P-2: `_review_balance()` 프롬프트에 zone 예산 + overflow_detected 추가
- P-3: Stage 5 루프에 Kei 넘침 판단 통합
- P-4: `_apply_adjustments()` kei_trim/kei_restructure action 추가
- P-5: 호출부 analysis 파라미터 추가
**Phase I 영향:** 회귀 없음. `call_kei_overflow_judgment()`, `_downgrade_fallback()`, `KEI_OVERFLOW_PROMPT` 전부 재사용. 호출 위치만 이동.
---