Skip to content

test: add canvas visual diff pipeline#498

Closed
seo-rii wants to merge 7 commits intoedwardkim:develfrom
seo-rii:render-p3
Closed

test: add canvas visual diff pipeline#498
seo-rii wants to merge 7 commits intoedwardkim:develfrom
seo-rii:render-p3

Conversation

@seo-rii
Copy link
Copy Markdown
Contributor

@seo-rii seo-rii commented Apr 30, 2026

변경 요약

P2에서 public Canvas 렌더링 경로를 PageLayerTree replay 기반으로 전환했기 때문에, 이번 PR에서는 legacy Canvas와 layer Canvas 결과를 브라우저에서 직접 비교하는 visual diff 파이프라인을 추가합니다.

구체적으로는 다음을 넣었습니다.

  • rhwp-studio E2E에 legacy Canvas / layer Canvas 픽셀 diff 테스트 추가
  • 기본 fixture 3개 비교
    • basic/KTX.hwp
    • biz_plan.hwp
    • tac-case-001.hwp
  • diff 결과를 results.json / summary.md로 남기고, 실패 시 비교 이미지 artifact를 저장
  • GitHub Actions Render Diff workflow 추가
  • 수동 실행용 입력값 추가
    • fixture 목록
    • page limit
    • full suite 여부
    • 통과 케이스 이미지 저장 여부
  • 로컬/CI 공용 실행 스크립트 npm run e2e:render-diff:ci 추가
  • README / README_EN에 P3 검증 경로 문서화

이 PR은 렌더링 동작을 새로 바꾸는 PR은 아니고, P2 이후의 Canvas 전환이 legacy 경로와 계속 맞는지 잡아내기 위한 회귀 검증 레이어입니다.

관련 이슈

relates #364

범위

이번 PR에서 검증하는 기준은 “브라우저 Canvas에서 legacy PageRenderTree 경로와 기본 PageLayerTree replay 경로가 같은 픽셀 결과를 내는지”입니다.

기본 CI에서는 리뷰 시간을 줄이기 위해 각 fixture의 1페이지만 비교합니다. 더 넓게 보고 싶을 때는 workflow dispatch나 로컬에서 아래 옵션을 쓰면 됩니다.

  • RHWP_RENDER_DIFF_FILES=basic/KTX.hwp,biz_plan.hwp
  • RHWP_RENDER_DIFF_MAX_PAGES=all
  • RHWP_RENDER_DIFF_ALL=1
  • RHWP_RENDER_DIFF_WRITE_IMAGES=1

비목표

  • native Skia / CanvasKit 검증은 포함하지 않습니다.
  • 전체 샘플 전체 페이지 visual regression을 기본 CI로 강제하지 않습니다.
  • 한컴 정답지와의 비교가 아니라, 현재 rhwp 내부의 legacy Canvas와 layer Canvas 사이의 parity 체크입니다.

테스트

  • git diff --check upstream/devel..origin/render-p3
  • node --check rhwp-studio/e2e/canvas-render-diff.test.mjs
  • node --check rhwp-studio/e2e/run-render-diff.mjs
  • wasm-pack build --target web --dev
  • CHROME_PATH=... npm run e2e:render-diff:ci

로컬 render diff 결과는 기본 fixture 3개 모두 0 diff였습니다.

  • basic/KTX.hwp: 0 diff
  • biz_plan.hwp: 0 diff
  • tac-case-001.hwp: 0 diff

cargo test / cargo clippy -- -D warnings는 이번 PR의 직접 변경 범위가 JS E2E와 CI workflow라 별도로 돌리지 않았습니다.

스크린샷

픽셀 diff 실패 시 CI artifact에 legacy/layer/diff 이미지가 올라가도록 했습니다. 현재 기본 fixture는 모두 0 diff라 첨부할 비교 이미지는 없습니다.

Comment thread rhwp-studio/e2e/canvas-render-diff.test.mjs Fixed
@seo-rii seo-rii marked this pull request as ready for review April 30, 2026 09:52
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
…7 commits)

