What JasperFx/marten shipped
Written by FoxPlug from public releases; not affiliated with Martendb. An automatic summary of the public release, pull request and commit data of github.com/JasperFx/marten. Martendb did not write it and does not use or endorse FoxPlug. Every line links to the public change it describes.
Get a weekly update like this for your product, free
Week of September 21, 2026
What shipped
- Marten 9.40.0 released with a behaviour change: archiving projections now decides one action per batch rather than per event [0]. Release
- DocumentConjoinedTenancyCompliance enrolled with forwarders and gates, with all 10 facts of the test suite passing [1]. Pull request #5524
- DeleteAllTenantDataAsync corrected to pass the resolved tenant id instead of the raw id to TenantDataCleaner [2]. Pull request #5523
- IEventStore.OpenReadOnlyEventStore() made tenant-aware so the read-only tier is reachable [3]. Pull request #5522
- TenantIdStyle.ForceLowerCase now applied at all boundaries where tenant ids are stamped or keyed, not just resolved [4]. Pull request #5521
- README contributor sections rewritten to reflect current test, PostgreSQL, and documentation workflows [6]. Pull request #5515
- UpdateProjectionProgress fixed to check the row count of every progression write, not just the first [11]. Pull request #5507
- GroupJoin().SelectMany() outer projection fixed and GROUP BY now renders correctly over joins [28]. Pull request #5469
- Select() projections fixed to omit absent keys instead of projecting them as explicit JSON nulls [36]. Pull request #5462
- QuickWithServerTimestamps StartStream now routed through
mt_quick_append_eventsfor consistent handling [38]. 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 [1]. Release
- Marten.PgVector moved onto the shared vector search surface from JasperFx.Events.Vectors, aligning Marten with other stores on a common API [18]. 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 [9]. 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 [3]. 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 [12]. Pull request #5438
- VectorProjection is now tenant-aware under conjoined tenancy, preventing embeddings from all tenants going into one table [16]. Pull request #5435
- Session.Patch() no longer re-stamps
mt_last_modifiedwith UTC offsets that get reinterpreted in the session timezone [5]. Pull request #5430 - Full text search now warns when it falls back to an unindexed whole-document scan instead of using a configured index [14]. Pull request #5437
- Hybrid search now refuses ColumnWeights by name rather than silently ignoring them, following JasperFx 2.72.0 [6]. Pull request #5447
- DocumentSearchCompliance from JasperFx ran against Marten's engine for the first time, finding one real defect in eleven test facts [17]. 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.