Repository navigation
Bump the minor-and-patch group with 11 updates - #344
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 FluentValidation from 12.1.1 to 12.2.0 Bumps Microsoft.AspNetCore.Mvc.Testing from 10.0.12 to 10.0.14 Bumps Microsoft.AspNetCore.OpenApi from 10.0.12 to 10.0.14 Bumps Microsoft.Extensions.ApiDescription.Server from 10.0.12 to 10.0.14 Bumps Microsoft.Kiota.Bundle from 2.1.2 to 2.1.6 Bumps Microsoft.NET.Test.Sdk from 18.10.1 to 18.11.0 Bumps microsoft.openapi.kiota from 1.35.0 to 1.38.0 Bumps WolverineFx.Http from 6.41.0 to 6.64.0 Bumps WolverineFx.Http.FluentValidation from 6.41.0 to 6.64.0 Bumps xunit.runner.visualstudio from 4.0.0 to 4.0.1 Bumps xunit.v3 from 4.0.1 to 4.0.3 --- updated-dependencies: - 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.Extensions.ApiDescription.Server dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.Kiota.Bundle dependency-version: 2.1.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: microsoft.openapi.kiota dependency-version: 1.38.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: xunit.runner.visualstudio dependency-version: 4.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: FluentValidation dependency-version: 12.2.0 dependency-type: direct:production update-type: version-update:semver-minor 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.Extensions.ApiDescription.Server dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.Kiota.Bundle dependency-version: 2.1.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: microsoft.openapi.kiota dependency-version: 1.38.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: xunit.runner.visualstudio dependency-version: 4.0.1 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.Kiota.Bundle dependency-version: 2.1.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: xunit.v3 dependency-version: 4.0.3 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.Extensions.ApiDescription.Server dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.Kiota.Bundle dependency-version: 2.1.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: microsoft.openapi.kiota dependency-version: 1.38.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: xunit.runner.visualstudio dependency-version: 4.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: FluentValidation dependency-version: 12.2.0 dependency-type: direct:production update-type: version-update:semver-minor 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.Extensions.ApiDescription.Server dependency-version: 10.0.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.Kiota.Bundle dependency-version: 2.1.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: microsoft.openapi.kiota dependency-version: 1.38.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: WolverineFx.Http dependency-version: 6.64.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: WolverineFx.Http.FluentValidation dependency-version: 6.64.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: xunit.runner.visualstudio dependency-version: 4.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] <support@github.com>
This branch has not been deployed
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 FluentValidation from 12.1.1 to 12.2.0.
Release notes
Sourced from FluentValidation's releases.
12.2.0
Release notes
Please read the upgrade guide if you are moving from 11.x to 12.x
Changes in 12.2.0
Changes in 12.1.0
Changes in 12.0.0
Downloads
Binaries can be downloaded from nuget:
Commits viewable in compare view.
Updated Microsoft.AspNetCore.Mvc.Testing from 10.0.12 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.12 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.Extensions.ApiDescription.Server from 10.0.12 to 10.0.14.
Release notes
Sourced from Microsoft.Extensions.ApiDescription.Server's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.Kiota.Bundle from 2.1.2 to 2.1.6.
Release notes
Sourced from Microsoft.Kiota.Bundle's releases.
2.1.6
2.1.6 (2026-11-02)
Bug Fixes
2.1.5
2.1.5 (2026-10-13)
Bug Fixes
2.1.4
2.1.4 (2026-10-06)
Bug Fixes
2.1.3
2.1.3 (2026-09-28)
Bug Fixes
Commits viewable in compare view.
Updated Microsoft.NET.Test.Sdk from 18.10.1 to 18.11.0.
Release notes
Sourced from Microsoft.NET.Test.Sdk's releases.
18.11.0
What's Changed
New Contributors
Full Changelog: microsoft/vstest@v18.10.1...v18.11.0
Commits viewable in compare view.
Updated microsoft.openapi.kiota from 1.35.0 to 1.38.0.
Release notes
Sourced from microsoft.openapi.kiota's releases.
1.38.0
Added
Changed
1.37.0
Added
@deprecatedtag with the description's deprecation text, date, removal date and version. Calling a deprecated method or navigating to a deprecated path also warns withcategory: :deprecated, which Ruby prints whenWarning[:deprecated]is on, as it does for its own deprecations. kiota-ruby#64--backing-storekeep their values in the runtime's backing store and send only the values changed since they were read, as the other languages do. Before,--backing-storegenerated Ruby that failed to load. Requires the runtime gems at 0.25.0. kiota-ruby#53text/plain,application/x-www-form-urlencodedandmultipart/form-databodies work, as in the other languages. Requires the runtime gems at 0.25.0. kiota-ruby#52, kiota-ruby#55, kiota-ruby#57Changed
/legacyunder a live/apiwas not flagged, and every child of a deprecated path was.kiota infolists the runtime gems at 0.25.0.1.36.1
Added
Changed
1.36.0
Added
messagereturns the property the description marks withx-ms-primary-error-message, as the other languages do. An error property namedmessageis renamedmessage_escaped, likeMessageEscapedin C#; when it is a string,messagestill returns it. kiota-ruby#63Changed
Fixed relative description paths when opening or selecting clients in the VS Code Kiota workspace.
Removed the retired lock-search command from the VS Code command palette. Lock-file migration remains available.
Preserve inherited properties when a single
oneOforanyOfmember defines its properties only throughallOf. Fixes #6778.Python: preserve false, zero, empty strings, and empty collections when parsing and serializing union type wrappers.
All language refiners accept a generation logger consistently, retaining configuration-only compatibility constructors hidden from IntelliSense.
Reject plugin-manifest file references whose path components become parent-directory traversal after Windows trims trailing spaces or dots.
Fixed a stack overflow when generating API plugins from descriptions with cyclic
allOfschemas.Dart: omit unsupported schema defaults with a generation warning, preserve supported literal and enum property and parameter defaults (including empty strings), initialize query parameters from schema defaults, and keep constructor initialization valid with or without backing stores.
Dart: preserve nullable optional request-builder constructor parameters, including UUIDs and collections, so cloning accepts null arguments without overwriting existing path parameters.
Dart: escape URL templates once at final emission to preserve literal dollar signs and backslashes in constructor defaults and method overrides.
Dart: preserve schema string defaults named
null, including enum wire values, without treating them as JSON-null sentinels.Dart: preserve query-parameter defaults inside single-member
allOfwrappers, retaining outer-default precedence and explicit JSON-null defaults.Dart: validate parser-backed date, time, and UUID defaults before emission, omitting unsupported values with a generation warning.
Ruby: a union of object types that no discriminator decides, such as a oneOf without a discriminator, now reads the payload into every object member, as TypeScript does, instead of returning an empty wrapper. A union whose discriminator matched no member does the same, and its array member is only read when no other member was picked. Requires the runtime gems at 0.24.0.
Ruby: enum members hold their wire value, so a value such as
incoming-paymentorreadis sent and read as the description declares it instead of asIncomingPaymentorRead.Enum[:Name]now returns the wire value as a string. Requires the runtime gems at 0.24.0.Go: keep escaped namespace segments lowercase so imports match generated package directories on case-sensitive filesystems. Fixes #7828.
TypeScript: import response enum objects for request builders reached through path parameters. #6884
Resolve enum query parameters wrapped in single-member
allOfschemas, including enum array items.Go: cast scalar enum values in union factories and avoid reading an empty discriminator name for undiscriminated unions. Addresses #7808.
Preserve models for multipart properties with default content types when other properties specify an encoding. #7342
Dart: escape enum options named value or values to avoid conflicts with generated and built-in enum members. #7807
Ruby: the client's root module has an
eager_load!method that loads every autoloaded model, for servers that preload before forking.Ruby: generated files start with
# frozen_string_literal: true, so string default values handed to user code are frozen.Ruby: generated string literals are double quoted, the StandardRB convention.
Ruby: namespaces with nothing to autoload no longer get an empty barrel file, and generated files no longer require them (561 fewer files in a GitHub client).
Ruby: a client generated with a multi-segment
--namespace-name, such asintegration_test.client, failed to load because its root file was written one directory too deep.Ruby: namespace barrels register their models and enums with
autoloadinstead of requiring them, so a subclass no longer fails to load when its base class file is required first. Other files require the barrel rather than an individual model file, and models now load on first use. A type no barrel autoloads, such as a model named after its namespace, is now required directly: 1,315 constants referenced by a Meraki client never loaded, and a client generated from the current GitHub description failed to load because it required a file that is never written. #7956Ruby: model properties are declared with
attr_accessor, which removes the thousands of "possibly useless use of a variable" warningsruby -wprinted while loading a client.Ruby: enum hashes are frozen. kiota-ruby#68
C#: escape Unicode line and paragraph separators in generated string literals so generated clients remain valid C# source.
External reference allowlist wildcards no longer cross the URI authority boundary, so a wildcard in the scheme or host cannot match text in the path, the user information or the port.
Initialize inherited Dart model fields in constructor initializer lists.
Replace only unresolved binary types with a native stream type, and translate a resolved model by its definition rather than its name, so a model whose schema is named
binary,base64orbase64urlkeeps its own name across every language instead of being rendered as the native binary type. Generation no longer fails for C# and Java.Avoid redundant parsing branches for equivalent binary alternatives in Dart and PHP composed models.
Preserve imports for distinct types from the same namespace when inlining error model inheritance.
Dart: qualify model fields named
nodeordeserializerMapduring deserialization so local variables do not shadow them; escapeoverridemodel members to preserve Dart annotations. Fixes #7822.PHP: disambiguate enum constants that normalize to the same name while preserving wire values and existing constant names.
Java: omit unused discriminator-mapping imports for union/intersection wrappers, avoiding imports of nonexistent models while retaining member and inherited-factory imports.
Dart: omit unused discriminator-mapping imports for composed wrappers while preserving member and inherited-factory imports. Addresses #7821.
Preserve endpoints whose static path segments collide after name sanitization, such as /v1.1 and /v11. #7143
Ruby: a path with an escaped suffix, such as
/domains/{domainName}!quote, generated a request builder method that passed the raw path parameter name where the signature had snake cased it, and referenced the builder class without its namespace. Both raisedNameErroron first use. #7956... (truncated)
Commits viewable in compare view.
Updated WolverineFx.Http from 6.41.0 to 6.64.0.
Release notes
Sourced from WolverineFx.Http's releases.
6.64.0
A small release: three fixes, one of them a new observer signal, and a JasperFx and Weasel bump. JasperFx moves from 2.100.1 to 2.102.0 and Weasel from 9.49.0 to 9.50.0; Marten (9.58.0), Polecat (5.49.0) and Fisher (1.28.0) are unchanged. There is no schema change and no breaking API change.
Fixes
NativeAckendpoint, an envelope settled before it reached a handler (an unknown message type, an unreadable payload) is released from the lease tracker and the in-memory idempotency guard. It used to stay tracked until the lease ceiling and then log a false "unsettled for 00:59:xx" warning, an hour after it was completed (GH-5443).IWolverineObserver.CircuitBreakerResetis now raised, once per trip, when a listener the breaker paused accepts messages again. Nothing ever raised it before, so an alert opened onCircuitBreakerTrippedcould never be closed by Wolverine's own signal. A new overload,CircuitBreakerReset(Endpoint, CircuitBreakerResetReason), says whether the listener came back on its own afterPauseTimeor through an explicit start or restart. Its default forwards to the existing one-argument member, so existing observers keep working unchanged (GH-5446).ResetResourceState()no longer adds a newwolverine.response.*queue on every call. Each reset had been declaring and purging every reply queue built so far, so a test suite that resets before each test slowed down with every test, and a sender started after a reset could send its replies to a queue nobody listened to, soInvokeAsync<T>()timed out (GH-5452, thanks to @alesdvorakcz).Docs
AutoCreate(#5445).What's Changed
ResetResourceState()calls by @alesdvorakcz in GH-5452: Rabbit MQ keeps one reply queue acrossResetResourceState()calls JasperFx/wolverine#5453Full Changelog: JasperFx/wolverine@V6.63.0...V6.64.0
6.63.0
This is a durability release. Most of its fixes were found by the new out-of-process durability chaos rig (
src/Testing/DurabilityChaosRig), which kills, stops, pauses and starves producers and workers, then checks a ledger for lost, duplicated and stuck messages. Dependencies are unchanged from 6.62.0 (JasperFx 2.100.1, Weasel 9.49.0, Marten 9.58.0, Polecat 5.49.0, Fisher 1.28.0). Upgrading is a package bump with no breaking API change. The one schema change is a new index on the MySQL inbox table (GH-5428), applied by the usual message storage migration.Fixes
Docs
CHAOS_*knobs and containers (GH-5409, GH-5414).What's Changed
... (truncated)
6.62.0
This is a minor release on JasperFx 2.100.1, Weasel 9.49.0, Marten 9.58.0, Polecat 5.49.0 and Fisher 1.28.0. Upgrading is a package bump: there is no schema change and no breaking API change. If your projects pin
JasperFx.Events.SourceGeneratorcentrally, pin it to the same version asJasperFx.Events(see the note at the end).New
[SagaIsResponseOnly]for an endpoint that returns a saga as its response (GH-5069).PublishOnlyToShardedPostgresqlQueues, for publishing to sharded queues with no listeners (GH-5088).AggregateExceptionof concurrency failures maps to 409 (GH-5355);[DeduplicatedWithResponse]replays ASP.NET CoreIResultresponses, and reads a replayedLocationwithout per-request reflection (GH-5381).kafka-replay --group-idoption (thanks to new contributor @Mr444-dev).WhenTrackedsees events an application commits through its own injectedIDocumentSession, on Marten, Polecat and Fisher (GH-5385, GH-5390);GenerationRules.ReuseCompiledAssemblies(JasperFx 2.100.0) is documented and tested for many hosts in one process, in Dynamic and Auto modes, the codegen command and HTTP chains (GH-5378, GH-5391).EventModelReportprints the decider line beside starts (GH-5379), andscaffoldturns a multi-event automation into one handler class (GH-5361).Fixes
DurableLocalQueue.StartAsyncskips an already accepting queue and is serialized (GH-5348).ListenerCount > 1no longer recurses forever (GH-5363).OnExceptionreturning a tuple generates code that compiles (GH-5356), andOnExceptionhandlers for the same exception type merge into one catch clause.CloudEventsMapperkeeps the envelope id on re-read, with a stable id for non-Guid CloudEvent ids (GH-5364).Applyon every stream (GH-5360, a partial fix; the rest stays open).Microsoft.DotNet.ILCompileris cleared (GH-5387).Pinning JasperFx centrally
Polecat 5.49.0 needs JasperFx 2.100.1. If
JasperFx.Eventsis lifted to 2.100.1 whileJasperFx.Events.SourceGeneratorstays pinned at 2.100.0, the generator emits nothing and projections fail at run time with "No source-generated dispatcher found". Keep the two on one version (jasperfx#1138).What's Changed
... (truncated)
6.61.0
This is a minor release. Upgrading is a package bump only: there is no schema change and no breaking API change.
New
CronSchedule.MinimumCadenceis now one second, for six-field cron expressions such as* * * * * *. Anything faster than five seconds always runs on a timer agent, andUseScheduledMessages()refuses it.SkipWhileRunning()on a recurring schedule invokes each occurrence instead of publishing it. An occurrence that comes due while the previous one is still running is skipped, and skipped occurrences are not made up later. Skips are logged and counted in the newwolverine-recurring-occurrences-skippedmetric.PauseThenCatchUpOnAllMartenDaemonActivityAsync()and the tracked-session optionPauseThenCatchUpOnAllMartenDaemonActivity()catch up the main Marten store and every ancillary store registered withIntegrateWithWolverine()in one call. A store with no events is skipped.exceptionevent (exception.type,exception.message,exception.stacktrace) on its span, instead of only the exception's type name. Exception messages can carry application data, so you can turn this off withopts.Tracking.RecordExceptionsOnSpans = false.EntityDescriptor.Ddlnow carries each EF Core entity'sCREATE TABLEscript, with its keys, foreign keys and indexes, the same wayDocumentMappingDescriptor.Ddldoes for documents. It's generated from the model, so no connection is opened, and it's the model's script rather than the database's. Non-relational providers and view-mapped entities leave it empty. Needs JasperFx 2.99.0.http.routeandhttp.request.method, the OpenTelemetry semantic convention names, alongsidehandler.type. Both are constants in the generated code. Pre-generated code should be regenerated.DeadLetterEnvelopeQuery.RangeOn(DeadLetterTimeField.SentAtorFailedAt) (#5330).FailedAtfalls back tosent_atwhenfailed_atis null, and applies to query, replay, discard and archive. The default staysSentAt. Supported by the PostgreSQL, SQL Server, MySQL, SQLite, Oracle, CosmosDb and RavenDb stores.Fixes
TrackConnectionsturned on, the handler, saga and stream tags (handler.type,message.handler,wolverine.saga.*,wolverine.stream.*) landed on themarten.connectionspan instead of the message's own span. They now stay on the message span, and on the request span for HTTP endpoints. Pre-generated code should be regenerated.ScheduleRetry(...)lost the link to the attempt that failed, because the stored envelope body wasn't rewritten when the retry was scheduled. Every message store now rewrites the body when it reschedules an envelope.DeadLetterStorageMode.NativeWithRecoverywhenEnableDeadLetterQueueRecovery()drains them, so CritterWatch's startup check no longer warns about them.EnableDeadLetterQueueRecovery(), stopping the host could throwAlreadyClosedExceptionwhen two stops ran at once, as they do underWebApplicationFactory. Stopping the dead letter queue listener is now idempotent and never throws.FindSingleTrackedMessageOfType<T>()now counts envelopes rather than distinct message values, so publishing two equal records fails the check. A message sent to several destinations still counts once. Usetracked.Sent.SingleMessage<T>()for a check per destination.PauseThenCatchUpOnMartenDaemonActivitywaits out the high water agent's current poll tick. The fix is JasperFx/jasperfx#1100.ServiceCapabilities.Sagasonce it had been handled, and the saga disappeared once every message had been. The saga report, including each store'sGetRegisteredSagasAsync, now reads the same before and after the chains compile.Balancedmode, lifting a pause on a URI that no agent owns, such as a listening endpoint, waited outAgentRestrictionConfirmationTimeoutand then threwAgentRestrictionsNotConfirmedException. It now returns at once. Agent URIs are still confirmed as before.IPolecatOutbox.EnrollorIFisherOutbox.Enrollnever flushed their outgoing messages on commit (#5309). Durable messages waited until a restart and buffered messages were lost. They now flush on commit, the same as handler sessions, and the incoming envelope is marked handled once instead of twice.Dependencies
WolverineFx.MySql. On SQL Server, aDateTimeparameter in a message store command now goes out asdatetime2instead ofdatetime. Every envelope time column isdatetimeoffset, so no column is converted either way.Thanks to @uniquelau for #5313, #5314, #5315, #5317 and #5318, and to @lahma for #5330.
Full Changelog: JasperFx/wolverine@V6.60.0...V6.61.0
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), `DeliveryLimitFor...Description has been truncated