Skip to content

Commit 6ec6d00

Browse files
dfa1claude
andcommitted
docs(changelog): link commit IDs in 0.5.0 and 0.4.0 entries
Match the 0.6.0 style — append ([sha](url)) to each bullet so the GitHub release pages cross-reference the underlying commits. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent b1906a0 commit 6ec6d00

1 file changed

Lines changed: 100 additions & 0 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)