id, but tracked tables still hold data from a prior run.
Restarting from the initial cursor would re-process every block and duplicate every row, so the
target refuses to start.
Fix — if you deliberately reset the sync table, also TRUNCATE/drop the tracked tables it names.
If you’re upgrading from a pre-id-keyed cursor, keep the old cursor by pinning
settings: { state: { id: 'stream' } } — see the
migration guide.