Skip to content
Closed
Show file tree
Hide file tree
Changes from 99 commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
e0cdc2e
Task #435 Stage 1: 베이스라인 측정 + 진단 데이터 수집
planet6897 Apr 29, 2026
0879f11
Task #435 Stage 2: col 1 reserve 정정 (#393 옵션 A)
planet6897 Apr 29, 2026
bd08d6b
Task #435 Stage 3: 일반 페이지 누적 부족 조사 (코드 변경 없음)
planet6897 Apr 29, 2026
0a096fc
Task #435 Stage 5: 최종 결과보고서 + 오늘할일 갱신
planet6897 Apr 29, 2026
2da9c8d
Merge local/task435: Task #435 exam_kor 24→22 (#393 옵션 A)
planet6897 Apr 29, 2026
a6416bf
Merge branch 'devel' into local/task435
planet6897 Apr 29, 2026
50b02f3
Merge branch 'local/task435' into local/devel
planet6897 Apr 29, 2026
3884305
Task #439 Stage 1: 베이스라인 측정 + 진단 (활성 엔진 확인)
planet6897 Apr 29, 2026
4ea2746
Task #439 Stage 2: 원인 확정 + 구현 계획서
planet6897 Apr 29, 2026
99f1596
Task #439 Stage 3: Square wrap 표 누적 정책 max 적용
planet6897 Apr 29, 2026
df2aff3
Task #439 Stage 4: 최종 결과보고서 + 오늘할일 갱신
planet6897 Apr 29, 2026
50b5cab
Merge local/task439: Task #439 Square wrap 표 직후 col 0 over-fill
planet6897 Apr 29, 2026
c151156
Task #445 Stage 1+2: paragraph border 가 col_bottom 너머로 그려지는 문제 수정
planet6897 Apr 29, 2026
10d8709
Task #445 Stage 3: 머리말/꼬리말 wrap=TopAndBottom 표 anchor 위치 보정
planet6897 Apr 29, 2026
717ca1f
Task #445 Stage 4: 최종 결과보고서 + 오늘할일 갱신
planet6897 Apr 29, 2026
9bf5a74
Merge branch 'devel' into local/devel
planet6897 Apr 29, 2026
33a3802
Merge branch 'local/devel' into local/task445
planet6897 Apr 29, 2026
3dd8695
Task #452 Stage 1: 수행/구현 계획서 + baseline 측정
planet6897 Apr 29, 2026
aafccb1
Task #452 Stage 2: paragraph_layout trailing line_spacing 정합 + golden 갱신
planet6897 Apr 29, 2026
12a8b92
Task #452 Stage 3: 광범위 회귀 검증 — 페이지수/Task #332 회귀 0
planet6897 Apr 29, 2026
5129faa
Task #452 Stage 4: 최종 결과보고서 + 오늘할일 갱신
planet6897 Apr 29, 2026
3ee99cf
Merge local/task452: 단락 마지막 줄 trailing line_spacing 정합 (#452)
planet6897 Apr 29, 2026
2538774
Merge branch 'devel' into local/devel
planet6897 Apr 29, 2026
d87f166
Merge branch 'devel' into local/devel
planet6897 Apr 29, 2026
d87af59
Task #455 Stage 2: 인라인 글상자(tac=true + TextBox) 외부 본문 텍스트 누락 수정
planet6897 Apr 29, 2026
bfe763f
Task #455 Stage 3+4: 최종 결과보고서 + PR 메시지 + 오늘할일 갱신
planet6897 Apr 29, 2026
56333d9
Merge local/task455: 인라인 글상자(tac=true + TextBox) 외부 본문 텍스트 누락 수정 (#455)
planet6897 Apr 29, 2026
35c32a7
Merge branch 'devel' into local/devel
planet6897 Apr 29, 2026
829cb0b
Task #459: 다단 후속 페이지 LINE_SEG vpos-reset 단 경계 미인식 수정
planet6897 Apr 29, 2026
8e0172c
Merge local/task459: 다단 후속 페이지 LINE_SEG vpos-reset 단 경계 미인식 수정 (#459)
planet6897 Apr 29, 2026
2fcb06a
Merge branch 'devel' into local/devel
planet6897 Apr 29, 2026
427db1f
Task #462: TAC Picture 인라인 line advance 누락 수정
planet6897 Apr 29, 2026
b8fc89f
Merge local/task462: TAC Picture 인라인 line advance 누락 수정 (#462)
planet6897 Apr 29, 2026
2a074be
Task #463: 수행계획서 + 구현계획서
planet6897 Apr 29, 2026
6a6bbf8
Task #463 Stage 2: 셀 단락이 본문 외곽선 큐에 leakage 하지 않도록 게이팅
planet6897 Apr 29, 2026
b82e422
Task #463 Stage 3: 시각 검증 + 회귀 보고서
planet6897 Apr 29, 2026
7c46be0
Task #463 Stage 4: 최종 결과 보고서 + orders 갱신
planet6897 Apr 29, 2026
3728515
Merge local/task463: exam_kor 14p 본문 외곽선 셀 leakage 수정 (#463)
planet6897 Apr 29, 2026
58270f8
Task #463 Stage 5: 박스 geometry max-extent + wrap host override + floa…
planet6897 Apr 29, 2026
6b3ef4b
Merge local/task463 Stage 5: 14p 박스 정합 후속 수정 (#463)
planet6897 Apr 29, 2026
0e81119
Task #463 Stage 6: wrap host 텍스트 들여쓰기 이중 적용 수정
planet6897 Apr 29, 2026
90276ca
Merge local/task463 Stage 6: wrap host 들여쓰기 수정 (#463)
planet6897 Apr 29, 2026
7033827
Merge local/devel into local/task463 for Stage 7
planet6897 Apr 29, 2026
eedc395
Task #463 Stage 7: 인라인 TAC 그림 crop 누락 수정
planet6897 Apr 29, 2026
c500a07
Task #463 Stage 8: 확장 바탕쪽 헤더 중복 렌더링 수정
planet6897 Apr 29, 2026
a5d3f7a
Task #463: 최종 결과 보고서 갱신 (Stage 5~8 추가) + orders 갱신
planet6897 Apr 29, 2026
c71fa49
Merge local/task463 Stage 7+8: 인라인 그림 crop + 확장 바탕쪽 중복 수정 (#463)
planet6897 Apr 29, 2026
48fcf13
Task #463 후속: snapshot golden 갱신 (Stage 2 cell_ctx 게이팅 부작용 정리)
planet6897 Apr 29, 2026
154b4e8
Task #468: cross-column 박스 연속 partial 플래그 보정
planet6897 Apr 29, 2026
5598fc1
Task #468: 최종 보고서 + orders 갱신
planet6897 Apr 29, 2026
ae7b1c8
Merge local/task468: cross-column 박스 연속 partial 플래그 보정 (#468)
planet6897 Apr 29, 2026
ca31fb7
Task #469: cross-column partial 박스 inset 으로 인한 col_top/col_bot 경계 침범 수정
planet6897 Apr 29, 2026
59d0649
Merge local/task469: cross-column partial 박스 col_top/col_bot 침범 수정 (#…
planet6897 Apr 29, 2026
7e632e1
Task #470: 다단 cross-paragraph vpos-reset 검출 완화 (cv != 0 케이스)
planet6897 Apr 29, 2026
c9a919a
Merge local/task470: 다단 cross-paragraph vpos-reset 검출 완화 (#470)
planet6897 Apr 29, 2026
64cb32d
Task #471: Task #468 cross-column 검출을 stroke_sig 비교로 변경
planet6897 Apr 30, 2026
f3e26af
Merge local/task471: Task #468 cross-column 검출 stroke_sig 비교 (#471)
planet6897 Apr 30, 2026
74e1e71
Merge branch 'devel' into local/devel — 충돌 해결
planet6897 Apr 30, 2026
c0dc38c
Merge branch 'devel' into local/devel
planet6897 Apr 30, 2026
8f5a079
Task #473: 그림 crop 변환 scale 기준을 96-DPI 관행 (75 HU/px) 으로 변경
planet6897 Apr 30, 2026
8e39f4a
Merge local/task473: 그림 crop 변환 scale 기준 정정 (#473)
planet6897 Apr 30, 2026
4414876
Task #476: PartialParagraph의 인라인 Shape 페이지 라우팅 정정
planet6897 Apr 30, 2026
2c130ed
Merge local/task476: PartialParagraph의 인라인 Shape 페이지 라우팅 정정 (#476)
planet6897 Apr 30, 2026
0832e1e
Merge local/devel: 인라인 Shape 페이지 라우팅 정정 (#476)
planet6897 Apr 30, 2026
9e8d498
Task #480: wrap=Square 표의 x 좌표에 paragraph margin 반영
planet6897 Apr 30, 2026
7ea75da
Merge local/task480: wrap=Square 표의 x 좌표 paragraph margin 반영 (#480)
planet6897 Apr 30, 2026
32254e9
Merge local/devel: wrap=Square 표 paragraph margin 반영 (#480)
planet6897 Apr 30, 2026
b6142e3
Task #483: 각주 multi-paragraph 처리에서 paragraph 간 line_spacing 누락
planet6897 Apr 30, 2026
21d2621
Merge local/task483: 각주 multi-paragraph line_spacing 정정 (#483)
planet6897 Apr 30, 2026
70b41cf
Merge local/devel: 각주 line_spacing 정정 (#483)
planet6897 Apr 30, 2026
1b4eaa8
Task #483 follow-up: 각주 마지막 paragraph trailing line_spacing 미적용
planet6897 Apr 30, 2026
4ba9ce6
Merge local/task483 follow-up: 각주 마지막 paragraph trailing ls 보정 (#483)
planet6897 Apr 30, 2026
47e747b
Merge local/devel: 각주 trailing ls 보정 (#483)
planet6897 Apr 30, 2026
80c25db
Merge local/devel: paragraph trailing ls 정정 (#479)
planet6897 Apr 30, 2026
fa73785
Task #479: paragraph 누적에서 trailing line_spacing 제외 (HWP vpos 정합)
planet6897 Apr 30, 2026
ac61682
Merge local/task479: paragraph trailing line_spacing 정정 (#479)
planet6897 Apr 30, 2026
73c6a95
Task #479: 한컴 정답지 광범위 비교 검증 보고서
planet6897 Apr 30, 2026
ef1ff58
Task #479 옵션 3 v2: paginator/layout 분리 정정
planet6897 Apr 30, 2026
16be777
Merge local/task479: 옵션 3 v2 paginator/layout 분리 (#479)
planet6897 Apr 30, 2026
5efac6f
Merge local/devel: #479 옵션 3 v2
planet6897 Apr 30, 2026
6d8d0e1
Task #488: 수식 토크나이저 폰트 스타일 키워드 prefix 분리 (Stage 1)
planet6897 Apr 30, 2026
1af552d
Task #488: 수식 렌더러 italic 파라미터 honor (Stage 2)
planet6897 Apr 30, 2026
d245791
Task #488: Stage 3 회귀 검증 + 최종 보고서
planet6897 Apr 30, 2026
45e01c3
Merge local/devel: Task #488 수식 토크나이저 + 렌더러 italic
planet6897 Apr 30, 2026
1991af5
Task #489: Picture+Square wrap 호스트 텍스트 LINE_SEG 적용
planet6897 Apr 30, 2026
e064d79
Merge local/task489: Task #489 Picture+Square wrap 호스트 텍스트 LINE_SEG 적용
planet6897 Apr 30, 2026
462db34
Task #492 자연해소: #489 정정으로 5번 밑단 짤림 해소 (orders 갱신)
planet6897 Apr 30, 2026
cf80c25
Task #490: 빈 텍스트 + TAC 수식 셀의 alignment 적용
planet6897 Apr 30, 2026
bf0929f
Merge local/task490: Task #490 빈 텍스트 + TAC 수식 셀 alignment 적용
planet6897 Apr 30, 2026
6949aca
Task #491 보류: 구체 재현 정보 필요 (orders 갱신)
planet6897 Apr 30, 2026
7bd933a
Task #495: 셀 paragraph 인라인 Shape 분기 가드 추가 (exam_science 박스 텍스트 중복 수정)
planet6897 Apr 30, 2026
f00d8c4
Merge local/task495: Task #495 셀 paragraph 인라인 Shape 분기 가드 추가
planet6897 Apr 30, 2026
88090e3
Task #496 보류: 단계 1 완료, 후보 (D) 보류 결정 (orders 갱신)
planet6897 Apr 30, 2026
1d0f6e0
Merge local/task496: Task #496 보류 (단계 1 완료, layout 리팩터링 시 종합 해결)
planet6897 Apr 30, 2026
1277eba
Task #464: 다단 col 1 vpos-reset 인식 + 페이지 break 처리 (#459 잔존 가드 제거)
planet6897 Apr 30, 2026
099de10
Merge local/task464_v2: Task #464 다단 col 1 vpos-reset 처리
planet6897 Apr 30, 2026
33ae04c
Task #466: compute_square_wrap_tbl_x_right horz_rel_to=Paper/Page 케이스 보강
planet6897 Apr 30, 2026
695edc8
Merge local/task466: Task #466 horz_rel_to=Paper/Page 케이스 보강
planet6897 Apr 30, 2026
71ca255
Merge branch 'local/devel' into devel
planet6897 Apr 30, 2026
bd6b139
Merge branch 'devel' into devel
planet6897 Apr 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,6 @@ rhwp-chrome/dist/
rhwp-safari/dist/
rhwp-safari/HWP Viewer/
rhwp-safari/.DS_Store

# 골든 SVG 비교 시 생성되는 임시 actual 파일
tests/golden_svg/**/*.actual.svg
9 changes: 9 additions & 0 deletions mydocs/orders/20260429.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# 오늘 할일 - 2026년 4월 29일

## M100 — v1.0.0 조판 엔진

| Issue | 타스크 | 상태 | 비고 |
|------|--------|------|------|
| #435 | exam_kor.hwp 24페이지 → 20페이지 정합 (한컴 PDF 호환) | **부분 완료 (24→22)** | `typeset.rs::compute_body_wide_top_reserve_for_para` 의 `VertRelTo::Paper` 분기 정정 (Paper-rel `vertical_offset` 을 body-rel 변환 안 하던 버그). 효과: page 1 단 1 +54.5px overflow / page 14 단 1 +106.2px overflow 해소 → pi=0.30, pi=1.25 split 차단 → page 2, 15 orphan 페이지 사라짐. 회귀: exam_eng 8 / k-water-rfp 28 / hwpspec 177 / synam-001 35 페이지 유지, cargo test 1062 passed. **잔여 22→20 미달성**: 섹션 1 페이지 14 (Square wrap 표 col 0 over-fill + col 1 under-use), 섹션 1 페이지 15 (단정의 2단인데 단 1 누락), 섹션 2 페이지 18 (pi=11 split orphan-like) 의 3 가지 별도 메커니즘. Stage 3 조사로 원래 가설 (누적 -100~-300px) 은 메트릭 차이일 뿐임 확인. 잔여 작업은 별도 task 로 분리 (옵션 A 종료) |
| #439 | Square wrap 표 직후 col 0 over-fill (exam_kor 페이지 14 단 0 1225>1211) | **완료 (22→20)** | `typeset.rs::place_table_with_text` 에서 Square wrap (어울림) 표일 때 `current_height` 누적을 `pre_height + table_total` → `max(pre_height, v_off + table_total)` 로 변경. 호스트 텍스트와 어울림 표가 같은 수직 영역을 공유하므로 더 큰 쪽만 한 번 누적. **Stage 1 부수 발견**: 활성 페이지네이션 엔진은 `engine.rs::Paginator` 가 아닌 `typeset.rs::TypesetEngine` (`engine.rs` 는 `RHWP_USE_PAGINATOR=1` 환경변수 fallback). 이슈 가설은 fallback 경로를 지목. 효과: 페이지 14 col 0 used 1225.8→1036.1 px, col 1 items 2→18, exam_kor 22→20 페이지 (목표 21 달성, 추가 -1 단축). 회귀 검증: 149개 sample HWP 중 exam_kor 만 변화, 148개 동일. cargo test 1066 passed. **#435 잔여 작업 (섹션 1 페이지 14 over-fill) 부분 해소** |
| #393 | 다단 col 1 시작 reserve 과대 산정 (exam_kor 페이지 1 pi=30 split) | **#435 Stage 2 로 수정 적용** | `compute_body_wide_top_reserve_for_para` Paper-rel 분기 정정. page 14 (pi=1.25 split) 동일 메커니즘 회귀 케이스 함께 해소. close 가능 (작업지시자 결정) |
| #445 | exam_kor 페이지 가운데 세로선 + 페이지 번호 박스 시각 결함 | **완료** | 두 결함 동시 해결. (1) Paragraph border (`border_fill_id`) 가 PartialParagraph 에서 col_bottom 을 초과해 페이지 바깥(p8: y=1671 / 페이지 1587 초과)까지 그려지던 버그 — `layout.rs build_single_column` merge 그룹을 col_area 바닥/꼭대기로 클램프 (Stage 1+2). (2) 꼬리말 paragraph 의 `wrap=TopAndBottom + vert=Para` 표(페이지 번호 박스)가 paragraph top 에 정렬되어 column line 끝과 박스 top 이 만나 "붙어 보이는" 문제 — `layout_header_footer_paragraphs` 에서 표 anchor y 에 `line_height/2` 를 더해 PDF 일치 (Stage 3). 검증: exam_kor p1~20 모든 페이지에서 박스 top y=1439.47 (PDF 380.6mm 일치), column line - 박스 갭 16.3~17.0px (PDF 16px 일치). cargo test 1117 passed. snapshot 1건 갱신 (`tests/golden_svg/issue-267/ktx-toc-page.svg` invisible 구조 rect height 5.34px 변경, 가시 변화 없음) |

## 버그

| Issue | 타스크 | 상태 | 비고 |
Expand Down
27 changes: 27 additions & 0 deletions mydocs/orders/20260430.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
# 오늘 할일 - 2026년 4월 30일

## M100 — 박스 정합

| Issue | 타스크 | 상태 | 비고 |
|------|--------|------|------|
| #468 | exam_kor 6p 좌측 단 [18~21] passage 박스 하단 줄 — cross-column 박스 연속 미감지 | **완료** | `paragraph_layout.rs:2527-2528` 의 partial 플래그가 단일 paragraph 내부 split 만 검출하던 한계를 해소. `para_border_ranges` 튜플에 `para_index` 추가 (9→10 필드). `build_single_column` merge 후 그룹의 첫/마지막 paragraph 의 sequential 인접 bf_id 검사로 partial_start/partial_end 보정. 결과: cross-column / cross-page 박스 연속 시 inner 경계 stroke 미렌더. exam_kor 6p col 0 박스 하단 stroke 미렌더 (PDF 일치) ✓, 6p col 1 박스 양방향 미렌더 ✓, 7p col 0 박스 상단 미렌더 ✓, 14p 단일 박스 정상 (Task #463 회귀 0). cargo test 1069 + svg_snapshot 6 통과, 5종 샘플 회귀 0 |
| #469 | exam_kor 2p 우측 단 (나) cross-column 박스 좌·우 세로선이 헤더선과 맞닿음 | **완료** | Task #468 후속. `layout.rs:1740` 의 `rect_y = y_start - top_pad` 가 partial_start 박스의 후속 부분을 col_top 위(헤더선)까지 확장. `effective_top_pad/effective_bot_pad` 도입하여 partial_start/partial_end 시 inset 적용 차단. exam_kor p2 우측 단 (나) 박스 세로선 y1: 196.55 → 211.65 ✓. 신규 통합 테스트 1건 추가, cargo test 1121 + svg_snapshot 6 통과, 회귀 0 |
| #470 | 21_언어_기출 1p 좌측 단 pi=10 cross-column vpos-reset 미인식 (cv != 0) | **완료** | Task #321 cross-paragraph vpos-reset 가드가 `cv == 0` 만 검출 → 컬럼 헤더 오프셋 (cv=9014) 인 다단 케이스 미감지. typeset.rs:415, 439 에 다단/단일 단 분기 도입: 다단은 `cv < pv && pv > 5000`, 단일 단은 기존 `cv == 0` 유지 (issue_418 partial-table split 회귀 차단). 21_언어_기출 OVERFLOW 13→10, exam_science 5→0, exam_social 4→1 (총 -11 건 추가 해소). hwpspec(단일 단) 회귀 0. cargo test 1122 통과 |
| #471 | Task #468 cross-column 검출이 stroke_sig 머지와 불일치 (#470 후속) | **완료** | Task #468 가 bf_id 동등 비교, 머지(Task #321 v6)는 stroke_sig 기준 → bf_id 다른 paragraph 가 한 그룹이 되면 그룹의 `g.0` 이 첫 range bf_id 만 보존되어 cross-column 인접 검출 실패. 좌측 (가) 박스(pi=6 bf=7 + pi=7~9 bf=4) 가 g.0=7, composed[10].bf=4 비교로 partial_end 미설정 → 4면 stroke rect 로 하단 가로선 발생. layout.rs:1670-1699 를 stroke_sig 비교로 변경. cargo test 1123 통과, OVERFLOW 회귀 0 |
| #473 | 그림 crop scale 기준 오류 — original_size_hu(표시 HU) 가 native HU 와 일치하지 않을 때 viewBox 과대 | **완료** | HWP crop 은 이미지 native 픽셀을 96-DPI HU 관행 (75 HU/px) 으로 인코딩. `compute_image_crop_src` 가 `original_size_hu`(표시 HU)를 scale 기준으로 사용 → 사용자가 그림 크기 변경 시 (21_언어_기출 12p `<보기>` 그림: orig 12 HU/px) viewBox 가 6.25× 과대. svg.rs:2385-2404 를 75 HU/px fallback 으로 변경 (orig/img_px 가 75 ± 5% 일 때만 orig 사용). 7종 샘플 415 페이지 / 32 nested SVG / 0 viewBox 과대 회귀. cargo test 1078 통과 |

## 잔존 이슈 (별도 task)

| Issue | 타스크 | 상태 | 비고 |
|------|--------|------|------|
| #464 | exam_kor 15p 우측 단 본문 overflow — pi=103-105 col 1 LINE_SEG vpos-reset 미인식 | 대기 | 수행계획서 작성 완료 (`mydocs/plans/task_m100_464.md`). `current_column == 0` 가드가 마지막 단의 vpos-reset 를 무시. 별도 작업 |
| #465 | exam_kor 16p PDF 우측 "홀수형" 뱃지 별도 요소 (master 외) | 대기 | 별도 조사 필요 |
| #466 | compute_square_wrap_tbl_x_right Paper/Page case 미구현 | 대기 | Task #463 Stage 5 후속 |
| #467 | extension master 다른 apply_to 처리 | 대기 | Task #463 Stage 8 후속 |
| #488 | 수식 토크나이저 rm/it/bold prefix 분리 + 렌더러 italic honor | **완료** | hwpeq 폰트 스타일 키워드(`rmK`/`rmCa`/`rmmol`/`itl`/`itaq`)가 식별자 prefix 로 합쳐져 토크나이저가 분리 못함 + svg/canvas 렌더러 Text arm 이 italic 파라미터를 무시. tokenizer.rs read_command 에 FONT_STYLES prefix 분리, svg_render/canvas_render Text arm 이 italic 파라미터 honor + 진입점 default italic=true. 단위 테스트 14건 추가 (tokenizer 8 + svg_render 6), 라이브러리 1092 통과. 8개 샘플 59페이지 raw prefix 0건. 시각 검증 중 발견된 4건 별도 이슈 분리: #489 그림 wrap, #490 셀 정렬, #491 답안지 위치, #492 컬럼 짤림 |
| #489 | exam_science 페이지 1 5번 그림이 본문 첫 줄을 가림 | **완료** | Picture+Square wrap (어울림) 호스트 paragraph 텍스트가 LINE_SEG.segment_width 무시하고 풀컬럼 너비로 justify → 그림 영역 침범 + 비정상 단어 간격. `layout/paragraph_layout.rs:layout_composed_paragraph` 에 비-TAC Picture/Shape Square wrap 감지 + LINE_SEG cs/sw 를 effective_col_x/effective_col_w 로 적용 (200 HU 노이즈 가드). 표 Square wrap (#362/#439/#463) 은 caller 가 col_area 자체를 좁혀 호출 → 조건 미발동(회귀 0). exam_science p1 pi=21 (5번) 정정 + p2 pi=37 (8번) 동일 패턴 자동 정정. 단위 테스트 1 추가, cargo test 1093 + svg_snapshot 6 + issue_418 1 통과. 9 종 샘플 263 페이지 byte 비교 = 261 동일 / 2 정정. 보조: `main.rs` dump 에 horz_align/vert_align 표시 |
| #490 | exam_science 페이지 1 3번 표 28/36 셀 중앙정렬 | **완료** | `paragraph_layout.rs:2227` 의 빈 runs + TAC 수식 분기 (Task #287 도입) 가 paragraph alignment 적용 누락 → text_len=0 + ctrls=1+ 셀의 수식이 좌측 고정. align_offset 계산 + inline_x 에 적용. exam_science p1 셀 7/11 의 28/36 수식 x=358.7 → 415.5 중앙 정렬. 단위 테스트 1 추가, cargo test 1094 통과. 9 종 샘플 263 페이지 byte 비교 = 257 동일 / 6 정정 (전 페이지 59 수식 모두 우측 이동, 회귀 0) |
| #491 | exam_science 페이지 1 2번 답안지 위치 약간 아래로 | **보류 (구체 재현 정보 필요)** | HWP IR 분석: pi=9 (3x5 표) vpos=47860 → y=787.4px 정상 (HWP 인코딩 위치와 일치). PDF (A4 595×841pts) 와 SVG (272×394mm 1028×1488px) 가 다른 페이지 크기를 사용해 직접 좌표 비교 불가. "약간 아래로" 미세 차이 추정으로 본 사이클에서 명확한 재현 어려움. #489/#490 정정 후 시각 변화로 자연 해소 가능성 있음. 추후 구체적 픽셀/mm 단위 측정 또는 PDF 좌표 정규화 변환 후 재평가 필요 |
| #492 | exam_science 페이지 1 컬럼 2 5번 밑단 짤림 | **완료(자연해소)** | #489 정정으로 자연 해소. 시각 검증: 페이지 1 단 1 의 5번 본문(y=567~687, 6 줄), 5번 <보기> ㄱ/ㄴ/ㄷ(y=788~854), 5번 선택지(y=906), 6번 문제 (y=969~1312) 모두 정상. 7번부터 페이지 2 시작. col 1 used=1108.9px / body 1215.1px (overflow 없음). #488 Stage 2 시각 검증 시 #489 의 텍스트-그림 겹침으로 인해 "잘림"으로 오인된 케이스 |
| #495 | exam_science 페이지 2 7번 박스 안 동일 텍스트 중복 렌더링 | **완료** | `table_layout.rs:1573` 셀 paragraph 인라인 Shape 분기가 `composed.lines.first()` 만 보고 text_before 추출 → multi-line paragraph 에서 사각형이 ls[1]+ 에 있을 때 첫 줄 전체 텍스트가 paragraph_layout 결과와 중복 발행. 단계 3 v1 (TextRun 발행 제거) 시도가 synam-001 p31 "년/월" 글자 발행 누락 회귀 → 옵션 B (가드) 채택. `tac_pos` 가 ls[0] char 범위 안일 때만 text_before 발행. exam_science p2 박스 안 baseline 19 → 9 (중복 10 제거), 64 SVG 회귀 0건 (변경 1건 = 의도된 결함 수정), cargo test 1094+ 통과. 시각 검증 PDF 정합. 사각형 자체 위치 결함은 별도. **#496 (12번 줄간격 압축) 분리 처리** |
| #496 | exam_science 페이지 2 12번 본문 줄간격 압축 (인라인 수식 다수) | **보류 (단계 1 완료, 후보 (D))** | 단계 1 진단으로 원인 식별: pi=61 이 `layout_inline_table_paragraph` 분기로 진입(`is_tac_table_inline=true` for 2행1열 tac 표). 이 함수는 multi-row 표 + multi-line 텍스트 처리 한계 — `wrapped_below_table` 한 번만 줄바꿈, ls[2] 무시 → 표 행 0 baseline 1191.68 과 paragraph 본문 baseline 1195.85 가 4px 안 겹침. PDF 는 표를 paragraph 본문과 **별도 블록** 처리. 수정 후보 (A)/(B)/(C)/(D) 검토 후 (D) **보류** 결정 (#500 과 본질 동일 — inline tac 컨트롤 처리 한계, layout 리팩터링 시 종합 해결). 코드 변경 없음, 진단 코드 모두 제거 |
| #500 | exam_science 페이지 2 박스 안 사각형이 multi-line paragraph 의 잘못된 줄 위치 | 대기 | #495 처리 중 발견. `table_layout.rs:1640` Shape 분기 `inline_x` 가 paragraph 첫 줄 누적 폭 사용 → multi-line 에서 ls[1]+ 사각형이 잘못된 좌표. Picture 분기와 정합 (target_line 산출) 필요. #496 과 동일 본질 (inline tac 처리), 함께 layout 리팩터링 대상 |

## PR 처리

| Issue | 타스크 | 상태 | 비고 |
Expand Down
17 changes: 17 additions & 0 deletions mydocs/orders/20260501.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,24 @@
# 오늘 할일 - 2026년 5월 1일

## M100 — 다단 vpos-reset 처리 정합

| Issue | 타스크 | 상태 | 비고 |
|------|--------|------|------|
| #464 | exam_kor 15p 우측 단 본문 overflow — pi=103-105 col 1 LINE_SEG vpos-reset 미인식 | **완료** | `typeset.rs:904`, `engine.rs:609` 의 `current_column == 0` 가드 제거(룰 정합 — `col_count > 1` 이면 항상 감지). `typeset.rs:1975~1981` 의 직접 column 변경을 `advance_column_or_new_page()` 호출로 통합 (마지막 단에서 col_break 시 페이지 break 트리거). LAYOUT_OVERFLOW 16건 → 0건. exam_kor p15 PartialParagraph pi=103 lines=0..3, p16 pi=103 lines=3..6 + pi=104 + pi=105 정상 분리. 5종 다단 샘플 56 SVG 회귀 0 (변경 2건 = 의도된 결함 수정). exam_kor 페이지 수 20 유지. cargo test 1094+ 통과. Task #459 의 잔존 가드 제거 |
| #466 | `compute_square_wrap_tbl_x_right` `horz_rel_to=Paper/Page` 케이스 보강 | **완료** | `layout.rs:3382` free function 을 `LayoutEngine` 메서드로 변환 + `horz_rel_to` 분기 추가 (Paper: ref_x=0/ref_w=paper_width, Page: ref_x=body.x/ref_w=body.width, Para/Column: col_area). caller 2곳 (`:2407, :2641`) 도 `self.dpi` 인자 제거. 9종 샘플 202 SVG 회귀 0 (Paper/Page case 발생 샘플 없음 — 잠재 결함만 보강, 기존 동작 보존). cargo test 1094+ 통과. Task #463 Stage 5 의 후속 |

## 회귀 정정

| Issue | 타스크 | 상태 | 비고 |
|------|--------|------|------|
| #501 | mel-001.hwp 2쪽 s0:pi=22 표 셀 높이 처리 회귀 (v0.7.8 + 현재 devel, 크롬 확장 배포본 정상) | 완료 (Stage 5/5) | **본질**: HWP 의 셀 IR 에 `cell.padding.top + bottom > cell.height` 인 비정상 케이스 (mel-001 셀[21] r=2 c=2 "현 원": pad=(141,141,1700,1700), cell.h=1280 HU). HWPX `hasMargin="0"` 명시 정합. **회귀 origin**: Task #347 의 `prefer_cell_axis` 가드 (`aim=false 에서도 cell > table 이면 cell 우선`) 가 mel-001 의 1700 HU 도 cell 우선 적용 → padding 합산이 cell.height 의 2.66배 → row_heights 거대 → TAC 표 비례 축소 (scale 0.45) → 모든 행 12~20px 축소 + 셀 진입 결함. **정정**: `resolve_cell_padding` 끝에 **한컴 자체 방어 로직 모방** 가드 추가 — pad_top + pad_bottom > cell.height 면 cell.height 의 절반까지 비례 축소. measure_table_impl 1-b단계도 동일 가드 (안전망). 2 파일 변경, 신규 통합 테스트 1 (issue_501.rs). cargo test --lib 1086 passed + svg_snapshot 5/6 (form_002 부동소수 정밀도 미세 차이) + issue_418 1/1 + clippy 0건 + WASM 4,206,487 bytes. **작업지시자 시각 검증** — mel-001 p2 pi=22 r=0=26.4 (정상), 합계 r=1/r=2=17.07/17.07 (균등), 셀[21] "현 원" 정상 표시 ★. 트러블슈팅 + 위키 ([HWP 셀 Padding 방어 로직](https://github.com/edwardkim/rhwp/wiki/HWP-%EC%85%80-Padding-%EB%B0%A9%EC%96%B4-%EB%A1%9C%EC%A7%81)) 작성. **작업지시자 통찰**: *"이런 경우 한컴은 자체 방어로직으로 처리한다면?"* — Task #347 가드 (KTX 목차 정합) 보존 + 한컴 동작 모방 가드 추가 |

## 잔존 이슈 (별도 task)

| Issue | 타스크 | 상태 | 비고 |
|------|--------|------|------|
| #465 | exam_kor 16p PDF 우측 "홀수형" 뱃지 별도 요소 (master 외) | 대기 | 별도 조사 필요 |
| #466 | compute_square_wrap_tbl_x_right Paper/Page case 미구현 | 대기 | Task #463 Stage 5 후속 |
| #467 | extension master 다른 apply_to 처리 | 대기 | Task #463 Stage 8 후속 |
| #496 | exam_science 페이지 2 12번 본문 줄간격 압축 | 보류 (단계 1 완료, 후보 (D)) | 2026-04-30. inline tac 컨트롤 처리 한계, layout 리팩터링 시 종합 해결 |
| #500 | exam_science 페이지 2 박스 안 사각형 위치 결함 | 대기 | 2026-04-30. #496 과 본질 동일 (inline tac 처리), 함께 layout 리팩터링 대상 |
Loading