- Reject non-finite HNSW vectors and invalid cosine norms before mutation or search, and reject the same values when restoring archives.
- Reject duplicate labels in legacy flat archives instead of constructing an inconsistent graph.
- Make
SearchResultordering deterministic for equal distances by comparing labels. - Add a continuous-integration gate for optimized macOS and iOS builds, the full macOS test suite, and Address/Thread Sanitizer runs.
- Correct the documented minimum deployment targets to macOS 26 and iOS 26.
- Add borrowed graph-archive resource inspection with conservative retained and restore-working payload estimates so constrained hosts can reject restoration before allocation while retaining allocator headroom.
- Added an allocation-free direct Swift four-bit reference with differential coverage for odd, even, vector-boundary, and tail dimensions.
- Added a scalar C kernel that consumes the existing Float centroid table and retained it as the production WASM and Embedded WASM backend after it measured 1.044x to 1.067x faster than the direct Swift reference.
- Retained ARM64 NEON after it measured 1.864x to 2.491x faster at the kernel boundary and 1.997x to 2.135x faster in repeated 10,000-vector d=768 searches with identical Recall@10 and result checksums.
- Added reproducible three-process Native ARM64, regular WASM, and Embedded WASM kernel comparisons plus two Native end-to-end search runs.
- Corrected the evidence scope: the fixed toolchain verifies the production
kernel boundary on Native ARM64, regular WASM, and Embedded WASM. Full WASM
index lifecycle support is not claimed because the fixed snapshot traps in
generic
HNSWIndex<Float>construction before the kernel is reached. The same toolchain also lacks the package's Float16 APIs on macOS x86_64.
- Enabled the portable
CTurboQuantKernelsfour-bit MSE path on regular WASM and Embedded WASM while retaining ARM64 NEON. - Verified C compilation and target linking with the fixed Swift 6.4 snapshot; the archive representation is unchanged.
- Reduced QJL lookup-loop load overhead with a bounded pure Swift unaligned
UInt64read and aUInt32fallback while preserving Float32 reduction order and result compatibility. - Added paired d=768 and d=128 benchmark evidence for the follow-up.
- Kept the archive representation unchanged; TurboQuant 1.1.0 archives remain loadable by 1.1.1.
- Added the production
TurboQuantIndexMSE and QJL inner-product objectives, structured Hadamard and Haar rotation strategies, bounded workspaces, and typed archive validation. - Added adaptive QJL pruning statistics to the benchmarking SPI.
- Kept the QJL reduction in pure Swift with an unsafe, bounded unaligned word load; no QJL C ABI is part of the production path.
- Preserved the existing Swift concurrency contract across Native, WASM, and Embedded targets.
TurboQuant archives written by 1.0.x use an older representation and are not
loadable by 1.1.0. Rebuild the index from source vectors before upgrading.
Regular HNSWIndex archives remain on their existing format.