v1.10.1
[1.10.1] — 2026-07-28
io.arrow.load now validates the wire-contract row order before reshaping (#199 item 1).
Fail-loud hardening of the parquet load path; no API change; CONFORMANCE_FLOOR stays 1.0.0.
Fixed
- Silent sample-slot corruption on out-of-order parquet input.
arrow.savewrites the
row order as the contract (sample = tile(arange(S), N);io/arrow.py) butload
reconstructed positionally without ever checking it — a reordered, truncated, or
foreign-rewritten table reshaped plausible floats into the wrong sample slots with no
error.loadnow validates the layout first and raisesValueErroron: a row count
that is not a positive multiple of the header'sn_samples(truncated/filtered table);
asamplecolumn deviating from the written tile order (row-level reorder); or
time/unitnot constant within a sample block (rows swapped between cells — the case
the tile check alone cannot see). A whole-cell block reorder (identifiers travel with
their draws) remains a consistent table and still loads. Implements the check
views-postprocessing ADR-013 §4.5(b) previously required every consumer to run
themselves on a separate raw-table read — the leaf now hardens all consumers at once.
Register C-72. (#199 item 2 — mmap/partitioned arrow reading — remains open.)