What JasperFx/marten shipped
Written by FoxPlug from the repository's own releases; not affiliated with Martendb. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/JasperFx/marten; Martendb did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- DCB tag queries now exclude archived events in both TagTables and HStore modes, matching every other event query. Pull request #5821
- Fetching an Async-lifecycle aggregate twice in one session no longer applies events onto the document a second time. Pull request #5808
- A per-tenant rebuild of a composite projection now resets each member's per-tenant progression, not just the composite's own row. Pull request #5829
- Cursor paging with a nullable leading sort key no longer drops null rows ascending or throws an invalid cursor descending. Pull request #5836
- A custom IMartenLogger no longer leaves LogFactory null, so daemon and database logging keeps working. Pull request #5823
- EventStoreUsage now reports the event store's TenancyStyle. Pull request #5805
- New opts.Events.AutoDiscoverTagTypes lets a store turn off DCB tag type discovery and the tables it creates. Pull request #5806
- A stream that folds to null is kept instead of losing its history to an empty snapshot, and archived and skipped events are masked. Pull request #5797
- A batched FetchForExclusiveWriting on a locked stream now throws StreamLockedException like the direct call. Pull request #5818
- Cursor paging now supports strong-typed id keys. Pull request #5816
Why it matters
This week closed several correctness problems in released behavior: archived events showing up in DCB tag queries, double event application on a repeated Async fetch, and composite rebuilds leaving member progress behind. Cursor paging became reliable for nullable and value type keys, and a stream that folds to null stops losing its history. It also landed the 9.58.0 release on JasperFx 2.100.0 and Weasel 9.49.0.
Changelog entry
- Released Marten 9.58.0 on JasperFx 2.100.0 and Weasel 9.49.0, with per-tenant composite rebuilds on per-tenant partitioned stores. Release
- DCB tag queries exclude archived events in TagTables and HStore modes. Pull request #5821
- Fetching an Async-lifecycle aggregate twice in one session no longer applies events after the snapshot twice. Pull request #5808
- Per-tenant rebuild resets composite members' per-tenant progression before rebuilding. Pull request #5829
- Cursor paging is null-aware for nullable leading sort keys. Pull request #5836
- Cursor paging supports value type and strong-typed id keys. Pull request #5816
- LogFactory is set when a custom IMartenLogger is configured. Pull request #5823
- EventStoreUsage reports the event store's TenancyStyle. Pull request #5805
- Added opts.Events.AutoDiscoverTagTypes to turn off DCB tag type discovery. Pull request #5806
- Batched FetchForExclusiveWriting on a locked stream throws StreamLockedException. Pull request #5818
- A stream that folds to null keeps its history, and archived and skipped events are masked. Pull request #5797
- NuGet publishing uses trusted publishing instead of an API key secret. Pull request #5809
Marten 9.58.0 is out on JasperFx 2.100.0 and Weasel 9.49.0, with per-tenant composite rebuilds fixed. Also this week: DCB tag queries skip archived events, repeated Async fetches stop double-applying events, and cursor paging handles nullable and value type keys.
Marten 9.58.0 shipped this week, moving to JasperFx 2.100.0 and Weasel 9.49.0 and making per-tenant composite rebuilds work on per-tenant partitioned stores. Alongside it, several correctness fixes landed: DCB tag queries now exclude archived events, a repeated Async-lifecycle fetch no longer folds events onto the same document twice, and a per-tenant rebuild resets each composite member's progression. Cursor paging now handles nullable leading sort keys and strong-typed id keys, a stream that folds to null keeps its history, and a custom IMartenLogger no longer silences logging. EventStoreUsage also reports the event store's TenancyStyle.
Week of October 26, 2026
What shipped
- Implemented IReadOnlyEventStore.QueryRawEvents with IQueryable support so raw event queries follow the same tenant rules as other event store queries. Pull request #5794
- A failed HiLo factory build is no longer cached across an outage, so sequence generation can recover once the database is back. Pull request #5787
- Document alias casing is now culture-invariant, fixing table name differences under Turkish culture when names contain an uppercase I. Pull request #5778
- DDL template lookup and flat-table upsert function names now use invariant culture, following the document alias fix. Pull request #5783
- Subclass queries now resolve nested duplicated fields to their columns in where and order by clauses instead of reading them from JSONB. Pull request #5780
- Verbose connection tracing now emits marten.append.event on the Quick append routes, not only on operations derived from the append event base. Pull request #5782
- The diagnostics writer now moves a single-stream projection document's version token on every write. Pull request #5781
- StreamPagedByCursor writes the page's bytes directly instead of re-encoding them and disposes the pooled stream. Pull request #5776
- Released Marten 9.56.0 with the raw event query API and an updated JasperFx dependency. Release
- Made the intermittent command exception test retry like its sibling test in the same file. Pull request #5789
Why it matters
This week brought a new raw event query API on the event store and fixes for culture-dependent naming, a HiLo outage recovery problem, and projection version tracking. Users querying events directly get a supported IQueryable entry point, and users on non-invariant cultures or running diagnostics get more predictable behavior. Several releases shipped, so upgrading brings these fixes together.
Changelog entry
- Release Marten 9.56.0 with JasperFx 2.97.0 and IReadOnlyEventStore.QueryRawEvents. Release
- Implement IReadOnlyEventStore.QueryRawEvents with IQueryable, applying the same tenant rules as other event store queries. Pull request #5794
- Do not cache a failed HiLo factory build across an outage so sequences recover after the database returns. Pull request #5787
- Use invariant culture when generating and normalizing document aliases. Pull request #5778
- Make DDL template lookup and flat-table upsert function names culture-invariant. Pull request #5783
- Resolve nested duplicated fields to their columns in subclass queries for where and order by. Pull request #5780
- Emit marten.append.event on Quick append routes under verbose tracing. Pull request #5782
- Move a projection document's version token on every diagnostics write. Pull request #5781
- Write the page's bytes directly in StreamPagedByCursor and dispose the pooled stream. Pull request #5776
- Escape LIKE wildcards in EqualsIgnoreCase() queries. Pull request #5758
- Match tabs and line breaks in string.IsNullOrWhiteSpace() queries. Pull request #5760
- Release Marten 9.55.0 with invariant culture for document aliases and related identifiers. Release
Marten 9.56.0 is out. Raw event queries now support IQueryable through IReadOnlyEventStore.QueryRawEvents. Also in this week: culture-invariant document aliases and DDL names, HiLo factory failures no longer cached across an outage, and projection version tokens move on every wri
Marten 9.56.0 shipped this week. IReadOnlyEventStore.QueryRawEvents now supports IQueryable, with tenant rules matching the other event store queries. Fixes landed for culture-dependent identifiers: document aliases, DDL template lookups and flat-table upsert function names now use invariant culture, which matters under Turkish and Azerbaijani cultures when names contain an uppercase I. A failed HiLo factory build is no longer cached across an outage, so sequence generation recovers when the database returns. Subclass queries resolve nested duplicated fields to their columns, verbose tracing now emits marten.append.event on the Quick append routes, and the diagnostics writer moves a projection document's version token on every write.
Week of October 19, 2026
What shipped
- Added UndeleteDocumentAsync to restore a soft-deleted document, plus changes for metadata ordering, soft-delete and metadata compliance checks, and persisted projection start floors behind SubscribeFromFirstRun, on JasperFx 2.93.1. Pull request #5744
- Released 9.53.0 on JasperFx 2.94.0 with delete style, write preview and a new QueryEventData<T>(tenantId) for store-agnostic LINQ over event bodies. Release
- Fixed StoreProjection so a projection's revision is no longer truncated through int, which affected multi-stream projection revisions. Pull request #5747
- Fixed removing a tenant under UseTenantPartitionedEvents so its natural-key rows are deleted before the partition drop, avoiding a foreign key violation. Pull request #5746
- Fixed removing a tenant under UseTenantPartitionedEvents when it has tagged events, by deleting the DCB tag rows before dropping the
mt_eventspartition. Pull request #5720 - Made StatementOperation a NoDataReturnedCall, so UndoDeleteWhere and HardDeleteWhere no longer produce a false ConcurrencyException. Pull request #5749
- An inline array literal in LINQ Contains() is now treated as a value, including a compiled query's own members. Pull request #5712
- Added AddMartenHighWaterHealthCheck() for stores registered with AddMartenStore. Pull request #5716
- Compacting a stream whose folded events carry DCB tags now deletes the tag rows of the deleted events and indexes the tag tables on
seq_id. Pull request #5694 - A save cancelled after its statements but before COMMIT now rolls back its transaction instead of leaving it idle in transaction, and writes tombstones off the failed save's path. Pull request #5699
Why it matters
This week reached people using the event store in multi-tenant setups, where removing or re-adding tenants and per-tenant subscriptions got several fixes. It also filled in the JasperFx members behind the document and event store explorers, and closed a set of smaller bugs around compaction, tenant removal and cancelled saves.
Changelog entry
- Marten 9.53.0 on JasperFx 2.94.0: delete style, write preview and QueryEventData<T>(tenantId). Release
- UndeleteDocumentAsync, metadata ordering, soft-delete and metadata compliance checks, and projection start floors behind SubscribeFromFirstRun. Pull request #5744
- StoreProjection no longer truncates a projection's revision through int. Pull request #5747
- A removed tenant's natural-key rows are deleted before its partition drop. Pull request #5746
- A removed tenant's DCB tag rows are deleted before its
mt_eventspartition drop. Pull request #5720 - StatementOperation is a NoDataReturnedCall, removing false ConcurrencyException after UndoDeleteWhere and HardDeleteWhere. Pull request #5749
- An inline array literal is treated as a value in LINQ Contains(), including a compiled query's own members. Pull request #5712
- Added AddMartenHighWaterHealthCheck() for stores registered with AddMartenStore. Pull request #5716
- Compaction deletes the DCB tag rows of deleted events, and tag tables are indexed on
seq_id. Pull request #5694 - A save cancelled before COMMIT rolls back its transaction, and tombstones are written off the failed save's path. Pull request #5699
- Projection code no longer registers NpgsqlException and MartenCommandException as transient. Pull request #5745
- Applications can register their own exception transforms. Pull request #5750
Marten 9.51 through 9.54 shipped this week: UndeleteDocumentAsync and QueryEventData<T>, tenant removal fixes under per-tenant partitioning, false ConcurrencyException fixes, Contains() with array literals in LINQ, and a cancelled save no longer left idle in transaction.
This week Marten shipped releases 9.51 through 9.54. UndeleteDocumentAsync restores a soft-deleted document, and QueryEventData<T> adds store-agnostic LINQ over event bodies, along with metadata ordering and projection start floors behind SubscribeFromFirstRun. Multi-tenant setups got several fixes: removing a tenant now clears its natural-key and DCB tag rows before the partition drop, and compacting streams with DCB tags works again. UndoDeleteWhere and HardDeleteWhere no longer raise a false ConcurrencyException, an inline array literal works in LINQ Contains(), and a save cancelled before COMMIT now rolls back instead of sitting idle in transaction.
Week of October 12, 2026
What shipped
- Marten 9.50.3 shipped with Native AOT support, hard-delete of streams via TombstoneStream, two schema-naming fixes and three behavior changes to read before upgrading. Release
- TombstoneStream(Guid) and TombstoneStream(string) were added to session.Events for hard stream delete, on JasperFx 2.90.0. Pull request #5674
- Stats() combined with Include(), Select() and Take() now reports TotalResults as the number of matches rather than the size of the page. Pull request #5660
- An Include() joined on the queried document's own id no longer fails with a missing column error when the query also calls Stats(). Pull request #5655
- An Include() joined on the queried document's own id no longer fails when the queried document has duplicated fields. Pull request #5651
- LoadManyAsync with no ids now skips the database round trip instead of running a query that always returns no rows. Pull request #5681
- Archiving a stream under archived-stream partitioning now moves the tag rows as well, fixing the foreign key rejection. Pull request #5679
- A custom foreign key name now survives conjoined tenancy instead of being regenerated, and generated names are shorter. Pull request #5678
- DocumentStore now answers IEventStore.FindDatabaseForTenantAsync through the store's tenancy, returning null for an unknown tenant without provisioning anything. Pull request #5659
- FetchMaxEventSequenceAsync asks the catalog before reading
mt_events, so stores with no event types and no projections no longer send a query against a missing table. Pull request #5656
Why it matters
This week's release, 9.50.3, is the one to read first: it brings Native AOT and hard stream delete, plus schema-naming fixes and behavior changes that users need to check before upgrading. Alongside it, a run of query fixes removes wrong TotalResults counts and broken Include() joins on the document's own id. Several smaller changes cut needless database round trips and correct foreign key and tenancy handling.
Changelog entry
- Marten 9.50.3 released with Native AOT, hard stream delete, two schema-naming fixes and three behavior changes. Release
- Added TombstoneStream(Guid) and TombstoneStream(string) on session.Events for hard stream delete. Pull request #5674
- Stats() with Include(), Select() and Take() now reports TotalResults as the number of matches, not the page size. Pull request #5660
- Fixed Include() joined on the queried document's own id failing when the query also calls Stats(). Pull request #5655
- Fixed Include() joined on the queried document's own id failing when the queried document has duplicated fields. Pull request #5651
- LoadManyAsync with no ids no longer runs a query against the database. Pull request #5681
- Archiving a stream under archived-stream partitioning now moves the tag rows too. Pull request #5679
- Custom foreign key names are preserved under conjoined tenancy, and generated names are shorter. Pull request #5678
- DocumentStore now overrides FindDatabaseForTenantAsync through the store's tenancy without provisioning unknown tenants. Pull request #5659
- FetchMaxEventSequenceAsync consults the catalog before reading
mt_events. Pull request #5656 - Commits that only start streams skip the inline snapshot lookup query. Pull request #5671
- Marten 9.50.2 released as a maintenance bump; nothing in shipped packages changed. Release
Marten 9.50.3 is out: Native AOT, hard stream delete via TombstoneStream, two schema-naming fixes and three behavior changes to check before upgrading. Also this week: TotalResults now counts matches, and Include() joins on the document's own id no longer fail.
Marten 9.50.3 is out. It adds Native AOT support and hard stream delete through TombstoneStream, along with two schema-naming fixes that could not be worked around and three behavior changes worth reading before you upgrade. The rest of the week was mostly correctness: Stats() with Include(), Select() and Take() now returns the number of matches instead of the page size, and Include() joined on the queried document's own id no longer fails with a missing column error. A few queries that always returned nothing now skip the database entirely, and a custom foreign key name is kept under conjoined tenancy.
Week of October 5, 2026
What shipped
- Marten 9.49.0 makes LINQ projections into new objects and structs work under Native AOT. Release
- Projection select clauses are now resolved without runtime code generation, and an anonymous projection is refused with a clear remedy. Pull request #5634
- Keyset cursor paging no longer repeats the first page when a sort key is a NodaTime type. Pull request #5630
- Marten 9.48.0 lets document diagnostics filter and order by document properties. Release
- Count and LongCount with a predicate now translate correctly inside grouped projections. Pull request #5625
- A quick-mode StartStream that loses a race now throws ExistingStreamIdCollisionException instead of a raw duplicate key error. Pull request #5628
- Marten 9.47.0 changes FetchForWriting and FetchLatest consistency behavior and bounds async daemon shutdown. Release
- Document mappings can now carry FillFactor and StorageParameter settings for the underlying table. Pull request #5615
- An async fetch now detects and redoes a read whose snapshot and delta disagree instead of returning a null or stale aggregate. Pull request #5616
- An inline EF Core projection save now needs one pooled connection instead of two. Pull request #5609
Why it matters
This week focused on making the LINQ projection path usable under Native AOT and on closing consistency gaps in async fetches. It also fixed concrete production problems, including repeated pages in keyset paging and inline EF Core projections losing their row to a retried commit. Several releases shipped together, so the changelog and behavior notes are worth reading before upgrading.
Changelog entry
- Marten 9.49.0: LINQ projections into new objects and structs work under Native AOT. Release
- Closed the struct-constrained half of the Native AOT projection gap. Pull request #5636
- Projection select clauses resolve without runtime code generation; anonymous projections are refused with a remedy. Pull request #5634
- Fixed keyset cursor paging repeating the first page when a sort key is a NodaTime type. Pull request #5630
- Marten 9.48.0: document diagnostics apply Where, OrderBy and Arguments. Release
- Fixed Count and LongCount with a predicate in grouped projections. Pull request #5625
- Quick-mode StartStream collisions now throw ExistingStreamIdCollisionException. Pull request #5628
- Marten 9.47.0: FetchForWriting and FetchLatest consistency changes, bounded async daemon shutdown. Release
- Document mappings expose FillFactor and StorageParameter for table storage parameters. Pull request #5615
- Async fetches detect and redo reads whose snapshot and delta disagree. Pull request #5616
- Inline EF Core projection saves now need one pooled connection. Pull request #5609
- Backported the skip-ahead probe fixes to 8.x. Pull request #5602
Marten 9.49.0 makes LINQ projections work under Native AOT. 9.48.0 adds document diagnostics filtering and ordering. Also fixed repeated keyset pages with NodaTime sort keys, grouped Count with a predicate, and async fetch consistency gaps.
Marten shipped several releases this week. 9.49.0 makes LINQ projections into new objects and structs work under Native AOT, with projection select clauses resolved without runtime code generation. 9.48.0 lets IDocumentStoreDiagnostics.QueryDocumentsAsync apply Where, OrderBy and Arguments. We also fixed keyset cursor paging repeating the first page when a sort key is a NodaTime type, Count and LongCount with a predicate inside grouped projections, a quick-mode StartStream collision throwing a raw duplicate key error, and async fetches whose snapshot and delta reads disagree returning a null or stale aggregate. Inline EF Core projections now use one pooled connection per save and no longer lose their row to a retried commit. 9.47.0 changed FetchForWriting and FetchLatest consistency behavi
Week of September 28, 2026
What shipped
- Marten 9.46.0 ships resiliency and Native AOT improvements, surfacing failures that were previously absorbed, including stopping retries of command timeouts on reads. Release
- Strong-typed document IDs now work under Native AOT by rooting generic instantiations at compile time. Pull request #5595
- Native AOT decimal comparison limitation documented: plain LINQ filters on decimals fail in natively-published binaries. Pull request #5599
- Event daemon no longer double-retries by removing redundant retry layers between the daemon's event loader and the underlying session. Pull request #5593
- AdvisoryLock moved into Marten from Weasel.Postgresql to fix daemon shutdown stalls. Pull request #5572
- PrefixSearch now escapes tsquery operators in search strings to prevent syntax errors. Pull request #5571
- Connection lifetime failure states added to AmbientTransactionLifetime and ExternalTransaction, preventing unsafe reuse. Pull request #5598
- Async serializable session builders now properly initialize AutoClosingLifetime and respect sticky connection settings. Pull request #5594
- Write retry attempts now each get their own exception list to prevent cross-attempt interference. Pull request #5591
- Quick append operations null DCB tag slots to prevent corruption when events lack tags. Pull request #5570
Why it matters
This week brings critical fixes for Native AOT support, resiliency improvements that surface previously hidden failures, and data integrity fixes for concurrent operations. The shift toward explicit error handling in retry paths and connection lifecycle management makes failure modes visible, helping developers catch issues earlier.
Changelog entry
- Command timeouts no longer retried on reads Release
- Strong-typed document IDs now work under Native AOT Pull request #5595
- Native AOT decimal comparison limitation documented Pull request #5599
- Connection failure states added for caller-owned lifetimes Pull request #5598
- Async serializable session builders fixed Pull request #5594
- Daemon event loader stops double-retrying Pull request #5593
- Removed console-only exception logging Pull request #5592
- Write retries now use separate exception lists Pull request #5591
- AdvisoryLock moved into Marten, daemon shutdown stalls fixed Pull request #5572
- PrefixSearch escapes tsquery operators Pull request #5571
- Quick append tag slot corruption fixed Pull request #5570
- JasperFx upgraded to 2.80.2 for AOT improvements Pull request #5590
Marten 9.46.0: Native AOT resiliency improvements, timeout retry changes, and failure visibility. Five behaviour changes surface issues previously absorbed. See the release notes for details on upgrade impact.
Marten 9.46.0 focuses on resiliency and Native AOT. Command timeouts no longer retry automatically on reads—they now reach application code on first attempt. Strong-typed document IDs work under Native AOT, connection lifetimes track failure states, and the daemon's event loader stops double-retrying. Five behaviour changes worth reviewing if you upgrade.
Week of September 21, 2026
What shipped
- DocumentConjoinedTenancyCompliance enrolled with forwarders and gates, with all 10 facts of the test suite passing. Pull request #5524
- DeleteAllTenantDataAsync corrected to pass the resolved tenant id instead of the raw id to TenantDataCleaner. Pull request #5523
- IEventStore.OpenReadOnlyEventStore() made tenant-aware so the read-only tier is reachable. Pull request #5522
- TenantIdStyle.ForceLowerCase now applied at all boundaries where tenant ids are stamped or keyed, not just resolved. Pull request #5521
- README contributor sections rewritten to reflect current test, PostgreSQL, and documentation workflows. Pull request #5515
- UpdateProjectionProgress fixed to check the row count of every progression write, not just the first. Pull request #5507
- GroupJoin().SelectMany() outer projection fixed and GROUP BY now renders correctly over joins. Pull request #5469
- Select() projections fixed to omit absent keys instead of projecting them as explicit JSON nulls. Pull request #5462
- QuickWithServerTimestamps StartStream now routed through
mt_quick_append_eventsfor consistent handling. Pull request #5456
Why it matters
This week delivers tenant identity consistency fixes across multiple code paths, correctness improvements for projection progress tracking and LINQ queries, and documentation updates for contributors. These fixes address real production issues and edge cases in event sourcing, tenancy, and query projection.
Changelog entry
- Marten 9.40.0: archiving projections now decide one action per batch rather than per event Release
- DocumentConjoinedTenancyCompliance enrolled with all 10 test suite facts passing Pull request #5524
- DeleteAllTenantDataAsync passes resolved tenant id to TenantDataCleaner Pull request #5523
- IEventStore.OpenReadOnlyEventStore() is now tenant-aware Pull request #5522
- TenantIdStyle.ForceLowerCase applied at stamping and keying boundaries Pull request #5521
- README working-with-code and documentation sections rewritten for current workflows Pull request #5515
- Diagnostic event-store reads answer no results when event store is inactive Pull request #5512
- UpdateProjectionProgress checks row count of every progression write Pull request #5507
- Skip-ahead loader reports the requested floor, not the adjusted floor Pull request #5506
- GroupJoin().SelectMany() outer projection fixed and GROUP BY renders over joins Pull request #5469
- Duplicated-field column names quoted in closed-shape document storage Pull request #5470
- Select() projections omit absent keys instead of projecting explicit JSON nulls Pull request #5462
- Documentation added for unit testing event-sourced handlers with StubEventStream Pull request #5463
- QuickWithServerTimestamps StartStream routed through
mt_quick_append_eventsPull request #5456
Marten 9.40.0: tenant id consistency fixes, projection progress row count check, GroupJoin/SelectMany LINQ correction, and Select() null handling. Read the release notes for the archiving behaviour change if you use projections.
Marten 9.40.0 ships this week with fixes across tenancy, projections, and LINQ queries. Tenant id handling is now consistent at all boundaries where ids are stamped or keyed. Projection progress tracking checks every write instead of just the first. GroupJoin().SelectMany() outer projections work correctly. Select() projections no longer embed explicit JSON nulls for absent keys. The README is updated for current contributor workflows. One behaviour change: archiving projections now decides one action per batch rather than per event.
Week of September 14, 2026
What shipped
- Marten 9.37.0 shipped with eighteen commits fixing silent correctness bugs in vector and hybrid search that returned wrong rows in plausible order. Release
- Marten.PgVector moved onto the shared vector search surface from JasperFx.Events.Vectors, aligning Marten with other stores on a common API. Pull request #5432
- Vector and hybrid search now materialize rows through the document storage's selector, so document hierarchies preserve subtype information instead of losing it. Pull request #5443
- Vector searches now run on the session's connection instead of opening their own pooled connection, so they see uncommitted writes within a transaction. Pull request #5449
- Vector search now sizes hnsw.ef_search to the requested limit, so searches for more than 40 rows return the full result instead of silently capping at 40. Pull request #5438
- VectorProjection is now tenant-aware under conjoined tenancy, preventing embeddings from all tenants going into one table. Pull request #5435
- Session.Patch() no longer re-stamps
mt_last_modifiedwith UTC offsets that get reinterpreted in the session timezone. Pull request #5430 - Full text search now warns when it falls back to an unindexed whole-document scan instead of using a configured index. Pull request #5437
- Hybrid search now refuses ColumnWeights by name rather than silently ignoring them, following JasperFx 2.72.0. Pull request #5447
- DocumentSearchCompliance from JasperFx ran against Marten's engine for the first time, finding one real defect in eleven test facts. Pull request #5434
Why it matters
Marten.PgVector was shipped in 9.36.0 but contained silent correctness bugs where searches returned wrong rows. 9.37.0 audited the entire search surface and fixed eighteen issues discovered in that audit. The alignment with JasperFx's shared vector contracts means application code can now use a single API across multiple stores.
Changelog entry
- Marten 9.36.0 backfilled: Marten.PgVector moved to a vector search that can be indexed and called portably, sharing the JasperFx contracts Release
- Marten 9.37.0: eighteen commits fixing silent vector and hybrid search correctness bugs Release
- Vector searches now run on the session's connection, so they see uncommitted writes Pull request #5449
- VectorProjection content hash reads moved to session operations instead of opening separate connections Pull request #5448
- Session.Patch() no longer re-stamps
mt_last_modifiedwith UTC offset expressions that get reinterpreted in session timezone Pull request #5430 - Hybrid search now refuses ColumnWeights by name instead of silently ignoring them Pull request #5447
- Fixed stacked doc comments in PgVectorExtensions.VectorIndex Pull request #5444
- Vector and hybrid search materialize rows through document storage's selector, preserving subtypes in document hierarchies Pull request #5443
- Added documentation for full text search warning when no index matches the configured regConfig Pull request #5442
- Inline VectorProjection events now written under their own tenant in conjoined tenancy Pull request #5441
- Vector search now sizes hnsw.ef_search to the requested limit Pull request #5438
- Database-scoped and store-global explorer reads fixed for multi-database stores Pull request #5431
- Full text search warns when it falls back to unindexed whole-document scan Pull request #5437
- VectorProjection now tenant-aware under conjoined tenancy Pull request #5435
- DocumentSearchCompliance compliance suite enrolled from JasperFx, finding one defect Pull request #5434
- Marten.PgVector adopted shared vector and hybrid search surface from JasperFx.Events.Vectors Pull request #5432
- Pre-9.36 IEmbeddingProvider and DistanceFunction kept working alongside shared contracts Pull request #5417
- Hybrid search implemented with reciprocal rank fusion over full-text and vector legs Pull request #5415
- VectorIndex added for HNSW index declaration on vector searches Pull request #5414
Marten 9.37.0: fixed eighteen silent correctness bugs in vector and hybrid search found by auditing the surface 9.36.0 shipped. Searches returned wrong rows in plausible order. All fixed.
Marten 9.37.0 shipped this week with eighteen correctness fixes for vector and hybrid search. Every bug was silent—searches returned plausible answers in the right order, but they were wrong. The 9.36.0 release introduced PgVector search; 9.37.0 audited the entire surface and fixed what it found. Marten.PgVector now shares JasperFx's store-neutral vector contracts, aligning with other stores on one API.