CSVFormat Changelog
2026-10-11 — Deviations documented, not hidden
Wrote an About page that states, with reproducible inputs, the four places this parser diverges from RFC 4180: every field is trimmed even inside quotes (the spec says spaces are part of a field), tabs are stripped, whitespace-only cells become empty strings, and semicolon-delimited files parse as one silent column. Also documented the SQL emitter's number round-trip honestly — 01234 emits as 1234 and 9007199254740993 arrives at 9007199254740992 — plus an unquoted reserved-word column like order being rejected by SQLite.
No parser behaviour changed. The trimming trade is deliberate and stays; what changed is that you can now read about it before it surprises you.
2026-10-08 — Real RFC 4180 state machine
Replaced the line-based parser with a character-by-character state machine (feat(cronprobe,csvformat): real next-run engine + RFC 4180 parser). Three things became possible that split could not do:
- Quoted fields containing newlines stay one field instead of corrupting the row count.
- Doubled quotes (
"") unescape to one literal"—"He said ""hi"", loudly"is one field, not three. - CRLF files parse without stray
\rin every cell.
Same commit added the ragged-row counter: rows whose field count differs from the header are counted and surfaced — in the row counter for JSON mode, and as an explicit -- WARNING: N row(s) did not match the header column count appended to SQL output. A mis-split row shifts every value one column right while producing syntactically valid SQL; that failure mode is why the warning exists.
2026-10-08 — Sitemap scope fix
Sitemaps now generate from build output and include only registered domains.
2026-10-07 — Pro Tips panel
Added the Gotchas panel: CSV is not a line format, split(",") is not a parser, and why Excel's "helpful" number coercion is the reason this tool treats every JSON value as a string.
2026-10-06 — Contrast fixes
Dark-theme muted text and the primary button's hover state both failed contrast. Fixed.
2026-10-05 — Shared footer
Applied the monorepo footer grid; sibling tools now cross-link consistently.
2026-10-01 — Build hygiene
dist/ untracked; CI regenerates deploy output. No page changes.
2026-09-15 — Launch
Initial deploy: CSV → JSON and CSV → SQL INSERT conversion, client-side only, with the sample loader ("Connor, John" in row two — a quoted comma, from day one).