Adds transport-neutral Bob keyset pagination with a plain Sort and typed row key, versioned cursors preserving supported concrete values, bidirectional pages, and a separate authorized Count. Includes SQLite outcomes, a runnable example, and required PostgreSQL service-container coverage.
Closes#6. Follows the accepted cursor ADR, now marked implemented with this PR as delivery evidence.
Validation: independent Standard review found no Blocking/Major issues; its one Minor authorization-fixture finding was fixed. Fresh High review at 927594b found no Blocking/Major/Minor issues. Local build, vet, race tests, pinned golangci-lint v2.15.0 (0 issues), TODO scan, docs check (4 records), formatting and whitespace passed after merging main. Earlier real SQLite/PostgreSQL flows passed; required PostgreSQL race coverage also passed in CI on the current merge head.
Readiness: merged main at e5298cff37, resolving the README conflict by retaining both page and lifecycle sections and updating the introduction. Page source is unchanged; imported lifecycle source exactly matches main. All CI passed on head 9d799714f5: root checks and PostgreSQL race suite, documentation. No merge conflicts or outstanding review findings remain. The PR is open for owner merge.
Limits: MySQL runtime remains unverified (native composition compiles). Sort/key field/type correspondence, non-null values, final-column uniqueness, comparison semantics and query authorization remain caller contracts. Cursors are editable seek boundaries; no snapshot guarantee.
Adds transport-neutral Bob keyset pagination with a plain Sort and typed row key, versioned cursors preserving supported concrete values, bidirectional pages, and a separate authorized Count. Includes SQLite outcomes, a runnable example, and required PostgreSQL service-container coverage.
Closes #6. Follows the accepted [cursor ADR](https://gitea.auvem.com/corestack/go/src/branch/feat/page/docs/adr/20261027T184351001Z-preserve-typed-sort-values-in-versioned-page-cursors.md), now marked implemented with this PR as delivery evidence.
Validation: independent Standard review found no Blocking/Major issues; its one Minor authorization-fixture finding was fixed. Fresh High review at 927594b found no Blocking/Major/Minor issues. Local build, vet, race tests, pinned golangci-lint v2.15.0 (0 issues), TODO scan, docs check (4 records), formatting and whitespace passed after merging main. Earlier real SQLite/PostgreSQL flows passed; required PostgreSQL race coverage also passed in CI on the current merge head.
Readiness: merged main at e5298cff37f4beea2719935cf874269bdf31912b, resolving the README conflict by retaining both page and lifecycle sections and updating the introduction. Page source is unchanged; imported lifecycle source exactly matches main. All CI passed on head 9d799714f5f3f205ca7515de4de0af8393e0a6c6: [root checks and PostgreSQL race suite](https://gitea.auvem.com/corestack/go/actions/runs/2559), [documentation](https://gitea.auvem.com/corestack/go/actions/runs/2560). No merge conflicts or outstanding review findings remain. The PR is open for owner merge.
Limits: MySQL runtime remains unverified (native composition compiles). Sort/key field/type correspondence, non-null values, final-column uniqueness, comparison semantics and query authorization remain caller contracts. Cursors are editable seek boundaries; no snapshot guarantee.
CI exposed a workflow harness issue: the explicit Go image has no node, so checkout failed with exit 127 before tests ran, although PostgreSQL became healthy (job 2947). f75a8ac uses the existing Node-capable runner plus the repository's pinned setup-go action; the PostgreSQL service network/health check, required DSN and race test remain unchanged. Product code is unchanged since the independent High review. Final-head CI is pending.
CI exposed a workflow harness issue: the explicit Go image has no `node`, so checkout failed with exit 127 before tests ran, although PostgreSQL became healthy ([job 2947](https://gitea.auvem.com/corestack/go/actions/runs/2516/jobs/2947)). f75a8ac uses the existing Node-capable runner plus the repository's pinned setup-go action; the PostgreSQL service network/health check, required DSN and race test remain unchanged. Product code is unchanged since the independent High review. Final-head CI is pending.
Final-head CI is delayed by an external action-download failure: all three jobs report context deadline exceeded (Client.Timeout exceeded while awaiting headers) while downloading https://codeload.github.com/actions/checkout/tar.gz/v7.0.1, and the runner is retrying. PostgreSQL became healthy, but checkout/tests have not run on f75a8ac. Readiness remains pending; checks are unchanged.
Final-head CI is delayed by an external action-download failure: all three jobs report `context deadline exceeded (Client.Timeout exceeded while awaiting headers)` while downloading `https://codeload.github.com/actions/checkout/tar.gz/v7.0.1`, and the runner is retrying. PostgreSQL became healthy, but checkout/tests have not run on f75a8ac. Readiness remains pending; checks are unchanged.
Automatic retries recovered. All checks now pass on final head f75a8acf6011eaa712e3e656ba5fefba6791f0c7: root checks, required PostgreSQL race suite, and documentation (3 records). No manual rerun, bypass or further code changes were needed. The accepted ADR links this PR, and no Blocking/Major review findings remain. Ready for owner merge; MySQL runtime remains explicitly unverified.
Automatic retries recovered. All checks now pass on final head `f75a8acf6011eaa712e3e656ba5fefba6791f0c7`: [root checks](https://gitea.auvem.com/corestack/go/actions/runs/2518/jobs/2949), [required PostgreSQL race suite](https://gitea.auvem.com/corestack/go/actions/runs/2518/jobs/2950), and [documentation (3 records)](https://gitea.auvem.com/corestack/go/actions/runs/2519/jobs/2951). No manual rerun, bypass or further code changes were needed. The accepted ADR links this PR, and no Blocking/Major review findings remain. Ready for owner merge; MySQL runtime remains explicitly unverified.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Adds transport-neutral Bob keyset pagination with a plain Sort and typed row key, versioned cursors preserving supported concrete values, bidirectional pages, and a separate authorized Count. Includes SQLite outcomes, a runnable example, and required PostgreSQL service-container coverage.
Closes #6. Follows the accepted cursor ADR, now marked implemented with this PR as delivery evidence.
Validation: independent Standard review found no Blocking/Major issues; its one Minor authorization-fixture finding was fixed. Fresh High review at
927594bfound no Blocking/Major/Minor issues. Local build, vet, race tests, pinned golangci-lint v2.15.0 (0 issues), TODO scan, docs check (4 records), formatting and whitespace passed after merging main. Earlier real SQLite/PostgreSQL flows passed; required PostgreSQL race coverage also passed in CI on the current merge head.Readiness: merged main at
e5298cff37, resolving the README conflict by retaining both page and lifecycle sections and updating the introduction. Page source is unchanged; imported lifecycle source exactly matches main. All CI passed on head9d799714f5: root checks and PostgreSQL race suite, documentation. No merge conflicts or outstanding review findings remain. The PR is open for owner merge.Limits: MySQL runtime remains unverified (native composition compiles). Sort/key field/type correspondence, non-null values, final-column uniqueness, comparison semantics and query authorization remain caller contracts. Cursors are editable seek boundaries; no snapshot guarantee.
CI exposed a workflow harness issue: the explicit Go image has no
node, so checkout failed with exit 127 before tests ran, although PostgreSQL became healthy (job 2947).f75a8acuses the existing Node-capable runner plus the repository's pinned setup-go action; the PostgreSQL service network/health check, required DSN and race test remain unchanged. Product code is unchanged since the independent High review. Final-head CI is pending.Final-head CI is delayed by an external action-download failure: all three jobs report
context deadline exceeded (Client.Timeout exceeded while awaiting headers)while downloadinghttps://codeload.github.com/actions/checkout/tar.gz/v7.0.1, and the runner is retrying. PostgreSQL became healthy, but checkout/tests have not run onf75a8ac. Readiness remains pending; checks are unchanged.Automatic retries recovered. All checks now pass on final head
f75a8acf6011eaa712e3e656ba5fefba6791f0c7: root checks, required PostgreSQL race suite, and documentation (3 records). No manual rerun, bypass or further code changes were needed. The accepted ADR links this PR, and no Blocking/Major review findings remain. Ready for owner merge; MySQL runtime remains explicitly unverified.