@@ -100,19 +100,40 @@ replaces the silent `hasNext()` arena-closing footgun with closeable `Chunk` obj
100100 Lazy-loaded layout tree with stats, dictionary entries, hex previews, and decoded
101101 data; works against local files and ` http(s):// ` URLs. FFM-based ANSI terminal
102102 driver — no Lanterna dependency. Documented in ` docs/how-to.md#inspect-interactively-tui ` .
103+ ([ aa7561f] ( https://github.com/dfa1/vortex-java/commit/aa7561f ) ,
104+ [ 397b64a] ( https://github.com/dfa1/vortex-java/commit/397b64a ) ,
105+ [ d4cd0bc] ( https://github.com/dfa1/vortex-java/commit/d4cd0bc ) ,
106+ [ 8dae240] ( https://github.com/dfa1/vortex-java/commit/8dae240 ) ,
107+ [ 00452e4] ( https://github.com/dfa1/vortex-java/commit/00452e4 ) ,
108+ [ 7a51165] ( https://github.com/dfa1/vortex-java/commit/7a51165 ) ,
109+ [ e8db30a] ( https://github.com/dfa1/vortex-java/commit/e8db30a ) ,
110+ [ a43f340] ( https://github.com/dfa1/vortex-java/commit/a43f340 ) )
103111- ** Extension type decode** — ` vortex.date ` → ` LocalDate ` , ` vortex.time ` → ` LocalTime ` ,
104112 ` vortex.timestamp ` → ` Instant ` / ` ZonedDateTime ` , ` vortex.uuid ` → ` UUID ` . Routed
105113 through a new ` Extension ` sealed hierarchy on ` DType.Extension ` . See
106114 ` docs/compatibility.md ` for the coverage matrix.
115+ ([ 4963aa9] ( https://github.com/dfa1/vortex-java/commit/4963aa9 ) ,
116+ [ ca8d687] ( https://github.com/dfa1/vortex-java/commit/ca8d687 ) ,
117+ [ 99417ad] ( https://github.com/dfa1/vortex-java/commit/99417ad ) ,
118+ [ 9da2a78] ( https://github.com/dfa1/vortex-java/commit/9da2a78 ) ,
119+ [ 175ad07] ( https://github.com/dfa1/vortex-java/commit/175ad07 ) )
107120- ** Decimal decode** — ` GenericArray.getDecimal ` supports the ` decimal_byte_parts `
108121 shape, including i128 (precision > 18). Width 1/2/4/8 reads stay allocation-free.
122+ ([ 23d5019] ( https://github.com/dfa1/vortex-java/commit/23d5019 ) ,
123+ [ 4735324] ( https://github.com/dfa1/vortex-java/commit/4735324 ) ,
124+ [ ff20a24] ( https://github.com/dfa1/vortex-java/commit/ff20a24 ) ,
125+ [ f4ae8c0] ( https://github.com/dfa1/vortex-java/commit/f4ae8c0 ) )
109126- ** CLI uber-jar deployed to Maven Central** under classifier ` all `
110127 (` io.github.dfa1.vortex:vortex-cli:0.5.0:jar:all ` ). Useful when the consumer
111128 environment can't clone from GitHub. The manifest sets ` Enable-Native-Access ` so
112129 FFM downcalls work without the JVM flag.
130+ ([ 3e2c552] ( https://github.com/dfa1/vortex-java/commit/3e2c552 ) ,
131+ [ cfc5cc8] ( https://github.com/dfa1/vortex-java/commit/cfc5cc8 ) )
113132- ** Writer: global dictionary for low-cardinality ` Utf8 ` ** — columns with ≤ 256
114133 distinct values across chunks are now emitted as a shared ` vortex.dict ` layout.
134+ ([ b4d1b43] ( https://github.com/dfa1/vortex-java/commit/b4d1b43 ) )
115135- ** CI: Windows runs** for the inspector module.
136+ ([ a9c9d4e] ( https://github.com/dfa1/vortex-java/commit/a9c9d4e ) )
116137
117138### Changed
118139
@@ -125,63 +146,95 @@ replaces the silent `hasNext()` arena-closing footgun with closeable `Chunk` obj
125146 ` close() ` raises FFM's scope check (` IllegalStateException ` ) instead of returning
126147 undefined data. See the updated examples in ` README.md ` and
127148 ` docs/explanation.md#memory-model ` .
149+ ([ b45fd98] ( https://github.com/dfa1/vortex-java/commit/b45fd98 ) )
128150- ** Breaking — ` EncodingRegistry ` is immutable.** Register via the new builder:
129151 ` EncodingRegistry.builder().registerServiceLoaded().register(myEncoding).build() ` .
152+ ([ 64ffbaa] ( https://github.com/dfa1/vortex-java/commit/64ffbaa ) )
130153- ** Breaking — ` inspect ` split into ` inspect ` (text) + ` tui ` (interactive).**
131154 Previous ` inspect <file> ` behaviour stays on ` inspect ` ; interactive use is now
132155 on the dedicated ` tui ` subcommand.
156+ ([ e8db30a] ( https://github.com/dfa1/vortex-java/commit/e8db30a ) )
133157- ** ` Extension ` sealed hierarchy** replaces the prior ` Extensions ` utility class.
158+ ([ 175ad07] ( https://github.com/dfa1/vortex-java/commit/175ad07 ) )
134159- CLI errors always print the exception class + cause chain — ` VORTEX_DEBUG `
135160 environment variable removed.
161+ ([ 6a4464b] ( https://github.com/dfa1/vortex-java/commit/6a4464b ) ,
162+ [ f2f85bd] ( https://github.com/dfa1/vortex-java/commit/f2f85bd ) )
136163
137164### Performance
138165
139166- ** Bitpacked unpack** — per-row bookkeeping hoisted out of the inner block loop
140167 in ` unpackLoop8/16/32/64 ` . Measurable win on bitpacked scan benchmarks.
168+ ([ ab3ca3f] ( https://github.com/dfa1/vortex-java/commit/ab3ca3f ) ,
169+ [ ad8a64d] ( https://github.com/dfa1/vortex-java/commit/ad8a64d ) )
141170- ** Broadcast modulo branch-split** — ALP + Dict hot paths gate the
142171 ` ConstantEncoding ` broadcast modulo behind a cheap ` cap == n ` check, restoring
143172 C2 vectorization on the common path. ~ 5–10× recovery on the regressed scans.
173+ ([ 442021f] ( https://github.com/dfa1/vortex-java/commit/442021f ) )
144174- ** Scan fast-path on non-broadcast reads** — recovers ~ 25% on bitpacked scans
145175 by skipping the broadcast capacity check when not needed.
176+ ([ 051a794] ( https://github.com/dfa1/vortex-java/commit/051a794 ) )
146177- ** ` GenericArray.getDecimal ` ** — width 1/2/4/8 reads stay allocation-free.
178+ ([ f4ae8c0] ( https://github.com/dfa1/vortex-java/commit/f4ae8c0 ) )
147179
148180### Fixed
149181
150182- ** Decimal element width** is derived from the buffer size, not the declared
151183 precision — fixes round-trip with the Rust reference implementation for
152184 oversized declared precisions.
185+ ([ c798e95] ( https://github.com/dfa1/vortex-java/commit/c798e95 ) )
153186- ** ` Extensions.localDate ` bounds-check** — rejects out-of-range storage values.
187+ ([ a7eab37] ( https://github.com/dfa1/vortex-java/commit/a7eab37 ) )
154188- ** ` GenericArray.getDecimal ` ** rejects null cells in the mantissa path.
189+ ([ 5198115] ( https://github.com/dfa1/vortex-java/commit/5198115 ) )
155190- ** TUI thread safety** — ` Layout.metadata ` byte reads run on the I/O worker
156191 thread that owns the handle. ` InspectorTree.Node ` uses identity equality so
157192 duplicate subtrees don't collapse.
193+ ([ 6c732de] ( https://github.com/dfa1/vortex-java/commit/6c732de ) ,
194+ [ 0cc1137] ( https://github.com/dfa1/vortex-java/commit/0cc1137 ) ,
195+ [ a47b6fd] ( https://github.com/dfa1/vortex-java/commit/a47b6fd ) )
158196- ** ` InspectorTree ` ** — ` vortex.date ` columns format using the declared dtype;
159197 TUI data scan no longer applies ` withLimit ` (was rejecting ` GenericArray ` ).
198+ ([ 0e749df] ( https://github.com/dfa1/vortex-java/commit/0e749df ) ,
199+ [ b5ce1d6] ( https://github.com/dfa1/vortex-java/commit/b5ce1d6 ) )
160200- ** ` ScanIterator.truncateArray ` ** now supports ` GenericArray ` ; decimals format
161201 correctly in the TUI.
202+ ([ f09f564] ( https://github.com/dfa1/vortex-java/commit/f09f564 ) )
162203- ** CLI** prints the exception class + full cause chain on ` inspect ` errors.
204+ ([ f2f85bd] ( https://github.com/dfa1/vortex-java/commit/f2f85bd ) )
163205
164206### Removed
165207
166208- ` ScanResult ` — renamed to ` Chunk ` and given lifecycle methods. Update imports:
167209 ` io.github.dfa1.vortex.scan.ScanResult ` → ` io.github.dfa1.vortex.scan.Chunk ` .
210+ ([ b45fd98] ( https://github.com/dfa1/vortex-java/commit/b45fd98 ) )
168211- ` Extensions ` utility class — replaced by the ` Extension ` sealed hierarchy.
212+ ([ 175ad07] ( https://github.com/dfa1/vortex-java/commit/175ad07 ) )
169213- ` Extension.Time#unit ` / ` Extension.Timestamp#unit ` accessors (unused).
214+ ([ 2fcb311] ( https://github.com/dfa1/vortex-java/commit/2fcb311 ) )
170215- ` VORTEX_DEBUG ` env-var gate — stack traces are always printed on CLI error.
216+ ([ 6a4464b] ( https://github.com/dfa1/vortex-java/commit/6a4464b ) )
171217- Lanterna dependency — replaced by an FFM-based ANSI terminal in
172218 ` cli/src/main/java/.../tui/term ` .
219+ ([ 397b64a] ( https://github.com/dfa1/vortex-java/commit/397b64a ) )
173220
174221### Refactored
175222
176223- ** ` Trailer ` parser** extracted, shared by ` VortexReader ` (mmap) and
177224 ` VortexHttpReader ` (range-request) paths.
225+ ([ 1ac6f5a] ( https://github.com/dfa1/vortex-java/commit/1ac6f5a ) )
178226- ** ` VortexHttpReader ` ** allocates its own ` Arena ` in the constructor and reuses
179227 a single ` HttpClient ` .
228+ ([ e18dafd] ( https://github.com/dfa1/vortex-java/commit/e18dafd ) )
180229- ** Inspector module** carved out of ` cli ` ; TUI + ` IoWorker ` + terminal code
181230 later moved back into ` cli ` (only the ` inspect ` package stayed in
182231 ` vortex-inspector ` ).
232+ ([ aa7561f] ( https://github.com/dfa1/vortex-java/commit/aa7561f ) ,
233+ [ 77baff1] ( https://github.com/dfa1/vortex-java/commit/77baff1 ) )
183234- Documentation: layout section expanded (node types, encoding namespaces,
184235 pruning); on-disk file-layout diagram in ` explanation.md ` .
236+ ([ e696f07] ( https://github.com/dfa1/vortex-java/commit/e696f07 ) ,
237+ [ 5c2b410] ( https://github.com/dfa1/vortex-java/commit/5c2b410 ) )
185238
186239[ 0.5.0 ] : https://github.com/dfa1/vortex-java/compare/v0.4.0...v0.5.0
187240
@@ -201,95 +254,142 @@ FlatBuffer/Protobuf runtime exceptions). Regression suite lives under
201254
202255- ** Zip-bomb protection** — ` ConstantEncoding ` and dict-layout decode no longer pre-allocate
203256 ` O(rowCount) ` memory; a 150-byte crafted file claiming 10⁹ rows is now constant-cost.
257+ ([ 10a7776] ( https://github.com/dfa1/vortex-java/commit/10a7776 ) )
204258- ** Trailer + postscript validation** — ` VortexReader ` and ` VortexHttpReader ` reject unknown
205259 file ` version ` , ` postscriptLen == 0 ` , and ` postscriptLen > fileSize - 8 ` . Footer/layout/dtype
206260 blob offsets and ` Layout.encoding ` index are bounds-checked at parse time.
261+ ([ f8f89fe] ( https://github.com/dfa1/vortex-java/commit/f8f89fe ) )
207262- ** Footer ` segmentSpecs ` bounds** — every spec is validated against ` fileSize ` the moment
208263 the footer is materialised, eliminating later ` IndexOutOfBoundsException ` on
209264 ` MemorySegment.asSlice ` .
265+ ([ 03845ac] ( https://github.com/dfa1/vortex-java/commit/03845ac ) )
210266- ** PType ordinal bounds-check** — ` PType.fromOrdinal(int) ` replaces all 22 ` PType.values()[idx] `
211267 call sites across encodings; crafted Protobuf ptype fields are rejected up front.
268+ ([ b4988c3] ( https://github.com/dfa1/vortex-java/commit/b4988c3 ) )
212269- ** Layout-tree depth cap** — ` PostscriptParser.convertLayout ` is capped at depth 64,
213270 preventing both unbounded nesting and self-referential FlatBuffer cycles (a ~ 120-byte
214271 cycle attack previously triggered ` StackOverflowError ` ).
272+ ([ 29adbe0] ( https://github.com/dfa1/vortex-java/commit/29adbe0 ) )
215273- ** Layout metadata size cap** — per-layout ` metadataAsByteBuffer() ` is capped at 4 MiB
216274 (above any real encoding's footprint; FSST's symbol table is the largest at ~ 32 KiB).
275+ ([ ebbe644] ( https://github.com/dfa1/vortex-java/commit/ebbe644 ) )
217276- ** Decimal field validation** — ` DType.Decimal ` is rejected unless ` precision ∈ [1, 38] `
218277 and ` scale ∈ [0, precision] ` , matching IEEE 754-2008 decimal128.
278+ ([ ebbe644] ( https://github.com/dfa1/vortex-java/commit/ebbe644 ) )
219279- ** ` readFlatStats ` bounds-check** — zone-map stats reads now validate the trailing
220280 little-endian ` fbLen ` field against the segment size, returning empty stats on malformed
221281 input rather than throwing ` IndexOutOfBoundsException ` from ` MemorySegment.asSlice ` .
282+ ([ ebbe644] ( https://github.com/dfa1/vortex-java/commit/ebbe644 ) )
222283
223284### Added
224285
225286- ** ` vortex.sequence ` F16 encode/decode** — half-precision floats now round-trip through the
226287 sequence encoding.
288+ ([ 7b3d7a9] ( https://github.com/dfa1/vortex-java/commit/7b3d7a9 ) )
227289- ** Writer: cascading with global dict layout** — low-cardinality columns (≤ 256 distinct
228290 values in the chunk sample) are now emitted as a ` vortex.dict ` layout, with the dict
229291 candidate detection tightened to avoid false positives.
292+ ([ 53b2a19] ( https://github.com/dfa1/vortex-java/commit/53b2a19 ) ,
293+ [ d383765] ( https://github.com/dfa1/vortex-java/commit/d383765 ) )
230294- ** Writer: opt-in Zstd compression** — ` WriteOptions.withZstd(boolean) ` exposes the
231295 size/throughput trade-off. Off by default; turn on for archival workloads.
296+ ([ ea10d37] ( https://github.com/dfa1/vortex-java/commit/ea10d37 ) )
232297- ** ` Encoding.decodeSegment ` extension point** — added as part of the typed-segment migration
233298 (see * Changed* below). Provides a typed alternative to ` Array.segment() ` .
299+ ([ ed4a0ae] ( https://github.com/dfa1/vortex-java/commit/ed4a0ae ) )
234300- ** ` DecodeContext.decodeChild(int, DType, long) ` ** — typed child-decode helper that replaces
235301 the per-encoding ` decodeChildAs(...) ` private utilities.
302+ ([ d07faf0] ( https://github.com/dfa1/vortex-java/commit/d07faf0 ) ,
303+ [ a1512da] ( https://github.com/dfa1/vortex-java/commit/a1512da ) )
236304- ** Typed accessors on concrete array types** — ` LongArray.segment() ` , ` VarBinArray.offsetsSegment() ` ,
237305 ` MaskedArray.inner() ` , and friends now live on the concrete types where they fit cleanly,
238306 rather than on the ` Array ` interface.
307+ ([ 84a34f4] ( https://github.com/dfa1/vortex-java/commit/84a34f4 ) )
239308- ** ` *SecurityTest ` test-naming convention** — adversarial / robustness tests are now grouped
240309 under the ` *SecurityTest ` suffix, mirroring the existing ` *IntegrationTest ` convention.
241310 Run with ` ./mvnw test -Dtest='*SecurityTest' ` .
311+ ([ 76ba67c] ( https://github.com/dfa1/vortex-java/commit/76ba67c ) )
242312- ** ` FlatSegmentDecoder ` ** — extracted from ` EncodingRegistry ` ; the registry is now pure
243313 dispatch.
314+ ([ 4a08356] ( https://github.com/dfa1/vortex-java/commit/4a08356 ) )
244315
245316### Changed
246317
247318- ** ` Array ` interface slimmed down.** ` buffer(int) ` , ` child(int) ` , and ` segment() ` are no
248319 longer part of the ` Array ` interface; consumers should use the typed accessors on the
249320 concrete subtype (e.g. ` LongArray.segment() ` ) or ` ArraySegments.of(arr) ` for a generic
250321 fallback. ` buffer(int) ` is now package-private on the concrete array types.
322+ ([ bdb4e7d] ( https://github.com/dfa1/vortex-java/commit/bdb4e7d ) ,
323+ [ 1283168] ( https://github.com/dfa1/vortex-java/commit/1283168 ) ,
324+ [ ba5957c] ( https://github.com/dfa1/vortex-java/commit/ba5957c ) ,
325+ [ df6ab3f] ( https://github.com/dfa1/vortex-java/commit/df6ab3f ) ,
326+ [ bb7b656] ( https://github.com/dfa1/vortex-java/commit/bb7b656 ) )
251327- ** ` VarBinArray ` ** no longer keeps a redundant ` offsetsArr ` field; consumers read offsets
252328 via ` offsetsSegment() ` .
329+ ([ 96687f8] ( https://github.com/dfa1/vortex-java/commit/96687f8 ) )
253330- ** ` ArrayStats ` ** is no longer eagerly stored on decoded array types; statistics are now
254331 read on demand from the FlatBuffer node, matching the Rust reference implementation.
332+ ([ 9237e28] ( https://github.com/dfa1/vortex-java/commit/9237e28 ) )
255333
256334### Fixed
257335
258336- ** ` MaskedArray.segment() ` ** delegates correctly to its inner array (regression introduced
259337 during the typed-accessor migration).
338+ ([ 8a16119] ( https://github.com/dfa1/vortex-java/commit/8a16119 ) )
260339- ** Constant-encoded array indexing** broadcasts the index correctly when scanning multiple
261340 rows from a single stored value.
341+ ([ ed658b7] ( https://github.com/dfa1/vortex-java/commit/ed658b7 ) )
262342- ** Performance benchmark** (` RustWritesJavaReadsBigFileBenchmark ` ) migrated off the removed
263343 ` Array.buffer(int) ` accessor, unblocking ` ./mvnw verify ` and ` ./bench ` .
344+ ([ 977a529] ( https://github.com/dfa1/vortex-java/commit/977a529 ) )
264345
265346### Removed
266347
267348- ` Array.buffer(int) ` , ` Array.child(int) ` , and ` Array.segment() ` from the public ` Array `
268349 interface (see * Changed* ). Callers should migrate to the concrete-type accessors or
269350 ` ArraySegments.of(arr) ` .
351+ ([ bdb4e7d] ( https://github.com/dfa1/vortex-java/commit/bdb4e7d ) ,
352+ [ 1283168] ( https://github.com/dfa1/vortex-java/commit/1283168 ) )
270353- ` Encoding.decodeSegment(...) ` is removed after the migration to ` DecodeContext.decodeChild ` .
354+ ([ 977a529] ( https://github.com/dfa1/vortex-java/commit/977a529 ) )
271355- ` ArrayStats ` field on decoded array types (statistics are now lazy).
356+ ([ 9237e28] ( https://github.com/dfa1/vortex-java/commit/9237e28 ) )
272357
273358### Documentation
274359
275360- Added ` CONTRIBUTING.md ` covering trunk-based workflow, commit conventions, and the
276361 three-touch-point rule for adding encodings.
362+ ([ d9825cf] ( https://github.com/dfa1/vortex-java/commit/d9825cf ) )
277363- Added an internal-architecture diagram set covering the file format, layout tree, and
278364 scan path.
365+ ([ 75f4cea] ( https://github.com/dfa1/vortex-java/commit/75f4cea ) )
279366- Added a "Vortex vs Parquet" comparison section to the README.
367+ ([ 886bb80] ( https://github.com/dfa1/vortex-java/commit/886bb80 ) )
280368- Expanded the ` ## Security ` section in ` TODO.md ` with the open hardening roadmap (resource
281369 caps, per-encoding adversarial tests, Jazzer fuzz harness, OSS-Fuzz submission).
370+ ([ 1bb1465] ( https://github.com/dfa1/vortex-java/commit/1bb1465 ) )
282371
283372### Build & Tooling
284373
285374- ** Dependabot enabled** for Maven and GitHub Actions.
375+ ([ dd118a7] ( https://github.com/dfa1/vortex-java/commit/dd118a7 ) )
286376- Numerous dependency bumps: JUnit Jupiter (5.11.4 → 6.1.0, tests now require JUnit 6),
287377 Mockito, FastCSV (3 → 4), H2 (2.3 → 2.4), Checkstyle, Zstd-JNI,
288378 maven-compiler/surefire/failsafe/javadoc/source/shade/gpg/antrun/exec/build-helper plugins,
289379 ` actions/checkout ` (4 → 6), ` actions/setup-java ` (4 → 5), ` actions/cache ` (4 → 5),
290380 Sonatype central-publishing plugin.
381+ ([ 81be668] ( https://github.com/dfa1/vortex-java/commit/81be668 ) ,
382+ [ 2c8319f] ( https://github.com/dfa1/vortex-java/commit/2c8319f ) ,
383+ [ f6dbcf1] ( https://github.com/dfa1/vortex-java/commit/f6dbcf1 ) ,
384+ [ dfabd8c] ( https://github.com/dfa1/vortex-java/commit/dfabd8c ) ,
385+ [ 7b4a718] ( https://github.com/dfa1/vortex-java/commit/7b4a718 ) ,
386+ [ fb9b404] ( https://github.com/dfa1/vortex-java/commit/fb9b404 ) ,
387+ [ 7b67000] ( https://github.com/dfa1/vortex-java/commit/7b67000 ) ,
388+ [ fd1ea7e] ( https://github.com/dfa1/vortex-java/commit/fd1ea7e ) )
291389- ` pom.xml ` files now group dependencies under ` production ` / ` testing ` comment sections
292390 with a consistent project-internal-first ordering.
391+ ([ bcbbbfd] ( https://github.com/dfa1/vortex-java/commit/bcbbbfd ) )
293392- Checkstyle scope tightened to exclude generated ` fbs ` /` proto ` packages.
393+ ([ f5ab433] ( https://github.com/dfa1/vortex-java/commit/f5ab433 ) )
294394
295395[ 0.4.0 ] : https://github.com/dfa1/vortex-java/compare/v0.3.2...v0.4.0
0 commit comments