Skip to content

Task #1043: 중첩 표 1×1 wrapper 외곽 테두리 lookup off-by-one 정정#1044

Closed
planet6897 wants to merge 1 commit into
edwardkim:develfrom
planet6897:task1043
Closed

Task #1043: 중첩 표 1×1 wrapper 외곽 테두리 lookup off-by-one 정정#1044
planet6897 wants to merge 1 commit into
edwardkim:develfrom
planet6897:task1043

Conversation

@planet6897

Copy link
Copy Markdown
Contributor

이슈

closes #1043 — 중첩 표 외곽선 미표시 (1×1 wrapper 외곽 테두리 lookup off-by-one)

원인

src/renderer/layout/table_layout.rs::layout_table 의 1×1 wrapper 분기에서 외곽 테두리 borderFill 을 조회할 때 cell.border_fill_id(1-based borderFillIDRef)를 0-based border_styles Vec 인덱스로 그대로 사용했다. 같은 파일의 다른 모든 lookup(일반 셀/표/zone)은 .saturating_sub(1) 로 변환하는데 이 분기만 누락되어, 한 칸 어긋난 borderFill(테두리 NONE)을 읽어 wrapper 외곽 실선 테두리가 누락되었다.

수정

// before
styles.border_styles.get(cell.border_fill_id as usize)
// after
styles.border_styles.get((cell.border_fill_id as usize).saturating_sub(1))

좌표/렌더 로직 변경 없음. 본 수정으로 모든 borderFill lookup 이 -1 로 일관된다.

회귀 테스트

tests/issue_nested_table_border.rs 신규 테스트 nested_table_border_kwater_rfp_p19_outer_outline_present (tracked samples/k-water-rfp.hwp p19). 내부 표 점선 외곽과 y 가 겹치는 전폭(>500px) 실선 외곽선 존재를 확인 — 좌표 hardcode 없이 '외곽 박스 = 내부 표 외곽' 관계로 판정.

코드 상태 결과
정정 적용 통과 (겹치는 전폭 실선 2건)
버그 임시 복원 실패 (0건)

기존 exam_social 테스트는 무영향 유지.

검증

  • cargo test 전체 0 failed
  • cargo fmt --check (수정 파일) clean
  • k-water-rfp p19 wrapper 외곽 박스 4변 실선 복원 시각 확인

🤖 Generated with Claude Code

src/renderer/layout/table_layout.rs 의 1×1 wrapper 분기에서 외곽 테두리
borderFill 을 조회할 때 cell.border_fill_id(1-based borderFillIDRef)를
border_styles(0-based Vec) 인덱스로 그대로 사용해, 한 칸 어긋난 borderFill
(테두리 NONE)을 읽어 wrapper 외곽 실선 테두리가 누락되었다. 같은 파일의 다른
모든 lookup(일반 셀/표/zone)과 동일하게 .saturating_sub(1) 로 변환하도록 정정.

회귀 가드: tests/issue_nested_table_border.rs 에 신규 테스트 추가
(samples/k-water-rfp.hwp p19). 내부 표 점선 외곽과 y 가 겹치는 전폭 실선
외곽선 존재를 확인 — 좌표 hardcode 없이 '외곽 박스 = 내부 표 외곽' 관계로
판정. 버그 시 0건→실패, 정정 시 2건→통과 양방향 확인. 기존 exam_social
테스트는 무영향 유지.

closes edwardkim#1043

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@edwardkim edwardkim self-requested a review May 20, 2026 22:52
@edwardkim edwardkim added the enhancement New feature or request label May 20, 2026
@edwardkim edwardkim added this to the v1.0.0 milestone May 20, 2026
@edwardkim

Copy link
Copy Markdown
Owner

검토 완료 — merge 수용. devel 에 반영합니다.

검증 결과

  • CI 전체 pass (Build & Test / Analyze rust·js·py / Canvas visual diff / CodeQL)
  • 본 환경 cargo test --release --lib: 1323 passed, 0 failed
  • 본 환경 회귀 가드 실증: cargo test --test issue_nested_table_border 2 passed (k-water-rfp p19 + exam_social 비회귀)
  • cargo fmt --check 통과
  • WASM Docker 빌드 성공 (release + wasm-opt, 4.7M)
  • k-water-rfp.hwp p19 wrapper 외곽 박스 4변 실선 시각 정합 작업지시자 직접 확인

처리

  • 단일 본질 commit (0dfd3f43) author (Jaeuk Ryu) 보존 cherry-pick
  • 코드 품질 지적 사항 없음 (clean-up 후속 commit 불필요)

평가

off-by-one 단순 정정 (1 라인) 인데도 정밀한 진단 + 본 환경 재현 가능한 회귀 테스트 + bisect 양방향 검증까지 갖춘 모범적 PR 입니다. 같은 파일의 다른 모든 lookup 과 일관성을 맞춘 점 (모든 borderFill lookup 이 -1 변환) 도 향후 회귀 방지에 도움됩니다.

