One page of Trellis.sample_quarantined/3, ordered by (src_table, key).
next_cursor is opaque: pass it back as the :after option for the next
page, and don't read or build one. The last page is the one with fewer
rows than the limit. An empty page hands back the cursor it was asked for,
so polling from where you got to never falls back to the first page;
next_cursor is nil only for an empty first page.
Summary
Types
@opaque cursor()
An opaque sample_quarantined/3 cursor.
@type t() :: %Trellis.SamplePage{ next_cursor: cursor() | nil, samples: [Trellis.PoisonSample.t()] }