kmlee1
909bf75edc
refactor( #27 ): IMP-27 K5 catalog loader + _get_block_by_id cleanup
...
Consolidate three duplicated catalog readers and two _get_block_by_id
implementations behind a single shared module (src/catalog.py) that owns
file-read + mtime cache. All caller signatures and return contracts
remain byte-identical.
Units:
- u1 NEW src/catalog.py (76 lines): load_root_catalog / load_blocks /
get_block_by_id / get_catalog_mtime as the sole file-read +
mtime-cache owner.
- u2 src/block_reference.py: _load_catalog delegates to load_blocks
(list[dict] preserved); _get_block_by_id (no-arg) delegates to
catalog.get_block_by_id. Module-level _catalog_cache removed.
- u3 src/block_selector.py: load_catalog delegates to load_root_catalog
(root dict preserved); _get_block_by_id (catalog-injected sig
preserved) delegates to catalog.get_block_by_id. Module-level
_catalog_cache / _catalog_mtime / CATALOG_PATH removed.
- u4 src/renderer.py: _load_catalog_map and
_load_catalog_map_with_variants consume catalog.load_blocks; renderer
projection caches kept local but keyed via
catalog.get_catalog_mtime(). Per-projection invalidation keys
(_CATALOG_MAP_MTIME / _CATALOG_VARIANT_MAP_MTIME) introduced. import
yaml, CATALOG_PATH, legacy _CATALOG_MTIME removed.
- tests NEW tests/test_catalog_shared_loader.py (421 lines, 23 cases):
shared loader + 3 wrappers covering single file-read, contract
preservation, signature preservation, shared cache, private state
absence, mtime invalidation propagation to renderer projections.
Verification:
- pytest tests/test_catalog_shared_loader.py -v: 23/23 PASS in 0.13s.
- pytest tests/ -q --ignore=tests/matching: 365/365 PASS in 38.10s.
- src/fit_verifier.py, src/space_allocator.py, src/pipeline.py and
templates/catalog.yaml unchanged (git diff empty).
Out of scope:
- catalog.yaml schema/path unchanged.
- Catalog direct-read call sites in fit_verifier / space_allocator /
pipeline left for a separate follow-up axis.
- Phase Z 22-step runtime, frame_selection, light_edit/restructure
flows untouched.
Refs: IMP-27 (gitea #27 ), INSIGHT-MAP §5 K5, PHASE-Q-AUDIT §2.10
2026-05-20 19:31:26 +09:00
kmlee1 and Claude Opus 4.6
0e4b8c091c
Phase S: Claude HTML 직접 생성 + 독립 검증 시스템 도입
...
블록 선택 방식(Phase P/Q/R) 폐기 → Claude Sonnet이 영역별 HTML 직접 생성.
생성-검증 분리: content_verifier.py로 텍스트 보존/금지 콘텐츠/구조를 코드 검증.
주요 변경:
- src/html_generator.py: 4개 프롬프트 템플릿(BG/CORE/SIDEBAR/FOOTER) + 영역별 Claude 호출
- src/content_verifier.py: L1 텍스트 보존, L2 금지 콘텐츠, L3 구조 검증 + 재시도 루프
- src/html_validator.py: 보안 검증(script/iframe 제거)
- src/renderer.py: render_slide_from_html() 추가, area div overflow:hidden
- scripts/test_phase_s.py: generate_with_retry() 통합, step2b_verification 결과 저장
- 배경 라이트 디자인(#f8fafc), 개조식 어미 변환, 축약 금지 규칙
다음 과제: 폰트 위계(핵심14>본문12>배경10-12>첨부9-11) + 동적 컨테이너 계산
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-31 08:37:05 +09:00