## TL;DR

Bulk API result files are CSVs where error rows contain nested, quoted error details that naive parsers mangle. Parse with a real CSV reader, read the error column per row, and route failed rows to a retry file with their reasons. The results are fine; the parser is naive.

## Error

```text
csv.Error: unexpected end of data in error column; nested quotes broke the parse
```

## Steps

1. Parse the result file with a proper CSV reader that handles quoted fields. Expected: rows parse cleanly.
2. For each row, check the success flag; for failures, extract the error message column. Expected: per-row outcomes with reasons.
3. Group failures by error message. Expected: a handful of classes.
4. Write failed rows plus their errors to a retry file. Expected: actionable rework, not a mystery.
5. Fix each class and re-run only the failed rows. Expected: clean completion.

## When to use

- Result parsing crashes or mangles errors.
- An agent cannot tell which rows failed or why.
- After a bulk job with partial failures.

## When not to use

- Jobs that fail outright (check job state).
- Row errors themselves (fix the data per the error).

## Tool compatibility

- Salesforce Bulk API result files; Python csv module.
- Agent result handling.

## Variant phrasings

### result file parse error

Use a real CSV parser.

### nested error rows

The error column contains structured detail; parse it as CSV first.

## Why it happens

Error details contain commas, quotes, and newlines. Line-splitting or naive splitting breaks on exactly the rows you most need to read.

## Edge cases

- Error text can itself contain the delimiter; quoted-field parsing handles it.
- Very large result files need streaming parse, not load-all.
- Keep the raw result file; it is the audit trail.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_f42utVdlhpWdXLFgRExqUw
