Task #637: 한컴 호환 — cover-style 페이지 쪽번호 미표시 메커니즘 분석 (closes #637)#640
Closed
planet6897 wants to merge 5 commits into
Closed
Task #637: 한컴 호환 — cover-style 페이지 쪽번호 미표시 메커니즘 분석 (closes #637)#640planet6897 wants to merge 5 commits into
planet6897 wants to merge 5 commits into
Conversation
aift.hwp 페이지 2, 3 (큰 표만 있는 cover-style) 쪽번호 미표시 메커니즘 분석. Task edwardkim#634 종료 후 분리된 후속 issue. 5가지 가설 (cover-style 휴리스틱 / 셀 내부 PageHide / paragraph header 비트 / 표 attr 비트 / 한컴 자체 휴리스틱) 데이터 기반 검증 + 권고안 결정. 본 task 는 read-only 분석. 결정적 룰 발견 시에만 별도 fix issue 분리.
aift.hwp 페이지 2, 3 (큰 표만 있는 cover-style) 미표시 메커니즘 분석 사전 단계. 데이터 수집: - dump-pages 페이지 1~6 구조 (items, body 사용량, 표 비율) - dump 페이지 1/2/3/6 host paragraph (cc, ps_id, controls) - 문서 전체 PageHide 컨트롤 (정확히 2개: 페이지 4 para 2.34, 페이지 5 para 2.54) - 한컴 PDF 측정 (pypdf): 페이지 1, 6, 7 표시 / 페이지 2, 3, 4, 5 미표시 확정 - 표 attr 매트릭스 (페이지 1: 0x04000006, 2: 0x0600000e, 3: 0x0400000e, 6: 0x0600000e) Stage 0 사전 판정: - H1 (cover-style 휴리스틱): 유력 — 페이지 2/3 만 items=1 + 표 89~98% - H2 (셀 내부 PageHide): 기각 — 문서 전체 PageHide 가 정확히 2개 - H3 (paragraph header 비트): 기각 — 페이지 2 (미표시) host 와 페이지 6 (표시) host 거의 동일 - H4 (표 attr 비트): 기각 — 페이지 6 표 attr = 페이지 2 표 attr (0x0600000e) - H5 (한컴 휴리스틱): H1 변형, Stage 2 교차 검증 후 결정 본 단계는 read-only 분석. 코드 변경 없음.
도구: examples/inspect_637.rs (paragraph header raw + cover-candidate enumeration).
검증 결과:
- H1 cover-style 휴리스틱 → 결정적 룰로 정형화: 페이지가 items=1 인 단일
완전한 Table (PartialTable 아님) 을 포함하고 tac=false 일 때 한컴은
쪽번호 미표시.
- 174 샘플 전수 조사: aift.hwp p2, p3 만 매칭 (전체의 0.06%, 한컴 미표시 일치)
- aift.hwp 의 tac=true items=1 페이지 (p74, p75) 는 한컴 표시 — tac=false
가 결정적 분리자임을 검증
- H2, H3, H4 최종 기각:
* H2: 문서 전체 PageHide 정확히 2개 (페이지 4 para 2.34, 페이지 5 para 2.54)
* H3: 페이지 2 host (미표시) 와 페이지 6 host (표시) 의 raw paragraph
header 가 ps_id 외 byte-for-byte 동일 (cc=9, mask=0x00000800,
break_raw=0x04, raw_header_extra 12B 완전 동일)
* H4: 페이지 6 (표시) 표 attr = 0x0600000e (페이지 2 attr 와 동일)
- H5 (한컴 휴리스틱): H1 의 정확형 등가
회귀 위험: 매우 낮음 (174 샘플 중 2 페이지만 영향, 모두 정합성 개선).
Stage 3 사전 권고: 시나리오 (a) 별도 fix issue 분리 후 본 issue close-as-analysis.
본 단계는 read-only 분석. 코드 변경 없음 (example 추가만).
분석 완료 (Stage 0 → Stage 1 → Stage 3, Stage 2 α 결정으로 생략). 결과: - H1 cover-style 휴리스틱이 결정적 룰로 확정: 페이지 items=1 + 완전한 Table (PartialTable 아님) + tac=false → 한컴 미표시 - 174 샘플 전수 조사: aift p2, p3 만 매칭 (전체의 0.06%) - H2/H3/H4 최종 기각 - 회귀 위험 매우 낮음 (영향 페이지 2건, 모두 정합성 개선) 권고: 시나리오 (a) — 별도 fix issue 분리 후 본 issue close-as-analysis-complete. 코드 변경 0 (examples/inspect_637.rs 분석 도구 추가만). orders/20260506.md 갱신 (edwardkim#637 완료 상태 반영).
GitHub Issue 처리: - edwardkim#637 close-as-analysis-complete (분석 완료 코멘트 포함) - edwardkim#639 등록 (fix issue: cover-style 페이지 자동 쪽번호 미표시) orders 갱신: - edwardkim#637 상태: "완료 (분석 close, fix issue edwardkim#639 분리)" - edwardkim#639 신규 등록 entry 추가 (등록만, 진행 대기) milestone v1.0.0 설정은 planet6897 권한 부족으로 실패 — 메인테이너 수동 설정 필요.
7 tasks
Contributor
Author
This was referenced May 8, 2026
planet6897
added a commit
to planet6897/rhwp
that referenced
this pull request
May 9, 2026
- inspect_705.rs / scan_cell_pagehide.rs 분석 도구 추가 - aift.hwp 셀[167]/p[3] PageHide 6필드 모두 true 확인 (메인테이너 권위 측정 일치) - 198 샘플 sweep: 셀 안 PageHide 13건 / 6 샘플 (3%) — PR edwardkim#640 H2 측정 누락 영역 - 중첩 표 (depth 2+) 실측 0건 — Stage 2 재귀 1 depth 충분 - 신규 회귀 테스트 후보 6건 도출 (aift x4 + 국립국어원/KTX x2) Refs edwardkim#705
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>
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.
Summary
examples/inspect_637.rs) 추가만, src/ 변경 없음배경
Task #634 (한컴 호환 — 첫 NewNumber Page 게이팅) 종료 시점에 미해결로 남은
samples/aift.pdf페이지 2 (사업계획서 표지, 35×27 표) 와 페이지 3 (요약문, 14×17 표) 의 한컴 미표시 메커니즘.페이지 2, 3 두 페이지 모두 PageHide page_num=true 컨트롤 없음에도 한컴은 미표시. 별도 메커니즘 존재.
결과
결정적 룰 확정
5가지 가설 판정
H3 결정적 byte-level 검증
01 00 00 00 01 00 00 00 00 00 00 0001 00 00 00 01 00 00 00 00 00 00 00페이지 2 host (미표시) 와 페이지 6 host (표시) 의 paragraph header 가 ps_id (시각 모양 ID) 외 byte-for-byte 동일 → H3 즉시 기각.
174 샘플 전수 조사
다른 173 샘플 모두 0건 매칭. 회귀 위험 매우 낮음.
tac=true 케이스 검증 (룰 보정)
aift.hwp 페이지 74 (pi=910), 75 (pi=911) 가
items=1 + Table + tac=true패턴 매칭. 한컴 PDF 측정 결과 표시 ("- 67 -", "- 68 -"). tac=false 가 결정적 분리자임을 검증.권고안 — 시나리오 (a) 채택
본 issue 는 분석 완료로 close. 결정적 룰 구현은 별도 fix issue 로 분리.
산출물
mydocs/plans/task_m100_637.mdmydocs/working/task_m100_637_stage0.mdmydocs/working/task_m100_637_stage1.mdmydocs/report/task_m100_637_report.mdexamples/inspect_637.rsmydocs/orders/20260506.md메모리 룰 준수
Test plan
🤖 Generated with Claude Code