Repository navigation
Bump the minor-and-patch group with 19 updates - #73
Open
dependabot[bot] wants to merge 1 commit into
Open
dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps dotnet-ef from 10.0.13 to 10.0.14 Bumps Ical.Net from 5.2.3 to 5.2.4 Bumps MailKit from 4.18.1 to 4.18.2 Bumps Microsoft.AspNetCore.Authentication.JwtBearer from 10.0.13 to 10.0.14 Bumps Microsoft.AspNetCore.DataProtection.EntityFrameworkCore from 10.0.13 to 10.0.14 Bumps Microsoft.AspNetCore.Identity.EntityFrameworkCore from 10.0.13 to 10.0.14 Bumps Microsoft.AspNetCore.Mvc.Testing from 10.0.13 to 10.0.14 Bumps Microsoft.AspNetCore.OpenApi from 10.0.13 to 10.0.14 Bumps Microsoft.AspNetCore.TestHost from 10.0.13 to 10.0.14 Bumps Microsoft.EntityFrameworkCore from 10.0.13 to 10.0.14 Bumps Microsoft.EntityFrameworkCore.Design from 10.0.13 to 10.0.14 Bumps Microsoft.EntityFrameworkCore.InMemory from 10.0.13 to 10.0.14 Bumps Microsoft.EntityFrameworkCore.Relational from 10.0.13 to 10.0.14 Bumps SkiaSharp from 4.153.1 to 4.154.0 Bumps SkiaSharp.NativeAssets.Linux.NoDependencies from 4.153.1 to 4.154.0 Bumps System.Security.Cryptography.Pkcs from 10.0.13 to 10.0.14 Bumps WolverineFx from 6.49.0 to 6.60.0 Bumps WolverineFx.RabbitMQ from 6.49.0 to 6.60.0 Bumps WolverineFx.RuntimeCompilation from 6.49.0 to 6.60.0 --- updated-dependencies: - dependency-name: dotnet-ef dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Ical.Net dependency-version: 5.2.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: MailKit dependency-version: 4.18.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.AspNetCore.Authentication.JwtBearer dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.AspNetCore.DataProtection.EntityFrameworkCore dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.AspNetCore.Identity.EntityFrameworkCore dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.AspNetCore.Mvc.Testing dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.AspNetCore.OpenApi dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.AspNetCore.TestHost dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.EntityFrameworkCore dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.EntityFrameworkCore.Design dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.EntityFrameworkCore.InMemory dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.EntityFrameworkCore.Relational dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: SkiaSharp dependency-version: 4.154.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: SkiaSharp.NativeAssets.Linux.NoDependencies dependency-version: 4.154.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: System.Security.Cryptography.Pkcs dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: WolverineFx dependency-version: 6.60.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: WolverineFx.RabbitMQ dependency-version: 6.60.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: WolverineFx.RuntimeCompilation dependency-version: 6.60.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] <support@github.com>
This was referenced Nov 2, 2026
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 dotnet-ef from 10.0.13 to 10.0.14.
Release notes
Sourced from dotnet-ef's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Ical.Net from 5.2.3 to 5.2.4.
Release notes
Sourced from Ical.Net's releases.
5.2.4
What's Changed
StringSerializerto v5 for correct escaping in fix: BackportStringSerializerto v5 for correct escaping ical-org/ical.net#1012v5.2.4in chore: Update release notes forv5.2.4ical-org/ical.net#1019Full Changelog: ical-org/ical.net@v5.2.3...v5.2.4
Commits viewable in compare view.
Updated MailKit from 4.18.1 to 4.18.2.
Release notes
Sourced from MailKit's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.AspNetCore.Authentication.JwtBearer from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.AspNetCore.Authentication.JwtBearer's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.AspNetCore.DataProtection.EntityFrameworkCore from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.AspNetCore.DataProtection.EntityFrameworkCore's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.AspNetCore.Identity.EntityFrameworkCore from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.AspNetCore.Identity.EntityFrameworkCore's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.AspNetCore.Mvc.Testing from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.AspNetCore.Mvc.Testing's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.AspNetCore.OpenApi from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.AspNetCore.OpenApi's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.AspNetCore.TestHost from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.AspNetCore.TestHost's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.EntityFrameworkCore from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.EntityFrameworkCore's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.EntityFrameworkCore.Design from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.EntityFrameworkCore.Design's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.EntityFrameworkCore.InMemory from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.EntityFrameworkCore.InMemory's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.EntityFrameworkCore.Relational from 10.0.13 to 10.0.14.
Release notes
Sourced from Microsoft.EntityFrameworkCore.Relational's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated SkiaSharp from 4.153.1 to 4.154.0.
Updated SkiaSharp.NativeAssets.Linux.NoDependencies from 4.153.1 to 4.154.0.
Updated System.Security.Cryptography.Pkcs from 10.0.13 to 10.0.14.
Release notes
Sourced from System.Security.Cryptography.Pkcs's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated WolverineFx from 6.49.0 to 6.60.0.
Release notes
Sourced from WolverineFx's releases.
6.60.0
What's Changed
Full Changelog: JasperFx/wolverine@V6.59.1...V6.60.0
6.59.1
This is a patch release with two fixes. Upgrading is a package bump only: there is no schema change and no API change.
SQL Server: the inbox and outbox seek on their indexes again
sql_variant. The statements that mark envelopes as handled, reassign them, delete them and move them to the dead letter queue all filter on the envelope id. Weasel's generic command builder has no mapping forGuid, so it bound each id asDbType.Object, which SqlClient sends assql_variant. SQL Server then had to compareCONVERT_IMPLICIT(sql_variant, [id])on every row, which rules out a seek on theuniqueidentifierprimary key. Ids are now bound asuniqueidentifier, so each statement is a primary key seek.nvarchar.received_aton the inbox anddestinationon the outbox arevarchar(250)columns, but statements that filter on them bound the address asnvarchar. Under a SQL collation such asSQL_Latin1_General_CP1_CI_AS, the default on Azure SQL, that converts the column and defeats the index. The statements affected are the per-envelope updates and deletes, inbox recovery's page load, outbox loads by destination, the scheduled message updates and the duplicate check. They now bind the address asvarchar.DateTimeparameters kept only the date. The same generic mapping typedDateTimeasDbType.Date. The message store now lets SqlClient type both values itself.sql_variantand that no plan converts an indexed envelope column. The fullSqlServerTestssuite passes (721 tests, 2 skipped).Guidassql_variant) and JasperFx/weasel#759 (DateTimeasdate). Wolverine works around both on its own, so this release doesn't wait for a Weasel release.The
runcommand no longer blocks a thread pool threadruncommand waited for shutdown by blocking a thread pool thread for the whole life of the application. That matters when a container's CPU limit is below one core.ProcessorCountis then 1, so the thread pool's minimum is one thread, and theruncommand held it. After that, every burst of work had to wait for the pool to add a thread, about 500 ms each time. The reporter saw a 200 msTask.Delayloop wake up as much as about 950 ms late on Azure Container Apps.runcommand now awaits shutdown instead of blocking. It still listens for the same three signals:ApplicationStopping, Ctrl+C, and the assembly load context unloading.AutoStartHost/WebApplicationFactorypath),RunJasperFxCommands()used to block the calling thread. It now returns a task that completes when the host shuts down.RunJasperFxCommands()orRunWolverineCommands(), whatever its persistence or transport.Full Changelog: JasperFx/wolverine@V6.59.0...V6.59.1
6.59.0
New
ScheduledMessageSummary.SagaIdreports the saga id carried by each scheduled envelope. The newScheduledMessageQuery.SagaIdlimitsQueryAsyncandCancelAsyncto one saga's scheduled messages, such as its pending timeouts.PageSizeandTotalCountstay exact. On a large scheduled backlog, narrow the query withMessageTypeor an execution-time window as well.CancelAsyncwith aSagaIdthat matches nothing cancels nothing.PageSize <= 0as "read every match", as the RDBMS stores already did.WolverineFx.AI'sAddLlmCallouts()now works underTypeLoadMode.Staticwhen the application's pre-generated code was written without it. A library can ship its own static codegen and a host can add LLM callouts on top. In Static mode, callouts run on a pre-built handler that needs no generated code. Every other mode is unchanged.LlmCalloutOptions.ConfigureChain(Action<HandlerChain>)customizes the callout chain in any mode.IHandlerPolicydoesn't reach the pre-built handler.DeduplicateCalloutsis refused at startup in Static mode, because deduplication is woven into generated code.Fixes
IHost.StopAsync()cancels mid-flight is no longer logged as a send failure. Azure Service Bus hands the runtime's cancellation token to the SDK, so an orderly shutdown used to produce two Error lines for a batch that was never lost. A durable agent now logs it at Information, because the envelopes stay in the outbox and are recovered on restart. A non-durable agent logs it at Warning, because those messages were not sent. A shutdown cancellation no longer counts toward the circuit breaker or the sending failure policies. A cancellation while the application is still running, or any other exception during shutdown, is still logged at Error.6.58.0
New
GH-5279 (#5280, #5282): New opt-in
Durability.UseTransactionScopedDurabilityPassLockfor PostgreSQL. The serverless durability pass takes a transaction-scoped advisory lock (pg_try_advisory_xact_lock) instead of a session lock. This makes the pass lock safe behind a transaction-mode pooler such as PgBouncer or Supabase's pooler, where a session lock can leak onto a pooled connection or be held by two passes at once. #5282 hardens it:TransactionScopeidle_in_transaction_session_timeoutcan no longer drop the lock in the middle of a passWolverine also logs a one-time warning when the store doesn't support the setting, or when extension steps such as Marten's projection catch-up run under the open lock transaction. That open transaction can stall Marten's gap detection, which is tracked in JasperFx/marten#5791. See the serverless guide.
Fixes
ProcessingFailureinstead ofReceivedwhen its inbox could not store a batch. The sender keeps the batch and retries it, and a late duplicate is deduplicated by id. gRPC listeners can't be durable, so they aren't affected. A guard test now pins that.Durability.EnableInboxPartitioning, PostgreSQL's durable inbox now refuses a redelivery whose identity was already handled. Before, the kept Handled row sat in a different partition and didn't collide, so the redelivery was handled a second time. This completes the stable-id deduplication from 6.57.0 for partitioned inboxes.6.57.0
New
XmlSerializer, and they no longer have to switch to JSON before a migration to Wolverine can start. Every NServiceBus interop endpoint (Rabbit MQ, Azure Service Bus, Amazon SQS and SNS, and the SQL Server and PostgreSQL NServiceBus transports) now reads both JSON and XML, choosing per message from theNServiceBus.ContentTypeheader. To send XML, use the newNServiceBusXmlSerializer:.UseNServiceBusInterop().DefaultSerializer(new NServiceBusXmlSerializer()). Because one endpoint reads both formats, NServiceBus endpoints can also move from XML to JSON gradually. See XML Serialization with NServiceBus.Informationinstead of as an error.WolverineHttpOptions.RejectUnparseableHeaderValuesanswers 400 with ProblemDetails when a[FromHeader]value can't be parsed.Fixes
UseForReplies(). Wolverine used to give NServiceBus its ownwolverine.response.{guid}system queue as the reply address, which NServiceBus can't reach, so every reply ended up in NServiceBus's error queue.DurabilityAgent.StopAsync()now cancels its in-flight durability command and waits for it to finish. Before, a command still running at shutdown could outlive the host and fail against a disposed data source.WithDbContextAbstractionnow reuses the tenant DbContext, so repository writes, the save and outbox enrollment all use one context. This could previously fail code generation.[FromHeader]header binds the comma-joined values instead of answering 500.AndPauseProcessing()chained afterScheduleRetryIndefinitely()/RequeueIndefinitely()now apply, including to the open-ended attempts after the listed delays.Dependencies
Docs and build
./build.sh LocalGateruns every CI suite on one machine (GH-5125, #5246). The CI suites are rebalanced to stay under the 20 minute job limit (#5267), and the scaffold tests now pass on Windows (GH-5255, #5264).6.56.0
New
opts.UseHttpTransport()registers the HTTP transport insideUseWolverine().http/httpsURIs then resolve inListenForMessagesFrom(),PublishMessage<T>().To(uri), and runtimeEndpointFor()/ToDestination(). Before this, the transport was only registered byToHttpEndpoint(), and any otherhttpURI failed withUnknown Transport scheme 'http'./_wolverine/invokenow answers 415 instead of 500 for a content type with no registered serializer.Fixes
IHost.StopAsync()and throwObjectDisposedExceptionagainst a disposedNpgsqlDataSource.DeferAsync()used to call back into the receiver inline, so the failed inbox write and the defer recursed. A deferred Kafka envelope now goes back to the receiver on its own task after a short pause, and only while the listener is running. After a stop or inbox-recovery pause, its uncommitted offset brings it back. Because Kafka has no native requeue, aRequeueerror policy on a Kafka endpoint now redelivers after about one second instead of immediately./_wolverine/invokecould delete an outgoing envelope that was never received. HTTP transport responses are now disposed.6.55.1
Fixes
DatabaseBatchCommandExceptionand logged as an Error. Genuine SQL/connection failures are still reported.HttpEndpointaimed at/_wolverine/invokein its default (buffered) mode now delivers by posting each envelope individually, instead of receiving a 415 for every batch and retrying forever./batch/{queue}and.SendInline()endpoints are unchanged.6.55.0
Highlights
WolverineFx.Bobcat is out of alpha, on Bobcat 1.0.0 (#5222, #5229). Bobcat 1.0.0 shipped tonight, and
WolverineFx.BobcatandWolverineFx.Bobcat.EventModelnow publish as stable 6.55.0 instead of-alpha.1.WolverineFx.Bobcat.Httpstays6.55.0-alpha.1until Alba 9 ships stable, because a stable package cannot depend on Alba 9.0.0-rc.2. A spec project thatwrite-specsgenerates with no--wolverine-versionpins the stableWolverineFx.Bobcat(#5222, #5223).MessageCausedBynames your handler (#5224, #5225).IWolverineObserver.MessageCausedByreported the generated handler class (Internal.Generated.WolverineHandlers.StartTripHandler939323516). It now reports the handler you wrote (TripService.StartTripHandler), the same string as themessage.handlerspan tag, resolved at codegen time. Code generated by an earlier version keeps working through the old overload.CosmosDB sagas start with a conditional create (#5221, thanks @thechucklingatom). A second start message for an existing saga id used to silently overwrite the running saga. It now fails with the
SagaConcurrencyExceptionthat Marten, Azure Blob and S3 already raise, so oneOnException<SagaConcurrencyException>()policy covers every provider.Fixes
ListeningAgent.StartAsyncis serialized, and deliveries are deferred to a drainedBufferedReceiver(#5228)CancellationTokenSource(#5226)Dependencies
Originno longer raises aSourceDisagreement)Full Changelog: JasperFx/wolverine@V6.54.0...V6.55.0
6.54.0
Highlights
Dead letter failure groups (#5209, #5210). Wolverine now fingerprints every message as it moves to dead letter storage, so dead letters can be managed one failure group at a time:
IDeadLetterFingerprinterhashes the exception type and the first stack frame from application code. Register your own to replace it.DeadLetterEnvelopeQuerygainsFailureGroup,ExceptionMessageMatch(Exact / Contains),TenantIdandArchived.SummarizeAllAsyncoverload groups by failure group, message type or endpoint, with first and last failure times.ReplayMatchingAsync,DiscardMatchingAsync,ArchiveMatchingAsyncandRestoreMatchingAsyncreport how many dead letters they affected.ReplayCount,LastReplayedAtandFirstFailedAt.DurabilitySettings.ArchivedDeadLetterRetention.IDeadLetters.Capabilitiestells you what a store supports.All changes are additive. The relational stores pick up seven nullable columns on
wolverine_dead_letters, an index and a newwolverine_dead_letter_historytable through the normal schema migration. See the dead letter storage guide.Deduplication fixes (#5205, #5206, #5208), and Bobcat 1.0.0-rc.4 dependency pins (#5211). The
WolverineFx.Bobcat*packages remain alpha (6.54.0-alpha.1).What's Changed
Full Changelog: JasperFx/wolverine@V6.53.0...V6.54.0
6.53.0
What's Changed
New Contributors
Full Changelog: JasperFx/wolverine@V6.52.0...V6.53.0
6.52.0
Wolverine 6.52.0 is a feature release. The headline items are Aspire-style registration by connection-string name for every transport and every message store, timer agents for short-cadence recurring schedules, and the 6.x groundwork for Wolverine 7.0's one-chain-per-handler model. There are no breaking API changes. Two behavior changes are worth knowing about up front: recurring schedules that fire more often than every 15 minutes now run on a timer agent (opt out per schedule with
UseScheduledMessages()), and outgoing envelopes a transport cannot map are dead-lettered instead of being logged and deleted.Many thanks to everyone who reported issues and sent fixes: @uniquelau, @johnkaram02, @erdtsieck, @ahmetvayhan and @pritamrao.
Aspire parity: named connections
NpgsqlDataSource/MySqlDataSourcefrom the container, named static tenants, a Named Connection Strings table indescribe, and docs that lead with the named form (GH-5127, GH-5156) by @jeremydmiller in Message storage by connection-string name for every RDBMS provider, plus named-connection docs and describe (GH-5127, GH-5156) JasperFx/wolverine#5174wolverine.slnx, with a ServiceDefaults project for traces, metrics and/health(GH-5124) by @jeremydmiller in GH-5124 Aspire samples on Aspire 13.6.3 with shared service defaults, in wolverine.slnx JasperFx/wolverine#5182Messaging and error handling
opts.Schedules.TimerThreshold(15 minutes), same dedup id as the scheduled path, pause and resume throughIRecurringScheduleControl(GH-5168) by @jeremydmiller in GH-5168 Timer-based recurring messages: one agent per short-cadence schedule JasperFx/wolverine#5183DoThenRetry(action, maxAttempts)error policy that works both inline and from a queue (GH-5068) by @jeremydmiller in GH-5068 DoThenRetry() error policy that works inline and from a queue JasperFx/wolverine#5179MultipleHandlerBehavior.ClassicCombineIntoOneLogicalHandleris[Obsolete](still the default), a startup warning for combined handlers, opt-inAssertNoCombinedHandlers(), fixes for latentSeparatedbugs, ahandler.typeOpenTelemetry tag on every chain, and logical deduplication scoped per chain (GH-5133) by @jeremydmiller in GH-5133 6.x prep for 7.0's one chain per handler type: obsolete ClassicCombine, fix latent Separated bugs, per-handler OTel tag, per-chain dedup scoping JasperFx/wolverine#5184HTTP
[DeduplicatedWithResponse]ClaimInTransaction, plus two Marten commit-failure fixes (GH-5160, GH-5165, GH-5166) by @jeremydmiller with @uniquelau in GH-5160, GH-5165, GH-5166: [DeduplicatedWithResponse] ClaimInTransaction, plus two Marten commit-failure fixes JasperFx/wolverine#5169WolverineHttpOptions.DefaultClaimInTransaction, an application-wide default (GH-5160) by @jeremydmiller in GH-5160: WolverineHttpOptions.DefaultClaimInTransaction, a global opt-in for [DeduplicatedWithResponse(ClaimInTransaction)] JasperFx/wolverine#5173Content-Length(GH-5187) by @johnkaram02 in GH-5187: a string response declares its UTF-8 byte count as Content-Length JasperFx/wolverine#5188[FromQuery]name is not a C# identifier (GH-5189) by @johnkaram02 in GH-5189: bind array and list query parameters whose [FromQuery] name is not a C# identifier JasperFx/wolverine#5190Operability and diagnostics
ServiceCapabilitiesreads each store on its own and reportsFailedSections, so a failed section is distinguishable from an empty one (GH-5162) by @jeremydmiller in GH-5162 ServiceCapabilities: isolate each store, record FailedSections JasperFx/wolverine#5175AssignmentGrid.Agent.UnplacedReason(AwaitingCapacity,NoCapableNode,Paused,TakeoverHold,Superseded), a capacity log line and an optionalNodeAcceptThreshold(GH-5163) by @jeremydmiller in GH-5163 Unplaced agents carry an UnplacedReason; leader logs agents awaiting capacity JasperFx/wolverine#5176 and GH-5163 follow-up: UnplacedReason names are a stable contract; close the null-reason gaps JasperFx/wolverine#5186DeadLetterEnvelopeQuery, honored by bulk replay and discard, across every dead letter store (GH-5164) by @jeremydmiller in GH-5164 DeadLetterEnvelopeQuery header-equality filter JasperFx/wolverine#5181db-list/db-dump/db-patchdiscover the Oracle message store (GH-5172) by @jeremydmiller in GH-5172 Oracle message store is discoverable by the Weasel db-* commands JasperFx/wolverine#5177Documentation
MaximumHopperSizeto about 2 xBatchSize(GH-5170, follow-up JasperFx/jasperfx#1076) by @jeremydmiller in Bump to 6.52.0 JasperFx/wolverine#5199Full Changelog: JasperFx/wolverine@V6.51.3...V6.52.0
6.51.3
Wolverine 6.51.3 is a durability release. Nearly everything in it came out of a run of reports against the durable inbox and outbox, plus a new durable receiver compliance rig (
src/Testing/DurableComplianceRig, Bobcat specs across PostgreSQL, SQL Server, Marten and EF Core over local, database, RabbitMQ and SQS endpoints) that turned up the rest. There are no breaking API changes; the one schema addition (a nullableenvelope_idcolumn on the deduplication table) is optional and an unmigrated table keeps working.Many thanks to everyone who reported these with reproductions: @billshuck, @dbelinsky-accureference, @endava-marinela-marchitan, @devployment, @kowalczb, @Patrick2607 and @ahmetvayhan.
Durable inbox hardening
DbTransactiondispose inMessageContext.ClearState()could kill another handler's Npgsql transactionHandledonly after its own commit, and inside the tenant transaction for database-per-tenantReScheduleAsyncand then returns normally keeps its retry[Deduplicated]claim stranded by a crash can be taken over by the same envelope (new nullableenvelope_idcolumn, opt-inIEnvelopeAwareDeduplicationStore)Envelope.DeduplicationIdnow crosses RabbitMQ, the genericEnvelopeMapperbrokers and MQTTDuplicateIncomingEnvelopeExceptioninstead of pausing the listener or tripping the tenant write brake (PostgreSQL, SQL Server, MySQL, SQLite, Oracle)x-delivery-limit(.DeliveryLimit(n),DeliveryLimitForDurableQuorumQueues(n)), a startup warning, andDeferAsyncpublishes before it acks. New docs section "Quorum Queues and the Durable Inbox"Durable bug fixes
Testing
Full Changelog: JasperFx/wolverine@V6.51.2...V6.51.3
6.51.2
Bug fix release on the JasperFx 2.91.0 / Marten 9.51.0 / Polecat 5.43.0 / Fisher 1.21.2 matched set, plus the Bobcat specification work
What's Changed
Committed directly to main
event-model --urlstamps the pushed Event Model with its checkout root, repository and branch (dded67e95)AgentAssignmentsChangedis obsolete, and the test observer's dead branch for it is removed (c1b22941a)Full Changelog: JasperFx/wolverine@v6.51.1...V6.51.2
6.51.1
Bug fix release, and some doc updates too
What's Changed
Full Changelog: JasperFx/wolverine@V6.51.0...v6.51.1
6.51.0
Everything since 6.50.1.
Highlights
opts.Durability.NodeRole = NodeRole.Warmupand a node joins the serving cluster but does none of the serving nodes' messaging. Its only job is to run the new release's projection shards in Rebuild mode, so the new projection versions are caught up before you cut over. The role is opt-in; the default isNodeRole.Serving, and no schema change is needed. Docs: Marten · PolecatDurabilityMode.ServerlessWithOutbox(#5016, #5044). The leanServerlessruntime, but with the transactional outbox kept:JsonOptionswithout needingMapWolverineEndpoints(). Two new properties,HttpChain.JsonSerializerOptionsandHttpHandler.JsonSerializerOptions, give a single endpoint its own JSON options.chain.FailureLogLevel,opts.Policies.MessageFailureLogLevel(...)or[WolverineLogging(FailureLogLevel = ...)]. The default is stillError.Durability fixes
InboxStaleTime(#5022, #5025, #5039):Serverlessmode no longer fails at startup with RavenDB persistence.AddMessageHandlerhandler committing an ancillary sessionServerlessWithOutbox, a failed inline send is retried by the destination's sending agent.Serverlesswarns about durable endpoints downgraded after startup.Dependencies
System.Security.Cryptography.Pkcsadvisory GHSA-846f-f764-76mx.6.50.2
A dependency patch release. No configuration or code changes needed.
Dependencies
This moves Wolverine onto the Critter Stack releases that fix CVE-2026-84008 / GHSA-846f-f764-76mx (
System.Security.Cryptography.Pkcs, high-severity denial of service) (#5018):Weasel.SqlServerandWeasel.Oraclenow reference the patched Pkcs directly.Polecatnow references the patched Pkcs directly. This also brings in Polecat 5.39 and 5.40.Marten,Marten.AspNetCoreandMarten.Newtonsoft. Marten was never affected by the advisory.Wolverine 6.50.1 already pinned the patched Pkcs in
WolverineFx.SqlServer,WolverineFx.OracleandWolverineFx.ClaimCheck.SqlServer, so applications on 6.50.1 were already protected. Those pins stay, because Wolverine referencesMicrosoft.Data.SqlClientandOracle.ManagedDataAccess.Coredirectly. 6.50.2 means the upstream libraries carry the fix too, so a NuGet audit comes back clean whichever of them your application references directly.6.50.1
Patch release with a memory-leak fix and two security dependency updates.
Fixes
WolverineRuntimenow disposes itsMeter(#5012, #5013). The runtime'sSystem.Diagnostics.Metrics.Meterused to stay in the process-wide staticMeterregistry after the host was disposed. The durable persistence gauges on it hold callbacks back into the runtime, so every disposed host stayed reachable for the life of the process. Test suites that build manyWebApplicationFactoryorHostinstances with durable persistence saw the heap grow without bound. Thanks to @AndriiKononenko3 for the detailed report and the retention path.Security dependency updates
System.Security.Cryptography.Pkcs, high-severity denial of service). The package arrived transitively at vulnerable versions throughMicrosoft.Data.SqlClient,Oracle.ManagedDataAccess.Coreand Polecat.WolverineFx.SqlServer,WolverineFx.OracleandWolverineFx.ClaimCheck.SqlServernow reference the patched version directly: 9.0.21 on net9.0 and 10.0.13 on net10.0. Every package built on them, includingWolverineFx.PolecatandWolverineFx.Http.Polecat, picks up the fix.Microsoft.AspNetCore.SignalR.Common, high-severity denial of service).WolverineFx.SignalRnow depends onMicrosoft.AspNetCore.SignalR.Client9.0.21 on net9.0 and 10.0.13 on net10.0, up from 9.0.8.6.50.0
Wolverine 6.50.0 is a feature release. The headline is a new way to send a message to every node in your cluster. Just as much of this release came from the community, though: five community pull requests landed, and several issue reports led straight to fixes.
The two Bobcat packages,
WolverineFx.BobcatandWolverineFx.Bobcat.Http, ship as6.50.0-alpha.1and are still pre-release.Broadcast a message to every node in the cluster
BroadcastToAllNodesAsync()(#4993, closes #4988). Wolverine's normal delivery is competing consumers, where exactly one node handles a message. Sometimes you want every node to hear about something instead: a cache to invalidate, a configuration change to pick up, some node-local state to reset. Now you can just do this:Every running node, including the one that sent it, handles the message exactly once with its own handler. The sending node gets the message on the local routes its type already has, or on
local://default, and it's never forwarded to the external routesPublishAsync()would use. Every other node gets a copy on its node control endpoint, which is the broker control queue if you've configured one and the database control queue otherwise. Nodes that have gone stale are skipped, using the same rule the leader applies before ejecting a node. A broadcast from inside a handler goes through the outbox like any other outgoing message, and correlation ids are stamped as usual. InSoloandServerlessdurability modes the message is delivered to this node only, andMediatorOnlyrefuses it just likePublishAsync(). It's an extension method onIMessageBus, so no otherIMessageBusimplementation breaks, andTestMessageContextrecords broadcasts in a newBroadcastToAllNodeslist for your unit tests. See the new Broadcast Messages to Every Node guide.From the community
A big thank you to everyone who sent pull requests and reports for this release:
@jcd1991 contributed two PostgreSQL transport features:
LISTEN/NOTIFYwakeups for PostgreSQL queues (#4998, closes #3480). WithEnableQueueNotifications(), an idle queue listener is woken as soon as a message is written instead of waiting out its polling interval. In local benchmarks the median delivery time on an idle queue dropped from about 650ms to under 3ms. It's off by default because it holds one extra, long-lived database connection per database per running process. Read the trade-offs in the new Queue Notifications with LISTEN/NOTIFY section before you turn it on.EnableDeterministicQueueOrdering()now preserves their order, and it was followed up for SQL Server, MySQL, Oracle and SQLite in #4987.@jcd1991 also fixed Wolverine.HTTP treating a container-registered service as the JSON request body on POST and PUT endpoints (#5010, closes #3863, reported by @erdtsieck). The same parameter on a GET endpoint was correctly injected, but on a POST or PUT every call failed with a 500. An explicitly registered, non-keyed concrete type is now resolved from the container on every endpoint. This is a behavior change: if you register a type in the container and post it as a request body without
[FromBody], add[FromBody]to keep binding it from the request.@erdtsieck found and fixed a ping-pong in agent assignment during blue/green warm-ups (#5000, closes #4999). Projection partitions that could only run on the previous version's nodes moved between those nodes on every evaluation, which showed up in production as 1,000 to 3,000
ReassignAgentcommands a minute. A partition that fits nowhere now stays where it is unless another node is strictly lighter. The follow-up in #5001 makes it settle in one move.@PascalEschbach contributed a big round of NATS follow-ups (#4976, closes #4973), with tests for every change:
resources setupprovisioning declared streams once per connection;TrustTenantIdHeadersetting;ILoggerFactory;#4985 followed up on the core side.
@Maflend reported that the static handler registry ignored custom discovery rules once conventional discovery was disabled (#4984), a regression since 6.44.0. It's fixed in #4992.
@uniquelau's report in marten#5652 led to #5011, below: the leader no longer builds every event store's full usage descriptor on every heartbeat.
Agents and event subscriptions
IEventStore.RegisteredShardNames()and the newIEventStore.TryDescribeDatabasesAsync(), instead of a fullTryCreateUsage()that also read the highest event sequence and described every projection, subscription and event type, for every store, every 10 seconds. To get the full saving, also take Marten 9.50.1, Polecat 5.40.1 or Fisher 1.20.2, which answerTryDescribeDatabasesAsync()straight from their tenancy.IProjectionDaemon.IsRebuilding(), so it can no longer start a second copy of the shard on top of a running rebuild.Transports and persistence
OptimizeQueueThroughput()(#4991, closes #4989).EnableDeterministicQueueOrdering()for SQL Server, MySQL, Oracle and SQLite (#4987).HTTP
Valuestrong-typed id wrappers, such asrecord struct OrderId(Guid Value), without aTryParse(#4995, closes #4978).... (truncated)
Commits viewable in compare view.
Updated WolverineFx.RabbitMQ from 6.49.0 to 6.60.0.
Release notes
Sourced from WolverineFx.RabbitMQ's releases.
6.60.0
What's Changed
Full Changelog: JasperFx/wolverine@V6.59.1...V6.60.0
6.59.1
This is a patch release with two fixes. Upgrading is a package bump only: there is no schema change and no API change.
SQL Server: the inbox and outbox seek on their indexes again
sql_variant. The statements that mark envelopes as handled, reassign them, delete them and move them to the dead letter queue all filter on the envelope id. Weasel's generic command builder has no mapping forGuid, so it bound each id asDbType.Object, which SqlClient sends assql_variant. SQL Server then had to compareCONVERT_IMPLICIT(sql_variant, [id])on every row, which rules out a seek on theuniqueidentifierprimary key. Ids are now bound asuniqueidentifier, so each statement is a primary key seek.nvarchar.received_aton the inbox anddestinationon the outbox arevarchar(250)columns, but statements that filter on them bound the address asnvarchar. Under a SQL collation such asSQL_Latin1_General_CP1_CI_AS, the default on Azure SQL, that converts the column and defeats the index. The statements affected are the per-envelope updates and deletes, inbox recovery's page load, outbox loads by destination, the scheduled message updates and the duplicate check. They now bind the address asvarchar.DateTimeparameters kept only the date. The same generic mapping typedDateTimeasDbType.Date. The message store now lets SqlClient type both values itself.sql_variantand that no plan converts an indexed envelope column. The fullSqlServerTestssuite passes (721 tests, 2 skipped).Guidassql_variant) and JasperFx/weasel#759 (DateTimeasdate). Wolverine works around both on its own, so this release doesn't wait for a Weasel release.The
runcommand no longer blocks a thread pool threadruncommand waited for shutdown by blocking a thread pool thread for the whole life of the application. That matters when a container's CPU limit is below one core.ProcessorCountis then 1, so the thread pool's minimum is one thread, and theruncommand held it. After that, every burst of work had to wait for the pool to add a thread, about 500 ms each time. The reporter saw a 200 msTask.Delayloop wake up as much as about 950 ms late on Azure Container Apps.runcommand now awaits shutdown instead of blocking. It still listens for the same three signals:ApplicationStopping, Ctrl+C, and the assembly load context unloading.AutoStartHost/WebApplicationFactorypath),RunJasperFxCommands()used to block the calling thread. It now returns a task that completes when the host shuts down.RunJasperFxCommands()orRunWolverineCommands(), whatever its persistence or transport.Full Changelog: JasperFx/wolverine@V6.59.0...V6.59.1
6.59.0
New
ScheduledMessageSummary.SagaIdreports the saga id carried by each scheduled envelope. The newScheduledMessageQuery.SagaIdlimitsQueryAsyncandCancelAsyncto one saga's scheduled messages, such as its pending timeouts.PageSizeandTotalCountstay exact. On a large scheduled backlog, narrow the query withMessageTypeor an execution-time window as well.CancelAsyncwith aSagaIdthat matches nothing cancels nothing.PageSize <= 0as "read every match", as the RDBMS stores already did.WolverineFx.AI'sAddLlmCallouts()now works underTypeLoadMode.Staticwhen the application's pre-generated code was written without it. A library can ship its own static codegen and a host can add LLM callouts on top. In Static mode, callouts run on a pre-built handler that needs no generated code. Every other mode is unchanged.LlmCalloutOptions.ConfigureChain(Action<HandlerChain>)customizes the callout chain in any mode.IHandlerPolicydoesn't reach the pre-built handler.DeduplicateCalloutsis refused at startup in Static mode, because deduplication is woven into generated code.Fixes
IHost.StopAsync()cancels mid-flight is no longer logged as a send failure. Azure Service Bus hands the runtime's cancellation token to the SDK, so an orderly shutdown used to produce two Error lines for a batch that was never lost. A durable agent now logs it at Information, because the envelopes stay in the outbox and are recovered on restart. A non-durable agent logs it at Warning, because those messages were not sent. A shutdown cancellation no longer counts toward the circuit breaker or the sending failure policies. A cancellation while the application is still running, or any other exception during shutdown, is still logged at Error.6.58.0
New
GH-5279 (#5280, #5282): New opt-in
Durability.UseTransactionScopedDurabilityPassLockfor PostgreSQL. The serverless durability pass takes a transaction-scoped advisory lock (pg_try_advisory_xact_lock) instead of a session lock. This makes the pass lock safe behind a transaction-mode pooler such as PgBouncer or Supabase's pooler, where a session lock can leak onto a pooled connection or be held by two passes at once. #5282 hardens it:TransactionScopeidle_in_transaction_session_timeoutcan no longer drop the lock in the middle of a passWolverine also logs a one-time warning when the store doesn't support the setting, or when extension steps such as Marten's projection catch-up run under the open lock transaction. That open transaction can stall Marten's gap detection, which is tracked in JasperFx/marten#5791. See the serverless guide.
Fixes
ProcessingFailureinstead ofReceivedwhen its inbox could not store a batch. The sender keeps the batch and retries it, and a late duplicate is deduplicated by id. gRPC listeners can't be durable, so they aren't affected. A guard test now pins that.Durability.EnableInboxPartitioning, PostgreSQL's durable inbox now refuses a redelivery whose identity was already handled. Before, the kept Handled row sat in a different partition and didn't collide, so the redelivery was handled a second time. This completes the stable-id deduplication from 6.57.0 for partitioned inboxes.6.57.0
New
XmlSerializer, and they no longer have to switch to JSON before a migration to Wolverine can start. Every NServiceBus interop endpoint (Rabbit MQ, Azure Service Bus, Amazon SQS and SNS, and the SQL Server and PostgreSQL NServiceBus transports) now reads both JSON and XML, choosing per message from theNServiceBus.ContentTypeheader. To send XML, use the newNServiceBusXmlSerializer:.UseNServiceBusInterop().DefaultSerializer(new NServiceBusXmlSerializer()). Because one endpoint reads both formats, NServiceBus endpoints can also move from XML to JSON gradually. See XML Serialization with NServiceBus.Informationinstead of as an error.WolverineHttpOptions.RejectUnparseableHeaderValuesanswers 400 with ProblemDetails when a[FromHeader]value can't be parsed.Fixes
UseForReplies(). Wolverine used to give NServiceBus its ownwolverine.response.{guid}system queue as the reply address, which NServiceBus can't reach, so every reply ended up in NServiceBus's error queue.DurabilityAgent.StopAsync()now cancels its in-flight durability command and waits for it to finish. Before, a command still running at shutdown could outlive the host and fail against a disposed data source.WithDbContextAbstractionnow reuses the tenant DbContext, so repository writes, the save and outbox enrollment all use one context. This could previously fail code generation.[FromHeader]header binds the comma-joined values instead of answering 500.AndPauseProcessing()chained afterScheduleRetryIndefinitely()/RequeueIndefinitely()now apply, including to the open-ended at...Description has been truncated