Wolverine 6.32.0
See CHANGELOG.md for the full entries.
New packages
WolverineFx.AmazonS3 and WolverineFx.AzureBlobStorage carry document and saga persistence plus the claim check store that used to ship separately. Registration is explicit per type — Store<T>() and Saga<T>() are separate calls and each refuses the other's type — and saga writes are guarded by conditional requests, surfacing as SagaConcurrencyException so one OnException<ConcurrencyException> policy still covers every store. (#4160, originally #4165 by Anne Erdtsieck.)
WolverineFx.ClaimCheck.AmazonS3 is deprecated. The namespace is unchanged, so migration is a package reference swap — but keeping both referenced produces ambiguous-type errors.
Redis document and saga persistence folds into the existing WolverineFx.Redis rather than a new package, with saga concurrency implemented as a Lua compare-and-swap.
Fixes
- A shutting-down node no longer dead-letters work whose handler never ran (#4213). Core, so every transport.
- Scheduled promotion matches the whole message identity on SQLite, SQL Server, MySQL and Oracle rather than PostgreSQL alone (#4216) — including a not-yet-due scheduled message being promoted and executed early.
- A redelivered inbox row can be retired when its identity is already handled under
EnableInboxPartitioning(#4216); previously it could not be retired at all. - A listener whose broker entity was deleted underneath it now heals instead of retrying once a second forever (#4215).
- Terminal settle failures are classified on the retry block, closing a gap where two of four Azure Service Bus listeners had no classification at all (#4012).
- Scope priming no longer manufactures a Marten session for every handler that service-locates anything (#4198). Requires JasperFx 2.58.0 or later.
- A duplicated scheduled identity no longer wedges promotion on a partitioned PostgreSQL inbox (#4202).
AddStopConditionIfNullaccepts the null identity its signature declares (#4161).
Diagnostics
- NativeAck and partitioned listeners report ceilings, per-lane depth and duplicate-suppression counts (#4199).
BufferLimitis now null on the modes that never enforced it, with the broker's prefetch window reported asInFlightLimit. MaximumBrokerRedeliveriesis documented as the delivery count it actually is (#4216). Behaviour unchanged.
Event model
- A stream-appending handler's return value is reported as a reply rather than an emitted event (#4204).
- A generic message type's slice reads the way source spells it, which also stops two relays with different payloads colliding on one slice (#4205).