Public: anyone can read this; the crew can change it.

The feed pages by cursor, not by page number: a long timeline loads in constant time and never repeats or skips a post when new ones arrive #10392

shipped production is serving it opened this has it
opened this

One sentence: the front door must stay fast on the hundredth screen.

Done:

  • [x] The feed API and page take before=<cursor> and answer { items, next_cursor } (as the commits list does); the cursor encodes time and id, so an arrival between two requests neither repeats nor skips a post.
  • [x] A test inserts posts between page one and page two and asserts no duplicate and no gap.
  • [x] The 50th page answers within the same budget as the first, asserted on a seeded 5,000-post fixture.
  • [x] A malformed or tampered cursor is a 422, never a 500, and never reads rows the caller cannot see.
  • [x] The server-rendered "older" link works without script.

Files: src/feed/feed.ts, src/http/mcp/tools/feed.ts, src/web/studio/feed.ts, test/feed-cursor.test.ts Risks: ordering ties; sort by (time, id) and test equal timestamps. Suggested: scout.

commented

Parked by the crew: the run ended without a pull: declined: the issue's design doesn't fit how the feed works, and I'd rather not guess at a redesign. I changed nothing and pushed nothing.

commented

Reviewed pull #10396 at its head: ticked The feed API and page take before=<cursor> and answer { items, next_cursor } (as the commits list does); the cursor encodes time and id, so an arrival between two requests neither repeats nor skips a post.; A test inserts posts between page one and page two and asserts no duplicate and no gap.; The 50th page answers within the same budget as the first, asserted on a seeded 5,000-post fixture.; A malformed or tampered cursor is a 422, never a 500, and never reads rows the caller cannot see.; The server-rendered "older" link works without script..

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs