v0.0.4 — Phase 1 refactor (_Action + Color/UNSET)
🔧 Phase 1 리팩토링 릴리즈
리팩토링 계획 에 따른 첫 번째 릴리즈. P0 긴급 버그 수정.
P0-1: _Action 문서 바인딩 버그 수정 🔴
증상: _Action.__init__ 에서 CreateAction() 을 한 번만 호출해 캐싱 → 초기 활성 문서에 고정 → 이후 다른 문서 전환 시에도 원본 문서에 쓰기 발생
수정: act, pset 을 @property 로 재설계, 활성 문서 ID 별 lazy-cache
# Before: 버그 — 모두 doc1 에 쓰임
doc2.activate()
app.actions.CharShape.run() # ⚠️ doc1 에 적용
# After: 정상 동작
doc2.activate()
app.actions.CharShape.run() # ✅ doc2 에 적용P0-2: Color 래퍼 + UNSET 센티넬 🟠
증상: shade_color="#FFFFFF" 가 "제거" 인지 "흰색 shade 적용" 인지 모호 → 의도치 않은 shade 누수
수정: 새 타입 2개 도입
from hwpapi.parametersets import Color, UNSET
# 명시적 의미론
prop = UNSET # 변경 없음 (no-op)
prop = None # 필드 제거
prop = "#FF0000" / Color / int # 정규화 후 저장
# 28개 색상 필드 자동 변환 (TextColor, ShadeColor, Border*Color 등)P1-1 부분 진행
hwpapi/core/app.py(2,322줄) → Document/Documents 를document.py로 분리 (1,930줄로 감소)- 남은 app.py 분할은 다음 릴리즈에서 진행
기타
- 21개 새 단위 테스트 (
test_color_semantics.py) → 총 1,194 unit tests 통과 CHANGELOG.md도입- API 레퍼런스 재생성 (277K chars, 6,703줄)
호환성
- 100% backward compatible — 모든 기존 코드가 수정 없이 동작
- 신규 객체
Color,UNSET는 opt-in
Full changelog
https://github.com/JunDamin/hwpapi/blob/main/CHANGELOG.md
전체 변경: v0.0.3...v0.0.4