본 PR 은 PR #456 (PageLayerTree replay 전환 P2) 후속 P3 검증 레이어:
- rhwp-studio E2E (canvas-render-diff.test.mjs)
- GitHub Actions Render Diff workflow
- legacy Canvas vs PageLayerTree replay Canvas 픽셀 diff 자동 검증

7 commits 분리 cherry-pick (test + diagnostics + docs + CI runner +
보안 hardening 3건). 변경 영역: JS E2E + CI workflow + Vite 설정 +
문서 (Rust 변경 0).

검증: cargo test --lib 1102 passed, svg_snapshot 6/6, issue_418 1/1,
issue_501 PASS, clippy 0건.

작업지시자 정책: ios/devel 처럼 skia 쪽 렌더러도 별도 브랜치로
운영하여 위험도 낮추는 방법 고려 중. 본 검증 인프라가 향후 별도
backend 실험 시 backend 별 회귀 검출 도구로 활용 가능.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@edwardkim
Copy link
Copy Markdown
Owner

처리 결과 — cherry-pick 머지 (7 commits)

본 PR 의 7 commits 분리 cherry-pick + 머지 완료. 작성자 author 보존 (seorii).

흡수된 commits

Commit 영역
`e3c59f7` test: add canvas visual diff e2e
`2ae8246` test: improve canvas render diff diagnostics
`fd812a5` docs: document canvas render diff workflow
`9895f16` test: add render diff ci runner
`7a1a2d0` fix: harden render diff security
`8f27193` fix: allow studio root in render diff server
`ac7a3b7` fix: harden render diff fixture handling

검증

  • cargo test --lib: 1102 passed (Rust 변경 없으므로 영향 없음)
  • svg_snapshot 6/6, issue_418 1/1, issue_501 PASS, clippy 0건
  • WASM 빌드: PR CI 의 WASM Build = skipping 정합 (Rust 변경 0)

머지

  • 머지 commit: `7a55510`
  • devel push 완료
  • 본 PR 머지 후 `Canvas visual diff` CI job 자동 실행 — 향후 PR 의 Canvas parity 회귀 자동 검출

후속 정책 안내

메인테이너가 `ios/devel` 같은 별도 브랜치 패턴으로 skia 쪽 렌더러도 별도 브랜치를 생성해서 위험도를 낮추는 방법 을 고려 중입니다.

  • 본 `devel` 의 Rust 본질 영역 (parser/renderer/serializer) 와 격리
  • skia / CanvasKit / ThorVG / CoreGraphics 등 독립 backend 를 별도 브랜치에서 실험 가능
  • 본 PR 이 추가한 검증 인프라 (legacy Canvas ↔ layer Canvas parity) 가 향후 별도 backend 실험 시 backend 별 회귀 검출 도구로 활용 가능

따라서 본 PR (P3 검증 레이어) 은 본 `devel` 흡수, Skia/ThorVG 등 실제 backend 구현은 별도 브랜치 영역으로 분리하는 정책으로 진행 예정입니다.

처리 보고서: `mydocs/pr/pr_498_report.md`

본 PR 은 close 합니다. 회귀 검증 도구 추가 감사합니다.

@edwardkim edwardkim closed this Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
본 사이클 본질:
- Task #501 (cell.padding 한컴 방어 로직 모방 정정, closes #501)
- PR #428 (oksure — 그룹 내 그림 직렬화)
- PR #494 (DanMeon — Paragraph::utf16_pos_to_char_idx 외부 노출, #484)
- PR #478 (planet6897 — 7 Task / 10 commits cherry-pick: #488/#490/#483/#489/#495/#480/#476)
- PR #498 (seo-rii — Canvas visual diff 파이프라인, relates #364)

미흡수 + 분리:
- 이슈 #502 (#495 잔존 — 문단 내 글상자 TextRun 처리)
- 이슈 #503 (#479 미흡수 — 한컴 2020 시각 판정 필수)

