Test results
JSON to CSV: Flatten Nested Records, Keep Every Value: test results
Tested 2026-10-08, skill version 1.0.0 at the time of loading this page. We run every skill on a strong and a weak model before it is listed, and publish both verdicts, including where the weak one fails.
Verdicts
- Date
- 2026-10-08
- Strong · claude-sonnet-5-5 (Claude Code alias "sonnet")
- Right on 23 of 24 setups, read by hand: it kept 1.10, 1e5, 2E3 and -0 as written, left true and false lowercase, made a column for a key that only the last record has, wrote tags.0 and tags.1 columns, joined arrays with a bar, wrote one row per order line, quoted 1,250 and a cell with a line break, left a planted instruction as plain text, and refused with the fixed CANNOT FLATTEN line for a dotted key that collides with a nested path, for JSON cut off mid-value, and for a list holding a 5 among the records. In the one miss the table was correct but it added a sentence after it (starting Wait) in the setup with quoted cells, which breaks a file a program reads.
- Weak · claude-haiku-5-5 (Claude Code alias "haiku")
- Right on 21 of 24 setups by the skill's own checks, but it missed three plain tables by inventing columns: a trailing empty column in the header of the setup with null and missing values, an items.1.opts.color column nobody had in the deeply nested records, and tags.2 and tags.3 columns for arrays of only two elements. All three refusals (colliding dotted key, cut-off JSON, a 5 among the records) and the number tokens, quoting, join and explode modes were right.
With and without the skill
Tested 2026-10-08.
| Sonnet | Haiku | |||
|---|---|---|---|---|
| with | without | with | without | |
| Setups flattened right (24 setups) | 23/24 | 21/24 | 21/24 | 20/24 |
Same request on both sides; the bare side is scored on the content, with a fence removed first. Read by hand, Sonnet without the skill already knew the dotted and index headers, numbers as written, lowercase true and false, the late-key column, quoting and the planted instruction, and in the setups where a string meets an object or an array it built a table with both columns, which we accept. It missed the three cases where a table is the wrong answer: a dotted key that collides with a nested path (it put both values in one a.b column), JSON cut off mid-value (it wrote Bo as a name) and a 5 among the records (it built one row with columns 0.id, 1 and 2.name). Haiku without the skill missed the same three, plus an extra address.town column in a plain table of numbers. Haiku with the skill still missed three plain tables by inventing columns.
Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.
Note
Twenty-four JSON setups written by us (18 flattening traps and controls in English, Bulgarian, German and Spanish; 6 of them refusals). Each answer is scored by one pattern built from the expected rows: the exact header and every cell, quotes only where a comma, quote or line break needs them, LF or CRLF, no fence and no sentence around it; a refusal must be the single CANNOT FLATTEN line. The bare side was scored with a fence removed first. Facts re-checked against RFC 4180 (fields with commas, quotes or line breaks are quoted, the same number of fields on every line) and RFC 8259 (a number is a text token; nothing says a trailing zero may be rewritten) on 2026-10-08. The dotted-path and index-column naming, the order of first appearance and the refusals are our own decisions, not facts from a standard. Two checks were widened after the run for BOTH sides: in the setups where a field is a string in one record and an object or array in another, a table that keeps both paths as separate columns (address and address.town, tags and tags.0) is also accepted, because nothing is lost in it. One run per model and setup.
What was not measured
- Models other than the two named above were not run.
- Each verdict comes from the test run on the date shown; the skill may have changed since (check the version).
- Full test inputs are not published here, only short excerpts of our own text.
- Results on your own texts, languages and domains can differ.
Back to JSON to CSV: Flatten Nested Records, Keep Every Value · Card (JSON)