Task #604: Document IR 표준 정합화 본질 영역 도달 (HWP3/HWP5/HWPX 3개 포맷 동일 페이지 정합)#609
Task #604: Document IR 표준 정합화 본질 영역 도달 (HWP3/HWP5/HWPX 3개 포맷 동일 페이지 정합)#609jangster77 wants to merge 23 commits into
Conversation
…ne helper 본질: - PR edwardkim#589 머지 후 hwp3-sample5.hwp page 4 시각 결함 발견 (Issue edwardkim#604): pi=75 첫 3 줄 cs=0/sw=0 → 그림 좌측 (x=56.7) 에 텍스트 그려짐 → 그림과 겹침 - 본 결함의 본질: HWP3 파서 cs/sw 인코딩 결함 + IR 표준 부재로 인한 휴리스틱 누설 - 옵션 C (Document IR 표준 정합화) 채택 — Stage 1~4 분리 진행 Stage 1 변경: - mydocs/tech/document_ir_lineseg_standard.md 신규 (+150 LOC) — LineSeg 필드별 단위/원점/0 의미 명시. HWP5/HWPX/HWP3 각 파서 인코딩 책임 명시. - src/model/paragraph.rs — LineSeg 필드 doc 정합 + is_in_wrap_zone(col_w_hu) helper 추가 (포맷 무관, 상태 무관, per-line 판정) - 분석 자료 3 파일 mydocs/tech/ 로 이동 (git 추적 영역): document_ir_parser_relationship_analysis.md (16KB), wrap_zone_standard_review.md, hwp5_wrap_precomputed_analysis.md - 분석 자료 + 계획서 5 파일의 /tmp/ 경로 → mydocs/tech/ 일괄 정정 검증: - cargo build 통과 - cargo test --lib 1130 passed / 0 failed / 2 ignored - cargo clippy --lib -- -D warnings 0건 - 호출처 변경 0 (Stage 2 에서 일괄 적용) 수행/구현 계획서 + 단계별 보고서 동봉: - mydocs/plans/task_m100_604.md (수행계획서) - mydocs/plans/task_m100_604_impl.md (구현계획서, Stage 1~4 본질) - mydocs/working/task_m100_604_stage1.md (Stage 1 보고서) - mydocs/orders/20260505.md (Task edwardkim#604 entry) 다음: Stage 2 — 렌더러 wrap_precomputed → is_in_wrap_zone 교체 + 필드 제거.
본질:
- Stage 2a 시도 (LineSeg::is_in_wrap_zone 단독 판정) test_547 회귀로 revert.
HWP5 native passage box 본문 LineSeg cs=852/sw=30184 가 false-positive 판정
→ cs/sw 만으로는 wrap zone 과 box inset 구분 불가능.
- R3 본질 채택: typeset.rs 의 wrap_around state machine 매칭 결과 (anchor ↔ wrap
text 컨텍스트) 를 layout 시점까지 전달하는 메타데이터 채널 도입.
변경:
- src/renderer/pagination.rs: WrapAnchorRef struct + ColumnContent.wrap_anchors
HashMap 필드 추가. clone 시 정합화.
- src/renderer/typeset.rs + pagination/state.rs: TypesetState/PaginationState 에
current_column_wrap_anchors 필드 + flush 시 take.
- src/renderer/typeset.rs:495~ wrap_around 매칭 시 wrap_anchors 등록 + FullParagraph
통과 (wrap_precomputed=true 인 경우).
- src/renderer/layout.rs: ColumnItemCtx.wrap_anchors 필드 + layout_column_item
시그니처 + 3 destructure 사이트 정합화. PageItem::FullParagraph/PartialParagraph
처리 7 호출 사이트에 ctx.wrap_anchors.get(para_index) 전달.
- src/renderer/layout/paragraph_layout.rs: 3 시그니처 (layout_paragraph,
layout_partial_paragraph, layout_composed_paragraph) 에 wrap_anchor 인자 추가.
wrap_precomputed 검사 3곳 (BoundingBox.x, x_base, line_cs_offset) →
wrap_anchor.is_some() 검사로 교체.
- src/renderer/layout/{table_layout,table_partial,table_cell_content,shape_layout,
picture_footnote}.rs: 셀/도형/각주/캡션 컨텍스트 호출 7곳에 None 전달.
- src/renderer/page_number.rs + layout/tests.rs: 테스트 ColumnContent 정합화.
검증:
- cargo build + cargo build --tests 통과
- cargo test --lib 1130 passed (test_547 PASS)
- cargo test --test issue_546 1 passed (exam_science 4페이지, Task edwardkim#546 정합)
- cargo test --test issue_554 12 passed
- cargo test 통합 31 모두 통과
본질 정정 효과:
- typeset 의 매칭 결과가 layout 시점까지 보존 — 포맷 무관 일관 처리
- layout 의 wrap zone 판정이 Paragraph IR 의존성 제거 — IR 정합화 진전
잔존 부채 (Stage 2b 영역):
- Paragraph.wrap_precomputed 필드 잔존 (typeset.rs:502 매칭 분기 조건)
- HWP3 파서 후처리 30 LOC 잔존 (mod.rs:1556~)
- Stage 2b 에서 anchor 종류 기반 분기로 교체 + IR 청산 예정
수행/구현 계획서 + 단계별 보고서 동봉.
… 부채 마무리) 본질: - Stage 2 의 wrap_anchors 메타데이터 채널 도입 후, Paragraph.wrap_precomputed 필드 제거 + HWP3 파서 후처리 30 LOC 청산. typeset.rs 매칭 분기를 anchor 종류 (Picture vs Table) 기반으로 본질화. - HWP3 휴리스틱이 IR 에 누설되었던 wrap_precomputed 플래그를 청산. IR 의 포맷 독립성 회복. 변경: - src/renderer/typeset.rs:495~ 매칭 분기 본질화: anchor paragraph 의 controls 검사 (Control::Picture / Control::Shape 안의 ShapeObject::Picture, !treat_as_char) 로 Picture anchor 면 wrap_anchors 등록, Table anchor 면 흡수 (기존 흐름). - src/model/paragraph.rs: wrap_precomputed 필드 제거 (struct 정의 + clone init). - src/parser/hwp3/mod.rs: PR edwardkim#589 보완6/8 후처리 30 LOC 청산. typeset.rs + wrap_anchors 채널로 정합 대체됨. - src/renderer/{layout.rs, pagination.rs, layout/paragraph_layout.rs}: 잔존 주석 갱신 (Task edwardkim#460 보완6 인용 → Task edwardkim#604 Stage 2 인용). 검증: - cargo build + cargo build --tests 통과 - cargo test --lib 1130 passed (회귀 0) - cargo clippy --lib -- -D warnings 0건 - cargo test --test issue_546 1 passed (Task edwardkim#546 정합) - cargo test --test issue_554 12 passed (HWP3 변환본 정합) - cargo test 통합 31 모두 통과 IR 부채 청산: - IR (Paragraph) 에서 wrap_precomputed 필드 제거 — 포맷 독립성 회복 - HWP3 파서가 LineSeg cs/sw 만 정합 인코딩 책임 (별도 후처리 없음) - typeset 의 매칭 분기 = anchor 종류 기반 본질 판정 (Picture/Table) LOC: -53 / +30 (-23 net) 소스. 단계별 보고서 동봉. 다음: Stage 3 — HWP3 파서 cs/sw 인코딩 정정 (Issue edwardkim#604 결함 본질 정정).
…결함 본질 정정) 본질: - hwp3-sample5.hwp page 4 의 pi=75 첫 3 줄 cs=0/sw=0 결함 본질 정정. - 원인: src/parser/hwp3/mod.rs:1399-1407 의 wrap zone pgy 범위 검사가 `pgy >= pgy_start && pgy < pgy_end` 양방향 가드로, wrap text 문단의 첫 줄 pgy 가 anchor 의 pgy_start 미만 인 경우 (예: 페이지 첫 문단) cs/sw=0 설정 → 그림 좌측 (x=56.7) 에 텍스트 그려짐 → 그림과 겹침 (Issue edwardkim#604). 정정 (옵션 3a): - src/parser/hwp3/mod.rs: pgy_start 가드 제거. pgy_end 만 검사하는 단방향 가드. 본질: wrap text 문단의 모든 줄은 anchor 그림 우측에 정합 배치되어야 하며, pgy_start 미만의 줄도 wrap zone 의 일부. 그림 아래로 흘러간 줄 (cs=0 정상 줄) 만 pgy_end 가드로 wrap zone 외 판정. 검증: - pi=75 모든 LineSeg cs=35460, sw=15564 정합 (이전: 첫 3 줄 cs=0/sw=0) - cargo test --lib 1130 passed (회귀 0) - cargo test --test issue_546 (Task edwardkim#546 exam_science 4페이지 정합) - cargo test --test issue_554 12 passed (HWP3 변환본 정합) - cargo test 통합 31 모두 통과 - HWP3 native pages 회귀 0 (sample 16p, sample5 64p) 시각 판정: - output/svg/task604_after/hwp3-sample5/hwp3-sample5_004.svg page 4 x=529 (23 인스턴스, PR edwardkim#589 baseline 20 → 23 = pi=75 첫 3 줄 추가 정합) - page 8/16/22/27 동일 정합 (cs/sw 기반 정합 분포) 본 단계의 본질적 가치: - Issue edwardkim#604 결함 본질 정정 - HWP3 파서의 LineSeg cs/sw 인코딩 표준 정합 (mydocs/tech/document_ir_lineseg_standard.md) - 한컴뷰어 page 4 정합 시각 다음: Stage 4 — 광범위 회귀 검증 + 시각 판정 ★ + 최종 보고서.
본 task (Document IR 표준 정합화 + HWP3 wrap zone cs/sw 인코딩 정정) 의 최종 단계. Stage 1~3 누적 결과 광범위 검증 + 시각 판정 자료 + 최종 결과 보고서 작성. 검증: - cargo build + cargo build --release 통과 - cargo test --lib --release 1130 passed / 0 failed / 2 ignored - cargo test --release 통합 31 모두 통과 - cargo clippy --lib -- -D warnings 0건 회귀 영역 (모두 정합): - HWP3 native: hwp3-sample.hwp 16p / hwp3-sample5.hwp 64p (PR edwardkim#589 baseline 동일) - Task edwardkim#546: exam_science.hwp 4페이지 / p2 단 0 items=37 - Task edwardkim#554 (HWP3 변환본 5개): hwp3-sample-hwp5 15p / -hwpx 15p / hwp3-sample4-hwp5 36p / hwp3-sample5-hwp5 64p / -hwpx 64p - 통합 테스트 svg_snapshot 6/6, issue_546/554 통과 시각 판정 자료: - output/svg/task604_after/hwp3-sample5/hwp3-sample5_{004,008,016,022,027}.svg - page 4 x=529 분포: PR edwardkim#589 baseline 20 → 23개 (pi=75 첫 3 줄 추가 정합) 본질 정정 누적 효과: - Issue edwardkim#604 결함 본질 정정 (pi=75 모든 ls cs/sw 정합) - Document IR 표준 명문화 (mydocs/tech/document_ir_lineseg_standard.md) - IR 부채 청산 (Paragraph.wrap_precomputed 필드 제거) - typeset 출력 메타데이터 채널 (ColumnContent.wrap_anchors) 도입 - typeset 매칭 분기 anchor 종류 (Picture vs Table) 기반 본질화 - HWP3 파서 cs/sw 인코딩 정정 (pgy 단방향 가드) - CLAUDE.md HWP3 파서 규칙 정합 (HWP3 휴리스틱 IR 누설 청산) LOC 합계: +76 net (소스), +1100 (문서) 잔존 별도 task 권고: - HWP3 폰트 크기/줄간격 처리 (한컴뷰어 13pt vs HWP5 v2024 9pt 차이) - HWP3 LineSeg vertical_pos 누적 계산 - Task edwardkim#525 본질 재검토 (wrap_anchors 도입 후 layout_wrap_around_paras dead code 가능성) 문서: - mydocs/report/task_m100_604_report.md (최종 보고서) - mydocs/orders/20260505.md Task edwardkim#604 entry → 완료
…% 정합화 본질: - HWP3 의 line_spacing_ratio (보통 160%) 가 좁은 wrap zone (예: pi=75 sw=15564HU= 207px) 안에 적용되면 줄당 19.2px 차지 → 415자 텍스트가 38 줄 = 729px 필요 (그림 357px 초과). 한컴 자체가 HWP3 → HWP5 변환 시 줄간격 100% 로 정정 (cf. hwp3-sample5-hwp5-v2024.hwp lh=900 = th). - 본 환경 rhwp 의 HWP3 native pi=75 LineSeg lh=1440 (160%) → 한컴 변환본 lh=900 (100%) 와 불일치. 본 정정으로 wrap zone 안 라인 lh 정합화. 정정 (옵션 B-2 — wrap zone 안 라인만 적용): - src/parser/hwp3/mod.rs:1419~ wrap zone 안 라인 (line_cs_sw.is_some() AND cs>0) 의 LineSeg lh 를 th (text_height) 로 강제 + line_spacing 0. wrap zone 밖 라인은 HWP3 본질 (line_spacing_ratio) 유지 — 영향 영역 최소화. - 결과: pi=75 모든 LineSeg lh 1440 → 900 정합 (HWP5 v2024 변환본과 동일 인코딩). 검증: - pi=75 모든 LineSeg lh=900, th=900, ls=0 정합 (HWP5 v2024 변환본 동일) - cargo test --lib 1130 passed (회귀 0) - cargo test --test issue_546 1 passed (Task edwardkim#546 정합) - cargo test --test issue_554 12 passed (HWP3 변환본 정합) - HWP3 native: hwp3-sample.hwp 16p, hwp3-sample5.hwp 64p, hwp3-sample4.hwp 40p (회귀 0) 본 정정의 가치: - HWP5 v2024 변환본과 LineSeg lh 인코딩 정합 달성. - 좁은 wrap zone 안 라인의 줄간격이 한컴 변환 메커니즘과 동일. 잔존 시각 결함 (별도 본질, 별도 task 권고): - pi=74 그림 anchor paragraph height = 19.2px (sequential flow) vs 그림 absolute layer 357px → 후속 paragraph 가 그림 영역 y 안에서 시작 → 그림 위 본문 침범. - 정정 본질 = pi=74 그림을 absolute layer (paper-relative) 로 분리 처리. 본 task scope 외 — layout.rs is_paper_based 검사 (vert_rel_to=Paper && horz_rel_to=Paper) 영역 본질 변경 필요.
본질: - Stage 5 B-2 의 lh 정합화 후 추가 검증 — 본문이 cs/sw=정합 wrap zone 안에 표시되지만 일부 라인이 그림 영역 (sequential flow y) 에 침범. 결함의 본질 = paper_images z-order 가 body_node 보다 아래 layer. 정정: - src/renderer/layout.rs: tree.root.children push 순서 정정. Before: paper_images → body_node (그림이 bottom layer) After: body_node → paper_images (그림이 top layer) - 본문이 sequential flow y 로 그림 영역까지 흐르더라도 그림이 위에 그려져 시각 정합. 한컴 v2018/v2024 변환본 정합. 검증: - cargo build + cargo test --lib 1130 passed (회귀 0) - cargo test --test issue_546 1 passed (Task edwardkim#546 정합) - cargo test --test issue_554 12 passed - cargo test 통합 31 모두 통과 - HWP3 native: hwp3-sample.hwp 16p, hwp3-sample5.hwp 64p, hwp3-sample4.hwp 40p (회귀 0) 시각 판정: - output/svg/task604_stage6_b/hwp3-sample5/_{004,008,016,022,027}.svg - 사용자 시각 판정 (HWP3 native vs HWP5 변환본 비교): 거의 정합 ★ 한컴 변환 메커니즘 정합 본질 (Stage 5 B-2 + Stage 6 결합): - Stage 3: LineSeg cs/sw 정확 인코딩 (wrap zone 위치 정합) - Stage 5 B-2: LineSeg lh 100% 줄간격 (좁은 wrap zone 안 글자 수용) - (기존): 그림 paper-relative absolute layer (sequential flow 와 분리) - Stage 6: 그림 top z-layer (본문 침범 시 시각 가림) 문서: - mydocs/working/task_m100_604_stage6.md (Stage 6 단계별 보고서)
본질 (작업지시자 통찰 정합): - Document IR 표준 정합화 = 더 큰 목적 - HWP5 v2024 변환본 정밀 분석 후 IR 표준 미명시 영역 발견: 1. paragraph 내 LineSeg cs/sw 전환 (wrap zone 끝 시 cs=0) 2. paragraph 간 vpos 연결 (next.vpos = prev.last.vpos + lh + ls) - HWP3 파서 정합 인코딩으로 시각 결함 자연스럽게 정정. Stage A — IR 표준 갱신: - mydocs/tech/document_ir_lineseg_standard.md 갱신 - HWP5 v2024 page 4 pi=75 LineSeg 실측 데이터 표 추가 - paragraph 내 cs/sw 전환 본질 명문화 - paragraph 간 vpos 연결 알고리즘 명문화 Stage D — HWP3 파서 정합 인코딩 (src/parser/hwp3/mod.rs): - parse_paragraph_list 외부에 acc_section_vpos, wrap_zone_end_vpos 누적 변수 - paragraphs.push 직전 후처리: * 페이지 break 시 vpos reset * Picture Square wrap anchor 검출 → wrap_zone_end_vpos = acc + total_height * LineSeg vpos = acc 누적 인코딩 * paragraph 내 cs=0 전환 (vpos >= wrap_zone_end 시) * paragraph 간 vpos 연결 - Stage 5 B-2 (wrap zone 안 lh=th 강제) revert — HWP3 본질 (lh=1440/ls=0) 유지 검증: - pi=75 ls[19] vpos=28800 cs=0 sw=0 (HWP5 v2024 변환본과 정합) - cargo test --lib 1130 passed - Task edwardkim#546 정합 (exam_science 4페이지 / items=37) - HWP3 native 회귀: hwp3-sample 16 (0), hwp3-sample5 64→67 (+3), hwp3-sample4 39→40 (+1) - Stage 7+8 시도 대비 회귀 영역 큰 폭 축소 잔존 (Stage E 영역): - HWP3 native +3 페이지 회귀 (issue_554 test fail) - 일부 typeset/layout vpos 처리 정합화 검증 문서: - mydocs/working/task_m100_604_stageAD.md - mydocs/plans/task_m100_604.md (수행계획서 본질 갱신)
본 commit 으로 Document IR 표준 정합화 본질 영역 도달. 정정 영역 (src/parser/hwp3/mod.rs): 1. is_page_break 영역 보강 — prev_para_had_flags_break + first_pgy_here=0 케이스 2. lh/ls HWP5 분리 인코딩 — lh=th, ls=th*(ratio-100)/100 (시각 줄 높이 정합) 3. break_flag → tag bit 누설 제거 — tag=0x00060000 고정 4. pgy-based column_type=Page 설정 제거 — 자연 wrap 은 typeset 책임 5. wrap zone cs/sw 정합 인코딩 — anchor 의 active_wrap_cs_sw 후속 paragraph 정합 채움 6. paper-top anchor acc_vpos reset — paper-relative + body top 영역 anchor 의 vpos=0 정합 7. line_info.break_flag 0x8001 (페이지 경계) → column_type=Page 변환 회귀 영역 (HWP5 변환본 baseline 정합): | 파일 | baseline | 정정 결과 | |------|---------|-----------| | hwp3-sample.hwp | 16 | 16 | | hwp3-sample4.hwp | HWP5 36 | 36 (paragraph 시퀀스 정합) | | hwp3-sample5.hwp | HWP5 64 | 65 (+1 orphan, page 43 pi=1240 line 2) | | exam_science.hwp | 4 | 4 (Task edwardkim#546 정합) | 결정적 검증: - cargo test --lib: 1130 passed - cargo test --test svg_snapshot: 6/6 (HWP5 native 회귀 0) - cargo test --test issue_546: 정합 - cargo test --test issue_554: 11/12 (sample5 65 vs expect 64, sample.hwp 16 정합) 본질 정합: - pi=74 picture page 4 / vpos=0 (HWP5 정합) - pi=75 ls[0..18] cs=35460/sw=15564 (wrap zone 인코딩 정합) - pi=75 ls[19..20] cs=0/sw=0 (wrap zone 끝 전환) - sample4 page 33+34 paragraph-by-paragraph HWP5 정합 Closes part of Issue edwardkim#604 (Document IR 표준 정합화 본질 영역).
본 정정으로 sample5.hwp 64 페이지 HWP5 baseline 완전 정합 달성. 본질 정정 영역 (src/parser/hwp3/mod.rs): - Stage A+D 후처리의 LineSeg 영역에서 line_infos[i].pgy < line_infos[i-1].pgy 검출 시 acc_vpos reset - 본 신호는 HWP3 한글97 layout 시점에 본 line 부터 새 페이지 시작 영역 - HWP5 v2024 변환본의 paragraph 내 ls[i].vpos=0 영역 정합 검증 영역 (pi=1213 sample5): - ls[0] vpos=72000 (HWP5 정합) - ls[1] vpos=0 (새 페이지 reset, HWP5 정합) - ls[2] vpos=1440 (HWP5 정합) - ls[3] vpos=2880 (HWP5 정합) 회귀 영역 (HWP5 변환본 baseline 완전 정합): | 파일 | baseline | 정정 결과 | |------|---------|-----------| | hwp3-sample.hwp | 16 | 16 | | hwp3-sample4.hwp | HWP5 36 | 36 | | hwp3-sample5.hwp | HWP5 64 | 64 | | exam_science.hwp | 4 | 4 | 결정적 검증: - cargo test --lib: 1131 passed - cargo test --test svg_snapshot: 6/6 - cargo test --test issue_546: 정합 - cargo test --test issue_554: 12/12 (모든 fixture 정합) Closes part of Issue edwardkim#604 (Document IR 표준 정합화 본질 영역).
- mydocs/working/task_m100_604_stageD2.md (신규): Stage D-2 영역 8개 정정 본질 + 결정적 검증 - mydocs/report/task_m100_604_report.md: §3 Stage A+D+D-2 영역 추가 (본 task 본질 영역 도달) - mydocs/orders/20260505.md: Issue edwardkim#604 영역 11 commits + HWP3/HWP5/HWPX 3개 포맷 정합 영역 갱신 Document IR 표준 정합화 본질 영역 완전 도달: - HWP3 / HWP5 / HWPX 3개 포맷 변환본 모두 동일 페이지 수 (16/36/64/4) - LineSeg 영역 본질 정합 (pi=74/75/1213 HWP5 v2024 변환본 정합) - paragraph 시퀀스 정합 (sample4 page 33+34) - orphan 페이지 0 + 모든 회귀 영역 정합
CI 결함 영역 보고본 PR 의 CodeQL workflow (run 25384312105) 영역의 결함 분석 — 모두 GitHub 인프라 영역의 일시적 결함 (본 PR 코드 영역 무관):
본 환경 결정적 검증 영역 (로컬)
처리 요청fork 영역의 admin 권한 부재 — |
v0.7.9 후속 patch 사이클 (5/4 ~ 5/6). ## 신규 기능 - **CLI 바이너리 릴리즈** (Issue #608/#612, @almet 의 요청) - 4 플랫폼 GitHub Release 자산 첨부 (Linux x86_64 / macOS x86_64+aarch64 / Windows x86_64) + SHA-256 체크섬 - **PNG raster backend** (PR #599, @seo-rii) — render P4 단계 - native Skia 기반 PageLayerTree → PNG export, native-skia feature gate - **AI 파이프라인 + VLM 연동 도입** (메인테이너 후속 정정): - --vlm-target claude (1568 longest edge / 1.15 MP, Claude Vision 정합) - --scale / --max-dimension (자동 scale 계산) - export-png CLI 명령 + 매뉴얼 (한글 + 영문 dual) - 한글 폰트 fallback chain + char 단위 fallback (공백 두부 정정) + --font-path 동적 로딩 ## 외부 PR cherry-pick (13 PR / 7 컨트리뷰터) - @planet6897 / Jaeook Ryu (협업): PR #587/#589/#561/#564/#570/#575/ #580/#584/#592/#593/#567 - @oksure (Hyunwoo Park): PR #600 (closes #513) - @seo-rii: PR #599 (refs #536) - @cskwork / @johndoekim / @nameofSEOKWONHONG / @jangster77 — 사이클 누적 ## 메인테이너 정정 Skia 폰트 영역 5개 정정 (한글 fallback / font-path / char-fallback / VLM 옵션 / export-png CLI). ## 인프라 - CI 빌드 안정성 (Cargo.toml [[example]] required-features) - 광범위 페이지네이션 회귀 sweep 도구 (164 fixture / 1,614 페이지 자동) ## 후속 이슈 - #613 (VLM 프리셋 확장) - #614 (DPI 메타데이터) - #615 (pua_oldhangul.rs U+F53A 한컴 정합) - #598 (rhwp-studio 각주 삭제, 외부 컨트리뷰터 공개) ## 잔여 PR (v0.7.11 후속 patch) PR #601, #602 (@oksure) / PR #607 (@dicebattle) / PR #609 (@jangster77, Task #604) / PR #611 (@kihyunnn). 상세: CHANGELOG.md (한글) / CHANGELOG_EN.md (영문).
PR #609 처리 결과본 PR (Task #604 Document IR 표준 정합화) 의 11 commits 모두 cherry-pick 머지 완료. Issue #604 close 처리. 본 환경 결정적 검증 결과 (모두 통과)
광범위 페이지네이션 sweep
권위 자료 영구 보존
메인테이너 시각 판정 ★ 통과한컴 2010 + 한컴 2022 편집기 출력 권위 정답지 기준 — Issue #604 결함 영역 (page 4 그림 좌측 텍스트 겹침) + 잔존 영역 (별도 task scope) 까지 메인테이너 직접 확인 완료. cherry-pick 결과11 commits 단계별 분리 보존 (author Taesup Jang, committer edward, hash 재생성 영역). 긴 시간 + 11 stages 의 단계별 분리 + Document IR 표준 명문화 작업 감사합니다. |
PR #609 (Task #604 Document IR 표준 정합화) 처리 완료 후속 영역: - mydocs/pr/archives/pr_609_review.md (1차 검토 보고서 + 옵션 분석 + 본 환경 simulation) - mydocs/pr/archives/pr_609_report.md (처리 결과 + cherry-pick 결과 + 결정적 검증 + 광범위 sweep) - mydocs/orders/20260507.md PR #609 entry 추가 처리 결과 요약: - 옵션 A 11 commits 단계별 cherry-pick (author Taesup Jang 보존, hash 재생성) - devel merge commits: 29d1587 ~ 3228016 (linear, 11 commits) - 분기 처리: rebase 2회 (db07c3c 흡수 + a86dcf7 흡수) + ff-merge + push - cargo test 1155 passed / svg_snapshot 6/6 / issue_554 12/12 / clippy 0 / WASM 4,598,892 bytes - 광범위 sweep: 231 fixture 페이지 수 차이 0 (회귀 0) - 메인테이너 시각 판정 ★ 통과 (잔존 영역까지 직접 확인) — 한컴 2010/2022 편집기 권위 정답지 - PR #609 close + Issue #604 수동 close + 한글 댓글 등록 - 권위 자료 영구 보존: hwp3-sample5-hwp5-v2018.hwp + -v2024.hwp
CI 결함 영역 보고 응답5/5 보고 영역 정확합니다 — 본 PR 코드 영역 무관한 GitHub 인프라 일시 결함:
본 PR cherry-pick 머지 시점 (5/7) 의 모든 CI status 통과 상태 — 머지 영역 영향 없음. 처리: 5/6 재실행은 GitHub 가 자동으로 진행 (push 또는 base 변경 영역에서 재트리거). 메인테이너의 명시 rerun 영역 미실시 — 자동 재실행으로 통과 영역 정합. 향후 동일 인프라 일시 결함 발생 시 메인테이너에게 직접 rerun 요청 댓글 정합 영역. 본 보고 영역의 정확한 분석 + 분리 영역 인지 (인프라 결함 vs PR 코드 영역) 영역 감사합니다. |
PR #621 (Task #617 표 셀 padding shrink 다중 줄 가드) 처리 완료 후속 영역: - mydocs/pr/archives/pr_621_review.md (1차 검토 + 옵션 분석 + 본 환경 cherry-pick simulation) - mydocs/pr/archives/pr_621_report.md (처리 결과 + 결정적 검증 + cherry-pick 학습 영역) - mydocs/orders/20260507.md PR #621 entry 추가 처리 결과 요약: - 옵션 B: src + 회귀 차단 가드 (svg_snapshot + golden) 만 cherry-pick - 거버넌스 영역 본 환경 명명 규약 정합 (task_m07_617 → task_m100_617) - devel commits: 2f28866 (본질, author Jaeook Ryu) + ab146d6 (거버넌스, edward) + b23468c (rhwp-studio/public/rhwp.js, edward) - cargo test 1155 / svg_snapshot 7/7 (issue_617 신규) / issue_546 1/1 / issue_554 12/12 / issue_501 1/1 / clippy 0 - WASM 4,606,564 bytes (PR #609 baseline +7,672) - 메인테이너 시각 판정 ★ 통과 (한컴 2010+2022 편집기 + vite dev server web) - PR #621 close + Issue #617 수동 close + 한글 댓글 학습 영역: - 외부 PR 처리 영역에서 git cherry-pick 사용 (git checkout 회피) — base 시점 이후 변경 흡수 영역 - /tmp 임시 clone simulation 결과 ≠ 본 환경 git checkout 영역 — cherry-pick 영역만 정합 본질 정정의 가치: - 다중 줄 가드 (paragraphs.iter().any(|p| p.line_segs.len() >= 2)) 는 구조적 판단 (측정 의존 없음) - feedback_hancom_compat_specific_over_general 메모리 룰 권위 사례 강화
본질
Document IR 표준 정합화 = 본 task 의 본질 영역.
PR #589 (Task #511 v2 + #554) 머지 후 시각 판정 중 발견된
hwp3-sample5.hwppage 4 의 그림+텍스트 겹침 결함의 본질을 추적하여, HWP3 / HWP5 / HWPX 3개 포맷 변환본 모두 동일 페이지 수 + paragraph 시퀀스 + LineSeg 영역 완전 정합 달성.Stage 1~D-2 종합 정정 영역
11 commits (Stage 1~6 + Stage A+D + Stage D-2 본질 영역 도달):
Stage 1
6 (PR 본문 §12, 이전 정정)is_in_wrap_zonehelperwrap_anchors)wrap_precomputed필드 제거 + HWP3 후처리 청산 (-23 net LOC)Stage A+D — HWP5 v2024 변환본 정밀 재진단
hwp3-sample5-hwp5-v2024.hwp영역 분석으로 Document IR 표준 미명시 영역 3개 발견:next.vpos = prev.last.vpos + lh + ls)mydocs/tech/document_ir_lineseg_standard.md갱신.Stage D + D-2 — HWP3 파서 IR 표준 완전 정합 인코딩 (
src/parser/hwp3/mod.rs)8개 영역 정정:
is_page_break영역 보강prev_para_had_flags_break+first_pgy_here=0케이스lh = th, ls = th * (ratio - 100) / 100break_flag→tagbit 누설 제거tag = 0x00060000고정column_type=Page설정 제거active_wrap_cs_swouter state + 후속 paragraph 정합 채움acc_vposresetline_info.break_flag0x8001 →column_type=Pagepgy[i] < pgy[i-1]시 acc_vpos = 0 reset본질 정합 결정적 검증
HWP3 / HWP5 / HWPX 3개 포맷 변환본 모두 동일 페이지 수
hwp3-sample.hwphwp3-sample4.hwphwp3-sample5.hwpexam_science.hwpLineSeg 영역의 본질 정합 (sample5)
sample4 page 33+34 paragraph 시퀀스 (HWP5 변환본 정합)
결정적 회귀 영역
cargo buildcargo test --libcargo test --test svg_snapshotcargo test --test issue_546cargo test --test issue_554cargo clippy(lib)잔존 영역 (별도 task scope)
조판부호 보기 영역의 시각 차이 — 한컴 변환기 (HWP3 → HWP5) 가 paragraph 시작 leading TAB 시퀀스 중 일부를 ParaShape
indent영역으로 흡수하는 휴리스틱 영역. 본 환경 양쪽 파서 모두 raw binary 영역 정합 표현 — 일반 보기 시각 가로 위치는 정합. 시각 차이 (조판부호 영역의 TAB 마커 개수) 는 raw binary 자체 영역의 차이.dump 분석 영역 (sample4 pi=960):
본 영역의 본질 — 한컴 변환기 paragraph indent 변환 휴리스틱 reverse engineering 영역 — 별도 task 영역 (본 task 의 Document IR 표준 정합화 본질 영역 외).
본 task 의 본질 영역 도달
본 PR 로 Document IR 표준 정합화 본질 영역 완전 도달:
시각 판정 자료
output/svg/task604_stageD2/hwp3-sample5/hwp3-sample5_004.svg— Issue HWP3 wrap zone LineSeg cs/sw 누락 — pi=75 첫 N 줄이 그림 좌측 겹침 (hwp3-sample5.hwp page 4) #604 영역 (그림 + wrap text 같은 페이지 정합)output/svg/task604_stageD2/hwp3-sample4/hwp3-sample4_021.svg— sample4 picture anchor 영역관련 자료
mydocs/report/task_m100_604_report.md(§3 Stage A+D+D-2)mydocs/working/task_m100_604_stageD2.mdCloses #604.