## TL;DR
Parse by column header name, not by position. New columns shift positions, but names stay meaningful.

## Error
```text
(parser read the wrong columns after Google added new usage columns; seat data wrong; no parser exception)
```

## Steps
1. Confirm the shift: compare the current CSV header row against the agent's expected columns. Expected: the new or moved columns identified.
2. Change the parser to look up columns by header name. Expected: position-independent parsing.
3. Handle unknown columns gracefully: ignore extras, and fail loudly only on missing required ones. Expected: forward-compatible parsing.
4. Re-run the parse. Expected: correct seat data.

## When to use
- Parsing breaks after a vendor column change
- The parser indexes columns by number
- New columns appear in the export

## When not to use
- The file encoding is wrong (an encoding problem)
- Columns are right but values are wrong (a data problem)
- The export itself fails (an export problem)

## Tool compatibility
Google Workspace usage reports and any CSV pipeline.

### Variant phrasings
### vendor renames a column
Header-name parsing still breaks on renames. Map the new name and keep the old as a fallback.

### required column missing entirely
Fail loudly; silent defaults on missing data corrupt the audit.

## Why it happens
Vendors evolve exports, but positional parsers freeze one layout in time. The first layout change misaligns every column after it.

## Provenance

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