Why generated CSVs break
A model asked for a dataset produces plausible rows. It does not know your column contract, so an address containing a comma arrives unquoted, and the row silently gains a field.
The second failure is truncation. Long generations stop mid-row, which produces a final line with fewer columns than the header and no error until import time.
The third is drift within a file: dates formatted per row, a currency symbol appearing halfway down, a numeric column with a stray unit in one cell.