Repository navigation
Phase 7c: pagination #81
Copy link
Copy link
Closed
Labels
area:coreCore HTTP, IO, body, context, encoding: HTTP-* IO-* BODY-* CTX-* UTF-*Core HTTP, IO, body, context, encoding: HTTP-* IO-* BODY-* CTX-* UTF-*breaking-changeRequires a major versionRequires a major versiontype:featureNew capability or enhancementNew capability or enhancement
Description
Summary
Implement phase 7c, pagination, per the design docs/work/mvp/phase7/phase7c/2026-10-09-phase7c-pagination-design.md and the plan docs/work/mvp/phase7/phase7c/2026-10-09-phase7c-pagination.md.
Scope (36 rows)
PAGE-1–PAGE-36 (33 built, 3 N/A). One feat! PR, grouped as:
- Internal:
QuerySplice(case-sensitive, with property tests),LinkHeaderParserwith its vector,LinkTarget.TryResolve. IPageStrategy<TPage,T>,Page<T>.Request, the built-in strategies andPaginationStrategiesfactories, single-use enumerables, the one fetch-and-parse step, the async cutover (AsyncPageable<T>,Pageable.Create), the blockingPageable<T>/CreateBlocking, the lifecycle suite, architecture tests and theLink-originSecurityclass.FetchedPage<T>,PagingOptions,Pageable.FromFetchers(PAGE-34,PAGE-35); loopback wire tests; AOT smoke (paged round trip);docs/sdk-documentation/pagination.md; checklist, CHANGELOG, corrections, roadmap status note.
Breaking changes
Pageable.CreatetakesIAsyncHttpClient, anIPageStrategy<TPage,T>andRequestOptions?.PaginationStrategies.*gain the item selector and a second type parameter;Cursordefaults to"cursor";PageNumberloseshasMoreand gainsstartPage;LinkHeaderlosesreland gainsheaderNameandallowCrossOrigin.PageNumberends on an empty page (PAGE-17).LinkHeaderends on a cross-origin or invalid target, strips userinfo, reads everyLinkinstance, resolves against the response URL.- The splice matches names case-sensitively and drops duplicates.
AsPages()losespageSizeHint, becomes non-virtual and single-use per view; subclasses overrideWalkPagesAsync.Page<T>'s constructor requires theRequest.maxPages <= 0and a non-replayable template body throw at construction.- A
nullenvelope throwsDeserializationException.
Open for the lead
- P7c-3:
pageSizeHintremoved fromAsPages(). - P7c-6: per-call overrides are
RequestOptions(removes a parameter type). - P7c-12: cross-origin
Linktargets end the stream unlessallowCrossOrigin: true. - P7c-16:
PagingOptionsis a mutable class.
Done when
- Every plan task is done, the checklist has one row per requirement ID, and build, format, tests, coverage, AOT smoke, dependency audit and the housekeeping probe all pass.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:coreCore HTTP, IO, body, context, encoding: HTTP-* IO-* BODY-* CTX-* UTF-*Core HTTP, IO, body, context, encoding: HTTP-* IO-* BODY-* CTX-* UTF-*breaking-changeRequires a major versionRequires a major versiontype:featureNew capability or enhancementNew capability or enhancement
Activity