The change feed is flat reverse-chron with no notion of when you last
looked, so "what happened while I was away" is date arithmetic in your
head — and cheap agents write more files per day than that scales to.
Server: `?since=<RFC3339>` on GET /api/p/<id>/history, one case in the
existing filter switch. It sits after the kinds[] classification (which
must keep walking every op, or a filtered view relabels an edit as an
add) and before the sort, so next_cursor is minted from the filtered
list and paging a since-feed terminates on its own oldest match.
Client: /<project-id>/since — a real VIEW_ROUTES entry — renders the
existing HistoryView with that filter and a header line. The anchor is a
per-(account, project) localStorage marker, read once from a useState
initializer and stamped after entries render: read it any later and the
page empties itself while you are reading it. SinceView is the only
caller of stampVisit, so no other page moves the marker.
Known ceiling: the marker is per browser, not per account — laptop and
phone keep separate last-visit times. The server-side marker is the
larger follow-up.