Skip to content

fix: add undo history for non-text resize operations#611

Closed
kihyunnn wants to merge 2 commits into
edwardkim:develfrom
kihyunnn:fix/issue-458-undo-nontext
Closed

fix: add undo history for non-text resize operations#611
kihyunnn wants to merge 2 commits into
edwardkim:develfrom
kihyunnn:fix/issue-458-undo-nontext

Conversation

@kihyunnn

@kihyunnn kihyunnn commented May 5, 2026

Copy link
Copy Markdown
Contributor

변경 요약

rhwp-studio에서 텍스트 이외 편집 작업의 undo 누락 문제(#458) 를 해결했습니다.

기존에는 일부 표 크기 조절 및 그림/도형 크기 조절 경로가 CommandHistory를 통하지 않고 WASM mutation만 직접 호출하고 있어, Ctrl+Z / Ctrl+Y가 동작하지 않았습니다.

이번 PR에서는:

• 표 리사이즈 경로를 snapshot 기반 undo 기록으로 감쌌고
• 그림/도형 리사이즈 경로에 ResizeObjectCommand 를 추가하여
• 리사이즈 후 non-text 편집도 undo/redo 스택에 정상 반영되도록 수정했습니다.

범위는 최소 수정으로 제한했으며:

• 텍스트 undo 경로는 변경하지 않았고
• 표/개체 이동 undo 경로도 기존 동작을 유지했습니다.

관련 이슈

closes #458

테스트

☑ cargo test 통과
☑ cargo clippy -- -D warnings 통과
☐ 관련 샘플 파일로 SVG 내보내기 확인
☑ 웹(WASM) 렌더링 확인 (해당하는 경우)

추가 확인:

• docker compose --env-file .env.docker run --rm wasm
• cd rhwp-studio && npm run build
• git diff --check

edwardkim added a commit that referenced this pull request May 5, 2026
v0.7.9 후속 patch 사이클 (5/4 ~ 5/6).

## 신규 기능

- **CLI 바이너리 릴리즈** (Issue #608/#612, @almet 의 요청)
  - 4 플랫폼 GitHub Release 자산 첨부 (Linux x86_64 / macOS x86_64+aarch64 /
    Windows x86_64) + SHA-256 체크섬
- **PNG raster backend** (PR #599, @seo-rii) — render P4 단계
  - native Skia 기반 PageLayerTree → PNG export, native-skia feature gate
  - **AI 파이프라인 + VLM 연동 도입** (메인테이너 후속 정정):
    - --vlm-target claude (1568 longest edge / 1.15 MP, Claude Vision 정합)
    - --scale / --max-dimension (자동 scale 계산)
    - export-png CLI 명령 + 매뉴얼 (한글 + 영문 dual)
    - 한글 폰트 fallback chain + char 단위 fallback (공백 두부 정정) +
      --font-path 동적 로딩

## 외부 PR cherry-pick (13 PR / 7 컨트리뷰터)

- @planet6897 / Jaeook Ryu (협업): PR #587/#589/#561/#564/#570/#575/
  #580/#584/#592/#593/#567
- @oksure (Hyunwoo Park): PR #600 (closes #513)
- @seo-rii: PR #599 (refs #536)
- @cskwork / @johndoekim / @nameofSEOKWONHONG / @jangster77 — 사이클 누적

## 메인테이너 정정

Skia 폰트 영역 5개 정정 (한글 fallback / font-path / char-fallback /
VLM 옵션 / export-png CLI).

## 인프라

- CI 빌드 안정성 (Cargo.toml [[example]] required-features)
- 광범위 페이지네이션 회귀 sweep 도구 (164 fixture / 1,614 페이지 자동)

## 후속 이슈

- #613 (VLM 프리셋 확장)
- #614 (DPI 메타데이터)
- #615 (pua_oldhangul.rs U+F53A 한컴 정합)
- #598 (rhwp-studio 각주 삭제, 외부 컨트리뷰터 공개)

## 잔여 PR (v0.7.11 후속 patch)

PR #601, #602 (@oksure) / PR #607 (@dicebattle) / PR #609 (@jangster77,
Task #604) / PR #611 (@kihyunnn).

상세: CHANGELOG.md (한글) / CHANGELOG_EN.md (영문).
@edwardkim

Copy link
Copy Markdown
Owner

@kihyunnn 님 안녕하세요. 첫 PR 환영합니다.

크롬 확장 사용자분들이 많이 요청해주셨던 기능을 첫 번째 기여로 구현해주셔서 감사합니다. Issue #458 은 외부 사용자 사용성 영역의 권위 케이스로, "텍스트 외 표 / 이미지 / 기타 모두 되돌리기 가능" 본질을 정확히 정정해주셨습니다.

본 PR 의 본질 평가

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

  1. 단일 영역 본질 정정 — rhwp-studio TypeScript 5 파일 (Rust 영역 0 변경) + 기존 executeOperation API 재사용 (신규 인프라 0)
  2. ResizeObjectCommand 신규 + 표 리사이즈 3 분기 통일finishResizeDrag / resizeCellByKeyboard / resizeTableProportional 모두 snapshot 기반으로 정합
  3. 다중 선택 정합historyTargets 배열로 다중 그림 동시 리사이즈 후 Ctrl+Z 한 번으로 모두 복원 (LIFO 스택 순서 정합)
  4. changed 가드Object.keys(updated).some(key => updated[key] !== before[key]) 로 무변경 record 차단 (Undo 스택 오염 방지)
  5. 회귀 위험 영역 좁힘 — 텍스트 undo 경로 무변경 + 표/개체 이동 undo 경로 (MovePictureCommand/MoveShapeCommand) 보존 명시

본 환경 결정적 검증

검증 결과
cargo test --lib --release 1140 passed (회귀 0)
cargo clippy --release --lib 0건
npm run build (tsc && vite build) TypeScript 타입 체크 통과 + dist 빌드 성공
Docker WASM 빌드 4,590,307 bytes (PR #629 baseline 과 정확 일치 — Rust 영역 변경 0 정량 입증)
광범위 페이지네이션 sweep 164 fixture / 1,684 페이지 / 차이 0

다음 단계 — 메인테이너 시각 판정

본 PR 은 web editor 의 Undo/Redo 동작 영역으로 메인테이너 직접 시각 판정 진행합니다. 시각 판정 권위 샘플 3개를 본 환경에 추가했습니다:

  • samples/calc-cell.hwp — 표 리사이즈 Undo
  • samples/p122.hwp — 단일 이미지 리사이즈 Undo
  • samples/mix-shape-01.hwp — 다중 이미지 리사이즈 Undo 스택 순서 (LIFO)

시각 판정 통과 시 본질 commit (a4944d2b) 단독 cherry-pick + devel merge + PR/Issue close 진행 예정입니다. 수고하셨습니다.

edwardkim added a commit that referenced this pull request May 6, 2026
- @kihyunnn (김기현) 첫 PR 검토
- Task #458 add undo history for non-text resize operations (rhwp-studio TS 5 파일 +128/-19)
- 본 환경 검증: cargo test 1140 passed / clippy 0 / npm run build (tsc + vite) 정합
- 광범위 sweep: 164 fixture / 1,684 페이지 / 차이 0 (Rust 영역 변경 없음, 자명)
- 본질: ResizeObjectCommand 신규 + 표 리사이즈 3 분기 snapshot 기반 통일 + 다중/단일 선택 모두 정합
- 회귀 위험 좁음 — 텍스트 undo / 이동 undo 경로 모두 보존, 기존 executeOperation API 재사용
- 옵션 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
- 9.5.1 핀셋 cherry-pick (5cdf8e5, author kihyunnn 보존)
- 9.5.2 결정적 재검증 (1140 passed / clippy 0 / npm build 정합 / WASM 4,590,307 bytes)
- 9.5.3 광범위 sweep 164 fixture / 1,684 페이지 / 차이 0
- 9.5.4 WASM 정량 정합 (PR #629 baseline 과 정확 일치 — Rust 영역 변경 0 정량 입증)
- 9.5.5 web 환경 시각 판정 자료 안내 (vite dev server, 7가지 권위 영역 명시)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 6, 2026
- samples/calc-cell.hwp (15,872 bytes) — 표 리사이즈 Undo
- samples/p122.hwp (89,088 bytes) — 단일 이미지 리사이즈 Undo
- samples/mix-shape-01.hwp (78,848 bytes) — 다중 이미지 리사이즈 Undo 스택 순서 (LIFO)
- 검토 보고서 9.5.5 시각 판정 자료 영역 갱신 (3개 권위 샘플 명시)
- 직속 hwp 158 → 161 (samples/ tracked 영역 확장)

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

Copy link
Copy Markdown
Owner

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

처리 결과

시각 판정 ★ 통과 (web 환경 — 3개 권위 샘플)

샘플 권위 영역 결과
samples/calc-cell.hwp 표 리사이즈 → Ctrl+Z ✅ 정상 복원
samples/p122.hwp 단일 이미지 리사이즈 → Ctrl+Z ✅ 정상 복원
samples/mix-shape-01.hwp 다중 이미지 리사이즈 → Ctrl+Z ✅ LIFO 스택 순서 정합

작업지시자 평가: "모두 검증했습니다."

본 PR 의 본질

Issue #458 의 사용자 사용성 영역 ("텍스트 외 표 / 이미지 / 기타 모두 되돌리기 가능") 핵심 본질을 정확히 정정해주셨습니다.

  • 단일 영역 본질 정정 — rhwp-studio TypeScript 5 파일 (Rust 영역 0 변경) + 기존 executeOperation API 재사용
  • 표 리사이즈 3 분기 통일finishResizeDrag / resizeCellByKeyboard / resizeTableProportional 모두 snapshot 기반
  • 다중 선택 정합historyTargets 배열로 LIFO 스택 순서 정합 (작업지시자 시각 판정으로 권위 검증 통과)
  • changed 가드 + 회귀 위험 좁힘 — 텍스트 undo 경로 무변경 + 이동 undo 경로 보존

크롬 확장 사용자분들의 사용성 영역에 직접 기여해주신 첫 PR — 본 사이클 (5/6) v0.7.10 후 세 번째 처리 PR 의 본질 정합 패턴입니다. 수고하셨습니다.

후속 영역 (셀 분할/병합/삽입/삭제 등 Issue #458 의 "기타등등" 영역) 은 별도 후속 task 로 분리 검토 예정입니다.

@edwardkim edwardkim closed this May 6, 2026
edwardkim added a commit that referenced this pull request May 6, 2026
- mydocs/pr/archives/pr_611_report.md 신규 (처리 보고서, 첫 web editor 본질 정정 PR)
- mydocs/pr/pr_611_review.md → mydocs/pr/archives/pr_611_review.md 이동
- mydocs/orders/20260506.md 갱신 (PR #611 항목 추가, 잔존 PR 16 → 15)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>
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.

2 participants