Skip to content

Task #634: 한컴 호환 쪽번호 표시 동작 검증 + 회귀 방지 테스트#638

Closed
planet6897 wants to merge 2 commits into
edwardkim:develfrom
planet6897:task634-pr
Closed

Task #634: 한컴 호환 쪽번호 표시 동작 검증 + 회귀 방지 테스트#638
planet6897 wants to merge 2 commits into
edwardkim:develfrom
planet6897:task634-pr

Conversation

@planet6897

Copy link
Copy Markdown
Contributor

요약

한컴 호환 — samples/aift.pdf 페이지 2 vs rhwp SVG 차이 발견에서 출발한 쪽번호 표시 동작 검증.

배경

작업지시자 보고: samples/aift.pdf 페이지 2 (한컴 미표시) vs rhwp SVG 페이지 2 ("- 2 -" 표시) 차이.

가설 시행 착오 + 정정

  • 첫 가설 H1'' (NewNumber 게이팅): 첫 NewNumber Page 발화 페이지부터만 표시 → 잘못
  • Stage 2 fix (PageNumberAssigner.numbering_started 등 9 파일) 시도 후 revert
  • Stage 4: 새 한컴 PDF (1-up portrait) 측정 결과 페이지 1, 6 (NewNumber 발화 전) 도 한컴 표시 → 가설 깨짐

한컴 ↔ rhwp 일치 매트릭스 (aift.hwp)

Page 한컴 rhwp 메커니즘
1 (cover disclaimer) 표시 표시 ✓ PageNumberPos 등록 후
2 (35x27 표 cover) 미표시 표시 ✗ 별도 issue #637
3 (14x17 표 요약문) 미표시 표시 ✗ 별도 issue #637
4, 5 (목차/별첨) 미표시 미표시 ✓ PageHide page_num=true
6 (본문 시작) 표시 표시 ✓ 정상
7+ (NewNumber 후) 표시 표시 ✓ 정상

변경 사항

  • src/ 코드 변경: 0 (Stage 2 fix revert 후 코드 변경 없음)
  • 회귀 방지 통합 테스트 8건 (`src/renderer/layout/integration_tests.rs`):
    • aift p1/p4/p5/p6/p7 표시 여부 검증
    • 국립국어원 p1 PageHide 미표시 / p3 표시
    • hwp3-sample p1 (NewNumber 0개) 표시 (회귀 방지)
  • 문서: 수행/구현 계획서, Stage 0~4 보고서, 최종 보고서, 오늘할일

미해결 (별도 issue 분리)

Test plan

  • `cargo test --release --lib` → 1142 passed, 0 failed, 2 ignored
  • `cargo test --release --lib test_634` → 8 passed

closes #634

🤖 Generated with Claude Code

planet6897 and others added 2 commits May 6, 2026 14:29
samples/aift.pdf 페이지 2 (한컴 미표시) vs rhwp SVG 페이지 2 ("- 2 -" 표시) 차이 발견에서 출발.

가설 시행 착오:
- Stage 0~3: 가설 H1'' (NewNumber 게이팅) — 첫 NewNumber Page 발화 페이지부터 표시.
  Stage 2 fix 시도 (PageNumberAssigner.numbering_started + PageContent.show_page_number 등 9 파일).
- Stage 4: 새 한컴 PDF (1-up portrait) 정밀 측정 결과 가설 H1'' 잘못 확인.
  페이지 1, 6 (NewNumber 발화 전) 도 한컴 표시 → Stage 2 fix revert.

최종 한컴 ↔ rhwp 일치 매트릭스 (aift.hwp):
| Page | 한컴 | rhwp | 메커니즘 |
|------|------|------|---------|
| 1 (cover disclaimer)   | 표시 | 표시 ✓ | PageNumberPos 등록 후 |
| 2 (35x27 표 cover)     | 미표시 | 표시 ✗ | 별도 issue edwardkim#637 |
| 3 (14x17 표 요약문)     | 미표시 | 표시 ✗ | 별도 issue edwardkim#637 |
| 4, 5 (목차/별첨 목차)    | 미표시 | 미표시 ✓ | PageHide page_num=true |
| 6 (본문 시작)           | 표시 | 표시 ✓ | 정상 |
| 7+ (NewNumber 발화 후) | 표시 | 표시 ✓ | 정상 |

