chore: Bump Marten and 3 others#304
Open
dependabot[bot] wants to merge 1 commit into
Open
Conversation
Bumps Marten from 8.37.2 to 9.5.2 Bumps WolverineFx.Http from 5.39.3 to 6.4.3 Bumps WolverineFx.Http.Marten from 5.39.3 to 6.4.3 Bumps WolverineFx.Marten from 5.39.3 to 6.4.3 --- updated-dependencies: - dependency-name: Marten dependency-version: 9.5.2 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: WolverineFx.Http dependency-version: 6.4.3 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: WolverineFx.Http.Marten dependency-version: 6.4.3 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: WolverineFx.Marten dependency-version: 6.4.3 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: WolverineFx.Http dependency-version: 6.4.3 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: WolverineFx.Http.Marten dependency-version: 6.4.3 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated Marten from 8.37.2 to 9.5.2.
Release notes
Sourced from Marten's releases.
9.5.2
Bug fixes
mt_archive_streamemits explicit column lists in its INSERT…SELECT, survivingALTER TABLE ADD COLUMNmigrations that reorder the physical column layout (previously failed with42804after a column was added tomt_events).BulkInsertEventsAsyncwritesmt_streams.typefrom theStreamAction'sAggregateType, restoringUseMandatoryStreamTypeDeclarationsupport on the bulk path.AddMartenManagedTenantsAsyncno longer leaves a half-installed schema underAutoCreate.None. The admin call eagerly applies the events feature via a per-featureCreateMigrationAsync+ scopedCreateOrUpdateapply, so the next append succeeds end-to-end on a virgin schema (previously failed with42P01/42883).e.tenant_id = t.tenant_id, eliminating own-event duplication under per-tenant sequences withUseTenantPartitionedEvents.Test coverage
TenantPartitionedEventsTestsproject (~170 tests across 50 files) covering append / read / projections / admin / DCB / async daemon / regressions underUseTenantPartitionedEvents.FlatTableProjection), #4651 (DetermineActionAsync), #4652 (doc-tables-NOT-partitioned-by-default invariant).AutoCreate.CreateOnlycontinues to work via the lazy schema-apply path, by design (no SUT change needed).Known follow-up — NOT in this release
AddGlobalProjection × UseTenantPartitionedEventsfailsMT002because the global event decorator writes to the*DEFAULT*tenant slot, which can't be a Postgres partition suffix. Test pin is in master asserting the throw; the underlying fix requires either routing global-aggregate events through a sibling non-partitioned table or reserving a default-tenant partition suffix. Marked as an enhancement, deferred to a later release.🤖 Release notes assembled with Claude Code
9.5.1
What's Changed
Full Changelog: JasperFx/marten@V9.5.0...V9.5.1
9.5.0
The minor point bump here is because of some CritterWatch related features, otherwise this is all bug fixes
What's Changed
New Contributors
Full Changelog: JasperFx/marten@V9.4.0...V9.5.0
9.4.0
Marten 9.4.0
Per-tenant event partitioning and a tenant-aware async projection daemon (#4596 / CritterWatch#209). Built on JasperFx 2.5.0.
Highlights
opts.Events.UseTenantPartitionedEvents = true. On top of conjoined event tenancy, Marten partitionsmt_events/mt_streamsbytenant_id(native PostgreSQL LIST partitioning), gives each tenant its own event sequence (mt_events_sequence_{suffix}), and keysmt_event_progressionby(name, tenant_id). Removes the single shared event store as a scalability bottleneck across tenants.{Name}:Allshard.Constraints for per-tenant partitioning
Validated at
DocumentStoreconstruction:Events.TenancyStyle = TenancyStyle.Conjoined.EventAppendMode.Quick/QuickWithServerTimestamps);EventAppendMode.Richis out of scope.Events.UseArchivedStreamPartitioning(sub-partitioning by bothtenant_idandis_archivedis a planned follow-up).The flag defaults to
false; existing stores keep the global append path byte-for-byte.Dependencies
SubscriptionAgentoptimized-rebuild double-load fix).Documentation
9.3.5
What's Changed
Full Changelog: JasperFx/marten@V9.3.4...V9.3.5
9.3.4
What's Changed
New Contributors
Full Changelog: JasperFx/marten@V9.3.3...V9.3.4
9.3.3
What's Changed
Full Changelog: JasperFx/marten@V9.3.2...V9.3.3
9.3.2
What's Changed
Full Changelog: JasperFx/marten@V9.3.1...V9.3.2
9.3.1
Marten 9.3.1
Fix release — bumps all four
JasperFx.*dependencies to 2.2.1.JasperFxJasperFx.EventsJasperFx.Events.SourceGeneratorJasperFx.SourceGeneratorNo Marten-side code changes — straight dependency bump (#4585).
Full Changelog: JasperFx/marten@V9.3.0...V9.3.1
9.3.0
Marten 9.3.0
The big-ticket items in this release are binary event serialization (#4515) and the PostGIS + pgvector companion packages lifted into the Marten repo from CritterWatch.
Major
Binary event serialization for the event store (#4515 — landed across #4578, #4581, #4583, #4584). Opt individual event types into a binary wire format (MemoryPack out of the box, or any
IEventBinarySerializeryou bring) on a per-event-type basis. JSON-serialized and binary-serialized events coexist in the samemt_eventstable so the feature can be turned on in an existing system with no migration of existing data. Works on everyEventAppendMode(Rich + Quick + QuickWithServerTimestamps) and throughBulkEventAppender. New optional NuGet:Marten.MemoryPack. See the binary-serialization docs for the design, registration, and the versioned-event-types schema-evolution recommendation.PostGIS + pgvector companion packages (#4576). Two new optional NuGets imported from CritterWatch:
Marten.PostGIS—UsePostGIS()opt-in that enables thepostgisextension on every database Marten manages (multi-tenant aware), wires NetTopologySuite + GeoJSON serialization, and exposes four spatial query helpers (NearestToAsync,WithinDistanceAsync,ContainingAsync,IntersectingAsync). See the PostGIS docs.Marten.PgVector—UsePgVector()opt-in that enables thevectorextension on every database (also addresses #2515 — extensions in tenant databases).VectorSearchAsyncfor similarity search plus an embedding-awareVectorProjectionbase class. See the pgvector docs.Fixes
CreatedAt.MapTo()regression in v9 (#4577). The closed-shape storage rewrite ported every other metadata-column read-back but missedmt_created_at; this restores the v8 behavior where a[CreatedAt]-annotated /m.CreatedAt.MapTo(...)-mapped member is populated after a load.Build / Release
Pack target updated (#4582).
Marten.PostGIS,Marten.PgVector, andMarten.MemoryPackare now included in the NukePacktarget — without this they would silently never reach NuGet. 9 packages ship in 9.3.0 (up from 6):Marten,Marten.Newtonsoft,Marten.NodaTime,Marten.AspNetCore,Marten.EntityFrameworkCore,Marten.SourceGenerator,Marten.PostGIS,Marten.PgVector,Marten.MemoryPack.Weasel 9.0.2 dependency bump (JasperFx/weasel#299). Fixes
PostgresqlMigrator.executeWithConcurrencyRetryAsyncto reopen a Closed/Broken connection between retry attempts — eliminates the intermittentConnection is not openfailure surfaced under concurrent migration races.Documentation updates
Pages added or updated in 9.3.0:
Local docker
The local
docker-compose.yml(from #4576) layerspostgresql-17-postgis-3+postgresql-17-pgvectoron the official multi-archpostgres:17image so the Marten test suite can exercise the new extensions locally. PLv8 was dropped — Marten core SQL no longer requires it.Full Changelog: JasperFx/marten@V9.2.1...V9.3.0
9.2.1
What's Changed
Full Changelog: JasperFx/marten@V9.2.0...V9.2.1
9.2.0
Marten 9.2.0
Features & changes
IEventStore.AllDatabases()onDocumentStore(#4570, #4571). Implements the store-agnostic database accessor added toJasperFx.Events.IEventStore. Delegates straight toITenancy(mirroringIMartenStorage.AllDatabases()) and projects toIEventDatabase, so store-neutral monitoring/tooling can reach every database to call the read abstractions (AllProjectionProgress,FetchDeadLetterCountsAsync/CountDeadLetterEventsAsync) even when onlyIEventStoreis registered in DI.Dependencies
JasperFx.*packages to 2.2.0 (JasperFx,JasperFx.Events,JasperFx.Events.SourceGenerator,JasperFx.SourceGenerator).Full Changelog: JasperFx/marten@V9.0.2...V9.2.0
9.0.2
Marten 9.0.2
A patch release that fixes #4557 — self-aggregating projections failing for consumers that reference only the
Martenpackage.Fixes
#4557 — Self-aggregating projections now work out of the box. Marten 9 dispatches conventional
Apply/Create/ShouldDeleteprojection methods through the compile-timeJasperFx.Events.SourceGeneratorand has no runtime fallback, but the generator shipped as aDevelopmentDependencyand never flowed to a consumer that only referenced theMartenpackage — surfacing asInvalidProjectionException: No source-generated dispatcher found ...atDocumentStore.For(...). Marten now bundles the analyzer in its own NuGet package, so a plain<PackageReference Include="Marten" />runs the generator automatically. (#4558)Self-aggregating
recordaggregates work without aSnapshot<T>call site and withoutpartial. BumpedJasperFx.Events/JasperFx.Events.SourceGeneratorto 2.1.1 (JasperFx/jasperfx#367): the generator now emits a self-aggregating evolver for arecordfrom its own declaration (parity with classes), which also fixes the cross-assembly case where the aggregate type is defined in a different assembly than its registration.Docs. Corrected the migration guide's projection section, which incorrectly stated Marten falls back to a runtime evolver lookup for non-
partialconvention projections; documented that self-aggregatingSnapshot<T>types do not need to bepartial(only projection subclasses do).Dependency bumps
JasperFx.Events2.1.0 → 2.1.1JasperFx.Events.SourceGenerator2.1.0 → 2.1.1No public API changes from 9.0.1.
9.0.1
Marten 9.0.1
A patch release on the Critter Stack 2026 foundation, rolling up the latest JasperFx 2.0.1 / JasperFx.Events 2.1.0 / Weasel 9.0.1 dependencies along with several source-generator and reliability fixes.
Foundation bumps
Fixes
requiredmembers on self-aggregating snapshot types no longer break generated evolver construction;default!is emitted only when a public parameterless constructor exists, otherwiseRuntimeHelpers.GetUninitializedObjectis used.[ReadAggregate]aggregate parameters generate correctly.IEventDatabasedead-letter count reads (CountDeadLetterEventsAsync/FetchDeadLetterCountsAsync) are implemented onMartenDatabasevia LINQ over theDeadLetterEventdocument.SystemTextJsonSerializer.UseTypeInfoResolver) for AOT/trimming-friendly metadata.feature_flag_positiveadvisory-lock contention (distinctApplyChangesLockId, #4553) and the conjoined multi-tenantquery_before_savingXX000: tuple concurrently updatedmigration-DDL race (resolved upstream in Weasel 9.0.1 / weasel#293).No public API breaking changes from 9.0.0.
RestoreV8Defaults()continues to revert the 9.0 default flips.9.0.0
Marten 9.0.0 — Critter Stack 2026
The headline release of the Critter Stack 2026 wave, on the final JasperFx 2.0 + Weasel 9.0 foundation.
Highlights
net9.0;net10.0.JasperFx.RuntimeCompileris no longer a dependency. Document/event storage is hand-written closed-shape; compiled queries useMarten.SourceGenerator. Nocodegen writestep for Marten.Staticmode; lazy document-mapping materialization; per-query handler-factory caching.IStorageOperationrebased onWeasel.Core; async-daemon distributor concretes consumed fromJasperFx.Events.Daemon;OperationRole/BulkInsertModerelocated toWeasel.Core.QuickWithServerTimestampsappend mode, advanced async tracking, bigint events, lightweight default sessions, System.Text.Json default — all revertable viaRestoreV8Defaults().IRevisioned.Versionstaysint(V8-compatible); newILongVersioned(long) forMultiStreamProjectiondocuments.FetchForWritingByTags<T>for identity-less boundary aggregates.See the migration guide (
docs/migration-guide.md). Master plan: marten#4349. Ships in lockstep with Polecat 4.0.Commits viewable in compare view.
Updated WolverineFx.Http from 5.39.3 to 6.4.3.
Release notes
Sourced from WolverineFx.Http's releases.
6.4.1
Just hardening Wolverine against a condition that only happens (we think) in CritterWatch
What's Changed
Full Changelog: JasperFx/wolverine@V6.4.0...V6.4.1
6.4.0
This release was 100% about CritterWatch and does not impact any other functionality
What's Changed
Full Changelog: JasperFx/wolverine@V6.3.2...V6.4.0
6.3.2
What's Changed
Full Changelog: JasperFx/wolverine@V6.3.0...V6.3.2
6.3.0
The top line change here was a lot of work to make Wolverine able to pre-generate code as F# in addition to the existing C# model.
What's Changed
Full Changelog: JasperFx/wolverine@V6.2.2...V6.3.0
6.2.2
Patch release on top of 6.2.1.
🐛 Bug Fixes / Codegen
#2963 (closes #2958): EF Core transaction middleware + post-save cascade flush
The HTTP-handler codegen path under the EF Core transaction middleware + outbox cascade (GH-536) no longer fails handler compilation. Two related codegen issues addressed in this PR:
var messageContextdeclaration in the generated handler. Cherry-picked from #2959, originally authored by @kentcooper — credit preserved on commit9df45bfde. Root cause:MessageBusSourcewas returning a freshCreateMessageContextWithMaybeTenantFrameper call; once cached + always returning the concreteMessageContext, the duplicate goes away.'IMessageContext' does not contain a definition for EnqueueCascadingAsync— surfaced after the cache fix because once the source produced a concreteMessageContextVariable, the downstreamCaptureCascadingMessagesframe still declared itsMethodCalltarget astypeof(IMessageContext)and emitted a bad((IMessageContext)messageContext).EnqueueCascadingAsync(…)cast. Fixed by re-targetingCaptureCascadingMessagesto the concreteMessageContexttype — mirrors the existingFlushOutgoingMessagespattern. Latent insrc/Wolverine/Runtime/Handlers/CaptureCascadingMessages.cssince020e79013e(2022-09-16); the variable-cache fix is what flipped it from masked to visible.📦 Dependency bumps
JasperFx+JasperFx.Events+JasperFx.Events.SourceGenerator+JasperFx.SourceGenerator2.2.1 → 2.2.3JasperFx.RuntimeCompilerunchanged (own 5.x line, stays at 5.0.0)Upstream JasperFx 2.2.2 release: https://github.com/JasperFx/jasperfx/releases/tag/V2.2.2 (
Fix source-created codegen variable reuse, #392). 2.2.3 was a same-day version-bump-only re-roll.📖 Documentation
DeadLetterEnvelopeGetRequest/DeadLetterEnvelopeResults/DeadLetterEnvelopeIdsRequestsignatures — the docs still described the pre-5 cursor-based pagination (StartId/NextId) and the legacyDeadLetterEnvelopesFoundResponsewrapper. Updated for offset-basedPageNumberpagination, the multi-storeIReadOnlyList<DeadLetterEnvelopeResults>response shape, and tenant-awareIdsrequest bodies.🧪 Known issues
SharedMemorytransport does not serialize envelopes on cross-host send. Surfaces as aMartenTests.Distribution.with_ancillary_stores.spread_out_over_multiple_hostsfailure whereAssignAgentsystem commands arrive at the destination node with emptyData/MessageTypeand the receive pipeline can't deserialize them. Long-standing — the marten CI workflow has been red on this test through V6.2.0 and V6.2.1, predates this release line entirely. Unblocked the V6.2.2 cycle by adding[Fact(Skip = "…")]referencing #2965; the underlying serialization bug is tracked separately and is out of scope for a JasperFx pin-bump patch release.Full changelog: JasperFx/wolverine@V6.2.1...V6.2.2
6.2.1
Patch release picking up upstream JasperFx 2.2.1 fixes. No Wolverine code changes — pure dependency bump.
Bumped pins
JasperFxJasperFx.EventsJasperFx.Events.SourceGeneratorJasperFx.SourceGeneratorUnchanged
JasperFx.RuntimeCompilerRelated links
6.2.0
Bug-fix + feature release on top of 6.1.0 — 13 PRs.
✨ New features
Custom
Result<T>Support — #2952 (refs #2221)First three phases of native
Result<T>-style handler return-value support:ResultPolicyregistry, handler-side unwrapping seams, and caller-sideInvokeAsync<T>unwrap. Lays the groundwork for integrating with libraries likeErrorOr,OneOf,FluentResults, etc.DbContext Abstractions for EF Core Transaction Middleware — #2919, #2954
The EF Core transaction middleware now binds correctly when handler parameters are declared as interface or abstract base abstractions over a concrete
DbContext. Multiple abstractions to the sameDbContextare supported in a single handler — the runtime resolves them all to the same scoped instance, and the transaction still auto-applies.📖 DbContext Abstractions docs
🚀 Performance
Outgoing Envelope Pooling — #2956 (closes #2955)
MessageRouter.RouteForPublishnow acquires from the runtime envelope pool (originally introduced in #2741 for the Executor sites in 6.1.0) when the route's sender is anInlineSendingAgentorBufferedSendingAgent. Measured −504 B/op (−90 %) on the transport-bound publish/send paths in the CritterStackScalability harness, with ~10× fewer Gen0 collections per 1k ops.DurableSendingAgent, local-queue agents, andISenderRequiresCallbacksenders are explicitly excluded — different lifecycle plumbing required, tracked as follow-ups.🐛 Bug fixes
Marten / Polecat
[ReadAggregate]/[DocumentExists]handlers (closes #2941).chain.AncillaryStoreTypein Phase A so the inbox-routing map sees[MartenStore](closes #2944).Persistence (Postgres / MySQL)
PostgresqlQueueidentifiers through Weasel'sPostgresqlIdentifier.Shorten()so long queue names don't overflow Postgres's 63-byte identifier limit (closes #2942).PersistNodeRecordSQL with unquoted schema (MySQL, closes #2940).Pulsar
KeyNotFoundExceptionacking batch messages on partitioned topics (supersedes #2883).Distributed agents
InvokeAsync<T>reply timeout 10 s → 30 s (closes #2949).Quality
📖 Documentation
📦 Dependency bumps
Full changelog: JasperFx/wolverine@V6.1.0...V6.2.0
... (truncated)
6.1.0
Wolverine 6.1.0
Minor release. Critter Stack dependency refresh, plus the rollup of the entire post-6.0.0
6.0.xline — most significantly the AOT runtime-scanning-elimination work and a new command-line handler-discovery diagnostic.Dependencies
9.0.1→9.2.02.1.3→2.2.0(#2938)4.1.1(unchanged — already latest)5.0.0(unchanged — own 5.x line)Marten 9.2.0 now bundles
JasperFx.Events.SourceGeneratoras an analyzer, so projects referencingWolverine.Martenreceive it transitively. The previously-explicit analyzer references were dropped from the 8 Marten-referencing projects to avoid running the generator twice, which produced duplicateEvolve/*Evolverbuild errors (#2939).PolecatTestsretains its explicit reference because Polecat does not bundle the generator.New & Noteworthy
AOT: eliminate runtime assembly scanning — AOT Publishing. Static-mode apps no longer scan assemblies at startup; discovery now flows through source-generated manifests:
[WolverineHandlerModule]assemblies, with no filesystem probe — #2905 / #2935TypeQuery— #2909 / #2932GetTypes()scan — #2908 / #2936Command-line handler-discovery diagnostic — Command Line Integration · Command Line Diagnostics tutorial. New
dotnet run -- wolverine-diagnostics describe-handlers <Type>runsDescribeHandlerMatchfrom the CLI so you can troubleshoot handler discovery without editing your bootstrapping code — #2921 / #2923Build-time OpenAPI generation — Command Line Integration.
dotnet run -- openapigenerates the OpenAPI document without starting the host (no database/broker required) — #2903 / #2911SQS fair queues on standard queues — support
MessageGroupIdon standard Amazon SQS queues — #2886 / #2889SignalR
ClaimsPrincipal— the connection'sClaimsPrincipalis now exposed onSignalREnvelope— #2927 / #2937EF Core transactional outbox timing fix — the EF Core transaction and outbox flush now complete before the HTTP response is written — #2917 / #2920
Mixed-lifetime
IEnumerable<T>support; Lamar removed — handlers depending on a mixed singleton/scopedIEnumerable<T>now resolve every element correctly; Lamar is no longer used or supported, and the built-inServiceProvideris the container — #2896 / #2914Aggregate handler naming clarity — clarified and guarded the
*AggregateHandlernaming convention vs.[ReadAggregate]— #2924Production code-generation guidance — Code Generation. How to drop Roslyn from production images, with a linked
CqrsMinimalApisample — #2900 / #2912Bug fixes
Senderroutes built during description mode — #2897 / #2899What's Changed
... (truncated)
6.0.0
Wolverine 6.0.0 — Critter Stack 2026
The messaging/orchestration release completing the Critter Stack 2026 wave, on the final foundation (JasperFx 2.0 / Weasel 9.0 / Marten 9.0 / Polecat 4.0).
Highlights
net9.0;net10.0.WolverineFxno longer ships Roslyn. Apps in the defaultTypeLoadMode.Dynamicmust addWolverineFx.RuntimeCompilation, or pre-generate viacodegen write+TypeLoadMode.Static(the trimmer then drops Roslyn). See the migration guide.ServiceLocationPolicy.NotAllowedis the default (BREAKING) — restructure registrations, allow-list per type, or callopts.RestoreV5Defaults()to revert.IsAotCompatible=true(except the intentionalWolverineFx.RuntimeCompilation); Static-mode publish drops Roslyn.WolverineFx.Newtonsoft/WolverineFx.Http.Newtonsoft;IForwardsTo<T>discovery now explicit; removed[Obsolete]APIs (EventForwardingToWolverine,RedisTransport.BuildRedisStreamUri,PulsarEndpoint.UriFor).Migration guide: https://wolverinefx.net/guide/migration.html (or
docs/guide/migration.md). Master plan: wolverine#2715. Remaining release-cut comms items tracked in #2745.Commits viewable in compare view.
Updated WolverineFx.Http.Marten from 5.39.3 to 6.4.3.
Release notes
Sourced from WolverineFx.Http.Marten's releases.
6.4.1
Just hardening Wolverine against a condition that only happens (we think) in CritterWatch
What's Changed
Full Changelog: JasperFx/wolverine@V6.4.0...V6.4.1
6.4.0
This release was 100% about CritterWatch and does not impact any other functionality
What's Changed
Full Changelog: JasperFx/wolverine@V6.3.2...V6.4.0
6.3.2
What's Changed
Full Changelog: JasperFx/wolverine@V6.3.0...V6.3.2
6.3.0
The top line change here was a lot of work to make Wolverine able to pre-generate code as F# in addition to the existing C# model.
What's Changed
Full Changelog: JasperFx/wolverine@V6.2.2...V6.3.0
6.2.2
Patch release on top of 6.2.1.
🐛 Bug Fixes / Codegen
#2963 (closes #2958): EF Core transaction middleware + post-save cascade flush
The HTTP-handler codegen path under the EF Core transaction middleware + outbox cascade (GH-536) no longer fails handler compilation. Two related codegen issues addressed in this PR:
var messageContextdeclaration in the generated handler. Cherry-picked from #2959, originally authored by @kentcooper — credit preserved on commit9df45bfde. Root cause:MessageBusSourcewas returning a freshCreateMessageContextWithMaybeTenantFrameper call; once cached + always returning the concreteMessageContext, the duplicate goes away.'IMessageContext' does not contain a definition for EnqueueCascadingAsync— surfaced after the cache fix because once the source produced a concreteMessageContextVariable, the downstreamCaptureCascadingMessagesframe still declared itsMethodCalltarget astypeof(IMessageContext)and emitted a bad((IMessageContext)messageContext).EnqueueCascadingAsync(…)cast. Fixed by re-targetingCaptureCascadingMessagesto the concreteMessageContexttype — mirrors the existingFlushOutgoingMessagespattern. Latent insrc/Wolverine/Runtime/Handlers/CaptureCascadingMessages.cssince020e79013e(2022-09-16); the variable-cache fix is what flipped it from masked to visible.📦 Dependency bumps
JasperFx+JasperFx.Events+JasperFx.Events.SourceGenerator+JasperFx.SourceGenerator2.2.1 → 2.2.3JasperFx.RuntimeCompilerunchanged (own 5.x line, stays at 5.0.0)Upstream JasperFx 2.2.2 release: https://github.com/JasperFx/jasperfx/releases/tag/V2.2.2 (
Fix source-created codegen variable reuse, #392). 2.2.3 was a same-day version-bump-only re-roll.📖 Documentation
DeadLetterEnvelopeGetRequest/DeadLetterEnvelopeResults/DeadLetterEnvelopeIdsRequestsignatures — the docs still described the pre-5 cursor-based pagination (StartId/NextId) and the legacyDeadLetterEnvelopesFoundResponsewrapper. Updated for offset-basedPageNumberpagination, the multi-storeIReadOnlyList<DeadLetterEnvelopeResults>response shape, and tenant-awareIdsrequest bodies.🧪 Known issues
SharedMemorytransport does not serialize envelopes on cross-host send. Surfaces as aMartenTests.Distribution.with_ancillary_stores.spread_out_over_multiple_hostsfailure whereAssignAgentsystem commands arrive at the destination node with emptyData/MessageTypeand the receive pipeline can't deserialize them. Long-standing — the marten CI workflow has been red on this test through V6.2.0 and V6.2.1, predates this release line entirely. Unblocked the V6.2.2 cycle by adding[Fact(Skip = "…")]referencing #2965; the underlying serialization bug is tracked separately and is out of scope for a JasperFx pin-bump patch release.Full changelog: JasperFx/wolverine@V6.2.1...V6.2.2
6.2.1
Patch release picking up upstream JasperFx 2.2.1 fixes. No Wolverine code changes — pure dependency bump.
Bumped pins
JasperFxJasperFx.EventsJasperFx.Events.SourceGeneratorJasperFx.SourceGeneratorUnchanged
JasperFx.RuntimeCompilerRelated links
6.2.0
Bug-fix + feature release on top of 6.1.0 — 13 PRs.
✨ New features
Custom
Result<T>Support — #2952 (refs #2221)First three phases of native
Result<T>-style handler return-value support:ResultPolicyregistry, handler-side unwrapping seams, and caller-sideInvokeAsync<T>unwrap. Lays the groundwork for integrating with libraries likeErrorOr,OneOf,FluentResults, etc.DbContext Abstractions for EF Core Transaction Middleware — #2919, #2954
The EF Core transaction middleware now binds correctly when handler parameters are declared as interface or abstract base abstractions over a concrete
DbContext. Multiple abstractions to the sameDbContextare supported in a single handler — the runtime resolves them all to the same scoped instance, and the transaction still auto-applies.📖 DbContext Abstractions docs
🚀 Performance
Outgoing Envelope Pooling — #2956 (closes #2955)
MessageRouter.RouteForPublishnow acquires from the runtime envelope pool (originally introduced in #2741 for the Executor sites in 6.1.0) when the route's sender is anInlineSendingAgentorBufferedSendingAgent. Measured −504 B/op (−90 %) on the transport-bound publish/send paths in the CritterStackScalability harness, with ~10× fewer Gen0 collections per 1k ops.DurableSendingAgent, local-queue agents, andISenderRequiresCallbacksenders are explicitly excluded — different lifecycle plumbing required, tracked as follow-ups.🐛 Bug fixes
Marten / Polecat
[ReadAggregate]/[DocumentExists]handlers (closes #2941).chain.AncillaryStoreTypein Phase A so the inbox-routing map sees[MartenStore](closes #2944).Persistence (Postgres / MySQL)
PostgresqlQueueidentifiers through Weasel'sPostgresqlIdentifier.Shorten()so long queue names don't overflow Postgres's 63-byte identifier limit (closes #2942).PersistNodeRecordSQL with unquoted schema (MySQL, closes #2940).Pulsar
KeyNotFoundExceptionacking batch messages on partitioned topics (supersedes #2883).Distributed agents
InvokeAsync<T>reply timeout 10 s → 30 s (closes #2949).Quality
📖 Documentation
📦 Dependency bumps
Full changelog: JasperFx/wolverine@V6.1.0...V6.2.0
... (truncated)
6.1.0
Wolverine 6.1.0
Minor release. Critter Stack dependency refresh, plus the rollup of the entire post-6.0.0
6.0.xline — most significantly the AOT runtime-scanning-elimination work and a new command-line handler-discovery diagnostic.Dependencies
9.0.1→9.2.02.1.3→2.2.0(#2938)4.1.1(unchanged — already latest)5.0.0(unchanged — own 5.x line)Marten 9.2.0 now bundles
JasperFx.Events.SourceGeneratoras an analyzer, so projects referencingWolverine.Martenreceive it transitively. The previously-explicit analyzer references were dropped from the 8 Marten-referencing projects to avoid running the generator twice, which produced duplicateEvolve/*Evolverbuild errors (#2939).PolecatTestsretains its explicit reference because Polecat does not bundle the generator.New & Noteworthy
AOT: eliminate runtime assembly scanning — AOT Publishing. Static-mode apps no longer scan assemblies at startup; discovery now flows through source-generated manifests:
[WolverineHandlerModule]assemblies, with no filesystem probe — #2905 / #2935TypeQuery— #2909 / #2932GetTypes()scan — #2908 / #2936Command-line handler-discovery diagnostic — Command Line Integration · Command Line Diagnostics tutorial. New
dotnet run -- wolverine-diagnostics describe-handlers <Type>runsDescribeHandlerMatchfrom the CLI so you can troubleshoot handler discovery without editing your bootstrapping code — #2921 / #2923Build-time OpenAPI generation — Command Line Integration.
dotnet run -- openapigenerates the OpenAPI document without starting the host (no database/broker required) — #2903 / #2911SQS fair queues on standard queues — support
MessageGroupIdon standard Amazon SQS queues — #2886 / #2889SignalR
ClaimsPrincipal— the connection'sClaimsPrincipalis now exposed onSignalREnvelope— #2927 / #2937EF Core transactional outbox timing fix — the EF Core transaction and outbox flush now complete before the HTTP response is written — #2917 / #2920
Mixed-lifetime
IEnumerable<T>support; Lamar removed — handlers depending on a mixed singleton/scopedIEnumerable<T>now resolve every element correctly; Lamar is no longer used or supported, and the built-inServiceProvideris the container — #2896 / #2914Aggregate handler naming clarity — clarified and guarded the
*AggregateHandlernaming convention vs.[ReadAggregate]— #2924Production code-generation guidance — Code Generation. How to drop Roslyn from production images, with a linked
CqrsMinimalApisample — #2900 / #2912Bug fixes
Senderroutes built during description mode — #2897 / #2899What's Changed
... (truncated)
6.0.0
Wolverine 6.0.0 — Critter Stack 2026
The messaging/orchestration release completing the Critter Stack 2026 wave, on the final foundation (JasperFx 2.0 / Weasel 9.0 / Marten 9.0 / Polecat 4.0).
Highlights
net9.0;net10.0.WolverineFxno longer ships Roslyn. Apps in the defaultTypeLoadMode.Dynamicmust addWolverineFx.RuntimeCompilation, or pre-generate viacodegen write+TypeLoadMode.Static(the trimmer then drops Roslyn). See the migration guide.ServiceLocationPolicy.NotAllowedis the default (BREAKING) — restructure registrations, allow-list per type, or callopts.RestoreV5Defaults()to revert.IsAotCompatible=true(except the intentionalWolverineFx.RuntimeCompilation); Static-mode publish drops Roslyn.WolverineFx.Newtonsoft/WolverineFx.Http.Newtonsoft;IForwardsTo<T>discovery now explicit; removed[Obsolete]APIs (EventForwardingToWolverine,RedisTransport.BuildRedisStreamUri,PulsarEndpoint.UriFor).Migration guide: https://wolverinefx.net/guide/migration.html (or
docs/guide/migration.md). Master plan: wolverine#2715. Remaining release-cut comms items tracked in #2745.Commits viewable in compare view.
Updated WolverineFx.Marten from 5.39.3 to 6.4.3.
Release notes
Sourced from WolverineFx.Marten's releases.
6.4.1
Just hardening Wolverine against a condition that only happens (we think) in CritterWatch
What's Changed
Full Changelog: JasperFx/wolverine@V6.4.0...V6.4.1
6.4.0
This release was 100% about CritterWatch and does not impact any other functionality
What's Changed
Full Changelog: JasperFx/wolverine@V6.3.2...V6.4.0
6.3.2
What's Changed
Full Changelog: JasperFx/wolverine@V6.3.0...V6.3.2
6.3.0
The top line change here was a lot of work to make Wolverine able to pre-generate code as F# in addition to the existing C# model.
What's Changed
Full Changelog: JasperFx/wolverine@V6.2.2...V6.3.0
6.2.2
Patch release on top of 6.2.1.
🐛 Bug Fixes / Codegen
#2963 (closes #2958): EF Core transaction middleware + post-save cascade flush
The HTTP-handler codegen path under the EF Core transaction middleware + outbox cascade (GH-536) no longer fails handler compilation. Two related codegen issues addressed in this PR:
var messageContextdeclaration in the generated handler. Cherry-picked from #2959, originally authored by @kentcooper — credit preserved on commit9df45bfde. Root cause:MessageBusSourcewas returning a freshCreateMessageContextWithMaybeTenantFrameper call; once cached + always returning the concreteMessageContext, the duplicate goes away.'IMessageContext' does not contain a definition for EnqueueCascadingAsync— surfaced after the cache fix because once the source produced a concreteMessageContextVariable, the downstreamCaptureCascadingMessagesframe still declared itsMethodCalltarget astypeof(IMessageContext)and emitted a bad((IMessageContext)messageContext).EnqueueCascadingAsync(…)cast. Fixed by re-targetingCaptureCascadingMessagesto the concreteMessageContexttype — mirrors the existingFlushOutgoingMessagespattern. Latent insrc/Wolverine/Runtime/Handlers/CaptureCascadingMessages.cssince020e79013e(2022-09-16); the variable-cache fix is what flipped it from masked to visible.📦 Dependency bumps
JasperFx+JasperFx.Events+JasperFx.Events.SourceGenerator+JasperFx.SourceGenerator2.2.1 → 2.2.3JasperFx.RuntimeCompilerunchanged (own 5.x line, stays at 5.0.0)Upstream JasperFx 2.2.2 release: https://github.com/JasperFx/jasperfx/releases/tag/V2.2.2 (
Fix source-created codegen variable reuse, #392). 2.2.3 was a same-day version-bump-only re-roll.📖 Documentation
DeadLetterEnvelopeGetRequest/DeadLetterEnvelopeResults/DeadLetterEnvelopeIdsRequestsignatures — the docs still described the pre-5 cursor-based pagination (StartId/NextId) and the legacyDeadLetterEnvelopesFoundResponsewrapper. Updated for offset-basedPageNumberpagination, the multi-storeIReadOnlyList<DeadLetterEnvelopeResults>response shape, and tenant-awareIdsrequest bodies.🧪 Known issues
SharedMemorytransport does not serialize envelopes on cross-host send. Surfaces as aMartenTests.Distribution.with_ancillary_stores.spread_out_over_multiple_hostsfailure whereAssignAgentsys..._Description has bee...
Description has been truncated