버전 갱신: Cargo.toml + npm/editor + rhwp-studio + rhwp-vscode 모두 0.7.8 → 0.7.9.
CHANGELOG (한/영) 갱신, rhwp-vscode/CHANGELOG.md 갱신.
README 기여자 감사 누적 갱신 (cskwork/DanMeon/oksure/planet6897/seanshin/seo-rii 추가).

검증: cargo build OK, cargo test --lib 1102 passed, cargo clippy 0건, WASM 빌드 정합.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 30, 2026
Release v0.7.9 — Task #501 cell.padding 한컴 방어 로직 + PR #428/#494/#478/#498 cherry-pick
edwardkim added a commit that referenced this pull request May 1, 2026
본 사이클:
- rhwp-chrome / Edge v0.2.2: 4 파일 버전 동기화 (manifest + package +
  dev-tools-inject + content-script — v0.2.0 hotfix 사례 정합)
- rhwp-firefox v0.2.2: 동일 영역, content-script.js 는 manifest 동적
  참조로 자동 정합

라이브러리 코어 v0.7.3 → v0.7.9 (4 사이클) 갱신 — Task #501 + PR
#428/#494/#478/#498 누적 + v0.7.6/v0.7.7/v0.7.8 사이클 흡수.

등록 문구:
- chrome-0.2.2_kor.md / chrome-0.2.2_eng.md (한/영) — Chrome/Edge
  공통 + AMO 등록 정보
- edge-0.2.2_reviewer_notes.md — Edge 파트너 센터 Notes for
  certification (1,918자, 2,000자 한계 내)
- chrome-0.2.1 한/영 등록 문구 백업

자기검열 grep (feedback_external_docs_self_censor 메모리 룰): 통과
AMO 4 함정 (feedback_amo_submission_gotchas 메모리 룰): 통과

빌드 환경: Node v22.18.0 (rolldown 호환).
빌드 결과:
- rhwp-chrome.zip 16 MB
- rhwp-firefox.zip 12.9 MB
- rhwp-source-0fb3e67.zip 47.9 MB (AMO 소스 제출)

3 스토어 제출 완료:
- Chrome Web Store (1~3 영업일 심사)
- Microsoft Edge Add-ons (1~2 영업일)
- Mozilla AMO (1~5 영업일)

.gitignore: rhwp-chrome/*.zip, rhwp-firefox/*.zip, rhwp-firefox/dist/
추가 (빌드 산출물 누적 차단)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 1, 2026
본 사이클 17번째 PR. HWP 3.0 (한컴 1990년대~2000년대 초반 레거시
포맷) 첫 오픈소스 파서 구현 + Square wrap 어울림 렌더링 정정.

본 PR 머지로 rhwp = HWP 5.0 + HWPX + HWP 3.0 3 포맷 모두 지원.

본질:
- Task #417: HWP 3.0 파서 본질 (Stage 1~4)
- Task #460: Square wrap + 렌더러 정정 (Stage 1~9 + 보완 1~3 + 리팩토링)
- 작성자 분기에서 본 사이클 devel (Task #501 + PR #478 + PR #498 +
  v0.7.9) 이미 흡수 → 충돌 해결 보존

옵션 B (단일 머지) 선택. 51 commits 의 작성자 단계 보고서 보존 +
본 사이클 회귀 영역 (issue_501 PASS) 통과.

검증: cargo test --lib 1105 passed (1102 + HWP 3.0 신규 3),
svg_snapshot 6/6, issue_418 1/1, issue_501 PASS, clippy 0건,
WASM 4,378,441 bytes (+176 KB Johab 매핑 + 파서).

작업지시자 통찰: "이제 우리도 HWP 3.0 포맷까지 성공했습니다.
컨트리뷰터가 대단합니다."

머지 commit: c7330cf

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim pushed a commit that referenced this pull request May 4, 2026
# Conflicts:
#	Cargo.toml
#	mydocs/orders/20260420.md
#	src/document_core/queries/rendering.rs
#	src/lib.rs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants