A Migration can skip a source row by returning FALSE in prepareRow().
The following is a technique (untested) for outputting skipped source data rows, so that they can be reviewed by a human, and cleaned up or processed in some way:
- create the Migration class as normal, rejecting source rows by returning FALSE in prepareRow().
- create a second, dependent migration, with:
-- the map table of the first migration as its source, filtered on 'needs_update' = MigrateMap::STATUS_IGNORED.
-- write each row to the desired output (eg, CSV file with a custom destination class)