배경
Task #1552 게이트 신설 과정에서, convert/convert_to_editable 경로가 일부 HWP5 문서의 그림·페이지를 손실시킴이 확인됐다. 직접 serialize_document(= export_hwp_native)는 같은 문서를 완전 보존하므로, 손실은 변환(editable) 경로에 한정된다. F1(#1554, serialize_document 자체 BinData 드롭)과 별개다.
증거 — KTX.hwp (배포용 아님, 원본 27쪽·BinData 3)
| 경로 |
KTX BinData |
KTX 페이지(한글 2024) |
| 원본 |
3 |
27 |
serialize_document 직접(#1552 게이트) |
3 보존 |
27 = 27 보존 |
convert(convert_to_editable 경유) |
0 (전 소실) |
27 → 1 붕괴 |
convert 저장본은 한글에서 무결성 오류 없이 열리나 1쪽으로 붕괴하고 그림이 모두 사라진다.
재현
rhwp convert samples/basic/KTX.hwp /tmp/ktx.rt.hwp
# 비교: olefile 로 BinData 0 확인, 한글로 열어 1쪽 확인
# 대조: rhwp hwp5-roundtrip samples/basic/KTX.hwp → PASS (serialize_document 직접은 보존)
의심 지점 (root-cause 필요)
convert CLI(convert_hwp)는 직접 parse_document+serialize_document 가 아니라 다음 경로를 탄다:
rhwp::wasm_api::HwpDocument::from_bytes(별도 파서 진입) →
convert_to_editable_native() → Document::convert_to_editable() (src/model/document.rs:346) →
export_hwp_with_adapter() → convert_if_hwpx_source() (src/document_core/converters/hwpx_to_hwp.rs:1550, HWP 출처는 no-op) → serialize_document.
KTX 는 배포용 아님·HWP 출처이므로 어댑터는 no-op 이어야 하나 손실 발생 → wasm_api::HwpDocument 파스 경로 또는 convert_to_editable() 가 bin_data_content·페이지 구조(IR)를 변형하는지 점검 필요. DocumentCore(게이트 경로)와 IR 차이 비교가 시작점.
수용 기준
convert 산출물이 KTX(및 유사 문서)의 BinData·페이지를 보존(한글 페이지수 원본과 일치, olefile BinData 멀티셋 보존).
- 가능하면 게이트에 convert 경로 분기(C3' 외부 페이지/배포용)를 추가하거나, 회귀 재현 케이스 등록.
분리
관련: #1552, #1554, PR #1553. 근거: output/poc/fidelity/report.md, mydocs/working/task_m100_1552_stage2.md.
배경
Task #1552 게이트 신설 과정에서,
convert/convert_to_editable경로가 일부 HWP5 문서의 그림·페이지를 손실시킴이 확인됐다. 직접serialize_document(=export_hwp_native)는 같은 문서를 완전 보존하므로, 손실은 변환(editable) 경로에 한정된다. F1(#1554, serialize_document 자체 BinData 드롭)과 별개다.증거 — KTX.hwp (배포용 아님, 원본 27쪽·BinData 3)
serialize_document직접(#1552 게이트)convert(convert_to_editable 경유)convert저장본은 한글에서 무결성 오류 없이 열리나 1쪽으로 붕괴하고 그림이 모두 사라진다.재현
의심 지점 (root-cause 필요)
convertCLI(convert_hwp)는 직접parse_document+serialize_document가 아니라 다음 경로를 탄다:rhwp::wasm_api::HwpDocument::from_bytes(별도 파서 진입) →convert_to_editable_native()→Document::convert_to_editable()(src/model/document.rs:346) →export_hwp_with_adapter()→convert_if_hwpx_source()(src/document_core/converters/hwpx_to_hwp.rs:1550, HWP 출처는 no-op) →serialize_document.KTX 는 배포용 아님·HWP 출처이므로 어댑터는 no-op 이어야 하나 손실 발생 →
wasm_api::HwpDocument파스 경로 또는convert_to_editable()가bin_data_content·페이지 구조(IR)를 변형하는지 점검 필요.DocumentCore(게이트 경로)와 IR 차이 비교가 시작점.수용 기준
convert산출물이 KTX(및 유사 문서)의 BinData·페이지를 보존(한글 페이지수 원본과 일치, olefile BinData 멀티셋 보존).분리
serialize_document자체 BinData 드롭(편집가능 9건). 본 이슈는 convert/editable 경로 추가 손실로 별개.관련: #1552, #1554, PR #1553. 근거:
output/poc/fidelity/report.md,mydocs/working/task_m100_1552_stage2.md.