v0.8.1
Immutable
release. Only release title and notes can be modified.
A hardening release: no new file-format capability, but a large step up in verification rigour. Mutation testing (PIT) now guards the security-critical bounds/parse paths in core, reader, and writer at 99–100% kill rate; the build fails on any javac warning (-Xlint:all -Werror); and property-based round-trips exercise every lossless encoding plus the full cascade-selection pipeline against seeded-random inputs. The one functional addition is boxed-nullable array input on the map writeChunk path.
Added
- Writer: the map-based
writeChunkpath accepts boxed nullable arrays (Integer[],Long[],Double[], …) alongside primitive arrays, so columns with nulls can be written without manual validity bookkeeping. (4d18939a)
Changed
- Breaking —
ExtensionEncoder.encodeAllis now abstract. The default body threwVortexException; every implementation already overrides it, so the contract now fails at compile time rather than at runtime. (2dcd69ce) - Breaking —
Estimateis now an enum{ SKIP, ALWAYS_USE, COMPLETE }. The sealed interface with emptySkip/AlwaysUserecords, theskip()/alwaysUse()factories, and thenull"no verdict" sentinel are gone;COMPLETEis the explicit defer-to-sample-encode verdict. (c355a4bf) - Reader cleanups: dropped a dead
length < 0blob check and a redundantoffset > fileSizebounds clause, reused the sharedPTypeIOlittle-endian layouts, and removed redundant numeric casts flagged by static analysis. (5d5fcc45, 36328285, 04cab707)
Fixed
- Writer: I8/I16 columns are excluded from the global dictionary — the reader cannot decode a narrow-int dict, so dict-encoding them produced unreadable files. (473256b1)
- Writer:
WriteRegistrynow iterates encoders in a deterministic order andaccepts()reports honestly, fixing a non-deterministic encoder selection that broke the Windows build. (9c4ebb18) - Reader: Pco decode now guards
preDeltaNagainst int overflow before clamping — the subtraction is widened tolong, restoring the overflow-safe path. (b7346e7c)
Build
- Zero-warning rule:
-Xlint:all -Werroracross all modules. Theclassfilelint (which only flags missing annotation class files inside third-party Arrow bytecode) is scoped off in the two Arrow-using modules only. (dab467e5, 43f6f840) - Mutation testing (PIT): opt-in
pitestprofiles in core, reader, and writer, scoped to the bounds/parse classes (IoBounds,PTypeIO,WriteRegistry,ChunkImpl, …), with common config hoisted into the parent POM. (46904b24, ed8c98a1, 1200c76b, 840cc46a) - SonarCloud: generated
fbs/andproto/sources excluded from analysis (machine output, not hand-maintained); the deliberate per-width SIMD-loop duplication is documented in ADR 0005 rather than refactored away. Code smells dropped 857→394; coverage ~81%, all ratings A, zero bugs/vulnerabilities. (6c591293)
Tests
- Property-based lossless round-trips added for ALP (f32/f64), Delta/FoR/ZigZag/AlpRd, a bitpacked bit-width sweep, the full
CascadingCompressor(every codec × cascade depth 0–3), and a Pco seeded-random distribution sweep. (dbe44aaa, a2cf3443, aede11d7, 115dd6fd, a426c1de) - Mutation-driven test hardening lifted core/reader/writer bounds and registry classes to 99–100% kill rate. (2235499a, c9243f9a, 912fcaff)
- Integration: added Java↔Rust round-trips for
vortex.patched,fastlanes.delta, andmaskedencodings. (13702764) - CLI: terminal smoke tests now force class initialization so the FFM libc/kernel32 symbol resolution is actually exercised. (3f741ef7)