Skip to content

fix: Picture flip/rotation 누락 회귀 정정 (Task #519 재적용, closes #618)#620

Closed
planet6897 wants to merge 1 commit intoedwardkim:develfrom
planet6897:pr-task618
Closed

fix: Picture flip/rotation 누락 회귀 정정 (Task #519 재적용, closes #618)#620
planet6897 wants to merge 1 commit intoedwardkim:develfrom
planet6897:pr-task618

Conversation

@planet6897
Copy link
Copy Markdown
Contributor

Summary

이슈 #618 정정. samples/exam_eng.hwp 4페이지 28번 박스 종이-말림(curl) 그림의 horz_flip+vert_flip 속성이 SVG 출력에 적용되지 않는 회귀를 정정.

원인: Task #519 (#519, 7ead89d) 의 정정이 local/devel 에는 머지되었으나 stream/devel 로의 승격이 한 번도 일어나지 않음. 묶음 머지 a7e43f9stream/devel 첫부모 경로에 부재.

$ git merge-base --is-ancestor 7ead89d stream/devel
NOT in stream/devel
$ git branch -a --contains 7ead89d
local/devel, local/task524..574, remotes/origin/local/devel, ...
(stream/devel / main 부재)

Changes

6 ImageNode 생성 지점에 transform: extract_shape_transform(&pic.shape_attr) 재적용. extract_shape_transform 헬퍼는 utils.rs:109 에 그대로 살아있어 신규 단위 변환 코드 0줄.

파일 라인 변경
src/renderer/layout.rs 2851 transform: 추가 (TAC Picture / col_node)
src/renderer/layout/picture_footnote.rs 117, 328 transform: 추가 + import
src/renderer/layout/paragraph_layout.rs 1834, 2108, 2218 transform: 추가 + import
src/renderer/layout/table_cell_content.rs 644 ShapeTransform::default()extract_shape_transform(&pic.shape_attr) + import

총 4 files, +10/-4.

검증

  • cargo test --lib: 1134 passed (회귀 0)
  • cargo test --test svg_snapshot: 6/6 passed
  • cargo clippy --lib -- -D warnings: clean
  • exam_eng.hwp 8페이지 SVG diff: 페이지 4만 2 lines 변경 (<g transform> 래퍼 1쌍 추가), 다른 7개 페이지 byte-identical
  • export-svg p4 transform 래퍼 카운트: 0 → 1 (Q28 그림에 horz/vert flip 정상 적용)
$ ./target/debug/rhwp export-svg samples/exam_eng.hwp -p 3 -o /tmp/p4/
$ grep -c '<g transform=' /tmp/p4/exam_eng_004.svg
1
$ grep -oE '<g transform="[^"]*">' /tmp/p4/exam_eng_004.svg
<g transform="translate(1602.426666666667,0) scale(-1,1) translate(0,2217.373333333333) scale(1,-1)">

Test plan

  • cargo test --lib (1134 passed)
  • cargo test --test svg_snapshot (6 passed)
  • cargo clippy --lib -- -D warnings (clean)
  • exam_eng 8페이지 광역 회귀 비교 (페이지 4만 의도된 정정, 7페이지 byte-identical)
  • 메인테이너 시각 판정 (PDF 와 SVG 비교 — Q28 박스 좌상단 curl 위치)

회귀 방지 후속 권고

이번 회귀처럼 local/develstream/devel 승격 누락 사례 재발 방지를 위해, 동일 묶음 머지 a7e43f9 (Task #517/#518/#519/#520/#521/#523/#528) 의 다른 task 들도 stream/devel 누락 가능성 점검 권고 (별도 이슈로 분리 가능).

참고

closes #618

edwardkim#618)

증상: samples/exam_eng.hwp 4페이지 28번 박스 종이-말림 데코레이션 그림이
horz_flip+vert_flip 속성을 가지고 있으나 SVG 출력에 transform 래퍼가
누락되어 잘못된 위치(우하단)로 렌더되어 본문과 겹쳐 보이지 않음.

원인: Task edwardkim#519 (edwardkim#519, 7ead89d) 의 정정이 local/devel 에는 머지되었으나
stream/devel 로의 승격이 한 번도 일어나지 않음. local/devel..stream/devel
의 첫부모 경로상 Task edwardkim#519 묶음 머지 a7e43f9 가 부재 — `git branch -a
--contains 7ead89d` 결과는 local/devel + local/task* 만 표시.

정정: 6 ImageNode 생성 지점에 transform: extract_shape_transform(&pic.shape_attr)
재적용. extract_shape_transform 헬퍼는 utils.rs:109 에 그대로 살아있어
신규 단위 변환 코드 0줄.

- src/renderer/layout.rs:2851 (TAC Picture / col_node)
- src/renderer/layout/picture_footnote.rs:117,328 (layout_picture / layout_floating_picture)
- src/renderer/layout/paragraph_layout.rs:1834,2108,2218 (TAC 인라인 3 사이트)
- src/renderer/layout/table_cell_content.rs:644 (셀 내부 Picture; 명시적
  ShapeTransform::default() → extract_shape_transform 교체)

검증:
- cargo test --lib: 1134 passed (회귀 0)
- cargo test --test svg_snapshot: 6/6 passed
- cargo clippy --lib -- -D warnings: clean
- exam_eng.hwp 8페이지 SVG diff: 페이지 4만 2 lines 변경 (<g transform>
  래퍼 1쌍 추가), 다른 7개 페이지 byte-identical
- export-svg p4 transform 래퍼 카운트: 0 → 1 (Q28 그림에 horz/vert flip 적용)

회귀 방지 후속 권고: 묶음 머지 a7e43f9 (Task edwardkim#517/edwardkim#518/edwardkim#519/edwardkim#520/edwardkim#521/edwardkim#523/edwardkim#528)
의 다른 task 들도 stream/devel 누락 가능성 점검 필요.
@edwardkim edwardkim added this to the v1.0.0 milestone May 6, 2026
@edwardkim edwardkim added the bug Something isn't working label May 6, 2026
edwardkim added a commit that referenced this pull request May 6, 2026
- @planet6897 (Jaeook Ryu) Task #618 회귀 정정 PR 검토
- Task #519 fix (transform: extract_shape_transform) 의 devel 누락 정합 직접 검증
  - 본 환경 git merge-base --is-ancestor 7ead89d devel: 부재
  - 본 환경 git merge-base --is-ancestor a7e43f9 devel: 부재
  - 회귀 origin: PR #527 (CLOSED) 묶음 머지가 본 환경 devel 도달 못 함
- 본 환경 검증: cargo test 1140 passed / clippy 0 / svg_snapshot 6/6
- 정량 측정: BEFORE 0 → AFTER 1 transform 래퍼 (page 4 Q28 박스), PR 본문 명시 100% 일치
- 광범위 sweep: 167 fixture / 1,687 페이지 / 차이 0
- WASM: 4,590,537 bytes (PR #611 baseline +230)
- 회귀 방지 후속 영역: Task #517/#518/#523 누락 가능성 + Task #520 (PR #627 별도 영역)
- 옵션 A (cherry-pick) 권장 + 옵션 B (후속 task 권유) 결합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 6, 2026
- 9.5.1 핀셋 cherry-pick (95b228e, author Jaeook Ryu 보존)
- 9.5.2 결정적 재검증 (1140 passed / clippy 0 / WASM 4,590,537 bytes)
- 9.5.4 SVG byte 차이 + 정량 측정 (page 4 BEFORE 0 → AFTER 1 transform 래퍼)
- 9.5.5 시각 판정 자료 안내 (output/svg/pr620_before vs pr620_after, exam_eng 8 페이지)
- 처리 결정 갱신 (검토 중 → 옵션 A 진행 중 시각 판정 게이트 대기)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 6, 2026
…on 누락 회귀 정정 — Task #519 재적용 — @planet6897 / Jaeook Ryu 1 commit + 시각 판정 ★ SVG/web 양쪽 통과)
@edwardkim
Copy link
Copy Markdown
Owner

검토 + 핀셋 cherry-pick 머지 완료. 감사합니다.

처리 결과

본 환경 직접 진단 검증

본 PR 본문의 회귀 진단을 본 환경 (edwardkim/rhwp devel) 에서 직접 재현:

$ git merge-base --is-ancestor 7ead89d devel    # ❌ Task #519 fix commit 부재
$ git merge-base --is-ancestor a7e43f9 devel    # ❌ 묶음 머지 부재

회귀 origin: PR #527 (CLOSED, "Layout 리팩터링 Phase 0~2 + 옛한글 PUA + Square wrap fixes") 의 묶음 머지 a7e43f9 가 본 환경 devel 도달 못 함. 이후 개별 task 중 #521 (PR #564) + #528 (PR #592) 만 cherry-pick 으로 적용됨.

결정적 재검증

검증 결과
cargo test --lib --release 1140 passed (회귀 0)
svg_snapshot / issue_546 / issue_554 모두 통과
cargo clippy --release --lib 0건
Docker WASM 빌드 4,590,537 bytes (PR #611 baseline +230 — 4 파일 transform 호출 추가 정합)

정량 측정 (PR 본문 100% 재현)

samples/exam_eng.hwp SVG export 8 페이지:

페이지 BEFORE <g transform=> AFTER <g transform=> byte 차이
page 4 0 1 +107 bytes (transform 래퍼 1쌍 추가)
page 1/2/3/5/6/7/8 0 0 byte-identical (회귀 0)

page 4 transform 영역 (PR 본문 명시값 100% 일치):

<g transform="translate(1602.426666666667,0) scale(-1,1) translate(0,2217.373333333333) scale(1,-1)">

광범위 페이지네이션 회귀 sweep

  • 총 167 fixture (161 hwp + 6 hwpx) / 1,687 페이지 / 차이 0

메인테이너 시각 판정 결과

SVG + web 양쪽 통과 — 작업지시자 평가:

  • "svg 는 시각 판정 통과!"
  • "웹 에디터도 시각 판정 통과입니다."

권위 영역: page 4 — Q28 박스 종이-말림(curl) 데코레이션 그림 (bin_id=2, flip=(h=true,v=true)) 박스 좌상단 정상 위치 출력.

본 PR 의 본질

본 PR 의 처리 본질에서 가장 우수한 점:

  1. 회귀 origin 정확 진단git merge-base --is-ancestor 로 정확한 부재 영역 입증 + PR Layout 리팩터링 Phase 0~2 + 옛한글 PUA (#528) + Square wrap fixes (#533/#534) + planet6897 6건 #527 close 영역의 누락 메커니즘 정밀 분석
  2. extract_shape_transform 헬퍼 재사용 — 신규 단위 변환 코드 0줄 (utils.rs:109 헬퍼 그대로 활용)
  3. 케이스별 명시 가드 — 4 파일 6 ImageNode 생성 지점만 정확 정정 (feedback_hancom_compat_specific_over_general 정합)
  4. 회귀 위험 영역 좁힘 — page 1/2/3/5/6/7/8 byte-identical, page 4 만 의도된 정정 (+107 bytes)
  5. 회귀 방지 후속 권고 — PR 본문에 묶음 머지 a7e43f9 의 다른 task 누락 가능성 점검 권고 명시

feedback_close_issue_verify_merged 메모리 권위 영역의 권위 케이스로, Task #519 close 시 정정 commit 의 devel 머지 검증 미수행 → 동일 결함 재발 (Issue #618) 의 정확한 진단 + 재적용 패턴 우수.

수고하셨습니다.

@edwardkim
Copy link
Copy Markdown
Owner

회귀 방지 후속 영역 (별도 후속 권유)

본 PR 본문에서 권고하신 묶음 머지 a7e43f9 (Task #517/#518/#519/#520/#521/#523/#528) 의 다른 task 누락 가능성을 본 환경에서 정밀 점검한 결과, 다음과 같이 정합 영역과 누락 가능 영역이 분리됩니다.

Task Issue 상태 본 환경 PR 영역 정합 상태
#517 (별도 등록 영역 불명) PR #527 (CLOSED) 누락 가능성
#518 (별도 등록 영역 불명) PR #527 (CLOSED) 누락 가능성
#519 CLOSED PR #527 (CLOSED) → 본 PR #620 재적용 완료 ✅ 본 PR 영역
#520 CLOSED PR #527 + PR #627 (revert restore) 🔄 PR #627 별도 영역
#521 CLOSED PR #564 cherry-pick 적용 완료 ✅ 정합
#523 CLOSED PR #527 (CLOSED) 누락 가능성
#528 CLOSED PR #592 cherry-pick 적용 완료 ✅ 정합

Task #517 / #518 / #523 영역이 본 환경 devel 에 누락되어 있을 가능성이 있습니다.

가능하시다면 본 PR 과 동일 패턴 (각 task 의 본질 정정만 단일 commit cherry-pick PR) 으로 후속 PR 을 분리 등록해주시면 도움이 될 것 같습니다. 본 환경에서 직접 점검해보니 PR #527 close 시점 이후 5개 task 중 #519 / #520 만 후속 PR (본 PR #620 + PR #627) 으로 재적용 영역이 등록됐고 #517 / #518 / #523 은 미등록 상태로 보입니다.

물론 본 환경 직접 점검 (소스 영역에서 git merge-base --is-ancestor 로 각 task 의 fix commit 부재 여부 확인) 도 가능합니다. 작업 부담이 있으시면 본 환경에서 직접 점검 후 별도 이슈로 등록할 수도 있으니 편하신 영역으로 진행해주세요. PR #627 검토는 본 PR 처리 후 별도 단계로 진행 예정입니다.

수고하셨습니다.

edwardkim added a commit that referenced this pull request May 6, 2026
- mydocs/pr/archives/pr_620_report.md 신규 (처리 보고서)
- mydocs/pr/pr_620_review.md → mydocs/pr/archives/pr_620_review.md 이동
- mydocs/orders/20260507.md 신규 (5/7 사이클 첫 작성, PR #620 첫 항목)
- feedback_close_issue_verify_merged 메모리 권위 영역의 권위 케이스 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 6, 2026
- @postmelee (Taegyu Lee) 첫 PR 검토 — Issue #598 본문 각주 마커 이동 및 삭제
- 32 파일 +2,751/-34 (본질 src 9 + rhwp-studio TS 4 + tests 1 + 컨트리뷰터 fork plans/working 11)
- 본 환경 검증: cargo test 1141 passed / issue_598_footnote_marker_nav 4/4 / clippy 0
- rhwp-studio npm run build 정합 / Docker WASM 4,587,318 bytes (PR #620 baseline -3,219)
- 광범위 sweep: 167 fixture / 1,687 페이지 / 차이 0
- cherry-pick 충돌 영역: orders add/add 만 발생, src 영역 0 (합본 patch 방식 적용 시 깨끗)
- Issue assignee 정합 (작업지시자 직접 지정), Issue #598 5 영역 모두 본질 정정
- 옵션 A (합본 cherry-pick + 작업지시자 web 환경 직접 각주 동작 테스트) 권장

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 6, 2026
- postmelee 영역 정합 (첫 PR → 활발한 컨트리뷰터 13 PR 누적)
- 9.5.1 합본 cherry-pick (17434e9, author postmelee 보존, 16 파일 +959/-34)
- 9.5.2 결정적 재검증 (1141 passed / issue_598_footnote_marker_nav 4/4 / clippy 0)
- 9.5.4 web 시각 판정 자료 안내 (8가지 권위 영역 명시 + 실행 명령)
- WASM: 4,587,318 bytes (PR #620 baseline -3,219)
- 처리 결정 갱신 (검토 중 → 옵션 A 진행 중 web 시각 판정 게이트 대기)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants