Skip to content

[HWPX/직렬화] 컨트롤 슬롯 8유닛 시프트 — 실문서 char_offset 변위 (hwpx-roundtrip IR_DIFF) #1556

Description

@planet6897

배경

Task #1552 무손실 검증에서, HWPX serializer 가 일부 실문서의 컨트롤 슬롯을 직렬화할 때 char_offset/char_shape 위치를 8유닛(=1글자 슬롯) 시프트시키는 잔여 결함이 확인됐다. samples/hwpx/ 큐레이션 샘플엔 없고 서울 열린데이터 실문서(hwpdocs)에서 9/25 노출된다.

증거 — 36384525_…특수차량…출동불능…알림.hwpx

rhwp ir-diff <원본.hwpx> <rt.hwpx> (parse → serialize_hwpx → 재parse):

--- 문단 0.6 --- (텍스트 "  끝.")
  [차이] cc: A=13 vs B=5          # char count 13 → 5 (8 감소)
  [차이] cs[1].pos: A=12 vs B=4   # char_shape 위치 12 → 4 (8 감소)
=== 비교 완료: 차이 2 건 ===

정확히 8유닛 차이 — autoNum/필드 등 컨트롤 슬롯의 폭 처리 관련(기존 #1382 autoNum 폭 일관화, #1407 newNum 슬롯 위치 계열의 잔여).

재현 / 검출

rhwp hwpx-roundtrip <실문서.hwpx>   # [IR_DIFF] diff= N 으로 검출

선행 조사 전수 표본(hwpx 25건) 중 9건이 IR_DIFF(diff 1~2), 전부 실문서. 텍스트 내용·페이지는 보존되나 슬롯 경계가 시프트.

의심 지점

src/serializer/hwpx/ 의 컨트롤 슬롯(autoNum/newNum/fieldBegin 등) 방출 시 placeholder 폭 계산. 8유닛 슬롯의 char_offset/char_shape 경계 정합(#1382·#1407 와 동형 가설).

수용 기준

  • 영향 실문서들에서 hwpx-roundtrip IR diff=0.
  • 회귀 가드: 대표 실문서를 samples/hwpx/ 에 추가하거나 tests/hwpx_roundtrip_baseline.rs 게이트로 봉인.

분리

HWP5 측 F1(#1554)·F2'(#1555, convert 경로)와 무관한 HWPX serializer 결함.

관련: #1552, PR #1553. 근거: output/poc/fidelity/report.md, mydocs/manual/hwpx_roundtrip_baseline.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions