From 6db13c60b857be3e236849cc19c996463e19b1d1 Mon Sep 17 00:00:00 2001 From: osobh Date: Fri, 25 Sep 2026 21:17:08 -0500 Subject: [PATCH] docs: changelog for the filter interop fixes Co-Authored-By: Claude Opus 5.5 (1M context) --- CHANGELOG.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1ece78..cbe22bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -179,6 +179,31 @@ `float16` rounding matches numpy's bit for bit on 4 020 probe values, including ties, subnormals and the overflow boundary), and an agent store — `f32` and `float16` — opened by h5py with every dataset decoded. +- `clawhdf5-format` filters, checked against libhdf5 + hdf5plugin: + - **LZ4 (32004) now uses the registered HDF5 LZ4 format** (8-byte BE size, + 4-byte BE block size, BE-length-prefixed blocks). Our old framing (4-byte + LE size + one block) was readable only by clawhdf5, and we could not read + libhdf5's (`h5ex_d_lz4.h5`). Old clawhdf5 LZ4 chunks still read; they are + told apart unambiguously (a registered chunk starts with four zero bytes). + - **Zstd (32015) frames now record the content size**, which libhdf5's zstd + plugin needs; h5py could not read our zstd datasets. + - **Pcodec moved from filter ID 32023 to 480.** 32023 is registered to + Granular BitRound, whose decode is a pass-through — libhdf5 with that + plugin would have returned compressed bytes as data. Pcodec has no + registered ID; 480 is in the registry's private range (256–511) and only + clawhdf5 can read it. Chunks written under 32023 with the filter name + `pcodec` (clawhdf5 ≤ 2.7.0) still read. + - **SZIP decode matches libhdf5.** It returned garbage or zeros with no + error for libhdf5-written files (the 4-byte size prefix, 32/64-bit + byte-plane interleaving, reference interval, scanline padding and byte + order were all handled wrongly) and rejected 64-bit data. + - N-Bit honours libhdf5's "need not compress" flag (multi-filter pipelines + such as `tfilters.h5` failed) and reads enum/no-op members. + - Scale-offset `float` decode uses libhdf5's single-precision arithmetic + (was 1 ULP off for some values). + - A pipeline with Fletcher32 ahead of the compressor (h5py + `set_fletcher32()` then `set_deflate()`) no longer fails with "deflate: + output exceeds size limit". ### Storage - `clawhdf5-format`: **half-precision datasets.**