Skip to content

1.1.1 — AOT에서 깨져 있던 줄 메트릭

Choose a tag to compare

@centwon centwon released this 06 Sep 21:49
· 149 commits to main since this release
96c99dd

1.1.0은 Native AOT에서 깨진 채 나갔다. 그것이 이 릴리스의 이유다.

CanvasTextLayout.LineMetrics가 반환하는 구조체 배열이 bool을 품어 non-blittable이고, CsWinRT가 AOT에서 이 배열을 마샬링하지 못한다. 이 API를 쓰는 8곳이 전부 "줄 없음"으로 폴백해서 AOT 빌드는:

  • 줄바꿈을 넘는 세로 캐럿 이동이 동작하지 않고
  • 글머리표가 베이스라인 정렬을 잃고
  • 페이지네이션이 모든 문단을 한 줄로 쟀다

빌드도 되고 렌더도 되니 멀쩡해 보였다 — 1.1.0의 릴리스 노트조차 "AOT 재실측"을 통과로 적었다. 게시와 렌더만 봤기 때문이다. JIT 빌드는 영향이 없다(이 API는 AOT에서만 실패한다).

올릴 때

  • Breaking 없음. 공개 표면은 변화조차 없다 — PublicAPI.Shipped.txt 567줄 그대로. 코드 수정 없이 올라간다.
  • Native AOT로 게시하는 소비자는 올릴 것.
  • ⚠ 동작 변경: 자릿수가 int를 넘는 RTF 제어어 파라미터는 더 이상 "손상"이 아니다 — TryParse가 거부하던 일부 파일이 열린다(손상 판정은 이제 절단만 본다). 상류 AvaloniaRichEditor와 수렴한 결정으로, malformed 토큰은 damaged 문서가 아니다.
  • 최소 요구 Microsoft.WindowsAppSDK.WinUI는 2.2.1 그대로.

그 밖의 수정

외부 감사 보고서 31건을 코드와 1:1 대조해 나온 수정 13건 — 표 열 리사이즈·TableBlock.Extract 크래시, RTF 토큰화가 문서를 통째로 날리던 것, Backspace/Delete/화살표의 서로게이트 페어 분할, 셀 안 이미지 우클릭 미인식, 셀 안 블록↔인라인 변환 무동작(양방향), CSS 퍼센트 색상, UIA 텍스트/선택 알림 부재(스크린 리더). 메모리: 문서에서 빠진 문단을 붙잡던 곁캐시, 언두 체크포인트의 표 격자 할당 −40%(표가 지배적인 문서). 게시 어셈블리에서 빌드 머신 절대 경로 제거.

검증

  • 테스트 304 → 391, 빌드 0 warn / 0 err, 퍼즈 4000시드 클린
  • AOT 동등성 실측(신규 tools/fault-sweep.ps1): 같은 편집 순서를 JIT와 AOT 게시본에 주입해 ① 라이브러리가 보고한 fault 집합 ② 되읽은 문서를 비교 — AOT 전용 fault는 줄 메트릭 폴백 하나뿐이고 문서는 두 페이지에서 바이트 동일. 1.1.0이 놓친 것이 정확히 이 비교다.
  • NuGet 소비자 스모크 15/15 — 별도 unpackaged WinUI 3 앱이 PackageReference로 빌드·실행
  • 언두/찾기 축에 검증 44개 신설(그 전엔 Undo()·FindNext를 호출하는 테스트가 하나도 없었다)

전체 변경은 CHANGELOG.md 참조.