Open
Labels
P1Table stakesTable stakesarea:messagesArea: messagesArea: messagesparityWeb/API feature-parity workWeb/API feature-parity workquestionFurther information is requestedFurther information is requested
Description
Current state
GetMessagesAsync uses ?limit=&offset=. The live spec documents limit, onlyMine, tag, cursor for GET /api/messages — offset is no longer a documented parameter.
Live verification (2026-09-15)
offset still works, and the response now returns a cursor alongside it:
"pagination": { "total": 360, "offset": 0, "limit": 2, "hasMore": true,
"nextCursor": "MjAyNi0wOS0xMlQyMDo0MDowNS43NzdafDVjODIzZDQ1..." }So this is not a live break today — but the app is on an undocumented parameter while the documented keyset path is available, and the spec is explicit: "Pass back the nextCursor from the previous response verbatim — never construct, parse, or modify one."
Viewing preferences (/help/settings)
GET /api/user returns viewingPreference and messagesPerPage (10–30). Documented feed modes: My Messages, All Messages, Followers Only, Following Only. The app honors none of them.
Acceptance criteria
-
Models/Pagination.csgainsNextCursor;GetMessagesAsynctakes an opaque cursor and passes it back verbatim. - Infinite scroll in
FeedViewModeldrives offnextCursor, falling back tooffsetonly if a cursor is absent. -
onlyMineandtagare supported parameters. - Feed mode selector reflecting and honoring
viewingPreference. - Page size honors
messagesPerPageinstead of the hard-codedlimit = 20.
Metadata
Metadata
Assignees
Labels
P1Table stakesTable stakesarea:messagesArea: messagesArea: messagesparityWeb/API feature-parity workWeb/API feature-parity workquestionFurther information is requestedFurther information is requested
Activity
Adron commentedon Sep 16, 2026
Two of the four feed modes have no server-side support — this needs a decision
GET /api/userstoresviewingPreference, and/help/settingsdocuments four modes: My Messages / All Messages / Followers Only / Following Only. The server enum (from its own 400) ismy_messages,all_messages,followers_only,following_only.But
GET /api/messagesaccepts onlylimit,onlyMine,tag,cursor— and there is no/api/feed*path at all. Probed live 2026-09-16:The parameter isn't rejected, it's ignored —
totalstays 363 regardless. So:onlyMine=true(total drops 363 → 36)Why I'm not guessing at this
Client-side filtering is the only alternative and it's a bad one: it would mean fetching the follow graph, then paging the entire feed to find matching posts — many requests, wrong counts, and a "load more" that skips unpredictable amounts. That's worse than not offering the mode.
What I'd suggest
Implement the two modes that work (All / My), and render the other two as unavailable with a short explanation, rather than offering controls that silently do nothing — which is exactly the failure mode #47, #91 and #160 all turned out to be.
The decision is yours: ship two modes now, or hold the whole selector until the server exposes a follow-scoped filter. If the web app implements Followers/Following Only, it's either doing it server-side through a route the spec doesn't document, or filtering client-side — worth checking before accepting this conclusion.
Everything else in #36 (cursor pagination,
onlyMine,messagesPerPage) is unblocked. NotePagination.NextCursorandCursorPager<T>already exist in #130, andCurrentUser.EffectiveMessagesPerPagein #131.