A cleanup script should explain what it changed—and what it refused to guess.
In our fictional CSV demo, 8 rows become 7 after removing one exact duplicate. Conflicting IDs and invalid or blank values are retained and flagged for review rather than silently becoming guessed data.
A CSV join can look tidy and still match the wrong rows.
In a fictional Project Zero demo, a repeated project ID on either side sends every occurrence and its counterpart to an exception queue. It never silently chooses the first row. IDs stay as text, so 001 keeps its leading...