Proto commits in chroma-core/chroma

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:0f9751c
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:b4e4361
Author:Robert Escriva
Committer:GitHub

[ENH](logservice): add conditional push and insert offset to proto (#7317) ## Description of changes Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. ## Test plan CI ## Migration plan Backwards compatible ## Observability plan N/A ## Documentation Changes N/A Co-authored-by: AI

The documentation is generated from this commit.

Commit:03e4a90
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CHORE](sysdb): simplify finish API

Commit:7aaa20b
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.

Commit:33daa4d
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:65035af
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CHORE](sysdb): simplify finish API

Commit:cfef885
Author:Tanuj Nayak
Committer:Tanuj Nayak

Revert "[BUG](fn-consumer): Read offsets from sysdb" This reverts commit f4ea0ff9c6e4c494a6ddf912cf985be639ade204.

Commit:2198048
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG](fn-consumer): Read offsets from sysdb

Commit:d864335
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:5af81e3
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.

Commit:295fbdc
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CHORE](sysdb): simplify finish API

Commit:1dd69d9
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.

Commit:35b47e4
Author:Tanuj Nayak
Committer:Tanuj Nayak

Revert "[BUG](fn-consumer): Read offsets from sysdb" This reverts commit f4ea0ff9c6e4c494a6ddf912cf985be639ade204.

Commit:1598f57
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG](fn-consumer): Read offsets from sysdb

Commit:20ff80a
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:ac1778f
Author:tanujnay112
Committer:GitHub

[ENH](work-queue): add optional compaction offset (#7354) ## Description of changes Part 1 of a stack of changes to persist the input collection compaction offset instead of the function completion offset in the WQS file. This diff starts off by requiring this compaction offset to be sent in the PushWork API. - Improvements & Bug fixes - - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:169b663
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CHORE](sysdb): simplify finish API

Commit:615044f
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG](fn-consumer): Read offsets from sysdb

Commit:486b99a
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.

Commit:76b70aa
Author:Tanuj Nayak
Committer:Tanuj Nayak

Revert "[BUG](fn-consumer): Read offsets from sysdb" This reverts commit f4ea0ff9c6e4c494a6ddf912cf985be639ade204.

Commit:0d4e9b5
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:566e9f4
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CHORE](sysdb): simplify finish API

Commit:f4ea0ff
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG](fn-consumer): Read offsets from sysdb

Commit:b0df5ac
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:0f14332
Author:Robert Escriva
Committer:Robert Escriva

document new fields

Commit:c384b77
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CHORE](sysdb): simplify finish API

Commit:31bf79f
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:215e11d
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CHORE](sysdb): simplify finish API

Commit:e9e877e
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:2502aa4
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): add optional compaction offset

Commit:d2182db
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CHORE](sysdb): simplify finish API

Commit:b78eb70
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH](work-queue): require compaction offset

Commit:9d44034
Author:Tanuj Nayak

[ENH](work-queue): add optional compaction offset

Commit:8e5bda3
Author:Robert Escriva
Committer:Robert Escriva

