date: 2026-08-25
title: 'Spice v2.2.0 (Aug 25, 2026)'
type: blog
authors: [krinart]
tags: [release, cdc, mysql, postgresql, search, byoc, debezium kafka, observability, dashboard]
Spice v2.2.0 is now available! 🚀
Spice v2.2.0 focuses on real-time data, performance, and stability. Cloud Connect links self-hosted runtimes to Spice.ai Cloud (opens in a new tab) for management and observability. MySQL datasets and PostgreSQL catalogs can now stream source changes into accelerated datasets. Debezium sources can send CDC events directly without Kafka. Warm in-memory indexes improve vector and full-text search performance.
Highlights in v2.2.0 include:
What's New in v2.2.0
Cloud Connect
Spice Cloud Connect is a feature of Spice.ai Cloud (opens in a new tab).
Spice Cloud Connect (opens in a new tab) links self-hosted runtimes for BYOC (Bring Your Own Cloud) to Spice.ai Cloud for management and observability. Run spice cloud link (opens in a new tab) to enroll a standalone runtime.
Try it with the Cloud Connect on a Development Machine (opens in a new tab) recipe.
MySQL Change Data Capture
The MySQL Data Connector (opens in a new tab) now supports refresh_mode: changes. The runtime loads an initial snapshot of the table. It then applies inserts, updates, and deletes from the MySQL binlog (opens in a new tab) as they commit. The acceleration stays current without scheduled refreshes.
datasets:
- from: mysql:orders
name: orders
params:
mysql_host: localhost
mysql_db: mydb
mysql_user: replicator
mysql_pass: ${secrets:mysql_pass}
acceleration:
engine: cayenne
refresh_mode: changes
datasets:
- from: mysql:orders
name: orders
params:
mysql_host: localhost
mysql_db: mydb
mysql_user: replicator
mysql_pass: ${secrets:mysql_pass}
acceleration:
engine: cayenne
refresh_mode: changes
- Failover-safe GTID positions: When the source server has GTID (opens in a new tab) enabled, the runtime tracks the replication position as a GTID set. A GTID position stays valid across a replica promotion, so replication survives a failover to a new primary without a rebuild.
PostgreSQL Catalog CDC
The PostgreSQL Catalog Connector (opens in a new tab) is now Beta with new Catalog CDC acceleration support at Alpha.
A PostgreSQL catalog can now use refresh_mode: changes. One configuration replicates every table that the include patterns match. Queries then read fresh PostgreSQL data with no per-table setup.
catalogs:
- from: pg
name: pg
include:
- 'public.*'
params:
pg_host: localhost
pg_db: mydb
pg_user: postgres
pg_pass: ${secrets:pg_pass}
acceleration:
refresh_mode: changes
catalogs:
- from: pg
name: pg
include:
- 'public.*'
params:
pg_host: localhost
pg_db: mydb
pg_user: postgres
pg_pass: ${secrets:pg_pass}
acceleration:
refresh_mode: changes
Known limitations while catalog CDC acceleration is Alpha: configuration may change; a table dropped and recreated in the source can serve rows captured before it was recreated (#12110 (opens in a new tab)); and a durable catalog acceleration can come back empty after a restart (#12729 (opens in a new tab)). Feedback is welcome in #11850 (opens in a new tab).
Debezium CDC Without Kafka
Any Debezium source plugin can now stream change events directly into Spice, with no Kafka bus in between. A dataset with from: cdc:… accepts change events at POST /v1/datasets/{name}/cdc, in JSON or Avro. The existing Kafka path (from: debezium:…) is unchanged.
Faster Search with Warm In-Memory Indexes
Search (opens in a new tab) adds a warm in-memory tier for vector and full-text indexes. The runtime writes each change to the warm tier and to the durable store together. Queries read the warm tier first and fall back to the durable store. The warm tier covers vector indexes, full-text indexes, .vectors datasets, views, and chunked Elasticsearch vector columns.
More search improvements:
cosine_distance uses SIMD instructions through the simsimd library.
- Full-text search applies stemming by default.
- Full-text search pushes SQL filters down into the tantivy index.
- A delete now removes the document from full-text and vector indexes. BM25 statistics no longer count superseded documents.
- The runtime loads local rerankers from
text-embeddings-inference models.
- The runtime validates vector search parameters before it runs the SQL query.
Operations & Observability
- Query timeout: The new
runtime.query.timeout setting bounds the duration of every query. An expired query fails with HTTP 504 or gRPC DEADLINE_EXCEEDED.
runtime:
query:
timeout: 30s
runtime:
query:
timeout: 30s
- CPU sizing for Kubernetes pods without a CPU limit: A Spice runtime pod with a CPU request and no CPU limit now sizes itself to twice the request instead of every core on the node. Set
SPICE_CPU_CORES=all (or runtime.cpu.cores: all) to burst to all cores, for example when a 0.5-core request runs on a 24-core node.
- Trace IDs in logs: Every log record from a query carries the query's trace ID. Filter the logs by one ID to see everything that query did.
- Improved dashboards: The Grafana and Datadog dashboards add new and improved panels, and support multi-replica and Kubernetes deployments.
- Helm: The Helm chart supports a custom Deployment strategy and StatefulSet
updateStrategy.
- Dataset status: A non-accelerated dataset now shows the
Error state when its source is unavailable, instead of appearing healthy while queries fail.
Other Notable Improvements and Bug Fixes
- Drasi (Alpha): The runtime forwards CDC changes and runtime tables to a Drasi (opens in a new tab) source.
- Microsoft SQL Server: Kerberos integrated authentication now works on Unix.
- HTTP connector: OAuth2 client-credentials authentication.
- Oracle
DATE: Values lost their time of day. They now map to a timestamp.
- Catalog
exclude patterns: The Glue and Cayenne catalogs ignored exclude patterns. Both pattern lists now apply.
- Spice Cayenne schema changes: Partitioned accelerations could report a source schema change as applied while partitions kept the old schema. This mismatch caused lossy casts or append failures. Cayenne now rejects in-place evolution for partitioned accelerations. The configured schema-change policy then handles the change.
- Snowflake
NUMBER values: The connector could remove fractional digits during schema discovery. It treated numeric metadata as absent and defaulted the scale to zero. It now preserves the source precision and scale.
See the Changelog (opens in a new tab) for the full list of fixes.
SDK Updates
Updated SDKs release alongside v2.2.0:
- spice.js v3.2.0 (opens in a new tab) — adds query cancellation (
listActiveQueries/cancelActiveQuery), mTLS client certificates, HTTP fallback when Flight is unavailable, and typed parameter binding via Flight SQL prepared statements. Also fixes nsql() and search() response handling and named parameters over HTTP.
- spicepy v4.0.0 (opens in a new tab) — adds streaming of large results, natural-language queries (
nsql), vector and hybrid search, and query cancellation. Spice.ai Cloud users need this update: the legacy hostnames are retired in favor of region-specific endpoints.
- spice-rs v4.0.0 (opens in a new tab) — adds search, NSQL, async queries, query cancellation, and mTLS.
Dependency Updates
| Dependency / Component | Version |
|---|
| DataFusion | v54.1 |
| iceberg-rust | v0.10.0 |
| Turso | v0.7.2 |
| Rust toolchain | v1.96.1 |
New Contributors
Contributors
Breaking Changes
- CPU sizing for Kubernetes pods without a CPU limit: A Spice runtime pod with a CPU request and no CPU limit now sizes itself to twice the request instead of every core on the node. Set
SPICE_CPU_CORES=all (or runtime.cpu.cores: all) to keep the previous behavior, or set runtime.cpu.cores to a specific core count.
- Partitioned DuckDB accelerations are removed: The DuckDB accelerator now rejects
partition_by. Use the Cayenne or Arrow accelerator for partitioned datasets.
- Adaptive Cayenne tuning requires an explicit opt-in: An unset
cayenne_tuning now resolves to auto. Set cayenne_tuning: adaptive to enable the closed-loop controller.
- ONNX ML inference is removed: The runtime no longer loads ONNX models, and it no longer serves the
/v1/predict endpoints. Use an LLM model provider instead.
- One process-wide Vortex segment cache: Cayenne tables now share one segment cache instead of one cache per table. Set
cayenne_segment_cache_mb under runtime.params to size it. When unset, the cache takes 1/64 of the memory entitlement, clamped to 256 MiB - 2 GiB.
- The Pingora cache engine is now a Spice.ai Enterprise feature: An OSS build with
engine: pingora degrades to the Moka engine and logs the substitution.
- Deprecated settings:
pg_replication_temporary_slot is deprecated. cayenne_segment_cache_mb at the table level is deprecated — set it under runtime.params instead. This release renames the MongoDB num_docs_to_infer_schema setting to schema_infer_max_records. The old name still works and warns.
Cookbook Updates
The Spice Cookbook (opens in a new tab) includes more than 104 recipes to help you get started with Spice quickly and easily.
Upgrading
To upgrade to v2.2.0, use one of the following methods:
CLI:
Homebrew:
brew upgrade spiceai/spiceai/spice
brew upgrade spiceai/spiceai/spice
Docker:
Pull the spiceai/spiceai:2.2.0 image:
docker pull spiceai/spiceai:2.2.0
docker pull spiceai/spiceai:2.2.0
For available tags, see DockerHub (opens in a new tab).
Helm:
helm repo update
helm upgrade spiceai spiceai/spiceai --version 2.2.0
helm repo update
helm upgrade spiceai spiceai/spiceai --version 2.2.0
AWS Marketplace:
Spice is available in the AWS Marketplace (opens in a new tab).
What's Changed
Changelog
- feat(testoperator): --prepare-only / --skip-prepare for htap source reuse by @bjchambers (opens in a new tab) in #11486 (opens in a new tab)
- test(cluster): de-flake scheduler_failover (drop unreliable scheduler_node assertion) by @phillipleblanc (opens in a new tab) in #11518 (opens in a new tab)
- feat(cayenne): wire orphaned-DV cleanup knob to spicepod params + doc sync by @bjchambers (opens in a new tab) in #11523 (opens in a new tab)
- fix(cayenne): warn (not panic) on benign manifest/listing race; re-enable now-passing ignored tests by @lukekim (opens in a new tab) in #11511 (opens in a new tab)
- fix(datafusion): accurate projected scan byte size so hash joins build the smaller side by @sgrebnov (opens in a new tab) in #11503 (opens in a new tab)
- fix(cayenne): seed persisted
num_rows for hash-join sizing by @sgrebnov (opens in a new tab) in #11515 (opens in a new tab)
- fix(cayenne): user-visible DELETE WHERE pk IN (...) reports the real row count by @lukekim (opens in a new tab) in #11514 (opens in a new tab)
- test(cayenne): CDC convergence/resurrection fuzz harness by @bjchambers (opens in a new tab) in #11502 (opens in a new tab)
- fix(cayenne): correctness & memory_limit fixes from perf audit (2 P0, 3 P1) by @lukekim (opens in a new tab) in #11516 (opens in a new tab)
- perf(cayenne): compaction IO-hygiene follow-ups — input-page evict + O_DIRECT writer + bench by @lukekim (opens in a new tab) in #11498 (opens in a new tab)
- Update end_game.md by @bjchambers (opens in a new tab) in #11535 (opens in a new tab)
- chore: Vendor ttf-parser, lopdf, pdf-extract by @peasee (opens in a new tab) in #11521 (opens in a new tab)
- fix: Update tpch benchmark snapshots for federated/mysql[catalog].yaml by @app/github-actions (opens in a new tab) in #11531 (opens in a new tab)
- Fix s3 vectors API by @krinart (opens in a new tab) in #11536 (opens in a new tab)
- Update from spiceai/datafusion#177 by @Jeadie (opens in a new tab) in #11541 (opens in a new tab)
- perf(cayenne): off-write_lock N>1 mem-tier checkpoint + adaptive query-admission throttle by @lukekim (opens in a new tab) in #11538 (opens in a new tab)
- fix(flightsql): propagate bearer token to per-endpoint clients by @boittega (opens in a new tab) in #11509 (opens in a new tab)
- fix: Placeholder table initialization lock swap by @peasee (opens in a new tab) in #11540 (opens in a new tab)
- chore(cluster): bump ballista pin for the null-aware anti-join fix by @phillipleblanc (opens in a new tab) in #11544 (opens in a new tab)
- fix(runtime-tools): fix memory table identifier validation rejecting valid names by @Jeadie (opens in a new tab) in #11546 (opens in a new tab)
- test(chbench): enable 4-way mem-tier PK sharding on SF1000 memory-durability configurations by @sgrebnov (opens in a new tab) in #11553 (opens in a new tab)
- fix(reorder): reorder inner-join islands inside EXISTS / NOT EXISTS by @sgrebnov (opens in a new tab) in #11552 (opens in a new tab)
- feat(cayenne): enable orphaned-DV cleanup by default (per-table threshold 20) by @bjchambers (opens in a new tab) in #11533 (opens in a new tab)
- fix(postgres): delete old key on CDC primary-key updates by @phillipleblanc (opens in a new tab) in #11551 (opens in a new tab)
- Properly exclude vendored crates from
make lint-rust-fix by @krinart (opens in a new tab) in #11560 (opens in a new tab)
- fix: arrow IndexedMemTable serves stale results after DML/retention/sync (fixes #11262) by @claudespice (opens in a new tab) in #11532 (opens in a new tab)
- perf(cayenne): concurrent per-shard mem-tier checkpoint encode (drain parallelism) by @lukekim (opens in a new tab) in #11558 (opens in a new tab)
- fix(physical-plan): estimate col=literal selectivity from NDV, not the flat 20% default (Datafusion) by @sgrebnov (opens in a new tab) in #11562 (opens in a new tab)
- fix: Read Postgres DB source error when available by @peasee (opens in a new tab) in #11566 (opens in a new tab)
- feat(cayenne): cold object-store tier with read-optimized clustering by @lukekim (opens in a new tab) in #11543 (opens in a new tab)
- Generic CDC replication-lag metric by @krinart (opens in a new tab) in #11554 (opens in a new tab)
- fix: ignore transitive quick-xml advisories (RUSTSEC-2026-0194/0195) in cargo-deny by @krinart (opens in a new tab) in #11571 (opens in a new tab)
- test(chbench): add cold-object-store-tier SF-1000 HTAP run; cap SF-1000 mem-tier at 1 GiB by @lukekim (opens in a new tab) in #11573 (opens in a new tab)
- fix: surface silent Turso read-path conversion failures (fixes #11276) by @claudespice (opens in a new tab) in #11570 (opens in a new tab)
- feat(testoperator): emit P99 + Max replication lag and staleness telemetry for HTAP by @sgrebnov (opens in a new tab) in #11572 (opens in a new tab)
- feat(runtime): cost-based eager aggregation, enabled by default (datafusion spiceai-54) by @bjchambers (opens in a new tab) in #11446 (opens in a new tab)
- Bump datafusion to include spiceai/datafusion#181 by @Jeadie (opens in a new tab) in #11563 (opens in a new tab)
- fix(cayenne): drain in-flight maintenance before in-process reopen (mutation_property flake) by @bjchambers (opens in a new tab) in #11578 (opens in a new tab)
- Unified JSON nesting by @krinart (opens in a new tab) in #11555 (opens in a new tab)
- feat(testoperator): capture under-load EXPLAIN plans as HTAP artifacts by @sgrebnov (opens in a new tab) in #11576 (opens in a new tab)
- feat(cayenne): freshness-SLO-driven adaptive mem-tier shrink (+ freshness diagnostics) by @lukekim (opens in a new tab) in #11574 (opens in a new tab)
- fix(cayenne): fold un-checkpointed mem-tier keys into the cold keyset rebuild by @lukekim (opens in a new tab) in #11592 (opens in a new tab)
- perf(cayenne): reuse the PK RowConverter across the sharded CDC apply by @lukekim (opens in a new tab) in #11590 (opens in a new tab)
- Add labels to
spiceai-dev by @krinart (opens in a new tab) in #11591 (opens in a new tab)
- Rename mongo
num_docs_to_infer_schema (deprecated) -> schema_infer_max_records by @krinart (opens in a new tab) in #11593 (opens in a new tab)
- fix(postgres): don't ACK replication slot past uncommitted envelopes on empty transactions by @bjchambers (opens in a new tab) in #11582 (opens in a new tab)
- refactor(connectors): extract abfs, adbc, cosmosdb, ducklake, gcs, git, github, glue, kafka, snowflake-native, spiceai into data-connectors crates by @Jeadie (opens in a new tab) in #11407 (opens in a new tab)
- Revert "Generic CDC replication-lag metric" by @lukekim (opens in a new tab) in #11600 (opens in a new tab)
- refactor(cayenne): remove orphaned-DV cleanup spicepod param, make it always-on by @bjchambers (opens in a new tab) in #11575 (opens in a new tab)
- fix(mongodb): substitute delete when UpdateLookup finds no document by @bjchambers (opens in a new tab) in #11583 (opens in a new tab)
- ci(chbench): SF1000 tuned+adaptive every 3h, other configs once daily by @lukekim (opens in a new tab) in #11601 (opens in a new tab)
- feat(cayenne): add integer support to maintained AVG by @bjchambers (opens in a new tab) in #11564 (opens in a new tab)
- Refresh spidapter Spice Cloud token from client credentials by @krinart (opens in a new tab) in #11594 (opens in a new tab)
- fix: cluster filtered COUNT(*) on append-only tables returns unfiltered total (fixes #11599) by @claudespice (opens in a new tab) in #11603 (opens in a new tab)
- fix(scylladb): error on lossy CQL decimal conversion instead of silent truncation/NULL (fixes #11267) by @claudespice (opens in a new tab) in #11604 (opens in a new tab)
- ci(chbench): drop postgres-arrow and tuned (non-memory) from scheduled HTAP runs by @lukekim (opens in a new tab) in #11606 (opens in a new tab)
- ci(chbench): lower tuned SF1000 mem-tier max age to 15s for scheduled HTAP runs by @lukekim (opens in a new tab) in #11618 (opens in a new tab)
- fix(cayenne): fold the un-checkpointed mem-tier into the persisted-bloom PK-index rebuild (SF-100 over-count) by @lukekim (opens in a new tab) in #11609 (opens in a new tab)
- Potential fix for 1 code quality finding by @lukekim (opens in a new tab) in #11614 (opens in a new tab)
- fix(postgres): shared replication slot drops WAL for partitioned tables (fixes #11290) by @claudespice (opens in a new tab) in #11607 (opens in a new tab)
- bench(chbench): add 4-slot CDC variant pod for SF-1000 memory (separate from default) by @bjchambers (opens in a new tab) in #11605 (opens in a new tab)
- fix(cayenne): don't serve drifted memory-CDC row count as Exact to COUNT(*) by @bjchambers (opens in a new tab) in #11602 (opens in a new tab)
- chore(deps): vendor pgwire-replication 0.3.2 by @bjchambers (opens in a new tab) in #11617 (opens in a new tab)
- Add SQL warehouse ID to integration workflow by @Jeadie (opens in a new tab) in #11561 (opens in a new tab)
- fix(search): cosine_distance returns NULL not NaN for zero-magnitude vectors by @claudespice (opens in a new tab) in #11621 (opens in a new tab)
- feat(spidapter): tuned + adaptive MongoDB CDC spicepods with scenario selection by @bjchambers (opens in a new tab) in #11579 (opens in a new tab)
- Potential fixes for 3 code quality findings by @lukekim (opens in a new tab) in #11613 (opens in a new tab)
- Potential fixes for 2 code quality findings by @lukekim (opens in a new tab) in #11611 (opens in a new tab)
- Potential fixes for 2 code quality findings by @lukekim (opens in a new tab) in #11615 (opens in a new tab)
- Potential fix for 1 code quality finding by @lukekim (opens in a new tab) in #11612 (opens in a new tab)
- feat(cayenne): split mem-tier into ingestion + immutable pieces; advance the replication slot on a cheap periodic seal (default 2s) by @lukekim (opens in a new tab) in #11622 (opens in a new tab)
- fix(mcp): encode catalog-qualified tool names without '/' (fixes #10894) by @claudespice (opens in a new tab) in #11629 (opens in a new tab)
- fix(refresh): apply refresh_sql override on manual refresh when source unchanged (fixes #11353) by @claudespice (opens in a new tab) in #11626 (opens in a new tab)
- fix: report empty accelerated schema instead of misleading missing-column error (fixes #10920) by @claudespice (opens in a new tab) in #11625 (opens in a new tab)
- fix(imap): store message date as millisecond Timestamp, not seconds in Date64 (fixes #11547) by @claudespice (opens in a new tab) in #11624 (opens in a new tab)
- test(bucket): guard frozen partition-hash output against silent ahash drift (addresses #11277) by @claudespice (opens in a new tab) in #11623 (opens in a new tab)
- Bump datafusion (spiceai/datafusion#182) and datafusion-table-providers (#27): fix q16 CollectLeft planning error and SQLite q6 wrong revenue by @Jeadie (opens in a new tab) in #11598 (opens in a new tab)
- fix(cluster): prevent executor flaps and distributed query stalls by @phillipleblanc (opens in a new tab) in #11565 (opens in a new tab)
- fix(cli): allow
spice trace on dynamic MCP/custom tool_use tasks (fixes #10995) by @claudespice (opens in a new tab) in #11630 (opens in a new tab)
- docs: add clang/lld to arm64 Linux build prerequisites (fixes #11120) by @claudespice (opens in a new tab) in #11632 (opens in a new tab)
- perf(cayenne): mem-tier visible-batch memo + maintained MIN/MAX IVM by @lukekim (opens in a new tab) in #11631 (opens in a new tab)
- docs: consolidate agent instructions and fix stale references by @lukekim (opens in a new tab) in #11634 (opens in a new tab)
- build(deps): bump the github-actions-dependencies group across 2 directories with 7 updates by @app/dependabot (opens in a new tab) in #11627 (opens in a new tab)
- perf(flight): offload query-result IPC encoding off the IO runtime by @lukekim (opens in a new tab) in #11608 (opens in a new tab)
- feat(runtime): reservation-aware Cayenne CDC query-memory default (75%→70%) by @lukekim (opens in a new tab) in #11641 (opens in a new tab)
- Revert "ci(chbench): lower tuned SF1000 mem-tier max age to 15s for scheduled HTAP runs" by @lukekim (opens in a new tab) in #11648 (opens in a new tab)
- fix(cayenne): don't bump mem-tier version on seal (QPH regression from #11622) by @lukekim (opens in a new tab) in #11649 (opens in a new tab)
- feat(cayenne): vendor versioned row_converter module (byte-compatible with arrow-row 58.3.0) by @phillipleblanc (opens in a new tab) in #11654 (opens in a new tab)
- fix(flightsql): advertise analyzed query schemas by @phillipleblanc (opens in a new tab) in #11656 (opens in a new tab)
- feat(cayenne): bounded append freshness — segmented stream publishing + publish-triggered executor stats broadcast by @phillipleblanc (opens in a new tab) in #11620 (opens in a new tab)
- fix(postgres): decouple replication keepalive/feedback from apply backpressure by @bjchambers (opens in a new tab) in #11653 (opens in a new tab)
- fix: bump DataFusion for eager decimal SUM schema by @phillipleblanc (opens in a new tab) in #11657 (opens in a new tab)
- fix(cayenne): stop mem-tier snapshot storms under memory pressure and byte-range splitting of small snapshot scans by @sgrebnov (opens in a new tab) in #11645 (opens in a new tab)
- fix(ducklake): add opt-in automatic_migration to attach older catalogs (fixes #10899) by @claudespice (opens in a new tab) in #11635 (opens in a new tab)
- ci(e2e): tolerate empty-type DuckDB variant of the parquet-rename race by @claudespice (opens in a new tab) in #11636 (opens in a new tab)
- build(deps): bump the aws-sdk group with 3 updates by @app/dependabot (opens in a new tab) in #11628 (opens in a new tab)
- ci(chbench): FIFO-queue HTAP runs via concurrency queue: max; simplify dispatcher by @bjchambers (opens in a new tab) in #11659 (opens in a new tab)
- fix(bucket): guard against ahash AES-path re-bucketing of partition data (fixes #11277) by @claudespice (opens in a new tab) in #11665 (opens in a new tab)
- fix(cayenne): gate metastore reinsert_sequence schema behind a user_version (fixes #11291) by @claudespice (opens in a new tab) in #11651 (opens in a new tab)
- fix(cayenne): durable CDC delete keeps the pk IN (...) fast path (fixes #11633) by @lukekim (opens in a new tab) in #11642 (opens in a new tab)
- ci(chbench): make scheduled HTAP runs adaptive-only (retire tuned, convert cold tier to adaptive) by @lukekim (opens in a new tab) in #11677 (opens in a new tab)
- fix(imap): decode text body into content instead of storing raw MIME (fixes #11549) by @claudespice (opens in a new tab) in #11667 (opens in a new tab)
- feat(cayenne): end-to-end integrity checksums for WAL records and Vortex data files (fixes #11639) by @claudespice (opens in a new tab) in #11646 (opens in a new tab)
- feat(spidapter): date-prefix per-run MongoDB CDC databases by @bjchambers (opens in a new tab) in #11658 (opens in a new tab)
- test(cayenne): fuzz mem-tier CDC + seq-prefix bake; harden durable-path count exactness by @bjchambers (opens in a new tab) in #11643 (opens in a new tab)
- deps: bump spiceai/datafusion to pick up ORDER BY alias unparser fix by @Jeadie (opens in a new tab) in #11655 (opens in a new tab)
- fix(postgres_replication): size CDC change-batch builders to the transaction row count by @sgrebnov (opens in a new tab) in #11675 (opens in a new tab)
- Release notes for v2.1.0 by @Jeadie (opens in a new tab) in #11429 (opens in a new tab)
- perf(pgwire-replication): incremental zero-copy framing (FrameReader) + bounded message size by @lukekim (opens in a new tab) in #11668 (opens in a new tab)
- fix(cdc): memory-mode changes stream no longer fatally stops on a transient deferred-commit queue (fixes #11644) by @bjchambers (opens in a new tab) in #11678 (opens in a new tab)
- test: update snapshots from job 84685029883 by @Jeadie (opens in a new tab) in #11569 (opens in a new tab)
- fix: Distinguish no filters vs lit(false) for RefreshSql distributed accelerations by @peasee (opens in a new tab) in #11596 (opens in a new tab)
- Fix cargo-deny crossbeam-epoch advisory by @Jeadie (opens in a new tab) in #11681 (opens in a new tab)
- fix: Update benchmark snapshots for
trunk run by @app/github-actions (opens in a new tab) in #11666 (opens in a new tab)
- chore(deps): upgrade Vortex to 0.76.0 by @lukekim (opens in a new tab) in #11682 (opens in a new tab)
- refactor: extract runtime-metrics crate, move ComponentType to runtime-api-types by @Jeadie (opens in a new tab) in #11524 (opens in a new tab)
- feat(cloud-connect): standalone instance adoption by @lukekim (opens in a new tab) in #11060 (opens in a new tab)
- docs: keep the feature set constant across a session (incremental-build hygiene) by @bjchambers (opens in a new tab) in #11679 (opens in a new tab)
- feat(mysql): binlog replication for
refresh_mode: changes by @lukekim (opens in a new tab) in #11672 (opens in a new tab)
- feat(cdc): cap keys per durable delete plan + absorb fall-through metrics (#11673) by @bjchambers (opens in a new tab) in #11680 (opens in a new tab)
- ci(chbench): run scheduled SF1000-adaptive HTAP bench every 6h instead of 3h by @lukekim (opens in a new tab) in #11698 (opens in a new tab)
- fix: MySQL connector fails to convert unsigned integer types (fixes #8364) by @claudespice (opens in a new tab) in #11691 (opens in a new tab)
- observability(cdc): localize CDC back-pressure across the ingest pipeline by @bjchambers (opens in a new tab) in #11610 (opens in a new tab)
- fix(cache): cache empty (zero-row) SQL result sets by @bjchambers (opens in a new tab) in #11699 (opens in a new tab)
- Update spicepod.schema.json by @Jeadie (opens in a new tab) in #11706 (opens in a new tab)
- Add support for MysSQL in Ch-Bench by @krinart (opens in a new tab) in #11700 (opens in a new tab)
- observability(chbench): limit CH-BenCHmark logs to info and above by @bjchambers (opens in a new tab) in #11711 (opens in a new tab)
- perf(cdc): cache per-dataset metric labels to avoid per-event string copies by @bjchambers (opens in a new tab) in #11712 (opens in a new tab)
- feat(postgres): pgoutput binary-format CDC decoding + zero-copy decoder by @bjchambers (opens in a new tab) in #11702 (opens in a new tab)
- Update integration_models.yml by @Jeadie (opens in a new tab) in #11715 (opens in a new tab)
- fix(cayenne): zero-row append refresh fails with "No such file or directory" by @sgrebnov (opens in a new tab) in #11710 (opens in a new tab)
- perf(cdc): cut shared-slot Postgres replication pump per-event overhead by @bjchambers (opens in a new tab) in #11709 (opens in a new tab)
- fix(spicepod): reject unknown fields on columns[] config (fixes #10972) by @claudespice (opens in a new tab) in #11719 (opens in a new tab)
- feat(cayenne): tier-gated O_DIRECT compaction writer (EBS/NAS network storage) by @lukekim (opens in a new tab) in #11696 (opens in a new tab)
- fix(cayenne): harden Vortex compaction writes by @phillipleblanc (opens in a new tab) in #11692 (opens in a new tab)
- perf(vortex): push boolean NOT filters into the Vortex scan by @lukekim (opens in a new tab) in #11721 (opens in a new tab)
- chore(chbench): cap scheduled HTAP runs at 250K tpmC (rate 9250) by @sgrebnov (opens in a new tab) in #11723 (opens in a new tab)
- MySQL CH-benCHmark HTAP: SF1 + SF1000 adaptive configs by @krinart (opens in a new tab) in #11722 (opens in a new tab)
- feat(testoperator): TPC-DS SF100 federated cluster-bench spicepod + default spicehq nodegroup by @phillipleblanc (opens in a new tab) in #11716 (opens in a new tab)
- refactor(runtime): move AccelerationSource and Acceleration into runtime-acceleration by @Jeadie (opens in a new tab) in #11530 (opens in a new tab)
- remove(ml): delete model_components crate and ONNX/Tract ML inference by @Jeadie (opens in a new tab) in #11684 (opens in a new tab)
- ci: dedupe testoperator query_overrides run steps by @Jeadie (opens in a new tab) in #11690 (opens in a new tab)
- Update search snapshots by @Jeadie (opens in a new tab) in #11714 (opens in a new tab)
- refactor: use inherent
is::<T>() on dyn TableProvider/dyn ExecutionPlan for type checks by @Jeadie (opens in a new tab) in #11585 (opens in a new tab)
- chore: remove unused BlueOak license allowance by @phillipleblanc (opens in a new tab) in #11762 (opens in a new tab)
- perf(vortex): remove per-file and per-segment allocations on the scan path by @lukekim (opens in a new tab) in #11733 (opens in a new tab)
- fix(ci): use GraphQL API to check isLatest in spiced_docker workflow by @Jeadie (opens in a new tab) in #11735 (opens in a new tab)
- fix(release): use release notes heading as GitHub release title by @Jeadie (opens in a new tab) in #11744 (opens in a new tab)
- feat(chbench): headline run summary + adaptive slot-topology variants by @bjchambers (opens in a new tab) in #11734 (opens in a new tab)
- fix(ci): update e2e CLI tests for Windows-no-runtime and chat error wording by @Jeadie (opens in a new tab) in #11717 (opens in a new tab)
- build(rust): upgrade toolchain to 1.96.1 by @lukekim (opens in a new tab) in #11743 (opens in a new tab)
- fix(deps): enable reqwest "query" feature for isolated crate builds by @claudespice (opens in a new tab) in #11760 (opens in a new tab)
- build: define clippy lints in [workspace.lints], opt in every crate by @bjchambers (opens in a new tab) in #11676 (opens in a new tab)
- refactor(runtime): parameterize table-provider unwrapping by inner-fn set by @Jeadie (opens in a new tab) in #11759 (opens in a new tab)
- fix(cayenne): retain source deletion index in scan memos to close ABA hazard (fixes #11303) by @claudespice (opens in a new tab) in #11739 (opens in a new tab)
- fix(mysql): refuse binlog resume across source layout drift by @phillipleblanc (opens in a new tab) in #11761 (opens in a new tab)
- perf: avoid unnecessary allocations on search hot paths by @phillipleblanc (opens in a new tab) in #11767 (opens in a new tab)
- feat(spidapter): support cluster_name for private nodegroup targeting by @phillipleblanc (opens in a new tab) in #11740 (opens in a new tab)
- feat(cayenne): finalize datalake (cold) tier v1 UX, credentials, and e2e integration test by @sgrebnov (opens in a new tab) in #11731 (opens in a new tab)
- perf(vortex): push CAST(CASE ... END) filters into the Vortex scan by @lukekim (opens in a new tab) in #11729 (opens in a new tab)
- docs: lead README with real-time analytics-node + CDC messaging (Spice 2.0) by @lukekim (opens in a new tab) in #11774 (opens in a new tab)
- chore(chbench): extend scheduled HTAP runs to 15m by @lukekim (opens in a new tab) in #11773 (opens in a new tab)
- perf(cayenne): lazy NDV — compute on file spill, off the inline hot loop by @bjchambers (opens in a new tab) in #11741 (opens in a new tab)
- ci(rust): install 1.96.1 in workflows that pin the toolchain explicitly by @lukekim (opens in a new tab) in #11769 (opens in a new tab)
- perf(cdc): deferred parsing — move Postgres CDC decode + build off the shared pump by @bjchambers (opens in a new tab) in #11732 (opens in a new tab)
- docs: correct sort-kernel SIMD note (AVX2, not AVX-512) by @lukekim (opens in a new tab) in #11771 (opens in a new tab)
- fix(cayenne): roll cold-tier files at cayenne_cold_target_file_size_mb by @sgrebnov (opens in a new tab) in #11746 (opens in a new tab)
- docs(cayenne): move the Cayenne technical reference into the repo by @bjchambers (opens in a new tab) in #11775 (opens in a new tab)
- perf(cayenne): unify upsert PK-key hashing on prehashed XXH3-128 digests by @bjchambers (opens in a new tab) in #11736 (opens in a new tab)
- perf: avoid unnecessary allocations on query hot paths by @phillipleblanc (opens in a new tab) in #11768 (opens in a new tab)
- Extended schema inference for mysql by @krinart (opens in a new tab) in #11742 (opens in a new tab)
- chore(hash-index): add SBBF probe/insert baseline benchmark by @lukekim (opens in a new tab) in #11770 (opens in a new tab)
- feat(cayenne): incremental datalake promotion, per-file PK blooms, physical GC by @sgrebnov (opens in a new tab) in #11745 (opens in a new tab)
- test(cayenne): limit property-test concurrency by @phillipleblanc (opens in a new tab) in #11784 (opens in a new tab)
- perf(cdc): lock-free per-member ack slots + coalescing for shared Postgres replication by @bjchambers (opens in a new tab) in #11779 (opens in a new tab)
- perf(chbench): speed up MySQL and Postgres seed loading by @bjchambers (opens in a new tab) in #11782 (opens in a new tab)
- fix(ci): download MinIO client from public-data mirror by @phillipleblanc (opens in a new tab) in #11790 (opens in a new tab)
- ci: developer sign-off attestation gating the merge queue by @lukekim (opens in a new tab) in #11776 (opens in a new tab)
- fix(tests): synchronize chat expect prompts correctly by @phillipleblanc (opens in a new tab) in #11802 (opens in a new tab)
- perf(chbench): default adaptive pod to 4-slot grouping + deep prefetch by @bjchambers (opens in a new tab) in #11799 (opens in a new tab)
- refactor(cli): replace open crate with in-tree system-open by @phillipleblanc (opens in a new tab) in #11791 (opens in a new tab)
- refactor(runtime): drop direct rustls-pemfile dependency by @phillipleblanc (opens in a new tab) in #11792 (opens in a new tab)
- Cache ListingTable file statistics to avoid per-query footer re-parse by @phillipleblanc (opens in a new tab) in #11793 (opens in a new tab)
- ci: inherit sign-off across clean base merges by @phillipleblanc (opens in a new tab) in #11804 (opens in a new tab)
- perf(cayenne): hash PK once and skip OwnedRow clone on present path by @bjchambers (opens in a new tab) in #11805 (opens in a new tab)
- fix(postgres catalog): register partitioned parent, not child partitions by @bjchambers (opens in a new tab) in #11798 (opens in a new tab)
- fix(postgres catalog): quote foreign-key target identifiers by @bjchambers (opens in a new tab) in #11796 (opens in a new tab)
- refactor(cayenne): rename remaining cold_* params to cayenne_datalake_* by @sgrebnov (opens in a new tab) in #11795 (opens in a new tab)
- build: add release-profiling Cargo profile for CPU profiling by @bjchambers (opens in a new tab) in #11807 (opens in a new tab)
- fix(ci): make CH-benCH template restore robust to leftover replication slots by @sgrebnov (opens in a new tab) in #11811 (opens in a new tab)
- perf(cayenne): remove eager-NDV escape hatch, speed up per-value NDV hashing by @bjchambers (opens in a new tab) in #11806 (opens in a new tab)
- Auto-refresh the Attestation check after signoff by @bjchambers (opens in a new tab) in #11815 (opens in a new tab)
- refactor(duckdb): remove partitioned DuckDB accelerator modes by @lukekim (opens in a new tab) in #11808 (opens in a new tab)
- feat(testoperator): add option to skip the HTAP analytic gate by @bjchambers (opens in a new tab) in #11810 (opens in a new tab)
- fix: prevent executor S3 region poisoning before object-store bind by @phillipleblanc (opens in a new tab) in #11766 (opens in a new tab)
- perf(cayenne): reuse per-batch scratch allocations in KeyBasedDeletionFilterStream by @bjchambers (opens in a new tab) in #11817 (opens in a new tab)
- Update openapi.json by @app/github-actions (opens in a new tab) in #11816 (opens in a new tab)
- build(deps): bump the github-actions-dependencies group across 2 directories with 5 updates by @app/dependabot (opens in a new tab) in #11819 (opens in a new tab)
- fix(task_history): capture ExplainAnalyze metrics from the executed plan by @phillipleblanc (opens in a new tab) in #11794 (opens in a new tab)
- feat: generic spiced env-var passthrough for HTAP testoperator runs by @bjchambers (opens in a new tab) in #11824 (opens in a new tab)
- feat(cayenne): datalake tier hardening + row-capped PK-bloom-backed promotion by @sgrebnov (opens in a new tab) in #11812 (opens in a new tab)
- chore: release finalization for v2.2.0 by @Jeadie (opens in a new tab) in #11738 (opens in a new tab)
- feat(cayenne): add memory mode (mode: memory) — fully in-RAM accelerator by @lukekim (opens in a new tab) in #11720 (opens in a new tab)
- Fix secrets in
.github/workflows/integration_models.yml. by @Jeadie (opens in a new tab) in #11781 (opens in a new tab)
- feat(runtime): add
runtime.query.timeout parameter by @sgrebnov (opens in a new tab) in #11822 (opens in a new tab)
- feat(cloud-connect): align proto to canonical, fix enrollment ordering, add TLS e2e by @lukekim (opens in a new tab) in #11829 (opens in a new tab)
- docs(criteria): mark PostgreSQL Catalog Connector as Alpha by @bjchambers (opens in a new tab) in #11785 (opens in a new tab)
- test(cayenne): add regression tests for the mid-pass overwrite guard by @sgrebnov (opens in a new tab) in #11844 (opens in a new tab)
- perf(cayenne): light delta encoding + higher CDC coalescing defaults by @bjchambers (opens in a new tab) in #11826 (opens in a new tab)
- ci: run Cayenne doc PDF build only on trunk merges by @bjchambers (opens in a new tab) in #11860 (opens in a new tab)
- fix(cayenne): drain staged Stage-B publishes before cold promotion; add cold-tier fuzz coverage by @sgrebnov (opens in a new tab) in #11847 (opens in a new tab)
- feat(cayenne): atomic cross-partition append + delete/on-conflict atomicity by @lukekim (opens in a new tab) in #11803 (opens in a new tab)
- feat(cayenne): min/max maintained aggregates + N>1 CDC retract by @lukekim (opens in a new tab) in #11862 (opens in a new tab)
- perf(chbench): CSV-based seed loading for MySQL and Postgres by @bjchambers (opens in a new tab) in #11843 (opens in a new tab)
- fix(tests): re-enable
prop_concurrent_cold_sqlite cayenne cold-tier fuzz test by @sgrebnov (opens in a new tab) in #11871 (opens in a new tab)
- fix(deps): replace yanked spin releases by @phillipleblanc (opens in a new tab) in #11878 (opens in a new tab)
- fix(cayenne): correct stale mem_checkpoint_lock comment by @bjchambers (opens in a new tab) in #11872 (opens in a new tab)
- Add run links to
testoperator_dispatch.yml by @Jeadie (opens in a new tab) in #11747 (opens in a new tab)
- Cayenne serializable transactions: gated writes, per-key OCC, multi-table, FlightSQL, durable write-back by @phillipleblanc (opens in a new tab) in #11870 (opens in a new tab)
- fix(cayenne): partitioned datasets deadlock against the global encode budget and never become ready by @Jeadie (opens in a new tab) in #11825 (opens in a new tab)
- test(runtime): re-runnable turso file cleanup + bump turso to 0.7.0 by @lukekim (opens in a new tab) in #11783 (opens in a new tab)
- Use liteparse for PDF document parsing by @Jeadie (opens in a new tab) in #11522 (opens in a new tab)
- ci: add remote signoff workflow by @Jeadie (opens in a new tab) in #11864 (opens in a new tab)
- fix(cli): populate org in
spice cloud apps --output json (fixes #11041) by @claudespice (opens in a new tab) in #11867 (opens in a new tab)
- fix(embeddings): restore params broken by #10853 by @Jeadie (opens in a new tab) in #11788 (opens in a new tab)
- Move cargo advisory checks to scheduled workflow by @Jeadie (opens in a new tab) in #11879 (opens in a new tab)
- perf(cayenne): bound cold-promotion Z-order sort into streaming byte-capped runs by @sgrebnov (opens in a new tab) in #11890 (opens in a new tab)
- fix(cayenne): write-back transaction atomicity — stage (not publish) and read mem-tier rows by @phillipleblanc (opens in a new tab) in #11889 (opens in a new tab)
- fix(runtime-table-partition): restore sound modulo inequality partition pruning by @Jeadie (opens in a new tab) in #11891 (opens in a new tab)
- Replace dotenvy with in-repo dotenv crate by @phillipleblanc (opens in a new tab) in #11894 (opens in a new tab)
- Remove unnecessary allocations from results-cache and hot conversion paths by @phillipleblanc (opens in a new tab) in #11895 (opens in a new tab)
- Increase ready_wait timeout for chbench sf1000 cold-tier configs by @sgrebnov (opens in a new tab) in #11900 (opens in a new tab)
- fix(mysql): retry binlog checkpoint upsert on transient accelerator write lock by @krinart (opens in a new tab) in #11876 (opens in a new tab)
- fix(cayenne): gate freshness mem-tier shrink on apply backlog by @lukekim (opens in a new tab) in #11893 (opens in a new tab)
- fix(postgres catalog): honor unsupported_type_action for catalog-discovered tables by @bjchambers (opens in a new tab) in #11875 (opens in a new tab)
- fix(postgres): make TPC-H/TPC-DS benchmark CI actually run at SF1/SF10/SF100 by @bjchambers (opens in a new tab) in #11883 (opens in a new tab)
- feat(search): writethrough compound
SearchIndex/VectorIndex with optional fallback by @Jeadie (opens in a new tab) in #11892 (opens in a new tab)
- Revert "perf(cayenne): light delta encoding + higher CDC coalescing defaults" by @bjchambers (opens in a new tab) in #11910 (opens in a new tab)
- perf(vss): SIMD-accelerate cosine_distance via simsimd by @Jeadie (opens in a new tab) in #11748 (opens in a new tab)
- Add
run-name to signoff.yml by @Jeadie (opens in a new tab) in #11912 (opens in a new tab)
- fix(cayenne): serialize cold-tier mem-tier checkpoint by @sgrebnov (opens in a new tab) in #11907 (opens in a new tab)
- fix(postgres catalog): discover materialized views and foreign tables by @bjchambers (opens in a new tab) in #11874 (opens in a new tab)
- test(chbench): stronger content fingerprint + MySQL sidecar template caching by @krinart (opens in a new tab) in #11901 (opens in a new tab)
- test(chbench): align money columns to canonical DECIMAL schema (CMU BenchBase) by @sgrebnov (opens in a new tab) in #11921 (opens in a new tab)
- fix(cayenne): close per-key OCC missed-conflict holes and fused-txn IVM staleness by @lukekim (opens in a new tab) in #11916 (opens in a new tab)
- ci(attestation): fast-track pure reverts past developer sign-off by @bjchambers (opens in a new tab) in #11913 (opens in a new tab)
- fix(cloud-connect): accept the portal's 5-char adoption-code segments by @phillipleblanc (opens in a new tab) in #11926 (opens in a new tab)
- docs(layering): codify crate tiers + workspace layering guard by @bjchambers (opens in a new tab) in #11919 (opens in a new tab)
- refactor(cayenne): datalake tiering UX — param rename + tracing by @sgrebnov (opens in a new tab) in #11920 (opens in a new tab)
- feat(params): typed component params via
#[derive(TypedParams)] — embeddings pilot by @Jeadie (opens in a new tab) in #11809 (opens in a new tab)
- Fix SQlite
round type error. by @Jeadie (opens in a new tab) in #11927 (opens in a new tab)
- fix(signoff): let remote sign-off refresh the Attestation check in CI by @bjchambers (opens in a new tab) in #11929 (opens in a new tab)
- feat(testoperator): print rows around CH-benCH analytical-gate mismatches by @bjchambers (opens in a new tab) in #11923 (opens in a new tab)
- fix(postgres catalog): don't abort the whole catalog on one schema's discovery failure by @bjchambers (opens in a new tab) in #11873 (opens in a new tab)
- ci(signoff): target-lint changed crates before full local/remote gate by @lukekim (opens in a new tab) in #11909 (opens in a new tab)
- feat(runtime)!: always-on schema inference; remove schema_inference config by @lukekim (opens in a new tab) in #11880 (opens in a new tab)
- refactor(layering): extract ClickHouse into connector-clickhouse; add restricted_deps guard by @bjchambers (opens in a new tab) in #11931 (opens in a new tab)
- perf: remove unnecessary allocations on hot query, search, and metrics paths by @phillipleblanc (opens in a new tab) in #11918 (opens in a new tab)
- Release notes for v2.1.1 by @Jeadie (opens in a new tab) in #11906 (opens in a new tab)
- refactor(layering): prepare DynamoDB for extraction from runtime by @bjchambers (opens in a new tab) in #11935 (opens in a new tab)
- Coalesce Null primary keys in RRF. by @Jeadie (opens in a new tab) in #11519 (opens in a new tab)
- ci(e2e): strip ANSI before duckdb_append graceful-shutdown log whitelist by @phillipleblanc (opens in a new tab) in #11937 (opens in a new tab)
- feat(catalog): PostgreSQL catalog-level CDC acceleration (changes mode) by @bjchambers (opens in a new tab) in #11897 (opens in a new tab)
- chbench(mysql): parallel analytical gate, decimal-comparison fix, and reseed/CI hardening by @krinart (opens in a new tab) in #11946 (opens in a new tab)
- fix: array_any_value panic when output is hash-repartitioned (empty list elements) by @bjchambers (opens in a new tab) in #11952 (opens in a new tab)
- feat(layering): checkpoint sidecar as per-engine crates + DI the dynamodb connector by @bjchambers (opens in a new tab) in #11938 (opens in a new tab)
- chore(cluster): pin Ballista to upstream 54 merge tip by @phillipleblanc (opens in a new tab) in #11941 (opens in a new tab)
- feat(vortex): upgrade fork pins to Vortex 0.79.0 by @lukekim (opens in a new tab) in #11950 (opens in a new tab)
- chbench(htap): run mysql configs at the shared 9250 rate; 2x converge wait by @sgrebnov (opens in a new tab) in #11956 (opens in a new tab)
- fix(testoperator): HTAP drain gate false-fails on stale probe observations — final snapshot decides convergence (fixes #11953) by @claudespice (opens in a new tab) in #11966 (opens in a new tab)
- feat(catalog): replica-identity-aware eligibility for PostgreSQL catalog CDC by @bjchambers (opens in a new tab) in #11951 (opens in a new tab)
- refactor(layering): extract DynamoDB into connector-dynamodb by @bjchambers (opens in a new tab) in #11960 (opens in a new tab)
- Add
MemoryVectorIndex: in-memory external-store VectorIndex with brute-force exact k-NN by @Jeadie (opens in a new tab) in #11908 (opens in a new tab)
- ci(signoff): prefer lab SSH for remote sign-off; skip Rust when no .rs changes by @lukekim (opens in a new tab) in #11977 (opens in a new tab)
- Reapply #11826: light delta encoding + CDC coalescing (SF1000 convergence lever) — gated on #11943 + SF1000 fingerprint run by @lukekim (opens in a new tab) in #11944 (opens in a new tab)
- docs: align component statuses with signed release criteria by @lukekim (opens in a new tab) in #11970 (opens in a new tab)
- fix: Spidapter flight auth passthrough by @peasee (opens in a new tab) in #11976 (opens in a new tab)
- Unified CDC config by @krinart (opens in a new tab) in #11777 (opens in a new tab)
- feat(cdc): Debezium plugin push ingest to Spice without Kafka by @lukekim (opens in a new tab) in #11955 (opens in a new tab)
- refactor(connectors): unify registration on the linkme slice; restore schema coverage by @bjchambers (opens in a new tab) in #11972 (opens in a new tab)
- GTID-based MySQL CDC by @krinart (opens in a new tab) in #11813 (opens in a new tab)
- test(mysql): ignore mysql_binlog_replication_end_to_end_cayenne by @sgrebnov (opens in a new tab) in #11986 (opens in a new tab)
- fix(cayenne): support Decimal128 in maintained SUM/AVG aggregates (fixes #11933) by @claudespice (opens in a new tab) in #11979 (opens in a new tab)
- feat(params): typed params for VectorStore and FtsStore engines by @Jeadie (opens in a new tab) in #11954 (opens in a new tab)
- chore(layering): remove orphaned dead code from connector extractions by @bjchambers (opens in a new tab) in #11988 (opens in a new tab)
- feat(cayenne): default-on adaptive cold layout from observed filters (F4) by @lukekim (opens in a new tab) in #11973 (opens in a new tab)
- fix: Fairly allocate partitions from scheduler assignment cycle only by @peasee (opens in a new tab) in #11853 (opens in a new tab)
- fix(cli): avoid escaped ANSI version notification by @ewgenius (opens in a new tab) in #11996 (opens in a new tab)
- MySQL Shared binlog connection by @krinart (opens in a new tab) in #11814 (opens in a new tab)
- feat(catalog): fail-loud + metrics + by-kind reporting for PostgreSQL catalog CDC (#11850) by @bjchambers (opens in a new tab) in #11983 (opens in a new tab)
- fix(cayenne): P1 audit — subset compact, SMJ 2.5× HT, mem-tier pool account by @lukekim (opens in a new tab) in #11991 (opens in a new tab)
- Add OAuth2 client-credentials grant and configurable auth header to HTTP connector by @krinart (opens in a new tab) in #11981 (opens in a new tab)
- fix(telemetry): validate runtime.telemetry.metric_prefix against OTel name syntax by @ewgenius (opens in a new tab) in #12002 (opens in a new tab)
- fix(cayenne): purge CDC mem-tier on delete-all/TRUNCATE by @sgrebnov (opens in a new tab) in #12009 (opens in a new tab)
- Update signoff.yml. by @Jeadie (opens in a new tab) in #11998 (opens in a new tab)
- feat(dev): add
scripts/signoff mine — attestation status across your open PRs by @Jeadie (opens in a new tab) in #11978 (opens in a new tab)
- refactor(layering): extract MongoDB provider into connector-mongodb by @bjchambers (opens in a new tab) in #11982 (opens in a new tab)
- perf: remove three unnecessary allocations on the query hot path by @phillipleblanc (opens in a new tab) in #12029 (opens in a new tab)
- refactor(layering): evacuate cosmosdb/graphql/github/sharepoint providers into their connector crates by @bjchambers (opens in a new tab) in #12024 (opens in a new tab)
- fix(mysql-cdc): detect source reset on GTID resume by @sgrebnov (opens in a new tab) in #12023 (opens in a new tab)
- fix(smb): exclude final SESSION_SETUP response from preauth integrity hash (fixes #11148) by @claudespice (opens in a new tab) in #12003 (opens in a new tab)
- fix(postgres): validate pg_replication_slot names before CDC refresh by @ewgenius (opens in a new tab) in #12001 (opens in a new tab)
- fix(postgres): honor pg_connection_string for CDC (closes #11994) by @ewgenius (opens in a new tab) in #12000 (opens in a new tab)
- feat: Support OTLP Histogram ingest, unix nanos time by @peasee (opens in a new tab) in #11992 (opens in a new tab)
- feat(search): write-through warm + fallback compound index for FTS (#11886) by @Jeadie (opens in a new tab) in #11971 (opens in a new tab)
- docs: PR-description and code-comment conventions by @bjchambers (opens in a new tab) in #12032 (opens in a new tab)
- refactor(postgres cdc): consolidate every dataset onto the shared pump by @bjchambers (opens in a new tab) in #12028 (opens in a new tab)
- feat(cloud-connect): Standalone instance adoption connection by @peasee (opens in a new tab) in #11980 (opens in a new tab)
- fix(cdc): don't force the durable path on zero-row readiness heartbeats (fixes #12007) by @claudespice (opens in a new tab) in #12030 (opens in a new tab)
- Upgrade DataFusion to 54.1.0 by @krinart (opens in a new tab) in #11974 (opens in a new tab)
- perf(github): parallelize serial fetches (commits + workflow logs) by @lukekim (opens in a new tab) in #12017 (opens in a new tab)
- refactor(layering): evacuate odbc/scylladb/imap/git providers into their connector crates by @bjchambers (opens in a new tab) in #11993 (opens in a new tab)
- refactor(layering): carve runtime-component out of runtime, break the ArcRuntime cycle by @bjchambers (opens in a new tab) in #12031 (opens in a new tab)
- feat(mssql): enable tiberius integrated-auth-gssapi for Kerberos integrated auth on Unix by @v1gnesh (opens in a new tab) in #11386 (opens in a new tab)
- build(deps): bump the aws-sdk group across 1 directory with 5 updates by @app/dependabot (opens in a new tab) in #11821 (opens in a new tab)
- fix(cayenne): clear a committed CDC upsert's staging WAL at finalize (#12027) by @bjchambers (opens in a new tab) in #12034 (opens in a new tab)
- feat(catalog): deterministic instance-independent replication slot + fail-loud + restart recovery (#11850) by @bjchambers (opens in a new tab) in #12026 (opens in a new tab)
- Auto-cap DuckDB accelerator memory to prevent startup over-commit by @lukekim (opens in a new tab) in #11985 (opens in a new tab)
- perf(refresh): speed up dataset refresh at startup by @lukekim (opens in a new tab) in #12015 (opens in a new tab)
- fix(cayenne): don't create stray
file: directory in memory mode (fixes #11922) by @claudespice (opens in a new tab) in #11940 (opens in a new tab)
- fix(aws): accept aws_session_token for temporary credentials (fixes #10932) by @claudespice (opens in a new tab) in #12041 (opens in a new tab)
- fix(mysql): verify an adopted layout against the event's own column types (fixes #11764) by @claudespice (opens in a new tab) in #12048 (opens in a new tab)
- fix(mysql): take the binlog rotate target from the ROTATE event, not its header offset (fixes #12042) by @claudespice (opens in a new tab) in #12044 (opens in a new tab)
- fix(search): check dataset readiness before embedding the query (fixes #10956) by @claudespice (opens in a new tab) in #12043 (opens in a new tab)
- fix(databricks): pin the authentication mode with databricks_auth_mode so an auto-loaded client secret can't switch U2M to M2M (fixes #11508) by @claudespice (opens in a new tab) in #12040 (opens in a new tab)
- fix(imap): narrow scans with IMAP SEARCH instead of refetching the mailbox (fixes #11548) by @claudespice (opens in a new tab) in #12039 (opens in a new tab)
- fix(cayenne): rank inference-derived sort columns below observed filter columns by @lukekim (opens in a new tab) in #12049 (opens in a new tab)
- perf(cayenne): warm-subset compaction + mem-tier memory_limit honesty by @lukekim (opens in a new tab) in #12035 (opens in a new tab)
- fix(cayenne): purge the mem-tier on delete-all for a table without a primary key (fixes #12072) by @claudespice (opens in a new tab) in #12073 (opens in a new tab)
- fix(accelerator): let an index declare a finalize failure fatal so a stale index can't report a successful refresh (fixes #12038) by @claudespice (opens in a new tab) in #12050 (opens in a new tab)
- fix(http): restore a join's embedded projection in HTTP subquery pushdown (fixes #11009) by @claudespice (opens in a new tab) in #12054 (opens in a new tab)
- fix(e2e): report a REPL that exits mid-script instead of passing the step (fixes #12057) by @claudespice (opens in a new tab) in #12059 (opens in a new tab)
- fix(imap): fetch the raw message only when a scan reads content (fixes #12045) by @claudespice (opens in a new tab) in #12060 (opens in a new tab)
- chore: Update Turso crate to 0.7.1 by @claudespice (opens in a new tab) in #12062 (opens in a new tab)
- feat(chbench): in-memory _bench_ts watermarks for the MySQL HTAP staleness probe by @sgrebnov (opens in a new tab) in #12055 (opens in a new tab)
- test(chbench): default MySQL adaptive spicepods to one shared binlog dump by @sgrebnov (opens in a new tab) in #12076 (opens in a new tab)
- feat(search): warm in-memory writethrough/fallback index for
.vectors datasets and views by @Jeadie (opens in a new tab) in #11914 (opens in a new tab)
- fix(search): expunge superseded documents from full-text BM25 statistics (fixes #12053) by @claudespice (opens in a new tab) in #12056 (opens in a new tab)
- fix(write-back): gate durable write-back on a safe source delivery primitive (fixes #11915) by @claudespice (opens in a new tab) in #12051 (opens in a new tab)
- fix(cayenne): keep protected snapshots a position-delete rewrite never folded in (fixes #11477) by @claudespice (opens in a new tab) in #12052 (opens in a new tab)
- ci(signoff): fast-track Attestation for Dependabot and non-Rust PRs, and cut the local gate by @lukekim (opens in a new tab) in #12081 (opens in a new tab)
- fix(search): reach a compound's inner full-text tier when a change stream attaches (fixes #12061) by @claudespice (opens in a new tab) in #12063 (opens in a new tab)
- fix(accelerator): report PK equality pushdown Inexact so a point lookup can't return the whole table (fixes #12070) by @claudespice (opens in a new tab) in #12071 (opens in a new tab)
- fix(github): paginate issues and pull_requests on an immutable sort key so a row touched mid-scan isn't dropped (fixes #12067) by @claudespice (opens in a new tab) in #12069 (opens in a new tab)
- fix(otel): scope reserved metric column names to the data-point shape (fixes #12064) by @claudespice (opens in a new tab) in #12065 (opens in a new tab)
- fix(cayenne): sample the subset compaction append fence before the listing it guards (fixes #12074) by @claudespice (opens in a new tab) in #12075 (opens in a new tab)
- fix(search): drop a search hit whose row is not in the base table (fixes #12089) by @claudespice (opens in a new tab) in #12094 (opens in a new tab)
- feat(datasets): mark non-accelerated datasets Error when their source is unavailable by @krinart (opens in a new tab) in #12079 (opens in a new tab)
- fix(models): restore spice.ai/spiceai as a model source by @lukekim (opens in a new tab) in #12092 (opens in a new tab)
- fix(cayenne): bound the cold PK-index rebuild; build shard views in one pass by @sgrebnov (opens in a new tab) in #12078 (opens in a new tab)
- fix: Update Search integration test snapshots by @Jeadie (opens in a new tab) in #12077 (opens in a new tab)
- feat(catalog): view warnings, docs-linked messages, and clearer startup summary for PostgreSQL catalog CDC (#11850) by @bjchambers (opens in a new tab) in #12022 (opens in a new tab)
- fix(postgres): log the cumulative delivery wait in the sink-stall warning by @sgrebnov (opens in a new tab) in #12093 (opens in a new tab)
- refactor(cloud-connect): single-source the sealed-secret wire crypto in a shared crate by @peasee (opens in a new tab) in #12124 (opens in a new tab)
- build(deps): bump quinn-proto from 0.11.14 to 0.11.16 by @app/dependabot (opens in a new tab) in #12037 (opens in a new tab)
- perf(cayenne): demand-driven scan-view cache with access-based freshness (alternative to #11948) by @bjchambers (opens in a new tab) in #12005 (opens in a new tab)
- build: exclude libnfs from the nextest workspace run by @phillipleblanc (opens in a new tab) in #12131 (opens in a new tab)
- build(deps): bump the aws-sdk group across 1 directory with 3 updates by @app/dependabot (opens in a new tab) in #12068 (opens in a new tab)
- fix(search): keep CDC changes streams working when embeddings wrap a CDC source by @Jeadie (opens in a new tab) in #12086 (opens in a new tab)
- fix(cli): report a truncated release download as a failed download (fixes #12120) by @claudespice (opens in a new tab) in #12121 (opens in a new tab)
- fix(postgres): honor inline PEM pg_sslrootcert on the replication path by @phillipleblanc (opens in a new tab) in #12128 (opens in a new tab)
- refactor(layering): extract RuntimeStatus into a runtime-status crate by @bjchambers (opens in a new tab) in #12115 (opens in a new tab)
- fix(libnfs): model AUTH as an opaque type so its layout assertion holds by @phillipleblanc (opens in a new tab) in #12132 (opens in a new tab)
- feat(duckdb):
on_full_refresh: replace_file — full refresh into a new database file, atomically replaced by @lukekim (opens in a new tab) in #12135 (opens in a new tab)
- Add v2.1.2 release notes by @sgrebnov (opens in a new tab) in #12146 (opens in a new tab)
- feat(duckdb): 'on_full_refresh: checkpoint_file' to bound acceleration file growth by @sgrebnov (opens in a new tab) in #12139 (opens in a new tab)
- fix(lint): remove unused DuckDBTableWriter import in duckdb accelerator tests by @sgrebnov (opens in a new tab) in #12158 (opens in a new tab)
- fix(duckdb): drop a file-replacement test assertion that can never hold by @bjchambers (opens in a new tab) in #12178 (opens in a new tab)
- fix(cayenne): Remove redundant
EmptyExec within UnionExec used by CayenneTableProvider::scan by @Jeadie (opens in a new tab) in #12126 (opens in a new tab)
- build(deps): bump async-openai for aggregated rate-limit logging by @phillipleblanc (opens in a new tab) in #12149 (opens in a new tab)
- perf(mysql): fast row-image decoder for CDC change builds by @sgrebnov (opens in a new tab) in #12122 (opens in a new tab)
- feat(catalog): pre-flight replication-slot-capacity check for PostgreSQL catalog CDC (#11850) by @bjchambers (opens in a new tab) in #12114 (opens in a new tab)
- fix(oracle): map DATE to a timestamp so the time-of-day is not silently truncated (fixes #12096) by @claudespice (opens in a new tab) in #12097 (opens in a new tab)
- fix(search): skip the warm vector index when nothing hydrates it (fixes #12101) by @claudespice (opens in a new tab) in #12103 (opens in a new tab)
- refactor(layering): extract the DataAccelerator contract into data-accelerator-api by @bjchambers (opens in a new tab) in #12099 (opens in a new tab)
- fix(cli): surface the registry error behind a failed
spice add instead of blaming the archive (fixes #12116) by @claudespice (opens in a new tab) in #12119 (opens in a new tab)
- fix(ci): gate Rust checks on the lint config the gate itself reads (fixes #12111) by @claudespice (opens in a new tab) in #12112 (opens in a new tab)
- fix: Ensure executors report table statistics for distributed plan ordering by @peasee (opens in a new tab) in #11854 (opens in a new tab)
- fix:
EMBED_UDF_NAME without models feature by @krinart (opens in a new tab) in #12136 (opens in a new tab)
- fix(openai):
openai_responses_tools: web_search uses web_search, not web_search_preview by @Jeadie (opens in a new tab) in #12142 (opens in a new tab)
- fix(ci): cancel workflow runs left behind by superseded merge-queue batches (fixes #12170) by @claudespice (opens in a new tab) in #12177 (opens in a new tab)
- fix(runtime): return from a readiness wait when the runtime shuts down (fixes #12125) by @claudespice (opens in a new tab) in #12165 (opens in a new tab)
- perf(postgres): coalesce shared-slot CDC envelopes so a slow sink stops throttling the walsender by @bjchambers (opens in a new tab) in #12147 (opens in a new tab)
- fix(ci): make cargo_deny_advisories.yml parseable so the Rust advisory scan can run (fixes #12181) by @claudespice (opens in a new tab) in #12182 (opens in a new tab)
- fix(cluster): run GetTaskHistory under read-only SQL validation by @lukekim (opens in a new tab) in #12174 (opens in a new tab)
- fix(duckdb): count accelerated views in the coordinated memory budget (fixes #12123) by @claudespice (opens in a new tab) in #12161 (opens in a new tab)
- fix(ci): run the PR hygiene check on a GitHub-hosted runner by @claudespice (opens in a new tab) in #12163 (opens in a new tab)
- fix(cayenne): warm PK existence caches at first write; bound keyset memory during bulk load by @sgrebnov (opens in a new tab) in #12133 (opens in a new tab)
- ci: remote sign-off dispatches GitHub Actions only, never SSH to lab hosts by @lukekim (opens in a new tab) in #12205 (opens in a new tab)
- Standalone instances:
spice connect enroll-only split + connect surface by @krinart (opens in a new tab) in #12143 (opens in a new tab)
- fix(search): Fix ordering to correct
NDCG@k by @Jeadie (opens in a new tab) in #12191 (opens in a new tab)
- refactor(layering): carry component configuration into connectors and extract data-connector-api by @bjchambers (opens in a new tab) in #12157 (opens in a new tab)
- fix(logging): mute the candle embedding backend's GeLU notice below -vv by @phillipleblanc (opens in a new tab) in #12194 (opens in a new tab)
- test: redact connection context in federated explain snapshots by @bjchambers (opens in a new tab) in #11800 (opens in a new tab)
- Enable deletes for Index, SearchIndex, and VectorIndex by @Jeadie (opens in a new tab) in #11961 (opens in a new tab)
- feat(testoperator): trace probe latency breaches and percentiles under HTAP load by @sgrebnov (opens in a new tab) in #12209 (opens in a new tab)
- Add v2.1.1 and 2.1.2 as supported in SECURITY.md by @sgrebnov (opens in a new tab) in #12190 (opens in a new tab)
- fix(ci): seed the TPC-H Postgres benches from the fleet's dataset and schedule the catalog schema tests by @bjchambers (opens in a new tab) in #12214 (opens in a new tab)
- fix(cluster): restrict ExpandSecret to spicepod-referenced keys by @lukekim (opens in a new tab) in #12156 (opens in a new tab)
- test: redact endpoint-URL compute contexts in federated explain snapshots by @bjchambers (opens in a new tab) in #12215 (opens in a new tab)
- fix(testoperator): a fully-censored table floors worst-P99 at the discard cap by @lukekim (opens in a new tab) in #12196 (opens in a new tab)
- ci(e2e): tolerate any garbage type token in the duckdb_append parquet-rename race by @bjchambers (opens in a new tab) in #12207 (opens in a new tab)
- refactor(cloud-connect): update the proto contract for evolvability and versioning by @peasee (opens in a new tab) in #12153 (opens in a new tab)
- chore(cloud-connect): use port 443 for gateway addresses in the doc example and test fixtures by @phillipleblanc (opens in a new tab) in #12252 (opens in a new tab)
- fix(ci): authenticate the management API integration suite with secrets that exist (fixes #12184) by @claudespice (opens in a new tab) in #12185 (opens in a new tab)
- feat(search): add Recall@k, MRR@k, and Precision@k retrieval metrics by @Jeadie (opens in a new tab) in #12193 (opens in a new tab)
- fix(search): enable stemming by default for full-text search by @Jeadie (opens in a new tab) in #12220 (opens in a new tab)
- fix: Report query metrics when task history is disabled by @sgrebnov (opens in a new tab) in #12227 (opens in a new tab)
- fix(runtime): count accelerated views when gating the Cayenne compaction pool (fixes #12164) by @claudespice (opens in a new tab) in #12171 (opens in a new tab)
- fix(secrets): snapshot the store registry instead of holding its lock across awaits (fixes #12127) by @claudespice (opens in a new tab) in #12166 (opens in a new tab)
- fix(search): address Elasticsearch deletes by document _id (fixes #12267) by @claudespice (opens in a new tab) in #12273 (opens in a new tab)
- fix(postgres): deprecate pg_replication_temporary_slot, which could never work (fixes #12213) by @claudespice (opens in a new tab) in #12265 (opens in a new tab)
- fix(cayenne): always materialize a snapshot directory the catalog may reference (fixes #12208) by @claudespice (opens in a new tab) in #12262 (opens in a new tab)
- fix(duckdb): size the connection pool for accelerated views too (fixes #12160) by @claudespice (opens in a new tab) in #12169 (opens in a new tab)
- fix(ci): link brew formulas that are installed but unlinked in setup-cc by @claudespice (opens in a new tab) in #12286 (opens in a new tab)
- fix(runtime): size memory budgets from the process's own cgroup limit by @lukekim (opens in a new tab) in #12263 (opens in a new tab)
- Harden dataset availability checks against idle connection resets by @krinart (opens in a new tab) in #12180 (opens in a new tab)
- test(mysql): harden binlog CDC with dump-reconnect and full type-matrix coverage by @sgrebnov (opens in a new tab) in #12264 (opens in a new tab)
- fix: send enc_pubkey_pem on /renew for standalone runtime by @phillipleblanc (opens in a new tab) in #12312 (opens in a new tab)
- Connection-scale client modes for testoperator throughput and load tests by @lukekim (opens in a new tab) in #12280 (opens in a new tab)
- fix(search): remove all chunk documents when a chunked Elasticsearch index deletes a row (fixes #12088) by @claudespice (opens in a new tab) in #12268 (opens in a new tab)
- fix(duckdb): run spice_sys DuckDB sidecar writes on the blocking pool (fixes #12175) by @claudespice (opens in a new tab) in #12204 (opens in a new tab)
- fix(cayenne): the write-concurrency raise must respect the memory brake by @lukekim (opens in a new tab) in #12317 (opens in a new tab)
- feat(runtime): expose the memory numbers that explain an OOM as gauges by @lukekim (opens in a new tab) in #12195 (opens in a new tab)
- fix(flightsql): mark stamped statistics inexact when a LIMIT is pushed to the remote scan (fixes #12292) by @claudespice (opens in a new tab) in #12293 (opens in a new tab)
- fix(deps): bump wasmtime to 47.0.3 to clear RUSTSEC-2026-0222 (fixes #12295) by @claudespice (opens in a new tab) in #12298 (opens in a new tab)
- fix(telemetry): read the cgroup CPU quota along the whole cgroup path (fixes #12299) by @claudespice (opens in a new tab) in #12300 (opens in a new tab)
- refactor(layering): move the DataFusion helpers below runtime and derive the federation deny-list from a function registry by @bjchambers (opens in a new tab) in #12210 (opens in a new tab)
- fix(search): reject a persisted full-text index whose schema no longer matches the configuration (fixes #12274) by @claudespice (opens in a new tab) in #12275 (opens in a new tab)
- fix(spiced): keep dependency logging and chat progress alive when task history is off (fixes #12279) by @claudespice (opens in a new tab) in #12281 (opens in a new tab)
- fix(runtime): count a mid-stream response failure as a failure in the HTTP metrics (fixes #12284) by @claudespice (opens in a new tab) in #12291 (opens in a new tab)
- fix(cluster): mark a coordinator leaf scan's cached executor statistics inexact (fixes #12303) by @claudespice (opens in a new tab) in #12304 (opens in a new tab)
- fix(runtime): report a memory-pool refusal as ResourcesExhausted and answer it with 503 (fixes #12282) by @claudespice (opens in a new tab) in #12289 (opens in a new tab)
- fix(cayenne): enforce the sharded PK keyset byte budget; correct per-entry accounting by @lukekim (opens in a new tab) in #12192 (opens in a new tab)
- fix(runtime): carve the Cayenne compaction memory pool only when a dataset can compact into it (fixes #12320) by @claudespice (opens in a new tab) in #12326 (opens in a new tab)
- feat(spiced): report fatal signals before exit by @sgrebnov (opens in a new tab) in #12334 (opens in a new tab)
- bug: Filters on
_match fail during planning by @Jeadie (opens in a new tab) in #12247 (opens in a new tab)
- bug: S3 metadata-filter conversion silently drops unconvertible AND/OR operands by @Jeadie (opens in a new tab) in #12248 (opens in a new tab)
- fix(ci): reject a failed sign-off on the head commit (fixes #12357) by @claudespice (opens in a new tab) in #12362 (opens in a new tab)
- ci: let signoff.yml sign off fork PRs by @Jeadie (opens in a new tab) in #12025 (opens in a new tab)
- fix(search): resolve an append stream through a vector scan (fixes #12313) by @claudespice (opens in a new tab) in #12314 (opens in a new tab)
- docs: Spice v2.1.3 release notes by @sgrebnov (opens in a new tab) in #12378 (opens in a new tab)
- bug:
MemoryVectorIndex leaves external-store entries on delete. by @Jeadie (opens in a new tab) in #12246 (opens in a new tab)
- fix(cluster): keep the executor's cluster-service channel alive while idle (fixes #12301) by @claudespice (opens in a new tab) in #12302 (opens in a new tab)
- fix(https): reject OAuth2 params on structured HTTP file datasets (fixes #12315) by @claudespice (opens in a new tab) in #12321 (opens in a new tab)
- fix(scheduler): drive the interval-timing tests on a virtual clock (fixes #12323) by @claudespice (opens in a new tab) in #12329 (opens in a new tab)
- fix(ci): do not report a shutdown-cancelled sidecar task as a failure (fixes #12322) by @claudespice (opens in a new tab) in #12331 (opens in a new tab)
- fix(logging): let log colour follow the output sink (fixes #12327) by @claudespice (opens in a new tab) in #12335 (opens in a new tab)
- fix(cayenne): report the auto-tuned config once per resolution (fixes #12330) by @claudespice (opens in a new tab) in #12341 (opens in a new tab)
- chore: Update Turso crate to 0.7.2 by @claudespice (opens in a new tab) in #12344 (opens in a new tab)
- fix(runtime): stop retrying a dataset configuration failure that no retry can clear (fixes #12339) by @claudespice (opens in a new tab) in #12345 (opens in a new tab)
- build(deps): bump the github-actions-dependencies group across 3 directories with 9 updates by @app/dependabot (opens in a new tab) in #12359 (opens in a new tab)
- feat(llms): GLM 5.2 across 3+ nodes, context_length + paged_attention params, MXFP4 for DeepSeek-V4 by @lukekim (opens in a new tab) in #11990 (opens in a new tab)
- feat(runtime): size every CPU-derived pool from the CPU entitlement by @bjchambers (opens in a new tab) in #12276 (opens in a new tab)
- chore(ci): bump the spiceio setup action to v0.5.9 by @lukekim (opens in a new tab) in #12391 (opens in a new tab)
- feat(testoperator): serve /health and /v1/ready for the HTAP run by @lukekim (opens in a new tab) in #12373 (opens in a new tab)
- feat(catalog): durable storage modes for PostgreSQL catalog CDC, and let the catalog own its accelerated tables by @bjchambers (opens in a new tab) in #12222 (opens in a new tab)
- fix(runtime): correctly classify a memory-pool refusal as ResourcesExhausted (fixes #12380) by @sgrebnov (opens in a new tab) in #12382 (opens in a new tab)
- fix(ci): budget the sign-off run below the pool's job wall (fixes #12340) by @claudespice (opens in a new tab) in #12343 (opens in a new tab)
- fix(bench): install make before the seeded-database check; surface catalog error causes by @bjchambers (opens in a new tab) in #12372 (opens in a new tab)
- Clean up SQLite sidecar files in cold bloom catalog test by @sgrebnov (opens in a new tab) in #12404 (opens in a new tab)
- fix(ci): name an incoherent Cargo.lock before every cargo job fails on it (fixes #12375) by @grokspice (opens in a new tab) in #12423 (opens in a new tab)
- test(search): exercise the S3 Vectors warm-tier fallback path by @Jeadie (opens in a new tab) in #12197 (opens in a new tab)
- fix(ci): stop the spiced child E2E cleanup was leaking, scoped to this runner (fixes #12058) by @grokspice (opens in a new tab) in #12431 (opens in a new tab)
- perf(cayenne): give refresh_mode full its own write profile by @lukekim (opens in a new tab) in #12338 (opens in a new tab)
- fix(ci): skip the Attestation refresh when the sign-off SHA is no longer the PR head (fixes #12360) by @grokspice (opens in a new tab) in #12433 (opens in a new tab)
- fix(monitoring): correct p99 queries in the Datadog dashboard by @sgrebnov (opens in a new tab) in #12444 (opens in a new tab)
- fix(ci): tell an out-of-disk sign-off apart from a failing branch (fixes #12412) by @grokspice (opens in a new tab) in #12426 (opens in a new tab)
- feat(search): warm in-memory tier for chunked Elasticsearch vector columns by @Jeadie (opens in a new tab) in #12082 (opens in a new tab)
- Update spicepod.schema.json by @app/github-actions (opens in a new tab) in #12451 (opens in a new tab)
- fix(search): preserve field names with capitals and '.' by @Jeadie (opens in a new tab) in #12389 (opens in a new tab)
- fix(ci): size the cayenne property-test timeout ceiling to its measured runtime (fixes #12336) by @grokspice (opens in a new tab) in #12438 (opens in a new tab)
- fix(models): pass the pinned revision to a HuggingFace embedding model (fixes #12430) by @grokspice (opens in a new tab) in #12446 (opens in a new tab)
- fix(ci): make the out-of-disk sign-off verdict survive being out of disk (fixes #12427) by @grokspice (opens in a new tab) in #12461 (opens in a new tab)
- fix(ci): stop Enforce Pulls with Spice racing itself, and let a Dependabot PR pass it (fixes #12377) by @grokspice (opens in a new tab) in #12466 (opens in a new tab)
- docs: update v2.1.3 release notes for the Iceberg timestamptz fix (trunk sync) by @phillipleblanc (opens in a new tab) in #12459 (opens in a new tab)
- fix(ci): install protoc before building the spice CLI in the E2E CLI workflow by @phillipleblanc (opens in a new tab) in #12449 (opens in a new tab)
- fix(ci): reject an
if: naming a context GitHub does not provide there (refs #12396) by @grokspice (opens in a new tab) in #12468 (opens in a new tab)
- fix(monitoring): align Datadog dashboard with OTel service instance identity by @ewgenius (opens in a new tab) in #12454 (opens in a new tab)
- chore(ci): bump the spiceio setup action to v0.5.10 by @lukekim (opens in a new tab) in #12490 (opens in a new tab)
- test(cayenne): query result correctness vs standalone engines and Spice accelerators by @lukekim (opens in a new tab) in #12098 (opens in a new tab)
- fix(elasticsearch): keep the response body out of errors on the row-data request paths (fixes #12409) by @grokspice (opens in a new tab) in #12456 (opens in a new tab)
- fix(ci): key the sign-off concurrency group on the commit, not the dispatch input (fixes #12472) by @grokspice (opens in a new tab) in #12474 (opens in a new tab)
- perf(ci): run the workspace unit-test gate in one cargo invocation by @bjchambers (opens in a new tab) in #12437 (opens in a new tab)
- feat(monitoring): Runtime Resources observability on Grafana dashboard by @ewgenius (opens in a new tab) in #12441 (opens in a new tab)
- fix(ci): report cache health on the build failures it explains (refs #12420) by @grokspice (opens in a new tab) in #12471 (opens in a new tab)
- fix: resolve fixed-offset timezones when writing Vortex files by @phillipleblanc (opens in a new tab) in #12463 (opens in a new tab)
- fix(search): stop re-parsing a dotted index key as relation.column (fixes #12462) by @grokspice (opens in a new tab) in #12464 (opens in a new tab)
- fix(ci): build the ADBC BigQuery driver with the Go version its go.mod requires by @grokspice (opens in a new tab) in #12470 (opens in a new tab)
- fix(llms): keep the Hugging Face cache token and harden the model E2E job by @grokspice (opens in a new tab) in #12422 (opens in a new tab)
- fix(ci): stop a cancelled Remote Sign-off from claiming the checks failed (fixes #12424) by @grokspice (opens in a new tab) in #12425 (opens in a new tab)
- fix(runtime): fail the write when an index cannot prepare its write window (fixes #12421) by @grokspice (opens in a new tab) in #12448 (opens in a new tab)
- fix(runtime): stop retrying a permanent configuration failure on the catalog and dataset load paths (fixes #12417) by @grokspice (opens in a new tab) in #12443 (opens in a new tab)
- chore(ci): bump spiceio setup action to v0.6.0 by @lukekim (opens in a new tab) in #12522 (opens in a new tab)
- fix(ci): say what was unready when a spiced readiness wait times out (refs #12473) by @grokspice (opens in a new tab) in #12484 (opens in a new tab)
- feat(cayenne): drive incremental vacuum from the maintenance tick by @lukekim (opens in a new tab) in #12435 (opens in a new tab)
- feat(ci): allow additional cargo features for spiceai-dev Docker builds by @ewgenius (opens in a new tab) in #12198 (opens in a new tab)
- fix(cli): authenticate the SQL REPL's nql line like the session's SQL (fixes #12491) by @grokspice (opens in a new tab) in #12496 (opens in a new tab)
- fix(search): keep the row's primary key out of Elasticsearch bulk-index failures (fixes #12370) by @claudespice (opens in a new tab) in #12410 (opens in a new tab)
- fix(cpu-budget): state a low CPU request plainly, and only below half the cores by @bjchambers (opens in a new tab) in #12440 (opens in a new tab)
- fix(models): reject a pinned Model2Vec revision instead of 401ing on it (fixes #12445) by @grokspice (opens in a new tab) in #12475 (opens in a new tab)
- fix(cli): keep a login credential on the origin it was minted for (fixes #12505) by @grokspice (opens in a new tab) in #12508 (opens in a new tab)
- bug: S3 vector indexing succeeds when the embedding column is absent by @Jeadie (opens in a new tab) in #12249 (opens in a new tab)
- bug: S3 Vectors advertises unsupported metadata predicates as exact pushdown (fixes #12243) by @Jeadie (opens in a new tab) in #12250 (opens in a new tab)
- fix(cli): treat a blank --api-key as no key at all (fixes #12498) by @grokspice (opens in a new tab) in #12501 (opens in a new tab)
- task: Add
#[derive(TypedParams)] for secret stores. by @Jeadie (opens in a new tab) in #12154 (opens in a new tab)
- fix(runtime): report a deferred dataset that cannot build its connector (fixes #12414) by @grokspice (opens in a new tab) in #12483 (opens in a new tab)
- fix(mysql): pre-flight CDC replication privileges with an actionable error (fixes #11967) by @grokspice (opens in a new tab) in #12485 (opens in a new tab)
- fix(testoperator): reject a client fleet the HTTP executors cannot bound (fixes #12348) by @claudespice (opens in a new tab) in #12349 (opens in a new tab)
- fix(ci): commit the catalog schema snapshot baselines and stop the daily PR churn by @phillipleblanc (opens in a new tab) in #12525 (opens in a new tab)
- refactor(runtime): describe every table-provider wrapper layer once in a layer table by @phillipleblanc (opens in a new tab) in #12200 (opens in a new tab)
- Add testoperator dispatch support for search benchmarks and replace benchmarks_search.yml by @Jeadie (opens in a new tab) in #12224 (opens in a new tab)
- bug: RRF discards a candidate stream after an empty first batch (fixes #12239) by @Jeadie (opens in a new tab) in #12384 (opens in a new tab)
- fix(cli): stop the SQL REPL asking a runtime its queries never went to (fixes #12493) by @grokspice (opens in a new tab) in #12494 (opens in a new tab)
- test(runtime): run the metrics tests that are built but never run by @sgrebnov (opens in a new tab) in #12510 (opens in a new tab)
- fix(tests): assert the search cache status instead of wall-clock timings (fixes #12487) by @grokspice (opens in a new tab) in #12488 (opens in a new tab)
- fix(search): resolve a chunked index's entries from the authoritative store, not the read listing (fixes #12266) by @claudespice (opens in a new tab) in #12411 (opens in a new tab)
- fix(search): Improvements for search harness by @Jeadie (opens in a new tab) in #12226 (opens in a new tab)
- test(cayenne): cover the selective PK join and the inline/file tier boundary by @lukekim (opens in a new tab) in #12517 (opens in a new tab)
- fix(runtime): surface the unknown-connector suggestion, and report it once (fixes #12415) by @grokspice (opens in a new tab) in #12469 (opens in a new tab)
- fix(ci): publish no sign-off verdict when the run was signalled (fixes #12518) by @grokspice (opens in a new tab) in #12544 (opens in a new tab)
- refactor(layering): move the modules the accelerated table shares below runtime by @bjchambers (opens in a new tab) in #12219 (opens in a new tab)
- chore(ci): upgrade spiceio setup action to v0.7.0 by @lukekim (opens in a new tab) in #12611 (opens in a new tab)
- fix(runtime): keep the leading slash on an inferred local Iceberg warehouse root (fixes #12533) by @grokspice (opens in a new tab) in #12540 (opens in a new tab)
- fix(ci): let a cancelled sign-off correct only the failure it posted (fixes #12428) by @grokspice (opens in a new tab) in #12432 (opens in a new tab)
- fix(runtime): compare an append high-water mark inclusively on a day-granular time column (fixes #12492) by @grokspice (opens in a new tab) in #12500 (opens in a new tab)
- fix(runtime): report a dataset connector load failure once, not once per site (fixes #12365) by @grokspice (opens in a new tab) in #12526 (opens in a new tab)
- fix(workers): give the weighted-router test a noise margin it can survive (fixes #12537) by @grokspice (opens in a new tab) in #12538 (opens in a new tab)
- fix(runtime): reject a Hadoop table URL too short to name a namespace (fixes #12539) by @grokspice (opens in a new tab) in #12542 (opens in a new tab)
- fix(ci): probe a pinned Hugging Face revision at a URL the Hub has (fixes #12553) by @grokspice (opens in a new tab) in #12554 (opens in a new tab)
- feat(testoperator): pin the load phase to a target query rate by @lukekim (opens in a new tab) in #12519 (opens in a new tab)
- fix(cli): follow only same-origin redirects, so the API key cannot leave the origin by @grokspice (opens in a new tab) in #12503 (opens in a new tab)
- fix(ci): use spiceio and sccache for E2E macOS aarch64 builds by @lukekim (opens in a new tab) in #12590 (opens in a new tab)
- perf(cdc): build a drained CDC burst with one blocking-pool handoff by @sgrebnov (opens in a new tab) in #12514 (opens in a new tab)
- feat(cloud-connect): complete the spice connect surface — install, codeless connect, remove by @peasee (opens in a new tab) in #12159 (opens in a new tab)
- fix(scripts): distinguish merge-queue PRs in signoff mine by @Jeadie (opens in a new tab) in #12383 (opens in a new tab)
- bug: HTTP RRF truncates each candidate leg before fusion by @Jeadie (opens in a new tab) in #12386 (opens in a new tab)
- fix(cayenne): pair the cold manifest with the warm snapshot a scan captured by @phillipleblanc (opens in a new tab) in #12577 (opens in a new tab)
- fix(deps): bump the Vortex pin and guard the task-cancellation regression by @phillipleblanc (opens in a new tab) in #12548 (opens in a new tab)
- chore(deps): bump datafusion and table-providers for the DuckDB timezone and retention fixes by @phillipleblanc (opens in a new tab) in #12545 (opens in a new tab)
- fix(cayenne): surface the real error for partitioned Cayenne writes by @Jeadie (opens in a new tab) in #12535 (opens in a new tab)
- fix(postgres): re-snapshot in-memory Cayenne on slot resume, and match the slot's lifetime to the accelerator's by @bjchambers (opens in a new tab) in #12221 (opens in a new tab)
- fix(cli): bound the Spice.ai login poll instead of retrying forever (fixes #12506) by @grokspice (opens in a new tab) in #12523 (opens in a new tab)
- fix(runtime): name a UTC timestamp column's zone in a spelling DuckDB knows (fixes #12528) by @grokspice (opens in a new tab) in #12534 (opens in a new tab)
- fix(mysql): raise net_write_timeout on the shared binlog dump session (fixes #12527) by @claudespice (opens in a new tab) in #12586 (opens in a new tab)
- fix(google-genai): read a Gemini SSE stream as bytes, so a split character survives (fixes #12597) by @claudespice (opens in a new tab) in #12601 (opens in a new tab)
- fix(mssql): follow an availability group's read-only routing redirect (fixes #11453) by @claudespice (opens in a new tab) in #12607 (opens in a new tab)
- test(cayenne): measure small-file fan-out against the seeded appends, not a listed count (fixes #12602) by @claudespice (opens in a new tab) in #12613 (opens in a new tab)
- fix(ci): keep the build cache's S3 endpoint out of the runtime under test (fixes #12624) by @claudespice (opens in a new tab) in #12626 (opens in a new tab)
- perf(ci): verify the CLI binary instead of building it again by @bjchambers (opens in a new tab) in #12486 (opens in a new tab)
- fix(postgres): publish a member's held CDC envelope before a bulk transaction (fixes #12311) by @claudespice (opens in a new tab) in #12408 (opens in a new tab)
- fix(cayenne): consolidate the two partition creators, fixing the accelerator's missing directory sync (fixes #12212) by @claudespice (opens in a new tab) in #12619 (opens in a new tab)
- fix(cayenne): run a backend-parameterized test on a stack its plan fits in (fixes #12436) by @grokspice (opens in a new tab) in #12561 (opens in a new tab)
- fix(ci): let only the merge queue pass Attestation without a sign-off (fixes #12679) by @grokspice (opens in a new tab) in #12681 (opens in a new tab)
- fix(ci): take the trusted sign-off helpers from the workflow's own commit (fixes #12657) by @claudespice (opens in a new tab) in #12662 (opens in a new tab)
- fix(ci): name the E2E jobs that did not succeed (fixes #12643) by @grokspice (opens in a new tab) in #12649 (opens in a new tab)
- fix(ci): give the openai model job a ceiling above its own setup (fixes #12644) by @grokspice (opens in a new tab) in #12650 (opens in a new tab)
- fix(ci): recognise the Flight bind wording so a foreign ready cannot pass (fixes #12642) by @grokspice (opens in a new tab) in #12648 (opens in a new tab)
- fix(ci): call an unreachable compiler cache infrastructure, not a failing branch (fixes #12556) by @grokspice (opens in a new tab) in #12557 (opens in a new tab)
- fix(search): clear a replacing index instead of keeping rows the source dropped (fixes #12066) by @grokspice (opens in a new tab) in #12564 (opens in a new tab)
- fix(ci): retry the sign-off status post, and say so when it never lands (fixes #12701) by @grokspice (opens in a new tab) in #12704 (opens in a new tab)
- build(deps): bump aws-smithy-runtime from 1.12.0 to 1.12.1 in the aws-sdk group across 1 directory by @app/dependabot (opens in a new tab) in #12358 (opens in a new tab)
- task: Add
#[derive(TypedParams)] for LLMs. (fixes #12150) by @Jeadie (opens in a new tab) in #12155 (opens in a new tab)
- fix(ci): let a nightly's later test suites survive an earlier one's failure (fixes #12625) by @claudespice (opens in a new tab) in #12627 (opens in a new tab)
- fix(tests): wait for a partition to persist before snapshotting its plan (fixes #12645) by @grokspice (opens in a new tab) in #12652 (opens in a new tab)
- fix(object-store): bound an FTP and SFTP connection attempt end to end (fixes #12647) by @grokspice (opens in a new tab) in #12655 (opens in a new tab)
- test(iceberg): decide the Hadoop catalog test's backends by environment (fixes #12646) by @grokspice (opens in a new tab) in #12665 (opens in a new tab)
- fix(ci): give each E2E model job its own spiced ports (fixes #12419) by @grokspice (opens in a new tab) in #12685 (opens in a new tab)
- fix(cache): evict the Pingora cache down to max_size instead of only recording it (fixes #12688) by @grokspice (opens in a new tab) in #12694 (opens in a new tab)
- fix(cayenne): bound protected-snapshot compaction by the compaction memory pool by @sgrebnov (opens in a new tab) in #12541 (opens in a new tab)
- fix(ci): leave an incomplete sign-off pending, not failed (fixes #12741) by @grokspice (opens in a new tab) in #12742 (opens in a new tab)
- fix(telemetry): resolve duration histograms below a millisecond (fixes #12693) by @grokspice (opens in a new tab) in #12699 (opens in a new tab)
- fix(ci): bound every E2E job, so a wedged build cannot hold the queue (fixes #12717) by @grokspice (opens in a new tab) in #12719 (opens in a new tab)
- feat(testoperator): add new search benchmark datasets by @Jeadie (opens in a new tab) in #12237 (opens in a new tab)
- test(cayenne): name the small-file compaction tests after the path they take (fixes #12612) by @grokspice (opens in a new tab) in #12740 (opens in a new tab)
- fix(cli): bound an inference call by silence, not by total duration (fixes #12583) by @claudespice (opens in a new tab) in #12589 (opens in a new tab)
- fix(turso): store and read back the same set of types (fixes #12628) by @claudespice (opens in a new tab) in #12633 (opens in a new tab)
- fix(catalogs): keep a Glue database whose tables the include patterns select (fixes #12630) by @claudespice (opens in a new tab) in #12638 (opens in a new tab)
- fix(catalogs): apply a catalog's exclude patterns, not just its include (fixes #12636) by @claudespice (opens in a new tab) in #12641 (opens in a new tab)
- fix(cayenne): build a carry-forward rewrite from the classified manifest rows (fixes #12708) by @claudespice (opens in a new tab) in #12711 (opens in a new tab)
- fix(runtime): subtract an append dedup window as a multiset, not a set (fixes #12499) by @grokspice (opens in a new tab) in #12513 (opens in a new tab)
- bug: FTS exec drops absent columns and violates its declared schema (fixes #12228) by @Jeadie (opens in a new tab) in #12245 (opens in a new tab)
- bug: rrf() linear recency decay divides the document age by the decay window twice (fixes #12232) by @Jeadie (opens in a new tab) in #12385 (opens in a new tab)
- chore(deps): bump datafusion rev to spiceai-54 with outer-join unparser fix by @Jeadie (opens in a new tab) in #12683 (opens in a new tab)
- fix(ci): recognise sccache's startup-timeout wording as an unusable cache (fixes #12622) by @claudespice (opens in a new tab) in #12788 (opens in a new tab)
- fix(spiced): open the log with the startup banner by @bjchambers (opens in a new tab) in #12615 (opens in a new tab)
- fix(metrics): resolve S3 Vectors latency below a hundred milliseconds (fixes #12698) by @grokspice (opens in a new tab) in #12702 (opens in a new tab)
- fix(google-genai): bound one unterminated SSE event so a stalled endpoint cannot grow spiced (fixes #12600) by @grokspice (opens in a new tab) in #12690 (opens in a new tab)
- feat(cpu-budget): size a burstable pod from its CPU request, with an all-cores opt-out by @bjchambers (opens in a new tab) in #12581 (opens in a new tab)
- fix(ci): refuse a sign-off the branch's Makefile cannot run (fixes #12813) by @claudespice (opens in a new tab) in #12815 (opens in a new tab)
- test(postgres): say which readiness wait timed out and what it saw (fixes #12730) by @grokspice (opens in a new tab) in #12731 (opens in a new tab)
- fix(mssql): bound one connection attempt, so a stalled peer cannot pin a pool slot (fixes #12606) by @grokspice (opens in a new tab) in #12733 (opens in a new tab)
- fix(ci): ask whether the disk watcher runs before make writes to it (fixes #12734) by @grokspice (opens in a new tab) in #12736 (opens in a new tab)
- fix: delete three source files that no crate root declares (fixes #12735) by @grokspice (opens in a new tab) in #12738 (opens in a new tab)
- fix(telemetry): keep a startup-recorded gauge on the operator meter, so it reaches /metrics (fixes #12667) by @grokspice (opens in a new tab) in #12754 (opens in a new tab)
- fix(cloud-connect): pin rustls where the release call presents its identity (fixes #12760) by @grokspice (opens in a new tab) in #12764 (opens in a new tab)
- test(cloud-client): assert the redirect policy by behaviour against a live server (fixes #12509) by @grokspice (opens in a new tab) in #12767 (opens in a new tab)
- fix(search): decline a warm vector tier the accelerator cannot refill (fixes #12102) by @grokspice (opens in a new tab) in #12768 (opens in a new tab)
- fix(ci): build without the compiler cache when it cannot be reached (fixes #12770) by @grokspice (opens in a new tab) in #12771 (opens in a new tab)
- fix(json): end an array element where serde did, so bare scalars read (fixes #12782) by @grokspice (opens in a new tab) in #12785 (opens in a new tab)
- fix(cache): count an invalidation as an eviction, and export the counters before one fires (fixes #12687) by @grokspice (opens in a new tab) in #12791 (opens in a new tab)
- fix(ci): ask whether the runner can hold the build before starting one (fixes #12798) by @grokspice (opens in a new tab) in #12799 (opens in a new tab)
- fix(ci): size the cayenne property-test ceiling above the pool, not at it (fixes #12811) by @grokspice (opens in a new tab) in #12814 (opens in a new tab)
- fix(ci): bound every merge-queue-required job with timeout-minutes by @grokspice (opens in a new tab) in #12817 (opens in a new tab)
- deps: bump datafusion-table-providers to 894e279 (fixes #12585) by @bjchambers (opens in a new tab) in #12663 (opens in a new tab)
- fix(ci): take stale build output off the runners, not just report a full one (fixes #12800) by @grokspice (opens in a new tab) in #12801 (opens in a new tab)
- fix(cayenne): give the Turso metastore sidecars one pool over cayenne.db (fixes #12727) by @grokspice (opens in a new tab) in #12804 (opens in a new tab)
- fix(deps): drop the unreferenced ctor dev-dependency from data_components (fixes #12664) by @grokspice (opens in a new tab) in #12819 (opens in a new tab)
- fix(ci): decline a verdict when the sign-off run itself was signalled (fixes #12710) by @grokspice (opens in a new tab) in #12724 (opens in a new tab)
- fix(postgres): hold a resuming shared slot's ack floor for tables with no member by @bjchambers (opens in a new tab) in #12676 (opens in a new tab)
- refactor(layering): split the table-provider layers out of runtime by @bjchambers (opens in a new tab) in #12661 (opens in a new tab)
- build(deps): bump the github-actions-dependencies group across 3 directories with 7 updates by @app/dependabot (opens in a new tab) in #12842 (opens in a new tab)
- fix(spiced): make the crash handler more robust by @sgrebnov (opens in a new tab) in #12834 (opens in a new tab)
- fix(catalogs): apply the Cayenne catalog's include and exclude patterns (fixes #12766) by @grokspice (opens in a new tab) in #12833 (opens in a new tab)
- fix(search): decide a compound index's write fatality per half, not by OR (fixes #12826) by @grokspice (opens in a new tab) in #12828 (opens in a new tab)
- feat(cloud): organization context for spice cloud commands by @lukekim (opens in a new tab) in #12515 (opens in a new tab)
- perf(postgres catalog): skip metadata queries for schemas no include pattern can reach by @bjchambers (opens in a new tab) in #12651 (opens in a new tab)
- bug: S3 vector metadata conversion silently drops filterable metadata (fixes #12240) by @Jeadie (opens in a new tab) in #12387 (opens in a new tab)
- build(deps): bump nvidia/cuda from 13.3.0-cudnn-runtime-ubuntu24.04 to 13.3.1-cudnn-runtime-ubuntu24.04 in the docker-dependencies group by @app/dependabot (opens in a new tab) in #12356 (opens in a new tab)
- fix(runtime): keep serving when the working directory cannot be walked (fixes #6301) by @claudespice (opens in a new tab) in #12803 (opens in a new tab)
- fix(connectors): report an object-store timeout as a timeout, not as bad credentials (fixes #12793) by @claudespice (opens in a new tab) in #12797 (opens in a new tab)
- test(runtime): say which components were not ready when the wait times out (refs #12396) by @grokspice (opens in a new tab) in #12827 (opens in a new tab)
- fix(cayenne): measure tuner memory pressure as unreclaimable demand (fixes #12531) by @sgrebnov (opens in a new tab) in #12623 (opens in a new tab)
- Include v2.1.3 and 2.1.4 in SECURITY.md by @sgrebnov (opens in a new tab) in #12497 (opens in a new tab)
- fix(search): leave the stored rows in place when a delete cannot be applied (fixes #12822) by @grokspice (opens in a new tab) in #12825 (opens in a new tab)
- fix(google-genai): resume the SSE scan where it stopped, not at the buffer start (fixes #12689) by @grokspice (opens in a new tab) in #12713 (opens in a new tab)
- fix(json): report a malformed JSON array element instead of dropping the rest of the file (fixes #12755) by @claudespice (opens in a new tab) in #12777 (opens in a new tab)
- fix(runtime): honour a declared type's precision instead of narrowing it (fixes #12756) by @claudespice (opens in a new tab) in #12774 (opens in a new tab)
- fix(cayenne): drop the partition-value guard that key encoding made unreachable (fixes #12616) by @claudespice (opens in a new tab) in #12753 (opens in a new tab)
- fix(runtime): pin the catalog-acceleration contract in both feature configurations (fixes #12743) by @claudespice (opens in a new tab) in #12752 (opens in a new tab)
- fix(cli): report an answer the model stopped early, instead of printing it as whole (fixes #12596) by @grokspice (opens in a new tab) in #12715 (opens in a new tab)
- fix(runtime): scope query jobs and active queries to the principal that submitted them by @phillipleblanc (opens in a new tab) in #12841 (opens in a new tab)
- Compute all
metrics@k for all 0 < k <= n during search quality metrics. by @Jeadie (opens in a new tab) in #12521 (opens in a new tab)
- task: Add a
truncate to huggingface and file embedding providers by @Jeadie (opens in a new tab) in #12620 (opens in a new tab)
- fix(cache): never serve a result whose tables changed after it read them by @bjchambers (opens in a new tab) in #12703 (opens in a new tab)
- test(cayenne): cover datalake-tier statistics, pruning, and promotion triggers by @sgrebnov (opens in a new tab) in #12847 (opens in a new tab)
- docs(ci): warn that re-running enforce-pull-with-spice replays a stale payload (fixes #12809) by @grokspice (opens in a new tab) in #12810 (opens in a new tab)
- fix(cayenne): bound the maintained-aggregate index by memory budget, and let a stale registry recover by @lukekim (opens in a new tab) in #12573 (opens in a new tab)
- fix(runtime): only initialize accelerators for the datasets a reload applies by @phillipleblanc (opens in a new tab) in #12872 (opens in a new tab)
- feat: promote BYOC and Cloud Connect changes to trunk by @phillipleblanc (opens in a new tab) in #12852 (opens in a new tab)
- fix(flight): resolve per-request settings from the live app by @phillipleblanc (opens in a new tab) in #12873 (opens in a new tab)
- fix(cli): keep polling when the token exchange has not seen the auth code yet by @phillipleblanc (opens in a new tab) in #12871 (opens in a new tab)
- feat(cayenne): inline a small whole-table refresh into the metastore by @lukekim (opens in a new tab) in #12367 (opens in a new tab)
- ci: upgrade spiceio setup action to v0.8.0 by @lukekim (opens in a new tab) in #12885 (opens in a new tab)
- fix(runtime): measure the CDC prefetch backlog, and stop its byte counter wrapping by @lukekim (opens in a new tab) in #12675 (opens in a new tab)
- fix(turso): keep a reloaded file-accelerated dataset queryable by @phillipleblanc (opens in a new tab) in #12882 (opens in a new tab)
- fix(query): preserve expression ordering across partition wrappers by @Jeadie (opens in a new tab) in #12854 (opens in a new tab)
- fix(runtime): report every start-time-only
runtime.* section a reload changes by @phillipleblanc (opens in a new tab) in #12874 (opens in a new tab)
- fix(search): handle null embeddings in vector writes and JIT search by @Jeadie (opens in a new tab) in #12855 (opens in a new tab)
- test(embeddings): truncate over-length inputs in the MiniLM embed spicepods by @Jeadie (opens in a new tab) in #12856 (opens in a new tab)
- fix(search): Improve search benchmarking DX and fix some vector index names by @Jeadie (opens in a new tab) in #12892 (opens in a new tab)
- test(search): dispatch all MTEB search variants by @Jeadie (opens in a new tab) in #12850 (opens in a new tab)
- fix(runtime): stop a superseded scheduler incarnation from claiming the heartbeat key by @phillipleblanc (opens in a new tab) in #12851 (opens in a new tab)
- fix: Ensure OTel ingest materializes missing/null dimension columns by @peasee (opens in a new tab) in #12087 (opens in a new tab)
- feat(cloud-connect): apply a component-only Spicepod deployment in place by @phillipleblanc (opens in a new tab) in #12895 (opens in a new tab)
- feat(cli): typed login sessions and explicit connect organization selection by @phillipleblanc (opens in a new tab) in #12912 (opens in a new tab)
- refactor: make each table wrapper a typed layer that answers where a walk goes by @bjchambers (opens in a new tab) in #12891 (opens in a new tab)
- feat(runtime): put every query's trace id on its log records by @lukekim (opens in a new tab) in #12610 (opens in a new tab)
- feat(cayenne): bound the SUM of the per-table PK keyset caches by @lukekim (opens in a new tab) in #12802 (opens in a new tab)
- fix(cache): read and expire a Pingora entry under one hold of its shard (fixes #12832) by @grokspice (opens in a new tab) in #12839 (opens in a new tab)
- fix: Update Search integration test snapshots by @Jeadie (opens in a new tab) in #12707 (opens in a new tab)
- fix(runtime): invalidate localpod children's cached results on parent refresh by @krinart (opens in a new tab) in #12897 (opens in a new tab)
- fix(cayenne): use valid snapshot IDs for deferred appends by @Jeadie (opens in a new tab) in #12853 (opens in a new tab)
- fix(ci): New branch for each
push-snap-changes (only affects integration_search.yml) by @Jeadie (opens in a new tab) in #12684 (opens in a new tab)
- fix(search): make chunked embedding and offset columns nullable (#12778) by @Jeadie (opens in a new tab) in #12783 (opens in a new tab)
- feat(cayenne): charge scan materialization to the query memory pool by @lukekim (opens in a new tab) in #12759 (opens in a new tab)
- fix(cache): run the Pingora invalidation scan off the calling runtime worker (fixes #12806) by @grokspice (opens in a new tab) in #12808 (opens in a new tab)
- fix(cache): count the removals the Pingora engine performs itself (fixes #12792) by @grokspice (opens in a new tab) in #12830 (opens in a new tab)
- fix(cayenne): reserve append sequence for partitioned upsert appends (#12779) by @Jeadie (opens in a new tab) in #12784 (opens in a new tab)
- test(cayenne): prove the keyset degrade releases each shard as it converts by @lukekim (opens in a new tab) in #12790 (opens in a new tab)
- perf(postgres catalog): resolve a schema's table schemas in one query (#12106) by @bjchambers (opens in a new tab) in #12886 (opens in a new tab)
- fix(vortex): expose segment cache metrics on scrape by @phillipleblanc (opens in a new tab) in #12944 (opens in a new tab)
- refactor: point connector imports at the crates that actually own them by @bjchambers (opens in a new tab) in #12925 (opens in a new tab)
- fix(postgres): rebuild the acceleration when a replication slot's history is gone by @bjchambers (opens in a new tab) in #12922 (opens in a new tab)
- fix(cayenne)!: only an explicit
cayenne_tuning: adaptive enables the closed loop by @lukekim (opens in a new tab) in #12949 (opens in a new tab)
- fix(dev-tools): show merge-queue and conflict state as labels in scripts/signoff mine by @Jeadie (opens in a new tab) in #12924 (opens in a new tab)
- test: cover warm-index delete paths across backends (#11964) by @Jeadie (opens in a new tab) in #12635 (opens in a new tab)
- fix(cayenne): fractional proptest scaling + batch timestamp-partition test inserts by @Jeadie (opens in a new tab) in #12796 (opens in a new tab)
- Helpful tool to track what users/bots have got done lately by @Jeadie (opens in a new tab) in #12603 (opens in a new tab)
- Release notes housekeeping by @krinart (opens in a new tab) in #12977 (opens in a new tab)
- build(deps): bump serde_with from 3.20.0 to 3.21.0 by @app/dependabot (opens in a new tab) in #11969 (opens in a new tab)
- refactor: make runtime's re-export shims crate-visible by @bjchambers (opens in a new tab) in #12969 (opens in a new tab)
- fix(runtime): surface OTel metric tables with duplicate columns, and count unsupported metric types as rejected by @peasee (opens in a new tab) in #12923 (opens in a new tab)
- fix: Update Search integration test snapshots by @app/github-actions (opens in a new tab) in #12979 (opens in a new tab)
- Make
signoff.yml more searchable. by @Jeadie (opens in a new tab) in #12392 (opens in a new tab)
- bug: Support search UDTFs in SQL function components by @Jeadie (opens in a new tab) in #12919 (opens in a new tab)
- docs: document the stacked-PR workflow, with a tested restack helper by @bjchambers (opens in a new tab) in #12951 (opens in a new tab)
- fix(llms): fall back to pytorch_model.bin for embeddings without safetensors by @Jeadie (opens in a new tab) in #12971 (opens in a new tab)
- feat(monitoring): improve the Datadog dashboard for multi-replica and Kubernetes deployments by @sgrebnov (opens in a new tab) in #12972 (opens in a new tab)
- Charge the query memory pool for concurrent Vortex split decodes by @lukekim (opens in a new tab) in #12940 (opens in a new tab)
- docs(release-notes): write release notes in Simplified Technical English by @lukekim (opens in a new tab) in #12947 (opens in a new tab)
- refactor: narrow the DataConnector trait off the runtime's types by @bjchambers (opens in a new tab) in #12993 (opens in a new tab)
- fix(cayenne): compact a DDL-created partition on an interval, not only on write (fixes #12617) by @grokspice (opens in a new tab) in #12757 (opens in a new tab)
- fix(cayenne): hand out a pooled Turso connection in autocommit (refs #12820) by @grokspice (opens in a new tab) in #12821 (opens in a new tab)
- fix: fail the lint gate on a source file no crate root declares (fixes #12737) by @grokspice (opens in a new tab) in #12744 (opens in a new tab)
- fix(search): stage a full refresh of the memory vector tier, so dropped rows leave it (refs #12413) by @grokspice (opens in a new tab) in #12823 (opens in a new tab)
- fix(graphql): keep the configured schema when a page has no rows (fixes #13004) by @claudespice (opens in a new tab) in #13016 (opens in a new tab)
- fix(runtime): register task_history before embeddings/rerankers load by @Jeadie (opens in a new tab) in #12978 (opens in a new tab)
- test(postgres): converge the catalog on source DDL, and warn when it selects nothing by @bjchambers (opens in a new tab) in #12988 (opens in a new tab)
- fix(cayenne): budget for catalogs in the Cayenne memory classification by @bjchambers (opens in a new tab) in #13027 (opens in a new tab)
- fix(cayenne): hold primary keys committed while the existence index is checked out by @lukekim (opens in a new tab) in #13019 (opens in a new tab)
- feat(search): push SQL filters down into tantivy full-text search by @Jeadie (opens in a new tab) in #12812 (opens in a new tab)
- fix(cayenne): serve the maintained count Inexact while its delta is queued (fixes #12824) by @grokspice (opens in a new tab) in #12829 (opens in a new tab)
- fix: Update Search integration test snapshots by @app/github-actions (opens in a new tab) in #13060 (opens in a new tab)
- fix(testoperator benchmarks): benchmark fixes by @krinart (opens in a new tab) in #13012 (opens in a new tab)
- fix(runtime): stop query_active_count drifting up when queries share a request (fixes #12883) by @claudespice (opens in a new tab) in #13034 (opens in a new tab)
- chore(deps): bump model2vec-rs for fast WordPiece tokenizer by @Jeadie (opens in a new tab) in #12986 (opens in a new tab)
- ci(cayenne-doc): render diagrams locally with mermaid-cli, and fix the diagram that has been failing the build for a month by @bjchambers (opens in a new tab) in #13063 (opens in a new tab)
- feat(monitoring): improve results cache panels on the Datadog dashboard by @sgrebnov (opens in a new tab) in #13066 (opens in a new tab)
- feat(cayenne)!: one process-wide Vortex segment cache instead of a cache per table by @bjchambers (opens in a new tab) in #12983 (opens in a new tab)
- fix(connectors): keep the projected schema when a query returns no rows (fixes #13015) by @claudespice (opens in a new tab) in #13078 (opens in a new tab)
- fix(deps): bump the datafusion pin past the merged unparser fixes (fixes #12406) by @claudespice (opens in a new tab) in #13083 (opens in a new tab)
- fix(cache): compact a sliced result before caching it (fixes #12921) by @claudespice (opens in a new tab) in #13043 (opens in a new tab)
- refactor(cdc): give the sidecar checkpoint stores a below-runtime interface by @bjchambers (opens in a new tab) in #13045 (opens in a new tab)
- fix(cayenne): re-baseline the maintained row count when a promotion folds a delete tombstone (fixes #12846) by @claudespice (opens in a new tab) in #12998 (opens in a new tab)
- fix(acceleration): stop an engine-required type rewrite reading as a stale acceleration schema (fixes #13014) by @claudespice (opens in a new tab) in #13074 (opens in a new tab)
- fix(udfs): return NULL for a vector distance that is not defined (refs #11263) by @claudespice (opens in a new tab) in #13091 (opens in a new tab)
- fix(cayenne): refuse a data directory that contains the metastore (fixes #13055) by @claudespice (opens in a new tab) in #13101 (opens in a new tab)
- fix(json): report content after a JSON array instead of dropping it (fixes #12786) by @claudespice (opens in a new tab) in #13097 (opens in a new tab)
- fix(runtime): bound the spicepod apply so an unloadable dataset cannot wedge it (fixes #12862) by @claudespice (opens in a new tab) in #13095 (opens in a new tab)
- fix(catalogs): apply the Glue catalog's exclude patterns (fixes #12634) by @claudespice (opens in a new tab) in #13103 (opens in a new tab)
- fix(metrics): make component metrics and tests more robust by @sgrebnov (opens in a new tab) in #13094 (opens in a new tab)
- feat(cache)!: ship the Pingora cache engine as an Enterprise-only feature by @lukekim (opens in a new tab) in #13000 (opens in a new tab)
- fix: Update benchmark snapshots by @app/github-actions (opens in a new tab) in #13056 (opens in a new tab)
- fix(postgres): compare CDC positions against what the slot can stream, not what it retains by @bjchambers (opens in a new tab) in #12990 (opens in a new tab)
- docs(cayenne): compress the changelog, and give it a rule for what earns a row by @bjchambers (opens in a new tab) in #13067 (opens in a new tab)
- test: remove a test's container when it is done with it, including on failure by @bjchambers (opens in a new tab) in #13123 (opens in a new tab)
- fix(flight): record one metric sample per Flight RPC (fixes #12844) by @claudespice (opens in a new tab) in #13112 (opens in a new tab)
- feat(drasi): forward CDC changes and runtime tables to a Drasi source (Alpha) by @lukekim (opens in a new tab) in #12653 (opens in a new tab)
- fix(bench): time the engine instead of the results cache, and validate ClickBench by @lukekim (opens in a new tab) in #13150 (opens in a new tab)
- refactor(connector): retype the DataConnector surface to DatasetSpec by @bjchambers (opens in a new tab) in #13096 (opens in a new tab)
- bug: SQL-tier function body does not support named arguments (=>) for search UDTFs (fixes #12898) by @Jeadie (opens in a new tab) in #12920 (opens in a new tab)
- fix(cache): compact the sliced and wide results that compaction previously skipped by @sgrebnov (opens in a new tab) in #13176 (opens in a new tab)
- docs(stacked-prs): correct when a restack forfeits the sign-off by @bjchambers (opens in a new tab) in #13130 (opens in a new tab)
- fix(postgres): load a provably empty CDC acceleration through its snapshot bootstrap by @bjchambers (opens in a new tab) in #13175 (opens in a new tab)
- fix(cayenne): keep Arrow timestamp units (Vortex supports ns) by @lukekim (opens in a new tab) in #13180 (opens in a new tab)
- Cloud Connect: enrollment and identity foundation by @phillipleblanc (opens in a new tab) in #13181 (opens in a new tab)
- refactor(model): give the model-provider contracts a home below llms by @bjchambers (opens in a new tab) in #13201 (opens in a new tab)
- Fix runtime lint with zero features by @krinart (opens in a new tab) in #13208 (opens in a new tab)
- fix(benchmarks): BigQuery + Snowflake fixes + updated snapshots by @krinart (opens in a new tab) in #13136 (opens in a new tab)
- Revert "fix(search): decline a warm vector tier the accelerator cannot refill (fixes #12102)" (#12768) by @Jeadie (opens in a new tab) in #13041 (opens in a new tab)
- fix(snapshots): don't bootstrap the snapshot file_create just discarded by @lukekim (opens in a new tab) in #13179 (opens in a new tab)
- Declare the CPU entitlement to Vortex at startup by @sgrebnov (opens in a new tab) in #13173 (opens in a new tab)
- fix(mysql): fix net_write_timeout session syntax and extend transient replication errors by @ewgenius (opens in a new tab) in #13178 (opens in a new tab)
- fix(postgres): classify EOF and server termination errors as transient in CDC replication by @ewgenius (opens in a new tab) in #13163 (opens in a new tab)
- feat(testoperator): support customer-supplied datasets in run search by @Jeadie (opens in a new tab) in #12982 (opens in a new tab)
- Add PDF page splitter and FinanceBench staging job (#12858) by @Jeadie (opens in a new tab) in #12984 (opens in a new tab)
- fix(cayenne): frame the persisted PK bloom with the probe function that filled it (fixes #13137) by @claudespice (opens in a new tab) in #13153 (opens in a new tab)
- refactor(layering): move the connectors below the runtime by @bjchambers (opens in a new tab) in #13166 (opens in a new tab)
- feat(cli): manage the Cloud Connect service with launchd on macOS by @phillipleblanc (opens in a new tab) in #13203 (opens in a new tab)
- Support local rerankers from
text-embeddings-inference by @Jeadie (opens in a new tab) in #12929 (opens in a new tab)
- fix(catalog): make the PostgreSQL catalog's errors and warnings actionable by @bjchambers (opens in a new tab) in #13199 (opens in a new tab)
- fix(cloud-connect): look again when a lock create reports the entry missing by @phillipleblanc (opens in a new tab) in #13231 (opens in a new tab)
- Skip DynamoDB in scheduled benchmarks by @ewgenius (opens in a new tab) in #13222 (opens in a new tab)
- Populate the file metadata cache with Vortex footers at write time by @sgrebnov (opens in a new tab) in #13228 (opens in a new tab)
- perf(cayenne): give the PK filter a cache-line layout, and the bit count it asks for by @bjchambers (opens in a new tab) in #13219 (opens in a new tab)
- fix(mysql): rebuild a purged-position acceleration atomically instead of emptying it (fixes #12967) by @claudespice (opens in a new tab) in #13023 (opens in a new tab)
- fix(cloud-connect): heartbeat restart-required, attachment by app id, and this crate's integration tests in the gate by @phillipleblanc (opens in a new tab) in #13234 (opens in a new tab)
- fix(search): join all of a dataset's vector indexes on one VectorScanTableProvider by @krinart (opens in a new tab) in #13209 (opens in a new tab)
- Validate vector search parameters before SQL query by @lesbass (opens in a new tab) in #12253 (opens in a new tab)
- feat(helm): support customizing Deployment strategy and StatefulSet updateStrategy by @sgrebnov (opens in a new tab) in #13249 (opens in a new tab)
- fix(postgres): recover from a replication slot lost while streaming, and state what each slot costs by @bjchambers (opens in a new tab) in #13221 (opens in a new tab)
- fix(cayenne): stop a partitioned acceleration reporting a schema change it never applied (fixes #12999) by @claudespice (opens in a new tab) in #13057 (opens in a new tab)
- feat(cloud-connect): name the local spicepod a cloud-managed instance serves or ignores by @phillipleblanc (opens in a new tab) in #13262 (opens in a new tab)
- fix(snowflake): keep NUMBER precision and scale during schema discovery by @phillipleblanc (opens in a new tab) in #13272 (opens in a new tab)
- fix(secrets): check secret references where the components resolve them by @peasee (opens in a new tab) in #13265 (opens in a new tab)
- docs(criteria): sign off the PostgreSQL Catalog Connector at Beta by @bjchambers (opens in a new tab) in #13235 (opens in a new tab)
- fix(cloud-connect): resolve locked service state through the retained directory descriptor (fixes #13204) by @claudespice (opens in a new tab) in #13292 (opens in a new tab)
- chore(deps): upgrade iceberg-rust to v0.10.0 by @krinart (opens in a new tab) in #13189 (opens in a new tab)
- fix(cloud-connect): fix Windows build of identity state-file helpers by @sgrebnov (opens in a new tab) in #13308 (opens in a new tab)
- fix(cayenne): normalize append de-duplication types by @ewgenius (opens in a new tab) in #13200 (opens in a new tab)
- feat(cli): unify Spice Cloud enrollment and service workflows by @phillipleblanc (opens in a new tab) in #13326 (opens in a new tab)
- feat(postgres): native upsert delivery for durable write-back by @Jeadie (opens in a new tab) in #13323 (opens in a new tab)
- feat(cli): create an unattached Cloud Connect project by @phillipleblanc (opens in a new tab) in #13333 (opens in a new tab)
- fix(cayenne): exclude protected snapshots above the delete fence from subset compaction by @krinart (opens in a new tab) in #13343 (opens in a new tab)
- fix(cli): resolve a Cloud Connect project's data-plane region from its config by @krinart (opens in a new tab) in #13370 (opens in a new tab)
- fix(cli): keep a granted Spice Cloud login when the identity endpoint is silent by @bjchambers (opens in a new tab) in #13376 (opens in a new tab)
- fix(duckdb): fix concurrent-query failures after a replace_file swap with multiple DuckDB files by @Jeadie (opens in a new tab) in #13383 (opens in a new tab)
*Full Changelog: https://github.com/spiceai/spiceai/compare/v2.1.0...v2.2.0 (opens in a new tab)