[Embeddings Generation] Added support for prepending contextual text to embeddings-generation chunks Docs | Guide
[ETL/AI] Redesigned ETL and AI task error handling with persistent errors storage, health-status tracking, a dedicated Studio "Task Errors" view and monitoring capabilities Docs | Guide
[AI] Fixed the "Test Connection" action for AI connection strings failing with RefusedToAnswerException when the selected model (e.g. OpenAI gpt-4o) refused the probe request
[AI Agents] Fixed AI agent action handlers failing when the handler returned a list or array, by serializing collections correctly in AddActionResponse
[AI Agents] Added a full-debug mode for AI agent conversations that records the raw request/response JSON exchanged with the model into a debug document
[Audit Log] Added audit logging for sharded delete/patch-by-query operations
[Audit Log] Added audit logging for collection delete operations triggered from the Studio
[Backup] Fixed a null reference crash when the backup type changed during an active backup
[Backup] Ensured all backup work runs on the dedicated backup thread (honoring its BelowNormal priority) instead of dispatching async continuations to the thread pool
[Backup] Included GenAI tasks when disabling ongoing tasks during restore
[Certificates] Fixed a persistent 403 after a node was rebuilt with fresh storage and received a full Raft snapshot, by firing the certificate-update notification on snapshot install so the cached UnfamiliarCertificate status clears
[Cluster] Fixed the 32-bit async commit guard in RachisConsensus
[Cluster] Fixed the Cluster Observer reporting a misleading "Replication not up to date" reason when index lag was the actual blocker for a node leaving Rehab, by collecting all lag indicators instead of stopping at the first
[Cluster Dashboard] Suppressed spurious WebSocketError.ConnectionClosedPrematurely errors in the proxy and Cluster Dashboard WebSocket handlers
[Cluster Transactions] Fixed cluster transactions being silently skipped after attaching database files to a new server or restoring from a snapshot, by resetting LastCompletedClusterTransactionIndex
[Corax] Hardened buffer initialization and added bounds checking in GrowableBuffer, MemoizationMatch, and SortHelper.FindMatches
[Corax] Changed SpatialMatch to default its count to the number of entries instead of long.MaxValue
[Corax] Improved memoization buffer memory management and made the growable buffer's maximum size configurable
[Corax] Added support for ORDER BY ... NULLS FIRST/LAST in RQL
[Core] Fixed the length computation in GetLazyStringTempComparisonBuffer
[Core] Wrapped CancellationTokenSource.Cancel() in SafeCancel across dispose/stop paths so an AggregateException from a registered callback can no longer skip critical cleanup (replication, cluster maintenance, ETL, queue sink, changes connections)
[Core] Fixed Sparrow encoding bugs: BitVector.IndexOfFirstSetBit, VariableSizeEncoding byte offsets, and ZigZag encode/decode for negative values
[Databases] Fixed RecreateDatabase creating Voron files for non-existent databases
[Documents] Allowed Raven-prefixed metadata keys (e.g. Raven-Replication-Version, Raven-Replication-History) to be stored on documents outside of legacy import
[Embedded] Added a configurable ProcessKillTimeout for the embedded server
[Embeddings Generation] Added a check for a disabled embeddings-generation task when querying a static index
[ETL] Serialized error details as JSON in the queue ETL processors
[ETL] Changed the default Raven ETL load-request timeout from 12 hours to 300 seconds, and fixed changes to LoadRequestTimeoutInSec not being recognized as a task update
[ETL] Fixed SQL ETL on PostgreSQL silently dropping all rows queued after the first per-row error, by retrying provider-recognized row errors and skipping the failing document
[ETL] Stopped SQL ETL batches when the target connection or transaction is lost, avoiding a cascade of follow-up errors
[HTTP] Suppressed expected I/O errors logged during web host disposal
[Indexing] Prevented a server crash caused by recursive additional sources in indexes
[Licensing] Fixed restore failing with a subscription license-limit exception when the database had a single subscription that was within the allowed limit
[Linux] Fixed cgroup v2 memory controller detection on the Azure Linux kernel
[Linux] Set a umask on the RavenDB service
[Memory] Fixed Windows job-object memory-limit detection by reading the correct JOBOBJECT_EXTENDED_LIMIT_INFORMATION value
[Memory] Moved the early out-of-memory check off the allocation hot path to the background memory-monitoring thread, reducing per-allocation overhead
[Monitoring] Added a custom OpenTelemetry environment-variable reader to work around issues in the OpenTelemetry SDK
[PostgreSQL] Streamed PostgreSQL query results one document at a time instead of buffering the entire collection in memory
[PostgreSQL] Enabled the PostgreSQL integration automatically when experimental features are enabled in the Setup Wizard
[Querying] Reduced managed allocations during Lucene query result scoring by storing ScoreDoc arrays in unmanaged memory
[Querying] Added support for the in operator and its negation inside the RQL when conditional clause
[Querying] Added a query-timings sub-scope for embedding fetch during vector.search
[Replication] Fixed stale half-open incoming replication connections blocking new connections by guarding disposal in AssertValidConnection
[Replication] Normalized pull replication path filters consistently on client and server
[Replication] Fixed cluster admin certificate handling when setting up replication
[Replication] Included attachment stream sizes when computing batch sizes
[Replication] Validated the certificate type when creating a pull replication configuration
[Revisions] Added MaxOpsPerSecond throttling to the Enforce Revisions Configuration operation
[Setup] Skipped server simulation when generating the setup package for a secured setup
[Setup] Added support for marking nodes as passive in a secure setup
[Setup] Resolved the custom certificate path from settings.json and created the target directory when missing
[Sharding] Fixed ShardedDatabaseContext not disposing its connections
[Subscriptions] Fixed ongoing-task enumeration failing when an imported subscription had a non-positive subscription ID
[Vector Search] Prevented an HNSW node from discovering itself during concurrent graph placement
[Vector Search] Replaced the HNSW coin-flip level assignment with the standard logarithmic formula, improving vector index insert throughput
[Vector Search] Kept the EdgesIndexesPerLevel cache in sync with EdgesPerLevel at the HNSW write sites
[Voron] Fixed a reference-count under-count on the encrypted storage read path that could free or zero a decrypted page buffer while still in use, by resetting the page locator in CryptoPager.TryReleasePage
[Voron] Suppressed background sync/flush errors raised while the storage environment is being disposed, and skipped starting those operations during disposal
[Voron] Fixed Directory.Move failing when source and destination differ on the \\?\ long-path prefix
[Voron] Added support for storing small attachments inline to avoid fragmentation
[AI Agents] Added configurable prompt cache key per AI connection string with provider-specific defaults
[AI Agents] Added Google Gemini provider support for AI agent conversations
[AI Agents] Added remote attachment support for GenAI ETL tasks with deferred download and caching
[AI Agents] Fixed concurrent read of blittable objects using a shared context in test GenAI script functionality which could result in AVE
[AI Agents] Fixed race condition in GenAI process stop where _longRunningWork could be null, causing incorrect IsRunning state
[Backup/Restore] Fixed TimeSeriesDeletedRanges not being marked as processed during snapshot backup and restore
[Bulk Insert] Fixed race condition when writing attachments to the request stream during bulk insert
[Bulk Insert] Fixed compression stream disposal during bulk insert to ensure final footer bytes are written
[Certificates] Added ability to disable client certificates while preserving them for later re-enabling
[Certificates] Fixed authentication to trust the server's own certificate before checking expiration
[Certificates] Fixed certificate disposal and PKCS12 handling on macOS in SecretProtection and CertificateUtils
[Certificates] Fixed MAC verification failure during PKCS12 import on macOS
[Cluster] Fixed _hasMoreTombstones flag not being reset between cleanup iterations in ClusterObserver
[Corax] Fixed faceted queries with WHERE clause to use indexed path via HashSet intersection and term materialization
[Corax] Fixed incorrect highlighting terms when using range filters in Corax query builder
[Databases] Fixed double deletion of database state when removing a node from a database group
[Debug] Added per-thread IO statistics (IOPS and throughput) to the Threads Runtime debug view on Linux
[Debug] Added download capability for stack traces from the admin debug endpoint, named with node tag and timestamp
[Debug] Fixed Raven.Debug path resolution in development environments using hardcoded relative path probing
[Debug] Fixed IO stats aggregation on the threads view by computing totals client-side from cumulative server counters
[ETL] Fixed ETL processing failure when encountering unsupported incremental time series by skipping them and alerting on that
[ETL] Fixed tombstone filtering for artificial documents from OutputReduceToCollection to ensure correct ETL replication
[ETL] Fixed Raven ETL document ID generation with an empty DocumentIdPostfix to avoid duplicate path separators
[Indexing] Fixed boolean operators and added implicit bool conversion for DynamicNullObject in static indexes
[Indexing] Fixed aliasing removal for spatial.distance and corrected dynamic OrderByDistance query generation
[Indexing] Reduced GC pressure in map-reduce indexing by replacing a redundant HashSet with a bool flag in MapReduceResultsStore and releasing stale transaction references in MapReduceIndexingContext.Dispose
[Indexing] Added Indexing.Querying.Corax.NullFirst sort option for ORDER BY queries handled by Corax search engine
[Indexing] Reduced managed memory retention by releasing stale LowLevelTransaction references held by Lucene's per-thread segment reader cache and bloom filters after indexing batches
[Licensing] Fixed license activation failure on an existing bootstrapped instance
[Monitoring] Added alert when machine core count significantly exceeds the licensed core limit, indicating potential GC thread contention
[Monitoring] Fixed IO stats reporting on Linux when the data path contains multi-level symlinks by using realpath() instead of readlink()
[Patching] Added ability to copy attachments in JavaScript patch scripts
[Querying] Added now() and today() built-in RQL time functions
[Querying] Added WHEN conditional expression support in RQL queries
[Querying] Fixed experimental Lucene caching query feature which resulted in returning invalid query results
[Performance] Optimized query quest handler by reducing unnecessary async state machine allocations
[Replication] Fixed TCP connection options resource leak in ShardedIncomingReplicationHandler
[Revisions] Added support for resuming revision operations from a specified etag
[Setup] Fixed documentation links in readme files
[Setup] Improved license key validation, error handling, and Skip license support in Setup Wizard
[Traffic Watch] Added filtering by request/response size in Traffic Watch view
[Traffic Watch] Added WithTag query customization and enhanced URL handling in Traffic Watch view
[Vector Search] Added filtered vector search support in Corax, enabling HNSW approximate and exact similarity searches constrained to a query filter predicate
[Vector Search] Added meaningful exception when performing vector search with a disabled embeddings generation task
[Vector Search] Added order by score() support for vector search queries in sharded databases
[Vector Search] Fixed disposal of nodesIdsToScan allocations in exact vector search
[AI Agents] Fixed Handle overload selection for async handlers by changing the existing Handle Task overload to accept Task<TResult> instead of Task<object>. This is a breaking change, but the previous API was effectively wrong (it caused Task<T> handlers to bind to the object overload and treat the Task itself as the response)
[AI Agents] Stored action responses by toolId (dictionary) and threw on duplicates to enforce one response per tool invocation (prevents accidental AddActionResponse inside Handle / double replies)