배경
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.
배경
Task #1552 무손실 검증에서, HWPX serializer 가 일부 실문서의 컨트롤 슬롯을 직렬화할 때 char_offset/char_shape 위치를 8유닛(=1글자 슬롯) 시프트시키는 잔여 결함이 확인됐다.
samples/hwpx/큐레이션 샘플엔 없고 서울 열린데이터 실문서(hwpdocs)에서 9/25 노출된다.증거 —
36384525_…특수차량…출동불능…알림.hwpxrhwp ir-diff <원본.hwpx> <rt.hwpx>(parse → serialize_hwpx → 재parse):정확히 8유닛 차이 — autoNum/필드 등 컨트롤 슬롯의 폭 처리 관련(기존 #1382 autoNum 폭 일관화, #1407 newNum 슬롯 위치 계열의 잔여).
재현 / 검출
선행 조사 전수 표본(hwpx 25건) 중 9건이 IR_DIFF(diff 1~2), 전부 실문서. 텍스트 내용·페이지는 보존되나 슬롯 경계가 시프트.
의심 지점
src/serializer/hwpx/의 컨트롤 슬롯(autoNum/newNum/fieldBegin 등) 방출 시 placeholder 폭 계산. 8유닛 슬롯의 char_offset/char_shape 경계 정합(#1382·#1407 와 동형 가설).수용 기준
hwpx-roundtripIR 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.