[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI

Commit:3f8fa38
Author:Robert Escriva
Committer:Robert Escriva

[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI

Commit:54c196d
Author:Robert Escriva
Committer:Robert Escriva

[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI

Commit:dd0ea9a
Author:Robert Escriva
Committer:Robert Escriva

[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI

Commit:dfd4413
Author:Robert Escriva
Committer:Robert Escriva

[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI

Commit:7331b12
Author:Tanuj Nayak
Committer:tanujnay112

[ENH]: Finish_work and output collection flush are atomic

Commit:6bd423f
Author:tanujnay112
Committer:GitHub

[ENH]: Add scaffolding for functions with many inputs in fn consumer (#7143) ## Description of changes This PR upgrades the fn consumer pipeline to support functions with **multiple input collections**. Previously, `AttachedFunctionExecutor::execute` received a single `Chunk` of records; now it receives a `Vec<Chunk>` — one chunk per input collection. The orchestration layer is restructured to carry batches of `(collection_id, materialized_logs)` pairs through the pipeline, and the fn consumer manager groups work items by function before dispatching them as a single batch. The key structural changes are: 1. `AttachedFunctionExecutor::execute` signature: `Chunk<…>` → `Vec<Chunk<…>>` 2. New `FunctionExecutionBatch` / `FunctionExecutionProgress` / `FunctionContext` types extracted into a new `function_execution` module 3. `ExecuteAttachedFunctionInput` gains `input_batches: Vec<ExecuteAttachedFunctionBatchInput>` replacing the flat `materialized_logs` + `input_record_segment` 4. `FinishAsyncWorkInput` now carries `Vec<FinishAsyncWorkItem>` instead of a single offset 5. `FnConsumerManager` groups work items by function ID and dispatches them as a batch via `FunctionExecutionContext::run` - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:ed66c10
Author:Tanuj Nayak
Committer:Tanuj Nayak

[CLN](worker): Box function execution fetch future

Commit:c136e32
Author:tanujnay112
Committer:GitHub

[ENH]: Add route to allow multiple inputs on an async function (#7142) ## Description of changes This PR adds a new `add_input` route that lets callers associate additional input collections with an existing async attached function. The key data model insight: the `attached_functions` table uses a composite primary key of `(id, input_collection_id)`, so one logical attached function can have multiple rows — one per input collection. Only async functions support multiple inputs. The change spans the full stack: protobuf → Go sysdb coordinator → Rust sysdb client → Rust frontend server → Python API client. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:78e4719
Author:Tanuj Nayak
Committer:Tanuj Nayak

[TEST](coordinator): Fix attach function collection mocks

Commit:2cf2a47
Author:tanujnay112
Committer:GitHub

[BUG]: WQS repairs on bootup (#7126) ## Description of changes This PR renames `AreInvocationsDone` (which returned `[]bool`) to `CheckInvocationStatus` (which returns a three-state enum). The key semantic change is that the old binary done/not-done is replaced with three states: - `NOT_DONE` (0) — default, work still in progress - `DONE` (1) — completed (soft/hard deleted, or offset advanced with no pending heap entry) - `NEEDS_REPAIR` (2) — offset advanced but `heap_entry_pending=true`, meaning the WQS crashed mid-repair The new `NEEDS_REPAIR` state enables the work queue manager to automatically repair stale entries on bootup, which is the core bug fix this PR addresses. In the proto we replaced the RPC for `AreInvocationsDone` with ``CheckInvocationStatus` this is not backwards compatible but that is fine as there is not production use for the former RPC yet. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:30211ce
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG]: WQS repairs on bootup

Commit:9db5d08
Author:tanujnay112
Committer:GitHub

[BUG]: Fn consumer manager keys its job scheduler on output collection id (#7117) ## Description of changes The `FnConsumerManager` was keying its "in-progress" job scheduler on `(fn_id, input_coll_id)` — a `FnJobKey`. The bug: multiple different attached functions could share the same output collection, and the old key didn't prevent two jobs from writing to the same output collection concurrently. The fix re-keys the in-progress map on `output_coll_id` (`CollectionUuid`), which is the actual resource that must be serialized. To support this, `GetAttachedFunctions` gains a batch `ids` parameter so the manager can look up all output collection IDs in a single sysdb call rather than one per work item. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:be08eca
Author:Tanuj Nayak
Committer:Tanuj Nayak

[BUG]: Fn consumer manager keys its job scheduler on output collection id

Commit:d5090bb
Author:Robert Escriva
Committer:Robert Escriva

[ENH] implement stratified sampling endpoint for collections Add a new sample API that randomly selects records from a collection using stratified sampling over SPANN index strata. Records can be filtered by ID, metadata, or document predicates before sampling. The endpoint accepts a limit and optional seed for reproducibility. Full-stack implementation across all layers: - API types and request/response models (Rust, Python, JS/TS) - Protobuf IDL for distributed query execution - Frontend server routing, metrics, and executor integration - Sample operator with SPANN-aware stratified selection - Sample orchestrator with filter, projection, and shard fan-out - SPANN index reader support for head-count enumeration - Python and JS client bindings Co-authored-by: AI

Commit:1e3c695
Author:Tanuj Nayak
Committer:tanujnay112

[ENH]: Function consumer server

Commit:1d89afc
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH]: Function consumer server

Commit:1f27121
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH]: Function consumer server

Commit:0be016a
Author:Tanuj Nayak

[ENH]: Function consumer server

Commit:bb8d304
Author:tanujnay112
Committer:GitHub

[ENH]: Add sysdb endpoint to check if invocations are done (#7016) ## Description of changes This PR adds a new `AreInvocationsDone` endpoint to sysdb that lets callers batch-check whether attached function invocations have completed. The check works by comparing `completion_offset > invocation_id AND heap_repair_needed` in the database. - Improvements & Bug fixes - ... - New functionality - New SysDB endpoint as described. ## Test plan _How are these changes tested?_ Go tests added to test the filtering logic of this endpoint. - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?

Commit:4491214
Author:Tanuj Nayak
Committer:tanujnay112

[ENH]: Add sysdb endpoint to check if invocations are done

Commit:f6a2a2f
Author:tanujnay112
Committer:GitHub

[ENH]: Sysdb calls for finishing function invocation (#7015) ## Description of changes This PR adds two new sysdb RPC endpoints for finishing async attached function invocations: 1. **`TryFinishAsyncAttachedFunctionInvocation`** — records a new completion offset for an async function. If the offset is behind the collection's current log position, it signals that a repair is needed (returns `NeedsRepair`); otherwise it returns `Success`. 2. **`FinalizeAsyncAttachedFunctionRepair`** — called after repair is complete to flip `can_gc` back to `true`. A new `can_gc` column is added to the `attached_functions` table to track whether the function's output is safe to garbage-collect. - Improvements & Bug fixes - N/A - New functionality - Aforementioned new endpoints ## Test plan _How are these changes tested?_ Go tests have been added to test the repair and non-repair cases of these new methods. - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ A migration has been added to add a 'can_gc' column to the `attached_functions` table. ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:4552eb8
Author:tanujnay112
Committer:GitHub

[ENH]: Add work queue proto definitions and core types (#7020) ## Description of changes This is the base PR for the work queue service stack. It introduces two things: 1. A protobuf contract (`workqueue.proto`) defining the gRPC API surface 2. Rust core types (`WorkQueueRecord`, `WorkQueueError`, `FinishResult`) that the rest of the stack builds on Nothing is wired up in this change. This is scaffolding for later PRs. - Improvements & Bug fixes - N/A - New functionality - N/A ## Test plan N/A - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:9a5e35a
Author:Tanuj Nayak
Committer:tanujnay112

[ENH]: Sysdb call for function invocation

Commit:a2c4068
Author:tanujnay112
Committer:GitHub

[ENH]: Add async mode to functions (#7014) ## Description of changes This PR adds an `is_async` field to the `Function` model, propagating it through the full stack: database schema → Go model → protobuf → Rust types → orchestrator logic. The core behavioral change is in the orchestrator: async functions skip updating the `completion_offset` during processing, because they'll be handled through a separate queue mechanism in later PRs. - Improvements & Bug fixes - N/A - New functionality - Can define a function to be async, attached functions runs of such functions will do the aforementioned async behavior. ## Test plan _How are these changes tested?_ Existing function go tests have been adjusted for this new field. - [x] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ A new `is_async` boolean column is added to `attached_functions` with `NOT NULL DEFAULT false`, ensuring backward compatibility — all existing rows default to synchronous behavior. ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:7e588a3
Author:Tanuj Nayak
Committer:Tanuj Nayak

feat: Expose work queue service in Kubernetes - Add port 50054 to compaction service container ports - Create work-queue-service Service to expose the gRPC endpoint - Enable work queue via environment variable CHROMA_WORK_QUEUE__ENABLED - Remove separate work-queue-config.yaml (configuration via env vars)

Commit:2c10700
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH]: Add async mode to functions

Commit:01e39bf
Author:Tanuj Nayak
Committer:Tanuj Nayak

feat: Expose work queue service in Kubernetes - Add port 50054 to compaction service container ports - Create work-queue-service Service to expose the gRPC endpoint - Enable work queue via environment variable CHROMA_WORK_QUEUE__ENABLED - Remove separate work-queue-config.yaml (configuration via env vars)

Commit:b7c878c
Author:Claude

[ENH]: Add metadata support to Database entity This adds optional metadata field to databases, following the pattern used for Collections. Users can now store arbitrary key-value metadata on databases for organizational and tagging purposes. Changes: - New database_metadata table in Go PostgreSQL and Rust SQLite - Proto updates to Database message and CreateDatabaseRequest - Go backend: dbmodel, DAO, catalog, and gRPC handlers - Rust backend: table definitions, sqlite.rs queries - Python client: AdminAPI, FastAPI endpoints - JavaScript client: AdminClient.createDatabase - Integration tests for database metadata https://claude.ai/code/session_019rHB7PwwuyJvyypxuJVCCs

Commit:3fe4aa5
Author:tanujnay112
Committer:github-actions[bot]

Cherry-pick with conflicts: fdcd2165154b6bd6394983c49a9ba02cc71ff925

Commit:fdcd216
Author:tanujnay112
Committer:GitHub

[ENH]: Enable rebuilds for sharded collections (#6916) ## Description of changes This change adds rebuild capabilities for sharded collections. A rebuild command can now specify a shard index it wants to rebuild. An unspecified one defaults to 0 (first shard). This shard's filepaths are set to empty during rebuild compaction, analogous to all of the segment's filepaths being set to empty before this change. A new struct packaging the rebuild command parameters called `RebuildInfo` is passed to `CompactionContext` now. This contains the desired shard index to be rebuilt. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan Tests have been added in compact.rs. They test rebuilding various shards in the full and partial rebuild scenarios. - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:398cb8e
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH]: Enable rebuilds for sharded collections

Commit:602efec
Author:chroma-droid
Committer:GitHub

[HOTFIX] applying PR #6914 to release/2026-04-03 (#6920) This PR cherry-picks the commit f749f58f881830ad5ed4d728529b5d491656f825 onto release/2026-04-03. If there are unresolved conflicts, please resolve them manually. Co-authored-by: Macronova <60079945+Sicheng-Pan@users.noreply.github.com>

Commit:ec570d9
Author:Macronova
Committer:github-actions[bot]

[ENH] Add IndexAndBoundedWal read level (#6914) ## Description of changes Add a new `IndexAndBoundedWal` read level for collection search and count APIs. This level reads from the index plus up to a server-configured number of write-ahead log entries, providing a consistent prefix of the WAL with bounded query latency. Unlike `IndexAndWal` (which reads the entire WAL) or `IndexOnly` (which skips it entirely), `IndexAndBoundedWal` caps the log fetch via the existing `maximum_fetch_count` on `FetchLogOperator`. The limit is controlled by a new `bounded_wal_limit` config field on `QueryServiceConfig` (default 250). - New functionality - `INDEX_AND_BOUNDED_WAL` proto enum variant in `ReadLevel` - `IndexAndBoundedWal` Rust type with bidirectional proto conversions - `bounded_wal_limit` config field on `QueryServiceConfig` (default 250) - Bounded WAL fetch logic in `CountOrchestrator` and `KnnFilterOrchestrator` — clones `FetchLogOperator` with `maximum_fetch_count = Some(bounded_wal_limit)` ## Test plan - [x] Behavioral unit test (`test_read_level_semantics`) in `count.rs` — sets up 5 compacted + 10 uncompacted records and verifies: - `IndexAndWal` → 15 (all records) - `IndexOnly` → 5 (compacted only) - `IndexAndBoundedWal` with limit 3 → 8 (partial WAL) - `IndexAndBoundedWal` with limit 10 → 15 (full WAL) - `IndexAndBoundedWal` with limit 100 → 15 (limit exceeds WAL, reads all available)

Commit:f749f58
Author:Macronova
Committer:GitHub

[ENH] Add IndexAndBoundedWal read level (#6914) ## Description of changes Add a new `IndexAndBoundedWal` read level for collection search and count APIs. This level reads from the index plus up to a server-configured number of write-ahead log entries, providing a consistent prefix of the WAL with bounded query latency. Unlike `IndexAndWal` (which reads the entire WAL) or `IndexOnly` (which skips it entirely), `IndexAndBoundedWal` caps the log fetch via the existing `maximum_fetch_count` on `FetchLogOperator`. The limit is controlled by a new `bounded_wal_limit` config field on `QueryServiceConfig` (default 250). - New functionality - `INDEX_AND_BOUNDED_WAL` proto enum variant in `ReadLevel` - `IndexAndBoundedWal` Rust type with bidirectional proto conversions - `bounded_wal_limit` config field on `QueryServiceConfig` (default 250) - Bounded WAL fetch logic in `CountOrchestrator` and `KnnFilterOrchestrator` — clones `FetchLogOperator` with `maximum_fetch_count = Some(bounded_wal_limit)` ## Test plan - [x] Behavioral unit test (`test_read_level_semantics`) in `count.rs` — sets up 5 compacted + 10 uncompacted records and verifies: - `IndexAndWal` → 15 (all records) - `IndexOnly` → 5 (compacted only) - `IndexAndBoundedWal` with limit 3 → 8 (partial WAL) - `IndexAndBoundedWal` with limit 10 → 15 (full WAL) - `IndexAndBoundedWal` with limit 100 → 15 (limit exceeds WAL, reads all available)

Commit:a760f7e
Author:Robert Escriva
Committer:GitHub

[ENH](faults): add fault injection control plane (#6795) ## Description of changes Add the fault injection proto service and the new chroma-faults crate for in-process fault state management. Implement inject, list, and clear RPCs over a shared FaultRegistry, and wire log-service to build and expose the new tonic service while registering the shared Arc in the config registry. ## Test plan CI + further dev ## Migration plan N/A ## Observability plan N/A ## Documentation Changes N/A Co-authored-by: AI

Commit:8a1aacc
Author:Sanket Kedia
Committer:GitHub

[ENH]: Pass down shard_index, num_shards and log_upper_bound_offset to query (#6810) ## Description of changes _Summarize the changes made by this PR._ - Improvements & Bug fixes - New functionality - Introduces new fields - shard_index, num_shards and log_upper_bound_offset in ScanProto and Scan types. - Currently FE just sets shard_index=0, num_shards=1 and log_upper_bound_offset=0. The query nodes don't use these fields - These fields will be used by worker in a future PR to execute logic for only its shard - Handled backwards and forward compatibility. If num_shards is set to 0 (i.e. absent) then query node sets it to 1 ## Test plan _How are these changes tested?_ - [x] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan None ## Observability plan None ## Documentation Changes None

Commit:5e96f83
Author:Sanket Kedia

add log offset upper bound

Commit:0b18bdd
Author:Sanket Kedia

[ENH]: Pass down shard id and num shards to query

Commit:bac0279
Author:Claude

[ENH] Add description field to collections Add an optional text description field to collections across the full stack: - Python types, proto definitions, and conversion functions - Go model, DB model, DAO, catalog, and gRPC layers - Postgres and SQLite migrations - FastAPI server endpoints and HTTP clients (sync + async) - Abstract API interfaces and SegmentAPI implementation - Collection model classes (sync + async) with modify() support https://claude.ai/code/session_01XmGiw5KPfuugfHgSbPL2pX

Commit:38db70a
Author:tanujnay112
Committer:GitHub

[CLN]: Remove ListDeadJobs endpoint (#6633) ## Description of changes Compactors don't maintain an in-memory DLQ anymore. Remove the ListDeadJobs endpoint to reflect this - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:b73496c
Author:tanujnay112
Committer:GitHub

[ENH]: MCMR batch_get_collection_soft_delete_status (#6422) ## Description of changes Implements the `batch_get_collection_soft_delete_status` endpoint for rust sysdb and adds a few debugging messages I found helpful when testing end to end GC functionality on MCMR. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan Unit tests are added in spanner.rs - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:bc9f09c
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH]: MCMR batch_get_collection_soft_delete_status

Commit:02ae862
Author:tanujnay112
Committer:GitHub

[ENH]: delete_collection_versions in MCMR (#6420) ## Description of changes This change implements delete_collection_version in rust sysdb. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:a1c187a
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH]: delete_collection_versions in MCMR

Commit:f1b6869
Author:tanujnay112
Committer:GitHub

[ENH]: mark_version_to_gc in MCMR (#6419) ## Description of changes This PR implements `mark_version_for_deletion` for rust sysdb to support MCMR GC. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:5d1cc6b
Author:Tanuj Nayak
Committer:tanujnay112

[ENH]: mark_version_to_gc in MCMR (WIP)

Commit:04accb3
Author:Tanuj Nayak

[CLN]: Remove ListDeadJobs from compaction client

Commit:f37eb12
Author:tanujnay112
Committer:GitHub

[ENH]: batch_get_collection_version_file_paths for MCMR (#6417) ## Description of changes This change adds the `batch_get_collection_version_file_paths` endpoint in rust sysdb for garbage collection. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:1788d55
Author:Tanuj Nayak
Committer:tanujnay112

[ENH]: batch_get_collection_version_file_paths for MCMR

Commit:ead7bd4
Author:tanujnay112
Committer:GitHub

[ENH]: Get database name from get_collections_to_gc mcmr endpoint (#6392) ## Description of changes This change adds the get_collections_to_gc endpoint to spanner and has the garbage collector retrieve collections and database names from this endpoint. It edits the Go sysdb ListCollectionsToGC endpoint to also return a database name with each endpoint. This database name is saved in a GarbageCollectionOrchestrator's state. This is a breaking change on the Go sysdb protos but it is not a big deal as garbage collection might just error while this change is being deployed. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:f446a29
Author:Dave Dash

wip

Commit:ea66be5
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH]: Get database name from get_collections_to_gc mcmr endpoint

Commit:3757058
Author:tanujnay112
Committer:GitHub

[ENH]: Compaction endpoint to return where a collection would be assigned (#6564) ## Description of changes - Improvements & Bug fixes - N/A - New functionality - `./compaction-client --url http://localhost:50051 get-collection-assignment --collection-id <UUID>` returns where the concerned pod thinks the given collection id would be assigned and also returns what it thinks its memberlist is. ## Test plan Manual local testing. - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan N/A ## Observability plan N/A ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the [docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:68a77c0
Author:Tanuj Nayak
Committer:Tanuj Nayak

[ENH]: Compaction endpoint to return where a collection would be assigned

Commit:a2d4165
Author:tanujnay112
Committer:GitHub

[ENH]: ListInProgressJobs endpoint for compactor (#6552) ## Description of changes _Summarize the changes made by this PR._ - Improvements & Bug fixes - Adds a ListInProgressJobs RPC endpoint that returns the list of in progress jobs (collection ids) within the compaction's scheduler along with its expiration time and database name. - New functionality - This endpoint can be accessed by the compaction client by doing `compaction_client --url \<compactor-url> list-in-progress-jobs` ## Test plan Manual testing - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_

Commit:e3eac92
Author:chroma-droid
Committer:GitHub

[HOTFIX] applying PR #6539 to release/2026-02-20 (#6555) This PR cherry-picks the commit cc7d74a034f5db17845ffea5e4922518f05a23d9 onto release/2026-02-20. If there are unresolved conflicts, please resolve them manually. Co-authored-by: Hammad Bashir <HammadB@users.noreply.github.com>

Commit:edeb91d
Author:Hammad Bashir
Committer:github-actions[bot]

[ENH] Add ReadLevel to count in be (#6539) ## Description of changes _Summarize the changes made by this PR._ - Improvements & Bug fixes - ... - New functionality - Introduces read level to count, mirrors existing search read level ## Test plan _How are these changes tested?_ See #6541 which had tests merged into there (Stacked) - [x] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan Noner equried ## Observability plan None new required ## Documentation Changes None

Commit:cc7d74a
Author:Hammad Bashir
Committer:GitHub

[ENH] Add ReadLevel to count in be (#6539) ## Description of changes _Summarize the changes made by this PR._ - Improvements & Bug fixes - ... - New functionality - Introduces read level to count, mirrors existing search read level ## Test plan _How are these changes tested?_ See #6541 which had tests merged into there (Stacked) - [x] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan Noner equried ## Observability plan None new required ## Documentation Changes None

Commit:5bf02bf
Author:chroma-droid
Committer:GitHub

[HOTFIX] applying PR #6533 to release/2026-02-20 (#6553) This PR cherry-picks the commit 3160e30a9a45e8ea7b98bba009350b633b2a80b5 onto release/2026-02-20. If there are unresolved conflicts, please resolve them manually. --------- Co-authored-by: Robert Escriva <robert@trychroma.com> Co-authored-by: macronova <sicheng@trychroma.com>

Commit:69eff27
Author:Claude

[CLN] Remove deprecated in-memory DLQ for compaction dead jobs Dead jobs are now tracked persistently in sysdb via compaction_failure_count. This removes the deprecated ListDeadJobs endpoint and in-memory tracking. - Remove ListDeadJobsMessage from types.rs - Remove Handler<ListDeadJobsMessage> from compaction_manager.rs - Remove list_dead_jobs RPC from compaction_server.rs - Remove ListDeadJobs CLI command from compaction_client.rs - Remove ListDeadJobs proto definitions from compactor.proto Slack thread: https://trychroma.slack.com/archives/C09RE2LFEJY/p1772678305697779?thread_ts=1772678258.865279&cid=C09RE2LFEJY https://claude.ai/code/session_01WkMf7PYLmZLAdcdWZsBxLB

Commit:3160e30
Author:Robert Escriva
Committer:GitHub

[ENH](log) add pointer-based log fetch via ScoutLogFragments (#6533) ## Description of changes Introduce a new ScoutLogFragments RPC that returns fragment pointers so query and compactor nodes can read log data directly from object storage instead of streaming through gRPC PullLogs. Key changes: - Add ScoutLogFragments RPC and LogFragmentPointer message to proto - Implement server-side handler in log-service using wal3 scan - Add scout_log_fragments client method to grpc_log and Log enum - Create FragmentFetcher in rust/worker that dereferences pointers, reads parquet fragments from storage, and caches raw bytes - Extend FetchLogOperator with use_pointer_fetch toggle to select between gRPC pull and pointer-based fetch strategies - Thread use_pointer_fetch config through compactor and query service - Default use_pointer_fetch to false for safe incremental rollout ## Test plan CI ## Migration plan N/A ## Observability plan Staging ## Documentation Changes N/A Co-authored-by: AI

Commit:fd0c774
Author:Tanuj Nayak

[ENH]: ListInProgressJobs endpoint for compactor

Commit:885d9ad
Author:hammadb

[ENH] Add ReadLevel to count in be

Commit:77a8733
Author:Robert Escriva
Committer:GitHub

[ENH] Purge dirty via Spanner when topology is specified (#6504) ## Description of changes Make topology_name optional in PurgeDirtyForCollectionRequest. When a topology is provided, purge dirty state directly in the Spanner manifests table by setting ignore_dirty = true, bypassing the dirty log. When no topology is provided, fall back to the existing dirty log append path for backward compatibility. Add purge_dirty_for_collection and unpurge_dirty_for_collection methods to ReplManifestManager that set the ignore_dirty flag in Spanner. ## Test plan CI ## Migration plan N/A ## Observability plan N/A ## Documentation Changes N/A Co-authored-by: AI

Commit:4daa4cb
Author:Robert Escriva
Committer:GitHub

[ENH] Thread topology name through purge-dirty pipeline (#6503) ## Description of changes Pass topology_name alongside collection IDs when purging dirty log entries so the log service can scope purges to the correct topology. - Add topology_name field to PurgeDirtyForCollectionRequest proto - Change purge_dirty_for_collection to accept (CollectionUuid, Option<TopologyName>) pairs and group requests by topology - Convert Scheduler.deleted_collections from HashSet to HashMap to track each deleted collection's topology name - Update PurgeDirtyLogInput to carry topology information ## Test plan CI ## Migration plan N/A ## Observability plan N/A ## Documentation Changes N/A Co-authored-by: AI

Commit:c882d28
Author:chroma-droid
Committer:GitHub

[HOTFIX] applying PR #6478 to release/2026-02-19 (#6480) This PR cherry-picks the commit 116642308e2bcad3af63f5b6ce5373ed2065a2ff onto release/2026-02-19. If there are unresolved conflicts, please resolve them manually. Co-authored-by: tanujnay112 <tanujnay112@live.com>