feat: v0.6.0 — 페이지 PNG 렌더링 (VLM 입력)#18
Merged
Merged
Conversation
변경사항: - docs/roadmap/v0.6.0/png-vlm-render.md spec 신규 작성 (Draft, target v0.6.0) — VLM 입력용 PNG 렌더 API + [png] extras + MCP ImageContent 출력 - docs/design/v0.6.0/png-vlm-render-research.md ADR 신규 작성 — native-skia feature 활성화 / API mirror / PNG-only 코덱 / ImageContent 채택 / max_pixels SSOT 5건 결정 근거 - docs/roadmap/README.md active spec 인덱스에 v0.6.0 행 추가 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - PNG 표면을 default wheel 통합으로 변경 (별도 [png] extras 제거) - _png_marker / ImportError 가드 / 관련 인수조건 (AC-1, AC-8) 삭제 - max_pixels default 67_108_864 (8192×8192) 확정값 기록 - 검증자 반박을 cli / mcp 와의 본질 차이로 재작성 (PNG 는 native binary 단독 동작) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - 페이지 단위 / 일괄 / 디스크 export 3 메서드 (PDF API mirror) - Cargo.toml 의 rhwp 의존성에 native-skia feature 활성화 - skia raster 실행 구간 GIL 해제 (owned PageLayerTree 를 py.detach 클로저로 이동) - 사용자 옵션 scale / dpi / max_pixels (keyword-only) — 상류 RasterRenderOptions wire-through Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - Document.render_png / render_all_png / export_png wrapper 메서드 + docstring - 모듈-level arender_png(path, page) async 함수 (aparse + sync render 패턴) - _rhwp.pyi / __init__.py / __init__.pyi stub 갱신 - testing dependency-group 에 pillow>=10 추가 — 회귀 테스트의 디코드 / dimension 검증용 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - mcp/tools.py: render_page_png(path, page, *, scale, max_pixels) → ImageContent - base64 인코딩 + mimeType="image/png" — fastmcp v3 표준 - mcp/server.py: build_server() 에 도구 등록 (7 → 8) - spec AC-5 의 mime_type 표기를 mimeType 으로 정정 (실제 ImageContent 필드명) - uv.lock: [png] extras 잔여 정보 정리 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - tests/test_render_png.py — Document.render_png / render_all_png / export_png / arender_png / MCP render_page_png 검증 (per-test spec 마커) - AC-3 dimension 검증은 Pillow 디코드, AC-5 MCP 는 fastmcp 미설치 시 per-test skip - coverage.md trace 자동 갱신 (7 신규 매핑) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - Cargo.toml version 0.5.1 → 0.6.0 (pyproject 는 dynamic, Cargo 가 SSOT) - CHANGELOG [0.6.0] 섹션 신설 — Added (3 메서드 + arender + MCP) / Build (native-skia 통합 + Pillow testing) / 기존 [Unreleased] 의 doc system 변경 흡수 - README § "페이지 PNG 렌더링 (VLM 입력)" 섹션 — render_png 사용 예 + Anthropic Vision API 호출 - MCP 도구 표 7 → 8 갱신 (render_page_png 추가, Claude Desktop 안내 텍스트 동기화) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - spec / ADR frontmatter status: Draft → Frozen, target → ga: v0.6.0 - docs/implementation/v0.6.0/migration.md 신규 (Frozen 즉시) — 산출물 / 결정 매핑 / 호환성 / 검증 / 작업 중 단순화 (extras α → default 통합 β) / GA 절차 인계 - roadmap/README.md: 현재 상태 v0.6.0 GA (2026-05-10) 추가, 활성 spec 인덱스 row 를 Frozen 으로, 미정 narrative 를 v0.7.0+ 로 시프트, 구현 로그 표에 v0.6.0 row 추가 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항:
- tests/test_mcp_server.py: TestToolRegistry 의 7-tool hard-assert → 8-tool set 매칭 (render_page_png 포함). lazy extras 테스트는 sentinel 가드로 단순화
- tests/test_render_png.py: file-level pytest.importorskip("PIL.Image") 추가 — test-without-extras job 의 Pillow 부재 환경에서 파일 1 skip
- .github/workflows/ci.yml + AGENTS.md: expected skip count 5 → 6 (Pillow gated 파일 추가)
- python/rhwp/document.py: render_all_png / export_png 의 Raises 블록 indent 손상 fix
- pyproject.toml: testing 그룹 pillow 코멘트의 stale "[png] extras 의 짝" 정리 (default 통합 결정 정합)
- migration.md: § 호환성 / § 알려진 한계 의 PIL importorskip 라인을 본 fix 반영으로 정정
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - 후속 fix commit 참조 표현 정리 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - build-linux-wheel + cargo-test 에 apt-get install libfreetype-dev libfontconfig1-dev 단계 추가 - Cargo.toml 의 native-skia feature 활성화로 skia-safe 가 Linux 동적 링크하던 두 라이브러리가 ubuntu runner 에 미내장이라 link error 발생 (macOS / Windows 는 시스템 framework 자체 해결) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - test / test-slow / test-without-extras 의 uv run pytest|pyright 호출에 --no-sync 추가 - uv 의 자동 sync 가 프로젝트를 editable 빌드 시도하면 native-skia 의 freetype / fontconfig dev 필요 → 빌드된 wheel 만 install 한 환경에서 fail - build-linux-wheel 이 만든 wheel artifact 를 그대로 재사용하도록 강제 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
변경사항: - nodes.py 의 to_markdown / to_html 의 render_markdown / render_html 호출에 # type: ignore[arg-type] 추가 - pyright 1.1.409 부터 Self 타입과 nominal class 가 다르게 추론되어 py3.10 lint matrix 에서 fail (1.1.408 까지는 통과). 동일 클래스 호출이라 안전 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Document.render_png(page) -> bytes/render_all_png()/export_png(out_dir)신규 + 모듈-levelarender_png(path, page)asyncrender_page_png추가 (ImageContent출고) — v0.5.0 의 7 도구 → 8 도구Why
v0.4.0 view 렌더러 (Markdown / HTML) + v0.5.0 MCP server 가 텍스트 표면만 LLM 에 노출 — 표 셀 병합, 수식의 공간 배치, 복잡 레이아웃의 시각 의미 는 IR 평탄화에서 소실됐음. Vision-capable LLM (Claude / GPT-4V / Gemini Vision) 이 이미지 입력을 1차 시민으로 다루는 환경에서, 페이지를 raster 로 렌더해 함께 보내면 텍스트가 못 살리는 시각 정보를 보완할 수 있음.
상류 edwardkim/rhwp v0.7.10 (PR #599) 의
SkiaLayerRenderer::render_raster_with_options위 thin wrapper. PyO3 binding + GIL 해제 패턴 + Python API + MCPImageContent출고만 본 release 가 책임.배포 형태는 default wheel 통합 —
pip install rhwp-python만으로 즉시 사용 가능 (별도 extras 없음, wheel 약 30 MB 증가).검증: `pytest -m "not slow"` 592 passed, `cargo clippy` clean, `lint_docs.py` exit 0.
spec / ADR / impl-log: docs/roadmap/v0.6.0/png-vlm-render.md (Frozen) / docs/design/v0.6.0/png-vlm-render-research.md (Frozen) / docs/implementation/v0.6.0/migration.md (Frozen).
Related Issues
—