Skip to content

Releases: RayforceDB/rayforce

v2.1.6

23 Jun 18:57
49f0105

Choose a tag to compare

✨ Features

  • allow within as 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

23 Jun 10:45
a729406

Choose a tag to compare

✨ 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

20 Jun 14:04
127a70e

Choose a tag to compare

🔧 Maintenance & internal
  • refactor(opt): DAG edges as stable uint32 node ids (§2.4)

Full changelog: v2.1.3...v2.1.4

v2.1.3

20 Jun 10:06
c50d788

Choose a tag to compare

🐛 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

19 Jun 21:42
d7a53fa

Choose a tag to compare

🐛 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

19 Jun 20:53
0fba272

Choose a tag to compare

✨ 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

19 Jun 16:39
9b99525

Choose a tag to compare

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