fix: Visual Diff 기반 렌더링 호환성 개선 — PUA 심볼 + 문단 테두리 + 표 외곽 테두리 (#249)#251
Merged
edwardkim merged 5 commits intoApr 23, 2026
Merged
Conversation
added 5 commits
April 23, 2026 08:13
Wingdings 등 심볼 폰트의 PUA 영역(U+F000~F0FF) 문자를 유니코드 표준 문자로 변환하여 세 렌더러에서 정상 표시. - ⇩⇧⇦⇨ 화살표, ●■◆ 도형, ✔☑ 체크마크 - SVG/Canvas/HTML 세 경로에 map_pua_bullet_char() 일관 적용
border_fill 렌더링 시 문단 여백(margin_left, margin_right)을 적용하여 테두리 박스가 텍스트 영역과 정확히 일치하도록 수정.
- table.border_fill_id가 설정된 경우 외곽 테두리 그리기 추가 - 셀로 커버된 영역을 제외하고 셀 미커버 영역에만 fallback 적용 - clip_rect를 콘텐츠 레이아웃 후 확정하여 표 외곽 테두리가 잘리지 않도록 수정
- mydocs/plans/task_m100_249.md — 수행계획서 (Visual Diff + PUA + 문단/표 테두리) - mydocs/plans/task_m100_249_impl.md — 구현계획서 (3단계) - mydocs/report/task_m100_249_report.md — 최종 결과보고서 - mydocs/plans/task_m100_250.md — 수행계획서 (Right Tab 정렬, 별도 PR)
Owner
|
놀랍습니다. 이렇게 빠른 시간에 하이퍼-워터폴에 따라 PR 보내주시다니! |
Owner
|
@seanshin 감사합니다. 머지 완료했습니다. 어제 PR #234 의 리젝트 피드백을 모두 정확하게 반영해주셔서 재검토가 수월했습니다. 특히:
FIRST_TIME_CONTRIBUTOR 첫 PR 에 이 정도로 프로젝트 규칙을 학습해주셔서 앞으로가 더 기대됩니다. 사전 검증 결과 (로컬):
Visual Diff 파이프라인은 이번 PR 에 포함되지 않았지만, 다음 기여에서 공개해주시면 프로젝트의 회귀 검증 인프라 (PR #181 의 SVG snapshot 하네스와 병존) 에 큰 도움이 될 것 같습니다. Right Tab (#250) PR 작성하실 때도 이번 방식 그대로 올려주시면 됩니다. 감사합니다. |
edwardkim
added a commit
that referenced
this pull request
Apr 23, 2026
… + table border) PR #251 (by @seanshin · #249) 머지 후 CI Build & Test 실패: - test form_002_page_0 ... FAILED - test table_text_page_0 ... FAILED 원인: PR #251 의 3가지 렌더 수정이 SVG 출력에 의도된 미세 변화를 발생시킴. - PUA 심볼 문자 → 유니코드 표준 문자 (map_pua_bullet_char) - 문단 border_fill margin 반영 (margin_left/right 적용) - 표 외곽 테두리 fallback + 셀 미커버 영역 한정 determinism probe (render_is_deterministic_within_process) 는 통과 → 하네스 자체는 정상, golden 만 outdated. UPDATE_GOLDEN=1 cargo test --test svg_snapshot 로 재생성 후 결정성 재검증. Verification: - cargo test --test svg_snapshot → 3 passed (form_002 + table_text + determinism) - 두 번째 실행 back-to-back 결정성 유지 - 변경 규모: +3/-3 (PR #251 의 국소 렌더 수정 반영분만) CI 실패 로그: run #24809115353 Refs #249 · #181 (hwpx snapshot harness) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author
|
감사합니다! 하이퍼-워터폴 구조 덕분에 단계별로 검증하면서 진행할 수 있었습니다. Right Tab(#250)도 동일한 방식으로 PR 올리겠습니다. Visual Diff 파이프라인은 이슈 #253에 상세히 공유드리겠습니다. |
Author
|
멋진 프로젝트를 진행하고 게신다고 찬사를 보내드립니다.
소소한 기여를 하고 싶은 마음 정도입니다. 공공문서들이 꽤 많아서, 그거 비교하면서, 소소하게 기능이 보강된다면 어떨까하는 마음에서
시작한 것입니다.
오늘도 즐거운 하루 시작하세요~
2026년 4월 23일 (목) 오전 9:05, edward kim ***@***.***>님이 작성:
… *edwardkim* left a comment (edwardkim/rhwp#251)
<#251?email_source=notifications&email_token=ACA5FZBXDAXPXNM4R6IRNO34XFM5TA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTIMZQGA3TGNZRGY3KM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJNLQOJPWG33NNVSW45C7N5YGK3S7MNWGSY3L#issuecomment-4300737166>
@seanshin <https://github.com/seanshin> 감사합니다. 머지 완료했습니다.
어제 PR #234 <#234> 의 리젝트 피드백을 모두
정확하게 반영해주셔서 재검토가 수월했습니다. 특히:
- base 를 devel 로 정정하고 작업을 feature 브랜치로 분리하신 점
- 메타 변경 (Cargo.toml / CHANGELOG / README) 을 릴리즈 시점으로 분리하신 점
- Right Tab 정렬은 별도 이슈 #250
<#250> 으로 빼내어 범위를 깔끔히 하신 점
- 수행계획서 / 구현계획서 / stage 1~3 완료보고서 / 최종 결과보고서까지 프로젝트의 하이퍼-워터폴 구조를 그대로
맞춰주신 점
FIRST_TIME_CONTRIBUTOR 첫 PR 에 이 정도로 프로젝트 규칙을 학습해주셔서 앞으로가 더 기대됩니다.
사전 검증 결과 (로컬):
- 자동 머지 충돌 0
- `cargo test --lib` 941 passed
- `cargo clippy -- -D warnings` 0 warning
Visual Diff 파이프라인은 이번 PR 에 포함되지 않았지만, 다음 기여에서 공개해주시면 프로젝트의 회귀 검증 인프라 (PR
#181 <#181> 의 SVG snapshot 하네스와 병존)
에 큰 도움이 될 것 같습니다.
Right Tab (#250 <#250>) PR 작성하실
때도 이번 방식 그대로 올려주시면 됩니다. 감사합니다.
—
Reply to this email directly, view it on GitHub
<#251?email_source=notifications&email_token=ACA5FZBXDAXPXNM4R6IRNO34XFM5TA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTIMZQGA3TGNZRGY3KM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJNLQOJPWG33NNVSW45C7N5YGK3S7MNWGSY3L#issuecomment-4300737166>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACA5FZFQ7UUJKU2CEPVUB2D4XFM5TAVCNFSM6AAAAACYC6567SVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DGMBQG4ZTOMJWGY>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
--
===============================================================
*신현묵, Sean Shin, velog ***@***.***>, 블로그
<https://blog.naver.com/zetlos>, 브런치 ***@***.***>,* 페이스북
<http://facebook.com/zetlos>, 팟캐스트 <http://www.podbbang.com/ch/1774012>
'백세코딩', 스스로의 삶을 프로그래밍 하라 <http://www.yes24.com/24/goods/13895529>
===============================================================
전) 우리들병원그룹, WGIMC IT전략담당이사. 관동대학교 명지병원 정보통신팀 팀장. 지식경제부, IT융합지원센터
기획위원장. 지식경제부 디지털병원수출지원사업 (기술위원장). 한국디지털병원 수출사업협동조합 (IT전략 전문위원). 대한의료정보학회
기획의원, NIPA 실무아키텍트 포럼 의료분과장, 기술표준원 스마트의료 기획위원, 스윗트래커 CTO, 케어랩스 CTO/ 굿닥사업부
서비스본부장, 와탭랩스 CBO, 뉴로핏 부사장/CPO, 페오펫 기술고문, 케어마인드 부사장
자문 : 아크릴, 인피니트 헬스케어, NHN Labs, 말랑스튜디오, 핀다, AX, 4차산업위 헬스케어분과 기획위원
===============================================================
This e-mail may contain confidential information and is intended only for
the individual(s) named above. If you are not the named addressee, you
should not disseminate, distribute or copy this e-mail. Please notify the
sender immediately by e-mail if you have received it by mistake and delete
it from your system. E-mail transmission cannot be guaranteed to be secure
or error-free as information could be intercepted, corrupted, lost,
destroyed, or incomplete. This e-mail may arrive late or contain viruses.
The sender therefore does not accept liability for any errors or omissions
in the contents of this message, which arise as a result of e-mail
transmission.
본 메일에는 비밀정보가 포함되어 있을 수 있으며, 이 메일은 위의 수신자에게만 발송된 것입니다. 위의 수신자가아니면 본 메일을 유포,
배포, 복사를 해서는 안됩니다. 본 메일이 잘못 전송된 경우 즉시 메일 발신자에게 알려주시고, 아울러 이 메일을 삭제해 주시기
바랍니다. 전자메일은 정보의 도청, 변조, 손실, 훼손, 지연 도착, 일부 멸실, 바이러스 감염 등이 발생할 수 있어 보안성이나
무결성을 보장받지 못합니다. 따라서, 메일 발신자는 전자메일 전송으로 발생하는 내용상 오류 및 누락 등에 관하여 책임을 지지 않습니다.
|
edwardkim
added a commit
that referenced
this pull request
Apr 23, 2026
…ot 반영) 피드백 mydocs/feedback/manual_currency_audit.md 결정 반영. 최근 사이클의 주요 변경을 매뉴얼에 동기화하고, PR 처리 절차 매뉴얼을 신설. [A] publish_guide.md - 버전 예시 0.7.0 → 0.7.3 (현재 릴리즈 기준) - 커맨드 예시 갱신 (git tag v0.7.3 등) - 테스트 수치 783 → 941 - 신규 섹션 "브라우저 확장 버전 정책 (라이브러리와 이원화)" — v0.2.x 정책 명문화 [B] chrome_edge_extension_build_deploy.md → 통합 확장 매뉴얼로 확장 - 제목: "브라우저 확장 빌드 및 배포 매뉴얼 (Chrome/Edge/Firefox/Safari)" - 빌드 크기 실측치 갱신 (WASM 3.9MB · 전체 23MB) - 테스트 페이지에 06-security.html 추가 - 4.4 절 Firefox (AMO 제출 절차) + 4.5 절 Safari (macOS 전용 빌드) 신규 [C] browser_extension_dev_guide.md - 제목: Safari/Chrome/Edge → Safari/Chrome/Edge/Firefox - Service Worker vs Background Scripts 표에 Firefox 열 추가 - 9절 신규 "chrome.* vs browser.* 네임스페이스 차이" - 10절 신규 "rhwp-shared/ 공통 모듈 + 심볼릭 링크 + dereference 빌드 패턴" (PR #214) - 11절 신규 "Chrome onDeterminingFilename vs Firefox onCreated+onChanged" [D] hyper_waterfall.md - 783+ 테스트 → 941+ 테스트 - "1인 개발" → "1인 메인테이너 + Claude Code AI + 외부 기여자 9명 (v0.2.1 기준)" - "v0.6.0 릴리즈" → "v0.5.0 공개 릴리즈 (뼈대 완성 지점)" [E] e2e_verification_guide.md - 신규 섹션 "SVG 회귀 검증 (Rust 유닛 테스트 기반)" — PR #181 하네스 - UPDATE_GOLDEN=1 사용법, 결정성 재확인 절차 - 경고: 렌더 영향 PR 머지 후 golden 재생성 필수 (PR #221 / #251 2회 재현) - 신규 섹션 "향후 작업 — 한컴 PDF 기준 Visual Diff 하네스" — 이슈 #253 [F] onboarding_guide.md - E2E 모드 설명 환경 일반화 (Windows Chrome → 로컬/컨테이너 헤드리스 · 호스트 Chrome/Chromium) [G.2] 신규 mydocs/manual/pr_review_workflow.md - PR 리뷰 · 통합 워크플로우 표준화 - 리뷰 문서 2종 (review + impl) 작성 절차 - 로컬 사전 검증 (빌드/테스트/Clippy/doctest/svg_snapshot) - Admin merge 후 필수 후속 (이슈 close · 감사 코멘트 · devel sync · golden 재생성 · archives 이동) - 재작업 요청 패턴 (PR #234 → #251 사례) - 예외 케이스 (dependabot · 오래된 base · 대형 PR) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim
added a commit
that referenced
this pull request
Apr 23, 2026
…ot 반영) 피드백 mydocs/feedback/manual_currency_audit.md 결정 반영. 최근 사이클의 주요 변경을 매뉴얼에 동기화하고, PR 처리 절차 매뉴얼을 신설. [A] publish_guide.md - 버전 예시 0.7.0 → 0.7.3 (현재 릴리즈 기준) - 커맨드 예시 갱신 (git tag v0.7.3 등) - 테스트 수치 783 → 941 - 신규 섹션 "브라우저 확장 버전 정책 (라이브러리와 이원화)" — v0.2.x 정책 명문화 [B] chrome_edge_extension_build_deploy.md → 통합 확장 매뉴얼로 확장 - 제목: "브라우저 확장 빌드 및 배포 매뉴얼 (Chrome/Edge/Firefox/Safari)" - 빌드 크기 실측치 갱신 (WASM 3.9MB · 전체 23MB) - 테스트 페이지에 06-security.html 추가 - 4.4 절 Firefox (AMO 제출 절차) + 4.5 절 Safari (macOS 전용 빌드) 신규 [C] browser_extension_dev_guide.md - 제목: Safari/Chrome/Edge → Safari/Chrome/Edge/Firefox - Service Worker vs Background Scripts 표에 Firefox 열 추가 - 9절 신규 "chrome.* vs browser.* 네임스페이스 차이" - 10절 신규 "rhwp-shared/ 공통 모듈 + 심볼릭 링크 + dereference 빌드 패턴" (PR #214) - 11절 신규 "Chrome onDeterminingFilename vs Firefox onCreated+onChanged" [D] hyper_waterfall.md - 783+ 테스트 → 941+ 테스트 - "1인 개발" → "1인 메인테이너 + Claude Code AI + 외부 기여자 9명 (v0.2.1 기준)" - "v0.6.0 릴리즈" → "v0.5.0 공개 릴리즈 (뼈대 완성 지점)" [E] e2e_verification_guide.md - 신규 섹션 "SVG 회귀 검증 (Rust 유닛 테스트 기반)" — PR #181 하네스 - UPDATE_GOLDEN=1 사용법, 결정성 재확인 절차 - 경고: 렌더 영향 PR 머지 후 golden 재생성 필수 (PR #221 / #251 2회 재현) - 신규 섹션 "향후 작업 — 한컴 PDF 기준 Visual Diff 하네스" — 이슈 #253 [F] onboarding_guide.md - E2E 모드 설명 환경 일반화 (Windows Chrome → 로컬/컨테이너 헤드리스 · 호스트 Chrome/Chromium) [G.2] 신규 mydocs/manual/pr_review_workflow.md - PR 리뷰 · 통합 워크플로우 표준화 - 리뷰 문서 2종 (review + impl) 작성 절차 - 로컬 사전 검증 (빌드/테스트/Clippy/doctest/svg_snapshot) - Admin merge 후 필수 후속 (이슈 close · 감사 코멘트 · devel sync · golden 재생성 · archives 이동) - 재작업 요청 패턴 (PR #234 → #251 사례) - 예외 케이스 (dependabot · 오래된 base · 대형 PR) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim
added a commit
that referenced
this pull request
Apr 23, 2026
…archives) [rhwp-firefox v0.2.1 — AMO 첫 등록 준비] 버전 정합: - manifest.json: version 0.1.1 → 0.2.1 (rhwp-chrome / rhwp-safari 와 일치) - package.json: 0.1.1 → 0.2.1 - (dev-tools-inject.js / content-script.js 는 manifest 단일 소스 패턴 — 수정 불필요) manifest 정리 (web-ext lint 경고 제거): - browser_specific_settings.gecko.data_collection_permissions 키 삭제 - 사유: Firefox 140+ 신규 키, strict_min_version 112 와 불일치 - 우리는 데이터 수집 안 함이 PRIVACY.md 에 명시되므로 키 자체 불필요 빌드 + 검증: - rm -rf dist && npm run build (clean) — 18MB - symlink dereference 정상 (download-interceptor-common.js 실체 파일) - web-ext lint: errors 0, notices 0, warnings 21 (표준 WASM/Vite 패턴) - output/amo/rhwp-firefox-0.2.1.zip 패키징 (12.4 MB · 52 파일) AMO 메타 초안: - mydocs/release/amo_submission_v0.2.1.md - 제목/요약/상세 설명 (한국어 + 영문) - Reviewer Notes (권한 사용 근거) - 스크린샷 준비 가이드 (5종) - 제출 절차 + 후속 작업 [부수 작업 — PR #251 archives 동반 커밋] - mydocs/pr/archives/pr_251_review.md - mydocs/pr/archives/pr_251_review_impl.md (이전 PR #251 머지 시 archives 이동만 하고 미커밋 상태였음) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim
added a commit
that referenced
this pull request
Apr 23, 2026
[매뉴얼 chrome_edge_extension_build_deploy.md §4.4 보강] rhwp-firefox v0.2.1 AMO 초기 제출 중 연속 마주친 4개 에러 기록: 1. data_collection_permissions 필수 (web-ext lint 경고보다 우선) 2. gecko_android strict_min_version placeholder 거부 (키 생략이 공식 옵트아웃) 3. gecko id 중복 (플랫폼 suffix 포함 권장) 4. 소스 코드 제출 필수 (GitHub URL 불가, zip 업로드 필수) 표 형식으로 에러 → 해결책 1:1 매핑. Reviewer Notes 필수 포함 8개 항목 체크리스트 + 빌드 지침 필수 포함 5개 항목 체크리스트 추가. [오늘할일 mydocs/orders/20260423.md] 오늘 하루 대규모 작업 사이클 전체 기록: 1. 원격 동기화 (main cherry-pick + devel rebase) 2. PR #251 통합 + svg_snapshot CI 실패 핫픽스 3. Visual Diff 하네스 이슈 #253 등록 + @seanshin 코멘트 4. 자기검열 2차 라운드 (사이냅 거명 익명화 + 최상급 완화) 5. oosmetrics 배지 추가 6. README_EN 한글판 구조로 전면 동기화 7. 매뉴얼 7건 현행화 (+ pr_review_workflow 신규) 8. Firefox AMO 초기 제출 (4대 에러 연속 대응 후 접수 완료) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7 tasks
This was referenced May 1, 2026
edwardkim
added a commit
that referenced
this pull request
May 1, 2026
PR #251 의 draw_text 영역 PUA 변환 영역 보존 + 한컴 PDF 정답지 캡처 영역 정합으로 매핑 표 정정. Supplementary PUA-A 영역 (0xF02B0~F02FF) 신규 분기 추가. gen-pua 서브명령 영역 검증 도구 추가. 작업지시자 시각 검증 통과 ★. 매핑 정정 (2개): - U+0F0A0: ▪ U+25AA → · U+00B7 (Middle dot, synam-001 9회) - U+0F0E8: ➤ U+27A4 → ➔ U+2794 (Heavy wide-headed arrow, kps-ai 4회) Supplementary PUA-A 신규 매핑 (10개): - U+F02B1~F02B9 → ① ~ ⑨ (U+2460~U+2468, mel-001/kps-ai) - U+F02EF → · U+00B7 (KTX 회귀 영역) 3개 렌더러 (svg/web_canvas/html) 의 draw_text 에 PR #251 PUA 변환 보존: let text = &text.chars().map(map_pua_bullet_char).collect::<String>(); 검증 게이트: - cargo test --lib pua_mapping 5/5 통과 - cargo test --test svg_snapshot 6/6 통과 (회귀 0) - WASM 4.18 MB 빌드 성공 - 작업지시자 시각 검증 통과 (KTX p10 + samples/pua-test.hwp) 별도 영역 결함 (본 task 너머): Supplementary PUA-A 의 SVG 출력 누락 (UTF-16 surrogate pair 처리 결함 추정) — 별도 task 분리 권장. closes #509 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.
개요
Issue: #249
Visual Diff 파이프라인(한컴 PDF ↔ rhwp SVG 페이지별 픽셀 비교)을 통해 발견한 렌더링 불일치 3건 수정.
변경 사항
1. PUA 심볼 문자 렌더링 (
8e5183c)Wingdings 등 심볼 폰트의 PUA 영역(U+F000~F0FF) 문자를 유니코드 표준 문자로 변환.
SVG, Canvas, HTML 세 렌더러에
map_pua_bullet_char()일관 적용.2. 문단 border_fill margin 반영 (
7e2c6eb)border_fill rect 계산 시
margin_left/margin_right적용.테두리 박스 위치·폭이 텍스트 영역과 정확히 일치.
3. 표 외곽 테두리 fallback + clip_rect 개선 (
3f0538d)border_fill_id설정 시 외곽 테두리 그리기, 셀 커버 영역 제외 처리검증
cargo test: 793개 전체 통과, 0 실패문서
mydocs/plans/task_m100_249.md— 수행계획서mydocs/plans/task_m100_249_impl.md— 구현계획서mydocs/report/task_m100_249_report.md— 최종 결과보고서mydocs/plans/task_m100_250.md— Right Tab 정렬 수정: 목차 페이지 번호 정렬 오차 (선행 공백 처리) #250 Right Tab 수행계획서 (이 PR에 코드 미포함)비포함 사항