Revision history for JSONL

0.1.6  2026-08-21T23:47:32+01:00
    - Records are now written as BYTES — UTF-8 JSON plus one 0x0A — through
      IO::Handle.write, bypassing the handle's encoder entirely. This is
      the third and final round with Windows CRLF: 0.1.4 passed
      :!translate-nl to open (not an open argument; silently swallowed by
      %_), 0.1.5 re-set it through .encoding (which short-circuits before
      reading :translate-nl when the encoding name is unchanged) — both
      no-ops, both caught by the byte test on Windows CI. Bytes have no
      trapdoors. Works on any handle, text or binary; .write is ordered
      with a caller's own .say on a shared handle. Output is UTF-8
      regardless of the handle's encoding, which is what JSONL is. The
      closed-handle check .say performed and .write does not is supplied
      by the writer, so a write through a closed handle still throws the
      typed X::IO::Closed rather than a raw VM error.
    - The byte test now also drives a handle opened :nl-out("\r\n") — the
      shape of the Windows failure, reproduced on every platform — so the
      immunity is proven without a Windows box.

0.1.5  2026-08-21T23:27:29+01:00
    - Writer output really is byte-identical on every platform now. The
      0.1.4 fix passed :!translate-nl to open, which is not an open
      argument at all — it lands in the implicit %_ and is silently
      swallowed, so Windows kept writing CRLF (caught by the 0.1.4 byte
      test on Windows CI). The handle's encoder is built translating by
      default and the one supported off-switch is rebuilding it through
      .encoding(:!translate-nl), which the writer now does for handles it
      opens AND for a caller-supplied :handle at construction. The byte
      test now covers both modes.

0.1.4  2026-08-21T23:16:18+01:00
    - Writer output is byte-identical on every platform: path-mode handles
      are opened :!translate-nl, so the "\n" record separator reaches the
      file as one 0x0A byte on Windows too instead of being rewritten to
      CRLF by the platform's default newline translation. A caller-supplied
      :handle keeps whatever translation it was opened with; open it
      :!translate-nl for deterministic output.

0.1.3  2026-08-09T19:40:27+01:00
    - Added opt-in :flush to JSONL::Writer for handle-mode durability
      (flushes to disk after every line so a crash loses at most the
      in-flight line)

0.1.2  2026-04-29T23:45:10+01:00
    - Bump Github Actions to use node 24+

0.1.1  2026-04-13T17:04:53+01:00
    - Added auth specifiers to META6.json dependencies

0.1.0  2026-04-07T18:33:26+01:00
    - Initial release
    - Reader with lazy streaming, head/tail/grep/sample/summary/schema
    - Writer with sorted keys, append mode
    - Editor with update-at/delete-at/insert-at/transform
    - Line class with hash-like and array-like access
    - Strict and lenient modes for blank lines and malformed JSON
    - File and IO::Handle input/output support