회귀 테스트의 구조 관계 판정 (좌표 hardcode 없이 "내부 표 점선 외곽과 같은 y 의 실선" 으로 판정) 설계가 특히 인상적입니다. 페이지네이션 시프트나 무관한 다른 표의 영향을 받지 않아 장기적으로 안정적인 가드가 됩니다.

PR 본문 1차 증상 샘플 (samples/2. 인공지능(AI) ...) 은 본 환경에 없으나 회귀 테스트를 공개 k-water-rfp.hwp 로 작성해 주신 점도 외부 PR 검증 회복 측면에서 정합입니다.

기여 감사합니다.

@edwardkim

Copy link
Copy Markdown
Owner

devel 반영 완료 (cherry-pick). PR close 합니다.

@edwardkim edwardkim closed this May 21, 2026
edwardkim pushed a commit that referenced this pull request May 21, 2026
Task #1043 중첩 표 1×1 wrapper 외곽 테두리 lookup off-by-one 정정.
src/renderer/layout/table_layout.rs:239 1 라인 정정 (다른 lookup 들과
일관성 확보) + 본 환경 재현 가능 회귀 가드 (k-water-rfp.hwp p19).
CI 전부 pass + cargo test 1323 passed + 회귀 가드 본 환경 실증 +
작업지시자 시각 판정 통과 → merge 수용.

PR #1039 의 "정량 게이트 충족 시 시각 판정 면제 가능" 패턴 강화 사례
(본 환경 회귀 재현 + 시각 판정 동시 통과).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim pushed a commit that referenced this pull request May 21, 2026
…okup off-by-one 정정

table_layout.rs:239 의 1-based borderFillIDRef 를 0-based Vec
인덱스로 그대로 사용한 off-by-one 정정 (다른 lookup 들과 일관성
확보). 본 환경 회귀 가드 (k-water-rfp.hwp p19) 실증 + 작업지시자
시각 판정 통과.

PR #1039 의 "정량 게이트 충족 시 시각 판정 면제 가능" 패턴 강화
사례 — 회귀 가드 본 환경 재현 + 시각 판정 동시 통과.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim pushed a commit that referenced this pull request May 22, 2026
VPOS_CORR lazy_base trailing-ls bridge 정합 (closes #1049). #1046 가설
"렌더러 줄높이 과대 계산" 반증 + 진짜 원인 (vpos_adjust::lazy_base 의
trailing-ls bridge 이중 차감) 정확 식별. 2 조건 좁힘 가드 (vpos 연속 +
실텍스트 본문) 로 footnote-01/복학원서 비회귀 보장.

CI 전부 pass + cargo test 1323 passed + 골든 SVG 무회귀 + 시각 판정
면제 (PR #1044 패턴 — 정량 게이트 충족) → merge 수용.

feedback_diagnosis_layer_attribution 권위 사례 — 가설 반증 후 진짜
원인 식별. feedback_image_renderer_paths_separate 영역 정합
(렌더러·페이지네이터 발산 해소).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim pushed a commit that referenced this pull request May 22, 2026
U+00B7 폭 폰트 metric 정합 — 비례폰트 .notdef 위장값 가드 (HaimLee-4869).
cmap .notdef → em_size 위장 메커니즘 정확 식별 + 3 조건 좁힘 가드
(U+00B7 + 전각 위장 + 비례폰트) + monospace 보존 (Issue #630 정합).
CI no checks reported (첫 fork PR 권한 정책) → 본 환경 직접 검증으로
대체. 시각 판정 면제 (PR #1044/#1054 패턴 — 정량 게이트 4 조건 충족).

본 환경 검증: cargo test --lib 1324 passed + 신규/기존 회귀 가드 +
svg_snapshot 8/8 통과. #1055 회귀와 무관 확인 (sample16-hwp5 에
U+00B7 0 건).

feedback_hancom_compat_specific_over_general 권위 사례.
feedback_image_renderer_paths_separate 정합 (native·WASM 공유 함수
가드).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim pushed a commit that referenced this pull request May 22, 2026
3 PR 본질 + 3 archives 통합 — author 보존 cherry-pick:
- PR #1054 (closes #1049, Jaeook Ryu): VPOS_CORR lazy_base trailing-ls
  bridge 정합. #1046 가설 반증 후 진짜 원인 (이중 차감) 정확 식별.
- PR #1059 (HaimLee-4869): U+00B7 폭 폰트 metric 정합 — 비례폰트
  .notdef 위장값 가드. native·WASM 공유 함수 가드.
- PR #1057 (Refs #536, seorii): CanvasKit direct replay contract harden
  (P17). 4 path 동시 정합 + Copilot 6/6 반영.

본 환경 cargo test --release --lib 1324 passed, 0 failed. CI 전부 pass.
시각 판정 면제 (모두 정량 게이트 충족) — 메모리 룰 후보 권위 사례
누적 (PR #1039#1044#1054#1059#1057 5 사례).

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

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants