ContribsPager relies solely on rev_timestamp for paging. This causes revisions to be skipped, when the boundary of two pages falls between revisions with the same timestamp. The solution is to combine rev_timestamp with rev_id for a stable chronological order.
Note that this had already been fixed, but that fix was then lost in an attempt to improve query performance. Queries for user contributions are notoriously sensitive to quirks in the query planner, and they are affected by the actor and comment migration, see T215466.
Caveat: ContribsPager allows extensions to insert revisions via the ContribsPager__reallyDoQuery hook. Flow uses this hook, and appends its own fake "revision" rows to the ones retrieved from core. Having those Flow revisions (UUID revision ids) combined with revisions stored in core (integer revision ids) creates an unreliable foundation for using revision id as a secondary comparator as the 2 ids are unrelated.
However, for T257839 we introduced the revisionsOnly option into ContribsPage, which disables the ContribsPager__reallyDoQuery hook. In this mode, stable paging based on a combination of timestamp and revision ID would again be possible.
This task was originally filed as:
Investigate wrong entry order in the user contributions list
This task is to investigate the wrong order of entries in the contributions list. See parent ticket. Might be related to T46841 .