Task #676: 통합재정통계 trailing empty paragraph 페이지 분리 정정#679
Closed
planet6897 wants to merge 1 commit into
Closed
Conversation
본문 끝 빈 paragraph (h=16px) 가 LAYOUT_DRIFT_SAFETY_PX = 10.0 안전마진
영역 내 미세 overflow (0.8px) 로 fit 실패 → 단독 빈 페이지 발생.
샘플:
- samples/통합재정통계(2010.11월).hwp: 2p → 1p (한글2022 PDF 정합)
- samples/통합재정통계(2011.10월).hwp: 2p → 1p (한글2022 PDF 정합)
원인 (DBG_T676 trace):
pi=14 cur_h=751.0 + h_for_fit=16.0 = 767.0 > avail 766.2
(= available_height 776.2 - safety 10) → FIT FAIL
hide_empty_line 분기 (Task edwardkim#362) 미진입 (SectionDef bit 19 미설정).
정정: typeset_paragraph 에 trailing empty paragraph 가드 추가
(단단 전용, 5 조건 AND 로 영향 영역 좁힘):
A) 섹션 마지막 paragraph
B) 빈 paragraph (text trim empty + no controls)
C) 페이지 첫 항목 아님 (단독 항목 페이지 자기참조 회피)
D) col_count == 1 (다단 의도된 분리는 보존)
E) 안전마진 영역 내 미세 overflow:
total_h > available && total_h <= available + LAYOUT_DRIFT_SAFETY_PX
(실 overflow 는 분리 유지)
기존 LAYOUT_DRIFT_SAFETY_PX 상수 그대로 활용 — 신규 휴리스틱/허용오차 0.
회귀 차단 가드: tests/issue_676_trailing_empty_para.rs (3 통합 테스트)
- 2010.11/2011.10 1p 검증 + 2014.8 무회귀 검증
검증:
- cargo test --release --lib: 1155 passed (회귀 0)
- cargo test --release (통합): all GREEN
- issue_676 3/3
- 광범위 sweep (samples/ 187 fixture): 의도된 정정 2 + 부수 진전 1
(table-ipc.hwp 13p→11p, 정답지 10p 방향) + 무변동 184, 회귀 0
- clippy 2 사전 존재 에러 (table_ops.rs:1007 + object_ops.rs:298)
은 upstream/devel d58217b baseline 동일 — 본 PR 무관
시각 영향: dump-pages 결과 페이지 1 items 14→15 (pi=14 흡수),
used 751.0px 불변 (height=0 흡수, pi=0~13 영역 동일).
Closes edwardkim#676
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 tasks
edwardkim
added a commit
that referenced
this pull request
May 8, 2026
closes #676 1 commit (52ae655): - Task #676: typeset_paragraph 영역 시그니처에 is_last_in_section 추가 + 5 조건 AND 영역 가드 (trailing empty paragraph 영역의 안전마진 미세 overflow 흡수) 본질: - LAYOUT_DRIFT_SAFETY_PX = 10.0 영역 안전마진 영역 내 미세 overflow (0.8px) 영역으로 fit 실패 영역 → 단독 빈 페이지 발생 영역 - 5 조건 AND: is_last_in_section + is_empty_para + !current_items.is_empty() + col_count == 1 + total_h <= available + LAYOUT_DRIFT_SAFETY_PX - 신규 휴리스틱 0 — 기존 상수 활용 본 환경 검증: - cherry-pick 충돌 0건 (Auto-merging typeset.rs) - cargo test --release ALL PASS (1165 lib + issue_676 3/3 + svg_snapshot 7/7 + issue_546/issue_554 13/13) - clippy clean - 광범위 sweep 7 샘플 170 페이지: same=170 / diff=0 ✅ - 핵심 fixture 직접 측정: - 통합재정통계 2010.11/2011.10: 2p → 1p ✅ (정답지 정합) - 통합재정통계 2014.8: 1p ✅ (무회귀) - table-ipc: 13p → 11p (부수 진전, 정답지 10p 방향) PR: #679 컨트리뷰터: @planet6897 (Jaeuk Ryu) — 30+ 사이클 핵심 컨트리뷰터 (Layout/페이지네이션) 작업지시자 PAGE_MISMATCH 19건 진전: 2 완전 정정 + 1 부분 진전
edwardkim
added a commit
that referenced
this pull request
May 8, 2026
PR #679 (Task #676): 통합재정통계 trailing empty paragraph 페이지 분리 정정 - merge commit: bd3b63d (옵션 A — 1 commit cherry-pick no-ff merge) - 본질: typeset_paragraph 영역 5 조건 AND 영역 가드 (trailing empty paragraph 안전마진 미세 overflow 흡수) - 신규 휴리스틱 0 — 기존 LAYOUT_DRIFT_SAFETY_PX 영역 활용 - 본 환경 결정적 검증 1165 lib + issue_676 3/3 + svg_snapshot 7/7 + issue_546/issue_554 13/13 + clippy clean - 광범위 sweep 7 샘플 170 페이지: same=170 / diff=0 - 핵심 fixture: 통합재정통계 2010.11/2011.10 (2p → 1p) + table-ipc (13p → 11p) - WASM 빌드 4,596,007 bytes - 작업지시자 시각 판정 ★ 통과 PAGE_MISMATCH 19건 진전: 2 완전 정정 + 1 부분 진전 + 잔존 16 (후속) 컨트리뷰터: @planet6897 (Jaeuk Ryu) — 30+ 사이클 핵심 컨트리뷰터 closes #676
Owner
|
@planet6897 님 30+ 사이클 PR 처리 완료입니다. 본 환경 검증 결과: 결정적 검증 통과:
광범위 회귀 sweep (7 샘플 170 페이지): same=170 / diff=0 ✅ 핵심 fixture 영역 페이지 수 측정:
WASM 빌드 (`pkg/rhwp_bg.wasm` 4,596,007 bytes) 후 작업지시자 시각 판정 ★ 통과:
처리: 옵션 A — 1 commit cherry-pick no-ff merge.
본질 정정 영역의 정확성: `typeset_paragraph` 영역 시그니처 영역에 `is_last_in_section` 추가 + 5 조건 AND 영역 가드. 기존 `LAYOUT_DRIFT_SAFETY_PX = 10.0` 영역 활용 영역 — 신규 휴리스틱 0 ✅. PAGE_MISMATCH 19건 진전: 2 완전 정정 (통합재정통계 2010.11/2011.10) + 1 부분 진전 (table-ipc 13→11p, 정답지 10p 방향) + 잔존 16건 영역 (별도 task 영역 후속 영역). 처리 보고서: `mydocs/pr/archives/pr_679_report.md` closes #676 |
edwardkim
added a commit
that referenced
this pull request
May 8, 2026
closes #680 2 commits 단계별 보존: - 1787731 Task #680: nested 1x1 wrapper 표 외곽 테두리 누락 정정 - 2eca210 Task #680: clippy needless_late_init 정정 (CI rustc 1.95.0) 본질 정정: - src/renderer/layout/table_layout.rs:152 wrapper 분기 영역에 외곽선 추가 - 3 조건 AND 가드: depth==0 + 외부 셀 padding != 0 + border_fill borders not None - nested 측정 결과 영역 사용 영역 (외부 표 IR size 영역 사용 시 5번 박스 위치 부정합) - 외곽 4개 라인 (좌/우/상/하) col_node 추가 본 환경 검증: - cherry-pick 충돌 0건 (Auto-merging table_layout.rs) - cargo test --release ALL PASS 1165 lib + svg 7/7 + clippy clean - issue_nested_table_border ❌ 실패 (hardcoded 좌표 영역 PR #679 머지 후 영역 시프트 ~6.67px) - 외곽선 4개 라인 영역 SVG 영역 정상 출력 영역 (직접 grep 영역 검증) PR: #681 컨트리뷰터: @planet6897 (Jaeuk Ryu) — 30+ 사이클 핵심 컨트리뷰터 작업지시자 시각 검증: 'wasm 빌드해보세요' 영역 (웹 에디터 안 보임 영역 영역 점검)
edwardkim
added a commit
that referenced
this pull request
May 8, 2026
PR #681 (Task #680): nested 1x1 wrapper 표 외곽 테두리 누락 정정 - merge commit: e8671d6 (2 commits 단계별 보존 no-ff merge) - 본질: table_layout.rs:152 wrapper 분기 영역에 외곽선 추가 (3 조건 AND 가드 + nested 측정 결과 영역 사용) - 본 환경 결정적 검증 1165 lib + svg_snapshot 7/7 + issue_546/issue_554 13/13 + clippy clean - 회귀 차단 가드 hardcoded 좌표 fragility 발견 (PR #679 머지 후 ~6.67px 시프트) - WASM 빌드 4,597,064 bytes - 작업지시자 시각 판정: 1차 stale WASM 회귀 → 2차 WASM 빌드 후 ★ 통과 잔존 후속: (a) 회귀 차단 가드 hardcoded 좌표 정정 (b) padding 정합 (외부 셀 padding 3mm inset) 컨트리뷰터: @planet6897 (Jaeuk Ryu) — 30+ 사이클 핵심 컨트리뷰터 closes #680
6 tasks
edwardkim
added a commit
that referenced
this pull request
May 8, 2026
CI failure 영역 본질: PR #681 영역의 회귀 차단 가드 영역 영역 PR #679 (Task #676 trailing empty paragraph) 영역 머지 영역 후 영역 ~6.67px 시프트 영역 영향 영역 영역 hardcoded 좌표 (y=331.53/675.41) 영역 영역 본 환경 (y=324.87/668.75) 영역과 정합 부재 영역으로 영역 실패 영역. CI 영역에서도 영역 동일 실패 영역 (devel 영역 push 후 영역). PR #687 (Task #677) 영역의 layout.rs:2120-2147 영역 정정 영역 영역 추가 영역으로 영역 인라인 TAC + PartialParagraph 패턴 영역의 fixture 영역 (aift, exam_social) 영역 영역 영역 시프트 영역 영향 영역 영역 추가 영역 발생 영역. 정정 (메인테이너 hardcoded 좌표 영역 fragility 정정): - y 좌표 영역 hardcoded 영역 회피 영역 - x 좌표 영역 (lx=549.88, rx=940.53) 영역과 stroke 영역 본질 영역만 영역 검증 - 외곽선 4 라인 영역의 본질 (좌수직 / 우수직 / 수평) 영역 영역 검증 영역 본 정정 영역 영역 테스트 영역만 영역 변경 영역 (src 영역 영역 무영향) 영역 → WASM 영역 재빌드 영역 불필요 영역. Refs #680 #677
11 tasks
4 tasks
edwardkim
pushed a commit
that referenced
this pull request
May 14, 2026
…704) PR #870 (@planet6897) cherry-pick. mydocs 제외. 소스 코드 무변경 — tests/issue_703.rs #[ignore] 2건 제거 + 주석 갱신만. 본질 정정은 Task #676 (PR #679, typeset.rs trailing empty paragraph 가드)에서 완료. 검증: cargo test --release --test issue_703: 3/3 passed Co-Authored-By: Claude Opus 4.6 (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.
요약
본문 끝 빈 paragraph (h=16px) 가
LAYOUT_DRIFT_SAFETY_PX = 10.0안전마진 영역 내 미세 overflow (0.8px) 로 fit 실패하여 단독 빈 페이지를 발생시키던 결함 정정.samples/통합재정통계(2010.11월).hwpsamples/통합재정통계(2011.10월).hwpsamples/통합재정통계(2014.8월).hwp원인 분석 (
DBG_T676환경변수 trace)src/renderer/typeset.rs::typeset_paragraph의LAYOUT_DRIFT_SAFETY_PX = 10.0안전마진 (Task #321/#359/#361 영역의 LAYOUT_OVERFLOW 사전 차단 의도) 이 trailing 빈 줄의 fit 판정을 0.8px 차이로 실패시켜 split 분기로 진입, 페이지 2 단독 push.hide_empty_line분기 (Task #362) 는SectionDef bit 19미설정으로 미진입.정정 — trailing empty paragraph 가드 (단단 전용)
typeset_paragraph시그니처에is_last_in_section: bool인자 추가 +hide_empty_line분기 다음 가드 추가. 5 조건 AND 로 영향 영역 좁힘:is_last_in_sectionis_empty_para(text trim empty + no controls)!st.current_items.is_empty()st.col_count == 1total_h > available && total_h <= available + LAYOUT_DRIFT_SAFETY_PX기존
LAYOUT_DRIFT_SAFETY_PX상수 그대로 활용 — 신규 휴리스틱/허용오차 0.회귀 차단 가드
tests/issue_676_trailing_empty_para.rs(3 통합 테스트):issue_676_t재정통계_2010_11_single_page— 1p 검증issue_676_t재정통계_2011_10_single_page— 1p 검증issue_676_t재정통계_2014_08_no_regression— 무회귀 검증검증
cargo test --release --libcargo test --release(통합)issue_676회귀 차단 가드cargo build --releasetable_ops.rs:1007+object_ops.rs:298) —upstream/devel d58217bebaseline 직접 비교 동일, 본 PR 무관광범위 페이지네이션 sweep (
samples/187 fixture, BEFORE=upstream/devel d58217b)table-ipc.hwp13p → 11p, 한글2022 PDF 정답지 10p 방향 진전)table-ipc.hwp부수 진전 분석각 섹션마다
[Table + trailing 빈 paragraph]패턴 반복 구조. 본 가드가 일부 섹션의 trailing 빈 paragraph 를 흡수하여 단독 빈 페이지 2건 제거 → 한글2022 PDF 정답지 (10p) 방향 진전. 잔존 1p 차이는 별도 task 영역 (작업지시자 PAGE_MISMATCH 목록 19건 중 다른 항목).시각 영향
dump-pages결과:회귀 위험 영역 점검
후속 영역
본 PR 도입 가드로 작업지시자 PAGE_MISMATCH 19건 중 진전:
Test plan
cargo test --release --lib(1155 passed)cargo test --release --test issue_676_trailing_empty_para(3/3)cargo build --releasesamples/187 fixture 페이지 카운트 sweep (회귀 0)Closes #676
🤖 Generated with Claude Code