Skip to content

fix: 미게시 변경분 감사 — 떨어진 개체 선택 · RTF 여백 왕복 · 스크립트 링크 입력 경로 - #56

Merged
centwon merged 4 commits into
mainfrom
fix/table-api-stale-selection
Sep 24, 2026
Merged

centwon merged 4 commits into
mainfrom
fix/table-api-stale-selection

Conversation

@centwon

@centwon centwon commented Sep 23, 2026 •

Copy link
Copy Markdown
Owner

1.2.0 이후 미게시 변경(PR #52~#55)을 자기 변경분부터 감사해 찾은 결함 3건. 셋 다 상류에도 있어 같은 수정을 상류에 따로 PR로 낸다.

결함

  1. 표 행·열 공개 API가 지운 행·열 안의 개체 선택을 놓지 않음 — 중첩 표·그림·인라인 표가 선택된 채 문서에서 빠지고, Delete가 떨어진 행을 고침(되돌리기 단계만 생김). 인라인 그림이면 캐럿이 문서 밖 문단에 남음. → AfterEdit/AfterStructuralEdit에서 DropDetachedObjectSelection(문서에서 아래로 걷는다 — 지운 행의 셀은 표를 부모로 기억해 부모 사슬로는 "안"이다).
  2. RTF 여백 왕복이 mm를 틂 — 15 mm → 850 twip → 14.993 mm. 여백 픽커 5단계 전부 불일치("보통" 대신 "15mm"), JSON에 사용자 지정 여백으로 저장. → PageSetup.TwipsToMm: 0.1 mm 단위이고 같은 twip으로 되돌아가는 값만 스냅. Word 1800 twip(31.75 mm)은 그대로. 기존 테스트가 "1 twip 이내"를 계약으로 잡아 두어 못 봤다.
  3. 스크립트 링크 차단이 HTML 입력에만 있음 — RTF HYPERLINK 필드(클립보드 붙여넣기)와 JSON/.flow로 들어온 javascript: 링크가 내보낸 HTML·클립보드 HTML로 다시 나감. → 두 입력 경로에 SafeHref, HTML 출력에도 같은 검사(호스트 SetHyperlink 대비).

검증

  • 테스트 910 → 930, 전체 통과. 문서 퍼즈 20,000시드 통과.
  • 반증: 개체 선택(끄면 3건 빨강 / 늘 지우면 "남은 개체 유지" 빨강), 여백(스냅 제거 7건 빨강 / 늘 스냅하면 Word 1800 twip 테스트 빨강), 링크(수정 전 7건 빨강).
  • 문서: CHANGELOG [Unreleased], 로드맵(감사 기록, fix: 클립보드가 잠깐 바쁠 때 복사·붙여넣기가 조용히 실패하던 것 #55 기록, 1.3.0 전 남은 항목 — AOT 스윕에 여백 단계 추가, 퍼즈 생성기에 페이지 설정 추가, 실기 확인).

공개 표면 변화 없음.

후속 커밋 (807dd22)

  • 퍼즈 확장: 페이지 설정(용지·방향·머리글/바닥글·쪽 번호·여백 mm)과 블록 위 여백(AutoTopMargin NaN 포함)을 만들고 관측. 반증: JSON이 왼쪽 여백을 잃으면 446건, 구분선 자동 간격을 0으로 읽으면 578건 빨강.
  • 결함 1건 추가(시드 8178, 20,000시드에서만): HTML 목록 읽기가 data-are-empty를 무시해 빈 항목이 사라지고, 양옆 항목이 합쳐져 번호 모양이 바뀜. 수정 뒤 20,000시드 통과. 상류 공통.
  • 여백 AOT 프로브: 데모 --pageprobe + fault-sweep.ps1 연동. JIT·AOT 출력 바이트 동일, AOT 전용 결함은 알려진 LineMetricsOf 하나.
  • 테스트 931 전체 통과. 키 입력 스윕 전체와 실기 확인은 아직 남음.

🤖 Generated with Claude Code

1.2.0 이후 변경(PR #52~#55)을 자기 변경분부터 감사해 찾은 결함 3건. 셋 다 상류에도 있다.

- 표 행·열 공개 API가 지운 행·열 안의 개체 선택을 놓지 않았다. Delete가 떨어진 행을 고치고
  (되돌리기 단계만 생김), 인라인 그림이면 캐럿이 문서 밖 문단에 남았다. AfterEdit/AfterStructuralEdit에서
  문서에 없는 개체 선택을 푼다(DropDetachedObjectSelection — 문서에서 아래로 걷는다. 지운 행의 셀은
  표를 부모로 기억해 부모 사슬로는 "안"이다).
- RTF 여백 왕복이 mm를 틀었다(15 → 850 twip → 14.993). 여백 픽커 5단계 전부 불일치. 0.1 mm 단위이고
  같은 twip으로 되돌아가는 값만 스냅한다(PageSetup.TwipsToMm). Word 1800 twip = 31.75 mm는 그대로.
  기존 테스트가 "1 twip 이내"를 계약으로 잡아 두어 못 봤다.
- 스크립트 링크 차단이 HTML 입력에만 있었다. RTF HYPERLINK 필드와 JSON/.flow에도 SafeHref를 걸고,
  HTML 출력에도 같은 검사(호스트 SetHyperlink 대비).

테스트 910 → 930, 전체 통과. 퍼즈 20,000시드 통과. 반증: 개체 선택(끄면 3건 빨강, 늘 지우면 유지
테스트 빨강), 여백(스냅 제거 7건 빨강, 늘 스냅 1건 빨강), 링크(수정 전 7건 빨강).
로드맵에 감사 기록·#55 기록·남은 항목(AOT 스윕에 여백 단계, 퍼즈 생성기의 페이지 설정) 반영.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
centwon and others added 3 commits September 24, 2026 10:12
감사 후속(남은 항목).

- 문서 퍼즈가 페이지 설정(용지·방향·머리글/바닥글·쪽 번호·여백 mm)과 블록 위 여백(AutoTopMargin NaN
  포함)을 만들고 Shape로 본다. 반증: JSON이 왼쪽 여백을 잃으면 446건, 구분선 자동 간격을 0으로 읽으면
  578건 빨강.
- 넓히자마자 결함 1건(20,000시드 중 시드 8178): HTML 목록 읽기가 data-are-empty를 보지 않고 빈 항목을
  모두 버려, 양옆 항목이 한 목록으로 합쳐지고 번호 모양이 바뀌었다. 문단과 같이 표식을 따른다(외부
  HTML의 빈 항목은 여전히 버림). 수정 전 빨강 확인, 수정 뒤 20,000시드 통과.
- 데모 --pageprobe(PageMarginProbe): 화면 밖 에디터로 여백 DP(record struct를 담는 첫 DP) 설정·박싱
  되읽기·거부·문서 캡처·JSON/RTF 왕복·적재·툴바를 거쳐 기록. fault-sweep.ps1이 함께 켠다.
  실측: JIT와 AOT 출력 바이트 동일, AOT 전용 결함은 알려진 LineMetricsOf 하나.
- 새 테스트의 경고 2건(CS8602, xUnit2029) 정리.

테스트 931 전체 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@centwon
centwon merged commit effe23d into main Sep 24, 2026
2 checks passed
@centwon
centwon deleted the fix/table-api-stale-selection branch September 24, 2026 01:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant