# 03-02 Summary ## Outcome Wave 2 replaced the range-only pagination path with an internal layouter/frame vocabulary inside `EPUBTextRendering`. - Added `RDEPUBTextLayouter.swift` - Added `RDEPUBTextLayoutFrame.swift` - Updated `RDEPUBTextPaginationSupport.swift` so `ss_pageRanges(size:)` now delegates to `rd_paginatedFrames(size:fragmentOffsets:)` - Updated `RDEPUBTextBookBuilder` and `RDPlainTextBookBuilder` to build pages from layout frames instead of bare `NSRange` slices ## New Semantics - Page breaks now carry one of `chapterEnd`, `frameLimit`, `blockBoundary`, or `attachmentBoundary` - Layout frames capture block-range context, attachment ranges/kinds, trailing fragment id, and page-edge diagnostics - The layouter still uses CoreText measurement, but page boundaries are adjusted with block/attachment-aware rules before serialization back into `RDEPUBTextPage` ## Compatibility - Final output is still `RDEPUBTextBook(chapters: pages:)` - `pageStartOffset` / `pageEndOffset` remain the compatibility key for search, highlights, and later reader reintegration