Task #548: 셀 inline TAC Shape margin + indent 정정 (closes #548)#561
Task #548: 셀 inline TAC Shape margin + indent 정정 (closes #548)#561planet6897 wants to merge 9 commits intoedwardkim:develfrom
Conversation
… 산식 정정) paragraph_layout.rs: 1. inner_pad 분기 제거 (line 693~717 → 693~700, -22 LOC) - has_visible_stroke / bs_left_px / bs_right_px / inner_pad_left/right 변수 모두 제거 - margin_left = box_margin_left (단일 룰, 텍스트 inset 한 번만) 2. box_x/w 산식 정정 (line 2687~2691) - override 케이스: (ox, ow) — margin 미적용 - 일반 케이스: (col_area.x, col_area.width) — margin 미적용 - paragraph border outline = col_area 전체 (PDF 한컴 2010 정합) integration_tests.rs: - test_544_passage_box_coords_match_pdf_p4 의 #[ignore] 제거 → GREEN - test_547_passage_text_inset_match_pdf_p4 의 #[ignore] 제거 → GREEN 검증: - cargo test --lib: 1121 passed / 3 ignored (baseline 1119/5 → +2 GREEN, -2 ignored) - 회귀 0건 - test_552_passage_box_top_gap_p2_4_6 (--ignored) GREEN 유지 → Task edwardkim#552 가 Task edwardkim#544 (2) 효과 흡수 (Stage 1 finding 확정) 측정값: - test_544: box_left_x 128.51 → 117.0 (PDF 117.0 ±2), box_width 425.1 - test_547: min_x 139.89 → 128.5 (PDF 128.5 ±2) 작업지시자 보고 증상 (글상자 우측 시프트) 직접 fix. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…y-pick @planet6897 1 commit) 옵션 A2 채택 — `05beb208` (Task edwardkim#544 v2 Stage 2) 단독 cherry-pick. B1 진단 결과 본 devel 의 Task edwardkim#479 미적용 trailing-ls 모델 확인 → 당초 옵션 A3 (edwardkim#552 + v2 + v3) 의 모델 전환 위험 회피 → 최소 fix 채택. - mydocs/pr/pr_551_review_v3_544_a2.md (검토 문서) - mydocs/pr/pr_551_v3_544_a2_report.md (처리 보고서) - mydocs/orders/20260504.md (오늘할일 신규) closes edwardkim#544 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… (옵션 A2 — passage 글상자 우측 시프트 정정 — @planet6897 1 commit) 작업지시자 보고: "21_언어_기출_편집가능본.hwp 1/2/4/5/7/8/11/13/14 페이지 글상자가 오른쪽으로 밀려있음". 이슈 edwardkim#544 (closed) 재오픈 후 PR edwardkim#551 잔존 cherry-pick. 당초 옵션 A3 (edwardkim#552 + v2 + v3) 검토했으나 B1 진단 결과 본 devel 의 Task edwardkim#479 미적용 (pre-edwardkim#479 trailing-ls 항상 가산 모델) 확인 → edwardkim#552/v3 cherry-pick 시 모델 전환 위험. 옵션 A2 (`05beb208` 단독, edwardkim#547+edwardkim#544(1) 통합) 채택. 본질 정정 (paragraph_layout.rs): 1. box_x = col_area.x / box_w = col_area.width (margin 미적용, paragraph border outline = col_area 전체). 2. inner_pad 분기 제거 (visible-stroke + bs=0 인 경우 margin_left = box_margin_left + inner_pad_left 이중 적용 → 단일 적용). 측정 (페이지 4 [7~9]): - 박스 left x: 128.51 → 117.17 (PDF 117.0) - 박스 width: 402.5 → 425.17 (PDF 425.1) - 본문 첫 글자 '평' x: 153.12 → 128.51 (PDF 128.5) - 9 박스 (col 0/1) 모두 정합 검증: - cargo test --lib 1120 / test_544+test_547 +2 GREEN / 회귀 0건 - clippy 0 신규 (pre-existing 2건 동일 baseline) - 5 샘플 58 페이지 광범위 sweep: 38 differ (의도된 paragraph border 정합 변경, visible-stroke paragraph text -11.33 px 좌측 시프트 의도) - 회귀 검출 가능 영역 (비-border paragraph text) 0 변경 - 작업지시자 시각 판정 통과 cherry-pick 1 commit: - 457d5f3 Task edwardkim#544 v2 Stage 2 (`05beb208` from @planet6897) 처리 보고서: mydocs/pr/pr_551_v3_544_a2_report.md 검토 문서: mydocs/pr/pr_551_review_v3_544_a2.md closes edwardkim#544 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- mydocs/pr/pr_551_review_v3_544_a2.md → archives/ - mydocs/pr/pr_551_v3_544_a2_report.md → archives/ - mydocs/orders/20260504.md: 처리 상태 갱신 (devel merge f6039f3 push + 이슈 edwardkim#544 close) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…indent cherry-pick @planet6897 `9dc40ddb` (Task edwardkim#544 v2 Stage 3 — Phase C edwardkim#548). 원 commit 의 Phase C 만 본 사이클에서 cherry-pick (Task edwardkim#544 본질은 이미 별도 사이클에서 처리됨, PR edwardkim#560). table_layout.rs (+41 LOC): 1. effective_margin_left_line 헬퍼 추가 (paragraph_layout 의 line_indent 산식과 동일): - positive indent: line 0 에 +indent - negative (hanging): line N≥1 에 +|indent| 2. inline_x 산출 3 분기 (Left/Justify) 에 line_margin 가산: - paragraph 시작 (line 0) - Picture target_line reset (Task edwardkim#500 정합) - Shape target_line reset (Task edwardkim#500 + edwardkim#520 정합) 3. para_margin_left_px / para_indent_px 추출 (ParaShape 에서) integration_tests.rs: - test_548_cell_inline_shape_first_line_indent_p8 의 #[ignore] 제거 → GREEN conflict resolution: - src/renderer/layout/table_layout.rs Shape 분기 (line 1648-1693): incoming 채택 (HEAD 빈 영역 + incoming block 삽입, surrounding context 불일치로 auto-merge 실패, 의미는 단순 삽입) - src/renderer/layout/integration_tests.rs: auto-merge closes edwardkim#548 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
contributor fork 측정 y≈685-690 → 본 devel 측정 y≈698.43. y 범위 [685, 690] → [690, 710] 으로 조정 (puko rect 식별). 원인: 본 devel 이 Task edwardkim#479 미적용 (pre-edwardkim#479 trailing-ls 항상 가산 모델) 이라 셀 y 위치가 contributor fork (Task edwardkim#479 적용) 와 다름. cargo test --lib --release: 1121 passed / 0 failed / 2 ignored (test_548 GREEN). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- mydocs/pr/pr_task548_review.md - mydocs/pr/pr_task548_report.md - mydocs/orders/20260504.md: Task edwardkim#548 사이클 추가 새 PR 등록 (PR edwardkim#551 잔존 누적 회피 — feedback_no_pr_accumulation 메모리 적용 첫 사례). closes edwardkim#548 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ndent 정정 (cherry-pick @planet6897 1 commit + test fixup) 본 devel 측정 (페이지 8 셀 5 line 0 [푸코] rect): x=131.04 (PDF 155.6 와 -24.6 px 시프트). `table_layout.rs` 셀 안 inline TAC Shape 분기에 paragraph 의 margin_left + first_line_indent 미반영 결함. 본질 정정 (table_layout.rs +41 LOC): 1. effective_margin_left_line 헬퍼 추가 (paragraph_layout 와 동일 산식). 2. inline_x 산출 3 분기 (Left/Justify) 에 line_margin 가산. 3. para_margin_left_px / para_indent_px 추출. 측정 (수정 후): x=155.60 (PDF ±0.0). 검증: - cargo test --lib 1121 / test_548 +1 GREEN / 회귀 0건 - clippy 0 신규 - 6 샘플 73 페이지 광범위 sweep: 13 differ (의도된 셀 안 inline TAC Shape margin/indent 적용) cherry-pick 1 commit: - 3de0505 Task edwardkim#548 (`9dc40ddb` from @planet6897) - a0dad0d Task edwardkim#548 fixup (test_548 y 범위 본 devel 측정값 기준 조정) 처리 보고서: mydocs/pr/archives/pr_task548_report.md 검토 문서: mydocs/pr/archives/pr_task548_review.md closes edwardkim#548 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- mydocs/pr/pr_task548_review.md → archives/ - mydocs/pr/pr_task548_report.md → archives/ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PR #561 (Task #548, @planet6897 / commit author Jaeook Ryu) 1차 검토: - stacked PR (PR #560 위) — PR #560 은 이미 close + devel 적용 완료 - PR mergeable=CONFLICTING (PR base 시점 차이) 이지만 본질 commit (3de0505 + a0dad0d) cherry-pick 충돌 0 - test_548 이 본 환경 devel 에 RED+#[ignore] 로 이미 존재 (PR #560 cherry-pick 시 들어옴) — fix 적용 시 GREEN 전환 확인 - 단일 룰 (effective_margin_left_line) 정합 + Task #500/#520 정합 명시 + 페이지 8 셀 5 line 0 [푸코] rect 정정 권장 처리: 옵션 A — 핀셋 cherry-pick (3de0505 + a0dad0d) + 결정적 검증 + 작업지시자 시각 판정 (★ 게이트).
…margin + indent — @planet6897 / Jaeook Ryu 2 commits + 시각 판정 ★ 통과) PR #561 (Task #548, @planet6897 PR / Jaeook Ryu commit author): - stacked PR (PR #560 위) — PR #560 이미 close + devel 적용 완료 - 본질 commits 2건 핀셋 cherry-pick (3de0505 + a0dad0d) 충돌 0 - test_548 RED → GREEN 전환 확인 (본 devel 에 RED+#[ignore] 로 이미 존재) 본질: - effective_margin_left_line 헬퍼 (paragraph_layout 산식과 동일 단일 룰) - 페이지 8 셀 5 line 0 [푸코] inline rect: x=131.04 → 155.60 (PDF 155.6) - 3 분기 (paragraph 시작 / Picture target_line reset / Shape target_line reset) 검증: - cargo test --lib --release 1130 passed (test_548 GREEN) - cargo clippy 0건 - WASM 4,570,220 bytes (PR #589 baseline +447 bytes — table_layout.rs +79 LOC 정합) - 광범위 회귀 sweep (3 샘플 39 페이지) 10 differ — 권위 영역 정합 - 시각 판정 ★ 통과 (한국어/영어 시험지 가독성 개선) closes #548.
|
본 PR 의 본질 2 commits ( 처리 결과본질 cherry-pick
결정적 검증
광범위 회귀 sweep (본 환경)
시각 판정 (★ 게이트)작업지시자 시각 판정 결과:
페이지 8 셀 5 line 0 [푸코] inline rect 의 x=131.04 → 155.60 (PDF 155.6) 정정이 시각적으로 회복되었음을 확인했습니다. 한국어/영어 시험지 영역의 가독성 개선 효과가 인정되었습니다. Stacked PR 정합PR #560 (Task #544) 은 이미 close + devel 적용 완료 ( 단일 룰 정합
처리 보고서: 본 PR 은 컨트리뷰터 두 분의 협업 흐름 (@planet6897 의 fork |
- 처리 보고서 추가: mydocs/pr/archives/pr_561_report.md PR #561 (Task #548, @planet6897 / @jangster77) 핀셋 cherry-pick 2 commits + 결정적 검증 + WASM 4,570,220 bytes + 시각 판정 ★ 통과 - 검토 보고서 archives 이동: mydocs/pr/pr_561_review.md → mydocs/pr/archives/pr_561_review.md - 5/5 orders 갱신: PR #561 항목 추가
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 (영문).
Summary
table_layout.rs셀 안 inline TAC Shape (Control::Shape+treat_as_char=true) 분기에 paragraph 의margin_left + first_line_indent미반영 —effective_margin_left_line헬퍼 추가 + 3 분기 (Picture target_line reset, Shape target_line reset, paragraph 시작) 에line_margin가산9dc40ddb(Task 21_언어_기출 passage 박스 (paragraph border) 위치/크기 PDF 정합 (Task #540 후속) #544 v2 Stage 3 — Phase C 셀 내부 paragraph 첫줄 inline TAC Shape 의 margin_left + first-line indent 누락 (Task #547 후속) #548) 핀셋 cherry-pick (3de05051) + test fixup (a0dad0d3)본 PR 은 PR #560 (Task #544) 위에 stack 됩니다. PR #560 의 commits (4건) 가 본 PR 의 ancestor 에 포함됨 —
test_548테스트가 PR #560 의 cherry-pick (05beb208) 에서 추가됐고, 본 PR 이 그 테스트의#[ignore]를 제거하는 의존 관계.권장 merge 순서: PR #560 → PR #561.
본질
paragraph_layout(텍스트 경로) 와table_layout(shape 경로) 가 inline shape 위치를 다르게 계산:effective_margin_left_line헬퍼는 paragraph_layout 의 line_indent 산식과 동일 (단일 룰):test fixup
contributor fork 의
test_548_cell_inline_shape_first_line_indent_p8가 y 범위 [685, 690] 검사. 본 devel 측정 y≈698.43 (Task #479 미적용 trailing-ls 모델로 셀 y 위치가 fork 와 다름) → y 범위 [690, 710] 으로 조정.Test plan
cargo test --lib --release: 1121 passed / 0 failed / 2 ignored — baseline +1 GREEN (test_548)cargo clippy --release --lib: 신규 결함 0건 (pre-existing 2건 동일 baseline)처리 보고서
mydocs/pr/archives/pr_task548_report.mdmydocs/pr/archives/pr_task548_review.md메모리 룰 적용
feedback_no_pr_accumulation— 새 PR 로 등록 (PR Layout Phase 0~2 + 옛한글 PUA + 누적 task fix (Task #435~#528, #549/#550) #551 잔존 누적 회피, 첫 적용 사례)feedback_pdf_not_authoritative— 한컴 2010 PDF 정합 + 작업지시자 시각 판정 게이트feedback_essential_fix_regression_risk— 6 샘플 73 페이지 광범위 회귀 검증feedback_rule_not_heuristic—effective_margin_left_line단일 룰🤖 Generated with Claude Code