요약
HWPX 저장 시 본문/표셀 문단의 Ruby 컨트롤(루비, 한자 독음·위첨자 등)이 드롭된다.
ColumnDef(#1584)와 동일 메커니즘 — is_hwpx_inline_slot 에는 등록돼 슬롯으로 인식되나,
render_control_slot 의 방출 dispatch 에 Control::Ruby arm 이 없어 _ => {} 로 빠져
XML 미방출 → 드롭. 컨트롤 드롭으로 후속 char_shape 가 −8 변위하는 하위 증상도 동반.
fidelity10(hwpdocs 9660) 잔여 IR_DIFF 중 3건.
증거
36384160 sec2: paragraph[88]/cell·[118]·[179](ruby×2)·[181] controls expected=[ruby] actual=[]
36399208 sec2: paragraph[72] controls expected=[ruby] actual=[]
36389301 sec0: paragraph[6] controls expected=[ruby] actual=[]
└ char_shapes (...,(51,8)) → (...,(43,8)) −8 시프트 = ruby 8유닛 슬롯 소실 하위 증상
근본원인 (src/serializer/hwpx/section.rs)
is_hwpx_inline_slot() 에 Control::Ruby(_) 포함(인식 O).
render_control_slot() 에 Control::Ruby arm 부재 → 미방출(드롭).
수정 방향
write_ruby 직렬화기 추가(파서 parse_hwpx 의 ruby 역매핑 기준).
render_control_slot 에 Control::Ruby(r) => write_ruby(...) arm 추가.
- 회귀 가드: 대표 실문서(36389301 등)를 opengov 고정 말뭉치 편입, 통제 비교(개선−회귀>0).
영향
루비 주음 텍스트가 시각적으로 소실 — 잔여 10건 중 유일하게 시각 영향 있는 실버그.
근거: mydocs/tech/hwpx_residual_ir_diff_10.md (Class A)
요약
HWPX 저장 시 본문/표셀 문단의 Ruby 컨트롤(루비, 한자 독음·위첨자 등)이 드롭된다.
ColumnDef(#1584)와 동일 메커니즘 —
is_hwpx_inline_slot에는 등록돼 슬롯으로 인식되나,render_control_slot의 방출 dispatch 에Control::Rubyarm 이 없어_ => {}로 빠져XML 미방출 → 드롭. 컨트롤 드롭으로 후속 char_shape 가 −8 변위하는 하위 증상도 동반.
fidelity10(hwpdocs 9660) 잔여 IR_DIFF 중 3건.
증거
근본원인 (
src/serializer/hwpx/section.rs)is_hwpx_inline_slot()에Control::Ruby(_)포함(인식 O).render_control_slot()에Control::Rubyarm 부재 → 미방출(드롭).수정 방향
write_ruby직렬화기 추가(파서parse_hwpx의 ruby 역매핑 기준).render_control_slot에Control::Ruby(r) => write_ruby(...)arm 추가.영향
루비 주음 텍스트가 시각적으로 소실 — 잔여 10건 중 유일하게 시각 영향 있는 실버그.
근거:
mydocs/tech/hwpx_residual_ir_diff_10.md(Class A)