Skip to content

Task #637: 한컴 호환 — cover-style 페이지 쪽번호 미표시 메커니즘 분석 (closes #637)#640

Closed
planet6897 wants to merge 5 commits intoedwardkim:develfrom
planet6897:pr-task637
Closed

Task #637: 한컴 호환 — cover-style 페이지 쪽번호 미표시 메커니즘 분석 (closes #637)#640
planet6897 wants to merge 5 commits intoedwardkim:develfrom
planet6897:pr-task637

Conversation

@planet6897
Copy link
Copy Markdown
Contributor

Summary

배경

Task #634 (한컴 호환 — 첫 NewNumber Page 게이팅) 종료 시점에 미해결로 남은 samples/aift.pdf 페이지 2 (사업계획서 표지, 35×27 표) 와 페이지 3 (요약문, 14×17 표) 의 한컴 미표시 메커니즘.

페이지 2, 3 두 페이지 모두 PageHide page_num=true 컨트롤 없음에도 한컴은 미표시. 별도 메커니즘 존재.

결과

결정적 룰 확정

페이지가 items=1 인 단일 완전한 Table (PartialTable 아님) 을 포함하고
그 Table 의 treat_as_char=false 일 때 한컴은 쪽번호 표시 안 함.

5가지 가설 판정

가설 판정 결정적 근거
H1 cover-style 휴리스틱 → 결정적 룰 채택 174 샘플 중 aift p2, p3 만 매칭 (0.06%)
H2 셀 내부 PageHide 기각 문서 전체 PageHide 정확히 2개 (페이지 4, 5 만)
H3 paragraph header 비트 기각 페이지 2 host = 페이지 6 host byte-for-byte 동일 (ps_id 외)
H4 표 attr 비트 기각 페이지 6 (표시) 표 attr = 페이지 2 (미표시) attr 동일 (0x0600000e)
H5 한컴 자체 휴리스틱 H1 등가 H1 의 정확형

H3 결정적 byte-level 검증

페이지 char_count control_mask break_raw raw_header_extra (12B)
2 (0.1) 미표시 9 0x00000800 0x04 01 00 00 00 01 00 00 00 00 00 00 00
6 (2.57) 표시 9 0x00000800 0x04 01 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 샘플 전수 조사

=== aift.hwp (2 cover-pages) ===
  page 2 (sec=0 page_num=2 pi=1): 35x27 635.6x946.3px
  page 3 (sec=1 page_num=3 pi=0): 14x17 631.3x861.1px

다른 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.md 수행 계획서 (4단계 stage 0~3)
mydocs/working/task_m100_637_stage0.md Stage 0 — 사전 데이터 수집 + 가설 사전 판정
mydocs/working/task_m100_637_stage1.md Stage 1 — 가설 체계적 검증 + 결정적 룰 확정
mydocs/report/task_m100_637_report.md 최종 보고서
examples/inspect_637.rs paragraph header raw + cover-candidate 분석 도구
mydocs/orders/20260506.md 오늘 할일 (#637 완료 + #639 등록 entry)

메모리 룰 준수

Test plan

  • cargo build --release 통과
  • cargo build --release --example inspect_637 통과
  • 174 샘플 전수 조사 (회귀 위험 평가)
  • aift.hwp 페이지 2, 3 (target) + 페이지 1, 6, 7+ (대조) + 페이지 74, 75 (tac=true) 한컴 PDF 측정 확정
  • paragraph header byte-level 비교 (H3 결정적 기각)
  • 표 attr 비트 매트릭스 (H4 결정적 기각)
  • 코드 변경 없음 → 회귀 검증 불필요

🤖 Generated with Claude Code

planet6897 added 5 commits May 6, 2026 15:19
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 권한 부족으로 실패 — 메인테이너 수동 설정 필요.
@planet6897
Copy link
Copy Markdown
Contributor Author

(α) 결정으로 본 PR close — PR #641 로 통합

작업지시자 결정에 따라 본 분석 PR (#640) 을 close 하고 PR #641 (Task #639 fix) 로 분석 + fix 를
통합 머지합니다.

PR #641 은 본 PR 의 5 커밋 (Task #637 분석) + Task #639 fix 5 커밋 = 10 커밋을 포함하며,
한컴 호환 cover-style 페이지 자동 쪽번호 미표시 fix 를 함께 제공합니다.

상세: #641

@planet6897 planet6897 closed this May 6, 2026
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.

1 participant