All Posts
February 26, 20260.1.28Jugg.ai

v0.1.28 — feat: add cursor-based pagination to feature.list

Release v0.1.28: Cursor-Based Feature Pagination

What changed:

  • feature.list now uses cursor-based pagination with a default limit of 50 features per page
  • Frontend replaced client-side pagination state with useInfiniteQuery(), seeding the first page from SSR data
  • Added "Load more features" button that fetches subsequent pages on demand with a loading spinner
  • Cursor encoding uses keyset predicates (sortOrder:createdAt:id) to prevent skipped rows on tied sort values

Why it matters:

  • Busy projects with 500+ auto-discovered features now load instantly (50 rows instead of the entire table)
  • Eliminates unnecessary network transfers and client-side rendering of thousands of hidden rows

Technical notes:

  • Opaque base64url cursors — no breaking changes to existing consumers
  • SSR initialFeatures continues to seed the first page via initialData
  • All existing procedures remain unchanged

Release Notes

The tag v0.1.28 already exists in the repository. The PR has been successfully merged (squash commit e9b291a), but the release/tag cannot be created because it was already published previously.

Here's a full summary of what happened:


✅ PR #437 — Merged Successfully

  • Squash commit: e9b291a32e119836b8c4d663ebdc07b67ee1db4f
  • Branch: feat/feature-list-paginationmain

⚠️ Release v0.1.28 — Tag Already Exists

The tag v0.1.28 already exists in the repository, which means a release at that version was previously created. Creating a duplicate tag is blocked by GitHub.

What you should do:

  1. If v0.1.28 was a placeholder/draft release, delete the existing tag and release on GitHub, then re-run the release step.
  2. If a real v0.1.28 was already shipped, bump to v0.1.29 instead — the PR changes are already merged to main, so the new tag just needs to point to the right version.

Would you like me to create the release as v0.1.29 instead, or would you prefer to delete the existing v0.1.28 tag first and retry?