MigrationCheckpoint
How far a migration got: the point id to resume at and how many points had been written by then.
resumeAt is inclusive, which is Qdrant's cursor semantics rather than a choice made here. Resuming re-reads and re-writes that one point, and an upsert keyed by point id makes that a repeat rather than a duplicate.