Releases: RayforceDB/rayforce
v2.1.6
✨ Features
- allow
withinas a select WHERE predicate - add connect timeout argument to .ipc.open
- try returns a non-function 2nd arg as a fallback value
🐛 Bug fixes
- materialize lazy results so first/last don't hang the client
🔧 Maintenance & internal
- ci(pages): restore requirements-docs.txt so the docs deploy can build
- ci(pages): move requirements-docs.txt under .github/
Full changelog: v2.1.5...v2.1.6
v2.1.5
✨ Features
- add .log.purge to delete the active journal's files (#279)
- add .db.parted.tables to list a parted root's table names
🐛 Bug fixes
- free "sym" as a column name; symfile becomes the .sym dotfile (#280)
📚 Documentation
- remove .db.*.mount; document the trio-only surface (#278)
- cover .db.parted.tables across the docs
🔧 Maintenance & internal
- chore: stop tracking *.profdata coverage artifacts
- chore
Full changelog: v2.1.4...v2.1.5
v2.1.4
🔧 Maintenance & internal
- refactor(opt): DAG edges as stable uint32 node ids (§2.4)
Full changelog: v2.1.3...v2.1.4
v2.1.3
🐛 Bug fixes
- vector+vector length mismatch is a length error, not silent truncation (review 2.10)
- complete the 2.10 silent-failure sweep (pivot null-fill, update where+by, window frame)
- bound OOB strata/var/arity, make silent clause-drop + non-convergence loud, plug handle leak (review 2.8)
- bound non-square CSR OOB read, honor max_depth, loud-error path-tracking, fix HNSW recall + deterministic sort (review 2.9)
🔧 Maintenance & internal
- site: stale-while-revalidate the release banner (don't freeze on cached version)
- packaging: ship a portable .deb and a Homebrew tap on each release
- ci(release): build the Linux tarball portable too (x86-64-v3), not just the .deb
Full changelog: v2.1.2...v2.1.3
v2.1.2
🐛 Bug fixes
- serialize concurrent worker-heap teardown (SEGV in ray_heap_destroy)
🔧 Maintenance & internal
- ci: drop the redundant push:[dev] trigger (PR-only CI)
- ci(release): announce published releases to Zulip
Full changelog: v2.1.1...v2.1.2
v2.1.1
✨ Features
- unify all non-finite floats to 0Nf at produce time (single-null model)
- canonicalize non-finite floats to 0Nf at external ingest (single-null model, stage 2)
- enforce sentinel=>HAS_NULLS invariant via a debug validator (review 2.1)
- column-file format version + durable dir-fsync + reserved sym-name (review 2.6)
🐛 Bug fixes
- build from target commit, not the not-yet-created tag
- build from target commit, not the not-yet-created tag
- move column format version from aux to the order byte (aux reserved for postponed index persistence); single major-version byte, no magic
📚 Documentation
- drop the 'C17' buzzword for plain 'C' across site prose
🔧 Maintenance & internal
- ci(release): feature-oriented changelog instead of author/PR ledger
- ci: run the test suite only in the debug legs
- site: OS-detecting Download CTA + rename Get Started to Docs
- site: site-wide release announcement bar (MkDocs Material announce)
- site: download CTA, custom release banner, brand-unified docs UI
Full changelog: v2.1.0...v2.1.1
v2.1.0
Rayforce v2.1.0 is the first tagged release of the v2 line — a broad rework of
the aggregation engine, query/index paths, expression evaluation, and on-disk
storage. Highlights below; the compare link at the end has the full per-commit
history (800+ commits since the v2 rollup point).
✨ Highlights
Aggregation & group-by — rewritten. A new "v2" group-by engine replaces the
hand-tuned OP_GROUP_* / OP_FILTERED_GROUP operator zoo. It consumes a row
selection directly (no full materialization), and routes by key cardinality:
dense slabs for low-cardinality integer keys (serial or per-worker parallel) and
disjoint radix partitions for high-cardinality keys — parallel with no serial
merge. Per-group HyperLogLog sketches give streaming approximate distinct
counts with sparse/dense routing at high group counts.
Indexes & joins. Hash-index point lookups in find(), hash-index probes for
IN filters, and sort-index walks for distinct and ORDER BY (permutation
reuse). Radix inner joins build the hash on the smaller side, with automatic
fallback routing on pathological build-side duplication.
Null-aware fused expression evaluation. Compile-time nullable tracking with a
program-level null choke, and a fused evaluation path over nullable i64/f64
lanes — null-aware arithmetic, comparisons, and/or, isnull, and min2/max2
— with sentinel normalization on load and demotion casts.
Storage — "THE FLIP". Per-vocabulary symfiles with file-position encoding and
FILE-domain attachment, crash-safe splayed saves (sym first, .d last, stale
sweep), and a self-describing .d schema that carries column names.
Durability & IPC. A q-style transaction log (-l/-L with the .log.*
namespace), async fire-and-forget .ipc.post, .ipc.on.* connection hooks, and
unified connection handles in the poll selector.
Language. New ungroup verb (flattens nested-list columns, replicates atom
columns) and literal-symbol quote semantics.
Performance. Sustained hot-path work across the query executor, grouping, the
heap allocator, and aggregation.
This release also folds in many fixes, refactors, tests, and docs. See the full
history:
Full changelog: pre-v2-rollup...v2.1.0