Skip to content

Feed: switch to cursor (keyset) pagination #22

Description

@Adron

Part of #17 — Message composer & feed parity gaps

GET /api/messages exposes an opaque cursor for keyset pagination, with the explicit
instruction to "pass back the nextCursor from the previous response verbatim — never construct,
parse, or modify it."

MessagesApi.getMessages uses limit/offset, which drifts and duplicates rows as new posts
arrive at the head of the feed — exactly the case a social feed hits constantly.

  • Move the feed (and search, if it supports it) to cursor/nextCursor, keeping the cursor
    opaque.
  • :feature:directmessages already does this correctly — mirror that implementation.

Tests: repository paging test that a new head insert does not duplicate or skip rows.


Filed from the parity review of feature/parity-wip @ 14d7795 against interlinedlist.com (OpenAPI /api/openapi.json, 233 paths) and the public help centre.

Activity

  1. added
    parityClosing a gap against interlinedlist.com
    P2Completeness / settings surface
    area:messagesSocial messages feed & composer
    on Sep 15, 2026
  2. Adron commented on Sep 16, 2026

    @Adron
    MemberAuthor

    Implemented in #96 (branch issue/22-cursor-pagination). Closing here — review and any follow-up happens on the PR.

    Worth recording: the live spec declares no offset parameter at all on GET /api/messages — only limit, onlyMine, tag and cursor. So the old paging was sending a parameter the server does not document. A confirmed live response returns pagination: { total, offset, limit, hasMore, nextCursor } with nextCursor as an opaque base64 keyset token.

    Search was deliberately left on its current paging: GET /api/messages/search accepts only q, limit and onlyMine — there is no cursor to hand back.

  3. added a commit that references this issue on Sep 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Completeness / settings surfacearea:messagesSocial messages feed & composerparityClosing a gap against interlinedlist.com

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions