v0.8.3
Immutable
release. Only release title and notes can be modified.
A Sonar-driven refactoring release: no new file-format capability, but a focused pass using SonarCloud findings to drive cleanups — dead code removed, duplication factored out, and one hot-loop micro-optimisation. Each finding was triaged (lead, not verdict) so the changes preserve behaviour and the JIT vectorisation of the hot decode loops. The interpretation framework behind this is now documented in docs/testing.md.
Performance
FastLanes.transposeIndex/iterateIndex: replaced the per-element%//+ORDER[]indirection with permutation tables built once in a static initialiser. Faster address generation keeps more outstanding scatter misses in flight; measured 1.4×–3.4× on the transpose/undelta kernels (Apple M5, L1→DRAM working sets). The per-element decode loops stay specialised per width to preserve C2 superword vectorisation. (089b6e36, e683a634)
Removed
- Breaking (read SPI): removed
EncodingDecoder.accepts(DType). It was a residual of the ADR-0001 read/write split — encode-selection semantics copied onto the decoder side, where the reader dispatches purely byEncodingIdand never called it (dead since the split).EncodingEncoder.acceptsis unchanged. Downstream customEncodingDecoderimplementations should delete theiracceptsoverride. (7516a544)
Changed
- Internal dedup driven by Sonar duplication findings: extracted the shared FastLanes layout +
PType.bitsandPrimitiveArrays.toLongs/fromLongsinto core, hoisted theMaterialized*array boilerplate into a shared base, factored the fourBitpackedEncodingDecoderunpack loops onto one precomputed per-row schedule, addedPType.isUnsigned(dropping three private copies), and deduplicated the CLI inspect plumbing andformatBytes. (ec6b9631, a74263c0, 7af0af2a, 8362a353, 87c77cc9, d8f84088, b557e573, d52e8c0c) - Dropped dead
PTypeswitch arms in the writer'sreadPrimitiveElement,primitiveArrayLen, andbuildTypedUniqueArray— unreachable branches flagged as uncovered. (4c6ab149, 94d2fa49, f89072a6)
Fixed
- Cleared two SonarCloud-reported bugs in the writer's SUM zone-map stat plumbing. (33798ab9)
- Suppressed
java:S1172onAbstractMaterializedArray.materializewith a reason — thearenaparameter is contractual (implementsArray#materialize(SegmentAllocator)for the leaf classes), not a removable unused parameter. (9b226f73)
Tests
- Filled coverage gaps surfaced by Sonar: the
Materialized*materializedefaults, everySchemaCommand.formatDTypearm, and the writer's global-dict cardinality fallback with U16 utf8 codes. (8741dad3, 77fad504, c2918eaa)
Docs
docs/testing.md: new section on reading Sonar/PIT as data — the uncovered-line triage (missing-test / dead-code / defensive-by-contract), why mutation testing splits what coverage cannot, and when duplication is the deliberate price of the hot-loop rule. (8999661b)