코드 변경 0 (Stage 2 fix revert 후 src/ 변경 없음).

회귀 방지 통합 테스트 8건 신규 (src/renderer/layout/integration_tests.rs):
- test_634_aift_page1_shows_page_number
- test_634_aift_page4_pagehide_no_page_number
- test_634_aift_page5_pagehide_no_page_number
- test_634_aift_page6_shows_page_number
- test_634_aift_page7_shows_page_number
- test_634_gukrip_page1_pagehide_no_page_number
- test_634_gukrip_page3_shows_page_number
- test_634_no_newnumber_doc_shows_page_numbers_from_page1

검증: 전체 1142 passed, 0 failed, 2 ignored. 회귀 0.

페이지 2, 3 미표시 메커니즘 별도 issue edwardkim#637 분리.

closes edwardkim#634
@edwardkim

edwardkim commented May 8, 2026

Copy link
Copy Markdown
Owner

본 PR 검토 결과 — 본질 결함 발견 + 정석 처리 안내

본 PR (Task #634, src 변경 0 + 회귀 방지 통합 테스트 8건) 검토 중 메인테이너가 본질 결함을 발견했습니다. 본 PR 의 가설 시행 착오 (Stage 0~3 NewNumber 게이팅 가설 → Stage 4 가설 깨짐 → revert) 와 별개로, 본 환경의 셀 안 PageHide 컨트롤 무시 결함 발견.

본질 결함 발견 — aift.hwp page 2 의 [감추기] 컨트롤

작업지시자가 한컴 편집기에서 직접 확인한 다이얼로그:

  • [감추기] 컨트롤의 6 항목: 머리말 / 꼬리말 / 쪽 번호 / 쪽 테두리 / 쪽 배경 / 바탕쪽

본 환경 파서 직접 측정 결과 — page 2 의 PageHide 위치:

section 0 / paragraph 1 / Table[0] / 셀[167] / paragraph[3]
text: "       년        월        일"
ctrl[0] = PageHide(header=true, footer=true, master=true,
                   border=true, fill=true, page_num=true)

→ 본 환경 파서는 6 필드를 모두 정확히 인식. 다만 페이지네이션 + 렌더러 + dump 3 곳에 결함 존재.

본 환경의 결함 3건

# 위치 결함
1 pagination/engine.rs:516-531 page_hides 수집이 본문 paragraph 만 대상, 셀 안의 PageHide 무시 — page 2 쪽번호 표시 결함의 본질
2 layout.rs:404-407 build_page_background() + build_page_borders()hide_fill + hide_border 가드 부재 — 6 필드 중 2 필드 미적용
3 main.rs:1897-1920 (dump) 셀 안 paragraph 의 controls 출력에서 Picture + Shape 만 처리, PageHide 분기 부재 — 디버깅 한계

Issue #637 의 본질 재해석

본 PR 본문에서 별도 issue 분리한 Issue #637 (page 2/3 cover-style 미표시 메커니즘) 의 "PageHide 없는데도 한컴 미표시" 진단은 잘못된 결론. 실제는:

  • page 2 의 셀[167] p[3] 에 PageHide 가 정확히 인코딩 (6 필드 모두 true)
  • 본 환경 페이지네이션이 셀 안의 PageHide 를 무시하여 검출 못 함

즉 본 환경 결함이 본질이며, 한컴 동작은 정합 (PageHide 적용으로 미표시 정합).

정석 처리 영역

본 PR 의 "src 변경 0 + 회귀 방지 가드 8건" 외에 본질 정정 3 영역 이 정석 처리:

  1. pagination/engine.rs 의 셀 안 PageHide 수집 추가page_hides 키에 cell_context 추가 또는 별도 컬렉션. 셀 안 paragraph 재귀 + PageHide 수집
  2. layout.rs:404-407hide_border + hide_fill 가드 추가page_hide 의 두 필드로 build_page_background() + build_page_borders() 호출 가드
  3. main.rs:1897-1920 의 dump PageHide 분기 추가 — 셀 안 controls 에서 PageHide 직접 출력 (디버깅 용)

회귀 방지 영역

본 PR 의 8 회귀 가드 중 일부 (특히 test_634_aift_page4_pagehide_no_page_number) 정합 유지. 추가 신규 가드 권고:

  • test_634_aift_page2_cell_pagehide_hides_page_number — 셀 안 PageHide 적용으로 page 2 쪽번호 미표시 검증
  • test_634_aift_page3_cell_pagehide_hides_page_number — page 3 동일

처리 안내

본 PR close 진행 — 본질 결함 정정의 후속 PR 재제출 권고. 정석 처리 후 다시 OPEN 요청 부탁드립니다.

본 환경에서 발견된 본질 결함 분석의 권위 자료:

긴 시간 + TDD 5 단계 + 가설 시행 착오 학습이 담긴 본 PR 작업 감사합니다. 후속 PR 환영합니다.

@edwardkim edwardkim closed this May 8, 2026
@edwardkim

Copy link
Copy Markdown
Owner

PageHide 컨트롤과 관련된 PR이 여러 개 중첩되어 이 PR은 재개하지 마시고 다른 PR 쪽에서 처리하는 것으로 하면 좋겠습니다.

edwardkim added a commit that referenced this pull request May 8, 2026
PR #638 (Task #634, 한컴 호환 쪽번호) close 영역 + PR #641 (Task #639, cover-style 룰) close 영역 처리:
- 두 PR 모두 devel 반영 부재 (작업지시자 결정 영역 정합)
- 컨트리뷰터 (@planet6897) 영역의 후속 PR #711 (Task #705) 영역에서 본질 정정 영역 진행

PR #638 영역의 본질 결함 발견:
- pagination/engine.rs 셀 안 PageHide 무시 (page 2 쪽번호 결함의 본질)
- layout.rs hide_border/hide_fill 가드 부재
- main.rs dump 셀 안 PageHide 분기 부재
→ 컨트리뷰터에게 정석 처리 안내 댓글 등록 영역

PR #641 영역의 cover-style 휴리스틱:
- 본 환경 결함 영역의 우회 (workaround) 영역으로 분석
- 174 샘플 영역 중 영향 페이지 2 영역만 매칭 (PR #711 영역의 6 샘플 영역 영역 영역)
- 작업지시자 결정: 본 PR close + PR #711 본질 정정으로 재검토 영역

archives 이동:
- mydocs/pr/archives/pr_638_review.md
- mydocs/pr/archives/pr_641_review.md
- mydocs/pr/archives/pr_641_close_report.md (close 결정 + supersede 안내)

5/8 orders 영역 신규:
- mydocs/orders/20260508.md
- PR #684 (5/8 처리 완료) + PR #638 (close) + PR #641 (close, supersede PR #711) entry

본 사이클 (5/7~5/8) close 패턴 누적:
- PR #638 (본질 결함 발견)
- PR #641 (우회 접근 → PR #711 supersede)
- 메인테이너 게이트웨이 방식의 권위 사례 영역 강화 누적

본 사이클 PR 처리 누적: 17건 (15 merged + 2 closed)
edwardkim added a commit that referenced this pull request May 9, 2026
PR #638/#641 close 시 작업지시자 (메인테이너) 가 발견한 본 환경 결함
3건의 본질 정정. PR #641 (cover-style 휴리스틱 우회) 폐기 후 작업지시자
권고 영역의 본질 정정 supersede.

본질 결함 3건:
1. pagination/engine.rs:519-544 + typeset.rs:2120 — page_hides 수집이
   본문 paragraph 만 → 셀 안 PageHide 무시 (두 페이지네이션 경로 양분 정합)
2. layout.rs:411-422 — build_page_background()/build_page_borders() 호출에
   hide_fill/hide_border 가드 부재
3. main.rs:1665-1670 — dump 셀 안 controls 매칭에서 PageHide 분기 부재

정정:
- collect_pagehide_in_table 재귀 함수 (engine.rs + typeset.rs 두 경로 동기)
- layout.rs 의 hide_fill/hide_border 가드 추가 — 6 필드 모두 가드 정합화
- main.rs dump 셀 안 PageHide 분기 추가

Stage 0 198 sample sweep 측정:
- 셀 안 PageHide 13건 / 6 샘플 (PR #640 H2 측정 누락 영역의 정량 확인)
- 영향 샘플: aift, 2022 국립국어원, KTX, kps-ai, tac-img-02 hwp+hwpx

회귀 가드 (test_705_*) 6건:
- aift p2 셀[167] 6 필드 모두 true 검증
- aift p3 셀[31] page_num 검증
- 국립국어원/KTX 셀 안 PageHide 매핑 검증
- 본문 + 셀 안 합산 카운트 검증

작업지시자 시각 판정 ★ 통과 (2026-05-09):
- 한컴 PDF 권위본 (pdf/2022년 국립국어원 업무계획-2022.pdf page 3
  마지막 줄 "- 1 -") 정합
- 한컴 편집기 [감추기] 다이얼로그 6 필드 영역 정합
- aift.hwp page 2 + 국립국어원 page 3 등 셀 안 PageHide 영역 모두 정합

메인테이너 가드 갱신 commit (3253f7d):
- test_634_gukrip_page3_shows_page_number: count == 3 → count == 0
  (rhwp 의 한컴 부정합 행위 보존 → 한컴 권위 정합으로 의도 변경)

검증:
- cargo test --release: lib 1173 (+6 test_705 신규) + 통합 ALL GREEN, failed 0
- cargo clippy --release: 신규 경고 0
- 광범위 sweep 7 fixture / 170 페이지 / diff 2 (aift p2/p3 의도된 변경, 다른
  fixture 회귀 0)
- WASM 빌드 4,606,179 bytes

PR supersede 영역:
- PR #638 (Task #634) close → src 무변경 회귀 가드만 머지
- PR #640 (Task #637) close → 분석 docs (H2 측정 누락 영역의 정량 확인)
- PR #641 (Task #639) close → cover-style 휴리스틱 폐기 (작업지시자 권고)
- PR #711 (Task #705) — 본질 정정 supersede

Closes #705

Co-Authored-By: Jaeook Ryu <jaeook.ryu@gmail.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 9, 2026
- mydocs/pr/archives/pr_711_review.md (검토 문서, 시각 판정 결과 반영)
- mydocs/pr/archives/pr_711_report.md (처리 보고서, 가드 갱신 명시)
- mydocs/plans/archives/task_m100_705{,_impl}.md
- mydocs/orders/20260509.md: PR #711 행 + 본 사이클 패턴 라인 추가

처리 결과:
- 옵션 A — 7 commits cherry-pick + 메인테이너 가드 갱신 + no-ff merge (2bc982c)
- 작업지시자 시각 판정 ★ 통과 — 한컴 정답지 정합 확정
- test_634_gukrip_page3 가드 갱신 (count=3 → 0, 메인테이너 commit 3253f7d)
- PR #638/#640/#641 close → PR #711 본질 정정 supersede
- Issue #705 close 자동 정합

부수 사실:
- PR #706 form-002 패턴 정합 영역 의 두 번째 사례
- `feedback_visual_judgment_authority` + `feedback_visual_regression_grows` 권위 사례 강화

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