From bd0cea480e1d404b8b17d43e5fa5c5e369e7f76d Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 12:05:55 +0900 Subject: [PATCH 01/35] =?UTF-8?q?Task=20#1584:=20ColumnDef=20=EB=93=9C?= =?UTF-8?q?=EB=A1=AD=20=EC=9E=AC=ED=98=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?(RED)=20+=20=EA=B3=84=ED=9A=8D=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 본문 첫 문단의 2번째 인라인 ColumnDef 가 HWPX 저장 시 드롭되는 버그를 serialize_hwpx -> parse_hwpx roundtrip 으로 재현. 현재 reparse 후 1개(기대 2). Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/plans/task_m100_1584.md | 75 ++++++++++++++++++++++++ mydocs/plans/task_m100_1584_impl.md | 78 +++++++++++++++++++++++++ mydocs/working/task_m100_1584_stage1.md | 29 +++++++++ src/serializer/hwpx/section.rs | 30 ++++++++++ 4 files changed, 212 insertions(+) create mode 100644 mydocs/plans/task_m100_1584.md create mode 100644 mydocs/plans/task_m100_1584_impl.md create mode 100644 mydocs/working/task_m100_1584_stage1.md diff --git a/mydocs/plans/task_m100_1584.md b/mydocs/plans/task_m100_1584.md new file mode 100644 index 000000000..884abcbbc --- /dev/null +++ b/mydocs/plans/task_m100_1584.md @@ -0,0 +1,75 @@ +# 수행계획서 — Task #1584 + +**제목**: HWPX 저장 시 본문 문단의 인라인 ColumnDef(cold) 드롭 → 컨트롤 인덱스 시프트 +**마일스톤**: M100 (v1.0.0) +**브랜치**: `local/task1584` +**이슈**: edwardkim/rhwp#1584 + +--- + +## 1. 배경 + +실문서 무손실 검증 v9(hwpdocs 9350건)에서 잔여 IR_DIFF 59건 중 **최대 단일 클래스(약 49건)**. +게이트(diff_documents)는 이를 "표 셀 char_shape ID 오매핑 `(0,3)→(0,6)`"으로 보고하나, +verbose ir-diff 및 raw XML 비교로 **진짜 근본원인은 본문 첫 문단의 인라인 ColumnDef 드롭**임을 +확정함(아래 §2). 셀 char_shape 변위는 컨트롤 인덱스 시프트의 **하위 증상**. + +## 2. 근본원인 (확정) + +대상 파일 `36382399` 문단 0 raw XML 비교 (devel HEAD): + +``` +orig 컨트롤 태그: [secPr, ctrl, colPr, ctrl, colPr, ctrl, fieldBegin, tbl] +rt 컨트롤 태그: [secPr, ctrl, colPr, ctrl, fieldBegin, tbl] +colPr 개수 : orig 2 → rt 1 (2번째 인라인 ColumnDef 드롭) +IR : controls 6→5, cc 59→51(-8), ctrl[2] cold→field 시프트 +``` + +코드 메커니즘 — `src/serializer/hwpx/section.rs`: + +| 지점 | 동작 | +|------|------| +| line 119–127 | 본문 첫 문단에서 `find(첫 ColumnDef)` 1개만 `TEMPLATE_BODY_COL_PR` 앵커로 치환 | +| line 433–435 | 본문(depth 0) 인라인 슬롯 필터가 `is_hwpx_inline_slot` 사용 → **ColumnDef 전부 제외** (subList depth>0 에서만 인라인 허용) | +| line 719 `is_hwpx_inline_slot` | `Control::ColumnDef` 미포함 | + +→ 문단에 ColumnDef 가 **2개 이상**이면, 1번째는 템플릿이 흡수하지만 **2번째+는 앵커도 인라인도 +아니어서 드롭**된다. (1개뿐이면 정상 — 그래서 대다수 문서는 PASS.) + +## 3. 수정 방향 (제안, 승인 대상) + +**Option A (surgical, 권장)**: 본문 인라인 슬롯 필터(line 431–437)에서 ColumnDef 를 +**"템플릿이 흡수한 첫 1개를 제외한 나머지"** 인라인 슬롯으로 포함한다. + +- 템플릿 앵커(line 119)는 그대로 첫 ColumnDef 1개를 소비(=#1407 2단 정의 보존). +- 첫 ColumnDef 의 식별(인덱스)을 render 경로에 전달하여, 그 1개만 인라인에서 건너뛰고 + 2번째+ ColumnDef 를 `render_col_pr_ctrl` 로 인라인 방출(subList 경로와 동형). +- subList(depth>0) 경로는 불변(이미 전체 인라인 방출). + +**배제한 대안(Option B)**: 템플릿을 section_def 컬럼정의로 채우고 문단 ColumnDef 전체를 +인라인화 — #1407/#1388 와 광범위하게 얽혀 회귀 위험이 큼. 채택 안 함. + +## 4. 회귀 위험 & 채택 기준 + +컬럼 모델은 #1379(인라인 제외)·#1388(secPr 여백)·#1407(colPr 2단)와 얽힘. +F3(#1556)가 2회 회귀로 실패한 영역과 동질 → **통제 비교(개선−회귀 > 0)를 채택 게이트**로 한다. + +수용 기준: +1. 49건 대표 roundtrip 의 `controls 6→5` 해소(ColumnDef 보존), 해당 파일 IR diff = 0. +2. `cargo test --test hwpx_roundtrip_baseline` (samples/hwpx, #1407/#1388 컬럼 케이스 포함) 회귀 0. +3. fidelity 전수(hwpdocs 9350) 통제 비교 **순효과 > 0** (악화 0 필수). + +## 5. 구현 단계 (3단계) + +- **Stage 1 — 근본원인 회귀 테스트 고정**: 49건 중 대표 N건을 픽스처로 박제, + 현재 `controls 6→5` 드롭을 재현하는 단위/통합 테스트 추가(현 상태 RED). +- **Stage 2 — Option A 구현**: 본문 인라인 ColumnDef(첫 앵커 제외) 방출. + Stage1 테스트 GREEN + baseline 회귀 0 확인. +- **Stage 3 — 통제 비교 검증**: fidelity 전수 재측정, 개선−회귀 집계, + 순효과>0·악화0 확인 후 최종 보고서. + +## 6. 산출물 + +- 소스: `src/serializer/hwpx/section.rs` (+ 필요 시 헬퍼) +- 테스트: 신규 픽스처 + roundtrip 단위 테스트 +- 문서: `task_m100_1584_impl.md`, `_stage{1..3}.md`, `_report.md` diff --git a/mydocs/plans/task_m100_1584_impl.md b/mydocs/plans/task_m100_1584_impl.md new file mode 100644 index 000000000..01932bab4 --- /dev/null +++ b/mydocs/plans/task_m100_1584_impl.md @@ -0,0 +1,78 @@ +# 구현 계획서 — Task #1584 + +**제목**: HWPX 본문 인라인 ColumnDef(cold) 드롭 수정 (Option A surgical) +**브랜치**: `local/task1584` · **이슈**: edwardkim/rhwp#1584 +**전제**: 수행계획서(`task_m100_1584.md`) 승인됨 + +--- + +## 1. 변경 대상 요약 + +`src/serializer/hwpx/section.rs` 의 본문 인라인 슬롯 경로 + 슬롯 렌더 디스패치 + +`src/serializer/hwpx/context.rs` 의 컨텍스트 플래그 1개. + +| # | 파일:지점 | 현재 | 변경 | +|---|-----------|------|------| +| C1 | context.rs:97 (`SerializeContext`) | `sub_list_depth` 만 | `is_section_first_para: bool` 필드 추가 | +| C2 | section.rs:78–82 (assemble) | 첫 문단 무표식 렌더 | 첫 문단 렌더 전후로 `ctx.is_section_first_para` true/false 설정 | +| C3 | section.rs:424–438 (slots 구성) | ColumnDef 를 본문 인라인에서 제외 | ColumnDef 를 인라인 후보로 포함 + **본문 첫 문단의 첫 ColumnDef 1개 제거**(템플릿 흡수분) | +| C4 | section.rs:832 (`render_control_slot`) | `ColumnDef if depth>0` 만 방출 | 가드 완화 — slots 에 들어온 ColumnDef 는 본문도 방출 | + +> C1·C2 는 "섹션 템플릿(line 119–127)이 첫 ColumnDef 1개를 흡수한다"는 사실을 +> render_runs 가 알도록 신호를 전달하기 위함. 그 1개만 인라인에서 빼고 2번째+는 방출. + +## 2. 설계 근거 (드롭/중복 양쪽 방지) + +핵심 불변식: **본문 첫 문단의 첫 ColumnDef = 섹션 템플릿이 흡수, 나머지 = 인라인.** + +- C3 에서 ColumnDef 를 인라인 후보로 올리면 `slot_count == controls.len()`(line 425, 전 컨트롤 + 슬롯) 분기와 필터 분기(line 431) **양쪽** 모두 ColumnDef 를 포함하게 된다. 따라서 + **두 분기 공통으로** "본문 첫 문단이면 slots 에서 첫 ColumnDef 1개 제거"를 적용한다 + (`if ctx.sub_list_depth == 0 && ctx.is_section_first_para { slots.remove(첫 ColumnDef pos) }`). +- 이로써: 템플릿(1번째) + 인라인(2번째+) = **드롭 없음, 중복 없음**. +- 본문 **비첫** 문단(템플릿 미흡수): `is_section_first_para=false` → 제거 없음 → ColumnDef 전부 + 인라인 방출(현재는 전부 드롭되던 잠재 버그도 동시 해소). +- subList(depth>0): 종전과 동일하게 전부 인라인(제거 없음). +- C4: slots 에 도달한 ColumnDef 는 위 불변식상 "흡수분이 아닌" 것이므로 본문에서도 무조건 방출 안전. + +## 3. 슬롯 카운트 정합 메모 + +`inferred_control_slot_count`(line ~717)는 ColumnDef 의 8유닛 슬롯도 카운트하므로, 수정 후 +`slot_count` 와 `slots.len()` 관계는 케이스별로 달라질 수 있다. 어느 경우든: +- 일치 → 위치추정 경로로 ColumnDef 가 제 위치에 방출. +- 불일치 → mismatch 경로(line 454)가 `for slot in &slots` 로 **일괄 방출** → ColumnDef 보존. + +즉 **드롭은 어느 경로에서도 발생하지 않는다**(현재는 slots 에서 빠져 양쪽 다 드롭). + +## 4. 구현 단계 (3단계) + +### Stage 1 — 드롭 재현 회귀 테스트 박제 (RED) +- 49건 중 대표 1–2건(예 `36382399`)을 `tests/fixtures/` 또는 기존 roundtrip 테스트에 편입. +- 단위 테스트: 본문 첫 문단 ColumnDef 2개 → serialize → reparse 후 `controls` 수/ColumnDef 보존 + 검증. 현재 코드에서 **실패(RED)** 함을 확인. +- `samples/hwpx` 에 동형 미니 케이스 부재 시, hwpdocs 대표 파일 기반 통합 테스트로 대체. +- 커밋: `Task #1584: ColumnDef 드롭 재현 테스트 (RED)` + `_stage1.md`. + +### Stage 2 — Option A 구현 (GREEN) +- C1–C4 적용. +- Stage1 테스트 GREEN. +- `cargo test --test hwpx_roundtrip_baseline` 회귀 0 (#1407 2단·#1388 여백 케이스 보존 확인). +- `cargo clippy` 클린, 신규/수정 파일만 정리(무관 fmt diff 금지). +- 커밋: `Task #1584: 본문 인라인 ColumnDef 방출 (Option A)` + `_stage2.md`. + +### Stage 3 — 통제 비교 검증 (채택 게이트) +- fidelity 전수(hwpdocs 9350 hwpx + samples 319 hwp) 재측정. +- 수정 전(devel HEAD) 대비 **개선−회귀** 집계: 49건 IR_DIFF 해소 확인, **악화 0 필수**, 순효과>0. +- `tools/verify_hangul_pages.py` 대표 샘플 페이지수 불변 확인(시각 붕괴 0). +- `tests/opengov_corpus_snapshot.rs` 스냅샷 갱신(개선 반영). +- 커밋: `_stage3.md` + `_report.md`. + +## 5. 롤백 기준 + +Stage 3 통제 비교에서 **악화 1건 이상** 또는 baseline 회귀 발생 시: F3(#1556) 선례대로 +**전량 되돌리고**(net-negative 불채택) 원인 재분석. 부분 채택하지 않는다. + +## 6. 산출물 +- 소스: `section.rs`, `context.rs` +- 테스트: 신규 픽스처 + roundtrip 단위/통합 테스트, opengov 스냅샷 갱신 +- 문서: `_stage1.md`, `_stage2.md`, `_stage3.md`, `_report.md` diff --git a/mydocs/working/task_m100_1584_stage1.md b/mydocs/working/task_m100_1584_stage1.md new file mode 100644 index 000000000..3d6d9d1ba --- /dev/null +++ b/mydocs/working/task_m100_1584_stage1.md @@ -0,0 +1,29 @@ +# Task #1584 — Stage 1 완료보고서 + +**단계**: 드롭 재현 회귀 테스트 박제 (RED) +**브랜치**: `local/task1584` + +## 작업 내용 + +`src/serializer/hwpx/section.rs` 테스트 모듈에 회귀 가드 추가: +`task1584_body_first_para_two_columndefs_roundtrip`. + +- 본문 첫 문단에 `ColumnDef` 2개를 둔 최소 Document 를 구성. +- `serialize_hwpx → parse_hwpx` 전체 roundtrip 수행. +- reparse 후 첫 문단의 `ColumnDef` 개수가 2인지 단언. + +## 결과 (RED 확인) + +``` +assertion `left == right` failed: ... ColumnDef 2개가 ... 보존돼야 한다: 1 + left: 1 + right: 2 +``` + +- **현재 코드: 2번째 인라인 ColumnDef 드롭** → reparse 1개. 버그 정확 재현. +- 근본원인(수행/구현 계획서 §2) 일치: 템플릿 앵커가 첫 ColumnDef 1개만 흡수, + 본문 인라인 슬롯 필터가 ColumnDef 전부 제외 → 2번째+ 드롭. + +## 다음 단계 + +Stage 2 — Option A 구현(C1~C4)으로 GREEN 전환 + baseline 회귀 0 확인. diff --git a/src/serializer/hwpx/section.rs b/src/serializer/hwpx/section.rs index 871f9889b..8381d741c 100644 --- a/src/serializer/hwpx/section.rs +++ b/src/serializer/hwpx/section.rs @@ -2844,4 +2844,34 @@ mod tests { assert_eq!(shapes_of(0), vec![(0, 1), (19, 2)], "섹션 첫 문단"); assert_eq!(shapes_of(1), vec![(0, 1), (3, 2)], "추가 문단"); } + + // ---------- #1584: 본문 인라인 ColumnDef 드롭 회귀 가드 ---------- + + #[test] + fn task1584_body_first_para_two_columndefs_roundtrip() { + // 본문 첫 문단에 ColumnDef 2개(섹션 단 정의 + 인라인 단 정의). + // 섹션 템플릿은 첫 ColumnDef 1개만 흡수하고, 2번째 인라인 ColumnDef 는 + // 본문 인라인 슬롯에서 제외되어 드롭된다(controls 6→5 양상). + // 수정 전: reparse 후 ColumnDef 1개만 → RED. 수정 후: 2개 보존 → GREEN. + let mut p0 = Paragraph::default(); + p0.controls.push(Control::ColumnDef(ColumnDef::default())); + p0.controls.push(Control::ColumnDef(ColumnDef::default())); + + let mut section = Section::default(); + section.paragraphs.push(p0); + let mut doc = Document::default(); + doc.sections.push(section); + + let bytes = crate::serializer::hwpx::serialize_hwpx(&doc).expect("serialize"); + let doc2 = crate::parser::hwpx::parse_hwpx(&bytes).expect("parse"); + let coldef_count = doc2.sections[0].paragraphs[0] + .controls + .iter() + .filter(|c| matches!(c, Control::ColumnDef(_))) + .count(); + assert_eq!( + coldef_count, 2, + "본문 첫 문단의 ColumnDef 2개가 roundtrip 후 모두 보존돼야 한다 (템플릿1 + 인라인1): {coldef_count}" + ); + } } From f5d50f7e1d4b55f8b67698016318a44090e25fca Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 12:25:49 +0900 Subject: [PATCH 02/35] =?UTF-8?q?Task=20#1584:=20=EB=B3=B8=EB=AC=B8=20?= =?UTF-8?q?=EC=9D=B8=EB=9D=BC=EC=9D=B8=20ColumnDef=20=EB=B0=A9=EC=B6=9C=20?= =?UTF-8?q?(Option=20A)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 본문 첫 문단의 2번째+ ColumnDef 가 HWPX 저장 시 드롭되던 버그 수정. - all-controls 분기: 첫 ColumnDef 슬롯 유지(회계 보존) + XML consume-once 억제 - filter 분기: 첫 ColumnDef 슬롯 제외(위치 미점유분) + 2번째+ 포함 RED 테스트 GREEN, baseline 4/4, lib 1960/0, 실문서 36382399 PASS diff=0. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/working/task_m100_1584_stage2.md | 42 +++++++++++++++++++++ src/serializer/hwpx/context.rs | 8 ++++ src/serializer/hwpx/section.rs | 50 ++++++++++++++++++++----- 3 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 mydocs/working/task_m100_1584_stage2.md diff --git a/mydocs/working/task_m100_1584_stage2.md b/mydocs/working/task_m100_1584_stage2.md new file mode 100644 index 000000000..88ef3207b --- /dev/null +++ b/mydocs/working/task_m100_1584_stage2.md @@ -0,0 +1,42 @@ +# Task #1584 — Stage 2 완료보고서 + +**단계**: Option A 구현 (GREEN) +**브랜치**: `local/task1584` + +## 변경 내용 + +| # | 파일 | 변경 | +|---|------|------| +| C1 | `context.rs` | `body_coldef_template_pending: bool` 필드 추가 (consume-once 플래그) | +| C2 | `section.rs` write_section | 첫 문단 렌더 직전 플래그 set, 직후 reset | +| C3 | `section.rs` render_runs | 본문 ColumnDef 슬롯 처리를 분기별로 정밀화 (아래) | +| C4 | `section.rs` render_control_slot | 본문 첫 ColumnDef 의 XML 만 consume-once 로 억제 | + +## 설계 핵심 — 두 슬롯 분기의 차이 + +초기 단순 구현(첫 ColumnDef 를 slots 에서 일괄 제거)은 회귀를 유발했다: +- **all-controls 분기**(`slot_count==len`)에서 ColumnDef 는 char-offset 슬롯을 점유 → + 제거 시 8유닛 회계 손실 → 후속 char_shape −8 시프트 (aift/exam_kor 회귀). +- **filter 분기**(`slot_count!=len`)의 단일 ColumnDef 는 위치 슬롯 미점유(추정 카운트 제외) → + 추가 시 position→mismatch 경로 전환 → equation 테스트 회귀. + +→ 분기별로 다르게 처리: +- **all-controls**: 첫 ColumnDef 를 슬롯에 **유지**(회계 보존), XML 만 consume-once 억제. +- **filter**: 첫 ColumnDef 를 슬롯에서 **제외**(위치 슬롯 미점유분), 2번째+ 만 포함 → + 드롭 방지. 제외 시 consume-once 플래그 해제(2번째 오억제 방지). + +## 검증 결과 (모두 GREEN) + +| 검사 | 결과 | +|------|------| +| RED 테스트 `task1584_..._roundtrip` | **PASS** (1→2 보존) | +| `equation_control_*` (3건, 회귀 가드) | PASS | +| `cargo test --lib` 전체 | **1960 passed, 0 failed** | +| `cargo test --test hwpx_roundtrip_baseline` | **4/4 PASS** (#1407/#1388 컬럼 보존) | +| `cargo clippy --lib` (변경 파일) | 무경고 | +| 실문서 `36382399` roundtrip | **PASS diff=0**, colPr 2==2 (인라인 ColumnDef 보존) | + +## 다음 단계 + +Stage 3 — fidelity 전수(hwpdocs 9350 + samples 319) 통제 비교: 49건 IR_DIFF 해소 확인, +악화 0 확인, 순효과>0. 스냅샷 갱신. diff --git a/src/serializer/hwpx/context.rs b/src/serializer/hwpx/context.rs index a568b5dae..06792a24e 100644 --- a/src/serializer/hwpx/context.rs +++ b/src/serializer/hwpx/context.rs @@ -95,6 +95,14 @@ pub struct SerializeContext { /// 정합이지만, 셀·글상자 subList 의 colPr 는 원본 XML 에 인라인으로 존재한다. /// `render_control_slot` 의 ColumnDef 방출을 subList 경로(depth > 0)로 한정한다. pub sub_list_depth: u32, + /// 본문 첫 문단의 첫 ColumnDef(섹션 템플릿 colPr 앵커가 흡수하는 단 정의)의 + /// **인라인 XML 방출만** 1회 억제하기 위한 consume-once 플래그 (#1584). + /// + /// ColumnDef 는 char-offset 슬롯(8유닛)을 점유하므로 `slots` 에는 그대로 남겨 + /// 위치 정합을 보존하되, 첫 ColumnDef 의 `` XML 은 템플릿이 이미 + /// 방출했으므로 중복 방지를 위해 건너뛴다. `write_section` 이 첫 문단 렌더 직전 + /// true 로 설정하고, 첫 본문 ColumnDef 방출 시 `render_control_slot` 이 소거한다. + pub body_coldef_template_pending: bool, } impl SerializeContext { diff --git a/src/serializer/hwpx/section.rs b/src/serializer/hwpx/section.rs index 8381d741c..efcda1e72 100644 --- a/src/serializer/hwpx/section.rs +++ b/src/serializer/hwpx/section.rs @@ -75,11 +75,15 @@ pub fn write_section( let mut vert_cursor: u32 = 0; let first_para = section.paragraphs.first(); + // [#1584] 첫 문단 렌더 직전 set — 본문 첫 ColumnDef(섹션 템플릿 흡수분)의 인라인 + // XML 방출만 1회 억제한다(슬롯 위치는 보존). 렌더 직후 reset 하여 추가 문단 누설 방지. + ctx.body_coldef_template_pending = true; let (first_runs, first_linesegs, first_advance) = match first_para { Some(p) => render_paragraph_parts(p, vert_cursor, ctx), // 문단이 없는 섹션(비파싱 IR) — linesegarray 방출 생략 (#1380) None => (String::new(), String::new(), vert_cursor), }; + ctx.body_coldef_template_pending = false; vert_cursor = first_advance; // 치환은 모두 pristine 템플릿의 고정 anchor 에 대해 수행한다 (#1378): @@ -423,18 +427,37 @@ fn render_runs(para: &Paragraph, ctx: &mut SerializeContext) -> String { let slot_count = inferred_control_slot_count(para); let slots: Vec<&Control> = if slot_count == para.controls.len() { + // 전 컨트롤이 위치 슬롯인 경로. 본문 첫 문단의 첫 ColumnDef 도 슬롯으로 남겨 + // char-offset 정합을 보존하고, 그 XML 만 render_control_slot 의 consume-once + // 플래그로 억제한다(템플릿이 이미 방출 — 중복 방지). 2번째+ 는 인라인 방출. para.controls.iter().collect() } else { - // [Task #1379] 셀·글상자 subList(depth > 0) 경로에서는 ColumnDef 도 - // 인라인 슬롯으로 취급한다 (원본 XML 에 인라인 존재). - // 본문(depth 0) 경로는 섹션 템플릿 첫 run 의 colPr 가 받으므로 불변. - para.controls + // [Task #1379] 셀·글상자 subList(depth>0) 경로에서는 ColumnDef 도 인라인 슬롯으로 + // 취급한다 (원본 XML 에 인라인 존재). + // [Task #1584] 본문(depth 0) 경로에서도 ColumnDef 를 인라인 슬롯에 포함하되, + // 첫 문단의 첫 ColumnDef(섹션 템플릿 흡수분)는 슬롯에서 제외한다 — 이 분기는 + // slot_count 가 char-offset 추정과 어긋나는 케이스로, 템플릿 흡수분은 위치 슬롯을 + // 점유하지 않으므로(추정 카운트에서 제외됨) 슬롯에 넣으면 위치가 어긋난다. + // 2번째+ 본문 ColumnDef 는 포함하여 드롭을 방지한다. + let suppress_first_col = ctx.sub_list_depth == 0 && ctx.body_coldef_template_pending; + let mut col_seen = 0u32; + let collected: Vec<&Control> = para + .controls .iter() .filter(|c| { + if matches!(c, Control::ColumnDef(_)) { + col_seen += 1; + return !(suppress_first_col && col_seen == 1); + } is_hwpx_inline_slot(c) - || (ctx.sub_list_depth > 0 && matches!(c, Control::ColumnDef(_))) }) - .collect() + .collect(); + if suppress_first_col { + // 템플릿 흡수분을 슬롯에서 이미 제외했으므로, render_control_slot 의 + // consume-once 억제가 2번째 ColumnDef 를 잘못 건너뛰지 않도록 플래그 해제. + ctx.body_coldef_template_pending = false; + } + collected }; let mut tab_idx = 0usize; @@ -827,10 +850,17 @@ fn render_control_slot(out: &mut String, control: &Control, ctx: &mut SerializeC Err(e) => eprintln!("[hwpx] Form 직렬화 실패: {e}"), }, Control::CharOverlap(co) => out.push_str(&render_compose(co)), - // [Task #1379] 셀·글상자 subList 한정 인라인 colPr 방출. - // 본문 경로(depth 0)는 섹션 템플릿 첫 run 에서 처리하므로 미방출 유지. - Control::ColumnDef(cd) if ctx.sub_list_depth > 0 => { - out.push_str(&render_col_pr_ctrl(cd)); + // [Task #1379/#1584] 인라인 colPr 방출. + // - subList(depth>0): 전부 인라인 방출(원본 XML 인라인 존재). + // - 본문(depth 0): 첫 문단의 첫 ColumnDef 1개는 섹션 템플릿 colPr 앵커가 이미 + // 방출했으므로(중복 방지) consume-once 플래그로 XML 만 건너뛴다. 슬롯 자체는 + // 상위(render_runs)에서 유지하므로 char-offset 위치 정합은 보존된다. + Control::ColumnDef(cd) => { + if ctx.sub_list_depth == 0 && ctx.body_coldef_template_pending { + ctx.body_coldef_template_pending = false; + } else { + out.push_str(&render_col_pr_ctrl(cd)); + } } _ => {} } From 2beba22a33fcb8b79a3dde5e51ef48b924c03e71 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 12:32:12 +0900 Subject: [PATCH 03/35] =?UTF-8?q?Task=20#1584:=20=ED=86=B5=EC=A0=9C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20=EA=B2=80=EC=A6=9D=20+=20=ED=9A=8C?= =?UTF-8?q?=EA=B7=80=20=EA=B0=80=EB=93=9C=20=EC=98=81=EC=86=8D=ED=99=94=20?= =?UTF-8?q?(Stage=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fidelity 전수 통제 비교: 개선 49 / 회귀 0 / 순효과 +49 (IR_DIFF 59->10). Hangul 오라클 8표본 COLLAPSE 0. 대표 실문서 36382399 를 opengov 고정 말뭉치 회귀 가드로 편입(snapshot PASS). 최종 보고서 작성. closes #1584 Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/report/task_m100_1584_report.md | 60 ++++++++++++++++++ mydocs/working/task_m100_1584_stage3.md | 50 +++++++++++++++ ...355\222\210 \352\265\254\353\247\244.hwpx" | Bin 0 -> 17727 bytes tests/fixtures/opengov_snapshot.tsv | 1 + 4 files changed, 111 insertions(+) create mode 100644 mydocs/report/task_m100_1584_report.md create mode 100644 mydocs/working/task_m100_1584_stage3.md create mode 100644 "samples/hwpx/opengov/36382399_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\235\274\353\260\230\354\247\200\354\266\234\352\262\260\354\235\230\354\204\234_\352\270\260\352\260\204\354\240\234 \354\206\214\353\270\224\353\241\235 \354\204\270\354\262\231 \354\236\221\354\227\205\354\232\251\355\222\210 \352\265\254\353\247\244.hwpx" diff --git a/mydocs/report/task_m100_1584_report.md b/mydocs/report/task_m100_1584_report.md new file mode 100644 index 000000000..99a4b7a63 --- /dev/null +++ b/mydocs/report/task_m100_1584_report.md @@ -0,0 +1,60 @@ +# Task #1584 — 최종 결과보고서 + +**제목**: HWPX 저장 시 본문 문단의 인라인 ColumnDef(cold) 드롭 수정 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1584 · **브랜치**: `local/task1584` + +--- + +## 1. 문제 + +실문서 무손실 검증(hwpdocs 9350)에서 잔여 IR_DIFF 최대 단일 클래스(49건). 게이트는 +"표 셀 char_shape ID 오매핑"으로 보고했으나, raw XML/verbose ir-diff 로 **진짜 근본원인을 +본문 첫 문단의 인라인 ColumnDef 드롭으로 정정**함. 셀 char_shape 변위는 컨트롤 인덱스 +시프트의 하위 증상. + +``` +orig 문단0: [secPr, ctrl,colPr, ctrl,colPr, ctrl,fieldBegin, tbl] colPr 2 +rt 문단0: [secPr, ctrl,colPr, ctrl, fieldBegin, tbl] colPr 1 ← 드롭 +``` + +## 2. 근본원인 (`src/serializer/hwpx/section.rs`) + +- 섹션 템플릿 앵커가 본문 첫 문단의 **첫 ColumnDef 1개만** colPr 로 흡수. +- 본문(depth 0) 인라인 슬롯 필터가 ColumnDef 를 전부 제외 → **2번째+ ColumnDef 가 어느 + 경로로도 방출되지 않아 드롭**(controls 6→5, cc −8, 후속 컨트롤 인덱스 시프트). + +## 3. 해결 (Option A surgical) + +| 파일 | 변경 | +|------|------| +| `context.rs` | `body_coldef_template_pending` consume-once 플래그 추가 | +| `section.rs` write_section | 첫 문단 렌더 전후로 플래그 set/reset | +| `section.rs` render_runs | **all-controls 분기**: 첫 ColumnDef 슬롯 유지(회계 보존). **filter 분기**: 첫 ColumnDef 슬롯 제외(위치 미점유분), 2번째+ 포함 | +| `section.rs` render_control_slot | 본문 첫 ColumnDef 의 XML 만 consume-once 억제(템플릿 중복 방지) | + +**설계 핵심**: 두 슬롯 분기가 ColumnDef 의 char-offset 슬롯 점유 여부에서 다르므로 분기별로 +처리. 단순 일괄 제거는 회귀(−8 시프트 / position→mismatch 전환)를 유발 — 통제 비교로 검출·교정. + +## 4. 검증 + +| 검사 | 결과 | +|------|------| +| 단위 RED→GREEN | PASS (ColumnDef 1→2 보존) | +| `cargo test --lib` | 1960 passed, 0 failed | +| `hwpx_roundtrip_baseline` | 4/4 (#1407/#1388 보존) | +| opengov snapshot (36382399 가드 추가) | PASS | +| **fidelity 통제 비교** | **개선 49 / 회귀 0 / 순효과 +49** | +| Hangul 오라클 (8 표본) | OK 8 / COLLAPSE 0 | + +실문서 HWPX IR_DIFF: **59 → 10** (공통 9350 기준 −49, 악화 0). + +## 5. 산출물 + +- 소스: `src/serializer/hwpx/section.rs`, `src/serializer/hwpx/context.rs` +- 테스트: `task1584_..._roundtrip` 단위 + `samples/hwpx/opengov/36382399…` 통합 가드 +- 문서: 수행/구현 계획서, `_stage1~3`, 본 보고서 + +## 6. 후속 + +잔존 IR_DIFF 10건(F3 잔여 다중필드 복합슬롯 + shapeComment + ruby) 및 PARSE_FAIL 12건 +(손상 다운로드, rhwp 무관)은 별건. 채택 후 `local/devel` → `devel` 반영. diff --git a/mydocs/working/task_m100_1584_stage3.md b/mydocs/working/task_m100_1584_stage3.md new file mode 100644 index 000000000..e25b7322b --- /dev/null +++ b/mydocs/working/task_m100_1584_stage3.md @@ -0,0 +1,50 @@ +# Task #1584 — Stage 3 완료보고서 + +**단계**: 통제 비교 검증 (채택 게이트) +**브랜치**: `local/task1584` +**바이너리**: `local/task1584` HEAD (f5d50f7e 위 빌드) + +## 1. fidelity 전수 통제 비교 (hwpdocs) + +| 항목 | 수정 전 (devel HEAD, fidelity9) | 수정 후 (fidelity10) | +|------|------:|------:| +| 총 파일 | 9350 | 9660 (수집 진행) | +| PASS | 9279 | 9638 | +| **IR_DIFF** | **59** | **10** | +| PARSE_FAIL | 12 | 12 (손상 다운로드, 불변) | + +**공통 9350건 per-file 통제 비교**: + +| 분류 | 건수 | +|------|----:| +| 개선 (IR_DIFF→PASS) | **49** | +| **회귀 (PASS→IR_DIFF)** | **0** | +| 잔존 (IR_DIFF→IR_DIFF) | 10 | +| 신규 파일(310) 중 IR_DIFF | 0 | +| **순효과 (개선−회귀)** | **+49** | + +→ 채택 게이트 충족: **순효과 +49 > 0, 악화 0**. + +잔존 10건 = F3 잔여(다중필드 복합슬롯) + shapeComment + ruby 엣지 — 본 타스크 범위 외(별건). + +## 2. Hangul 페이지 오라클 (시각 붕괴 보조 검증) + +개선 49건 중 8건 표본(seed=1), 한글 편집기 PageCount 비교: + +``` +8건 / OK=8 COLLAPSE=0 기타=0 (붕괴율 0%) 전부 pg 1→1 +``` + +→ ColumnDef 복원이 페이지 레이아웃을 붕괴시키지 않음. 오히려 컨트롤 인덱스 시프트가 +사라져 셀 char_shape 오매핑(숨은 바코드 가시화) 하위 증상도 동시 해소. + +## 3. 회귀 가드 영속화 + +- 단위: `task1584_body_first_para_two_columndefs_roundtrip` (Stage 1). +- 통합: 대표 실문서 `36382399` 를 `samples/hwpx/opengov/` 고정 말뭉치에 편입, + `tests/fixtures/opengov_snapshot.tsv` 에 PASS 등록. snapshot 테스트 통과. + +## 4. 결론 + +본문 인라인 ColumnDef 드롭 결함 해소. 실문서 IR_DIFF 59→10(공통 기준 −49, 회귀 0). +무손실 PASS율 추가 상승. 채택. diff --git "a/samples/hwpx/opengov/36382399_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\235\274\353\260\230\354\247\200\354\266\234\352\262\260\354\235\230\354\204\234_\352\270\260\352\260\204\354\240\234 \354\206\214\353\270\224\353\241\235 \354\204\270\354\262\231 \354\236\221\354\227\205\354\232\251\355\222\210 \352\265\254\353\247\244.hwpx" "b/samples/hwpx/opengov/36382399_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\235\274\353\260\230\354\247\200\354\266\234\352\262\260\354\235\230\354\204\234_\352\270\260\352\260\204\354\240\234 \354\206\214\353\270\224\353\241\235 \354\204\270\354\262\231 \354\236\221\354\227\205\354\232\251\355\222\210 \352\265\254\353\247\244.hwpx" new file mode 100644 index 0000000000000000000000000000000000000000..c7192636f503c605a21e76b4c11d054a6e677154 GIT binary patch literal 17727 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

m^YPSV=40QUM~bJJewBQK+=p$fI{`5&G{<>j z;sJTK*kEJKL|Un&V6Jo@(v7`+-b0)PUi2#jcTrplX{Q|033H({Q@S&946_EC;#PhB zn6McotY^1e+p@9$Y&Aj#HZPMlIqdY!AN~+$WDBibFH1tl)mTowMJQBCU=|V!Pzk>g z*rM!KVfE6RJFbY(4yq6)ZLsq|BAC^h*eLwC+Oatz;~ zJ7}oc*E7|&)A#Yy_yi&Ujd<)al$L&`v0rtQBGMLd^$~vyFs(THhy%eJXI9{Ewsp5Yd|dADJ)cfiwlZto(D|sEfp)~xeyx2xfL;%BE@;mw zj$>FG2h}v2v0RzjN8~hpz{t)`S|Oc8ZxWrAQNZnwytMd>241;(;rovG^akKIWAp9^ zKElLu;q-ZH3#^_6XY1dr?wE1$LO-=Q>`i_ZlSA0)>ACM+4iuwbPVwsgZrSOX+SWr; zYjo2y&86c;Y3~^Mu#cQ(lqMhF^{<~>od>T>8EZums;kK;wvS7GqLRhomm&eP=Zd8= zQrG0UE-(pC6`*k+kzvtaS^njKz-Do0k>WtxkJYg%RC%l>7s;vMgHkdt=w}qOf%l ziYReImBot}`2xxI_KE^Hc~q=qra|6xLVjTvoi2e__+`_6&B3Z7oDl_e8M*)l37m+k zVZqtI9?Q)MXs;^WML}FA`P-@1Z0TKsr%XBhf2BEVAD`P!&EvXr0v>R_pE+@tQ8m{K!L!G2mtEaczfPY| zKe6kQ{RfZ3@##gsn(Y;1UP+&QB#l~dT-fK8*#~LTz;i|9K5gHpMRIRmX z=~k^-e=h9Tynp!e2F3tyMkaA?+~-vQ9SQ^r3=NGS8g_aGx-Rs?DnM!>x-5Y-^y~R>YwU=mwxK&P5n-SRBa!;0X Date: Sat, 27 Jun 2026 13:16:31 +0900 Subject: [PATCH 04/35] =?UTF-8?q?Task=20#1587:=20Ruby=20=EB=93=9C=EB=A1=AD?= =?UTF-8?q?=20=EC=9E=AC=ED=98=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20(RED)=20+?= =?UTF-8?q?=20=EA=B3=84=ED=9A=8D=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ruby(덧말) 컨트롤이 render_control_slot arm 부재로 저장 시 드롭되는 버그를 serialize_hwpx -> parse_hwpx roundtrip 으로 재현. 현재 reparse 후 Ruby 소실(0, 기대 1). 잔존 IR_DIFF 10건 분석 문서 동봉. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/plans/task_m100_1587.md | 73 ++++++++++++++++++++ mydocs/plans/task_m100_1587_impl.md | 81 +++++++++++++++++++++++ mydocs/tech/hwpx_residual_ir_diff_10.md | 88 +++++++++++++++++++++++++ mydocs/working/task_m100_1587_stage1.md | 34 ++++++++++ src/serializer/hwpx/mod.rs | 39 +++++++++++ 5 files changed, 315 insertions(+) create mode 100644 mydocs/plans/task_m100_1587.md create mode 100644 mydocs/plans/task_m100_1587_impl.md create mode 100644 mydocs/tech/hwpx_residual_ir_diff_10.md create mode 100644 mydocs/working/task_m100_1587_stage1.md diff --git a/mydocs/plans/task_m100_1587.md b/mydocs/plans/task_m100_1587.md new file mode 100644 index 000000000..6353c5805 --- /dev/null +++ b/mydocs/plans/task_m100_1587.md @@ -0,0 +1,73 @@ +# 수행계획서 — Task #1587 + +**제목**: HWPX 저장 시 Ruby(덧말) 컨트롤 드롭 수정 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1587 · **브랜치**: `local/task1587` + +--- + +## 1. 배경 + +fidelity10(hwpdocs 9660) 잔여 IR_DIFF 중 3건(36384160·36399208·36389301)에서 Ruby(덧말) +컨트롤이 저장 시 드롭. 잔여 10건 중 **유일하게 시각 영향 있는 실버그**(루비 주음 소실). +컨트롤 드롭으로 후속 char_shape −8 변위 하위 증상 동반(36389301). + +## 2. 그라운딩 — 스코프 발견 (중요) + +착수 조사 결과, 단순 "방출 arm 추가"로는 **무손실이 되지 않음**을 확인: + +원본 dutmal 구조 (36389301): +```xml + + 팀단위 훈련 + 전술훈련 30% + 현지훈련 20% + +``` + +`Ruby` 모델(`control.rs:165`)은 `ruby_text`(=subText) + `alignment`(u8) **2개 필드뿐**: + +| 원본 속성/요소 | 현 모델 처리 | 손실 | +|----------------|-------------|------| +| `subText` | `ruby_text` | OK | +| `mainText`(기준 텍스트) | 파서가 **skip**, 미보존 | **손실** — 시각 복원 불가 | +| `posType`(TOP/BOTTOM) | `alignment` 에 병합 | 충돌 | +| `align`(LEFT/RIGHT/CENTER) | `alignment` 에 병합(posType 덮어씀) | 충돌 | +| `szRatio` / `option` / `styleIDRef` | 미보존 | 손실(현 샘플 전부 0 — 우연 일치) | + +또한 파서(`section.rs:515`)는 dutmal 에 `\u{0002}`(컨트롤 마커 1개)만 push. + +→ **진짜 무손실은 모델+파서+직렬화기 3계층 확장이 필요**하다. IR 스켈레톤만 복원(빈 mainText) +하면 IR_DIFF 게이트는 통과하나 루비가 기준 텍스트 없이 떠 **시각 충실도 미달**. + +## 3. 스코프 결정 + +**전체 충실도(권장)**: `Ruby` 모델에 `main_text: String`, `pos_type: u8`, `align: u8`, +`sz_ratio`, `option`, `style_id_ref` 를 추가하고, 파서가 이를 채우며, 직렬화기가 역방출. +- HWP5(OLE) 파서/직렬화기에도 동일 필드가 있으면 정합 확인(없으면 HWPX 한정 처리). + +**배제(IR 스켈레톤만)**: 빈 mainText 로 IR_DIFF 만 해소 — 시각 미달이라 프로젝트 무손실 목표 +부적합. 채택 안 함. + +## 4. 회귀 위험 & 채택 기준 + +모델 필드 추가는 파서/직렬화기/HWP5 정합에 파급. **통제 비교(개선−회귀>0, 악화0)** 게이트. + +수용 기준: +1. 3건(36384160·36399208·36389301) roundtrip IR diff = 0 (ruby 보존, char_shape 시프트 해소). +2. dutmal 속성(posType·align·szRatio·option·styleIDRef) + mainText + subText 무손실 재현. +3. `cargo test --lib` + `hwpx_roundtrip_baseline` 회귀 0. +4. fidelity 전수 통제 비교 순효과 > 0, 악화 0. + +## 5. 구현 단계 (4단계) + +- **Stage 1 — 재현 테스트(RED)**: Ruby 2개·mainText·속성 포함 문단 roundtrip 단위 테스트 + (현 코드에서 controls=[] 로 RED). +- **Stage 2 — 모델+파서 확장**: `Ruby` 필드 추가, `parse_dutmal` 가 mainText/posType/align/ + szRatio/option/styleIDRef 채움. HWP5 정합 확인. +- **Stage 3 — 직렬화기**: `write_ruby`(=`` 역매핑) + `render_control_slot` 에 + `Control::Ruby` arm. Stage1 GREEN + baseline 회귀 0. +- **Stage 4 — 통제 비교**: fidelity 전수 재측정, 개선−회귀 집계, opengov 가드(36389301) 편입. + +## 6. 산출물 +- 소스: `src/model/control.rs`, `src/parser/hwpx/section.rs`, `src/serializer/hwpx/section.rs`(+신규 ruby 직렬화) +- 테스트: 신규 단위 + opengov 가드 +- 문서: `_impl`, `_stage1~4`, `_report` diff --git a/mydocs/plans/task_m100_1587_impl.md b/mydocs/plans/task_m100_1587_impl.md new file mode 100644 index 000000000..a5d804ae1 --- /dev/null +++ b/mydocs/plans/task_m100_1587_impl.md @@ -0,0 +1,81 @@ +# 구현 계획서 — Task #1587 + +**제목**: HWPX Ruby(덧말) 컨트롤 드롭 수정 — 모델+파서+직렬화기 3계층 +**브랜치**: `local/task1587` · **이슈**: edwardkim/rhwp#1587 +**전제**: 수행계획서(`task_m100_1587.md`) 승인됨 + +--- + +## 1. 파급 범위 (그라운딩 확정) + +| 계층 | 파일 | 현 상태 | 변경 | +|------|------|---------|------| +| 모델 | `src/model/control.rs` Ruby | ruby_text+alignment(2필드) | 필드 확장(아래) | +| 파서(HWPX) | `parser/hwpx/section.rs` parse_dutmal | mainText skip, posType/align 충돌 | 전 속성/요소 보존 | +| 직렬화(HWPX) | `serializer/hwpx/section.rs` | Ruby arm 부재(드롭) | write_ruby + arm | +| HWP5 | — | ruby 파서 **부재**(미지원) | **무영향**(extra 필드 무시) | + +`.alignment` 읽기는 parse_dutmal 한 곳뿐(main.rs 는 ruby_text 만, body_text 는 `_` 매칭) → +모델 필드 교체의 외부 파급 없음. + +## 2. 모델 변경 (C1) + +```rust +pub struct Ruby { + pub main_text: String, // mainText 기준 텍스트 — 신규(시각 충실도 핵심) + pub ruby_text: String, // subText 덧말 + pub pos_type: u8, // posType: 0=TOP, 1=BOTTOM — 신규(alignment 분리) + pub align: u8, // align: 0=LEFT, 1=RIGHT, 2=CENTER — 신규 + pub sz_ratio: u8, // szRatio — 신규 + pub option: u32, // option — 신규 + pub style_id_ref: u16, // styleIDRef — 신규 +} +``` +- `alignment` 제거(pos_type+align 로 분리). `#[derive(Default)]` 유지 → 기존 호출 호환. + +## 3. 파서 변경 (C2) — `parse_dutmal` + +- 속성: `posType`→pos_type, `align`→align, `szRatio`→sz_ratio, `option`→option, + `styleIDRef`→style_id_ref (문자열→정수 파싱). +- 자식: `mainText`→`read_dutmal_text`로 `main_text` 채움(현 skip 제거), `subText`→ruby_text. +- 호출부(section.rs:515)의 `\u{0002}` 마커 push 는 유지(슬롯 위치 보존). + +## 4. 직렬화 변경 (C3) — `write_ruby` + arm + +- 신규 `write_ruby(ruby) -> String`: `` + `{main_text}{ruby_text}`. + 속성/텍스트 XML escape. parse_dutmal 의 정확한 역매핑. +- `render_control_slot` 에 `Control::Ruby(r) => out.push_str(&write_ruby(r))` arm 추가. + Ruby 는 이미 `is_hwpx_inline_slot` 포함 → 슬롯 위치 자동. + +## 5. 구현 단계 (4단계) + +### Stage 1 — 재현 테스트 (RED) +- `serialize_hwpx→parse_hwpx` roundtrip 단위 테스트: ruby 포함 문단 → reparse 후 controls 에 + Ruby 보존 + ruby_text 일치 검증. 현재 RED(controls=[]). +- 테스트는 `Ruby { ruby_text, ..Default::default() }` 형태로 작성(모델 변경에 견고). +- 커밋: `Task #1587: Ruby 드롭 재현 테스트 (RED)` + `_stage1.md`. + +### Stage 2 — 모델+파서 확장 (C1, C2) +- C1 모델 필드 교체, C2 parse_dutmal 전 속성/요소 보존. +- `cargo build` + 기존 테스트 영향 없음 확인(파급 parse_dutmal 한정). +- 커밋: `Task #1587: Ruby 모델+파서 확장` + `_stage2.md`. + +### Stage 3 — 직렬화기 (C3) +- write_ruby + arm. Stage1 GREEN + 신규 필드(main_text/pos_type/align/sz_ratio/option/ + style_id_ref) 무손실 단언 추가. +- `cargo test --lib` + `hwpx_roundtrip_baseline` 회귀 0. +- 커밋: `Task #1587: Ruby 직렬화 (write_ruby + arm)` + `_stage3.md`. + +### Stage 4 — 통제 비교 (채택 게이트) +- fidelity 전수 재측정: 3건(36384160·36399208·36389301) 해소 확인, 악화 0, 순효과>0. +- opengov 가드(36389301) 편입 + snapshot 갱신. +- 커밋: `_stage4.md` + `_report.md`. + +## 6. 롤백 기준 +Stage 4 통제 비교 악화 ≥1 또는 baseline 회귀 시 전량 되돌리고 재분석(부분 채택 금지). + +## 7. 산출물 +- 소스: control.rs, parser/hwpx/section.rs, serializer/hwpx/section.rs +- 테스트: 신규 roundtrip 단위 + opengov 가드 +- 문서: `_stage1~4`, `_report` diff --git a/mydocs/tech/hwpx_residual_ir_diff_10.md b/mydocs/tech/hwpx_residual_ir_diff_10.md new file mode 100644 index 000000000..5f38264c6 --- /dev/null +++ b/mydocs/tech/hwpx_residual_ir_diff_10.md @@ -0,0 +1,88 @@ +# HWPX 잔존 IR_DIFF 10건 분석 (fidelity10, #1584 이후) + +- 일자: 2026-06-27 +- 바이너리: `local/task1584` HEAD (#1584 ColumnDef 수정 반영) +- 말뭉치: hwpdocs 9660 hwpx → IR_DIFF 10 (PARSE_FAIL 12 별개) +- **검증**: 10건 전부 #1584 수정 전/후 diff 성격 **완전 동일** → ColumnDef 수정과 무관한 선존 잔여. + +## 분류 요약 + +| 클래스 | 건수 | 성격 | 시각 영향 | 수정 난이도 | +|--------|----:|------|----------|-----------| +| **A. Ruby 직렬화기 부재** | 3 | 실버그 | **있음**(루비 주음 소실) | 중 | +| **B. write_line shapeComment 누락** | 3 | 경미 | 거의 없음(설명 메타데이터) | **하**(1줄) | +| **C. para0 char_shape 경계 오정렬** | 3 | 조사 필요 | 가능성 있음 | 미상 | +| **D. 빈/공백 문단 spurious (0,0)** | 1 | 경미 | 없음 | 하~중 | + +--- + +## A. Ruby 컨트롤 드롭 (3건: 36384160, 36399208, 36389301) + +**근본원인**: `render_control_slot`(section.rs)에 **`Control::Ruby` arm 부재**. +Ruby 는 `is_hwpx_inline_slot`(line 749)에 등록돼 슬롯으로 인식되지만, 방출 dispatch 에서 +대응 arm 이 없어 `_ => {}` 로 빠져 **XML 미방출 → 드롭**. (ColumnDef 와 동형 — 인식되나 미방출.) + +``` +36384160 sec2: paragraph[88]cell·[118]·[179](ruby×2)·[181] ruby 드롭 +36399208 sec2: paragraph[72] ruby 드롭 +36389301 sec0: paragraph[6] ruby 드롭 → char_shapes (51,8)→(43,8) −8 시프트(하위 증상) +``` + +- **36389301 의 char_shape −8 시프트는 ruby 드롭의 하위 증상** (8유닛 슬롯 소실 → 후속 경계 −8). + ColumnDef 와 동일 패턴 — 컨트롤 드롭이 인덱스/오프셋을 밀어 char_shape 를 변위. +- 영향: 루비(한자 독음·위첨자) 텍스트가 사라짐 → 실제 시각 차이. +- 수정 방향: `write_ruby` 직렬화기 + `render_control_slot` 에 `Control::Ruby` arm 추가. + 파서(`parse_hwpx`)의 ruby 역매핑 확인 필요. + +## B. write_line shapeComment 누락 (3건: 36389418, 36392900, 36391302) + +**근본원인**: `shape.rs`의 `write_line`(line 121)이 **`write_shape_comment` 미호출**. +`write_rect`(line 110)·`write_container_close`(line 235)는 호출하나 선 도형만 누락. +→ 선 도형 설명("선입니다.")이 저장 시 드롭. + +``` +36389418 sec0 p18 cell shape ×6, 36392900 sec0 p19 cell shape ×11, 36391302 ×2 +``` + +- 영향: 도형 설명(접근성/메타데이터, 화면 비표시) 소실 — 시각 영향 거의 없음. +- 수정 방향: `write_line` 의 caption 방출 뒤 `write_shape_comment(w, c)?;` 1줄 추가 + (#1392/#1403 도형 설명 보존과 정합). **가장 간단**. + +## C. para0 char_shape 경계 오정렬 (3건: 36384689, 36385445, 36388711) + +필드(fieldBegin/End)·루비와 **무관**. 섹션 첫 문단(secPr+colPr+표 영역)의 char_shape 경계가 +control-slot 공간에서 어긋남. + +``` +36384689 p0 "문서번호": (24,10)→(32,10) +8 [ctrl,tbl,tbl] +36385445 p0 "문서번호": (24,15)→(32,15) +8 [ctrl,tbl,tbl] ← 동일 패턴(체계적) +36388711 p0 (로고/표): (52,8)(81,9)→(36,8)(73,9) −16/−8 [secPr,colPr,tbl, line×3] +``` + +- 36384689·36385445 는 **동일 +8 패턴**(체계적, "문서번호" 표 머리 문단). secPr/colPr run 의 + charPr 경계 산정이 원본과 8유닛 어긋남 — 추정 슬롯 카운트 vs 실제 char_offset 불일치 의심. +- 36388711 은 −16/−8 혼재(로고 영역 다중 슬롯). +- 수정 방향: secPr/colPr 첫 run 의 char_shape 경계 산정 로직 정밀 조사 필요(F3·#1561 와 별개). + **dedicated 조사 권장**. + +## D. 빈/공백 문단 spurious char_shape (1건: 36386761) + +``` +36386761 sec0 p5 " 수신 ": expected=[] actual=[(0,0)] +``` + +- 원본에 char_shape 없는 공백 문단에 저장→재파싱 시 기본 char_shape (0,0) 가 생성됨. +- 영향: 없음(기본 글자모양). 경미. +- 수정 방향: 빈 char_shapes 문단의 secPr/run charPrIDRef 방출 조건 점검. + +--- + +## 권고 (우선순위) + +1. **Class A (Ruby)** — 유일한 시각 영향 실버그. 3건 + char_shape 하위 증상 1건 동시 해소. + **별도 이슈 + 정식 타스크 1순위**. +2. **Class B (write_line shapeComment)** — 1줄 수정, 3건 해소. **별도 이슈 + 간단 수정 2순위**. +3. **Class C (para0 char_shape)** — 체계적 2건 포함. **조사 선행** 후 판단. +4. **Class D (spurious 0,0)** — 경미. 후순위 또는 C 와 묶음. + +> 나머지 PARSE_FAIL 12건 = "ZIP EOCD 없음" 손상 다운로드(수집기 아티팩트, rhwp 무관). diff --git a/mydocs/working/task_m100_1587_stage1.md b/mydocs/working/task_m100_1587_stage1.md new file mode 100644 index 000000000..c67f57d56 --- /dev/null +++ b/mydocs/working/task_m100_1587_stage1.md @@ -0,0 +1,34 @@ +# Task #1587 — Stage 1 완료보고서 + +**단계**: Ruby 드롭 재현 테스트 (RED) +**브랜치**: `local/task1587` + +## 작업 내용 + +`src/serializer/hwpx/mod.rs` 테스트 모듈에 회귀 가드 추가: +`task1587_ruby_control_roundtrips`. + +- `Control::Ruby{ruby_text:"덧말", ..Default::default()}` 를 둔 최소 Document 구성 + (`..Default::default()` 사용 → Stage 2 모델 필드 확장에 견고). +- `serialize_hwpx → parse_hwpx` roundtrip 후 첫 문단 controls 의 Ruby 보존 + ruby_text 검증. + +## 결과 (RED 확인) + +``` +assertion failed: Ruby 컨트롤이 roundtrip 후 보존돼야 한다 (현재 드롭) + controls = [SectionDef, ColumnDef] ← 템플릿 자동 주입, Ruby 소실 + left: 0 right: 1 +``` + +- **현재 코드: Ruby 드롭** — `is_hwpx_inline_slot` 에 등록(인식)됐으나 `render_control_slot` + 방출 arm 부재로 `_ => {}` 처리. 근본원인(구현 계획서 §1) 일치. + +## 그라운딩 재확인 + +실문서 `36389301` 문단 0.6 dump: cc=59, text_len=50 → (59−1−50)/8 = **1 슬롯**. +ruby subText="전술훈련 30% + 현지훈련 20%". mainText("팀단위 훈련")는 para.text 에 **부재** +→ 모델 손실 구조(mainText 미보존) 입증. + +## 다음 단계 + +Stage 2 — 모델(`control.rs` Ruby 필드 확장) + 파서(`parse_dutmal` 전 속성/요소 보존). diff --git a/src/serializer/hwpx/mod.rs b/src/serializer/hwpx/mod.rs index 2ea505a9c..052a358c1 100644 --- a/src/serializer/hwpx/mod.rs +++ b/src/serializer/hwpx/mod.rs @@ -466,6 +466,45 @@ mod tests { ); } + #[test] + fn task1587_ruby_control_roundtrips() { + // Ruby(덧말) 컨트롤은 is_hwpx_inline_slot 에 등록돼 슬롯으로 인식되나 + // render_control_slot 에 방출 arm 이 없어 저장 시 드롭된다(controls=[]). + // 수정 전: reparse 후 Ruby 소실 → RED. 수정 후: 보존 → GREEN. + use crate::model::control::{Control, Ruby}; + + let mut doc = Document::default(); + let mut section = crate::model::document::Section::default(); + let mut para = crate::model::paragraph::Paragraph::default(); + para.text = "ab".to_string(); + para.char_offsets = vec![0, 9]; + para.char_count = 11; // (11-1-2)/8 = 1 슬롯 + para.controls.push(Control::Ruby(Ruby { + ruby_text: "덧말".to_string(), + ..Default::default() + })); + section.paragraphs.push(para); + doc.sections.push(section); + + let bytes = serialize_hwpx(&doc).expect("serialize ruby"); + let doc2 = crate::parser::hwpx::parse_hwpx(&bytes).expect("parse"); + let rubies: Vec<_> = doc2.sections[0].paragraphs[0] + .controls + .iter() + .filter_map(|c| match c { + Control::Ruby(r) => Some(r), + _ => None, + }) + .collect(); + assert_eq!( + rubies.len(), + 1, + "Ruby 컨트롤이 roundtrip 후 보존돼야 한다 (현재 드롭): {:?}", + doc2.sections[0].paragraphs[0].controls + ); + assert_eq!(rubies[0].ruby_text, "덧말", "덧말(subText) 텍스트 보존"); + } + #[test] fn equation_control_does_not_consume_unmapped_control_gap() { use crate::model::control::{Control, Equation}; From af26cea7dac5ec9d07c5ab35421f4b819d244216 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 13:21:23 +0900 Subject: [PATCH 05/35] =?UTF-8?q?Task=20#1587:=20Ruby=20=EB=AA=A8=EB=8D=B8?= =?UTF-8?q?+=ED=8C=8C=EC=84=9C=20=ED=99=95=EC=9E=A5=20(Stage=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ruby 모델에 main_text/pos_type/align/sz_ratio/option/style_id_ref 추가(alignment 제거). parse_dutmal 이 mainText 보존 + posType/align 분리 + szRatio/option/styleIDRef 파싱. alignment 제거 외부 파급 0(parse_dutmal 한정). 빌드 성공, RED 유지. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/working/task_m100_1587_stage2.md | 22 ++++++++++++++++++++++ src/model/control.rs | 17 ++++++++++++++--- src/parser/hwpx/section.rs | 22 ++++++++++++++++------ 3 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 mydocs/working/task_m100_1587_stage2.md diff --git a/mydocs/working/task_m100_1587_stage2.md b/mydocs/working/task_m100_1587_stage2.md new file mode 100644 index 000000000..644a4203f --- /dev/null +++ b/mydocs/working/task_m100_1587_stage2.md @@ -0,0 +1,22 @@ +# Task #1587 — Stage 2 완료보고서 + +**단계**: 모델 + 파서 확장 +**브랜치**: `local/task1587` + +## 변경 내용 + +| # | 파일 | 변경 | +|---|------|------| +| C1 | `src/model/control.rs` Ruby | `alignment`(u8) 제거 → `main_text`, `pos_type`, `align`, `sz_ratio`, `option`, `style_id_ref` 추가 | +| C2 | `src/parser/hwpx/section.rs` parse_dutmal | posType/align 분리 보존 + szRatio/option/styleIDRef 파싱 + mainText 보존(종전 skip 제거) | + +## 검증 + +- `cargo build` 성공 — `alignment` 제거가 **외부 파급 0**(parse_dutmal 한 곳만 사용 확인 입증). +- Stage 1 RED 테스트 `task1587_ruby_control_roundtrips` 는 `..Default::default()` 사용으로 + 모델 변경 후에도 컴파일되며, 직렬화기 미수정이므로 **여전히 RED**(Ruby 드롭). 의도된 상태. + +## 다음 단계 + +Stage 3 — 직렬화기(`write_ruby` + `render_control_slot` arm). Stage 1 GREEN 전환 + +신규 필드 무손실 단언 추가 + baseline 회귀 0 확인. diff --git a/src/model/control.rs b/src/model/control.rs index ac4c2c52f..bfa9b0e45 100644 --- a/src/model/control.rs +++ b/src/model/control.rs @@ -163,10 +163,21 @@ pub struct Hyperlink { /// 덧말 ('tdut' 컨트롤) #[derive(Debug, Clone, Default)] pub struct Ruby { - /// 덧말 텍스트 + /// 기준 텍스트 (``) — 덧말이 달리는 본문 글자. (#1587) + /// 파서가 para.text 에 넣지 않고 여기 보존한다(시각 충실도 핵심). + pub main_text: String, + /// 덧말 텍스트 (``) pub ruby_text: String, - /// 정렬 방식 - pub alignment: u8, + /// 위치 (`posType`): 0=TOP, 1=BOTTOM. (#1587) + pub pos_type: u8, + /// 정렬 (`align`): 0=LEFT, 1=RIGHT, 2=CENTER. (#1587) + pub align: u8, + /// 덧말 크기 비율 (`szRatio`, %). (#1587) + pub sz_ratio: u8, + /// 옵션 비트 (`option`). (#1587) + pub option: u32, + /// 글자 스타일 참조 (`styleIDRef`). (#1587) + pub style_id_ref: u16, } /// 글자 겹침 ('tcps' 컨트롤, HWP 스펙 표 152) diff --git a/src/parser/hwpx/section.rs b/src/parser/hwpx/section.rs index 103216403..e40695b2e 100644 --- a/src/parser/hwpx/section.rs +++ b/src/parser/hwpx/section.rs @@ -4907,28 +4907,37 @@ fn parse_dutmal( reader: &mut Reader<&[u8]>, ) -> Result { let mut ruby = Ruby::default(); - // 요소 속성 + // 요소 속성 (#1587 — posType/align 분리 보존 + szRatio/option/styleIDRef) for attr in e.attributes().flatten() { match attr.key.as_ref() { b"posType" => { - ruby.alignment = match attr_str(&attr).as_str() { + ruby.pos_type = match attr_str(&attr).as_str() { "TOP" => 0, "BOTTOM" => 1, _ => 0, }; } b"align" => { - ruby.alignment = match attr_str(&attr).as_str() { + ruby.align = match attr_str(&attr).as_str() { "LEFT" => 0, "RIGHT" => 1, "CENTER" => 2, _ => 0, }; } + b"szRatio" => { + ruby.sz_ratio = attr_str(&attr).parse().unwrap_or(0); + } + b"option" => { + ruby.option = attr_str(&attr).parse().unwrap_or(0); + } + b"styleIDRef" => { + ruby.style_id_ref = attr_str(&attr).parse().unwrap_or(0); + } _ => {} } } - // 자식 요소 파싱 (subText) + // 자식 요소 파싱 (mainText 기준 텍스트 + subText 덧말) let mut buf = Vec::new(); loop { match reader.read_event_into(&mut buf) { @@ -4938,8 +4947,9 @@ fn parse_dutmal( if local == b"subText" { ruby.ruby_text = read_dutmal_text(reader, b"subText")?; } else if local == b"mainText" { - // mainText는 이미 문단 텍스트에 포함되므로 스킵 - skip_element(reader, b"mainText")?; + // [#1587] mainText(기준 텍스트)는 para.text 에 포함되지 않으므로 + // 모델에 보존한다(종전 skip → 손실 → 직렬화 시 복원 불가였음). + ruby.main_text = read_dutmal_text(reader, b"mainText")?; } else { let tag = local.to_vec(); skip_element(reader, &tag)?; From c3d09b0c4c79adb8fa9830bc9eae3aab8e61b7a9 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 13:26:18 +0900 Subject: [PATCH 06/35] =?UTF-8?q?Task=20#1587:=20Ruby=20=EC=A7=81=EB=A0=AC?= =?UTF-8?q?=ED=99=94=20(write=5Fruby=20+=20arm)=20(Stage=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit render_dutmal( 역매핑) + render_control_slot 에 Control::Ruby arm 추가. RED 테스트 GREEN(전 필드 무손실), lib 1961/0, baseline 4/4, clippy 무경고. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/working/task_m100_1587_stage3.md | 28 ++++++++++++++++++++++++ src/serializer/hwpx/mod.rs | 17 +++++++++++++-- src/serializer/hwpx/section.rs | 29 ++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 mydocs/working/task_m100_1587_stage3.md diff --git a/mydocs/working/task_m100_1587_stage3.md b/mydocs/working/task_m100_1587_stage3.md new file mode 100644 index 000000000..1ab6ce392 --- /dev/null +++ b/mydocs/working/task_m100_1587_stage3.md @@ -0,0 +1,28 @@ +# Task #1587 — Stage 3 완료보고서 + +**단계**: 직렬화기 (write_ruby + arm) +**브랜치**: `local/task1587` + +## 변경 내용 + +| # | 파일 | 변경 | +|---|------|------| +| C3a | `serializer/hwpx/section.rs` | `render_dutmal(r: &Ruby)` 추가 — `` 역매핑(속성 순서 posType/szRatio/option/styleIDRef/align + mainText/subText) | +| C3b | `serializer/hwpx/section.rs` | `render_control_slot` 에 `Control::Ruby(r) => render_dutmal(r)` arm 추가 | +| — | import | `Ruby` 타입 use 추가 | + +Ruby 는 이미 `is_hwpx_inline_slot` 포함 → 슬롯 위치 자동, arm 추가만으로 방출. + +## 검증 (모두 GREEN) + +| 검사 | 결과 | +|------|------| +| `task1587_ruby_control_roundtrips` (전 필드 무손실) | **PASS** — main_text/ruby_text/pos_type/align/sz_ratio/option/style_id_ref 보존 | +| `cargo test --lib` 전체 | **1961 passed, 0 failed** | +| `hwpx_roundtrip_baseline` | **4/4 PASS** | +| `cargo clippy --lib` (변경 파일) | 무경고 | + +## 다음 단계 + +Stage 4 — fidelity 전수 통제 비교: 3건(36384160·36399208·36389301) 해소 + 악화 0 + +순효과>0 확인, opengov 가드 편입. diff --git a/src/serializer/hwpx/mod.rs b/src/serializer/hwpx/mod.rs index 052a358c1..c46259ed7 100644 --- a/src/serializer/hwpx/mod.rs +++ b/src/serializer/hwpx/mod.rs @@ -480,8 +480,13 @@ mod tests { para.char_offsets = vec![0, 9]; para.char_count = 11; // (11-1-2)/8 = 1 슬롯 para.controls.push(Control::Ruby(Ruby { + main_text: "기준글".to_string(), ruby_text: "덧말".to_string(), - ..Default::default() + pos_type: 1, // BOTTOM + align: 2, // CENTER + sz_ratio: 80, + option: 3, + style_id_ref: 5, })); section.paragraphs.push(para); doc.sections.push(section); @@ -502,7 +507,15 @@ mod tests { "Ruby 컨트롤이 roundtrip 후 보존돼야 한다 (현재 드롭): {:?}", doc2.sections[0].paragraphs[0].controls ); - assert_eq!(rubies[0].ruby_text, "덧말", "덧말(subText) 텍스트 보존"); + let r = rubies[0]; + // 전 필드 무손실 (#1587 — mainText/posType/align/szRatio/option/styleIDRef) + assert_eq!(r.main_text, "기준글", "mainText 보존"); + assert_eq!(r.ruby_text, "덧말", "subText(덧말) 보존"); + assert_eq!(r.pos_type, 1, "posType(BOTTOM) 보존"); + assert_eq!(r.align, 2, "align(CENTER) 보존"); + assert_eq!(r.sz_ratio, 80, "szRatio 보존"); + assert_eq!(r.option, 3, "option 보존"); + assert_eq!(r.style_id_ref, 5, "styleIDRef 보존"); } #[test] diff --git a/src/serializer/hwpx/section.rs b/src/serializer/hwpx/section.rs index efcda1e72..008cdd898 100644 --- a/src/serializer/hwpx/section.rs +++ b/src/serializer/hwpx/section.rs @@ -23,7 +23,7 @@ use quick_xml::Writer; use crate::model::control::{ AutoNumber, AutoNumberType, CharOverlap, Control, Equation, Field, NewNumber, PageHide, - PageNumberPos, + PageNumberPos, Ruby, }; use crate::model::document::{Document, Section}; use crate::model::footnote::{Endnote, Footnote}; @@ -850,6 +850,9 @@ fn render_control_slot(out: &mut String, control: &Control, ctx: &mut SerializeC Err(e) => eprintln!("[hwpx] Form 직렬화 실패: {e}"), }, Control::CharOverlap(co) => out.push_str(&render_compose(co)), + // [Task #1587] 덧말(Ruby) 인라인 방출. is_hwpx_inline_slot 에 등록돼 슬롯 위치는 + // 자동이나 종전 방출 arm 부재로 드롭됐다. parse_dutmal 의 역매핑. + Control::Ruby(r) => out.push_str(&render_dutmal(r)), // [Task #1379/#1584] 인라인 colPr 방출. // - subList(depth>0): 전부 인라인 방출(원본 XML 인라인 존재). // - 본문(depth 0): 첫 문단의 첫 ColumnDef 1개는 섹션 템플릿 colPr 앵커가 이미 @@ -866,6 +869,30 @@ fn render_control_slot(out: &mut String, control: &Control, ctx: &mut SerializeC } } +/// 덧말(Ruby) `` 직렬화 (#1587). `parse_dutmal` 의 역매핑. +/// 속성 순서는 한컴 실측(posType szRatio option styleIDRef align)을 따른다. +fn render_dutmal(r: &Ruby) -> String { + let pos_type = match r.pos_type { + 1 => "BOTTOM", + _ => "TOP", + }; + let align = match r.align { + 1 => "RIGHT", + 2 => "CENTER", + _ => "LEFT", + }; + format!( + r#"{}{}"#, + pos_type, + r.sz_ratio, + r.option, + r.style_id_ref, + align, + xml_escape(&r.main_text), + xml_escape(&r.ruby_text), + ) +} + fn generated_field_parameters(field: &Field) -> Option { if field.command.is_empty() || field.raw_parameters_xml.is_some() { return None; From 6747209ae67bd0f02709efc6f2a4b2329cd26d1b Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 13:34:57 +0900 Subject: [PATCH 07/35] =?UTF-8?q?Task=20#1587:=20=ED=86=B5=EC=A0=9C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20=EA=B2=80=EC=A6=9D=20+=20=ED=9A=8C?= =?UTF-8?q?=EA=B7=80=20=EA=B0=80=EB=93=9C=20=EC=98=81=EC=86=8D=ED=99=94=20?= =?UTF-8?q?(Stage=204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fidelity 통제 비교: 개선 3(ruby 3건) / 회귀 0 / 순효과 +3 (IR_DIFF 10->7). Hangul 오라클 2건 시각 정상. 대표 36389301 을 opengov 가드 편입(snapshot PASS). 부수 발견: 36384160 페이지 붕괴(IR diff=0, ruby 무관 선존)는 #1589 분리 등록. closes #1587 Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/report/task_m100_1587_report.md | 57 ++++++++++++++++++ mydocs/working/task_m100_1587_stage4.md | 51 ++++++++++++++++ ...355\232\215_\353\215\247\353\247\220.hwpx" | Bin 0 -> 42208 bytes tests/fixtures/opengov_snapshot.tsv | 1 + 4 files changed, 109 insertions(+) create mode 100644 mydocs/report/task_m100_1587_report.md create mode 100644 mydocs/working/task_m100_1587_stage4.md create mode 100644 "samples/hwpx/opengov/36389301_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\247\201\354\236\245\355\233\210\353\240\250\352\263\204\355\232\215_\353\215\247\353\247\220.hwpx" diff --git a/mydocs/report/task_m100_1587_report.md b/mydocs/report/task_m100_1587_report.md new file mode 100644 index 000000000..5faa041ee --- /dev/null +++ b/mydocs/report/task_m100_1587_report.md @@ -0,0 +1,57 @@ +# Task #1587 — 최종 결과보고서 + +**제목**: HWPX 저장 시 Ruby(덧말) 컨트롤 드롭 수정 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1587 · **브랜치**: `local/task1587` + +--- + +## 1. 문제 + +HWPX 저장 시 본문/표셀의 Ruby(덧말, 한자 독음·위첨자) 컨트롤이 드롭. fidelity 잔여 +IR_DIFF 10건 중 3건(36384160·36389301·36399208), **유일하게 시각 영향 있는 실버그**. + +## 2. 근본원인 (2계층) + +1. **즉시**: `render_control_slot`(serializer/hwpx/section.rs)에 `Control::Ruby` arm 부재 → + `is_hwpx_inline_slot` 에는 등록(슬롯 인식)됐으나 방출되지 않아 드롭. (ColumnDef #1584 동형.) +2. **심층(그라운딩 발견)**: `Ruby` 모델이 손실 구조 — `mainText`(기준 텍스트) 미보존, + `posType`/`align` 을 u8 1개로 병합, `szRatio`/`option`/`styleIDRef` 드롭. 단순 arm 추가만으로는 + 무손실 불가 → 모델+파서+직렬화기 3계층 수정. + +## 3. 해결 + +| 계층 | 파일 | 변경 | +|------|------|------| +| 모델 | `model/control.rs` Ruby | `alignment` 제거 → `main_text`/`pos_type`/`align`/`sz_ratio`/`option`/`style_id_ref` | +| 파서 | `parser/hwpx/section.rs` parse_dutmal | mainText 보존 + posType/align 분리 + szRatio/option/styleIDRef 파싱 | +| 직렬화 | `serializer/hwpx/section.rs` | `render_dutmal`(`` 역매핑) + `Control::Ruby` arm | + +- `alignment` 제거 외부 파급 0(parse_dutmal 한정 — main.rs 는 ruby_text 만, HWP5 는 ruby 미지원). + +## 4. 검증 + +| 검사 | 결과 | +|------|------| +| 단위 RED→GREEN (전 필드 무손실) | PASS | +| `cargo test --lib` | 1961 passed, 0 failed | +| `hwpx_roundtrip_baseline` | 4/4 | +| opengov snapshot (36389301 가드) | PASS | +| **fidelity 통제 비교** | **개선 3 / 회귀 0 / 순효과 +3** (IR_DIFF 10→7) | +| Hangul 오라클 | 2건 OK(시각 정상) + 1건 별개 선존 붕괴(#1589) | + +## 5. 부수 발견 — 36384160 페이지 붕괴 (#1589) + +36384160 은 ruby 수정으로 IR PASS 가 됐으나 한글에서 29→3쪽 붕괴(IR 게이트 미검출). +**ruby 수정 전후 동일** → 선존 시각 버그로 확정, 이슈 #1589 분리 등록. 본 타스크 무관. + +## 6. 산출물 + +- 소스: control.rs, parser/hwpx/section.rs, serializer/hwpx/section.rs +- 테스트: `task1587_ruby_control_roundtrips` + `samples/hwpx/opengov/36389301…` 가드 +- 문서: 수행/구현 계획서, `_stage1~4`, 본 보고서, 잔존 분석(`tech/hwpx_residual_ir_diff_10.md`) + +## 7. 후속 + +- #1588 선 도형 shapeComment 드롭(Class B) — 1줄 수정 대기. +- #1589 페이지 붕괴(시각 갭) — 오라클 전수 군집 조사 필요. +- 잔여 IR_DIFF 7건: char_shape 시프트(para0) + spurious(0,0) 등(별건). diff --git a/mydocs/working/task_m100_1587_stage4.md b/mydocs/working/task_m100_1587_stage4.md new file mode 100644 index 000000000..15484a959 --- /dev/null +++ b/mydocs/working/task_m100_1587_stage4.md @@ -0,0 +1,51 @@ +# Task #1587 — Stage 4 완료보고서 + +**단계**: 통제 비교 검증 (채택 게이트) +**브랜치**: `local/task1587` +**바이너리**: `local/task1587` HEAD (c3d09b0c 위 빌드) + +## 1. fidelity 전수 통제 비교 + +| 항목 | Ruby 전 (fidelity10) | Ruby 후 (fidelity11) | +|------|------:|------:| +| 총 파일 | 9660 | 10062 (수집 진행) | +| IR_DIFF | 10 | **7** | +| PARSE_FAIL | 12 | 12 (손상, 불변) | + +**공통 9553건 per-file 통제 비교**: + +| 분류 | 건수 | +|------|----:| +| 개선 (IR_DIFF→PASS) | **3** (36384160·36389301·36399208 = ruby 3건) | +| **회귀 (PASS→IR_DIFF)** | **0** | +| 신규 파일(399) 중 IR_DIFF | 0 | +| **순효과** | **+3** | + +→ 채택 게이트 충족: **순효과 +3 > 0, 악화 0**. + +## 2. Hangul 페이지 오라클 (시각 검증) + +``` +36389301 (ruby+char_shape) pg 2->2 OK +36399208 (ruby) pg 9->9 OK +36384160 pg 29->3 COLLAPSE ← 별개 선존 버그(아래) +``` + +- 2건 시각 정상. char_shape −8 시프트 하위 증상도 해소(36389301). + +## 3. 별개 발견 — 36384160 페이지 붕괴 (#1589 신규 등록) + +- 36384160 은 ruby 수정으로 **IR diff=0(PASS)** 가 됐으나, 한글에서 29→3쪽 붕괴. +- **ruby 수정 전(fidelity10 rt)에도 동일 붕괴** → ruby 무관 **선존 시각 버그**. + IR 무손실인데 시각 붕괴(IR 게이트 미검출, 오라클만 검출) → **이슈 #1589** 로 분리 등록. +- 본 타스크(#1587) 범위 밖. ruby 수정의 회귀가 **아님**을 fidelity10/11 rt 양쪽 오라클로 확정. + +## 4. 회귀 가드 영속화 + +- 단위: `task1587_ruby_control_roundtrips` (전 필드 무손실, Stage 1·3). +- 통합: `36389301`(오라클 정상·ruby+char_shape) opengov 고정 말뭉치 편입 + snapshot PASS. + +## 5. 결론 + +Ruby(덧말) 드롭 결함 해소(개선 3, IR회귀 0, 시각 정상 2). 채택. 36384160 페이지 붕괴는 +별개 선존 시각 갭으로 #1589 분리. diff --git "a/samples/hwpx/opengov/36389301_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\247\201\354\236\245\355\233\210\353\240\250\352\263\204\355\232\215_\353\215\247\353\247\220.hwpx" "b/samples/hwpx/opengov/36389301_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\247\201\354\236\245\355\233\210\353\240\250\352\263\204\355\232\215_\353\215\247\353\247\220.hwpx" new file mode 100644 index 0000000000000000000000000000000000000000..ee05b3a1782282e6e47b746dec2fb427a1ebbfcc GIT binary patch literal 42208 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 a!}$AHQIUs(|9u(? Date: Sat, 27 Jun 2026 13:56:16 +0900 Subject: [PATCH 08/35] =?UTF-8?q?Task=20#1588:=20=EC=84=A0=20=EB=8F=84?= =?UTF-8?q?=ED=98=95=20shapeComment=20=EB=93=9C=EB=A1=AD=20=EC=9E=AC?= =?UTF-8?q?=ED=98=84=20(RED)=20+=20=EA=B3=84=ED=9A=8D=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit write_line 이 write_shape_comment 미호출로 선 도형 설명("선입니다.")을 드롭하는 버그를 단위 테스트로 재현. 현재 shapeComment 미방출. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/plans/task_m100_1588.md | 45 +++++++++++++++++++++++++ mydocs/working/task_m100_1588_stage1.md | 23 +++++++++++++ src/serializer/hwpx/shape.rs | 21 ++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 mydocs/plans/task_m100_1588.md create mode 100644 mydocs/working/task_m100_1588_stage1.md diff --git a/mydocs/plans/task_m100_1588.md b/mydocs/plans/task_m100_1588.md new file mode 100644 index 000000000..d303ef2df --- /dev/null +++ b/mydocs/plans/task_m100_1588.md @@ -0,0 +1,45 @@ +# 수행계획서 — Task #1588 + +**제목**: HWPX 저장 시 선 도형(`hp:line`) shapeComment 드롭 수정 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1588 · **브랜치**: `local/task1588` + +--- + +## 1. 배경 + +fidelity11 잔여 IR_DIFF 중 3건(36389418·36392900·36391302)에서 선 도형 설명 +(`shapeComment`, "선입니다.")이 저장 시 드롭. 잔여 분석 Class B. + +## 2. 근본원인 (`src/serializer/hwpx/shape.rs`) + +- `write_shape_comment(w, c)`(line 852)는 `c.description` 비어있지 않으면 `` + 방출. +- `write_rect`(line 110)·`write_container_close`(line 235)는 호출하나, **`write_line`(line 121)은 + caption 까지만 방출하고 `write_shape_comment` 미호출** → 선 도형 설명 드롭. +- 파서는 정상(원본 파싱 시 description="선입니다." 캡처 — IR_DIFF 의 expected 값이 증거). + **순수 직렬화기 누락 1줄**. + +## 3. 수정 방향 + +`write_line` 의 caption 방출 직후(end_tag 직전) `write_shape_comment(w, c)?;` 1줄 추가. +OWPML AbstractShapeObjectType 순서(outMargin → caption → shapeComment, write_rect 동형) 준수. + +## 4. 회귀 위험 & 채택 기준 + +극히 낮음(기존 헬퍼 재사용, 선 도형 한정). 그래도 통제 비교로 확인. + +수용 기준: +1. 3건(36389418·36392900·36391302) roundtrip IR diff = 0(shapeComment 보존). +2. `cargo test --lib` + `hwpx_roundtrip_baseline` 회귀 0. +3. fidelity 통제 비교 순효과 > 0, 악화 0. + +## 5. 구현 단계 (3단계) + +- **Stage 1 — RED**: 선 도형 description 포함 도형 roundtrip 단위 테스트(현재 드롭 → RED). +- **Stage 2 — 수정**: `write_line` 에 `write_shape_comment` 1줄 추가. Stage1 GREEN + baseline 회귀 0. +- **Stage 3 — 통제 비교**: fidelity 전수 재측정, 3건 해소 + 악화 0 확인, opengov 가드 편입. + +## 6. 산출물 +- 소스: `src/serializer/hwpx/shape.rs` +- 테스트: 신규 단위 + opengov 가드 +- 문서: `_impl`, `_stage1~3`, `_report` diff --git a/mydocs/working/task_m100_1588_stage1.md b/mydocs/working/task_m100_1588_stage1.md new file mode 100644 index 000000000..6a655ea4b --- /dev/null +++ b/mydocs/working/task_m100_1588_stage1.md @@ -0,0 +1,23 @@ +# Task #1588 — Stage 1 완료보고서 + +**단계**: 선 도형 shapeComment 드롭 재현 (RED) +**브랜치**: `local/task1588` + +## 작업 내용 + +`src/serializer/hwpx/shape.rs` 테스트 모듈에 가드 2건 추가: +- `task1588_line_shape_comment_emitted`: description 있는 선 도형 → `` 방출 검증. +- `task1588_line_shape_no_comment_when_empty`: 빈 설명 → 미방출 검증(빈 태그 금지). + +## 결과 (RED 확인) + +``` +task1588_line_shape_comment_emitted ... FAILED (shapeComment 미방출 — 드롭) +task1588_line_shape_no_comment_when_empty ... ok +``` + +- 선 도형 XML 에 `` 없음 → 근본원인(write_line 의 write_shape_comment 누락) 일치. + +## 다음 단계 + +Stage 2 — `write_line` 에 `write_shape_comment(w, c)?;` 1줄 추가로 GREEN. diff --git a/src/serializer/hwpx/shape.rs b/src/serializer/hwpx/shape.rs index be1751f6a..c64b4ea78 100644 --- a/src/serializer/hwpx/shape.rs +++ b/src/serializer/hwpx/shape.rs @@ -1057,6 +1057,27 @@ mod tests { assert_eq!(line_shape_style(none_with_flat_end_cap), "NONE"); } + /// #1588: 선 도형 설명(shapeComment)이 저장 시 방출돼야 한다. + /// write_rect/container 는 호출하나 write_line 만 누락 → 드롭(RED). + #[test] + fn task1588_line_shape_comment_emitted() { + let mut line = LineShape::default(); + line.common.description = "선입니다.".to_string(); + let xml = serialize_line(&line); + assert!( + xml.contains("선입니다."), + "선 도형 shapeComment 방출돼야 한다 (현재 드롭): {xml}" + ); + } + + /// #1588: 설명 없는 선 도형은 shapeComment 미방출 (빈 태그 금지). + #[test] + fn task1588_line_shape_no_comment_when_empty() { + let line = LineShape::default(); + let xml = serialize_line(&line); + assert!(!xml.contains(" crate::model::paragraph::CharShapeRef { crate::model::paragraph::CharShapeRef { start_pos, From f3f2dc0af6a6edb2a9911baf2397607069d654f8 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 13:59:44 +0900 Subject: [PATCH 09/35] =?UTF-8?q?Task=20#1588:=20=EC=84=A0=20=EB=8F=84?= =?UTF-8?q?=ED=98=95=20shapeComment=20=EB=B0=A9=EC=B6=9C=20(Stage=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit write_line 의 caption 직후 write_shape_comment 1줄 추가(write_rect 동형). RED 테스트 2건 GREEN, lib 1963/0, baseline 4/4, clippy 무경고. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/working/task_m100_1588_stage2.md | 23 +++++++++++++++++++++++ src/serializer/hwpx/shape.rs | 3 +++ 2 files changed, 26 insertions(+) create mode 100644 mydocs/working/task_m100_1588_stage2.md diff --git a/mydocs/working/task_m100_1588_stage2.md b/mydocs/working/task_m100_1588_stage2.md new file mode 100644 index 000000000..0e2aa49f0 --- /dev/null +++ b/mydocs/working/task_m100_1588_stage2.md @@ -0,0 +1,23 @@ +# Task #1588 — Stage 2 완료보고서 + +**단계**: 수정 (write_line 에 shapeComment 방출) +**브랜치**: `local/task1588` + +## 변경 내용 + +`src/serializer/hwpx/shape.rs` `write_line`: caption 방출 직후 `write_shape_comment(w, c)?;` +1줄 추가 (OWPML 순서 outMargin→caption→shapeComment, write_rect 동형). + +## 검증 (모두 GREEN) + +| 검사 | 결과 | +|------|------| +| `task1588_line_shape_comment_emitted` | PASS | +| `task1588_line_shape_no_comment_when_empty` | PASS | +| `cargo test --lib` | 1963 passed, 0 failed | +| `hwpx_roundtrip_baseline` | 4/4 | +| `cargo clippy --lib` (shape.rs) | 무경고 | + +## 다음 단계 + +Stage 3 — fidelity 전수 통제 비교(3건 해소 + 악화 0) + opengov 가드 편입. diff --git a/src/serializer/hwpx/shape.rs b/src/serializer/hwpx/shape.rs index c64b4ea78..6c57f6f38 100644 --- a/src/serializer/hwpx/shape.rs +++ b/src/serializer/hwpx/shape.rs @@ -163,6 +163,9 @@ pub fn write_line( if let Some(cap) = &line.drawing.caption { write_caption(w, cap, ctx)?; } + // [#1588] 도형 설명 — caption 뒤 (write_rect/container 와 동형). 누락 시 선 도형 + // shapeComment("선입니다." 등)가 저장 시 드롭됐다. + write_shape_comment(w, c)?; end_tag(w, "hp:line")?; Ok(()) From 4c47008bbfce15897829054848aa7b0473b98af9 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 14:09:45 +0900 Subject: [PATCH 10/35] =?UTF-8?q?Task=20#1588:=20=ED=86=B5=EC=A0=9C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20=EA=B2=80=EC=A6=9D=20+=20=ED=9A=8C?= =?UTF-8?q?=EA=B7=80=20=EA=B0=80=EB=93=9C=20(Stage=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fidelity 통제 비교: 개선 3(선 도형 shapeComment 3건)/회귀 0/순효과 +3 (IR_DIFF 7->4). 36392900 opengov 가드 편입(snapshot PASS). Ruby/shapeComment 클래스 완전 해소. closes #1588 Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/report/task_m100_1588_report.md | 45 ++++++++++++++++++ mydocs/working/task_m100_1588_stage3.md | 38 +++++++++++++++ ...\355\231\251\353\263\264\352\263\240.hwpx" | Bin 0 -> 450391 bytes tests/fixtures/opengov_snapshot.tsv | 1 + 4 files changed, 84 insertions(+) create mode 100644 mydocs/report/task_m100_1588_report.md create mode 100644 mydocs/working/task_m100_1588_stage3.md create mode 100644 "samples/hwpx/opengov/36392900_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\235\274\354\235\274\352\265\264\354\260\251\353\263\265\352\265\254\352\263\265\354\202\254\355\230\204\355\231\251\353\263\264\352\263\240.hwpx" diff --git a/mydocs/report/task_m100_1588_report.md b/mydocs/report/task_m100_1588_report.md new file mode 100644 index 000000000..22bbe02e4 --- /dev/null +++ b/mydocs/report/task_m100_1588_report.md @@ -0,0 +1,45 @@ +# Task #1588 — 최종 결과보고서 + +**제목**: HWPX 저장 시 선 도형(`hp:line`) shapeComment 드롭 수정 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1588 · **브랜치**: `local/task1588` + +--- + +## 1. 문제 + +HWPX 저장 시 선 도형의 설명(`shapeComment`, "선입니다.")이 드롭. fidelity 잔여 IR_DIFF +Class B 3건(36389418·36392900·36391302). + +## 2. 근본원인 (`src/serializer/hwpx/shape.rs`) + +`write_shape_comment(c)` 는 `c.description` 비어있지 않으면 `` 방출. +`write_rect`·`write_container_close` 는 호출하나 **`write_line` 만 미호출** → 선 도형 설명 드롭. +파서는 정상(원본 파싱이 description 캡처 — IR_DIFF expected 값이 증거). 순수 직렬화기 1줄 누락. + +## 3. 해결 + +`write_line` 의 caption 방출 직후 `write_shape_comment(w, c)?;` 1줄 추가 +(OWPML 순서 outMargin→caption→shapeComment, write_rect 동형). + +## 4. 검증 + +| 검사 | 결과 | +|------|------| +| 단위 RED→GREEN (방출 + 빈설명 미방출) | PASS | +| `cargo test --lib` | 1963 passed, 0 failed | +| `hwpx_roundtrip_baseline` | 4/4 | +| opengov snapshot (36392900 가드) | PASS | +| **fidelity 통제 비교** | **개선 3 / 회귀 0 / 순효과 +3** (IR_DIFF 7→4) | + +## 5. 산출물 + +- 소스: `src/serializer/hwpx/shape.rs` +- 테스트: `task1588_line_shape_comment_emitted` 외 1 + `samples/hwpx/opengov/36392900…` 가드 +- 문서: 수행계획서, `_stage1~3`, 본 보고서 + +## 6. 후속 (잔존 IR_DIFF 4건) + +- Class C — para0 char_shape 시프트 3건(36384689·36385445·36388711): secPr/colPr run charPr + 경계 오정렬, dedicated 조사 필요. +- Class D — spurious (0,0) 1건(36386761): 빈/공백 문단 기본 char_shape. +- 별도 — #1589 페이지 붕괴(시각 갭, 오라클 전수 군집 조사). diff --git a/mydocs/working/task_m100_1588_stage3.md b/mydocs/working/task_m100_1588_stage3.md new file mode 100644 index 000000000..72701d730 --- /dev/null +++ b/mydocs/working/task_m100_1588_stage3.md @@ -0,0 +1,38 @@ +# Task #1588 — Stage 3 완료보고서 + +**단계**: 통제 비교 검증 (채택 게이트) +**브랜치**: `local/task1588` +**바이너리**: `local/task1588` HEAD (f3f2dc0a 위 빌드) + +## 1. fidelity 전수 통제 비교 + +| 항목 | shapeComment 전 (fidelity11) | 후 (fidelity12) | +|------|------:|------:| +| 총 파일 | 10062 | 10261 (수집 진행) | +| IR_DIFF | 7 | **4** | + +**공통 9952건 per-file 통제 비교**: + +| 분류 | 건수 | +|------|----:| +| 개선 (IR_DIFF→PASS) | **3** (36389418·36391302·36392900 = 선 도형 shapeComment 3건) | +| **회귀 (PASS→IR_DIFF)** | **0** | +| 신규 파일(198) 중 IR_DIFF | 0 | +| **순효과** | **+3** | + +→ 채택 게이트 충족: **순효과 +3 > 0, 악화 0**. + +잔존 4건 = 36384689·36385445·36388711(Class C, para0 char_shape 시프트) + +36386761(Class D, spurious 0,0). Ruby·shapeComment 클래스 완전 해소. + +## 2. 회귀 가드 영속화 + +- 단위: `task1588_line_shape_comment_emitted` / `task1588_line_shape_no_comment_when_empty`. +- 통합: `36392900` opengov 고정 말뭉치 편입 + snapshot PASS. + +> Hangul 오라클: shapeComment 3건 모두 한글 COM 열기 ERR(COLLAPSE 아님) — 해당 파일군의 +> 도구측 열기 이슈. shapeComment 는 **비시각 메타데이터**이고 IR diff=0 검증 완료라 채택 무영향. + +## 3. 결론 + +선 도형 shapeComment 드롭 해소(개선 3, 회귀 0). 채택. 잔존 IR_DIFF 4건은 Class C/D 별건. diff --git "a/samples/hwpx/opengov/36392900_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\235\274\354\235\274\352\265\264\354\260\251\353\263\265\352\265\254\352\263\265\354\202\254\355\230\204\355\231\251\353\263\264\352\263\240.hwpx" "b/samples/hwpx/opengov/36392900_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\354\235\274\354\235\274\352\265\264\354\260\251\353\263\265\352\265\254\352\263\265\354\202\254\355\230\204\355\231\251\353\263\264\352\263\240.hwpx" new file mode 100644 index 0000000000000000000000000000000000000000..b8737b1b38dc1bb72163866a92e5eab459d3cc4e GIT binary patch literal 450391 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%0DuV^X{t>bG$fP9VK#U6!JADrrUh6%Q@EXdA z4g>;WUX$i^n3p^pdYsV?!YviRjd<@J94_T7gos8s-fx>n>xYk`@+*&G`M>@qs=xFE z+MhX%XsQE~bzw{v0*?i>UI!vB$pI*{$|RNxV|i<2^Q^@8+AfF%Kyal==Tc*0SVZE6 zBrK|PYeXa-60G{%qK?VWVjcyJHo>J{TWQ_|nm1-%J-=CIFSH(2a=?MU%&q1p8AbdL=a=zo#~1N$&y;cBaubJ| zJ|TV@N(bxC)v=er@iRkt{P>+4@k94)#m(EtFg8rkmdm8R zLmQ(usy;{0WO3C;Ord>7fAq7RShQ-L!&4b`_}v*eV1ifZ>x_h6-0fd z>t>MS!n_v*>;s?8k}EC#uH{pmYCF|Wr+|jCU8|0jr_F8JjOV2`7?LM1cqC~%9L_Nb z4XDdVn?}M#u7e(EWBPHY(a{ltt}NEtjn?P0H>t|6%M@M0^Ujg-esW?~p^4em? z7&xw*)*I{G8n5x!`yzsn3l*QhO&4mbtIJqeoJX}%O~;Rd!$Kj4TrLamVt_~Wr)BXD zli<657VC{@??;+TINPWq8{5cddjyK}2pL^8g&M@|LKwZmWujGYCIT@^irGdR3Adj}y-$>$ppWww&GBl1{AiSJ`) z3a|zM0$!wP&F<67%e?5gi>cTsGU+#^d)x-^g%QHfdHz7f2-9(y;eh~-9>zniwPor80bk<^samU2jt&QlAjegb4ghruHV39L7AzxB zusAT8U~&(z?pDFrZbAQ)L2gjs<^anDWdUg4Yn0%+CLy#=GV zzjdLC|LM#M{xl z5E%aacprXk%Lx9}rXl>uXc2q4EjZ%Z$XF)T15E&`6D_Me@L{^4G$0}nN)&UP>JLy) zUzo%G14nS?+zh(i9yGGHw6w&@%E#b9iKHOOU7JW*mPMg`tmoI0J~sNoj`#ft^+p%H z`9F6601yC4L_t)?&o1FR&rjpA6LX6ckd&7LgCafNa4*I> z0>*7~ZQMaW{e>OF`0hfKBTM&{xXB^&Eh8sn1bT--WA8T3-F4-wV)ewo$7! z(CKzz6TI~G4Pt0$7;9jW^fTBpm!7|qv+{KqJ+kNz$N;H}e|H zf}vaygAHNOTdRtFuy%1ZuL&&j)Hz2W@ELJaE+PWHO`n0O!yT%C^@$k1yShW|BjC38 z$jC50|NWoCKl}$ji(mYOpTj@;N56=F@=yLTe)*Sw5x?*ce-6L&OaB1(e)cn57?HHHw43n4vr_gEtOT zUn10xGP?>A@Q>v!W5Hthui2^NWaTW*`4`a2F9JiPLKR7tBhzIcTMFR$d# zti(1LBxu~asGt#VQapi(g;;VZcZxVR<6^O1fa4LE!NW@3!}%2tYy-fj9$b z_$8d4H(01<(2fRBZkKR&!Ntj03#Vo!rIRx}&j52}3r*jnP8@*!fp?H%0!N?94K%_? zuo%YxkCcP(RsB&INeV1|0>xhX&1wS$mNCo5U@q+-=6&^Hzz6llGV0A0=vZ?c2ae;y zVnh*45dn|k1CQGxE)7|)c{@EU4rGt3K$|PD^v0`R)cBP|1R|0?QO6c=wb4+zmLOY9Ftjel#O?$WHwi|z2?o{+3L^rqB(S&@tqO=E zAO(yGu6r`%=&&6Q1*MOM{$TaVRu7LcviQfd75ty)R`Ki8tI&V{_b~4rYx$@X6>0t~ z+n{B60-Ko<*}boin9>JSx{}RCO=c|ITFT%@#)|mI8wT*J8;9}p>-+KjBL(a!c+k%_ zhE$w>)={^xd5L$Sn{d6--)24{0z-;9_8YA>W@hKpe-C)*$Z<^1%%Ra}LVw6V;DXO% z)VQyhM}J>|6P5=}3a<40dZL-YvJA(x;lv-JT5Vx|v4#`VD|r6w3SKC;@dE370uc^- z2D4ckD<(!g4C%-cWawv#^h-l@XdCJ5_67!bCKf*3m&1=Rs`&X^r*Owj>#$+t5K8?y zfPPEA$*ew1eG%Sa5>bi4#d6HaC0GN??JnEi*aew+FlWX$7ol?zU#C*sT|iLR!oN>BFGmQ zG2*%1>EabTqaSizmwI;z=9}!NF0R$dY8#a2`t|Ga(R=R3X9*BL@$rxG`Xl(nCq9PH zeCAWQN%Jc4@`?|k(k!vy7#ALis0S;}c^s}D!sE>s@Nn;CJfECE#Uob8w-9EUi0vNK zkqbcy-UML0UFBLtX|M%sUQRGtM;fdo*1>m^&J+pt>>`#tYAp*F7Q3i6Ef}W+FpAjm zZB%LzR_g|>un&>dhi1>l{Az&d#gJq$z3lQVxUkT};;N5MkNqYNlGpY4ovJEYcC?=okwrd7cLmd8N1-rW&=LFWnT8G>-_YOA_)8$hQZL zDt5UtSJ0^2(Ggdo%mHCR%h+&j53ZGAgKRn+Am1NjXk&u0ounPW$TnbTvq5P>kRe#4 zeIpK$QWBF%Lb}d}D$nCf)>>2Mq90;^y@zkFw(wUAb^QKpl~lo>&DZgb{kJxf-4&JzeeK zsjiQMT!GB=IataYEHa`}r@t^FD7g-X#KuS`#^!E}+j;#F$HqOyEIz(|0C(>k!%cg} zF|~0J8SYg0K|~N0LEG_W@?6P1ZHs=frA^SIpYis&9Uao{4Skj4W{@R7EEY>BmHOx_ zi*OwmG<9gXYpM52WV@6nCYUnD!1XfeEua30E;qe?uU}LykNu{gT_dt_tWNscq!JOh zu16cS5k>4@MhYy;z;P^O2&D4)EG%R3nR*)9oa6AB4Py*0C1WIgulFvIh(MENS>*3R z&muxT5hv6TmTe=G&87FFD1_lN$6-F(0eB5fYb;XUHuEcqT)fHWwr!EOlkxzQh@{t= z?-E(8UrFEV;=|>9>$1IK*e3S%rM|V8Pb04d?ha-%8S*i-yCkJ|YI{Zu9I=rx9&892 z-73yCPGf)bFrMii!ZX29Jm(+Bi@`}8lUb~|O$06{Udk^7Tp-ZERVM8vrHl`3C1~8V znlQ5YdS;qKASMgg{pf~S)S4mtB}TIyqC)VP@V@1EDLA8hVH+I8a9~>o2|+@q(?h+X zy8|uM>rH6TO0kEr_?kp;Oa~){0HZ@58e3X8cgGB>pIt=lAD%(^m(Jky51+x2PoKi- zy~}9d+(vgGh9Q5CQNV(sU5JNn&q7QDY*~E5-4byMhz!AN*QOmM@LU5CK`#(=xD6b^ zg0U{CWiCaG?67a*fi;4)>wHdu-u>oP^qtRSOv$KjYYQy7dQJrFr zD{5m5)F72K|LaLapo2+7sH6zJUN4O#YBaIO=%P{(_~a2$d4Te>EC-I|!gF0@^HfY9 zP#jAzxFNyt7GQL{V0;&#Kg?a6FmMWn9RpBI&|i=j-j!s?Rl#D8ZPx20I^&o1+t8~` z`~@ew-<_%A_hu@*uHjoNE$ru3w1P#OZC8N#K?93a2f_sDf2>i^SfT^mQ_SGrp#t=q z(7(iqTYp05$Hq$d#6S+4vMy{R48O-*#U*KB*1uD44r0wZ(E40fAMlv$M0P zR%_`zrgd7>YebM*uhr9WVCdUKgmnj)o0-MAvu7C`>5;#Ixv6{YJ_1A%iU$1?w-RT{}f*69>Fu619-giGM)~P;iR>KY9<032TwR> zGr}*4Tv=srlZ!zvC`DZm{XRZgB<3)fUg%(@ zW)N}*!lJFYjs=&1NWoA(>tK|=VvxHJwquYGPG&MThIvna+&`Q3crSq^A-GwFf@@=S zyn>_mp2EyOID^_RoML_~mPwQYEQ7FJ}_o?`@lh&C6zJ{PJE>$Z)R%C=nX zVWmnmOwihwP2kxvZ7@KWzAfV>$YsDfK|e>kV6bVG3+HYpM97J@=f~&;3Hg9HDnXa; zyM6*~Ujl=xNw!I#Ku|%T#dZkaLqNMi%2#d5vJyCy(^arYvM-Wh-n9|3_Ijy)BO+uF zpxvpUQon$u%2|eSPoq+uV?*1_ClDGNFJ5zq=zU4=g<%ABv^^TWen7d~ZKKO=tT6QX zJb}f*=U5H_1&PtjOvXWuKrlZj=pP4$2o^`TC0MsN!6dh$hqfBzxeYB2Wg|jQfnp4> zm-%vi4{d?P7X^G-BT#2irC}az_V67}ZW>MekKBU(kJDvF8Ebf)+tA0kMO|ixYLvyH z9uzc^1wJTAO@#h81%BN)fz8HEalqZ(m&K2BEBZg%(2sw*aR5KX=;9|BS=^d)puahp zu!9s_vd9NT6(8t!hzKlW!0zRE?Qz?91t(6P!NDV(FixLCz1~2nkjJ*Io3QVu-2{$X zF*Z7kY$lVI(Mb!hN@U0JBd{$)67&eX78k0xK)`sIThY%u)4?y$ zk(RmYZ-oIThXgrJzQgnpqjZ*AdkJn21-El1xwGKmqf>*pWy>%&(C$V?irlu$K$A|w zua`ydUk!z$9LmQm%oCGzq$piYP1mnX>R%lP5Ciqa z3aYeE@g64a57mrD#%%ikcDscrjn4o=0}tczC!WUa+#D7b7x2}ujLE3Q>HWwkSW(zOAxE~LE>mhve zfp6jd`|roY4?l$2**Stc;M}`9zDb(-=M zFc3&S{miqJ{eIl{_4_IRH!0hTIDY&@D)(cLKY<4yd>BWL9HlHhI9y1H&^E6?d#}zy zEfS6s%x6n8(rX89d)Uh=-fc;-T(~*l#Xi-s{14wTuG?7NdXy zc{S5(ypG8%G=LWZ>njO%EG8&*5-5;Vn|U>RNozLT&UH|0CGZKV#zzX+wRIR%>-u1^ zU)%H*k|~jI000mGNkl@*0L2q4lsnIu<rd2t*{6GYCUeYjvDBb%qny{uDUYs&#m-gAMB^ zam&6v*u85zMn{IAyAUFh+DBTLFMONwO2-6*y8$se-2gSNq)(n-#v?CJJ5x&d?aykS3AN@j3(VNl)-2APT-d9BbXR1 z(g}M6rF2^?qt2M7M=7q~p}x(cU0VbuA%Tu^w&}w}>c|Lb^wdGEXL8_a(J zK^WsK`5!ub7``7-t`JW?^$foF#V_MK-}w%{{N*p>FaPo{ap=$ywk4)ab(}eK78(If z=qxn?`RJpMpByBx7=3|TvxY#mPz!-gk;o>vnIT#r#p+H*@ zW5KZm8qtf{-b$^BrPT%&SL#@;w1{IuRRvmYpZ6NXHVxiyqSXZg=|jDf!Q5h#El zZ3GO=`LvS|HC}6-F@c%K?P~?W8zxJbn#^OvL>@x}IRuP6Hd-P1+9(xsD3vnwy*7mX z163s6dE&+n0xDU*{GwnnAZUyT7!&eKAc$inq-V{id3u+=ETj2eRi$1UHR8d6bqwil zgyUo(B1rh8(`{gBoB45JCb*-|sQJ-r`EDfmX8tFk+DPT;y{(Hqe93 z)se+8l}++;g5q$35&eBd0>uq?0HeDN`qvwHB?H4eVuAG{O$jSkN`*-8T>FcVg_5~= z=84D~XofKsdm#=qyZF*#9slO^3jVue3;6Bn6+Fj@Z^@6)C7@(KrsBMshh8h6_cKw| zX}dV5r_JEFL*6o&AXvPkFN2?_LI022hVierj^KwmNH%fhR3MnNX(QTxEw5$utduhO z@a2ZrfR1^c#C2jkeP$Xj?mvR#j5O98E&2cl>n0~~Gb4=qZrX+M@ez(`U0BjDaA0a# zZ6HnHl`*RxIiO!?aM3kAU&oXCXK?@X7w}>wz}&C4n&KfCQ?3RVv$J} z1|!DCO_qm``UbmK+gRW2;GV5R_~ad%uytyPtMoOWB0{U!fGF4?+eTBHE4M4T&A9!H9r) zI-L$0^$J1L5-O`J1du&svKbUhMd-&P9M?^Y$8n6Ip+S89`@avr`d|Dr{8#_gzrsKN z)&Cr~-g>i|Bx?0~8ufeZ@h71_7X?l~ zp2Eb$B!1;reg(h!tN#VqP(1e7;{?1-@&{C2{S^^I`x+S@#P)4laQp3d;Feo&#l++! zMn*@Wkxm7?ssrsqC4v6ovPpB8G@r08+5qR|AP!LWS8=>?0*}?6!~Lx%@R0u!4$3qZ ztU6i}5H!VzwIL$7R9S%!fsgLPwhY~M7L0=wbC0tN^2 zq#UV$k&!-3tsBDT4Z|229zdfFoVid>$Ih0iK5SW6f=w{EwAw|r9w4D+Cn7SPp-)k_i$sj*$ z;47$Y z{LJJ4?&!~BoLc}{iyEK;bSs(*D>@tY+xuS?e`{L6u7ilsAw;OxTR1m8$1Uj-IC}gP zmX=mH=4k^HW7xNMCqd&bY?zuvo-297fuoa`(j{e)4S5;p*lo4w$hoRNc6t$y>_3mM zADF@8l_s9!HuUpuf}dY<)@-CgV9-V-41S=u8&|B?pT9b&R=NsWgWDOt$L4Yo! zYf2HrY6+vb3H1!>`$mvc<*?Y_8hPvyVEK#~iU>r6k7B6IJw}#W%@*ylfvWz*3;|!r zws@Rd3WaQH2N}7Gf-g@oLZJme-=ZdlPk+hi~#>aq4P3#ih@@juL~ywzSo$N0pl z7`IKwn5rho`fGf(FW0W#>NO!~W9B5_VxWV$r50@4!G`sN*tU5Xo2U9wDr5-ILfTLV zh<&)mhkjmkwc1Vr;Q*s{^Bnjg`=o|WyG_15BvBVxC&HHX9@Y)@Fp#Zd{cwz- zexc2=0SQ^MUlQ(;%mj(w&@VTJ^_7*)1yEe4bI-Ilv4ji8FVS0aQK*yZnI0!gd)#`OF1gkj1=*ZEd zCons=fS6-rd~6uIcW%d?Jv*?86JLLS3ASyg&*E2gy7I9t!|@xVN^p4k%rc%kG>dN^ zoW(cKt>7_6?hg_$P8VIQ79CXRjB38m?VcDeC-(tP{NtQW)^i*BmQZjv>$rof>$^sZ zxMgYpTS(*MB@7G{U@VK1ZJauNnjXHFN$WGlLOPKHP@tg`0x#c#LpTHl#+dXRvA=q~ zUb=v9a<}Ia>AzuRH>V4E%i_3&;6_NQON)JJbKZy}9|3o(F3I0$)EHT;rJr5wc3Yei z0ywrH!-Z-l<1zA*;kB3AqP9&z)fyqyhiyCPQWpmf9>RTJ{|2|7@5BA~KY%BndbB>e-4j7{urKp_Blon&*R*=bGUF}1_1#hs5?Dt z)X%Wu!Jz?YvT4I=6Dq$?yVeO@!O593X9zNp8O3-Wl2v@*%D-Xi~ z+2i$v**R{bA5TH&%LJYp#XNuhJSWBkQ&A;ED?y7Pmv|I8i%} zC+pAS;qD7~B0h!#$$6ZL=P{pDP%~X{jRqq&qhVUYK=_C2lyn;Bum*QO!C)1mg9!#( z33e}vyb4e8dkmc0@&G+#p7SO25-VOfTtD`fu%@EPbq zA_Qpyn~W0z$B4Td0i)Nx5`kEkJByumh+a2H`&bu*Vc0_wG*NOJ*f7$;NTCipT!0nK zVj#1O(R>4Ww*!kjZ9|dPoFB8B` z0fNVINRm&?MvbyTyMl48GK*67G&3gv8shGhJaPr%UQK#h~+Mr_iDGQEukLg z{a8O<#0VEJxx5Fpw}67iv_HJZNkm{1+{T>16)eQmiO9R}Aw-0IXVK9c`phVeoYWX0 zQ>xdiDQN6=+U$=W=v^tJz;$h82*N$rP0Qg1N;E^tXmP4Z(kPF%q0?@`C-{mvG1&HZ z<6!WGsZ?osZT?G3HjQXnwr9$cie?ffBG}{#3w$9TW`HJ-7?;>a~BjCCalkK zTx1!o)ayER&%#J3i^`n6sON-o6pKad-n|Q(H*bbbz}{u_7i=lRSZr$xF>S`9LuHpj z^9z+BV!-JJqoYHVcLTO<+nTmP+cU&5xrMxjhlila=h&h+u*Bj#<-&uDm|$q3vw*|R zqjhKm+7_V6p<} zXBKZepWv411UJpb*fpO(e`aT>N!>?C%P7Fq^6yL-B9XX@Qnrh!Q47VKz$ajAwnF-| zhU%eEOwvv@Wb>T|GR+`>Sv3o9zalT{S#6_{WV zQLh3-O-NLQ9k0Misu(N;m>f>1%LbpX!cJDu=PqKbxPr053UX!<5-byU)S1^u!R^3~ zEAX&PzDsbECB(gDBw-l}Jhjf8-NNWVf`LMW{%jk=1g)dRI>w4MtRH9+a5gc~*T5*> zkMY@1u8yqTfW#dn^hbDyy(s{UMh^)JEdoVDfCvKCkR9Q3i#oixHEk3mGmm4(9J4Vj z=2P2c@z)#%6hK#3J`FzRwv5Ytp}&8JXga5%T2so?_j1EK!1nOp*B30waJJFIezet;=|MXL<2NySe#T74!%0K(aMz?e6F@V zHwzux3JUxC`=CFovzHOZEt@xBM8EjrI-KMpQVbDEdAP0xbsUw|296(Fz_a`3@DKsx z1B})`+U($f3rr7Y&=}1lBxp=BHWH3Q`XZng!7Fz$ywt|FMh_nmgO3-p_{c~Jw{IB4 zW=6J0M+)fY%Gz;ks9Z`E8#hF{D2VGgQ2(HSAXcaLE(s?hFvgGs8VzZ-n%qXMpjNG* z$;h07t!A@^CmlqCxwf$iAXuwerR2M6)UBah-+4}23Zy!0~j zS2$iq(ceEneldy!j{ElAgj;XDg=MU?-lv{?3isXjHJmwp8e;^lqoX5mTqhk{2`6iZ zpmhDZ3EcbHPvNJ2^2hLVKlhXPnVkVLqOW_o0#d$ z;b`|XUhEymv)vLgMdaFWjSCkREY>4z$@MzO4v_&gq8Qi!aRvI@ zz!bNjcP_*!NYu|P-b%o@XD-18-Y@jn)dujHU(2O_;i?5n00KuhDPu5G#(1$tU{%L> zsX?k^vag1rTp6B}+0g`8Q4M)(6{C60TgOI@*qHB^Vp>uyK6>xvY(Z+D(kdv&H@tM2xmY46GRmQOLy@8?;kk>T+CK zP9J&q!?=Agb^#*f%Y{FXkT(k`@T~Wga%_u} z)PbZ+4JM>_eyBaD{Y6~72So3FVBoW3LS8HB{e-MV5@_ByF$mb{A$NxoHGo%DX{Z6% zmc@bVl04YPf#+l~GCYZ~i7_BsMJ+jm#o#fVZGRc3+h0T{cO03a7!DN~N0I_X>H|rF zcO_{f3|}k}*smf5I2Av_@m3Fym)rO^?U3wo(TFV6qSY&6W}TGfvv~4&|{W=h8?yssZTM z^`$Q?@a>1k`%nWS0uhcy8iD>kT(w$9tJ!8t5@d5Zc$p0Jf7{k;6$}paF-o!xW23_y z^Dgs1-9QRjEJHqg=W|PEd8v*Q+>U9q@BrZJIusF$c zzEA789xn-*D9|HrKwwcPe4q7!p(YqvOt6*P&iiI!+<7kMc65T>1dC&h1a1Tnhooh+ zyz*hu>u{+4VkB`J5-!7wXOK_Mqkyx><2>JAfJO`vQb5KQp@1Z6z=Vr@HqAWeP%v|Z zebw~KR;{jux?e;i8YQhGtw%GSL>FU-qy#Y;2!Uib%%IY8P;PoWXW`2bVtbr<$59W* z5y&v}6%k7Y9p6E-=b+xrqS_rq#h*kam_jXFhfXp|;N3?(I6&gV#5Fka3ePJ5<&2{) zgKfPxr?|&0I? zP&U_<)J!bCSR&w&3a+2CYjAR!X9PvT;#1W&{%Wy?|BXQL*G?|s-L|T&Bfoqo+goaYU7kLRq6j*Hbvixh@7vWHEl$uyPFln01p$^<7Lg#v`gP+3j6<-D zj))|+o0LJ4aP=HP|Fg@&avl3mE#RBaoyC`)J&%W1Iygq4IKQcc##jzv&IZf;l%yYJgJj34;eR@{BZCX9{s!B`fA<<$0AU0Usp{vsj-Xckmm z3gQ$vipV<_TSTa9Ny{mZhhyfBrZ4fBrxIHU9hm{$KO@|BZk7 zFaKrw?P-fPrxC`$@30RIx3)it&wu{&xclzAap#?P@cIYvkN@#M!S{XN=aA23q2oyV zCkO)!50BvU-~T!M#83PLZsm6N9k<_(@BhAgF)=Yp(C9PL*&_%EIoZ?pOL=_uGoQi_ z|D7Mgc5ap5ea}7ki68%A+h+dGB z`bhn(T_uQdj$rU5ZZ&^vwF&*a;{QUBsK2wQ|Hw?qsuv|~kw#Ga90UDb#eF3Y8*>gUHa=oTiwdZR8jKy>9v;sklvpf zU>B!?M{%424gK#K`dP+$v&%?FfuLiAm@ekln*N-LkAc1t1{iJ8=oQ%eIxh4a(@?ry zA1jp>PBU8n%&}SA_u@3ZesUSlMlntkD6Xt4tVI_Yu>mXA$c71H*aVEZW`JRCNpCOr z@R1&H?@$3hblViZ|6|*+d;0{kd5;sF)+Y27tWk|GmHhqjBJ^#Bq|q=1APOw5Msh8$ zWqrSwMi$%c78;E@s?{oLi~=j@&t|h2Ay`qsQYaJ&SRH8nfWS?ojt=`eNWqPW>J)#g zlP*4N+d?kuqQ5Uo;OEiCB7$t2wq8WBn1|~+oD^-$%+BKU>9f4whaKCuVC$Am7#bRe z>t!%DHjKf+e%Ou+9UsawNn!*+2YP+WEqm}IKm3CPo%b+WUt;9GjiA?o=QzkP`s+A0 zdniGka_rl;3qSE=KZ3veqd&|D3x4 zHL2j1zq1dY`B(R1Rs7`f2%k6+F{&72tezmt=L#G&zY3sbQ_?q=q3iod z$nN#TTW@;M_fT&M{hnn4WSkHgSCH`x^qkFFa9s=4dVoqbB5=wfls+_iB_vi6efLWk@EFGq`@{jPEMPJ)mPcF2qsWMQv6MrR3yC7n`J6{PO3-MqKza`8Mxcl0Y;s$)wi_3*t4&aC~5J6OH6{U}&pBVZ^{K z2n-q7u8q;5O}KT}_hH+{JCV&4$xzVl)N$b0!+7q{eW=uz!2Wr%76u>d+ym z(fiux@fFs8B{II>^QbN~avO20Un!to+wCUx=wbV|t=PF^JNme2>a;rqdp`R6iWnOi z#MtN{N<{($j*)h&iIC@s@zL~4Dx;&L2ng`&)e0K*8vETx*0WP!>UjvDqO7LfM={ZB8%5ovxcqve&4^0=`{Qt^_ghm76DXkUnlL11#oU}8wHZrH)t zP@es&AGt|j(f`q9p+{e*U(~BNI+$Om5cl}-dCw>2NH})mMBsB@K17Z>$?_WL^rE$L zL5M&piXc>)tpEox`~JPv7)_G)7{j$AI3xv%dQUYJu~U^2YD>YTW1=*lMj{Q{z}v4J zswsFyL2giBX8~aY>FXGN2cjruB@T^!5BBZ)4AxKVW@Q;F!Voad;n0ci;L!0$QERQj z7>oC{dR$S`oGP%xmyBi7vh&>#k2CV|rG+~5KeqhtOga4~^k2=_@z81u`|DjyGxAso zA}~+_E$gwoB?7skTHk+}5{i83ODk+9rZNsbHB`jUO!niK*A3to*Y)G?kM}`8xA^h? z9PZ#GK0)VZi*_w19+uaCp?Hvys5v?@jtM9q-v01-pJ_lu7(KC|0A{sPg_2^3Og0D0 zw&~OYLciI4o@7I!M9H=;vsHLKh3SQBc8!b z(L-|}gQ(~No&|7xshSKOVuoAR{j*JMt_8T80QGZ|1NhvwQG9&&ByQR^hKY$jS$X8yv-&jaync?KIwz^_{Aa^uv5^Ta5C@_5~PT%$^2c> zByEQ=CY>Dg%QV$$mAWpYPSB`7!J>Ix*CklgekrhT)+o#VbM?dYtVhSYf>kBWzeWlB z&W7!{fUNoD*FMLGi5k#;%21C1L7zr`ZoBPP+{vx%k&$8K@_7sl4j`M&QtvtRF&a5C z)Q8cL0rqLgeyU?=Xc%|hbtg7$+<;6b!!hJBZxIDXe>1dq+Y+c9C}lG)?*7Pa+{*qm zL1GR`9KyEP_XG#}WeGt9hwm+RSdRU+b;A_4-?Rzs!44j+KaU67&*4Dk9O~IZ7BS6a$AK}s#_VtkEd(R_bLwr~SLtxCe(~Al45`sZekJ50yRN!y4j~S7( z(Li6WgW&;-Wq?+@hYbDWaKDXWPRJ{P{+Rd7d<*4&6E#K3at92rD9ZZCK;FevVr6SkEQU}NA!%BHJjXa(@`yyA-br@qq zM8&}ylHN7E>+pGw11e`5&~BlhRs7mgEsZ4V7g~Oo5yd}d6y$45O*~oYK)>9gpJ~*8 z3CN=GIGMO4_AittS$?1nRe#JE-J;i@&rw4hb1mFEn8hzl_CbGZ@gGeM;HNoBe}1@t z+e#Tm9vu|eC#sWiPWHEQ@*i-hUmArihAYzqDL4RaCo$k;n80fI$V}HUbgqiM+?xJ=Mz_DP zV+^0&J%KxU-ZC}F3AX@`6DcS`$Vo3&1IC*t;cXFt;TYx#eh{Ql(`vOwC*Fnc$2|L- z%mXC!F}OjJWf|DEg(wOco${ecjA1+0C`lr;x&55}`1Hy$s*F~(8Tk@1$Yuyua(VVi zfm9?IDImjp4grNRR@%;lAp3IdHLOeX+qMG*JKLNvW*hp=)uhf^?MU#>L)zun8nug&v=8>0=EjD86S)ko3rZJG~)|s3}a0w{t&*l&-puYp? z7h7&UALDic#am_)?4FO)d*ii)Ths|OUtkeX7^LNs>n72A$%w7s7!|S63A0$N2$pIF z^JQRRHAJ%=qr<=z5W^#Ycch0x)?!cd4#%c#8G@^jeQl7>I^b}GV+%42`iw*qVOa;F_UFH^anZU7(ucTYh zU0h&Pu@Od`(g2$ii~>cQJPbZ~Njryr4jNSqc%gtXW-~_!06)fU=$}%sNT8_ShSs0Z z(I4x+mC+ytlNl;l%WE0^;*fsEbATZ8qy1Toc{cPOv!uMw5j37`_D~B#atGKo_%Pkr z8W52+z{t*OHrtqJ zdv*mcA6vx3M;GunynckM=c9QWb3++42Qvr@E@IkS!m$=7j8ZeYXqS5^%{8%sQO1v2 zHhzfF#UI!?j!)mRjtj^!Oiq*tfIJAtbQr}1RB;M`@Fqz_AR_4#oz#6lfVQVzZ=%!b zBBs+dtRs`jF=AOF2+hIwL-=eTuvQN5VM?eI^^f{_Io&Gu8J$h&6E(WqYBf-;R8S>Q z)a!1y&GrP;Ma0R)P)7w6izR~i92EFjT;OR_67sx6`u^=mL}&{Z$>#QVoDx1vuh9Ti z1e^M`XiL)#yKj-+B-)z4Q`}965>?UwRo&JoyZsdiF&eK6Vzfv#U@$ zoSUD=lTST``|tk-0pE)_a`Xfa9VW)*u71e_uUA~v3XVL!g{z;|%| z{37DOVEXg|o_yjtJbUmZ99TYyXKP3BWa9vy>Kw+CokJ-d^v_`lO~jT-e>TTSEHJp0 z0=3sP^&Id676euPJj4C4iT;euvLGPW3v5(u&w@k;l`9cEyvdbtVi(W*KNT7HL zED|$Zg9JBfQ43-`h+RZ1dGrE@K+uBEzU%fli;7^F3+Lf}my2Z@tf(lphI17!J-Hj%PC0IGr54b@IgyzL=j&U*hTC??W{bV z$z;aHEsPd^|8O2Z$B5#;*ffa$a?3DuTl%JA7I}gJ?F*fJ6=*6CvUx>4$}4LOw&XI{ z$W>9^5_UgQ9fr(!xYfmeMjjO$SkyBPUq41hM$zBjPmrZRtH5UwdIXrSVuklI zi3n2A$ENid-PO-5HX1cF8+A0Bb?EQl+Lnbr0{4M|enx$Bu#Cl(d_a&F(N`v~5Uw&A zV_*>&fqkYC4%IC_Os~>_Ktvd2w@@js;^>iMSRf#@jKR?0AZdv9RV0YdFbbTZ9b1fc zchG2bxWKC7!t@0!FD)UL$|wR9isQN{5(uxTa1uK5`H+lqIcjd9zB1Y4F9lzOb)017TsOdx#!fj-zkB@sY$a`b#-XtsBDVa0waDK|beUVyq7vxaig`Yh&dY49jv(wn4{DdhZU4+s~H7 zlpnOs1eR_~+X);yf`0zdrXeLXu82{|BzdEpX7Apc(AVD&b?$F`{M|b-6=S&C8X26z z9XI_DqDRdT000mGNklQNw2#S^NgU z;{P>Y!~d6CWB=yV5`KfA@u_MT`rC>Yhmd20fKk8`-ytP@0F&yT^K%;gV_*@s07c7S zk_NV~n8Cf=cK#`X#s7TM0REfJL(tDI>ivukaQ2*nOf9E;l-^85%$DBHJHYOuhxH7j zE0|Ks)^YyQlDx+omwc$afgUP|`)mB|9UR zR}K+n3MiO~2o#k9f<*;cT?LDs9(wc(8eMcOYm-#-A?^T=nd-G+QT)^D** z>T}{a;KJ=5a*$j-~fTe=;Y>Y5ZK;IfdWKBOT zd{u|mulyXxN$XhCO?*|nKInx!*G6Ao0mCE17@wGce%VDortwzzQD zDkJ(XjXEwY*Rj0XLA4p97duF}fB+~H-n*poDR^|Om_RXxXNM{2dt)dU#nU|6PNSb) z;CtSEc4mC1#|@A_rVO-8&eKV1Y+1{K zZX@4Z%HRh^3ixSmMgJ#LgZR%j4B{sV9PjMQW6-l<83VN~&Ot282^nvnl8ae#EW0!B zVu}&WOS%;iEcZg3X!fw6D=Y#B)&IpJAD-Sr4TuOtg#DbL!*Qg5@${MVIC$tdPMto_ zh)4^?LLM8Y)^noU!N}h>jE#=aMl5u@K2|F&oSCiQ5Xain7bcCQH;Y3D58)`cs!yLfg>rQjgQJ7+`Z72?cMQ*! zUxIy44qJceW|Y2fJ)+GS#3c*j7>E&w2%yebi8Wm7p==Z^rht#E87zWB(KG%USk!Ik zJI}@VjM{ujP}N9x;S#`RL06;}HsD}#WQ|I> z1Q|xzTq}aZJUOS0@lp#TxiXw+7U<2uix<%ERZ+}z;1Fmz1YLrFIu2l4Apuwb*Z5Fg z^RDjcFKFKON}x*b_9!C)2YcOKujYGxhe?=hGQCx#Wp%5 zd7Z3A9gq&V*WG{3TPVi?`aM66_QoH^%(^e&%=*8B=Zd%E%QYM6 zx1d)VIM(W6$q&)yra15=Oc7TQ=W|?^QeBboNh(ynJmcZ%8!_RHm*+r zqyAs%iSbbs@>wXLI(>c_2aYaa|8x~E)Vg?vV{N}9IOYjXN{D4{W4F0E64EBr4l`mf zM&L8i2(fOdjhpEpJ~Ldx=e7>xp6$cfxxNoWeGY8$fW^g&oq^+I7&VI+E$pSu7m@U= zFUnKFOE=xRZK2U@Q?3}s*aTErZfh3^68lgp^&^)rz{_M{I}V>4EuI3=H}gFrl9m_x z8U3d9TAuILn-+erUMQPIKxk8sdcGvanv84jR4+yhEXzVdf2omI1=VX$FaIhcFl_f5 zNm4s8eD1n#dL5;}2kA9F!0AexraGgi!`ZVJxac~H)zu0o!i2y*;^M0T{Q^tC;Dy@k z^71lHoIH(_r_bUH7in{|^R)92r6LzKwu2Rd%hgI5UdclM=s*|0|Bim-@9x9$t~Q>{ zox~wCjn+Vn%vb?-(SzkVYki;&Rw=nsi7%f|*>LU#1RTNX2?`eVo6tAU#Q4;S7$0X; zanD?gb=+3%W7JV2i#BD@AQ3SDlu{n}+nQ(*3e@5ra;ApiY?*+tjEU0fYiO*vic!*7 zv5djYDzdT)J6VN9Wgu#@1AHztT0l@kMj9B(cQ9P)!IK&R`U-|K6^s`vm|*#dQW@*| zDp*&lu#Pe&d2gIFn61GxO$hxmv{UikC-qgae$Fv8+`hNqGb9~wUI_Usvsk2yKT7?mV&6_shmYa8{5yq+Y z6X+}EQ7JcZ;NUd&ADPFQs*jh07>`FjUP>aI>{1zhAIG#_72qw( ze6Me-C@PoITh%Qhu#5p)jF7%iiEkhxdU_K|V3^-geK{U%$9)y)dlL1iddcN-uZtr_{ z-`;(9ckj1at&!KtP$WgslK??@GlTKo&-AqS{+vGERMq>VdKwrI0103WK%lEDPPxp; z$f(H7KO?HD-?yifqHehsibaTx259$H^f-2QcH*Ij9>hmJ{2_F9cA&btnvQF&Z zTXnUy=xA$4X{3}M;v!U;LfMuIl;2ki0a(PkRXG0Xl^sd4weY`x`9c zb(R7Qm4>b2urUYAn|T%4m_Y!uq&b+FhxStN2sS-$p$~;`DIQ#&Grf5_d8ScnPQi3% zpqvyY#$01mB#eisc znnVXI#7T-DGbriVm>tXx5Fb*x$_IKO9t23@Ej&4&!B-gy`=kD8{OA5z{Ppl0zRu(Q z^F>TqWyprAP_!Zd!(Em(VKbkAMQ(h)c#kd~>&0=@2h=(42wBwVYKDnF)liDxYp=pT zZ>z%R8_V%wdK!0>N6;R!P;MHKbOI6uU=n9Tc#++8uZw(23=MffriH*!?u9T`yc!$Ho=4XrYakm4y%?IE<7;5#qoZi4gRKBM6Fjke(Nl zwkn}ngEGfram40gNTyP7iJk(1F!M(JLAbQE6p}X-3cO9vqT zXL)jR3dv*w(tij@x>h%MA1^Y&p!q{4Sv$9HLT7t3?R5&rjvc}2Q>StM{5c#xbQr@! z!>F&R$JX_m(ACz8vMSnZy@FnC!QEm5TSJKMu0hF`N;u61a-|;RgWL*=K*8YPufe7U zX~Vbyi;T%GCwqCi3X9tFfnd`dux`kMgrGMMdRRN^`QWj2)x!`eHiS#h$%47kXe5why8OY zd~-aGzZ{ywpAODKzOne_kvN{2NufJcK!&p|MI|WS2u)H{w&IP!jcQHTO8G9@m)kC3 zWbrD>;Av2I6{f~&dKMp|CsD%Bzu8)WFSS%a-i*GxGJ-~eH_dc@N6(ugc{#SQZxV-Q6S)p#}gPB8pZjGmvQ#O zC5((tfISeJn(DD`?Fy`0-G%1H2EQrw49wv8r3oBo+k1&^@(|nI`4Su5C8i&aPO!s@ z5~S5J1l(p@SQ83jTO^Df1YO(N@$Cs%xV6pdm(`E`4?XFKLe9VXP^xYhaRo| z{sFwWZ=e5Jm|Q8cW&i*X07*naRCDLf5dfX{L$8uYo+Wi?6Pmhuea`QnvtlE1-%Fzr zh_|S}zZa8}6R0RJr`LWJRxe+P#;O{6$!9U18pCWjhAZ|Ej^@tctnS8KYX-)KFpOnk zpu&PDI?eMwa$r=_@q0H&mo#C|031>njLv5lsfrIupj)F$?P%h8Ef|K-QF!_q5Fii<32w7p zB+5LD*15Rc>fu8B0-fyut~3HU`_-aq&3a4`NSsMz@#1U>-8Qv z@r9WTrWq2mwT65)Cdf<%J8x!vHMjTZ5yveE*c0y{*fWU^>H{X$M1#1S!0_klOCirJ zig)oh+bZ#3brkgh%g>Wyr!M(~2k+G_(GW$XGu%U^ZDM&z01ZKtu5`r#*5i3#w%|bC zdLPd@^jh2!k>0n3Xtoupe4fBTKCL6+-QNBooIQV;;Bgp+)@W^M#LBK^SlzW84fT!w zb0*zvgU9LNf06Y3bPA_!1A}!D^h6Z;a~Y)b1r9h0RSa#`F=SaaK8f0)AvBE)VENb( zT89P@=)H{mL?3J`iHb@aR=_}!9fgFMM+sKt8LtbMx_zK>>hx)xK79sf&Yoqs{0d_6 zI5cHfNO431!w9#LqEATWR&Z6`6G#K_1f4$+I#+uKXt4rXI9^!E3oo5y_vgA4mT zJs2CGz#Oj)4h};;t~@(C2ThM=I+aFGZy!#aJW0>c37j}_3dfJ1#IfTid@s?ZOPA@1 zn?N>~he-gMOr~++!eyL3d!BM%#3_1fFVkBq=L@v!{()hfCm7FUGL&D7>faHPHYf#~ zh5@P&@?xP&01382IsaO6VK8l7T|MrVOJBejzxbQ@oqzVv@Zk@AkY4C!g2j0Z z4h}#(zjh!9i{Ly@y*Tv9zLwwn?~GE4x>k_4W&8RDaPG_{Xve}`d+x$7|HkL=ncw;a z-22N9pmIkY`obf4K6x0=B#z;@Gk`HOfvk4m5-385U=h-3UsdDvY&>Qbpy$x5C?pOC zod$wa21*7^lwY<`chSbWo)T;u3SjlPi`sb?7Qw1`6y>uy;#CySBv~!3OB#5~8t{Q4 z4bh}WQAliwa}`XMDh$>r^fh_7-0tGcat|k$0T-GSM#~hk^eT!cQu1G0sOEXRG?%7F zQM`(?_-lF?zcZe|$@v`O1u*Qa5i}GyhOixZzQ^hYwI{rr7wXurt2}ooa)u2Jc^i5S zy*+nThVgUtW%!jQdKOzN@vF@O7E90?G9g1%jtUa*qVSNsx0<9}8Mq?6Z*4&X?F5b` z+?VqrOP2Bt$j3}Gc_ayJ<(!hACAuLR5M3%Izo2)mh;%xOc>Mpj214B&EwGE4EB!2@KUmX?y?|;YeK$vQNCP|BS^3bFhZmVN23}c z@(v9TL-q9_)!mJW%NH>|BHor!oIHIJ&+mN+7cO=a>=g)3G`D#SkBsB&*^2~m=W+VX zd7L_R7DtbrzzZ+z!&6T`hwknkrnN{0rY5KH-1B?!-S7T@An^!Jo;pLIcZzfxFTJ!M z|M>N9-~_>*faB58Q5-pX3_pDQ34H6@-^F*o|0rHy-b)0iBP{dGx%1@p0>&mL$lIoF z(&(p0?ev+mN=t&$t ze4JqSBH{$GIRa>@%f9^wkxXTLV5QW;eYhbv_H8jyFzJEy2pDs@9Os>$4{qLwmE#l< zkIxeu1Pv#GDC-A;DHn=)iW+c9!sABCv&859r2(1|!|8xL z`)axib(aZ9A_z=H6$UC5E;K3}=}_3eLg8dP&s8hT2bG`Lbl~Uxalq(bTX?`pR3$%Of`KsVc!Q zHkIQyS}O4?&E@zcy^MF!+t?Yl5E1kZa8LljH8?~p5Kp~htJFoP$}+Gz5OyF=Tk7K-3mm?;61HhnD-~=wuGalQWg3X&+p){5$6KnFo za^A-c6=k?<^BUZ_dpqv9Z5MWvcJ11UEn7CBx~dWq_7uP&9xn;!iKnWfq7n@a4QOm^ z^ta8;EvT)nN0Fh?o}ND6lc=G6SIEEb1W z8f9f=J_ybwGdM-BVc(TrltxP-o-`>plTH%^CJ3mdmjUGY$rUS>VaN9ESiO2RT3VX8 zU5On#cA&F!8QYT!`E-hep8*TAGcyFWSE#oz)~s2DjT_cs<;oQ(FE1koFpx^7DEm0Z z=z&eqn<@3hJG@v7@rxYkbdvflLMa-^Yh+UX`84%&=Il8<`q&TgbprBl6MP>%dK{wP zVzKCdu1QhP0!HOI)KEA=T{@%!lv1zZ`d&VvpnRL7mBM46R&er27t@%{$C0lrpnO*u z${wsnW}C)Da|ZFUJaXd3(*UR|rG&!*;W`&KO9;^8JPtxK;93sBU;!x4C^XF&SlJiE z#`7iEbh#93#v^Di2GJO?QCnf6y3~Me7HRKA2rn!xOB#5K8W5Y)G#()_BAK)ZSWMZ# zbcsSQJ&VWMHD2t}IJ8WoyG~<<=L_aF1u?(yQP-S$ySA?-F96+UI5Lm+3m*f?|DSYrQTIAl9(c7^;8umly2CacBTv}DEP(**G zfH8V$B%Pdp7m5BeElQqY$`6rKv8dmxFu=ce%7 z_&i=L6mUp6IL~m|h;}jSImqx%$-NP~3@VK#hIZG`9nm$H#VUF(@2m>r_O?o_@2tnV zHOsJW-Ab%oOIov%psEYYmbJ0$a)PV~A|+86hKW4ycZ^}^L58(2Uc87)3b9D$7vz1w2lV=ectiS>HSa{3^9jp76NU zB=U+3Me3?p$ia1qD6ZE36;o zI}{2tG+Xom=_|b6t9y!CdxfNyVoOE0i0SMkPRCB;+1Nfjp4pE><`s;Wr;)GV5En6^ zEN%@AO%7~UfOOh7pu-jx0vLs@Gy+ATY~J4Lgu<$E_#ffkbIHZF!6H`1^Jpz*P;Vqr z8%Uxilt6U}sWgGgND8)2!EUP~45G(P4o<~+ZkPV&NNCp&!D-=$* zXzW{I;H4EBXPPxecrFnFvW{^%L2)2q05zphL zW21PXdk%Y(IUJ2>TrRaRXaN(vI|)*bNU`9#yhk3&2sl>;!q`BsMf+F+>v^y4ZLPwd zt_G~;q^7C16cucj0>A=6wo5w*D;PvL6ofV`$Opo;HV`KGf-+!oA|al*zP>)nGD=Vx zhIk(3zh>0c)e?BF#a(yZg|4nHxEzo@w*7JfzLhIi5{NECDwV?NtD$5GOB)QCZ`iOA z%a<>MK|p7kHbcr`Nc)(cnPq4-!7@r<+ZF^s$=y^+QCG4DhGi4eF-lG6{Hg2|kt9 zko##{wqHNzJshr9N=>R(?#J_mGdQJ&(5t2~;nALuMixa# zzYYR9<>H2iqQ$c)UL6lWB3_T54T@-vAxg1%5fLXF%OjtL6_tl1nChqbq3l@ zLmO!r+&5GjmdbKJ2ZcO2QCR*itxFpCNg9yeL%<$=3=k5};v_@R7aNrCO+2t%<0L_2 zPp!gu84wEtX&Vr*Xs|5^Nqzx~KdGEIx~BaLw0w?7kd{>$G;kLOqc1LNz#nwA;CGfc z<2O2+@VT~n++SOTmGoY%jz&<;0Zo9DbaeO`SXe~}kScIc_B#{G95fU?ix%#vis08; z%JDDgS^RB+#h+ssTF!Mv0w}knvjSuwlzc*>E8#~L@A_4`p%Cl2sWgPvkPVp>h|o$Y z$Y*&jByyOi%USB9l#)wJ^ky}1RbK^qZ{zbxOis-r&;7FUav!K=(pgLs*bI$K+8y(w8GI7r}4Lc|26!V|MqA2Zo{NM4P{^-BsFaPp?;K0E{ zIC=6UUU=a}oI8IJ4hu2JJ4FBpcm$30Sg~R`Iy&0X-rnwqedRxH$iHUGW;2kNS|%nZ z5RI1b+Ddx%$_NHiNF?SVK&Gy)j^52RP)cE-e}KR;PCblaaA+8l<5LjtSx-+lfsF%$ zAX6#jr!`Fr^2Y1qKl%~=?#o}s-~7%0!13e98OEOX<^9GtzJVY9@NpbFcHH;69Y1jr z)6>%^VgF;YO&&XT6yN;jxA5(6e;-dj^(>AZJ%RDDai6yU;q~j*ps}G2Cd+)M`zR^j zwk+86$Y!Y1d_6s+2mk;O07*naR6Y;Id-rNH(>@4PN#u;QM zTVokm5wWqyf5D{`zusJd-)gP&x1Zo(yg3>`z|cq#Wy%}T0<^g6>*rlr$)6%rfvyTm zX>2HoU?uOFbC~ zT#cbDhJ0sm>`X5XU!K6RsT}q*O!Zp^=2}XTYly%LTRzZHG%!u@9>^3?p9fYu z1~wHmc4`B=X{#FVa+R)W6>Ov^@DSq0?T#t6NTLkwBJ_~MJ$zkfeNqF2!0-|y4h+$?gG zcV=b=Jw3e`9v+4~Kd6*K9X*o*&VnpUo;^&Zk{DumwXd%q;>mpOx#ux6JBw}Gw)t-Z z@7uQ*$B!K&;7n6S3QX&9*(NpXS6f?)`nq}uAgZdWA~@|LI4wmclSVF=_4k_^n^4Vb z`CN|tn(*_&t`)qOQHY08v29zt*JMS$ z98rFT5r}48Ol={kgRndxk(tKed@s%k+_6M3TsMivjwvETzmQ?v_2vp~}1Ksf^eCQY`1vgN zyXzIk$`z6U_&`ze2w0SS!V5Qe@qwc>5|f~+JsiT$iZbLK;M??){7KI+zB4?9c@9vT z9nw%bgK2t8IwAqAiiQzl$A5$6xh{56501eELEhEytA{dELq58_iGc7P4#1zFH}RL7 zD)6h#75IEpIplatX%JC{*|HpkQ)D2X)aw%DU6fgLA~(6(Hn6(HMr+7|7!q$MEbff( zejb@mBUyA{y^G|2H;SS;_zTH^ol0dOZ%Y?xGm7oNG)y>oO@I}{!L$9?*FB1(GZ`Gu zxi~3$t_dU65=Egp1lKkJxeK&4l`6oV&7y*|EahM`N2~3$+4UR{Tf+)11emRD6)0tU zBi8agngTAe*(`yB3wc50P6ERn+qdC^k351ee(8(&o!|Lg{PW-a=lJd4{vG_b44^cXK*5LrMnyZUfNH%e;pc$z&Q2 zMY(UDj!-BEkRm6>1X#T$EU%;Zg)htC-rht}N4=cu9tQ~Q&iGXqIfQxnXF1E~hh~zy; zS^L(vJlk_2ocyAy90l_w?$& z{M$$%DPYQD-SeE?3s@9hRKt62r7gl?J>~6c0m%k+B=t2pAWi38$iE<*%sCur0kMPk zoC2=1LP{xuDNUf}AU>b)pQ}ryb5Po(^;<|Ki|8Jh!QRvTc>2-^4#YAz!@<9&ER4zO zFfvsk6vHN!tH5X#K<}bX==I&iQEMl?i|fm6v{ePs+!RG^jl9sJkxXTg zOs0JRmc9Dyn`|XiDbM?jjgCP=x#t;*o*17%E}KMRK1P}&%_5nYL!RC{$umUH;ib!$ z5sSr9US5uxni`aqmHPX23_I7<)Di$jFvsgtQvo0`xh z)ZFX?xmYZQXlWE}^lDnHch~ae*iE3fY2yZL+qxC^-Fq)um`}d1w+ME$R*+?Y9?mBi zu0C||AUw9=70Xv(_3AZfZ|{KoE5@gudYWPO7cf0N1Ie2sV3ubqpMUNdNS;xKr(>}h z$~#NYmBWf<%dm6Dc9hV=?py__QqDU?i{*;!T5AM?0l2P%9KEMG1-HT)Mr|@iiKc3B=z)52qBcU9!0S$v~&0z1OnM>WE`mo9Q zUPbW?3dz77&I9r<{u*N*mQ8x}Dti74E<5@>bWM1uPI{2RSwhc?K=HjgZrmU>FR^(8 z4ais^HfOq6uqh45bBJ?v7>M^!Le6Ih6c2VTyaj!pVd(L4<%gfe2F1HA`GwCL6mio| zQ&b?p4h`&Rrs;i}W7umsLtS^(RN$Vv3dmd32CqFiHHW|LAH!D%C$MiO4x1jj_L3kZ zEBpJKCg8P8X*3G%ouR-%2oOHPPw3im-fQ~;>|FxK_K=NrB_Wj1qvh9;dJsL1WgW-|;HT+X7BI=v z{^j@kk5Y=wLcBd5vY9MKN5^sD!X@-v=_iOQAenY?_VPHMKRJNsdZuxR-kysUA&gXq z5U&g&TWX^iFyI=R+NU-PF3e;erSwF$OlPq^Rm7c~+&r+X3cFTRVmU+D^>wAFt}Z8- zD@RGRoSw!~f&v5SOa_T$3OTk;S|oEJBOo35Bpw52}4)VqgYy62Klcf^6cR8={THTSCSHFt=>pgoht`$fplH_#n3r@PGV1nYV1Etx>%PBFAxB*=>p>{ZbVDIxYshNdM1n_;~r z>?|Nzyle(1w+?|g#i#`vv^sXFr2q_{^tXL!bNHXYlcleH5EEZREWV;o4BQ)(VDY zLuvA*2VC@v1&hNwy(lPX*4ZFwXx6)ktdm2+Nns*CgY$`tcwzP>{3ykHs4n7SFowCH z3kmmvi{yWWc;Y(OMX2RduNjj5#@MH<^D|6>gEcm)Pf%58NR9MS)4h42`5iq zz|im*#>S`d($O9~_R?iMKQf17^oU%p4Pi>Wi}Yj{113CE!yjz`C=TW(!Fl;)8m)u# z*pw;YA%>qnv2z)AuW3e8T@-aSrD$lVgFLra5-mkA7=mrv{x%YcqKqNRit=()5GL7vC0YChC?D$Fa_Yc9L9OAwD#K%8| zU;gD^#^)Hm{*_<(Rs7)}{tNuUAN&D+>6d;9pZ)AF^4c%qlb`q`BxD?oMk$AdDuTkM z#(G>!%}w>FtE)vM906F_fE|E5i&$MD5mHJ)saHsZ;2{h{!6Q)4zwCANP*z@s z&dv_Bx3@t;?Tggb)`~@HX=&ztsN_92Iq~&;-ojJJGA-Da&H8Fy1L>7=m3n1g(%x)h zX;>smLRnn)H4ZYx42IJqI5Kw(PtCoEC$fid)EK}}Acc9efV|=`<&TP*5K~CFT)(t3 zKrfQd-h=-vVtE>9pYpJ^-@zT1TnJ$7ns8B*1VZ#Y`k_CjWn~~h)8}#h;w*7^A8A0b zu8THDm;|vQ!5;EB#4NkbE43O2I}N<*^SS(*^f|nO9dxqhmlmN`o3a8^q{8jG={`2J_{6+UL{ItG?ALJ4Bh@c_LS7jTJ|K9R3 zdS?FTL|f2;qzP&b_LuCmr~>8}`GlA7y@6u>Y_VeH8>pX6 zWg(OiM2b$hf&3?#3#kHn(nVzCxjWhj*PpGr-5_a|QnVZ8KPx8x7VlDb4^9y0P8gOQ$ku z9892VIF8$R{UaNi@S$DHuw_*P8VMLn%fbi*Yq;pfSbXS1AHuKy#;@bof9=ub^2$npsUW!unDPtaP=bBok~`i5G_%NV9XD`X2UvM(WH`G#R>X%x5Lwi}=N)X&lT*p5OW>&vuZ{W^T==YJkw z`qCGD(E905|2#hbtDnagzxV}wj9#`CE0)0)z-U_!RTr%#}s>kkRF@3m1fgC@+T47g&<;FMx*KI?>8nK00vW6BP2=e7JffC~?Uhkf za9d=@_A1VAAs^(vgCXb@ zkswOh`MB(aGwdWKzwjX&sscWd_4|4i-HQEIFr?o_k7KQE!sI|CN|9@cqK8YVJO;CQ zzvEWwW}B;&{O%#86qHi_pe%0$cX#*V(SU;fe>xh5d(#S zLEA0R>nkt4xI8CdLI|>WygM=w6BvM7Ie#rl67k}-wl-tcs?}JtX6>s;UN-6KT8aAl zI#`y4A_0YXy7IXU7AVc_A}yYiZ59$rm9nG^*_uPlgTecF+Hu`c)S&9s` zQV1|Q($rXoHLF)(!}>L()mLc^)~{bh&s{6QWeJp0zD&$^OIL&UN}hqe($kM4M^EA4 z;bXXXxd-#?JGC|`zYUvxW;UBfZ_gDRI&u{I_8q{H;KdhT^3!Q;U}|cH_Ii>0j${A9qd0Vk#Ig@?fB%8Q zID7sgW@lnPAEiW_*RK|(6b#nM);27Tc-hPxhGLg-JbnT%W{wdkp2ab@7Z==N^tt1h zQuD}I9u#fSQYOr+Z$jS~X#fFw0{G;`0+4B02I!zyam#>bc$_p+<1CYF|29}m34ZKwi(A=Os+LNEXf zIX#P|xT7+Rj*!L507=T7=FB?J0hTP@js)+UJffeVR%i-Xke7!_d2a>0h!F_rzLd)0 zGQlHN2|4#B74tKlOj92Q?Y&sYbKsrEl`Dfdf3_dzdna&lCW|Y@0EVNL7$smFuP;Tc zE{sgIjbg-vXDTQHJ>(r2b6JEZlW632qhnxCX$d~iR*MJLwPE+>cC23Ah>EHRM9+Dq zUwHc!;J6EeK*MAkDo_R?r4(Mhco5*kpI4v0dL*8{d@f4>m?9-#hj>1pXLf1bS2Nw9 zO|e*HdF0RXe;P}vL!NSotO8*D$}^MWgW2>|J}DIP0$fv9k24T($z=YzsH=E9hS}K} zBolEY=3k*?Vjh`HnqD`@Pk$?alu`t_Hm0ZNaDbrg`4{%#{Dn)jsXiazJ^jq{n3$Y~ zY1y2h6mW%;lYK88!kIJY(c9aLLx&IJsi&WTe9}m3%MZmLKYr5xp5^)T7tq^3fG3`K z3Qs@%6iysJful!{`;R7MIoUG|i@-ENpm`ooKKT@mA3u$e(Ft_ZV}5|3@!98I#Dxpp z)J={<1{PJ1x4tN7Wxys-4Cx?Lp@_M}IJ)B(aV&KP2Xp6exNr%_3f(yA^rJ^jW6sW_ zXqkQ<8zwy(3O8zSycQ_R%PPSFP(wi2HSS>}LE@%C7whR&lxG(^Cq3We7|s)5vV*(! zP3RlnGO)C~4>X`@I5P3Di-6()o3eo+dKKjj=o9oT$|rNqHfdaJ(CDvLn2rKscbaMC zQ3wHx!UH#XaoOsNaF9a*MXvyxsJ7lM!&=pfU4b>&9axVY!8O=yt;8zbfexz?)xj#5 zrj3GEWNr$4jf|Ro9XkSGjvYWxDvLP|YJftb;Nb9V0{=KPfiDkC;EC}WT;PmZK3Nmy zK--_p;74OKI5w9=ir~%E3U6kio+-ZO%+5wp2jKEVR28tA1MxisiXUb8?icCJ`BehN zUurDJCplOPfZW3HYF)sjWFFECr%HI0n>SPBQktt8kb&Fa4XI7}`GKT4O zl#j8;<8#Q-V=Ql}3vdVPuC#&b>MDdnVFKzoR997C+qSL#TiQYYO>P&_k}xW0iw5Ns z{fVq^hLln;=^YFZELzaWji5W-i__W5IGQJbS=;IW;=(+Q+F0r$uUud`^EJxD_^fV&x{zL$euZIE39wUcojjA!#0%jA*e zAZcmM8KZ*9L0rIxynTIw!1C}+9C3n9IrroIrEv-gIFvV_Gu+A1yI>U42xTWxI)4R~ zQ%A5OejJ~xa`F3}_4wt+ay&u+xuYzM|ruM<5gr9{6_5b6=EFHf|4amJvOj|$1R}a2O9StH%eoF2|ltomjP^4z)F9u<5ZcGQB9*BB=BL z6bf{SaEq%o5iq2ExePM*AmL$`Z3IipYcwFbQcCe2nm#c=L4d{H8}Iz0**`iIXnbOd z9>lY}yB;3=zHychh?I+7Me!&~TN1CLyx7tZ_t42O zv^=x8z2C#mUe|wqv6&z;$jL7q|E~Z=b={&YF?b(pK+Hzd2n8$(i7m<}bL5#sd0tVz zuXw6O;c%yr#-#>@nG!|En1aQw$s|dB;d3+9=docp1d2tv<%;wWY8QxjHeq5J+Kf7^ z)~(oTtiYYt2HYFkhFv8a&>3z+#4aJUbde{xEHY%Rw1Pp0N=_m}`5ZvL{CUmFp-^Fn zV1c^9#_}i{f;Io^>SDOtDSrfb(^v0IV<WIBz;rbftr!pY|gm>eJT@Av9eE3v$@6Y}Y!>gpPl zMx(fN;Ub=V;z{h?`vPLIIdpZcL|bbs&Yn3(;CLJxH*Lai{q}GBfbiV8^GGFA(1s1e zv?1V8%FXAq$Yc_jnw+4wF@{_&hq-thb8~Z$=N@P0;z%S?h{qHDR@%XU$53`0C+E-Lnb`d5{6Fv)*S&~WQ3h!7 z3<^WTh5youJdaqJ*j2T3QbO7aR1*}raKmKeP6G@xiW z0`|n7*o`wX3Wr0K)Bpew07*naRAg)*76eAi6)w~(9PZHA*QIg1O=C#BiUDZ>@Sky% zJi_B+w)%7w#(Aid7}cQ5CF&v~!2p z&10rTT9j2O1=BF0wB|UKhf~b+l9a~HHLI5WdU~D=GP#sYV=S9Tfg`k5O4_VXlIACo zuw5ic$E@@i0Z~&!c&{l5;E|dL{?)Q7{6A}(@durC*k#S5JT-_QXR?LlB+gxU8iT`U zq1h1u9AL@lTAn;yT5o^`1mqjML3O<69bpSqwh66-u^1sRO@P!(z&6D}P+l{=xEeXM}41jtC7m-njyRTYp+lFBn zzSmJek5Zx$Nurol)Akh{dK>eFybm;9zAQ5u*k{?mW@WBlb`{S_`;yhI?_hI{V08@qOH!`$o? z{_gMo7XSYL{*UNJc#8hR^#^D@4zDue*n$&I7SILZJA(4 zA}A{>r`>3zlS!OEe;&t=A0v32#fvYzfWP>Qzra6zV+6vuJ%f>(rd&Xy#|jEDBfSP0~;f&&={;oSaW>ROsNdY zqagW(gcnb|X4M>EgMk1z6d|3-LdG(sUR^6mgE2-cK@&{_PVq<_1ln9(Qx2rtDl@-8q}a4|w#yO_%1z+4jFACKYhhosGBgR^r5 z^o7DWUlGQMpn)DZm?dR6+RFbuLs_{fG9eC&=j*u8NX zni?t*4hLXxawGsj%9pLQhnI!Ay0dsLz{Y40U=*Dq8{^`gkVGD&A<8v5TVy!feN7rk zw?v|2r4&S0T4{K+2Z#2tsAIfCi$~z4*ejMsOF$FH{QNvzg4$3didAdZVe8gyi1J!* z-vE01hA=)k|-CpuHC!P(b0}|YuDml0@Q~d zdI(##Y=(Si(_q`Ds1W^WDz1>9$LM@7PR<_1bMpuBRN*8J>poo3)0j~6m{%#}wF8g& z3}tYr($K7=!u2m=?=tYpKrLjj9aqqMxMJMH4tf=LUvaT{z{N6#q-zs^cpU>pz+gtn zCj+*7#EWdW z`X^|?C5J^Xk!(vXjb)JlZmWpkgSAn}i!Jgo?k}}g;nVeHxWBptn@U4y3EBv-EO}N@ zGp^p$v;j@^s}Zmx2>ZSc$_D=6H^evTUaE$*p-CDP2O`l4j@2Lo}WBDpT-)ya3N%&KVo4#pfT+h5NGJxp~o|9ny54_ zG~^XJG7h%68oL5P>@1Jsp5=|Wb7KeAuW3bNOEpTOVKzb_Pp_=Y_TsDaC+cURu^Ofg zgP>FZg~JW>^ zk!85qWV@W5n})nF)6>(#JpGs=SWIWqn3$O0@c?3TF?R3{3Y>fgI5BB!ZNo~IwS3t! z|67^MmUUqH^5s0Y0*!U`2xuF*WFE8gW9Xhcivw|j#oS5kcQ4}b&3B?Nbe;O_43F2S9~p>Zd;1eXvXxVyVM zB)BHHJAc3DJm3Ak>)yMnR*gC4Bc4bQ_M}B$CGV-ZPGaO)0O@j^@4Jo1-xC?S8K}Np z@xI&7_(d5COYdg3D#DE?L9T+~KjP$S_ODDQcp> zCSr9VlL|hWF-E~n^+IR%I+@_(Ua64Unqyoucfqe7en1eM4Cn1^i7`Qf7XAtz;+mbpn0 zOcpLx{(3<`yRqaGEkk4&h5phUU3~z#6)b+#l%Nl+r~u|W|LnCP9=|jT9T7O0(!)nB z5;pDABmw{iH8l4T8FATxC{0?`wvL98-X6M~+3dkA8o+rY)0DXh! zNuu9=^oO6prW2Mcczm=3iezREU@x$LrX#g@)FVwKpjO4LDLQ<^E1>fSo~KY-CcjZh zOoKggCN@6M&SWLTpd?r_j`9#D7Dv?&ujW8;apf*n+_Bgrt`b;S zUSy_T3^X*Nr*f9XZiEA0I<^M9dv1gT@4**)z3*?CS>M4vDGGd7Kdjn47~*a61EBw- zU$0h+x4{0=HjvEy^D|NEJUsTTzOtgCxtm*zDOVh>5##LKTFCOUc9n4he9nm&PEC>e zZ4?l=vv}eTp?q`2#8-on8YDEpG`VAbwo!8Ae^;dm)!0zh+DMFvhZ=y#fk?~-b=Go#_ zv(=lvqE5m;I5)?7x35P-u!i!&k)eqBEzE=J!w=Pv?P>JX8k#94Q;g6U4-V@J<7cWo zhb7*H64yet!kP%vWV2(g4S*8bHCdK7(P+$ zf_}I_C~+-iE1m&NWvy^6$;27nBHT~R#!z9^Ne~DJiOpzBK-R2AL$$)bx4y8kOoJ6A zi@;<;eIjH?Sy>iKA^8+0T32YRBgMlIAYYJ{mo30R`KTL!lW)&taopBV`!v0aaIE!P zA5YR|RXWQ~G}t=g$<1=#CF!9gsdE1b7lxuwool5=Qo{%z5NkZ52pF))U}N*eYx9o) zgFU~j%pY3Y_Nuy>C{@L-A`%k8ZL+2u?Yqll9J`WC@popdYzhTu1aPE=LJ5x1nkG)m z#aYGje#sv~5mwC|u}E=$Bo$f{$&K21%HmBxR#miOldt7bL64T%sQq=#-iEvB^Id9M z0UYIi$k~7C_00{Q35MITT9=N)0rHdziA0KCZsLJUs2d4_%e*S@48{hXK!~1`1<>pW z(G~`l1v!?iUtaZK&en6ao?=F*&(Z@;yJ7nJ(|*#wvhk(_QPo>5aMdd03F^L4WB) zCXMK+t@BWN{J%L}lSqK0shc@+S62W58C&X`t1tV|My3t%d}9Vl*9|GAR@A*A1Zw;n z^L0^kv7o4t#9EfzY{r6#H#%gL7k;9APKQ6jJtWYOqnw@4Lv?$9a~{uu0QkW$N;bh@ zxWXV5;R6eID|f7tK*?7id@d$FZ7(hOu@Q6KmK!fY+D;?5NF^wXs1JXai}cyHUVnvp zME&rg93H2#+Rg*;9Oe^cDQebeSlFSwW0(@^AN3LjHEbPk96Gdy6|5|zDYr#n7gW5qr>nXPKf9}CRy`NNtc~Bi##pyt9BUNfxr$>Ley_?|6hcRW zoKCIEgh9tYsL}uLZrrEiNbs-nwSKPT*Xm@eTZw0Gz7|=1FJ3h4YF|3GNFO*jLP=Cq zB&%~K^u6SDy1=G3lAbNKaEKja*anHjnHBwM zWGfW#eD4E78)O$K(BOPq=^X!8{acS+lfFSDWdJxZp$C{9tAHIYU*P2-8rcldBO$XD zBCdB~_~8PXvW_k1n+}X)Gu8iu9ijQjE6a_Cv%DYj{a1*iG*k|QLS1Dgl7S9SacLp) zffaSFj|x4HD37y|pZh33`xAVA zx8ZuZ3n;%{P^`N^c7_ofwU9-dUt|W*`fvX) zBZ1jj)ks4Y1vb5cGhVuR%I_10NoE4It8FzUwAc3=&88zpIko4%mX15^`Tjm|72hVv z>w2e(pGEclL+-C`ECiyY+w@X#q(G;K8;!IlrB!X)iU#M4KrM7=WW)bO#M>wrsv>o- z1I-TnGRD7FJ6|S5pJTe=NDNjOV>C^%N&oMFXoVW}si7lMu7mPds86$nnQ0a9*lP62 zAKYKZ9WF6}NMyhj!3g0&WFMcFp`P&8>*-B#E7L`td|nTn4pcx)Fbt ziGE}M4i%utsb#1KUgL4Cb~o@~(sd`-Taj=mPEAOn40`?sfzlds?E&P~s#f+Mv-Yi} zTv3ts@|OmVxQ{JHo{wAUOWQ|(r%oURM z3q)MY%rd=b8d;t`rCFqNsnvfD43JaHe4GYW0=W#+Rn&58>PiWfxBt2f%?lS}YoXZJpGVgQzxyD&BUp@=v{n9VsE z*mga5*kecm({ zIo-Wy{PjU|`?C(NrbsF=0ZJi;l0xk9HEUJ@eU+R)r2 zKH_yH{cYk48p}fKAlt2?WS?1w;iP-dxPr%&gBAAW~hf8m4MzX&C1(s8iT!z?V%mJ@HFhY%*V1kQ;6A zxhCGo9&BO-iSkrA5)k`w_?YS4+7|gkw%~Dbkz|^70iz(jJUO;SZ#?5Si2~V%)VG@z ziELD3qIn+*a0a|}Z9e&-ldrr=+B&cPq*>Btrr_C_1-UsZIgu|MkZZ1?o|MKZGW-mv zRAXV}Y@(GY&{8v4e-E#$%S0zdFINRPiw8RGGTdSG!qBB3JcZfgC2z4QWu`|P3L}7? zWa!7em9h=${>@4-ZE}KeM1^hkFR+s)v_<0`4%+ac9pvfhN}a-WYZxS+F=CBnHkvES zLoebr{w_~kF%Eo_F942|1XO086{dZyW5-&z9vcRkVjKo{M#M*I2 z=00*8Hai_!!DCv5ggtFg#lVt7$MyFY)McY#(CFgK?EZ8`hZwCkL2FlCF=w|7>DJqR zA$0AZ;WJ)^k-*gY^SuVM!RGqhFj35|_yD{E*QiwHJSjL3wy%g-kw5p5Wo5r&zpVb!-Zt|?AZ2Jn6_8&p z7Wy6fgV2frMxRji6`OPgYqL;_K0N$NKE!-yT}r{{sW6-Fy|$Pr->#|`^2RsK(MazrxX3J2= z$=fKsd;UU}ZAjHtLw)OZx*LFB11Uw5(wf;fI{iMe%}D9~_`C|t%T3sk6pR-0C9${_ zEIZM|sr`}FM@3j7)xE-cP{}82k-@1~J!`|5TW@qrhu}^Hy87AcQaXxpu>D)KU^QK5 zRkXk-lCW2sF?edJbhWM?^ItkoVRyn*D-|rXEgFJNq;b~}w840*9+g#8#&k)!Vlx0} zm>%E=`Zm0M7wkx>!j?O6P>_0kvhKlSVNwz9wx5+A(nn4r3;|%!NqV8@-`^1GWD(Fv z26qNzT>dW78=jn4rIMi}KUt67rufACQd|iAglG!=o4-X;MMSP_$llE)Rw^r0iTjDcuf=E&_N z8NAH21-GztxNi-n;WhJ|!9wtFU$6+EmWc?kfnA1(Rx?|?s!}7HU`&&9lr?ChSZzV4 z0dcMXTlf%lC)-#MsC$dVkkA8^d_@+f-p$~yp<(E;lahRrIU zYZ6dyvmQmUD+w#NNdU>~ad`CAX=X>ufPTbkp zdLr$9`E#)csiKlCU8vdU`;FKZh=o2d%Z5an25-0?dJMd{EJ`h+CCpSQnf>!8a&JV% z>_g$@>exbLaHablRq$$G!{_}8|7y~mb=S=sor4g1vkK}UkHXade67ppv?Fovvapz! z#|6`77vD9BOzpjE3$q6QXo&!RiK#4(YXh40_V#P`_`Zjngv3>1+%I?BB-&t=JlvF^ zKlqk8U!y>}Jd@2*HM4@;J(oWqN=%f1RLV0qxqJqHs8cyWXFP3jS zM?SJRLOyxcfv72XRQ^|JEb85du(VjUvkq``I1|MnifAPk7ZoMKbBF4_FUr`82PJ-Gpb}OsoI^0IHz6j`);v`^g>vXt- zf2|H1pDb~3Czono=m*~IF!_^ZLL{oh^%x2M1g+3$kb5$^=L8w^jyQ;3y0_@EO<66y zzDMN?nHQ7j+#vyVz=S_k61wvQ@$AS3j&c(l$)6vtrOIX{;^d_8gZHqy^1{%uJQJ04 zErX@1Qoiu+#?T;0FP6o2yb~Wc;RIR!L>qG}^aj|zcFs5?&5Jnu%r{kEtyUv!Uk^5x zMCq!bp01S4qB^v{DHfe%?L&ilC9m7_1qG%&GWgT*bu;rZRq*0^@IU^{%yWs0S-C+h zjrW2YzRXSju|O~RZw3rJ>h2@k@y)UTJS&ksz`!*q+b4UQO}T*gD9GbwW6%9PXNGlh zQbKrKD0OOq%Mi_U8;_MW_cTO}9*37AX=&nU>*UjS`XYaRa9Rbx34L`Huc@w#BWh}b zs5TU`v~Lcn@*Wd+NfaDoK!Lw#$csVdo`<5Hpgav&r@Fh?PX@Q&05NWz-P&pDh~cn6 zzS~1;ax&}|Tg)|zWGu;IYD9Q&ts@E`6px;u(TqS6KXtB9$0JZUM3H}B{Wk@44ZZX; zI+)Zjd1WUc9lejS^p~9LKW{0TwvmGaE8XtSl$4CGC7kqIlni7Xk_EaYv^`ygxTv0< zqsLtBDLO9veuP5F?3o7gs-7m4RgR@D0**dfc#~uoA@!!N0GnE7V`tRT8T`ZoC}DCt z05y<(WudYa;@(`x#J_fn4IYk%jk_MpZ3m%WlRG73jAEPOt)3tz8r1BRVwsdeuXk`L z9h*W)Qvr*qPA?c^dF0^3b*KX$NDxO;q9cdIqfi9ixAFvbn-4bTsZw;Vq)x}j%;Tr816PJcWf!u*>C&oI%~139 zR}VM=RpP1$JAGkQh@=0OgqzvU(Yfi?TgA6@(LT&Dz)J;A0lXDo$J(qWuv1`v@L%AGa}oqQ1D_}CJm*h?3E3ZPOnr%ej)~w zu#D;BTQos8HwQR~Ag}*{*4l+Cuh*74mZ{5GU1Z1Rn)U}ozazA2IW5t)pCWSz`j*)B z%6V~$E+s~IwTwKUT@Yf#_^%EWK>4$>zZTK0fJ@RkqdPhflt`cRIqIqB- zY4o6Ay`UEaL27RvZmozd3xvy!PNLXI#HZ{t|mL9U!-` zLE9^N;*L*Dym=j~C%PHSLgYH^;GH=TK>F#|_HaBg#5kibYqZ~9(xF9lKwnD6Dx>v@ z{eQE7QN&D7&|WEPo7O>(F`xWgI^D?cQ>KK^0@0rZpLw5u-R?~rbzJ52T-n8+at3GxIH(8370EJqgbQ;h17=60fJLE#{1CkVH0hVPN?i_{>hrm{5x zR}X;fD7vS)ZgsvMeGPOUf1R=W%#Ttd>nFu4IDW)>%lP=9l&1%7iJ{VY0b^2BJ|T-^ zlJSq>)OUe1MLYmk0g=i4L4@I1d~{EHciyUt8L@Z;qvY^qC?DbUb<`kI*Loa+AKI;& zJy2NGzrpsgF_Y>F5I zS-P-kc=9*fw4py*3Mb5Md+U3fH+Zr|AHGd(1t4YqX`i=X2LF>H7TvwI8!u;m-+LAg zX@1O$=oRE{_Ht^Du#<~;M3q~n_}-M5Xg7J0K}>PUP2Lv`!BoJ%Mp8A0j8U0q}YGWA1z#*^x8bMGc9+_GD*2SNqLGg zEtl3bjxsq4ldZmZ$~sBDbZ5S!8i&yrh2c=m3xbsm+=iGY7idrKjNtLnQW*;`uq72& z0k%`yL2mLO3TZM7Nh2d>NHi6*5J6%Z9~tg%<2G1g%4=qD4FVfqTa9?{#XwKpnxlXr5zzj}78T0*Oolc6!I>b`KT*MO16IgIYR8?7I8{K|E)}92pR+8#Z3C$dj@^q}J zk?8P4essMqlmoNZjzgaUNcXFcvr7=5Q#pPJz-N9A6mj`p#AMZDj5<4t`vN@_T}NSh zyLy3d;kpkmlf)0gtD}7|zt2%Izn@4ndlz^~3cLb-WBo4rY{--QM3ve{YEW!d3Bes@Qz*OQ9`RI{7nMwBu=8@50yc! zn+q{oBuzi%kFE*i^lB`)zM2X~1QF$!5%?0l99x~rSz$2ZsG0iCL9|2uVda;2-`rQe znN!xUj>Aw%U|koLq|_e}t~M5{?nhA^`J6yTEw8X$#@JOR*`{-)zau<;>SL3YvFFRq zR`Mola_mHcIJ0n&+ei+y5a9uIR*21=RXFL6ZmKgc!M18Lt<_hrn#jifcKU=K19cc#HTHP zK1!^)U6!k@3BKk-$;4AB7xaQ!50UXp;;AYn4GcB7EG{T8dDqAt#7UN=O)BoFt*gXT zGRR@m`ZTbR1@_7H;N}XIOhcjl+G}A@JPHLu{H!hZGo+=9&e~?fN-~E88Z5y5Cytsg ze3-X3f&BQ74#|ho@f4Uv-v+-kW*1IfolZsrI#+n?3aiVV$g~5iw|uoF4GFvwfB_RTzt_nCMZH#;e3}pe0qst z6nv5;ODq*==FBLvV4_rWI3kxEV{l}s0Qr{oZ^L@L_Q_~5PnG(_1tLGDGV-JKUF zEBpr4BkzG48Q9NgX@$|oBg5?n5SoboEV6>tm~T6>+Q>H&3hpuNVX49Qm#@7`?o0x!6X0+wI%Hn>botLUKhQQ z9Zl*HrQ_k;Bspq4@$8PQx1ee&3|7k3!*Y%Kufr}CoLB-Hp9E|{e$8(_2Z|amV6S9j znT$d^a2nDoUO(_Cte-sUVfwJnE*sVYp2>;YBw5hV_dQj;RV!9K=6aQ_u`F_tJovU? z(SBm33Jk@UtRTKzv)Yr}#z$q!H0a{FGS2eb??UMDGEz7SJ>VEKUwHBiLFAFG+3`;t zM8dz-ptIj~>4WZ+z*RG{WI&gZci_Pvt?Phyr5k75O`)79T%N1df18}wo| zNPJ=0&@nS7ik6^dziZhVJ`Q?iRD56JNfOuuf4lZ-40^oLy_xwyZSTGmDLj$L7k^r3 zE~&Ql-9Ex#Q%L6Z$69+g^O+w(LhM3HD@GFQCA~_W`A#D{LrykBo#(umgzh?F1A+S) zfjSHj1cNVSFB;lsl1Wr!^k~Pu)m4NdHZoi!U3%C}n*4O#)@{5_i+KPh#L{Dp9qwSO{-1$UMf3)J}N@XC=(k7(~mlE+3E+lqj2#%TOCjg%C!9u5S zf{#B5hM%-yHq#y~bjaQROO|49xW%RsKmv6qMP^P2Kvp-aRlblQqVGd3$4dUGrdM`= zp*MG=TxCnLk3eUB6VY#<#Pjl`tRv;5`(w(fQ+SGatTvu)85RI? z{FtdE+RZ{OjbSFCgp{g|*Np)|Bkr<7Bmw{;CKWsw`g{XLvVd*|nM7@~=4lHInP_V*z1S7-u;9IihN?(e|hT_5-r?(AAqh$7Y#O5wum5q>M@1f`OrnJNTkN$_3zT!OC_NlK zOk+D>p!?>Epsc+7zZMfke$>Pixu3}o8@CrdjtH;5+ceDj`)cq^R^puSBr}t{{;$CM zVf5{>Tk_6h$3=5?_27vgNJamX~ zcy@yrlYm;xG^dsAF-=}*hL2myR`gE+0xV7?F{ZCXTFyDJR-5PP2sG^j1SBPtU2`72IBlRcuY;9QwY zg|XOXXkIK7Rv8|8Nq*!L7bj98G2Q$`)o8Zq40xc2V$5`~svV<`sD;owo7g4DN8p@p zE$*%l*S3XN&0ec$ktxJVH&A$Nk1dQ@IWr@RWS2)1| zv{y4&GE|C#9=YJ9r`auaTKSV6GXkvxaj0>_?Y*!7=de`pO`+9X^S2Df);>>mzBvE? zE^cyrW3R!-{41It5{}Ar`E16tcyN(_51UGXtQScq4gw_{STJ1VmpdjY4G5Nt%;4Ou z)tF$<%|pOi77oD5$7*NwqMS7Oj3tF|&Hd=#XJsNMgdwzg>fyKni3;dfz#$El;n}Ha z^WmxFl`!IgsJJ9vQfXIu%2k-kNHC;b(4y=9^2xos{uA|_9F zfdsMX$Er0QMKN@ zu)8qB>D@Rr^pFM?`TGvKKSzc8h>0pVAqybO>2mg!l>S9Y_^ZyyPO+J2Z4BWRY6w|E zTm(JzQV8Jopn{!pbaf&fqbz5?OWYbb4tgVw`#2DxczSisM8aPBv@!P_GE;PeABcU{ za|y>4bc?SF8hMMVGDK)7Lo@xXmYE~=bsM>U0sEE(uTTlQ$y+FR{{D+>9&h4lT43v1 zZvMS51DWYeS+pJ+*~g)Cr=nPA%m^Z0VhcmA<9w@OIoU^>Rl6j)1q||K{`W66p;Dxq zsY~IJ05Nmpz&{lIQrM18Uz!OSU2R;jolu;6muJ6LH3-ZR+DdmBfopLi6br76G2y-` zAf(F(^GNkRAZolhRYodYge=2h1E>lM{|#bj-6;X)F56z`q$ z2$8K{MZIysQX$iq_IiN<2p_tAS3TuEbm{%r3$Fh8n}g1YGdmq6pOuF%cTWXbXcjU{ zb(HcnG#z}ipTZN9`U0fhd37+3iV_-_nD=x=0$z^fDR^FDZ_0Yd>(-x81C4V}cp*TzuKMeSe)X={f_v*O2W8eRFB_;*! zoB2l-ofrVUP>HvT=SEw+Gg>EKh5%9DmPzXJbM zF!Cn11rI>vO}QPx5^XoU`khe|Ux5u?mnZN16{u`N)#nl}-%eEwJKUL>Si%``zBU7)yWad=G;>KY6M0XH8tgNrU zg^6klXO%S@7lWvK%L~6xAf6x+gpp$M#xnddA_6%Qh=||2@Jwcg{9LZK1#KVAJ;nA! zADBGCGzLQI1>0Z9!}xVX!zo3%!KbRM)(;}Fh0d?czVCk%XCbUBgES(RIMNYT@j-R zrYMVSy-T@MJ8z9aa2cW$;Cr+~$R-YgGroeH5$aTQw1#9d)U7AVp4=1{4RnkdJh|ve zX~zAY^T+vw&+8Q}8wUrnl5`nviOsC(-~4XmSu89J9P?5Bnfgz@s%hqsoDGXzqxOEK zm}VG-n0+!7GLK#Ib?Q6>SRbi}_=?Ql^hb}pxE*v63L!G(myt@HYDptUW=Yy_N7Yfq zsiEp9RP8tgnZ-Kn1GVlkn^Tf*dE}R{^A)gNxpwtlYT`ADR#tH1<3)(G0s|?X=%iZp zqHeEV(cgMiA?tb{jp}VK;E>auU?Q%FmM5yA&51-Qe@Nj3do@QO+F}zINX%~O(8~ot zWXqQ;pv%i_VH_|QzVer)QxP6KvkO->F61bkz%!PZV6$w^d z55~@sIaEjAWhL#u^(Gy;6%meE_0E&HAG%>H4~c1>vVEInH9rt}F{%5D{=Q}VG+9$@ zKH;RhE{?N{@~PfTLrqKiv|x$Z0ip#)PH z2)sqJm=*2$A$$>d|3NH@{d3N$(X^`xxKW+fIdt7Q}^Fue> zyB1!(y${|t*>XabWga$$Ggk@C=K7Y%+Qo$>+=d`DFn9aX@0KYr_I6bhD6=OQ=i1AJ z0i{Ncy7D0+t-SKIVZ&l)g`;oL-|3UCTx&quP5>cL4iO!2ym)%u?c8%q0W^0DwSlqPQyJmCt2-8XOzcJN+)QE7H(9(-r09hsNHnD(K6=6skC7NL01pDJRBM z00kYptB1oHFSnPl9~_e!8Ig(b#L7$@3H&{0Z>p2ue~pBXD~F(OTzh5i5|iR`gYDw} z+uB6I*olbc-$5HJ3JF_{#_!ToXEhj>PtZeI1oZ(DvLwPGYa@9Bw=1Lrrx`&}iw(49 z!(YBGZ-rR(TzBX`^t>TdJ^u-cAC43bIj&!t%~gf?zVHsql23XA*G6h@kjZ34i(YNA{8vkYibOpm1>&e|;ehv(HZE z_u52A+;s&nJGXPsAH)VsM+S@e;?m0FpK5nTi@Uukar&Vk36()uTbPUmQVNacj{=(_ zpxGjE+A$YV?bz|4(K5Us#wPSr(Coy(8C_Fxl9!fg$$aS_KMZBd=EhA7)LFMxjXxOL zJPFYL9vXN~QiH$j+5a$#>QqxXf7jQ!miXxmqxg`)9|f5*19@vU28*!hl4 zfA0vk$@ha!6n>U~6p}>bvElcpteG@1ltOl*Gh>6Yq6A6^q^bEw@e&8)84H%*-~4Zt z$J4*|=IBvXOJE$gRPu}#Kt9GbG;$12B?)T|%PZi^BzLLx4hQP^q*Ii!JHP?9s&2{m zi7({Ig|g_7aS1qhP?DnWOt33PE>sP=pM_~doEJ-+OCNC6pM87DQ0hX72M4Fb@mSgB zX^6l_8`+psm=T1Rk@9Etvq0F$kx75Uv|Vo92s_>=nZ!oW&~x|%#f~F0srww?3Hn!# z+Bt_ed=vm&L7aQSq2A0#BD1%lTisDT*pm{iE1oZ`B1owgF=Dw_v0nmyfJcVO!>-E{ zBDS|GKbRa!<_|>U+zJHj1-(9GzBUAjKbN{A5~bO;KkVtgAbjBcdp`l!6jMDe|OOJnjtVW`ulp+>F%cLv zn~xhzOJlJrkkUKmL!_gwr|7zzwbN@vCcllmQ%K)%h^EtncCnl<^(2T)H#miA6n;bz z?es&NuGAly7(N>e-53^1M{fHq^q}2=x_Zc?2^!lfJ#^T>1a@DR#gV`?+69TkNQa*> zS@svyIvd$Z1bn3HcCVP=-Qt4JPWXSaTk>sJHUWXilyc>rwxc}SAN~NF>G}p5bVmXd z;IAiK;eHb+P5$rVOx%$t6>_pZ%Up`-R`nhJrKdwx-&E+~Qbfneov)OU^N0S4*!`P5 zmmV3O+gL%rifM-(m8TbpRY#Vmr_!L0i&v>tE+#PVf^?%olqq7Wx#GDT!f%V5ygrv0 z2b={+B}dj4$NxU}J`R?k`xK%AJp@9ug|GK&y zQ6m_@8+s`F{ZNDv3zdttYa|fh93ANl5VmZnMQ-4cK&i+GbdHBl6^k`{QTg5-R}th7 zyqO_^!h+-a^8l%A{=nCMKm3S0O!S98Aa0>h-9l`jLLR!!Q*14xVe@kkf$zQ&aXA-x zXXX7E`9P31c_fwSlaoAOi(6-X6a3r#NU!PtD4gnGgwRokmW^#Y)lAvc@U;?StrnS% zo&9}xPnM$!b-hMQJ0$zNcVS}}O4~U(RpR&X5mz~*sYo4WF4g9=aE;tW-)u)|$_%#< zLVW3Ui;jXnu12yq+<`$%u_Jp!_hUx#K!9}o4}8fSop>YNkVt^Qm8b`Pb9$AGUoGK* zbj3$z6qIx+&Z>LLzIRBk{a(au2tUsA6;oL}TO`{bRee^qHg(vrZ>Y`(ev2e=rv|?K%3C7k z@%=IGgCn-{>37PsnV?RuU>EbX&=7?I>{>4wI{6gLFCO{DoaxBjtxJxu@}#&(mgIs- zOZU!1Kow-4FKD{;{ruZjj4M&Sb=sJaK_-z1)UAWn0N+x{rfG{ z^&_g?czySOd_0jrhq3h4-CMx{(X?qcRw^`XF3W?SZ5}_~wmwKd-nTvwUOR#wE-o{I zo-%lSZwZD+XzQFm0wMiV^D3+$1VpBXGm+pMeAap(HXigDX8P4`EGv1kEG9|94j1VD z_ST#Q?}k2OLR9V7`@5L`#Y-aAC|VJfeoV0AlRv721ic*eCc-94SwKf+=+%rK%WF^xVFYQ=Uxe02lMmM1H}8-6AZyp=3*OE{ zHhI#uka3e&CmqCvI1*{M#J0Pwu?B%eG;&sZCW)>>UwncNt-Q-Nm%e1!wD%X%Eqk7cxxX>2w~d7ii8%xU zGJF#sx78XNbYiqXIbR?r@%K!URz;__5Q*4nJR?PH*gTuZr|1fhe>mw-5W)9hZyM_> zpu|k%Ay#YBs3}*@4RqYzoPW(B�vAS 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ν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

-ViJXCQY^4lY(=rGm-jLd}$6sB^odPGHphkwTjE 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 z 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 joE`td@oVGXaQypRQIr9P_ Date: Sat, 27 Jun 2026 14:40:15 +0900 Subject: [PATCH 11/35] =?UTF-8?q?Task=20#1591:=20para0=20=EB=B6=81?= =?UTF-8?q?=EB=A7=88=ED=81=AC=20hoist=20=EC=A1=B0=EC=82=AC=20+=20RED=20(St?= =?UTF-8?q?age=201)=20+=20=EA=B3=84=ED=9A=8D=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 근본원인 확정: section.rs:416-426 이 북마크를 문단 시작으로 hoisting → 컨트롤 재배치 → 후속 슬롯 +8 → char_shape 시프트(#1584 ColumnDef 동형). #1584 무관(이전 바이너리 동일). Class C 분해: C1 북마크 2건(36384689/36385445), C2 필드 1건(36388711, 별개). RED 테스트 박제. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/plans/task_m100_1591.md | 61 +++++++++++++++++++++++ mydocs/working/task_m100_1591_stage1.md | 64 +++++++++++++++++++++++++ src/serializer/hwpx/mod.rs | 44 +++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 mydocs/plans/task_m100_1591.md create mode 100644 mydocs/working/task_m100_1591_stage1.md diff --git a/mydocs/plans/task_m100_1591.md b/mydocs/plans/task_m100_1591.md new file mode 100644 index 000000000..e85b923f6 --- /dev/null +++ b/mydocs/plans/task_m100_1591.md @@ -0,0 +1,61 @@ +# 수행계획서 — Task #1591 + +**제목**: HWPX 저장 시 para0 후위 컨트롤(Bookmark/PageNum) 위치 오류 → char_shape +8 시프트 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1591 · **브랜치**: `local/task1591` + +--- + +## 1. 배경 + +fidelity 잔여 IR_DIFF Class C(3건). 섹션 첫 문단(para0)의 char_shape 경계가 +8(36384689· +36385445) / −16·−8(36388711) 시프트. + +## 2. 그라운딩 — 근본원인 (확정, 36384689) + +para0(빈 문단, 거대 중첩표) IR controls=5: +`[SectionDef, ColumnDef, Table, PageNumberPos, Bookmark("별첨 1")]`. text_len=0, cc=33. + +- 원본: 북마크는 para0 최상위(subList 깊이 0)의 **끝**(byte 46461 / 범위 873~46520). +- 저장본(rt): 북마크를 **2번째 run 의 표 앞**에 방출(`[ctrl(bookmark),tbl,tbl,t]`) → 원본 + 위치(끝)와 불일치, 8유닛 슬롯이 char_shape 경계 앞에 끼어 **+8 시프트**. +- **#1584 무관 확정**: 직전 커밋(bd0cea48) 빌드 바이너리도 동일 → 선존 결함. + +**기전**: `render_runs` 의 슬롯 위치 추정 — `inferred_control_slot_count`(=4) ≠ controls.len()(=5) +→ **mismatch 경로**. 이 경로는 슬롯의 실제 char-offset 위치를 살리지 못하고 근사 배치하여, +후위 컨트롤(bookmark/pageNum)이 잘못된 run 으로 간다. + +## 3. 회귀 위험 (높음) + +슬롯 위치 추정은 **F3(#1561)·#1584 와 동질의 고위험 영역**. F3 는 2회 회귀로 실패한 전례. +→ 수정은 **통제 비교(개선−회귀>0, 악화0)** 를 채택 게이트로 하고, baseline + 광역 회귀를 필수 +확인. 부분 채택 금지(악화 시 전량 롤백). + +## 4. 구현 단계 (4단계) + +### Stage 1 — 근본원인 정밀 규명 + RED +- 36384689 의 char_offsets ↔ controls ↔ char_shapes 매핑을 추적하여 **mismatch 경로의 어느 + 지점이 후위 컨트롤을 오배치하는지** 정확히 특정. +- 36385445(+8 동일 패턴)·36388711(−16/−8)이 **동일 근본인지 분리 클래스인지** 판별. +- 재현 단위 테스트(RED): para0 후위 bookmark/pageNum 보존 + char_shape 위치 검증. +- 산출: `_stage1.md`(조사 결과 + 수정 방향 확정 또는 재계획). + +### Stage 2 — 수정 설계·구현 +- Stage 1 확정 방향으로 슬롯 위치 보존 구현. (예: 후위 컨트롤의 char-offset 위치 유지, + 또는 slot_count/슬롯 매핑 보정.) +- Stage1 GREEN + `hwpx_roundtrip_baseline` 회귀 0 + `cargo test --lib` 회귀 0. + +### Stage 3 — 통제 비교 (채택 게이트) +- fidelity 전수 재측정, 개선−회귀 집계, 악화 0·순효과>0 확인. +- 악화 ≥1 시 **전량 롤백** + 재분석(F3 선례). + +### Stage 4 — 가드·보고 +- 단위 테스트 + opengov 가드(가능 시 36384689 또는 동형) 편입, snapshot 갱신. +- `_report.md`. + +> 주: Stage 1 조사 결과 수정이 광역 회귀 불가피로 판명되면(F3 양상), **불채택·문서화**로 종료할 +> 수 있다. 무손실 게이트의 채택 기준은 통제 비교 순효과이며, 무리한 부분 수정은 하지 않는다. + +## 5. 산출물 +- 소스: `src/serializer/hwpx/section.rs`(슬롯 위치 경로) 등 Stage 1 확정 범위 +- 테스트: 신규 단위 + (가능 시) opengov 가드 +- 문서: `_stage1~4`, `_report` diff --git a/mydocs/working/task_m100_1591_stage1.md b/mydocs/working/task_m100_1591_stage1.md new file mode 100644 index 000000000..f90d98605 --- /dev/null +++ b/mydocs/working/task_m100_1591_stage1.md @@ -0,0 +1,64 @@ +# Task #1591 — Stage 1 완료보고서 (조사 + RED) + +**단계**: 근본원인 정밀 규명 + RED +**브랜치**: `local/task1591` + +## 1. 근본원인 (확정) + +`src/serializer/hwpx/section.rs:416-426` 이 **모든 Bookmark 를 문단 시작(첫 run)으로 hoisting**: + +```rust +// Bookmark는 IR에 위치 정보가 없어 문단 시작(첫 run)에 배치한다. +for ctrl in ¶.controls { + if let Control::Bookmark(bm) = ctrl { ... splitter.content.push("...bookmark...") } +} +``` + +para0(빈 문단, 거대 중첩표) IR controls(순서): `[SectionDef, ColumnDef, Table, PageNumberPos, +Bookmark]`. 원본에서 북마크는 **끝**(byte 46461). + +**rt 재파싱 결과**(36384689): +``` +cc=33 (불변) char_shapes: pos=0 id=25, pos=32 id=10 (원본 24 → 32, +8) +controls 순서: [SectionDef, ColumnDef, Bookmark, Table, PageNumberPos] ← 북마크가 앞으로 이동 +``` + +→ 북마크가 **8유닛 슬롯을 점유**(cc=33=4슬롯×8+1, line 417 주석 "char_count 미포함"은 부정확) +하며, hoisting 이 북마크를 표 앞으로 **재배치**해 후속 Table/PageNumberPos 슬롯을 +8 밀어 +char_shape(후위 컨트롤에 연동) 경계를 24→32 시프트시킨다. **#1584 ColumnDef 와 동형** +(슬롯 위치 미추적 → 오배치). #1584 무관(직전 커밋 바이너리 동일) 재확인. + +> roundtrip diff 는 북마크 자체는 비교 제외(roundtrip.rs:901)하나, 재배치로 인한 char_shape +> 시프트는 검출한다. + +## 2. Class C 분해 (3건 → 2 클래스) + +| 파일 | controls | 시프트 | 클래스 | +|------|----------|-------|--------| +| 36384689 | [..,Table,PageNum,**Bookmark**] | +8 | **C1 북마크 hoist** | +| 36385445 | [..,Table,PageNum,**Bookmark**] | +8 | **C1 북마크 hoist** (동일) | +| 36388711 | [..,Table,**Field**(ClickHere)] | −16/−8 | **C2 필드** (별개, F3 인접) | + +→ 본 타스크는 **C1(2건, 북마크)** 대상. C2(36388711, 필드 ClickHere)는 별개 근본 — 분리. + +## 3. RED 테스트 + +`task1591_bookmark_not_hoisted_before_slot`: 표 슬롯 뒤 북마크 문단 roundtrip → +컨트롤 순서 검증. 현재 `["bm","tbl"]`(hoist 로 뒤바뀜), 기대 `["tbl","bm"]` → **RED 확인**. + +## 4. 수정 방향 (제안 — 승인 대상) + +북마크를 hoisting 하지 말고 **컨트롤 시퀀스의 제 위치에 슬롯으로 방출**. para.controls 는 이미 +올바른 순서(북마크 index 보존)이므로, 북마크를 슬롯 시스템(`is_hwpx_inline_slot`)에 포함하여 +char-offset 위치대로 방출하면 순서·char_shape 보존 가능. + +**위험(F3 인접)**: +- 종전 hoist 는 "위치 추적 불가" 케이스 대비 fallback. 일부 북마크는 진짜 위치 정보 부재일 수 + 있어, 슬롯 편입 시 **위치 추정 불가 케이스에서 광역 회귀** 가능(F3 2회 실패 전례). +- roundtrip.rs:901 의 북마크 비교 제외도 재검토 필요. +- **채택 게이트 = 통제 비교 순효과>0·악화0**, 악화 시 전량 롤백. + +## 5. 판단 요청 + +Stage 2 로 진행(슬롯 편입 구현 + baseline + 통제 비교)할지, 위험 감안하여 보류할지 결정 요청. +근본원인·RED 확보됨. C2(36388711)는 별 이슈로 분리 권장. diff --git a/src/serializer/hwpx/mod.rs b/src/serializer/hwpx/mod.rs index c46259ed7..2ab379bd0 100644 --- a/src/serializer/hwpx/mod.rs +++ b/src/serializer/hwpx/mod.rs @@ -518,6 +518,50 @@ mod tests { assert_eq!(r.style_id_ref, 5, "styleIDRef 보존"); } + #[test] + fn task1591_bookmark_not_hoisted_before_slot() { + // [#1591] 북마크가 슬롯 컨트롤(표 등) 뒤에 있을 때, 직렬화기(section.rs:416-426)가 + // 북마크를 문단 시작으로 hoisting 하면 컨트롤 순서가 뒤바뀌고 후속 슬롯이 +8 밀려 + // char_shape 가 시프트한다. 비-첫 문단으로 구성(첫 문단 secPr/colPr 템플릿 주입 회피). + use crate::model::control::{Bookmark, Control}; + use crate::model::style::BorderFill; + use crate::model::table::Table; + + let mut doc = Document::default(); + doc.doc_info.border_fills.push(BorderFill::default()); + let mut section = crate::model::document::Section::default(); + section + .paragraphs + .push(crate::model::paragraph::Paragraph::default()); // para0 더미 + let mut p = crate::model::paragraph::Paragraph::default(); + p.text = "AB".to_string(); + p.char_offsets = vec![0, 9]; // A@0, [표 슬롯 8], B@9 + p.char_count = 11; + p.controls.push(Control::Table(Box::::default())); + p.controls.push(Control::Bookmark(Bookmark { + name: "bm".to_string(), + })); + section.paragraphs.push(p); + doc.sections.push(section); + + let bytes = serialize_hwpx(&doc).expect("serialize"); + let doc2 = crate::parser::hwpx::parse_hwpx(&bytes).expect("parse"); + let ctrls: Vec<&str> = doc2.sections[0].paragraphs[1] + .controls + .iter() + .map(|c| match c { + Control::Table(_) => "tbl", + Control::Bookmark(_) => "bm", + _ => "?", + }) + .collect(); + assert_eq!( + ctrls, + vec!["tbl", "bm"], + "북마크가 표 뒤 위치를 보존해야 한다 (hoisting 시 [bm,tbl] 로 뒤바뀜)" + ); + } + #[test] fn equation_control_does_not_consume_unmapped_control_gap() { use crate::model::control::{Control, Equation}; From a4937bcdfa25821f9a237ef1e00bb1d261659ef2 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 14:49:34 +0900 Subject: [PATCH 12/35] =?UTF-8?q?Task=20#1591:=20=EB=B6=81=EB=A7=88?= =?UTF-8?q?=ED=81=AC=20=EC=8A=AC=EB=A1=AF=20=ED=8E=B8=EC=9E=85=20(hoisting?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0)=20(Stage=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 북마크를 문단 시작 hoisting 대신 char-offset 슬롯 위치에 방출(is_hwpx_inline_slot 편입 + render_control_slot arm). diff 비교는 종전대로 북마크 제외(보수적 결합 분리). RED GREEN, lib 1964/0, baseline 4/4, clippy 무경고. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/working/task_m100_1591_stage2.md | 35 +++++++++++++++++++++++++ src/serializer/hwpx/roundtrip.rs | 17 ++++-------- src/serializer/hwpx/section.rs | 23 ++++++++-------- 3 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 mydocs/working/task_m100_1591_stage2.md diff --git a/mydocs/working/task_m100_1591_stage2.md b/mydocs/working/task_m100_1591_stage2.md new file mode 100644 index 000000000..67334997d --- /dev/null +++ b/mydocs/working/task_m100_1591_stage2.md @@ -0,0 +1,35 @@ +# Task #1591 — Stage 2 완료보고서 + +**단계**: 수정 설계·구현 (북마크 슬롯 편입) +**브랜치**: `local/task1591` + +## 변경 내용 + +| # | 파일 | 변경 | +|---|------|------| +| C1 | `serializer/hwpx/section.rs` | 북마크 hoisting 루프(416-426) **제거** | +| C2 | `serializer/hwpx/section.rs` | `is_hwpx_inline_slot` 에 `Control::Bookmark` 추가 | +| C3 | `serializer/hwpx/section.rs` | `render_control_slot` 에 `Control::Bookmark` arm 추가(``) | +| C4 | `serializer/hwpx/roundtrip.rs` | diff 비교는 종전대로 북마크 **제외**(보수적 결합 분리) — `is_hwpx_inline_slot(c) && !Bookmark` | + +## 설계 — 보수적 결합 분리 + +`diff_documents` 가 `is_hwpx_inline_slot` 을 공유하므로, 북마크 슬롯 편입(C2)이 비교 의미까지 +바꿔 `diff_documents_bookmark_not_compared_as_control` 테스트가 깨졌다. 직렬화기는 북마크를 +정위치 방출하되 **diff 비교는 종전대로 북마크 제외**(게이트 의미 불변)하도록 C4 로 분리. +북마크 자체 보존 비교는 별도 과제로 남긴다(scope 최소화). + +## 검증 (모두 GREEN) + +| 검사 | 결과 | +|------|------| +| `task1591_bookmark_not_hoisted_before_slot` | PASS (`[tbl,bm]` 순서 보존) | +| bookmark 관련 6 테스트 | 전부 PASS | +| `cargo test --lib` | 1964 passed, 0 failed | +| `hwpx_roundtrip_baseline` | 4/4 | +| `cargo clippy --lib` | 무경고 | + +## 다음 단계 + +Stage 3 — fidelity 전수 통제 비교(롤백 가드): C1(36384689·36385445) 해소 + 악화 0 확인. +악화 ≥1 시 전량 롤백. diff --git a/src/serializer/hwpx/roundtrip.rs b/src/serializer/hwpx/roundtrip.rs index dd4c66d47..f8ee734fd 100644 --- a/src/serializer/hwpx/roundtrip.rs +++ b/src/serializer/hwpx/roundtrip.rs @@ -898,18 +898,11 @@ fn diff_paragraph_char_shapes( } // 인라인 슬롯 컨트롤 타입 시퀀스 비교 (#1379) — subList 컨트롤 소실 검출. - // Bookmark 등 위치 정보가 없는 비슬롯 컨트롤은 제외 (serializer 가 문단 선두로 - // 재배치하므로 순서 비교가 성립하지 않음). - let sa: Vec<&Control> = pa - .controls - .iter() - .filter(|c| is_hwpx_inline_slot(c)) - .collect(); - let sb: Vec<&Control> = pb - .controls - .iter() - .filter(|c| is_hwpx_inline_slot(c)) - .collect(); + // [#1591] Bookmark 는 slot 시스템에 편입(위치 보존)됐으나, diff 비교에서는 종전대로 + // 제외한다(게이트 의미 불변 — 보수적 결합 분리). 북마크 자체의 보존 비교는 별도 과제. + let cmp_slot = |c: &&Control| is_hwpx_inline_slot(c) && !matches!(c, Control::Bookmark(_)); + let sa: Vec<&Control> = pa.controls.iter().filter(cmp_slot).collect(); + let sb: Vec<&Control> = pb.controls.iter().filter(cmp_slot).collect(); let ctrl_same = sa.len() == sb.len() && sa .iter() diff --git a/src/serializer/hwpx/section.rs b/src/serializer/hwpx/section.rs index 008cdd898..4f2ea745b 100644 --- a/src/serializer/hwpx/section.rs +++ b/src/serializer/hwpx/section.rs @@ -413,17 +413,9 @@ fn render_runs(para: &Paragraph, ctx: &mut SerializeContext) -> String { let mut splitter = RunSplitter::new(para); - // Bookmark는 IR에 위치 정보가 없어 문단 시작(첫 run)에 배치한다. - // (HWPX 파서가 char_count에 포함하지 않아 slot 시스템이 위치를 추적할 수 없음) - for ctrl in ¶.controls { - if let Control::Bookmark(bm) = ctrl { - if let Ok(xml) = writer_to_string(|w| write_bookmark(w, bm)) { - splitter.content.push_str(""); - splitter.content.push_str(&xml); - splitter.content.push_str(""); - } - } - } + // [#1591] Bookmark 는 char-offset 슬롯(8유닛)을 점유하므로 슬롯 시스템(is_hwpx_inline_slot + // + render_control_slot)이 제 위치에 방출한다. 종전엔 위치 미추적으로 문단 시작에 hoisting + // 했으나, 후위 북마크가 앞으로 재배치되며 후속 슬롯·char_shape 를 +8 시프트시켰다(#1591). let slot_count = inferred_control_slot_count(para); let slots: Vec<&Control> = if slot_count == para.controls.len() { @@ -758,6 +750,7 @@ pub(crate) fn is_hwpx_inline_slot(control: &Control) -> bool { | Control::Header(_) | Control::Footer(_) | Control::AutoNumber(_) + | Control::Bookmark(_) ) } @@ -850,6 +843,14 @@ fn render_control_slot(out: &mut String, control: &Control, ctx: &mut SerializeC Err(e) => eprintln!("[hwpx] Form 직렬화 실패: {e}"), }, Control::CharOverlap(co) => out.push_str(&render_compose(co)), + // [Task #1591] 북마크 인라인 방출 — char-offset 슬롯 위치 보존(hoisting 제거). + Control::Bookmark(bm) => { + if let Ok(xml) = writer_to_string(|w| write_bookmark(w, bm)) { + out.push_str(""); + out.push_str(&xml); + out.push_str(""); + } + } // [Task #1587] 덧말(Ruby) 인라인 방출. is_hwpx_inline_slot 에 등록돼 슬롯 위치는 // 자동이나 종전 방출 arm 부재로 드롭됐다. parse_dutmal 의 역매핑. Control::Ruby(r) => out.push_str(&render_dutmal(r)), From 57553e52b5ca7f7d34f4ce812fcdc69f8223e39c Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 15:00:52 +0900 Subject: [PATCH 13/35] =?UTF-8?q?Task=20#1591:=20=EB=B6=81=EB=A7=88?= =?UTF-8?q?=ED=81=AC=20=EC=88=98=EC=A0=95=20=EB=A1=A4=EB=B0=B1=20(?= =?UTF-8?q?=EC=88=9C=ED=9A=A8=EA=B3=BC=200,=20=EC=B1=84=ED=83=9D=20?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=ED=8A=B8=20=EB=AF=B8=EB=8B=AC)=20+=20?= =?UTF-8?q?=EA=B7=BC=EB=B3=B8=EC=9B=90=EC=9D=B8=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stage 2 북마크 슬롯 편입은 컨트롤 순서는 교정했으나 char_shape +8 미해소(순효과 0). 진짜 근본은 first-para mismatch-path 위치추정(slot_count vs slots 불일치, F3급, 별건). section.rs/roundtrip.rs Stage2 직전 복원, RED 테스트 #[ignore](repro 보존). 불채택 결론 + 최종 보고서. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/report/task_m100_1591_report.md | 59 ++++++++++++++++++++++++++ src/serializer/hwpx/mod.rs | 6 ++- src/serializer/hwpx/roundtrip.rs | 17 +++++--- src/serializer/hwpx/section.rs | 23 +++++----- 4 files changed, 86 insertions(+), 19 deletions(-) create mode 100644 mydocs/report/task_m100_1591_report.md diff --git a/mydocs/report/task_m100_1591_report.md b/mydocs/report/task_m100_1591_report.md new file mode 100644 index 000000000..c15e00be9 --- /dev/null +++ b/mydocs/report/task_m100_1591_report.md @@ -0,0 +1,59 @@ +# Task #1591 — 최종 결과보고서 (불채택 + 근본원인 문서화) + +**제목**: HWPX para0 char_shape +8 시프트 (Class C1) +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1591 · **브랜치**: `local/task1591` +**결과**: **불채택**(순효과 0, 채택 게이트 미달). 진짜 근본원인 문서화 + 회귀 repro 보존. + +--- + +## 1. 경위 + +fidelity 잔여 IR_DIFF Class C(3건). Stage 1 조사에서 para0 북마크 hoisting(section.rs:416-426)을 +char_shape +8 의 원인으로 지목 → Stage 2 에서 북마크를 슬롯 시스템에 편입(hoisting 제거). + +## 2. Stage 2 결과 — 부분 교정, 게이트 미해소 + +- **컨트롤 순서는 교정**: rt 가 `[…Table, PageNum, Bookmark(끝)]` 로 정렬(hoisting 제거 성공). +- **그러나 char_shape 는 여전히 +8**(pos 24→32) → 타깃 IR_DIFF 미해소. +- 통제 비교(fidelity12→13, 공통 10150): **개선 0 / 회귀 0 / 순효과 0**. + +## 3. 진짜 근본원인 (재규명) + +char_shape +8 은 북마크 hoist 와 **독립적인 first-para mismatch-path 위치추정 결함**: + +- para0 는 **첫 문단** → #1584 ColumnDef 템플릿 흡수 적용 → 첫 ColumnDef 가 `slots` 에서 제외. +- `inferred_control_slot_count`(=4, cc 기반) ≠ `slots.len()`(=3, ColumnDef 제외) → **mismatch 경로**. +- mismatch 경로는 슬롯의 실제 char-offset 위치를 추정 못 해 char_shape 경계를 +8 오배치. +- 이 +8 은 **#1584 이전·북마크 수정 전후 모두 불변** → 북마크와 무관한 선존 mismatch-path 결함. + +→ 북마크 hoist 는 **게이트 비가시의 또 다른(실재) 버그**였고, Class C1 의 char_shape 타깃은 +별개의 first-para mismatch-path 위치추정(슬롯카운트 vs 슬롯 불일치) 결함. **F3(#1561)급 난이도.** + +## 4. 판단 — 불채택 + +북마크 슬롯 편입은 올바른 교정(순서 보존·회귀 0)이나 타깃 IR_DIFF 미해소·**순효과 0**으로 +채택 기준(순효과>0) 미달. 작업지시자 결정에 따라 **Stage 2 롤백**: + +- `section.rs`/`roundtrip.rs` Stage 2 직전 상태로 복원(hoisting 유지). +- RED 테스트 `task1591_bookmark_not_hoisted_before_slot` 는 `#[ignore]`(hoist 버그 repro 보존). + +## 5. Class C 분해 (남은 과제) + +| 파일 | 근본 | 상태 | +|------|------|------| +| 36384689·36385445 | **first-para mismatch-path char_shape 위치추정** (북마크 아님) | 미해결(F3급) | +| 36388711 | Field ClickHere (−16/−8) | 별개(C2) | + +## 6. 권고 (후속) + +1. **mismatch-path char_shape 위치추정** — slot_count(cc 기반) vs slots(템플릿 ColumnDef 제외) + 불일치가 first-para 다중컨트롤에서 char_shape 를 오배치. F3 와 동질의 슬롯 위치 정합 영역 → + 별 이슈 + 광역 통제 비교 필수. (난이도 높음, 우선순위 판단 필요.) +2. **북마크 hoist** — 게이트 비가시지만 실재하는 순서 오류. 위 1 과 함께 또는 별도 처리 가능. +3. **C2(36388711 Field)** — 별 이슈로 분리. + +## 7. 교훈 + +Stage 1 조사가 표면 증상(북마크 재배치)을 근본으로 오인. **통제 비교(순효과)가 부분 수정의 +게이트 무효과를 정확히 검출** — IR diff 상세 추적만으로는 놓칠 다층 원인을 통제 비교가 가려냄. +무손실 게이트의 채택 기준은 통제 비교 순효과이며, 부분 교정은 채택하지 않는다. diff --git a/src/serializer/hwpx/mod.rs b/src/serializer/hwpx/mod.rs index 2ab379bd0..80b05d1f1 100644 --- a/src/serializer/hwpx/mod.rs +++ b/src/serializer/hwpx/mod.rs @@ -518,11 +518,13 @@ mod tests { assert_eq!(r.style_id_ref, 5, "styleIDRef 보존"); } + #[ignore = "#1591: 북마크 hoist 수정은 롤백됨(순효과 0). Class C1 char_shape +8 의 진짜 \ +근본은 first-para mismatch-path 위치추정(F3급, 별건). 본 RED 는 hoist 버그 repro 로 보존."] #[test] fn task1591_bookmark_not_hoisted_before_slot() { // [#1591] 북마크가 슬롯 컨트롤(표 등) 뒤에 있을 때, 직렬화기(section.rs:416-426)가 - // 북마크를 문단 시작으로 hoisting 하면 컨트롤 순서가 뒤바뀌고 후속 슬롯이 +8 밀려 - // char_shape 가 시프트한다. 비-첫 문단으로 구성(첫 문단 secPr/colPr 템플릿 주입 회피). + // 북마크를 문단 시작으로 hoisting 하면 컨트롤 순서가 뒤바뀐다. 다만 char_shape +8 + // 시프트의 진짜 근본은 mismatch-path 위치추정이라, 이 hoist 수정만으로는 게이트 미해소. use crate::model::control::{Bookmark, Control}; use crate::model::style::BorderFill; use crate::model::table::Table; diff --git a/src/serializer/hwpx/roundtrip.rs b/src/serializer/hwpx/roundtrip.rs index f8ee734fd..dd4c66d47 100644 --- a/src/serializer/hwpx/roundtrip.rs +++ b/src/serializer/hwpx/roundtrip.rs @@ -898,11 +898,18 @@ fn diff_paragraph_char_shapes( } // 인라인 슬롯 컨트롤 타입 시퀀스 비교 (#1379) — subList 컨트롤 소실 검출. - // [#1591] Bookmark 는 slot 시스템에 편입(위치 보존)됐으나, diff 비교에서는 종전대로 - // 제외한다(게이트 의미 불변 — 보수적 결합 분리). 북마크 자체의 보존 비교는 별도 과제. - let cmp_slot = |c: &&Control| is_hwpx_inline_slot(c) && !matches!(c, Control::Bookmark(_)); - let sa: Vec<&Control> = pa.controls.iter().filter(cmp_slot).collect(); - let sb: Vec<&Control> = pb.controls.iter().filter(cmp_slot).collect(); + // Bookmark 등 위치 정보가 없는 비슬롯 컨트롤은 제외 (serializer 가 문단 선두로 + // 재배치하므로 순서 비교가 성립하지 않음). + let sa: Vec<&Control> = pa + .controls + .iter() + .filter(|c| is_hwpx_inline_slot(c)) + .collect(); + let sb: Vec<&Control> = pb + .controls + .iter() + .filter(|c| is_hwpx_inline_slot(c)) + .collect(); let ctrl_same = sa.len() == sb.len() && sa .iter() diff --git a/src/serializer/hwpx/section.rs b/src/serializer/hwpx/section.rs index 4f2ea745b..008cdd898 100644 --- a/src/serializer/hwpx/section.rs +++ b/src/serializer/hwpx/section.rs @@ -413,9 +413,17 @@ fn render_runs(para: &Paragraph, ctx: &mut SerializeContext) -> String { let mut splitter = RunSplitter::new(para); - // [#1591] Bookmark 는 char-offset 슬롯(8유닛)을 점유하므로 슬롯 시스템(is_hwpx_inline_slot - // + render_control_slot)이 제 위치에 방출한다. 종전엔 위치 미추적으로 문단 시작에 hoisting - // 했으나, 후위 북마크가 앞으로 재배치되며 후속 슬롯·char_shape 를 +8 시프트시켰다(#1591). + // Bookmark는 IR에 위치 정보가 없어 문단 시작(첫 run)에 배치한다. + // (HWPX 파서가 char_count에 포함하지 않아 slot 시스템이 위치를 추적할 수 없음) + for ctrl in ¶.controls { + if let Control::Bookmark(bm) = ctrl { + if let Ok(xml) = writer_to_string(|w| write_bookmark(w, bm)) { + splitter.content.push_str(""); + splitter.content.push_str(&xml); + splitter.content.push_str(""); + } + } + } let slot_count = inferred_control_slot_count(para); let slots: Vec<&Control> = if slot_count == para.controls.len() { @@ -750,7 +758,6 @@ pub(crate) fn is_hwpx_inline_slot(control: &Control) -> bool { | Control::Header(_) | Control::Footer(_) | Control::AutoNumber(_) - | Control::Bookmark(_) ) } @@ -843,14 +850,6 @@ fn render_control_slot(out: &mut String, control: &Control, ctx: &mut SerializeC Err(e) => eprintln!("[hwpx] Form 직렬화 실패: {e}"), }, Control::CharOverlap(co) => out.push_str(&render_compose(co)), - // [Task #1591] 북마크 인라인 방출 — char-offset 슬롯 위치 보존(hoisting 제거). - Control::Bookmark(bm) => { - if let Ok(xml) = writer_to_string(|w| write_bookmark(w, bm)) { - out.push_str(""); - out.push_str(&xml); - out.push_str(""); - } - } // [Task #1587] 덧말(Ruby) 인라인 방출. is_hwpx_inline_slot 에 등록돼 슬롯 위치는 // 자동이나 종전 방출 arm 부재로 드롭됐다. parse_dutmal 의 역매핑. Control::Ruby(r) => out.push_str(&render_dutmal(r)), From 4994b7e412d701cb9da88ba5f973d6f6dc975f5d Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 15:26:52 +0900 Subject: [PATCH 14/35] =?UTF-8?q?Task=20#1592:=20=EB=B9=88=20=EB=AC=B8?= =?UTF-8?q?=EB=8B=A8=20spurious=20(0,0)=20=EC=88=98=EC=A0=95=20(Stage=201+?= =?UTF-8?q?2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit render_runs 가 완전 빈 문단(char_shapes=[] 등)에 빈 run 을 추가해 재파싱 시 (0,0) 이 생기던 버그 수정. char_shapes=[] = 원본에 run 없음 → run 미방출. RED GREEN, task1378 빈문단 테스트 갱신(run 미방출이 정답). lib 1964/0, baseline 4/4. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/plans/task_m100_1592.md | 43 +++++++++++++++++++++++++ mydocs/working/task_m100_1592_stage1.md | 10 ++++++ mydocs/working/task_m100_1592_stage2.md | 17 ++++++++++ src/serializer/hwpx/mod.rs | 27 ++++++++++++++++ src/serializer/hwpx/section.rs | 23 ++++++++++--- 5 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 mydocs/plans/task_m100_1592.md create mode 100644 mydocs/working/task_m100_1592_stage1.md create mode 100644 mydocs/working/task_m100_1592_stage2.md diff --git a/mydocs/plans/task_m100_1592.md b/mydocs/plans/task_m100_1592.md new file mode 100644 index 000000000..2e68cdf4a --- /dev/null +++ b/mydocs/plans/task_m100_1592.md @@ -0,0 +1,43 @@ +# 수행계획서 — Task #1592 + +**제목**: HWPX 저장 시 빈 문단(char_shapes=[])에 spurious (0,0) char_shape 추가 수정 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1592 · **브랜치**: `local/task1592` + +--- + +## 1. 배경 + +fidelity 잔여 IR_DIFF Class D(1건). run 이 없던 빈 문단에 직렬화기가 빈 +`` 를 추가 → 재파싱 시 char_shapes `[]`→`[(0,0)]`. + +## 2. 근본원인 (확정, `src/serializer/hwpx/section.rs`) + +- `RunSplitter::new`(298-300) "규칙 3": char_shapes 가 비면 기본 `(0,0)` 세그먼트 추가. +- `close_run`(333-335) "규칙 5": 빈 run 도 `` 로 방출. +- → char_shapes=[] 빈 문단에 `charPrIDRef="0"` run 생성, 재파싱 시 (0,0) 발생. + +원본 빈 문단(36386761 목록 para5)은 run 이 없어 char_shapes=[]. 판별자 = `char_shapes.is_empty()`. +대부분 빈 문단은 char_shapes=[(0,0)](run 존재)라 무영향 — 본 케이스만 char_shapes=[]. + +## 3. 수정 방향 + +`render_runs` 진입부에서 문단이 **완전히 비었으면**(text·char_shapes·슬롯·field_ranges· +orphan_field_ends 전부 없음) **run 미방출**(빈 문자열 반환). linesegarray 는 별도 경로라 보존. +char_shapes 가 있으면 종전 규칙 3/5 유지. + +## 4. 회귀 위험 (낮음) + +빈 문단 광역 영향 가능 → 통제 비교 필수. 단, char_shapes=[] 조건이 좁아(대부분 [(0,0)]) +blast radius 작을 것으로 추정. 채택 게이트 = 통제 비교 순효과>0·악화0. + +## 5. 구현 단계 (3단계) + +- **Stage 1 — RED**: 완전 빈 문단(char_shapes=[]) roundtrip → char_shapes 보존(빈) 검증. + 현재 (0,0) 발생 → RED. +- **Stage 2 — 수정**: render_runs 빈문단 가드 추가. Stage1 GREEN + baseline + lib 회귀 0. +- **Stage 3 — 통제 비교**: fidelity 전수 재측정, 36386761 해소 + 악화 0 + 순효과>0. opengov 가드. + +## 6. 산출물 +- 소스: `src/serializer/hwpx/section.rs` +- 테스트: 신규 단위 + opengov 가드 +- 문서: `_stage1~3`, `_report` diff --git a/mydocs/working/task_m100_1592_stage1.md b/mydocs/working/task_m100_1592_stage1.md new file mode 100644 index 000000000..322946ec5 --- /dev/null +++ b/mydocs/working/task_m100_1592_stage1.md @@ -0,0 +1,10 @@ +# Task #1592 — Stage 1 완료보고서 (RED) + +**단계**: 빈 문단 spurious (0,0) 재현 +**브랜치**: `local/task1592` + +`task1592_empty_paragraph_no_spurious_charshape`: 완전 빈 문단(text="", char_shapes=[], +컨트롤 없음) roundtrip → 재파싱 char_shapes 검증. + +결과(RED): `빈 문단은 char_shapes 가 비어야 한다 ...: [(0, 0)]` — 직렬화기가 빈 +`` 추가 → (0,0) 발생. 근본원인(RunSplitter::new 규칙3 + close_run 규칙5) 일치. diff --git a/mydocs/working/task_m100_1592_stage2.md b/mydocs/working/task_m100_1592_stage2.md new file mode 100644 index 000000000..a4217c9ea --- /dev/null +++ b/mydocs/working/task_m100_1592_stage2.md @@ -0,0 +1,17 @@ +# Task #1592 — Stage 2 완료보고서 (수정) + +**단계**: render_runs 빈 문단 가드 +**브랜치**: `local/task1592` + +## 변경 +- `section.rs` render_runs 진입부: 완전 빈 문단(text·char_shapes·controls·field_ranges· + orphan_field_ends 전부 없음)이면 **run 미방출**(빈 문자열 반환). char_shapes 있으면 종전 유지. +- `task1378_empty_paragraph_single_run_id_zero` 갱신: 빈 문단은 run 미방출(`""`)이 정답. + char_shapes=[] 는 "원본에 run 없음"을 의미(빈 run 이면 파서가 [(0,0)] 산출) → entry 가공 금지. + +## 검증 +- `task1592_..._no_spurious_charshape` GREEN. +- `cargo test --lib` 1964 passed/0 failed. `hwpx_roundtrip_baseline` 4/4. clippy 무경고. + +## 다음 +Stage 3 — fidelity 전수 통제 비교(빈 문단 광역 영향 확인): 36386761(목록) 해소 + 악화 0. diff --git a/src/serializer/hwpx/mod.rs b/src/serializer/hwpx/mod.rs index 80b05d1f1..f7cb99c31 100644 --- a/src/serializer/hwpx/mod.rs +++ b/src/serializer/hwpx/mod.rs @@ -564,6 +564,33 @@ mod tests { ); } + #[test] + fn task1592_empty_paragraph_no_spurious_charshape() { + // [#1592] run 이 없던 완전 빈 문단(char_shapes=[])에 직렬화기가 빈 + // 를 추가하면 재파싱 시 char_shapes 가 [(0,0)] 으로 생긴다. + // 비-첫 문단으로 구성(첫 문단 템플릿 회피). + let mut doc = Document::default(); + let mut section = crate::model::document::Section::default(); + // para0: 텍스트 있는 일반 문단 + let mut p0 = crate::model::paragraph::Paragraph::default(); + p0.text = "본문".to_string(); + section.paragraphs.push(p0); + // para1: 완전 빈 문단 (text="", char_shapes=[], controls=[]) + section + .paragraphs + .push(crate::model::paragraph::Paragraph::default()); + doc.sections.push(section); + + let bytes = serialize_hwpx(&doc).expect("serialize"); + let doc2 = crate::parser::hwpx::parse_hwpx(&bytes).expect("parse"); + let cs = &doc2.sections[0].paragraphs[1].char_shapes; + assert!( + cs.is_empty(), + "빈 문단은 char_shapes 가 비어야 한다 (spurious (0,0) 금지): {:?}", + cs.iter().map(|c| (c.start_pos, c.char_shape_id)).collect::>() + ); + } + #[test] fn equation_control_does_not_consume_unmapped_control_gap() { use crate::model::control::{Control, Equation}; diff --git a/src/serializer/hwpx/section.rs b/src/serializer/hwpx/section.rs index 008cdd898..5fe6bebe6 100644 --- a/src/serializer/hwpx/section.rs +++ b/src/serializer/hwpx/section.rs @@ -411,6 +411,19 @@ fn render_runs(para: &Paragraph, ctx: &mut SerializeContext) -> String { ctx.char_shape_ids.reference(cs.char_shape_id); } + // [#1592] 완전 빈 문단(원본에 없음)은 run 을 방출하지 않는다. char_shapes=[] + // 인 문단에 RunSplitter 가 기본 (0,0) 세그먼트로 charPrIDRef="0" 빈 run 을 추가하면, + // 재파싱 시 spurious (0,0) char_shape 가 생긴다(원본은 run 없어 char_shapes=[]). + // char_shapes 가 있으면(예: [(0,0)] 명시) 종전대로 run 을 방출한다(linesegarray 는 별도). + if para.text.is_empty() + && para.char_shapes.is_empty() + && para.controls.is_empty() + && para.field_ranges.is_empty() + && para.orphan_field_ends.is_empty() + { + return String::new(); + } + let mut splitter = RunSplitter::new(para); // Bookmark는 IR에 위치 정보가 없어 문단 시작(첫 run)에 배치한다. @@ -2756,12 +2769,12 @@ mod tests { #[test] fn task1378_empty_paragraph_single_run_id_zero() { - // 빈 문단·char_shapes 빈 경우 — 단일 run id 0 유지 (경계 케이스 5) + // [#1592 갱신] 완전 빈 문단(text="", char_shapes=[], 컨트롤 없음)은 run 을 방출하지 + // 않는다. char_shapes=[] 는 "원본에 없음"을 의미하므로(빈 run 이 있었다면 + // 파서가 [(0,0)] 을 산출), run 을 추가하면 재파싱 시 spurious (0,0) 가 생긴다(#1592). + // 종전 #1378 은 빈 run(id 0)을 방출했으나, 이는 run 없던 빈 문단에 entry 를 가공했다. let para = Paragraph::default(); - assert_eq!( - runs_of(¶), - r#""# - ); + assert_eq!(runs_of(¶), ""); } #[test] From aca4fde28e742f70d0a258a85c6c3b545339c43b Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 15:34:23 +0900 Subject: [PATCH 15/35] =?UTF-8?q?Task=20#1592:=20=ED=86=B5=EC=A0=9C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20=EA=B2=80=EC=A6=9D=20+=20=ED=9A=8C?= =?UTF-8?q?=EA=B7=80=20=EA=B0=80=EB=93=9C=20(Stage=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fidelity 통제 비교(전체 경로 키): 개선 1/회귀 0/순효과 +1 (IR_DIFF 4->3). 빈 문단 광역 변경에도 공통 10581건 회귀 0. 36386761 opengov 가드 편입(snapshot PASS). closes #1592 Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/report/task_m100_1592_report.md | 39 ++++++++++++++++++ mydocs/working/task_m100_1592_stage3.md | 26 ++++++++++++ ...\353\242\260\353\252\251\353\241\235.hwpx" | Bin 0 -> 12228 bytes tests/fixtures/opengov_snapshot.tsv | 1 + 4 files changed, 66 insertions(+) create mode 100644 mydocs/report/task_m100_1592_report.md create mode 100644 mydocs/working/task_m100_1592_stage3.md create mode 100644 "samples/hwpx/opengov/36386761_\353\260\261\354\240\234\355\225\231\354\227\260\352\265\254\354\264\235\354\204\234\354\234\204\355\203\201\355\214\220\353\247\244\354\235\230\353\242\260\353\252\251\353\241\235.hwpx" diff --git a/mydocs/report/task_m100_1592_report.md b/mydocs/report/task_m100_1592_report.md new file mode 100644 index 000000000..2e7ee0e2f --- /dev/null +++ b/mydocs/report/task_m100_1592_report.md @@ -0,0 +1,39 @@ +# Task #1592 — 최종 결과보고서 + +**제목**: HWPX 저장 시 빈 문단(char_shapes=[])에 spurious (0,0) char_shape 추가 수정 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1592 · **브랜치**: `local/task1592` + +## 1. 문제 +run 이 없던 빈 문단에 직렬화기가 빈 `` 추가 → +재파싱 시 char_shapes `[]`→`[(0,0)]`. fidelity 잔여 Class D(1건, 36386761 목록 para5). + +## 2. 근본원인 (`src/serializer/hwpx/section.rs`) +- `RunSplitter::new`(298-300) 규칙3: char_shapes 비면 기본 (0,0) 세그먼트. +- `close_run`(333-335) 규칙5: 빈 run 도 `` 방출. +- → char_shapes=[] 빈 문단에 charPrIDRef="0" run 생성. 원본은 run 없어 char_shapes=[]. + 판별자 = `char_shapes.is_empty()`(빈 run 이면 파서가 [(0,0)] 산출하므로 [] 는 run 부재 의미). + +## 3. 해결 +`render_runs` 진입부: 완전 빈 문단(text·char_shapes·controls·field_ranges·orphan 전부 없음)이면 +run 미방출(빈 문자열). char_shapes 있으면 종전 규칙3/5 유지. linesegarray 는 별도 경로라 보존. +`task1378_empty_paragraph_single_run_id_zero` 갱신(run 미방출이 정답). + +## 4. 검증 +| 검사 | 결과 | +|------|------| +| 단위 RED→GREEN | PASS | +| cargo test --lib | 1964 passed, 0 failed | +| hwpx_roundtrip_baseline | 4/4 | +| opengov snapshot (36386761 가드) | PASS | +| **fidelity 통제 비교** | **개선 1 / 회귀 0 / 순효과 +1** (IR_DIFF 4→3) | + +빈 문단 광역 변경에도 공통 10581건 회귀 0(char_shapes=[] 조건이 좁음). + +## 5. 산출물 +- 소스: `src/serializer/hwpx/section.rs` +- 테스트: `task1592_empty_paragraph_no_spurious_charshape` + opengov 가드 + #1378 갱신 +- 문서: 수행계획서, `_stage1~3`, 본 보고서 + +## 6. 후속 (잔여 IR_DIFF 3건) +- Class C1 (36384689·36385445): first-para mismatch-path char_shape (#1591 재범위, F3급). +- Class C2 (36388711): Field ClickHere −16/−8. diff --git a/mydocs/working/task_m100_1592_stage3.md b/mydocs/working/task_m100_1592_stage3.md new file mode 100644 index 000000000..770a24ac6 --- /dev/null +++ b/mydocs/working/task_m100_1592_stage3.md @@ -0,0 +1,26 @@ +# Task #1592 — Stage 3 완료보고서 (통제 비교) + +**단계**: 통제 비교 검증 (채택 게이트) · **브랜치**: `local/task1592` +**바이너리**: local/task1592 HEAD 위 빌드 + +## fidelity 전수 통제 비교 (fidelity13→14, 전체 경로 키) + +| 항목 | 전(13) | 후(14) | +|------|------:|------:| +| 총 파일 | 10581 | 10831 | +| IR_DIFF | 4 | **3** | + +공통 10581건: +- 개선 1 (36386761 백제학연구총서 위탁판매 의뢰 목록) +- **회귀 0**, 신규 IR_DIFF 0 +- **순효과 +1** + +→ 채택 게이트 충족(순효과>0·악화0). **빈 문단 광역 변경에도 회귀 0** — char_shapes=[] 조건이 +좁아(대부분 빈 문단은 [(0,0)]) blast radius 최소. + +## 회귀 가드 +- 단위: `task1592_empty_paragraph_no_spurious_charshape` + `task1378_..._single_run_id_zero` 갱신. +- 통합: `36386761_백제학연구총서위탁판매의뢰목록` opengov 편입 + snapshot PASS. + +## 결론 +빈 문단 spurious (0,0) 해소(개선 1, 회귀 0). 채택. 잔여 IR_DIFF 3건(Class C 2 + C2 1)은 별건. diff --git "a/samples/hwpx/opengov/36386761_\353\260\261\354\240\234\355\225\231\354\227\260\352\265\254\354\264\235\354\204\234\354\234\204\355\203\201\355\214\220\353\247\244\354\235\230\353\242\260\353\252\251\353\241\235.hwpx" "b/samples/hwpx/opengov/36386761_\353\260\261\354\240\234\355\225\231\354\227\260\352\265\254\354\264\235\354\204\234\354\234\204\355\203\201\355\214\220\353\247\244\354\235\230\353\242\260\353\252\251\353\241\235.hwpx" new file mode 100644 index 0000000000000000000000000000000000000000..8d079c05b73d0e71b9fbcbc3573725dc517d3181 GIT binary patch literal 12228 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 VEF{!#GPw7j_xnuCO8-0e{{TJQS7`tM literal 0 HcmV?d00001 diff --git a/tests/fixtures/opengov_snapshot.tsv b/tests/fixtures/opengov_snapshot.tsv index 40f424a7e..60e41ed42 100644 --- a/tests/fixtures/opengov_snapshot.tsv +++ b/tests/fixtures/opengov_snapshot.tsv @@ -1,6 +1,7 @@ id status ir_diff_count class 36382399 PASS 0 본문 인라인 ColumnDef 드롭 회귀가드(#1584) 36389301 PASS 0 Ruby(덧말) 드롭 회귀가드(#1587) +36386761 PASS 0 빈 문단 spurious (0,0) 회귀가드(#1592) 36392900 PASS 0 선 도형 shapeComment 드롭 회귀가드(#1588) 36382669 PASS 0 multi-section/secCnt 회귀가드(#1557) 36383351 PASS 0 PASS 클린 From a4cf3173fbe8e10b343538724021d9a73409002d Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 15:50:45 +0900 Subject: [PATCH 16/35] =?UTF-8?q?docs:=20=EC=9E=94=EC=97=AC=20IR=5FDIFF=20?= =?UTF-8?q?=EB=B6=84=EC=84=9D=20=EA=B0=B1=EC=8B=A0=20=E2=80=94=20C2(#1593)?= =?UTF-8?q?=20=EB=B3=B4=EB=A5=98,=20=EC=9E=94=EC=97=AC=203=EA=B1=B4=20mism?= =?UTF-8?q?atch-path=20=EC=88=98=EB=A0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Class C2(36388711) 조사: same-para fieldEnd 드롭 + 북마크 hoist 결합 → 보류(통합 리팩터 권고). Class D(#1592) 해결 반영. 잔여 3건(C1 2+C2 1) 모두 first-para mismatch-path 슬롯 위치추정 수렴. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/tech/hwpx_residual_ir_diff_10.md | 38 ++++++++++++++++--------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/mydocs/tech/hwpx_residual_ir_diff_10.md b/mydocs/tech/hwpx_residual_ir_diff_10.md index 5f38264c6..0e489c174 100644 --- a/mydocs/tech/hwpx_residual_ir_diff_10.md +++ b/mydocs/tech/hwpx_residual_ir_diff_10.md @@ -59,11 +59,16 @@ control-slot 공간에서 어긋남. 36388711 p0 (로고/표): (52,8)(81,9)→(36,8)(73,9) −16/−8 [secPr,colPr,tbl, line×3] ``` -- 36384689·36385445 는 **동일 +8 패턴**(체계적, "문서번호" 표 머리 문단). secPr/colPr run 의 - charPr 경계 산정이 원본과 8유닛 어긋남 — 추정 슬롯 카운트 vs 실제 char_offset 불일치 의심. -- 36388711 은 −16/−8 혼재(로고 영역 다중 슬롯). -- 수정 방향: secPr/colPr 첫 run 의 char_shape 경계 산정 로직 정밀 조사 필요(F3·#1561 와 별개). - **dedicated 조사 권장**. +### 후속 규명 (#1591/#1593 조사 결과) + +| 파일 | 진짜 근본 | 처리 | +|------|----------|------| +| 36384689·36385445 (C1) | **first-para mismatch-path 위치추정**: para0 가 #1584 ColumnDef 템플릿 흡수로 `slot_count`(cc기반)≠`slots.len()`→mismatch 경로가 char_shape +8 오배치. 표면 증상이던 북마크 hoist 는 무관(수정해도 +8 불변) | #1591 재범위, **미해결(F3급)** | +| 36388711 (C2) | **same-para fieldEnd 드롭(cc −8) + 북마크 hoist 결합**. fieldBegin/End 1/1→1/0. F3(#1561 cross-para) 와 다른 same-para 변종 | #1593, **보류** | + +→ **잔여 3건 모두 first-para mismatch-path 슬롯 위치추정으로 수렴**. F3(#1561, 2회 실패)· +#1591(순효과0 롤백)과 동질의 고위험 영역. 개별 파일 수정 대신 **mismatch-path 슬롯 위치추정 +통합 리팩터**로 묶어 처리 권고(광역 통제비교 필수, 악화 즉시 롤백). ## D. 빈/공백 문단 spurious char_shape (1건: 36386761) @@ -73,16 +78,23 @@ control-slot 공간에서 어긋남. - 원본에 char_shape 없는 공백 문단에 저장→재파싱 시 기본 char_shape (0,0) 가 생성됨. - 영향: 없음(기본 글자모양). 경미. -- 수정 방향: 빈 char_shapes 문단의 secPr/run charPrIDRef 방출 조건 점검. +- **해결(#1592, 채택)**: render_runs 가 완전 빈 문단(char_shapes=[])에 run 미방출. 통제비교 + 개선1/회귀0. (RunSplitter::new 규칙3 + close_run 규칙5 가 빈 run 을 가공하던 것을 차단.) --- -## 권고 (우선순위) +## 처리 결과 (2026-06-27) + +| Class | 이슈 | 결과 | +|-------|------|------| +| A (Ruby 드롭) | #1587 | **채택** (개선3) | +| B (선 도형 shapeComment) | #1588 | **채택** (개선3) | +| C1 (para0 mismatch-path) | #1591 | **불채택**(북마크 hoist 순효과0) → mismatch-path 재범위, 미해결 | +| C2 (fieldEnd 드롭+북마크 결합) | #1593 | **보류** (통합 리팩터 권고) | +| D (spurious 0,0) | #1592 | **채택** (개선1) | -1. **Class A (Ruby)** — 유일한 시각 영향 실버그. 3건 + char_shape 하위 증상 1건 동시 해소. - **별도 이슈 + 정식 타스크 1순위**. -2. **Class B (write_line shapeComment)** — 1줄 수정, 3건 해소. **별도 이슈 + 간단 수정 2순위**. -3. **Class C (para0 char_shape)** — 체계적 2건 포함. **조사 선행** 후 판단. -4. **Class D (spurious 0,0)** — 경미. 후순위 또는 C 와 묶음. +**누적: HWPX 실문서 IR_DIFF 59→3** (#1584 ColumnDef 포함 4 채택). 잔여 3건(C1 2 + C2 1)은 +모두 **first-para mismatch-path 슬롯 위치추정**으로 수렴 → F3(#1561)·#1591 동질 고위험. +**통합 리팩터 권고**(개별 수정 금지, 광역 통제비교 필수). -> 나머지 PARSE_FAIL 12건 = "ZIP EOCD 없음" 손상 다운로드(수집기 아티팩트, rhwp 무관). +> PARSE_FAIL 12건 = "ZIP EOCD 없음" 손상 다운로드(수집기 아티팩트, rhwp 무관). From 0c72b21076be6b0265cda82a468fb3d28997ac64 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 15:54:50 +0900 Subject: [PATCH 17/35] =?UTF-8?q?fix(ci):=20rustfmt=20=ED=8F=AC=EB=A7=B7?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(mod.rs=20Ruby/empty-para=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cargo fmt --all --check 실패 해소 — #1587 Ruby 테스트 주석 정렬 + #1592 empty-para 테스트 collect 체인 멀티라인. 내용 포맷만 수정(기능 변경 없음). Co-Authored-By: Claude Opus 4.8 (1M context) --- src/serializer/hwpx/mod.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/serializer/hwpx/mod.rs b/src/serializer/hwpx/mod.rs index f7cb99c31..be6de69cb 100644 --- a/src/serializer/hwpx/mod.rs +++ b/src/serializer/hwpx/mod.rs @@ -482,8 +482,8 @@ mod tests { para.controls.push(Control::Ruby(Ruby { main_text: "기준글".to_string(), ruby_text: "덧말".to_string(), - pos_type: 1, // BOTTOM - align: 2, // CENTER + pos_type: 1, // BOTTOM + align: 2, // CENTER sz_ratio: 80, option: 3, style_id_ref: 5, @@ -587,7 +587,9 @@ mod tests { assert!( cs.is_empty(), "빈 문단은 char_shapes 가 비어야 한다 (spurious (0,0) 금지): {:?}", - cs.iter().map(|c| (c.start_pos, c.char_shape_id)).collect::>() + cs.iter() + .map(|c| (c.start_pos, c.char_shape_id)) + .collect::>() ); } From 65505543ca09643f644652e206bbd811b9dcfc90 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 16:10:49 +0900 Subject: [PATCH 18/35] =?UTF-8?q?docs:=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EB=B6=95=EA=B4=B4=20=EA=B5=B0=EC=A7=91=20=EC=A1=B0=EC=82=AC=20?= =?UTF-8?q?(#1589)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PASS 파일 14% 한글 붕괴(2→1) 군집 확인. IR-invisible(메트릭 전부 동일). 탭 switch 드롭· #1592 배제(red herring). 심층 레이아웃 충실도 결함으로 후속 권고. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/tech/hwpx_page_collapse_cluster.md | 64 +++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 mydocs/tech/hwpx_page_collapse_cluster.md diff --git a/mydocs/tech/hwpx_page_collapse_cluster.md b/mydocs/tech/hwpx_page_collapse_cluster.md new file mode 100644 index 000000000..ad1a757e2 --- /dev/null +++ b/mydocs/tech/hwpx_page_collapse_cluster.md @@ -0,0 +1,64 @@ +# HWPX 페이지 붕괴 군집 조사 (#1589) + +- 일자: 2026-06-27 +- 바이너리: devel 0c72b210 (4 채택 누적) +- 도구: `tools/verify_hangul_pages.py` (한글 PageCount 오라클) + +## 1. 군집 규모 (중대) + +fidelity14 **PASS(IR diff=0) 파일 120건 표본**(seed 7) 한글 오라클: + +| 판정 | 건수 | 비율 | +|------|----:|----:| +| OK | 102 | 85% | +| **COLLAPSE** | **17** | **14%** | +| ERR(COM 열기 실패) | 1 | 1% | + +→ **IR 게이트를 통과한 파일의 ~14%가 한글에서 페이지 붕괴.** 단일 파일(#1589 최초 36384160)이 +아닌 **대규모 군집**. IR diff=0 ≠ 시각 무손실의 가장 큰 잔존 갭. + +## 2. 붕괴 패턴 + +| 패턴 | 건수 | +|------|----:| +| 2→1 | 16 | +| 5→4 | 1 | + +거의 전부 **마지막 1쪽 흡수**(2→1). 대상 전부 정부 "결재문서본문" 양식 — 체계적 단일 원인 시사. + +## 3. IR-invisible 확인 (36389184, 2→1 대표) + +orig↔rt 비교: **IR-비교 가능 메트릭 전부 동일**. +- 구조: hp:p 122, hp:run 110, hp:lineseg 218, hp:tbl 4, hp:tr 21, hp:tc 94 — 모두 일치. +- 수직: Σvertpos/vertsize/textheight/baseline/spacing 전부 일치. +- header: charPr 30(height 동일), paraPr 32(lineSpacing 동일), fontface 8, borderFill 10. + +→ 한글이 reflow 에 쓰는 IR 값은 동일한데 페이지수만 다름. + +## 4. 배제한 가설 (red herrings) + +| 가설 | 검증 | 결론 | +|------|------|------| +| **탭 switch 래퍼 드롭**(48KB) | rhwp 가 `...` 를 plain `` 로 방출(48KB 감소). **그러나 OK(비붕괴) 파일도 동일 드롭**(Δ=48628) | **무관**(보편적·양성). 단 pos=0 탭이라 레이아웃 영향 없음 | +| **#1592 빈문단 run 제거** | pre-#1592 rt(fidelity13)도 동일하게 2→1 붕괴 | **무관**(붕괴가 #1592 선행) | + +## 5. 남은 구체 차이 (미규명) + +- rt 가 **빈 `` 58개 추가**(orig 0). close_run 규칙5(빈 run `` 보존) + 유래. 단 빈 run 은 높이를 **더해** rt 를 길게 만들 텐데 붕괴는 rt 가 **짧음** → 방향 불일치, + 단순 원인 아님. +- rt 가 `Preview/PrvImage.png` 추가(썸네일, 레이아웃 무관). + +## 6. 결론 + 권고 + +붕괴는 **IR-identical content 인데 한글 reflow 결과만 다른 심층 레이아웃 충실도 결함**. 표면 +XML 차이(탭 switch·빈 t·preview)로는 설명 안 됨 — 한글이 읽는 **비-IR 레이아웃 신호**(런 경계 +분할, 문자 폭 미세, 줄바꿈 기회 등)의 차이로 추정. + +**규모 큼(~14%)·난이도 높음**. 후속 권고: +1. **전수 오라클 배치**로 정확한 붕괴율·군집 규모 확정(현재 120 표본 추정). +2. 붕괴/비붕괴 파일 쌍의 **section0 정밀 바이트 diff**(런 경계·hp:t 분할 패턴 차이). +3. 한글에서 **페이지 브레이크 위치 시각 비교**(어느 줄/문단에서 갈리는지). +4. 가설: 런 경계 분할(charPr boundary)이 한글 줄바꿈 기회를 바꿔 더 촘촘히 패킹 → 행 수 감소. + +근거: `output/poc/fidelity14/oracle_collapse_scan.tsv`, 메모리 [[hwp5-save-fidelity-gaps]]. From 71a4d6a382bc65846e322a6da7abbe8c3c6a1bef Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 16:21:31 +0900 Subject: [PATCH 19/35] =?UTF-8?q?feat(oracle):=20=EC=A6=9D=EB=B6=84=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20+=20--resume=20(=EC=A0=84=EC=88=98=20?= =?UTF-8?q?=EB=B0=B0=EC=B9=98=20=ED=81=AC=EB=9E=98=EC=8B=9C=20=EB=82=B4?= =?UTF-8?q?=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit verify_hangul_pages.py: 각 행을 처리 직후 flush 기록(종전 끝에서 일괄 기록 → 크래시 시 전손실). --resume 으로 기존 -o TSV 처리분을 건너뛰고 이어서 진행. 10k+ 전수 배치에서 COM 크래시 시 재실행으로 누적 가능. Co-Authored-By: Claude Opus 4.8 (1M context) --- tools/verify_hangul_pages.py | 67 ++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/tools/verify_hangul_pages.py b/tools/verify_hangul_pages.py index 28d520684..0ba568196 100644 --- a/tools/verify_hangul_pages.py +++ b/tools/verify_hangul_pages.py @@ -81,7 +81,7 @@ def collect_pairs_inventory( return pairs -def run(pairs, out_tsv, visible, use_pdf) -> int: +def run(pairs, out_tsv, visible, use_pdf, resume=False) -> int: try: from pyhwpx import Hwp except ImportError: @@ -101,8 +101,37 @@ def run(pairs, out_tsv, visible, use_pdf) -> int: return 2 head = git_head() + + # [resume] 기존 out_tsv 의 처리분을 읽어 건너뛴다(증분 기록과 짝). 전수 배치 중 + # COM 크래시 시 재실행으로 이어서 진행하기 위함. + done_rows = [] # (verdict, o, r, note, rel) + done_rels = set() + if resume and out_tsv is not None and out_tsv.exists(): + with open(out_tsv, encoding="utf-8") as fh: + for line in fh: + line = line.rstrip("\n") + if not line or line.startswith("#") or line.startswith("verdict\t"): + continue + parts = line.split("\t") + if len(parts) == 5: + done_rows.append(tuple(parts)) + done_rels.add(parts[4]) + pairs = [p for p in pairs if p[2] not in done_rels] + print(f"# [resume] 기존 {len(done_rels)}건 건너뜀, 남은 {len(pairs)}건") + print(f"# 한글 페이지 오라클 | git HEAD={head} | 대상 {len(pairs)}건") + # 증분 기록 핸들 — 각 행 처리 직후 flush 하여 크래시 내성 확보. + inc_fh = None + if out_tsv is not None: + out_tsv.parent.mkdir(parents=True, exist_ok=True) + new_file = not (resume and out_tsv.exists()) + inc_fh = open(out_tsv, "a", encoding="utf-8") + if new_file: + inc_fh.write(f"# git_head={head} pdf={use_pdf}\n") + inc_fh.write("verdict\torig_pg\trt_pg\tnote\trel\n") + inc_fh.flush() + hwp = Hwp(new=True, visible=visible) tmp_pdf = Path.cwd() / "_hpv_tmp.pdf" @@ -119,17 +148,27 @@ def page_count(p: Path) -> int: hwp.clear(option=1) return n - rows = [] - collapse = ok = other = 0 + rows = list(done_rows) + # 기존(resume) 분 카운트 반영 + collapse = sum(1 for x in done_rows if x[0] == "COLLAPSE") + ok = sum(1 for x in done_rows if x[0] == "OK") + other = sum(1 for x in done_rows if x[0] in ("EXPAND", "ERR")) + + def emit(rec): + rows.append(rec) + if inc_fh is not None: + inc_fh.write("\t".join(str(x) for x in rec) + "\n") + inc_fh.flush() + try: for i, (orig, rt, rel) in enumerate(pairs): try: o = page_count(orig) r = page_count(rt) except Exception as exc: # 파일별 격리 - rows.append(("ERR", -1, -1, type(exc).__name__, rel)) + emit(("ERR", -1, -1, type(exc).__name__, rel)) other += 1 - print(f" [{i+1:>3}/{len(pairs)}] {'ERR':>8} {rel}", flush=True) + print(f" [{i+1:>4}/{len(pairs)}] {'ERR':>8} {rel}", flush=True) continue if o == r: verdict, ok = "OK", ok + 1 @@ -137,8 +176,8 @@ def page_count(p: Path) -> int: verdict, collapse = "COLLAPSE", collapse + 1 else: verdict, other = "EXPAND", other + 1 - rows.append((verdict, o, r, "", rel)) - print(f" [{i+1:>3}/{len(pairs)}] {verdict:>8} pg {o}->{r} {rel}", flush=True) + emit((verdict, o, r, "", rel)) + print(f" [{i+1:>4}/{len(pairs)}] {verdict:>8} pg {o}->{r} {rel}", flush=True) finally: try: hwp.quit() @@ -149,15 +188,11 @@ def page_count(p: Path) -> int: tmp_pdf.unlink() except Exception: pass + if inc_fh is not None: + inc_fh.close() if out_tsv is not None: - out_tsv.parent.mkdir(parents=True, exist_ok=True) - with open(out_tsv, "w", encoding="utf-8") as fh: - fh.write(f"# git_head={head} pdf={use_pdf}\n") - fh.write("verdict\torig_pg\trt_pg\tnote\trel\n") - for v, o, r, note, rel in rows: - fh.write(f"{v}\t{o}\t{r}\t{note}\t{rel}\n") - print(f"\nTSV 저장: {out_tsv}") + print(f"\nTSV 저장(증분): {out_tsv}") total = len(rows) rate = 100.0 * collapse / total if total else 0.0 @@ -183,6 +218,8 @@ def main(argv: list[str]) -> int: ap.add_argument("--pdf", action="store_true", help="PDF 페이지수 교차검증(PyMuPDF)") ap.add_argument("-o", "--out", type=Path, default=None, help="결과 TSV 경로") ap.add_argument("--visible", action="store_true", help="한글 창 표시(디버깅)") + ap.add_argument("--resume", action="store_true", + help="기존 -o TSV 의 처리분을 건너뛰고 이어서 진행(전수 배치 크래시 내성)") args = ap.parse_args(argv) if args.batch: @@ -203,7 +240,7 @@ def main(argv: list[str]) -> int: pairs = rng.sample(pairs, args.sample) pairs.sort(key=lambda p: p[2]) - return run(pairs, args.out, args.visible, args.pdf) + return run(pairs, args.out, args.visible, args.pdf, resume=args.resume) if __name__ == "__main__": From 96768e9e27ab1d9ece2386b997f323f66d69bb9d Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 16:28:52 +0900 Subject: [PATCH 20/35] =?UTF-8?q?feat(oracle):=20=EC=A3=BC=EA=B8=B0?= =?UTF-8?q?=EC=A0=81=20Hwp=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20+=20ERR=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EB=8F=84=20(=EC=A0=84=EC=88=98=20=EB=B0=B0?= =?UTF-8?q?=EC=B9=98=20COM=20=EC=82=AC=EB=A7=9D=20=EB=8C=80=EC=9D=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit COM 인스턴스가 ~1868건 누적 후 전멸(이후 전부 ERR) 관측 → 300건마다 + ERR 발생 시 hwp.quit()+재생성. --resume 은 ERR 행을 버리고 재시도(성공분만 skip), TSV 재작성으로 중복 방지. 10k+ 전수 배치 완주 가능. Co-Authored-By: Claude Opus 4.8 (1M context) --- tools/verify_hangul_pages.py | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/tools/verify_hangul_pages.py b/tools/verify_hangul_pages.py index 0ba568196..bceecc9c6 100644 --- a/tools/verify_hangul_pages.py +++ b/tools/verify_hangul_pages.py @@ -104,9 +104,10 @@ def run(pairs, out_tsv, visible, use_pdf, resume=False) -> int: # [resume] 기존 out_tsv 의 처리분을 읽어 건너뛴다(증분 기록과 짝). 전수 배치 중 # COM 크래시 시 재실행으로 이어서 진행하기 위함. - done_rows = [] # (verdict, o, r, note, rel) + done_rows = [] # (verdict, o, r, note, rel) — 성공분만(ERR 제외 → 재시도) done_rels = set() if resume and out_tsv is not None and out_tsv.exists(): + err_retry = 0 with open(out_tsv, encoding="utf-8") as fh: for line in fh: line = line.rstrip("\n") @@ -114,10 +115,20 @@ def run(pairs, out_tsv, visible, use_pdf, resume=False) -> int: continue parts = line.split("\t") if len(parts) == 5: + if parts[0] == "ERR": + err_retry += 1 # ERR 은 done 처리 안 함 → 재시도 + continue done_rows.append(tuple(parts)) done_rels.add(parts[4]) + # ERR 행을 버리고 성공분만 남겨 TSV 재작성(중복 방지) — 이후 증분 append. + out_tsv.parent.mkdir(parents=True, exist_ok=True) + with open(out_tsv, "w", encoding="utf-8") as fh: + fh.write(f"# git_head={head} pdf={use_pdf}\n") + fh.write("verdict\torig_pg\trt_pg\tnote\trel\n") + for rec in done_rows: + fh.write("\t".join(str(x) for x in rec) + "\n") pairs = [p for p in pairs if p[2] not in done_rels] - print(f"# [resume] 기존 {len(done_rels)}건 건너뜀, 남은 {len(pairs)}건") + print(f"# [resume] 성공 {len(done_rels)}건 건너뜀, ERR {err_retry}건 재시도 포함 남은 {len(pairs)}건") print(f"# 한글 페이지 오라클 | git HEAD={head} | 대상 {len(pairs)}건") @@ -125,9 +136,10 @@ def run(pairs, out_tsv, visible, use_pdf, resume=False) -> int: inc_fh = None if out_tsv is not None: out_tsv.parent.mkdir(parents=True, exist_ok=True) - new_file = not (resume and out_tsv.exists()) - inc_fh = open(out_tsv, "a", encoding="utf-8") - if new_file: + if resume and out_tsv.exists(): + inc_fh = open(out_tsv, "a", encoding="utf-8") # 재작성된 파일에 이어쓰기 + else: + inc_fh = open(out_tsv, "w", encoding="utf-8") # fresh: truncate inc_fh.write(f"# git_head={head} pdf={use_pdf}\n") inc_fh.write("verdict\torig_pg\trt_pg\tnote\trel\n") inc_fh.flush() @@ -160,8 +172,21 @@ def emit(rec): inc_fh.write("\t".join(str(x) for x in rec) + "\n") inc_fh.flush() + # COM 인스턴스는 수천 건 누적 시 사망(과거 ~1868건에서 전멸) → 주기적 재시작. + restart_every = 300 + + def restart_hwp(): + nonlocal hwp + try: + hwp.quit() + except Exception: + pass + hwp = Hwp(new=True, visible=visible) + try: for i, (orig, rt, rel) in enumerate(pairs): + if i > 0 and i % restart_every == 0: + restart_hwp() # 주기적 재시작 try: o = page_count(orig) r = page_count(rt) @@ -169,6 +194,7 @@ def emit(rec): emit(("ERR", -1, -1, type(exc).__name__, rel)) other += 1 print(f" [{i+1:>4}/{len(pairs)}] {'ERR':>8} {rel}", flush=True) + restart_hwp() # ERR 후 COM 상태 불량 가능 → 재생성 continue if o == r: verdict, ok = "OK", ok + 1 From 771cbca406231e10d9c8701dcf4bfb1bb97aa7ca Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 16:36:34 +0900 Subject: [PATCH 21/35] =?UTF-8?q?fix(oracle):=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=20=EC=8B=9C=20Hwp.exe=20taskkill=20(=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=84=B8=EC=8A=A4=20=EB=88=84=EC=88=98=20200+=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hwp.quit() 만으로는 Hwp.exe 가 남아 누적→리소스 고갈 com_error. restart_hwp 가 taskkill /F /IM Hwp.exe 로 잔존 프로세스 정리 후 재생성. 주기 600건. Co-Authored-By: Claude Opus 4.8 (1M context) --- tools/verify_hangul_pages.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/verify_hangul_pages.py b/tools/verify_hangul_pages.py index bceecc9c6..2674902f1 100644 --- a/tools/verify_hangul_pages.py +++ b/tools/verify_hangul_pages.py @@ -25,6 +25,7 @@ import random import subprocess import sys +import time from pathlib import Path @@ -172,8 +173,9 @@ def emit(rec): inc_fh.write("\t".join(str(x) for x in rec) + "\n") inc_fh.flush() - # COM 인스턴스는 수천 건 누적 시 사망(과거 ~1868건에서 전멸) → 주기적 재시작. - restart_every = 300 + # COM 인스턴스는 수천 건 누적 시 사망(과거 ~1868건에서 전멸) → 주기적 하드 재시작. + # 주의: hwp.quit() 만으로는 Hwp.exe 프로세스가 남아 누적(200+ 누수 관측) → taskkill 병행. + restart_every = 600 def restart_hwp(): nonlocal hwp @@ -181,6 +183,13 @@ def restart_hwp(): hwp.quit() except Exception: pass + # 잔존 Hwp.exe 강제 종료(누수 방지) 후 새 인스턴스 생성. + try: + subprocess.run(["taskkill", "/F", "/IM", "Hwp.exe"], + capture_output=True, timeout=30) + except Exception: + pass + time.sleep(1) hwp = Hwp(new=True, visible=visible) try: From 914b1b17e451ed1fb2f6b2f73c52ca17ce9d4bef Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 16:40:58 +0900 Subject: [PATCH 22/35] =?UTF-8?q?fix(oracle):=20=EB=B0=B0=EC=B9=98=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20Hwp.exe=20=EC=A0=95=EB=A6=AC?= =?UTF-8?q?=20(=EC=98=A4=EC=97=BC=20=ED=99=98=EA=B2=BD=20=EC=B2=AB=20?= =?UTF-8?q?=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=8A=A4=20com=5Ferror=20=EB=B0=A9?= =?UTF-8?q?=EC=A7=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이전 배치 누수로 잔존한 Hwp.exe 가 있으면 새 인스턴스부터 com_error 다발 → 시작 시 taskkill 로 클린 스타트. 파일 자체는 정상(진단 확인), COM 환경 오염이 원인이었음. Co-Authored-By: Claude Opus 4.8 (1M context) --- tools/verify_hangul_pages.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/verify_hangul_pages.py b/tools/verify_hangul_pages.py index 2674902f1..1ff5e0fe7 100644 --- a/tools/verify_hangul_pages.py +++ b/tools/verify_hangul_pages.py @@ -103,6 +103,15 @@ def run(pairs, out_tsv, visible, use_pdf, resume=False) -> int: head = git_head() + # 깨끗한 시작 — 잔존 Hwp.exe(이전 배치 누수)를 정리한 뒤 인스턴스 생성. + # 오염된 COM 환경에서 시작하면 첫 인스턴스부터 com_error 다발(관측). + try: + subprocess.run(["taskkill", "/F", "/IM", "Hwp.exe"], + capture_output=True, timeout=30) + time.sleep(1) + except Exception: + pass + # [resume] 기존 out_tsv 의 처리분을 읽어 건너뛴다(증분 기록과 짝). 전수 배치 중 # COM 크래시 시 재실행으로 이어서 진행하기 위함. done_rows = [] # (verdict, o, r, note, rel) — 성공분만(ERR 제외 → 재시도) From c3c1c5c3fa161b8d8c8862576c679e44a884a71a Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 16:45:21 +0900 Subject: [PATCH 23/35] =?UTF-8?q?test(visual):=20opengov=2036392900=20?= =?UTF-8?q?=EB=9D=BC=EC=9A=B4=EB=93=9C=ED=8A=B8=EB=A6=BD=20=EB=B3=80?= =?UTF-8?q?=EC=9C=84=20=EB=93=9C=EB=A6=AC=ED=94=84=ED=8A=B8=20VISUAL=5FXFA?= =?UTF-8?q?IL=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit visual_baseline_all_samples 가 opengov/36392900(일일굴착복구공사현황보고) 에서 최대 변위 1.32px(> 0.5px, Page/Line3) 로 실패. base(stream/devel) serializer 로 동일 샘플 측정 시 변위가 1.32px 로 완전히 동일 — PR #1586 직렬화 변경과 무관한 **기존 드리프트**임을 확인. 게이트 규약(신규 샘플 미통과 시 사유와 함께 XFAIL)에 따라 등록(DispOver). 본질 정정은 별도 이슈. --- tests/visual_roundtrip_baseline.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/visual_roundtrip_baseline.rs b/tests/visual_roundtrip_baseline.rs index ac0e7428c..c97758afc 100644 --- a/tests/visual_roundtrip_baseline.rs +++ b/tests/visual_roundtrip_baseline.rs @@ -35,7 +35,13 @@ const VISUAL_XFAIL: &[(&str, &str)] = &[ // () 직렬화 정정으로 다수 PASS 승격됨. // 잔여: k-water-rfp(대형 복합). ("k-water-rfp.hwpx", "구조 불일치 2페이지(대형, 복합)"), - // opengov 실문서 말뭉치(Task #1564) 신규 편입분은 #1567 직렬화 정정으로 모두 PASS 승격됨. + // opengov 실문서 말뭉치(Task #1564) 신규 편입분은 #1567 직렬화 정정으로 구조 불일치 3건 + // 모두 PASS 승격됨. 잔여: 36392900(라운드트립 변위 드리프트 — base serializer 와 동일, + // PR #1586 무관 / 본질 정정은 별도 이슈). + ( + "opengov/36392900_결재문서본문_일일굴착복구공사현황보고.hwpx", + "최대 변위 1.32px > 임계 0.5px (직렬화 라운드트립 드리프트)", + ), ]; /// 검사 제외 — 샘플 자체가 HWPX 패키지가 아님(HWP5 가 .hwpx 확장자로 저장됨). From 2963ba7300a6cb587145a1c1827a9202874fd179 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 16:53:13 +0900 Subject: [PATCH 24/35] =?UTF-8?q?docs(oracle):=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=B6=95=EA=B4=B4=EC=9C=A8=20=ED=99=95=EC=A0=95=20?= =?UTF-8?q?~16%=20+=20restart=20=EC=A3=BC=EA=B8=B0=20600=20=ED=99=98?= =?UTF-8?q?=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 무작위 비편향 표본 631건 → 붕괴율 15.8%(±2.8%). 알파벳순 1879건 18.5%(부서편향). 전수(10816)는 COM 자동화 환경 한계(~500-1900서 사망, 특정 부서 모달 추정)로 미완 — 개별 파일은 클린 환경 정상 개방(rhwp 무관). 도구 강화(증분/resume/taskkill) 반영. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/tech/hwpx_page_collapse_cluster.md | 31 ++++++++++++++++------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/mydocs/tech/hwpx_page_collapse_cluster.md b/mydocs/tech/hwpx_page_collapse_cluster.md index ad1a757e2..1f0d8062f 100644 --- a/mydocs/tech/hwpx_page_collapse_cluster.md +++ b/mydocs/tech/hwpx_page_collapse_cluster.md @@ -4,18 +4,31 @@ - 바이너리: devel 0c72b210 (4 채택 누적) - 도구: `tools/verify_hangul_pages.py` (한글 PageCount 오라클) -## 1. 군집 규모 (중대) +## 1. 군집 규모 (중대) — 확정 -fidelity14 **PASS(IR diff=0) 파일 120건 표본**(seed 7) 한글 오라클: +fidelity14 **PASS(IR diff=0) 파일** 한글 오라클 표본 측정: -| 판정 | 건수 | 비율 | -|------|----:|----:| -| OK | 102 | 85% | -| **COLLAPSE** | **17** | **14%** | -| ERR(COM 열기 실패) | 1 | 1% | +| 표본 | 측정 | COLLAPSE | 붕괴율 | 95% CI | +|------|----:|----:|----:|----:| +| 무작위 A (seed 20260627) | 517 | 83 | 16.1% | ±3.2% | +| 무작위 B (seed 7) | 119 | 17 | 14.3% | ±6.3% | +| **무작위 합집합(비편향)** | **631** | **100** | **15.8%** | **±2.8%** | +| 참고: 알파벳순 first | 1879 | 347 | 18.5% | ±1.8% | -→ **IR 게이트를 통과한 파일의 ~14%가 한글에서 페이지 붕괴.** 단일 파일(#1589 최초 36384160)이 -아닌 **대규모 군집**. IR diff=0 ≠ 시각 무손실의 가장 큰 잔존 갭. +→ **IR 게이트 통과 파일의 ~16%(15.8±2.8%)가 한글에서 페이지 붕괴.** 단일 파일(#1589 최초 +36384160)이 아닌 **대규모 군집**. IR diff=0 ≠ 시각 무손실의 가장 큰 잔존 갭. + +> 알파벳순 표본(18.5%)이 무작위(15.8%)보다 높음 — 부서별 편차(초기 알파벳 부서의 실정보고 등 +> 복합 템플릿이 붕괴 빈발) 시사. 비편향 추정은 **~16%**. + +### 전수(10816) 미완 사유 — COM 환경 한계 (rhwp 무관) + +한글 COM 자동화가 **~500–1900 오퍼레이션 후 사망**(com_error 다발). 도구 강화로 대응: +- 증분 기록 + `--resume`(크래시 재개), 주기적 `taskkill /F /IM Hwp.exe` + 재시작(누수 200+ 방지), + 시작 시 정리. +- 그럼에도 특정 부서(예 도로사업소 시설보수과 실정보고) 연속 처리 시 모달 다이얼로그/보안모듈 + 추정 원인으로 회복 불가. 개별 파일은 클린 환경에서 정상 개방(진단 확인) → **rhwp/파일 무관, + COM 자동화 환경 한계**. 무작위 표본으로 충분히 확정. ## 2. 붕괴 패턴 From 2d02356ef2ded8f48bab7e40df70cea7e7bb3e53 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 17:12:21 +0900 Subject: [PATCH 25/35] =?UTF-8?q?docs(#1589):=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=B6=95=EA=B4=B4=20=EA=B7=BC=EB=B3=B8=EC=9B=90?= =?UTF-8?q?=EC=9D=B8=20=ED=86=B5=EC=A0=9C=20=EC=8B=A4=ED=97=98=20=E2=80=94?= =?UTF-8?q?=20section0=20=ED=99=95=EC=A0=95=20+=209=ED=9B=84=EB=B3=B4=20?= =?UTF-8?q?=EB=B0=B0=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 거의 동일 쌍(관악산 붕괴/북한산 OK)으로 file-specific 아님 확정. 하이브리드 bisection (charPr 매핑 동일=유효)으로 rt-section0 원인 확정(header/탭 배제). 빈런·curSz·noteLine· noteSpacing·fwSpace·para id·linesegarray(96/96 동일)·outlineRef 등 9+ 후보 통제 실험 전부 배제 → 누적/미세 상호작용 효과(한글 내부 레이아웃 영역). Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/tech/hwpx_page_collapse_cluster.md | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/mydocs/tech/hwpx_page_collapse_cluster.md b/mydocs/tech/hwpx_page_collapse_cluster.md index 1f0d8062f..15d468eea 100644 --- a/mydocs/tech/hwpx_page_collapse_cluster.md +++ b/mydocs/tech/hwpx_page_collapse_cluster.md @@ -62,6 +62,32 @@ orig↔rt 비교: **IR-비교 가능 메트릭 전부 동일**. 단순 원인 아님. - rt 가 `Preview/PrvImage.png` 추가(썸네일, 레이아웃 무관). +## 5b. 근본원인 좁히기 — 통제 실험 (거의 동일 쌍) + +**완벽한 비교쌍**: 붕괴 `36383351 [관악산] 산악구조대 구급의약품 폐기 계획`(2→1) vs OK +`36387726 [북한산] …`(동일 템플릿, 1문단 차). 두 파일의 **orig↔rt serialization 차이가 완전 동일** +(빈 hp:t +41/+39, 헤더 탭 −48KB, Preview) → **붕괴는 file-specific 아님, content 가 페이지 경계 +근처인지에만 의존** 확정. + +**하이브리드 bisection**(charPr id 매핑 동일=유효): + +| 조합 | 페이지 | +|------|----:| +| orig-sec + orig-hdr | 2 | +| orig-sec + rt-hdr | 2 | +| rt-sec + orig-hdr | **1** | +| rt-sec + rt-hdr | **1** | + +→ **rt-section0 이 원인**(header/탭 switch 확정 배제, header 무관). + +**개별 차이 통제 배제**(orig 수정 or rt-sec revert, 한글 페이지수로 판정 — 전부 붕괴 불변): +빈 `` 런·self-closed ``·``·curSz(0↔5669)·noteLine(NONE↔SOLID)· +noteSpacing·fwSpace(전각공백→공백)·para id(0x80000000↔순차)·linesegarray(**96/96 바이트 동일**)· +outlineShapeIDRef(0↔1). **9+ 후보 전부 단일 원인 아님**. + +→ **단일 변수로 재현 불가 = 누적/미세 상호작용 효과**(rt 의 빈런 표현·미세 spacing·shape 속성 +차이가 합쳐져 경계-근처 문서를 tip). 정밀 규명은 한글 내부 레이아웃 디버깅 영역(정적 XML 분석 한계). + ## 6. 결론 + 권고 붕괴는 **IR-identical content 인데 한글 reflow 결과만 다른 심층 레이아웃 충실도 결함**. 표면 From 0fd8b96ad59563b461e80f33dc79fede855b9faf Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 17:20:07 +0900 Subject: [PATCH 26/35] =?UTF-8?q?docs(troubleshooting):=20=EB=8C=80?= =?UTF-8?q?=EA=B4=84=ED=98=B8=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20=EC=9D=BD?= =?UTF-8?q?=EA=B8=B0=20=EC=8B=A4=ED=8C=A8=20=3D=20MSYS=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=EB=B3=80=ED=99=98=20quirk=20(rhwp=20=EB=B2=84?= =?UTF-8?q?=EA=B7=B8=20=EC=95=84=EB=8B=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Git Bash 가 /c/...[...] 경로를 글롭으로 보고 변환 스킵 → rhwp 가 변환안된 /c/ 받아 실패. Windows 경로(C:\, C:/)·PowerShell·배치(937건 전수 PASS)는 정상. rhwp 코드 수정 불요 (/c/ 처리 추가 시 Linux 빌드 충돌). 워크어라운드: Windows 경로 / MSYS_NO_PATHCONV. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../bracket_filename_msys_path.md | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 mydocs/troubleshootings/bracket_filename_msys_path.md diff --git a/mydocs/troubleshootings/bracket_filename_msys_path.md b/mydocs/troubleshootings/bracket_filename_msys_path.md new file mode 100644 index 000000000..3eafe2a26 --- /dev/null +++ b/mydocs/troubleshootings/bracket_filename_msys_path.md @@ -0,0 +1,41 @@ +# 대괄호 파일명 "읽기 실패" — Git Bash/MSYS 경로 변환 quirk (rhwp 버그 아님) + +## 증상 + +Git Bash 에서 대괄호(`[...]`) 포함 파일을 `/c/...` Unix 경로로 rhwp CLI 에 넘기면 실패: + +``` +$ ./target/release/rhwp.exe dump '/c/Users/.../36383351_..._[관악산] ... 보고.hwpx' -s 0 -p 0 +오류: 파일을 읽을 수 없습니다 - /c/Users/.../[관악산] ...: 지정된 경로를 찾을 수 없습니다. (os error 3) +``` + +## 원인 — MSYS 경로 변환 스킵 (rhwp 무관) + +Git Bash(MSYS)는 Windows .exe 에 인자를 넘길 때 `/c/Users/...` → `C:\Users\...` 자동 변환한다. +그러나 **경로에 `[...]` 가 있으면 글롭 패턴으로 간주해 변환을 스킵**, 변환 안 된 `/c/...` 를 +rhwp 에 그대로 전달한다. rhwp 는 `fs::read("/c/...")` 를 호출하나 Windows 에서 `/c/Users` 는 +유효 경로가 아니라 실패(os error 3). + +## 검증 (rhwp 는 대괄호 정상 처리) + +| 경로 형식 | 대괄호 파일 | 결과 | +|-----------|-----------|------| +| `C:\Users\...[관악산]...` (PowerShell/cmd) | ✅ 정상 | +| `C:/Users/...[관악산]...` (슬래시 Windows) | ✅ 정상 | +| `/c/Users/...[관악산]...` (MSYS Unix) | ❌ 실패 | +| `/c/Users/...비대괄호...` (MSYS Unix) | ✅ 정상(MSYS 변환됨) | + +**fidelity14 배치: 대괄호 파일 937건 전수 정상 처리**(935 PASS + 2 PARSE_FAIL=손상 다운로드). +→ rhwp 실사용(배치 rglob, PowerShell, Python Path)에 **영향 0**. + +## 해결 (코드 수정 불요) + +- **PowerShell/cmd 또는 Windows 경로(`C:\` / `C:/`)** 사용. +- Git Bash 에서 부득이 `/c/` 경로를 쓸 땐 `MSYS_NO_PATHCONV=1` 환경변수 + Windows 경로, + 또는 `cygpath -w` 로 변환. + +## rhwp 코드 수정 부적절 사유 + +`/c/...` 를 드라이브 C: 로 해석하도록 rhwp 에 추가하면 **Linux/WASM 빌드에서 `/c/Users` 가 +정상 절대경로인 것과 충돌**한다. `/c/...` 는 MSYS 관례일 뿐 표준 경로가 아니므로 Windows +프로그램이 파싱할 의무가 없다. rhwp 는 모든 표준 경로 형식을 대괄호 포함 정상 처리한다. From e2766eaba9f912a9e0a3da3dcf0dbadd5c11545f Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 17:28:39 +0900 Subject: [PATCH 27/35] =?UTF-8?q?docs(#1589):=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=B8=8C=EB=A0=88=EC=9D=B4=ED=81=AC=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=81=20=EC=B6=94=EC=A0=81=20=E2=80=94=20=EB=B0=9C=EC=8B=A0?= =?UTF-8?q?=EB=AA=85=EC=9D=98=20footer=20=EB=B8=94=EB=A1=9D=EC=9D=B4=20spi?= =?UTF-8?q?ll=20=EC=9A=94=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 한글 PDF 렌더 비교: orig 는 발신명의 footer(결재선/시행정보)가 2쪽으로 밀리고 rt 는 1쪽 하단에 수용. 본문 시각 동일, razor-thin 누적 높이차가 경계 tip. 붕괴=내용손실 아닌 페이지 분할 변동(§5c). Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/tech/hwpx_page_collapse_cluster.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mydocs/tech/hwpx_page_collapse_cluster.md b/mydocs/tech/hwpx_page_collapse_cluster.md index 15d468eea..2c90492d1 100644 --- a/mydocs/tech/hwpx_page_collapse_cluster.md +++ b/mydocs/tech/hwpx_page_collapse_cluster.md @@ -88,6 +88,28 @@ outlineShapeIDRef(0↔1). **9+ 후보 전부 단일 원인 아님**. → **단일 변수로 재현 불가 = 누적/미세 상호작용 효과**(rt 의 빈런 표현·미세 spacing·shape 속성 차이가 합쳐져 경계-근처 문서를 tip). 정밀 규명은 한글 내부 레이아웃 디버깅 영역(정적 XML 분석 한계). +## 5c. 시각 추적 — 한글 페이지 브레이크 (PDF 렌더 비교) + +`36383351 [관악산]` 을 한글로 PDF 내보내 페이지 레이아웃 직접 비교(pyhwpx save_as PDF → +PyMuPDF 렌더): + +- **본문 최상위 문단별 페이지 매핑**(KeyIndicator prnpageno): orig 는 para 0–8 = 1쪽, + **para 9(빈 문단, 문단나눔) = 2쪽**. rt 는 para 0–9 전부 1쪽. +- para 8 = `"붙임 구급 의약품 폐기 확인서(서식) 1부. 끝."`(마지막 본문, 양쪽 1쪽 동일). + +**시각 확인(렌더 이미지)**: +- orig 1쪽: 본문이 ~60% 지점("붙임…끝.")에서 끝, 하단 40% 공백. **발신명의 footer 블록은 2쪽**. +- orig 2쪽: 거의 비고 하단에 **발신명의 블록만**(결재선 "1팀장 강한석…산악구조대장 이낙규" + + "시행 산악구조대-2491" + "우 08825…" + "전화…"). +- **rt 1쪽: 동일 본문 + 발신명의 블록이 1쪽 하단에 모두 수용**. + +→ **붕괴의 시각적 실체 = 정부문서 표준 "발신명의" footer 블록(본문 뒤 하단 앵커)이 razor-thin +차이로 rt 에선 1쪽에 들어가고 orig 에선 2쪽으로 밀리는 것.** 본문은 시각적으로 완전 동일, +차이는 sub-line 누적 높이(§5b 9후보 배제와 정합 — 단일 원소 아닌 미세 누적이 경계를 tip). + +> 함의: 붕괴는 "텍스트/내용 손실"이 아니라 **razor-thin 레이아웃 마진에서의 페이지 분할 변동**. +> 실문서 다수가 발신명의 블록을 본문 끝 직후 하단에 두는 동일 양식이라 14–16% 가 경계 근처. + ## 6. 결론 + 권고 붕괴는 **IR-identical content 인데 한글 reflow 결과만 다른 심층 레이아웃 충실도 결함**. 표면 From 83249808425561203cd6490c673c7a1c3d000a49 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 17:47:51 +0900 Subject: [PATCH 28/35] =?UTF-8?q?docs(#1589):=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=B6=95=EA=B4=B4=20=EA=B7=BC=EB=B3=B8=EC=9B=90?= =?UTF-8?q?=EC=9D=B8=20=ED=99=95=EC=A0=95=20=E2=80=94=20holdAnchorAndSO=20?= =?UTF-8?q?=EC=A7=81=EB=A0=AC=ED=99=94=20=EB=93=9C=EB=A1=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 단락 이진탐색+정규화 diff 로 단일 속성까지 규명: 직렬화기가 holdAnchorAndSO 를 "0" 하드코딩(IR prevent_page_break 무시). orig 1→0 치환으로 붕괴 재현 확정. 붕괴파일 84% 가 hold=1 패턴. IR 비교 미검사로 게이트 미검출. 수정 가능한 실버그. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/tech/hwpx_page_collapse_cluster.md | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/mydocs/tech/hwpx_page_collapse_cluster.md b/mydocs/tech/hwpx_page_collapse_cluster.md index 2c90492d1..511027570 100644 --- a/mydocs/tech/hwpx_page_collapse_cluster.md +++ b/mydocs/tech/hwpx_page_collapse_cluster.md @@ -110,6 +110,35 @@ PyMuPDF 렌더): > 함의: 붕괴는 "텍스트/내용 손실"이 아니라 **razor-thin 레이아웃 마진에서의 페이지 분할 변동**. > 실문서 다수가 발신명의 블록을 본문 끝 직후 하단에 두는 동일 양식이라 14–16% 가 경계 근처. +## 5d. 근본원인 확정 — `holdAnchorAndSO` 직렬화 드롭 (실버그) + +§5b 에서 단일 변수 분리 실패 후, **단락 단위 이진 탐색**(rt-section 문단을 orig 로 되돌리며 +한글 페이지수 판정)으로 정확히 좁힘: + +- 문단 5-9 revert → 해소 → 문단 9(발신명의 footer 표 포함) 단독 revert → **해소**. +- 문단 9 정규화 diff(id/빈런 제거) → **유일 차이 1건**: + ``` + 외곽 footer 표(페이지 하단 앵커, vertRelTo="PAGE" vertAlign="BOTTOM")의 : + orig: holdAnchorAndSO="1" rt: holdAnchorAndSO="0" + ``` +- **결정 테스트**: orig 에서 `holdAnchorAndSO` 1→0 만 치환 → **2쪽→1쪽 붕괴 재현**. 확정. + +### 코드 (실버그) + +HWPX 직렬화기가 `holdAnchorAndSO` 를 **"0" 하드코딩**, 파싱된 IR 값 무시: +- `table.rs:146`, `picture.rs:407`, `shape.rs:899`, equation(`section.rs:1451`) = `("holdAnchorAndSO","0")`. +- 파서(`parser/hwpx/section.rs:1672`)는 정상 저장: `holdAnchorAndSO → common.prevent_page_break`(i32). +- **IR 비교가 `prevent_page_break` 미검사 → IR diff=0** (게이트 미검출, 시각만 붕괴). + +### 군집 적용성 + +무작위 400 표본 orig 의 `holdAnchorAndSO="1"` 보유: **붕괴 53/63(84%)**, OK 278/337(82%). +→ 직렬화기가 전수 1→0 드롭. 페이지 경계 근처 문서(붕괴군)에서 발신명의 footer(페이지 하단 앵커) +위치가 바뀌어 붕괴. **`holdAnchorAndSO` 보존 수정 시 붕괴군 대다수 해소 예상**(별 통제 비교 필요). + +> 결론: 페이지 붕괴는 "누적 미세차"가 아니라 **단일 속성 `holdAnchorAndSO` 직렬화 드롭**. §5b 의 +> 9후보가 모두 음성이었던 이유 — 진짜 원인이 그 목록 밖(pos 의 boolean 속성)이었음. + ## 6. 결론 + 권고 붕괴는 **IR-identical content 인데 한글 reflow 결과만 다른 심층 레이아웃 충실도 결함**. 표면 From 770e4a1e57adb0535fb88f6459cbf24495852eba Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 18:07:39 +0900 Subject: [PATCH 29/35] =?UTF-8?q?Task=20#1594:=20holdAnchorAndSO=20IR=20?= =?UTF-8?q?=EB=B3=B4=EC=A1=B4=20(RED=20+=20=EC=88=98=EC=A0=95)=20(Stage=20?= =?UTF-8?q?1+2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 직렬화 4지점(table/picture/shape/equation)이 holdAnchorAndSO 를 "0" 하드코딩 대신 common.prevent_page_break 값으로 방출. 페이지 하단 앵커 개체의 1→0 드롭(페이지 붕괴 #1589 주원인) 해소. RED 테스트 GREEN, lib 1969/0, baseline 4/4. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/plans/task_m100_1594.md | 54 +++++++++++++++++++++++++ mydocs/working/task_m100_1594_stage1.md | 19 +++++++++ src/serializer/hwpx/picture.rs | 3 +- src/serializer/hwpx/section.rs | 5 ++- src/serializer/hwpx/shape.rs | 3 +- src/serializer/hwpx/table.rs | 29 ++++++++++++- 6 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 mydocs/plans/task_m100_1594.md create mode 100644 mydocs/working/task_m100_1594_stage1.md diff --git a/mydocs/plans/task_m100_1594.md b/mydocs/plans/task_m100_1594.md new file mode 100644 index 000000000..f47280f75 --- /dev/null +++ b/mydocs/plans/task_m100_1594.md @@ -0,0 +1,54 @@ +# 수행계획서 — Task #1594 + +**제목**: HWPX 직렬화 시 holdAnchorAndSO 드롭(1→0) → 페이지 붕괴 수정 +**마일스톤**: M100 (v1.0.0) · **이슈**: edwardkim/rhwp#1594 · **브랜치**: `local/task1594` + +--- + +## 1. 배경 + +#1589 페이지 붕괴 군집(IR diff=0 PASS 파일의 ~16% 가 한글에서 붕괴)의 **주원인 확정**: +HWPX 직렬화기가 개체 `` 를 파싱 IR 값 무시하고 "0" 하드코딩. +페이지 하단 앵커 개체(발신명의 footer)에서 1→0 변경 시 한글 재배치로 페이지 붕괴. + +## 2. 근본원인 (확정) + +- 직렬화 하드코딩 4지점: `table.rs:146`, `picture.rs:407`, `shape.rs:899`, equation(`section.rs:1451`). +- 파서 정상 저장: `holdAnchorAndSO → common.prevent_page_break`(i32, `parser/hwpx/section.rs:1672`). +- `diff_documents` 가 `prevent_page_break` 미검사 → IR diff=0 (게이트 미검출, 시각만 붕괴). +- 결정 증거: orig 에서 1→0 치환 → 2쪽→1쪽 붕괴 재현. 단락 이진탐색으로 유일 차이 확정. +- 군집 적용성: 붕괴파일 84%(53/63) 가 hold=1. + +## 3. 수정 방향 + +1. **직렬화 보존**: 4지점이 `holdAnchorAndSO` 를 `c.prevent_page_break != 0 ? "1":"0"` 로 방출. + (form.rs 는 이미 prop 기반 — 확인 후 필요 시 정합.) +2. **게이트 검출**: `diff_documents` 개체 비교에 `prevent_page_break` 추가 → 본 클래스 IR 검출 + (직렬화 수정 후이므로 신규 회귀 아님; 미래 회귀 방지). + +## 4. 회귀 위험 (낮음) + +- 단순 값 보존(하드코딩 제거). 표/그림/도형/수식 공통 경로. +- baseline(samples/hwpx) 회귀 가능성 점검(holdAnchorAndSO 보존이 기존 기대와 충돌 여부). +- 채택 기준: 대표 파일 붕괴 해소 + baseline/lib 회귀 0 + IR 통제 비교 악화 0. + +## 5. 구현 단계 (3단계) + +### Stage 1 — RED 테스트 +- 개체(표/그림 등)에 `prevent_page_break=1` 설정 → serialize → reparse 후 보존 검증. + 현재 직렬화 "0" 하드코딩으로 1→0 → RED. (+ 가능 시 holdAnchorAndSO="1" XML 방출 단위 검증.) + +### Stage 2 — 직렬화 수정 +- 4지점 `holdAnchorAndSO` 를 IR 값 방출로 교체. Stage1 GREEN. +- `cargo test --lib` + `hwpx_roundtrip_baseline` 회귀 0. + +### Stage 3 — 게이트 검출 + 통제 비교 +- `diff_documents` 에 `prevent_page_break` 비교 추가. +- fidelity 전수 재측정(IR 통제 비교 악화 0) + 한글 오라클 표본으로 붕괴 해소 확인 + (36383351 등 대표 + 무작위 붕괴 표본 재측정). +- opengov 가드(36383351, 페이지수 보존) 편입. + +## 6. 산출물 +- 소스: `serializer/hwpx/{table,picture,shape,section(equation),roundtrip}.rs` +- 테스트: 신규 단위 + opengov 가드 +- 문서: `_stage1~3`, `_report` diff --git a/mydocs/working/task_m100_1594_stage1.md b/mydocs/working/task_m100_1594_stage1.md new file mode 100644 index 000000000..18d2da4d1 --- /dev/null +++ b/mydocs/working/task_m100_1594_stage1.md @@ -0,0 +1,19 @@ +# Task #1594 — Stage 1+2 완료보고서 (RED + 수정) + +**단계**: holdAnchorAndSO 보존 재현(RED) + 직렬화 수정 +**브랜치**: `local/task1594` + +## Stage 1 (RED) +`table.rs` 테스트 `task1594_hold_anchor_preserved`: prevent_page_break=1 표 직렬화 → +holdAnchorAndSO="1" 방출 검증. 현재 "0" 하드코딩으로 RED. (+ `_zero_when_unset` 기본 0 보존.) + +## Stage 2 (수정) +4지점이 holdAnchorAndSO 를 IR(`c.prevent_page_break != 0`)로 방출: +- `table.rs` write_pos, `picture.rs` write_pos, `shape.rs` write_pos, `section.rs` equation. + +## 검증 +- `task1594_*` 2건 GREEN, `cargo test --lib` 1969 passed/0 failed. +- `hwpx_roundtrip_baseline` 4/4, clippy 무경고. + +## 다음 +Stage 3 — diff_documents 에 prevent_page_break 추가 + fidelity 통제 비교 + 한글 붕괴 해소 검증. diff --git a/src/serializer/hwpx/picture.rs b/src/serializer/hwpx/picture.rs index 98e8766cd..995c3a12e 100644 --- a/src/serializer/hwpx/picture.rs +++ b/src/serializer/hwpx/picture.rs @@ -396,6 +396,7 @@ fn write_pos(w: &mut Writer, c: &CommonObjAttr) -> Result<(), Seria let allow_overlap = bool01(c.allow_overlap); let vert_offset = c.vertical_offset.to_string(); let horz_offset = c.horizontal_offset.to_string(); + let hold = bool01(c.prevent_page_break != 0); // [#1594] IR 보존 empty_tag( w, "hp:pos", @@ -404,7 +405,7 @@ fn write_pos(w: &mut Writer, c: &CommonObjAttr) -> Result<(), Seria ("affectLSpacing", "0"), ("flowWithText", flow_with_text), ("allowOverlap", allow_overlap), - ("holdAnchorAndSO", "0"), + ("holdAnchorAndSO", hold), ("vertRelTo", vert_rel_to_str(c.vert_rel_to)), ("horzRelTo", horz_rel_to_str(c.horz_rel_to)), ("vertAlign", vert_align_str(c.vert_align)), diff --git a/src/serializer/hwpx/section.rs b/src/serializer/hwpx/section.rs index 5fe6bebe6..cd4df0fde 100644 --- a/src/serializer/hwpx/section.rs +++ b/src/serializer/hwpx/section.rs @@ -1447,8 +1447,11 @@ fn render_equation(eq: &Equation) -> String { ) }; + // [#1594] holdAnchorAndSO 는 IR(prevent_page_break)을 보존(종전 "0" 하드코딩 제거). + let hold = if c.prevent_page_break != 0 { "1" } else { "0" }; + format!( - r#"{script}{shape_comment}"#, + r#"{script}{shape_comment}"#, text_wrap_to_hwpx(c.text_wrap), vert_rel_to_hwpx(c.vert_rel_to), horz_rel_to_hwpx(c.horz_rel_to), diff --git a/src/serializer/hwpx/shape.rs b/src/serializer/hwpx/shape.rs index 6c57f6f38..c4288d7c8 100644 --- a/src/serializer/hwpx/shape.rs +++ b/src/serializer/hwpx/shape.rs @@ -888,6 +888,7 @@ fn write_pos(w: &mut Writer, c: &CommonObjAttr) -> Result<(), Seria let treat = bool01(c.treat_as_char); let vert_offset = c.vertical_offset.to_string(); let horz_offset = c.horizontal_offset.to_string(); + let hold = bool01(c.prevent_page_break != 0); // [#1594] IR 보존 empty_tag( w, "hp:pos", @@ -896,7 +897,7 @@ fn write_pos(w: &mut Writer, c: &CommonObjAttr) -> Result<(), Seria ("affectLSpacing", "0"), ("flowWithText", bool01(c.flow_with_text)), ("allowOverlap", bool01(c.allow_overlap)), - ("holdAnchorAndSO", "0"), + ("holdAnchorAndSO", hold), ("vertRelTo", vert_rel_to_str(c.vert_rel_to)), ("horzRelTo", horz_rel_to_str(c.horz_rel_to)), ("vertAlign", vert_align_str(c.vert_align)), diff --git a/src/serializer/hwpx/table.rs b/src/serializer/hwpx/table.rs index 767474aea..afa33bdcf 100644 --- a/src/serializer/hwpx/table.rs +++ b/src/serializer/hwpx/table.rs @@ -135,6 +135,9 @@ fn write_pos(w: &mut Writer, c: &CommonObjAttr) -> Result<(), Seria let treat = bool01(c.treat_as_char); let vert_offset = c.vertical_offset.to_string(); let horz_offset = c.horizontal_offset.to_string(); + // [#1594] holdAnchorAndSO 는 IR(prevent_page_break)을 보존한다. 종전 "0" 하드코딩은 + // 페이지 하단 앵커 개체(발신명의 footer 등)의 1→0 드롭으로 한글 페이지 붕괴를 유발했다. + let hold = bool01(c.prevent_page_break != 0); empty_tag( w, "hp:pos", @@ -143,7 +146,7 @@ fn write_pos(w: &mut Writer, c: &CommonObjAttr) -> Result<(), Seria ("affectLSpacing", "0"), ("flowWithText", "1"), ("allowOverlap", "0"), - ("holdAnchorAndSO", "0"), + ("holdAnchorAndSO", hold), ("vertRelTo", vert_rel_to_str(c.vert_rel_to)), ("horzRelTo", horz_rel_to_str(c.horz_rel_to)), ("vertAlign", vert_align_str(c.vert_align)), @@ -548,6 +551,30 @@ mod tests { } } + // ---------- #1594: holdAnchorAndSO 보존 ---------- + + #[test] + fn task1594_hold_anchor_preserved() { + // [#1594] holdAnchorAndSO 는 IR(common.prevent_page_break)을 보존해야 한다. + // 현재 직렬화가 "0" 하드코딩 → 1→0 드롭(페이지 하단 앵커 개체에서 페이지 붕괴 원인). RED. + let mut t = empty_table(1, 1); + t.common.prevent_page_break = 1; + let xml = serialize(&t); + assert!( + xml.contains(r#"holdAnchorAndSO="1""#), + "holdAnchorAndSO 가 IR 값(1)으로 방출돼야 한다(현재 0 하드코딩): {}", + &xml[..xml.len().min(500)] + ); + } + + #[test] + fn task1594_hold_anchor_zero_when_unset() { + // prevent_page_break=0 이면 holdAnchorAndSO="0" (기존 동작 보존). + let t = empty_table(1, 1); + let xml = serialize(&t); + assert!(xml.contains(r#"holdAnchorAndSO="0""#), "기본 0: {}", &xml[..xml.len().min(300)]); + } + // ---------- #1387: write_caption — 표 캡션 직렬화 ---------- fn caption_with_text(text: &str) -> crate::model::shape::Caption { From a8f5911a81d78997aa5fa2d2ed8bd59cce93ea3c Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 18:19:29 +0900 Subject: [PATCH 30/35] =?UTF-8?q?Task=20#1594:=20diff=5Fdocuments=20?= =?UTF-8?q?=EC=97=90=20holdAnchorAndSO=20=EA=B2=8C=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(Stage=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ObjectHoldAnchor IrDifference + diff_hold_anchor 헬퍼. Table/Picture/Equation 비교에 prevent_page_break 검사 추가 → IR-invisible 였던 holdAnchorAndSO 드롭을 게이트가 검출 (미래 회귀 봉인). 직렬화 수정 후이므로 samples 회귀 0(baseline 4/4). Co-Authored-By: Claude Opus 4.8 (1M context) --- src/serializer/hwpx/roundtrip.rs | 62 ++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/serializer/hwpx/roundtrip.rs b/src/serializer/hwpx/roundtrip.rs index dd4c66d47..a92942f26 100644 --- a/src/serializer/hwpx/roundtrip.rs +++ b/src/serializer/hwpx/roundtrip.rs @@ -216,6 +216,14 @@ pub enum IrDifference { path: String, detail: String, }, + /// 개체 `holdAnchorAndSO`(IR `prevent_page_break`) 불일치 — 페이지 하단 앵커 + /// 개체에서 1→0 드롭 시 한글 페이지 붕괴를 유발(#1594). IR-invisible 였던 갭을 봉인. + ObjectHoldAnchor { + section: usize, + paragraph: usize, + path: String, + detail: String, + }, } impl std::fmt::Display for IrDifference { @@ -360,6 +368,16 @@ impl std::fmt::Display for IrDifference { "section[{}] paragraph[{}]{} tbl page_break: {}", section, paragraph, path, detail ), + ObjectHoldAnchor { + section, + paragraph, + path, + detail, + } => write!( + f, + "section[{}] paragraph[{}]{} holdAnchorAndSO: {}", + section, paragraph, path, detail + ), } } } @@ -410,6 +428,21 @@ fn diff_object_comment(a: &str, b: &str) -> Option { } } +/// 두 개체의 `prevent_page_break`(holdAnchorAndSO) 비교 (#1594). 다르면 detail, 같으면 None. +fn diff_hold_anchor( + a: &crate::model::shape::CommonObjAttr, + b: &crate::model::shape::CommonObjAttr, +) -> Option { + if a.prevent_page_break == b.prevent_page_break { + None + } else { + Some(format!( + "expected={} actual={}", + a.prevent_page_break, b.prevent_page_break + )) + } +} + /// HWPX 바이트 → parse → serialize → parse → 원본 IR과 비교. pub fn roundtrip_ir_diff(hwpx_bytes: &[u8]) -> Result { let doc1 = parse_hwpx(hwpx_bytes) @@ -936,6 +969,17 @@ fn diff_paragraph_char_shapes( detail: format!("expected={:?} actual={:?}", ta.page_break, tb.page_break), }); } + // [#1594] holdAnchorAndSO 보존 게이트 — 페이지 하단 앵커 개체 붕괴 봉인. + if let Some(detail) = + diff_hold_anchor(&ta.common, &tb.common) + { + diff.push(IrDifference::ObjectHoldAnchor { + section, + paragraph, + path: format!("{path}/ctrl[{ci}]tbl"), + detail, + }); + } for (cell_i, (cea, ceb)) in ta.cells.iter().zip(tb.cells.iter()).enumerate() { for (k, (qa, qb)) in cea.paragraphs.iter().zip(ceb.paragraphs.iter()).enumerate() @@ -991,6 +1035,15 @@ fn diff_paragraph_char_shapes( detail, }); } + // [#1594] holdAnchorAndSO 보존 게이트. + if let Some(detail) = diff_hold_anchor(&pia.common, &pib.common) { + diff.push(IrDifference::ObjectHoldAnchor { + section, + paragraph, + path: format!("{path}/ctrl[{ci}]pic"), + detail, + }); + } if let (Some(ca), Some(cb)) = (&pia.caption, &pib.caption) { for (k, (qa, qb)) in ca.paragraphs.iter().zip(cb.paragraphs.iter()).enumerate() { @@ -1012,6 +1065,15 @@ fn diff_paragraph_char_shapes( detail, }); } + // [#1594] holdAnchorAndSO 보존 게이트. + if let Some(detail) = diff_hold_anchor(&ea.common, &eb.common) { + diff.push(IrDifference::ObjectHoldAnchor { + section, + paragraph, + path: format!("{path}/ctrl[{ci}]eq"), + detail, + }); + } } (Control::Shape(sa), Control::Shape(sb)) => { let p = format!("{path}/ctrl[{ci}]shape"); From 373a88691d49c728e0e889925bb74de20cafea20 Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 18:31:56 +0900 Subject: [PATCH 31/35] =?UTF-8?q?Task=20#1594:=20=ED=86=B5=EC=A0=9C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20+=20opengov=20=EA=B0=80=EB=93=9C=20(Stage?= =?UTF-8?q?=203)=20=E2=80=94=20=EC=B1=84=ED=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IR 통제 비교 회귀 0(IR_DIFF 4, holdAnchor 게이트 0 mismatch). 한글: 36383351 붕괴 해소, 이전 OK 30/30 유지(악화 0). 36383351 opengov 가드(게이트 IR-visible化로 회귀 봉인). 한계: #1589 군집 이질적 — holdAnchorAndSO 는 부분집합만 해소, 대다수 다른 원인(후속). closes #1594 Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/report/task_m100_1594_report.md | 34 ++++++++++++++++++ mydocs/working/task_m100_1594_stage3.md | 26 ++++++++++++++ ...\355\222\210\355\217\220\352\270\260.hwpx" | Bin 0 -> 47821 bytes tests/fixtures/opengov_snapshot.tsv | 1 + 4 files changed, 61 insertions(+) create mode 100644 mydocs/report/task_m100_1594_report.md create mode 100644 mydocs/working/task_m100_1594_stage3.md create mode 100644 "samples/hwpx/opengov/36383351_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\352\264\200\354\225\205\354\202\260\354\202\260\354\225\205\352\265\254\354\241\260\353\214\200\352\270\211\354\213\235\354\235\230\354\225\275\355\222\210\355\217\220\352\270\260.hwpx" diff --git a/mydocs/report/task_m100_1594_report.md b/mydocs/report/task_m100_1594_report.md new file mode 100644 index 000000000..79e5aa7ff --- /dev/null +++ b/mydocs/report/task_m100_1594_report.md @@ -0,0 +1,34 @@ +# Task #1594 — 최종 결과보고서 + +**제목**: HWPX 직렬화 시 holdAnchorAndSO 드롭(1→0) 수정 +**마일스톤**: M100 · **이슈**: #1594 · **브랜치**: `local/task1594` + +## 1. 문제·근본원인 +HWPX 직렬화기가 개체 `` 를 IR 값 무시하고 "0" 하드코딩 +(table/picture/shape/equation). 페이지 하단 앵커 개체에서 1→0 드롭 시 한글 페이지 붕괴. +IR diff=0(게이트 미검사)라 시각-only. #1589 군집 단락 이진탐색으로 36383351 의 단일 원인 확정. + +## 2. 수정 +1. 직렬화 4지점이 `holdAnchorAndSO` 를 `c.prevent_page_break != 0` 로 방출(하드코딩 제거). +2. `diff_documents` 에 `ObjectHoldAnchor` 비교 추가(Table/Picture/Equation) → 게이트 봉인. + +## 3. 검증 +| 검사 | 결과 | +|------|------| +| 단위 RED→GREEN (table) | PASS | +| cargo test --lib | 1969/0 | +| hwpx_roundtrip_baseline | 4/4 | +| IR 통제 비교(11855) | IR_DIFF 4(회귀 0), holdAnchor 게이트 0 mismatch | +| 한글 오라클 | 36383351 붕괴 해소(2→2), 이전 OK 30/30 유지(악화 0) | + +## 4. 한계 (정직) +#1589 페이지 붕괴 **군집은 이질적**. holdAnchorAndSO 는 36383351 의 deciding 요인이나, +붕괴 표본의 22/30 은 holdAnchorAndSO 보존됐는데도 붕괴(다른 systematic 드롭 deciding). +→ 본 수정은 holdAnchorAndSO-deciding 부분집합만 해소. 군집 대다수는 후속(아래). + +## 5. 후속 +다른 IR-invisible 직렬화 드롭 후보(holdAnchorAndSO 와 동형): outlineShapeIDRef(0→1), +noteSpacing(미세 감소), noteLine(NONE→SOLID), curSz(0→5669). 각 별 조사 권장. + +## 6. 산출물 +소스: table/picture/shape/section(equation)/roundtrip.rs. 테스트: task1594_* + opengov 36383351. diff --git a/mydocs/working/task_m100_1594_stage3.md b/mydocs/working/task_m100_1594_stage3.md new file mode 100644 index 000000000..f70a94f14 --- /dev/null +++ b/mydocs/working/task_m100_1594_stage3.md @@ -0,0 +1,26 @@ +# Task #1594 — Stage 3 완료보고서 (게이트 + 통제 비교) + +**단계**: diff_documents 게이트 추가 + 통제 비교 · **브랜치**: `local/task1594` + +## 1. 게이트 추가 +`ObjectHoldAnchor` IrDifference + `diff_hold_anchor` 헬퍼. Table/Picture/Equation 비교에 +`prevent_page_break`(holdAnchorAndSO) 검사 추가 → IR-invisible 였던 드롭을 게이트가 봉인. + +## 2. IR 통제 비교 (fidelity15, 11855 파일) +- IR_DIFF **4** (fidelity14와 동일) → **수정+게이트의 IR 회귀 0**. +- holdAnchorAndSO 게이트가 0 mismatch 검출 = 직렬화 수정 정상(보존됨). + +## 3. 한글 오라클 (붕괴 해소 + 악화 검증) +- **36383351: 2쪽→2쪽 해소**(수정 전 1쪽 붕괴). holdAnchorAndSO 보존(1×"1") 확인. +- 이전 OK 표본 30: **30/30 OK 유지(악화 0)** — 보존 수정이라 OK 파일 붕괴 불가. +- 단, 이전 붕괴 표본 30: 22건이 holdAnchorAndSO 보존됐으나 **여전히 붕괴** → + **군집 이질적**: holdAnchorAndSO 는 36383351 의 deciding 요인이나 대다수는 다른 systematic + 드롭(outlineShapeIDRef·noteSpacing·noteLine·curSz)이 deciding. + +## 4. 판정 — 채택 +holdAnchorAndSO 수정은 **정확한 IR-충실 버그 수정**: 드롭된 속성 보존, 36383351 해소, +IR 회귀 0, 악화 0, 게이트 개선. **채택**. 단 #1589 군집의 대다수는 별 원인(후속). + +## 5. 후속 +군집 잔여 붕괴 = 다른 IR-invisible 직렬화 드롭(outlineShapeIDRef/noteSpacing/noteLine/curSz) +추정. 각 별 조사·수정 필요(holdAnchorAndSO 와 동형 패턴 가능성). diff --git "a/samples/hwpx/opengov/36383351_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\352\264\200\354\225\205\354\202\260\354\202\260\354\225\205\352\265\254\354\241\260\353\214\200\352\270\211\354\213\235\354\235\230\354\225\275\355\222\210\355\217\220\352\270\260.hwpx" "b/samples/hwpx/opengov/36383351_\352\262\260\354\236\254\353\254\270\354\204\234\353\263\270\353\254\270_\352\264\200\354\225\205\354\202\260\354\202\260\354\225\205\352\265\254\354\241\260\353\214\200\352\270\211\354\213\235\354\235\230\354\225\275\355\222\210\355\217\220\352\270\260.hwpx" new file mode 100644 index 0000000000000000000000000000000000000000..1e15e3a9fa1cb829a5c3037f76cfbdb4a6ef6a86 GIT binary patch literal 47821 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 MPs88&SrGvEUo#GKIRF3v literal 0 HcmV?d00001 diff --git a/tests/fixtures/opengov_snapshot.tsv b/tests/fixtures/opengov_snapshot.tsv index 60e41ed42..df27deb81 100644 --- a/tests/fixtures/opengov_snapshot.tsv +++ b/tests/fixtures/opengov_snapshot.tsv @@ -1,5 +1,6 @@ id status ir_diff_count class 36382399 PASS 0 본문 인라인 ColumnDef 드롭 회귀가드(#1584) +36383351 PASS 0 holdAnchorAndSO 드롭 회귀가드(#1594, 페이지 붕괴) 36389301 PASS 0 Ruby(덧말) 드롭 회귀가드(#1587) 36386761 PASS 0 빈 문단 spurious (0,0) 회귀가드(#1592) 36392900 PASS 0 선 도형 shapeComment 드롭 회귀가드(#1588) From bdb1933bbba25dd8e3f80c3446be5481ecbf3feb Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 18:48:05 +0900 Subject: [PATCH 32/35] =?UTF-8?q?Task=20#1595:=20ClickHere=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=ED=83=80=EC=9E=85=20CLICK=5FHERE=20=EA=B5=90?= =?UTF-8?q?=EC=A0=95=20(RED=20+=20=EC=88=98=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit field.rs:180 ClickHere => "CLICKHERE"(틀림) → "CLICK_HERE". 한글이 미인식하던 placeholder 타입을 정정 → 페이지 붕괴(#1589) 지배원인 해소. RED 테스트 GREEN, lib 1969/0, baseline 4/4. Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/plans/task_m100_1595.md | 33 +++++++++++++++++++++++++ mydocs/working/task_m100_1595_stage1.md | 15 +++++++++++ src/serializer/hwpx/field.rs | 6 +++-- src/serializer/hwpx/section.rs | 2 +- 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 mydocs/plans/task_m100_1595.md create mode 100644 mydocs/working/task_m100_1595_stage1.md diff --git a/mydocs/plans/task_m100_1595.md b/mydocs/plans/task_m100_1595.md new file mode 100644 index 000000000..d02233645 --- /dev/null +++ b/mydocs/plans/task_m100_1595.md @@ -0,0 +1,33 @@ +# 수행계획서 — Task #1595 + +**제목**: HWPX ClickHere 필드 타입 CLICKHERE→CLICK_HERE 수정 (페이지 붕괴 지배원인) +**마일스톤**: M100 · **이슈**: edwardkim/rhwp#1595 · **브랜치**: `local/task1595` + +## 1. 배경·근본원인 + +`field.rs:180` 이 `ClickHere => "CLICKHERE"` (언더스코어 누락) 방출. 정답은 `"CLICK_HERE"` +(파서 4254·템플릿 2250/6695). 한글이 "CLICKHERE" 미인식 → placeholder 높이 변동 → 페이지 붕괴. +파서 관대(둘 다 수용) → IR diff=0 → 게이트 미검출. #1589 군집 지배원인(붕괴파일 96% ClickHere, +패치 11/11 해소). + +## 2. 수정 방향 + +1. `field.rs:180` `ClickHere => "CLICK_HERE"`. +2. "CLICKHERE" 기대 테스트 갱신: `field.rs:217`, `section.rs:2427`. + +## 3. 회귀 위험 (낮음) + +단일 문자열 교정. 파서는 양형 수용이라 roundtrip 무해. 한글 인식 개선이 목적. +채택 기준: 대표 붕괴 해소 + baseline/lib 회귀 0 + 통제 비교 악화 0. + +## 4. 구현 단계 (3단계) + +- **Stage 1 — RED**: "CLICKHERE" 기대 테스트를 "CLICK_HERE" 기대로 갱신 → 현재 RED. + (+ ClickHere roundtrip 후 type 보존 단위 테스트.) +- **Stage 2 — 수정**: field.rs:180 교정. Stage1 GREEN + lib/baseline 회귀 0. +- **Stage 3 — 통제 비교**: fidelity 전수 재측정(악화 0) + 한글 오라클 붕괴 해소율 측정 + + opengov 가드. #1589 군집 해소 정량화. + +## 5. 산출물 +- 소스: `serializer/hwpx/field.rs` (+ 테스트 갱신) +- 문서: `_stage1~3`, `_report` diff --git a/mydocs/working/task_m100_1595_stage1.md b/mydocs/working/task_m100_1595_stage1.md new file mode 100644 index 000000000..b70ee3de7 --- /dev/null +++ b/mydocs/working/task_m100_1595_stage1.md @@ -0,0 +1,15 @@ +# Task #1595 — Stage 1+2 완료보고서 (RED + 수정) + +**브랜치**: `local/task1595` + +## Stage 1 (RED) +"CLICKHERE" 기대 테스트(field.rs:217, section.rs:2427)를 올바른 "CLICK_HERE" 기대로 갱신 → RED. + +## Stage 2 (수정) +`field.rs:180` `ClickHere => "CLICK_HERE"` (언더스코어 교정). + +## 검증 +- `field_begin_emits_type_attr` GREEN, `cargo test --lib` 1969/0, baseline 4/4, clippy 무경고. + +## 다음 +Stage 3 — fidelity 통제 비교 + 한글 오라클 붕괴 해소율 측정 + opengov 가드. diff --git a/src/serializer/hwpx/field.rs b/src/serializer/hwpx/field.rs index 35c2fff5c..7d2832d7d 100644 --- a/src/serializer/hwpx/field.rs +++ b/src/serializer/hwpx/field.rs @@ -177,7 +177,7 @@ fn field_type_str(t: FieldType) -> &'static str { MailMerge => "MAILMERGE", CrossRef => "CROSSREF", Formula => "FORMULA", - ClickHere => "CLICKHERE", + ClickHere => "CLICK_HERE", Summary => "SUMMARY", UserInfo => "USERINFO", Hyperlink => "HYPERLINK", @@ -214,7 +214,9 @@ mod tests { f.field_id = 42; let xml = to_string(|w| write_field_begin(w, &f)); assert!(xml.contains(r#"id="42""#)); - assert!(xml.contains(r#"type="CLICKHERE""#)); + // [#1595] 올바른 HWPX 값은 CLICK_HERE (언더스코어). 종전 "CLICKHERE" 는 + // 한글이 미인식해 ClickHere placeholder 높이 변동 → 페이지 붕괴(#1589). + assert!(xml.contains(r#"type="CLICK_HERE""#), "{xml}"); } #[test] diff --git a/src/serializer/hwpx/section.rs b/src/serializer/hwpx/section.rs index cd4df0fde..2c404f4a5 100644 --- a/src/serializer/hwpx/section.rs +++ b/src/serializer/hwpx/section.rs @@ -2424,7 +2424,7 @@ mod tests { let xml = String::from_utf8(write_section(§ion, &doc, 0, &mut ctx).unwrap()).unwrap(); assert!( - xml.contains(r#" Date: Sat, 27 Jun 2026 18:56:12 +0900 Subject: [PATCH 33/35] =?UTF-8?q?Task=20#1595:=20=ED=86=B5=EC=A0=9C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20=EA=B2=80=EC=A6=9D=20(Stage=203)=20?= =?UTF-8?q?=E2=80=94=20=EC=B1=84=ED=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 한글 오라클: 이전 붕괴 파일 37/40(92.5%) 해소, 이전 OK 30/30 유지(악화 0). IR 통제 비교 회귀 0(IR_DIFF 4). #1589 페이지 붕괴 군집 지배원인 단일 수정으로 대다수 해소. closes #1595 Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/report/task_m100_1595_report.md | 32 +++++++++++++++++++++++++ mydocs/working/task_m100_1595_stage3.md | 23 ++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 mydocs/report/task_m100_1595_report.md create mode 100644 mydocs/working/task_m100_1595_stage3.md diff --git a/mydocs/report/task_m100_1595_report.md b/mydocs/report/task_m100_1595_report.md new file mode 100644 index 000000000..d8e1b5f45 --- /dev/null +++ b/mydocs/report/task_m100_1595_report.md @@ -0,0 +1,32 @@ +# Task #1595 — 최종 결과보고서 + +**제목**: HWPX ClickHere 필드 타입 CLICKHERE→CLICK_HERE 수정 (페이지 붕괴 지배원인) +**마일스톤**: M100 · **이슈**: #1595 · **브랜치**: `local/task1595` + +## 1. 근본원인 +`serializer/hwpx/field.rs:180` 이 ClickHere 필드 타입을 `"CLICKHERE"`(언더스코어 누락)로 방출. +정답 `"CLICK_HERE"`(파서 4254·템플릿 2250/6695). 한글이 "CLICKHERE" 미인식 → ClickHere +placeholder 높이 변동 → 페이지 붕괴. 파서 관대(양형 수용)로 enum 동일 → IR diff=0(게이트 미검출). + +## 2. 수정 +`field.rs:180` `ClickHere => "CLICK_HERE"`. "CLICKHERE" 기대 테스트 2건 갱신. + +## 3. 검증 +| 검사 | 결과 | +|------|------| +| 단위 RED→GREEN | PASS (type="CLICK_HERE") | +| cargo test --lib | 1969/0 | +| baseline | 4/4 | +| IR 통제 비교(12042) | IR_DIFF 4(회귀 0) | +| 한글 오라클 붕괴 해소 | **37/40 (92.5%)** | +| 한글 오라클 악화 | 이전 OK 30/30 유지 (0) | + +## 4. 영향 +#1589 페이지 붕괴 군집(IR-invisible, PASS 파일 ~16%)의 **지배원인**. 붕괴파일 96% 가 ClickHere +보유, 본 수정으로 **92.5% 해소**. 시각 붕괴 갭 ~16% → ~1.3%(추정). 단일 1줄 수정. + +## 5. 후속 +잔여 붕괴 ~8%: holdAnchorAndSO(#1594, 일부) + 미상 소수. #1589 추가 좁히기 가능. + +## 6. 산출물 +소스: `serializer/hwpx/field.rs`(+테스트). 가드: `field_begin_emits_type_attr`(IR-invisible 라 단위 가드). diff --git a/mydocs/working/task_m100_1595_stage3.md b/mydocs/working/task_m100_1595_stage3.md new file mode 100644 index 000000000..8eba72e49 --- /dev/null +++ b/mydocs/working/task_m100_1595_stage3.md @@ -0,0 +1,23 @@ +# Task #1595 — Stage 3 완료보고서 (통제 비교) + +**브랜치**: `local/task1595` · **바이너리**: local/task1595 HEAD + +## 1. IR 통제 비교 (fidelity16, 12042 파일) +IR_DIFF **4** (불변) → 수정의 IR 회귀 0 (IR-invisible 수정; 파서가 CLICKHERE·CLICK_HERE 양형 +수용해 enum 동일 → IR 비교 불변). + +## 2. 한글 오라클 — 붕괴 해소율 +- 이전 붕괴 표본 40 재측정: **OK 37 / COLLAPSE 3 → 해소율 92.5%**. + (예: 36391546 8쪽→1쪽 붕괴 → 수정 후 8쪽.) +- 이전 OK 표본 30: **30/30 OK 유지 (악화 0)**. + +→ **#1589 페이지 붕괴 군집(~16%)의 대다수 해소**. 잔여 붕괴 ~8%(다른 원인: holdAnchorAndSO#1594 ++ 미상). 시각 붕괴 갭 ~16% → ~1.3%(추정). + +## 3. 회귀 가드 +단위 테스트 `field_begin_emits_type_attr`(type="CLICK_HERE" 단언)가 직렬화 회귀 봉인. +필드 타입 버그는 파서 정규화로 **본질적 IR-invisible**(enum 동일) → diff_documents 추가 불가, +단위 테스트가 유일·충분한 가드. + +## 4. 판정 — 채택 +지배원인 단일 수정으로 붕괴 92.5% 해소, 악화 0, IR/baseline/lib 회귀 0. 채택. From 5c87940a6c1d674b5562e99df1bf6340795efc4e Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 19:05:48 +0900 Subject: [PATCH 34/35] =?UTF-8?q?style:=20rustfmt=20=EC=A0=81=EC=9A=A9=20(?= =?UTF-8?q?serializer/hwpx=20roundtrip=C2=B7table=20=E2=80=94=20CI=20Forma?= =?UTF-8?q?t=20check=20=EC=88=98=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/serializer/hwpx/roundtrip.rs | 4 +--- src/serializer/hwpx/table.rs | 6 +++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/serializer/hwpx/roundtrip.rs b/src/serializer/hwpx/roundtrip.rs index a92942f26..bbeb2fb5c 100644 --- a/src/serializer/hwpx/roundtrip.rs +++ b/src/serializer/hwpx/roundtrip.rs @@ -970,9 +970,7 @@ fn diff_paragraph_char_shapes( }); } // [#1594] holdAnchorAndSO 보존 게이트 — 페이지 하단 앵커 개체 붕괴 봉인. - if let Some(detail) = - diff_hold_anchor(&ta.common, &tb.common) - { + if let Some(detail) = diff_hold_anchor(&ta.common, &tb.common) { diff.push(IrDifference::ObjectHoldAnchor { section, paragraph, diff --git a/src/serializer/hwpx/table.rs b/src/serializer/hwpx/table.rs index afa33bdcf..a7662c943 100644 --- a/src/serializer/hwpx/table.rs +++ b/src/serializer/hwpx/table.rs @@ -572,7 +572,11 @@ mod tests { // prevent_page_break=0 이면 holdAnchorAndSO="0" (기존 동작 보존). let t = empty_table(1, 1); let xml = serialize(&t); - assert!(xml.contains(r#"holdAnchorAndSO="0""#), "기본 0: {}", &xml[..xml.len().min(300)]); + assert!( + xml.contains(r#"holdAnchorAndSO="0""#), + "기본 0: {}", + &xml[..xml.len().min(300)] + ); } // ---------- #1387: write_caption — 표 캡션 직렬화 ---------- From e91b8ad308a4e4f2cb93031977d7dded6c021d3e Mon Sep 17 00:00:00 2001 From: Jaeook Ryu Date: Sat, 27 Jun 2026 19:07:04 +0900 Subject: [PATCH 35/35] =?UTF-8?q?docs(#1589):=20=EC=9E=94=EC=97=AC=20?= =?UTF-8?q?=EB=B6=95=EA=B4=B4(~8%)=20=EC=A2=81=ED=9E=88=EA=B8=B0=20?= =?UTF-8?q?=E2=80=94=20=EB=B6=88=EC=99=84=EC=A0=84=20generic-shape=20?= =?UTF-8?q?=EC=A7=80=EC=98=A4=EB=A9=94=ED=8A=B8=EB=A6=AC=20=EC=A7=81?= =?UTF-8?q?=EB=A0=AC=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CLICK_HERE(#1595) 후 잔여 붕괴 3건 이진탐색: 전부 polygon/ellipse 보유, render_common_shape_xml 이 도형 지오메트리(lineShape/points/fillBrush) 드롭이 deciding(태그속성 복원 미해소 확인). 도형 직렬화 완성이 별 타스크 필요(우선순위 낮음, long tail). Co-Authored-By: Claude Opus 4.8 (1M context) --- mydocs/tech/hwpx_page_collapse_cluster.md | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mydocs/tech/hwpx_page_collapse_cluster.md b/mydocs/tech/hwpx_page_collapse_cluster.md index 511027570..f6c31a04d 100644 --- a/mydocs/tech/hwpx_page_collapse_cluster.md +++ b/mydocs/tech/hwpx_page_collapse_cluster.md @@ -139,6 +139,30 @@ HWPX 직렬화기가 `holdAnchorAndSO` 를 **"0" 하드코딩**, 파싱된 IR > 결론: 페이지 붕괴는 "누적 미세차"가 아니라 **단일 속성 `holdAnchorAndSO` 직렬화 드롭**. §5b 의 > 9후보가 모두 음성이었던 이유 — 진짜 원인이 그 목록 밖(pos 의 boolean 속성)이었음. +## 5e. 잔여 붕괴(~8%) 좁히기 — 불완전 generic-shape 지오메트리 + +#1595(CLICK_HERE) 후 잔여 붕괴 표본 3건(36396457·36389684·36385226) 이진탐색·특성화: + +| 파일 | 섹션 | 도형 | deciding | +|------|----:|------|----------| +| 36396457 | 3 | polygon×4 | section2 문단23 polygon | +| 36389684 | 4 | polygon×5,pic×2 | (polygon 추정) | +| 36385226 | 1 | ellipse×9,pic×2 | (ellipse 추정) | + +**3건 전부 generic-shape(polygon/ellipse) 보유** → 공통 경로 `render_common_shape_xml` +(section.rs:1327)이 불완전: +- 태그에서 `numberingType="PICTURE"`·`dropcapstyle`·`href`·`groupLevel`·`instid` 드롭. +- `` 에서 affectLSpacing·flowWithText·allowOverlap·holdAnchorAndSO 누락. +- **드로잉 지오메트리(lineShape·points·fillBrush) 드롭/축약**(rt −2614자) — **이것이 deciding**. + +**통제 테스트(36396457 section2)**: polygon 태그속성 복원만으로는 미해소(page 4) → +**지오메트리 드롭이 원인**. 문단23(polygon 포함) 전체 revert 시에만 해소(page 11). + +→ **잔여 붕괴의 근본 = generic-shape(polygon/ellipse/arc/curve) 지오메트리 직렬화 미완** +(shape.rs:11 "Arc/Polygon/Curve 확대 별도 분류" 갭). rect/picture 와 달리 실제 도형 데이터가 +보존되지 않아 렌더 크기·레이아웃 변동 → 경계 근처 문서 붕괴. **별 타스크(도형 직렬화 완성)** +필요, 우선순위 낮음(잔여 ~8% = 군집의 long tail). + ## 6. 결론 + 권고 붕괴는 **IR-identical content 인데 한글 reflow 결과만 다른 심층 레이아웃 충실도 결함**. 표면