- bump @toon-format/spec to ^3.3.0; update SPEC.md pointer and badges
- docs: align number-form prose with §2 carve-out (canonical in [1e-6, 1e21) or zero; exponent form permitted outside)
- docs/reference/spec.md: add lowercase booleans/null to encoder checklist; add Java to Appendix F language list
- docs/reference/efficiency-formalization.md: drop overstated "matching TOON's requirement" claim
- packages/toon/README.md: drop "What's New in v3.2" section (now stale)
All 593 tests pass (packages/toon: 497, packages/cli: 96). Encoder remains conformant by default under the v3.3 §2 carve-out via String(value).
Two regrade fixes surfaced by a post-v3.2 verification swarm:
* llm-prompts.md and api.md had ISO-8601 timestamps as unquoted TOON
values, violating §7.2 (strings containing a colon MUST be quoted).
The spec repo's examples and packages/toon/README.md already quote
timestamps; the docs repo had drifted.
* docs/cli/index.md is the docs-site twin of packages/cli/README.md.
The prior v3.2 swarm (dd856fe) updated the README's --no-strict
options row and Lenient Decoding prose to cite "header delimiter"
but did not propagate to the parallel paragraphs in docs/cli/index.md
(lines 159 and 234).
- packages/toon/README.md: drop two v3.1 bullets that crept into the
"What's new in v3.2" list (canonical empty-array form and \uXXXX
escape both landed in v3.1).
- docs/reference/api.md: rename "Delimiter mismatches" entry to
"Header delimiter mismatch" and cite §14.2 – the previous wording
invited the false reading that non-active delimiter chars in row
data are an error. Add §14.4 cross-ref to the duplicate-key entry.
- docs/reference/spec.md: include \uXXXX in the §7 escape list; soften
the charset MUST claim to match §17; en-dash the §-ranges in the
glance table.
- docs/reference/syntax-cheatsheet.md: rename "Strings with Active
Delimiter" to "Strings Containing Delimiters" and distinguish
active-delim (array scope) from document-delim (object field
values) per §11.1.
- docs/guide/format-overview.md: same active-vs-document distinction
in the delimiter paragraph; drop incorrect "strict mode" qualifier
from the unknown-escape error claim (§7.1 rejects unconditionally);
trim redundant "with leading zeros" parenthetical.
- docs/guide/llm-prompts.md: fix two broken anchors
(/reference/api#decode → #decode-input-options, similar for
encodelines); use -o instead of --output for CLI example
consistency.
- packages/cli/README.md: enumerate what --no-strict actually skips
in the options table; replace "delimiter consistency" with the
more specific "header delimiter mismatches" in the Lenient Decoding
prose to avoid the same false reading the api.md fix addresses.
- Canonical empty-array form (`key: []` / root `[]`) replaces `key[0]:`
in format-overview, syntax-cheatsheet, and the efficiency-formalization
worked example. Legacy form still decodes.
- Escape tables grow a `\uXXXX` row covering U+0000-U+001F outside
\n/\r/\t, with a note rejecting lone-surrogate \uXXXX values.
- "Special characters" lists widened to "any control character (U+0000-U+001F)"
instead of the LF/HTAB/CR triplet.
- Tabular eligibility note adds the "at least one key" rule so arrays
containing an empty {} fall back to the expanded list.
- New short example for nested arrays-of-objects as list items (`- [N]:`).
- API reference: Date row gets an info callout noting it's an
implementation choice the spec leaves open; strict-mode bullet list
picks up header structure, duplicate sibling keys, path-expansion
conflicts, and lone-surrogate escapes; Expansion Conflict Resolution
notes the matching duplicate-key policy.
- §17 IANA anchor fix in getting-started media-type paragraph.
- Drop the removed §17 Interoperability and §19 Core Profile bullets
- Renumber §18 IANA -> §17, add §18 Versioning and §19 IP entries
- Appendix G -> F (Host Type Normalization Examples)
- Update the Sections-at-a-Glance table to the v3.2 layout
- §14.5 -> §14.3 path-expansion reference in the Decoder Checklist
- §14 enumeration covers count/width, syntax/structural, expansion, dup keys
- Encoder Checklist mentions \uXXXX escapes alongside the five base escapes
- Major-version example swapped to v2 -> v3 / v3.1 -> v3.2
- Working Draft date updated to 2026-05-20