Skip to content

Bump the nuget-minor-patch group with 15 updates - #303

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/nuget/nuget-minor-patch-556f52e0d8
Open

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/nuget/nuget-minor-patch-556f52e0d8

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 16, 2026

Copy link
Copy Markdown
Contributor

Updated Aspire.Hosting.Docker from 13.6.0 to 13.6.1.

Release notes

Sourced from Aspire.Hosting.Docker's releases.

13.6.1

What's New in Aspire 13.6.1

Patch release for Aspire 13.6 that reduces dashboard CPU usage during sustained metric ingestion, restores scrolling in the Metrics tree, improves dashboard navigation, fixes container exec watch failures, and ensures session-scoped containers are cleaned up when stopping .NET AppHosts on Windows.

🐛 Fixes

  • 📊 Dashboard CPU usage could increase during long-running metric ingestion — Metric retention repeatedly scanned retained history on every insertion, causing steadily increasing CPU usage even with a fixed workload. Cleanup now skips dimensions below capacity and removes only the oldest surplus points when needed. Existing retention limits and exemplar behavior are unchanged, and no configuration changes are required. Regression introduced in 13.6. Fixes #​20725. (#​20747, backport of #​20736, @​JamesNK)

  • 📈 The Metrics tree could not be scrolled — The meter and instrument tree now scrolls when it exceeds the viewport, allowing you to reach and select instruments below the fold. Regression introduced in 13.6. Fixes #​20728. (#​20762, backport of #​20758, @​heyysiri)

  • 🧭 Dashboard navigation could fail after a browser disconnect — Pending page-state updates now persist session state before navigating and skip navigation when the browser has disconnected, avoiding an unhandled navigation failure. The navigation rail's overflow button also has consistent sizing, icon alignment, and hover styling in expanded and collapsed layouts and both light and dark themes. (#​20545, backport of #​20527, @​JamesNK)

  • 🖥️ Container exec watches could terminate shortly after AppHost startup — A stalled DCP watch connection could produce a critical Watch task over Kubernetes ContainerExec resources terminated unexpectedly error and stop subsequent terminal state and log updates from being observed. Watch connection attempts now retry after timeouts, and periodic restarts correctly recreate connections without swallowing unrelated cancellation. Regression introduced in 13.6.0. (#​20664, backport of #​20466, @​radical)

  • 🪟 Session-scoped containers could remain running after stopping a .NET AppHost on Windows — AppHosts launched through dotnet run or dotnet watch now allow DCP to finish resource cleanup during shutdown, including existing Ctrl+C and aspire stop flows. Persistent resources remain unaffected, while direct .NET launches and TypeScript/polyglot AppHosts retain their existing process protection. Fixes #​20495. (#​20514, backport of #​20494, @​danegsta)


Full Changelog: v13.6.0...v13.6.1

Full commit: 3751e615ad660621f2a7aa4c390ef48e08a0eed8

Commits viewable in compare view.

Updated Aspire.Hosting.PostgreSQL from 13.6.0 to 13.6.1.

Release notes

Sourced from Aspire.Hosting.PostgreSQL's releases.

13.6.1

What's New in Aspire 13.6.1

Patch release for Aspire 13.6 that reduces dashboard CPU usage during sustained metric ingestion, restores scrolling in the Metrics tree, improves dashboard navigation, fixes container exec watch failures, and ensures session-scoped containers are cleaned up when stopping .NET AppHosts on Windows.

🐛 Fixes

  • 📊 Dashboard CPU usage could increase during long-running metric ingestion — Metric retention repeatedly scanned retained history on every insertion, causing steadily increasing CPU usage even with a fixed workload. Cleanup now skips dimensions below capacity and removes only the oldest surplus points when needed. Existing retention limits and exemplar behavior are unchanged, and no configuration changes are required. Regression introduced in 13.6. Fixes #​20725. (#​20747, backport of #​20736, @​JamesNK)

  • 📈 The Metrics tree could not be scrolled — The meter and instrument tree now scrolls when it exceeds the viewport, allowing you to reach and select instruments below the fold. Regression introduced in 13.6. Fixes #​20728. (#​20762, backport of #​20758, @​heyysiri)

  • 🧭 Dashboard navigation could fail after a browser disconnect — Pending page-state updates now persist session state before navigating and skip navigation when the browser has disconnected, avoiding an unhandled navigation failure. The navigation rail's overflow button also has consistent sizing, icon alignment, and hover styling in expanded and collapsed layouts and both light and dark themes. (#​20545, backport of #​20527, @​JamesNK)

  • 🖥️ Container exec watches could terminate shortly after AppHost startup — A stalled DCP watch connection could produce a critical Watch task over Kubernetes ContainerExec resources terminated unexpectedly error and stop subsequent terminal state and log updates from being observed. Watch connection attempts now retry after timeouts, and periodic restarts correctly recreate connections without swallowing unrelated cancellation. Regression introduced in 13.6.0. (#​20664, backport of #​20466, @​radical)

  • 🪟 Session-scoped containers could remain running after stopping a .NET AppHost on Windows — AppHosts launched through dotnet run or dotnet watch now allow DCP to finish resource cleanup during shutdown, including existing Ctrl+C and aspire stop flows. Persistent resources remain unaffected, while direct .NET launches and TypeScript/polyglot AppHosts retain their existing process protection. Fixes #​20495. (#​20514, backport of #​20494, @​danegsta)


Full Changelog: v13.6.0...v13.6.1

Full commit: 3751e615ad660621f2a7aa4c390ef48e08a0eed8

Commits viewable in compare view.

Updated Aspire.Hosting.Testing from 13.6.0 to 13.6.1.

Release notes

Sourced from Aspire.Hosting.Testing's releases.

13.6.1

What's New in Aspire 13.6.1

Patch release for Aspire 13.6 that reduces dashboard CPU usage during sustained metric ingestion, restores scrolling in the Metrics tree, improves dashboard navigation, fixes container exec watch failures, and ensures session-scoped containers are cleaned up when stopping .NET AppHosts on Windows.

🐛 Fixes

  • 📊 Dashboard CPU usage could increase during long-running metric ingestion — Metric retention repeatedly scanned retained history on every insertion, causing steadily increasing CPU usage even with a fixed workload. Cleanup now skips dimensions below capacity and removes only the oldest surplus points when needed. Existing retention limits and exemplar behavior are unchanged, and no configuration changes are required. Regression introduced in 13.6. Fixes #​20725. (#​20747, backport of #​20736, @​JamesNK)

  • 📈 The Metrics tree could not be scrolled — The meter and instrument tree now scrolls when it exceeds the viewport, allowing you to reach and select instruments below the fold. Regression introduced in 13.6. Fixes #​20728. (#​20762, backport of #​20758, @​heyysiri)

  • 🧭 Dashboard navigation could fail after a browser disconnect — Pending page-state updates now persist session state before navigating and skip navigation when the browser has disconnected, avoiding an unhandled navigation failure. The navigation rail's overflow button also has consistent sizing, icon alignment, and hover styling in expanded and collapsed layouts and both light and dark themes. (#​20545, backport of #​20527, @​JamesNK)

  • 🖥️ Container exec watches could terminate shortly after AppHost startup — A stalled DCP watch connection could produce a critical Watch task over Kubernetes ContainerExec resources terminated unexpectedly error and stop subsequent terminal state and log updates from being observed. Watch connection attempts now retry after timeouts, and periodic restarts correctly recreate connections without swallowing unrelated cancellation. Regression introduced in 13.6.0. (#​20664, backport of #​20466, @​radical)

  • 🪟 Session-scoped containers could remain running after stopping a .NET AppHost on Windows — AppHosts launched through dotnet run or dotnet watch now allow DCP to finish resource cleanup during shutdown, including existing Ctrl+C and aspire stop flows. Persistent resources remain unaffected, while direct .NET launches and TypeScript/polyglot AppHosts retain their existing process protection. Fixes #​20495. (#​20514, backport of #​20494, @​danegsta)


Full Changelog: v13.6.0...v13.6.1

Full commit: 3751e615ad660621f2a7aa4c390ef48e08a0eed8

Commits viewable in compare view.

Updated Marten from 9.45.0 to 9.50.3.

Release notes

Sourced from Marten's releases.

9.50.3

The Native AOT and hard-delete release. One new feature on the event store, two schema-naming fixes that could not be worked around, and three behaviour changes — read those before upgrading.

Note on these notes. They were rewritten after publication. 9.50.3 was cut as the JasperFx 2.90.1 dependency bump, but five pull requests had merged in the minutes before the tag, so the tag carried all of them too. The original notes described only the dependency bump and said no code change was needed. Everything below is what 9.50.3 actually contains; nothing about the published packages changed.

New

  • TombstoneStream — a hard stream delete (#​5673, #​5674). session.Events.TombstoneStream(id) queues a single-statement delete of a stream's tag rows, its events and its stream row — plus the mt_streams_identity row under strict identity enforcement — scoped to the session tenant under conjoined tenancy. The event sequence is never touched, and projected documents are deliberately left alone. Queued until SaveChangesAsync, like every other write.

    It is on the shared IEventStoreOperations contract as a default member that throws NotSupportedException, so a store without a hard delete stays source-compatible, and the shared StreamTombstoningCompliance suite now runs against Marten.

  • DCB tag types can be registered for Native AOT (#​5649, #​5674, #​5676). RegisterTagType<TTag>() discovers the tag's inner type by reflecting over its members and closes a generic registration at runtime, neither of which a native image can do — so a store with a DCB tag type could not even be configured under AOT.

    opts.Events.RegisterTagType<StudentId, Guid>(x => x.Value, "student")
        .ForAggregate<StudentCourseEnrollment>();

    Naming the inner type closes the generic at compile time and the unwrapper replaces the reflection. The suffix is optional and defaults to the tag type's own name, so for a tag the inferring overload could register, this one registers the same inner type and the same table. It works identically under a JIT.

    The inferring overloads are now annotated [RequiresUnreferencedCode]/[RequiresDynamicCode], and — because an analyzer warning only reaches an application that is itself AOT-analyzed, while a store configured from inside a library gets nothing — a failure at runtime now throws naming the exact line to write, keeping the original exception as its inner exception. Automatic tag registration from projection identities logs a warning naming the same line, including the projection's ForAggregate<T>().

    With explicit registrations, tagging, tag rules, EventTagQuery, EventsExistAsync, AggregateByTagsAsync and FetchForWritingByTags into a [BoundaryAggregate] all run from a native binary. A CI job publishes and runs them.

Fixed

  • A custom foreign key name is no longer discarded under conjoined tenancy (#​5672, #​5678). Moving tenant_id to the front of a document foreign key regenerated the key's name unconditionally, so a name set through the foreignKeyConfiguration callback was thrown away. That is what made the identifier-length failure unfixable: the exception tells you to override the database object name, and overriding it had no effect. A generated name is still regenerated; a chosen one survives, as does the name of a ForeignKey added by hand.

  • Archiving a tagged stream no longer fails with a foreign key violation (#​5675, #​5679). With UseArchivedStreamPartitioning on and any DCB tag type registered, ArchiveStream came back as 23503. Each mt_event_tag_* table is partitioned by is_archived and carries a composite foreign key to mt_events; mt_archive_stream moved the events between partitions without moving the tag rows that referenced them. It now moves them, in the order that keeps both sides of a non-deferrable key consistent at every statement.

  • AllObjects() no longer applies the Hi-Lo DDL (#​5665, #​5670). Describing the schema provisioned part of it. The describing seam is now separate from the applying one, and is proven offline against an unreachable host.

  • A failed Rebuild-mode run can be restarted and finished from its committed progress (#​5668, #​5669).

Performance

  • A commit that only starts streams no longer queries for a snapshot that cannot exist (#​5671, thanks @​lahma). An inline single-stream projection asks storage only for the ids of streams being appended to, so a start-only commit passed an empty id array — and still paid a round trip on id = ANY($1) that could only return no rows, plus a second connection with the default UseIdentityMapForAggregates = false. The same guard removes a wasted round trip from an async daemon batch whose slices all hit the aggregate write cache.

Behaviour changes

  1. An empty DCB tag table suffix is refused. RegisterTagType<T>("") used to be accepted and named mt_event_tag_ — a real table that every tag type registered that way would share. Pass a suffix, or null for the tag type's own name.

  2. A tag type that cannot be read now throws InvalidOperationException, with the original InvalidValueTypeException as its inner exception, and a message naming the explicit registration. This happens whether or not dynamic code is available, because the same exception means "not a single-value wrapper" under a JIT and "the members were trimmed away" in a trimmed image, and nothing at runtime tells those apart.

  3. Document foreign key and index names longer than 63 characters are shortened with a deterministic hash suffix, the same treatment the document table's primary key already got. If you raised PostgreSQL's NAMEDATALEN and have a foreign key or index whose generated name is between 64 characters and your own limit, that object will be renamed and you will see it in a migration diff.

Known, not fixed

DCB tag queries return archived events, where every other event query excludes them by default — #​5677. It matters most for EventsExistAsync, which is what a consistency boundary assertion is built on: an archived stream still answers yes. Independent of storage mode and of archived-stream partitioning.

Dependencies

... (truncated)

9.50.2

A maintenance release. Nothing in a shipped Marten package changed, and nothing here requires a configuration or code change.

Dependencies

  • The NuGet vulnerability audit is clean (#​5666). Marten's shipped packages were never affected by GHSA-846f-f764-76mx (CVE-2026-84008, System.Security.Cryptography.Pkcs). Npgsql doesn't bring that package in. Every finding was in the Nuke build tool or the samples:
    • The build tool now uses patched System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml and NuGet.Packaging.
    • The OpenTelemetry packages used by the EventPublisher sample and the Aspire sample moved from 1.8.x to 1.19.x.

The same advisory does reach Polecat and Weasel's SQL Server and Oracle packages, through their database drivers. Those are fixed in Polecat 5.40.2 and Weasel 9.45.1.

9.50.1

A patch release with one addition, for Wolverine's agent assignment. Nothing here requires a configuration or code change.

Event store

  • IEventStore.TryDescribeDatabasesAsync() is answered straight from the tenancy (#​5664). JasperFx 2.87.1 adds this narrower call, the database half of TryCreateUsage(). It returns each database's server, name and tenant ids without reading the highest event sequence or describing every projection, subscription, event type and tag type. Wolverine 6.50.0 asks for it on every leader heartbeat, for every store, where it used to build the full usage (JasperFx/wolverine#​5002). It follows on from #​5652, so thanks again to @​uniquelau for a report that came with the heartbeat maths already done.

Dependencies

  • JasperFx 2.87.1.

9.50.0

A bug-fix release. Nothing here requires a configuration or code change, but three things change what an application observes — read the box below before upgrading.

Observable changes

  • TotalResults changes value for Stats() + Include() + Select() + Take(). It was reporting the size of the page; it now reports the number of matches (#​5654). If you compute page counts from it, those counts change — to the correct ones.
  • A new warning may appear at startup if tag-type auto-discovery cannot register a projection's identity type. That condition is not new; it was previously silent (#​5649).
  • db-patch drop files no longer DROP ... CASCADE every schema — they roll back only what the patch touched (Weasel 9.45.0, weasel#​706). This is the one to look at if you apply drop files in an environment you care about.

LINQ — Include() joined on the queried document's own id

Three separate defects in the same corner, found by pulling on the first one. An Include() joined on the queried document's own id builds a temp table, and that temp table was missing the id it is joined on.

  • #​5650 — failed with 42703: column d.id does not exist in a query session when the queried document had any duplicated field. Lightweight, identity-map and dirty-tracked sessions were unaffected. Thanks to @​Blackclaws for the report and the fix (#​5651).
  • #​5653 — the same 42703, in a query session, when the query also called Stats(). Unlike #​5650 this did not depend on a duplicated field; Stats() wraps the select clause, which hid it from the check that puts the id back.
  • #​5654 — Stats() with an Include() and a Select() projection reported TotalResults as the size of the page rather than the number of matches, whenever Take() was used. No exception, just a wrong number, on every session kind. The temp table already held the correct count — PostgreSQL evaluates a window function before LIMIT — but re-applying the projection emitted a second count(*) over() against the already-truncated temp table.

If you page a projected grid with Stats() and Include(), #​5654 is the one to read.

Event store

  • #​5652 — a store with no event types and no projections never has its event tables migrated, so building a usage descriptor asked Postgres for a table that was not there. Marten swallowed the failure, but Postgres logged an ERROR for every attempt; under UseWolverineManagedEventSubscriptionDistribution the leader does this for every store on a ten-second heartbeat, which is tens of thousands of server-side ERROR lines a day for a store that can never hold an event. Marten now asks the catalog first, so nothing reaches the server log. Thanks to @​uniquelau for a report that came with the heartbeat maths already done.
  • #​5658 — IEventStore.FindDatabaseForTenantAsync, so a caller waiting on or querying a single tenant touches only that tenant's database instead of all of them. Goes through ITenancy.TryFindDatabase, never FindOrCreateDatabase, so a lookup cannot bring an unknown tenant into existence.

Native AOT

  • #​5649 (partial) — a DCB [BoundaryAggregate] fetch failed natively with MissingMethodException, because EventGraph.Build<TDoc>() closed SingleStreamProjection<,> at runtime even though both type arguments were known at compile time. And tag-type auto-discovery swallowed the AOT failure in the same breath as a benign one, leaving a store running with the tag type quietly absent; it now says so. Verified by publishing and running the native binary, not by a clean publish.

    Still open: RegisterTagType<TTag>() closes its own open generic and remains broken under Native AOT. That needs a reflection-free construction path in JasperFx.Events plus a new overload — see the discussion on #​5649. Thanks to @​skoging for an unusually thorough report, with native runs and three costed alternatives.

Dependencies

  • Weasel 9.45.0 — db-patch drop files no longer drop every schema with CASCADE; they roll back only what the patch touched (weasel#​706). This changes what an existing drop file does. Primary keys can also now be added to and removed from existing tables (weasel#​707).
  • JasperFx 2.87.0 — across all five packages.

Known issue

Stats() with Include() and a Select() projection is fixed here, but note that the Include() itself still follows the page, not the match set — it reads from the same truncated temp table. Only the statistics column outlives the Take(). That is existing, intended behaviour; it is called out because #​5654 makes the distinction visible for the first time.

9.49.0

The LINQ projection surface works under Native AOT

The theme of this release. #​5624 came in as "a projection into an anonymous type cannot be
materialized under Native AOT". Publishing Marten.AotRuntimeSmoke natively and running it showed
something much wider: every Select() projection into a new object failed from a native binary,
a named DTO exactly as hard as an anonymous one
, and it failed before the serializer was ever
reached.

MissingMethodException: No parameterless constructor defined for type
'Marten.Linq.SqlGeneration.SelectDataSelectClause`1[YourDto]'

A projection is parsed out of an expression tree, so the parser only has selectExpression.Type and
closed its select clause over that Type with MakeGenericType + Activator.CreateInstance — the
defect class of #​5328, one step later in the pipeline. Only a bare string scalar survived, because
its clause happens not to be generic, which is what made the surface look healthy.

Shapes that threw from a native binary before this release and run now:

  • Select(x => new Summary { ... }) — a named DTO
  • Select(x => x.Lines) — a collection member, and the element type of a SelectMany(x => x.Lines)
  • Select(x => x.Amount) for every framework scalar type, decimal? and the other nullable ones included
  • Select(x => x.Status) and MaxAsync(x => x.Status) for an enum of your own — see the one line below
  • GroupBy(...).Select(g => new Tally { ... })

The fix is SelectClauseResolvers, which does for projected types what #​5328's
DocumentStorageResolvers does for document types: a registry populated from
MartenLinqQueryable<T>'s constructor, which every projected type reaches because
Queryable.Select<TSource, TResult>() asks the provider for CreateQuery<TResult>(). The reflective
path remains the fallback wherever a JIT is available, so nothing changes for JIT-mode apps.

One line for an enum or struct of your own

Marten's scalar select clause is declared where T : struct and the registration point above
constrains its own T to notnull, so Marten can root the scalar types it renders itself —
decimal, Guid, DateOnly and the rest need nothing — but not one out of your assembly:

opts.Schema.For<Order>();
opts.RegisterScalarType<OrderStatus>();   // new in 9.49.0; no-op under a JIT

Only bare scalar projections need it. Projecting the same enum as a member of a named type, and
filtering on it, never did. When the registration is missing, the failure now names that exact call
instead of reporting a missing parameterless constructor on an internal generic.

An anonymous projection is refused with the remedy

With a source-generated JsonSerializerContext assigned to
... (truncated)

9.48.0

Document diagnostics: filter and order by document properties (jasperfx#​869, #​5631)

IDocumentStoreDiagnostics.QueryDocumentsAsync now applies DocumentQueryOptions.Where / OrderBy / Arguments instead of refusing them. The text goes onto Query<T>() through JasperFx 2.84.0's Dynamic LINQ helper, so member casing, enum storage, duplicated fields, conjoined tenancy, soft deletes and hierarchies are Marten's own; only the SELECT list is swapped for the diagnostics read's columns, so the JSON comes back byte-exact with its metadata, and the total counts the filtered rows. Operator text is never spliced into SQL, and the read issues no DDL.

Measured against a LINQ-to-objects oracle over 83 shapes and three storage configurations; every shape is either right or refused:

  • Refused: range comparisons on, and ordering by, an enum stored as its name (string serializer storage or a varchar duplicated field), and <> / a negated comparison on a nullable member unless the text says what null should do (JasperFx's SqlNullSemantics). Date-part members and inline in (…) lists are refused honestly by the provider.
  • Fixed rather than refused: criteria orderings put nulls first ascending, as .NET does (PostgreSQL defaults to last), and DateTime arguments compare correctly against timestamp without time zone locators.
  • String ordering follows the database's collation (note: Alpine images use musl and sort bytewise).
  • Under Native AOT, criteria are refused.

Fixes

  • Grouped projections translate Count / LongCount predicates through the Where parser, with null semantics and bound parameters (#​5625).
  • A quick-mode StartStream that loses a race for the same stream id now throws ExistingStreamIdCollisionException instead of a raw 23505, so QuickWithServerTimestamps behaves like Rich and Quick (#​5628).

Dependencies

JasperFx 2.84.0

9.47.0

The FetchForWriting / FetchLatest consistency release, plus a bounded async-daemon shutdown.

Read the behaviour changes before upgrading. Two of them can change how your projections and
subscriptions behave on every deployment, and two more refuse a batch shape that used to be accepted.

⚠️ Behaviour changes

Subscription and projection drains are now bounded by StopAndDrainTimeout ([#​5610])

Via JasperFx 2.81.0 (jasperfx#​953 and jasperfx#​983). When a shard stops — host shutdown, or reassignment
to another node — the page in flight finishes, pages still queued are skipped and resumed by the next
owner from committed progression, and a page still running at Projections.StopAndDrainTimeout
(default 5 seconds) is cancelled with its transaction rolled back.

This fixes a real failure: a node that loses a shard's lock no longer keeps applying its backlog
alongside the new owner, an overlap that could end in ProgressionProgressOutOfOrderException and a
Stopped shard. Graceful shutdown is also bounded now, rather than waiting out the whole backlog and
potentially overrunning a Kubernetes termination grace period.

If your projection or subscription pages take longer than 5 seconds, raise the timeout:

opts.Projections.StopAndDrainTimeout = 30.Seconds();

Otherwise those pages are cancelled and re-processed on every shutdown and rebalance. Delivery was
always at-least-once, so no guarantee changed, but duplicates become much more likely — and side effects
performed outside the Marten session (HTTP calls, sends that bypass the transactional outbox) are not
rolled back with the page. Note this applies to async projections as well as subscriptions; the upstream
note covers only subscriptions and is out of date.

A batched FetchLatest or expected-version FetchForWriting must be first in its batch ([#​5604])

For an aggregate projected with ProjectionLifecycle.Async only. Both now bracket their reads in
begin transaction isolation level repeatable read read only … end so those reads share one snapshot,
and PostgreSQL accepts that only as a transaction's first statement. So:

  • batch.Events.FetchLatest<T>(id) and batch.Events.FetchForWriting<T>(id, version) have to be the
    first operation in their batch, and
  • neither can share a batch with a FetchForExclusiveWriting.

Both are refused at the enlisting call, naming the call to move, rather than surfacing later as a bare
25001. Inline and Live aggregates are unaffected, and inside a caller-owned transaction no bracket is
emitted so neither rule applies. If you batch a FetchLatest behind a Load, move it to the front.

New SnapshotRaceException from a batched exclusive fetch ([#​5613])

A batched FetchForExclusiveWriting on an Async aggregate now throws Marten.Exceptions.SnapshotRaceException
in the rare case where the daemon commits a snapshot between that batch's two reads. Retry the batch, or
fetch outside a batch — outside a batch Marten retries for you and you will never see it.
... (truncated)

9.46.0

Mostly a resiliency and Native AOT release. Five behaviour changes — the retry ones are the most likely to be noticed, because Marten now surfaces failures it used to absorb.

Behaviour changes

A command timeout is no longer retried on reads (#​5566, #​5580). An attempt that timed out has already spent the whole CommandTimeout, so retrying it three times held the caller for four timeouts instead of one. This covers both shapes: Npgsql's client-side CommandTimeout, and a server-side statement_timeout, which arrives as 57014 query_canceled with no TimeoutException anywhere in the exception. Connection-pool exhaustion arrives in the same shape and so is no longer retried either — a deliberate trade, documented in the resiliency guide along with what to do instead.

Sticky, ambient and external session lifetimes now fail loudly (#​5582, #​5598), via the new SessionTransactionUnusableException. Two things used to go wrong silently. A broken connection reported ConnectionState.Closed, so Marten reopened it — onto a different backend — and handed the command the stale transaction, which Npgsql accepts; a Serializable session then quietly answered from a newer snapshot. And a command timeout inside a transaction aborted it, after which every later call returned a bare 25P02 naming neither the timeout nor the way out. For caller-owned transactions Marten records the cause and reports it but rolls nothing back — the scope is still yours.

The async serializable session builders now produce a serializable session (#​5594). OpenSerializableSessionAsync(new SessionOptions()) previously returned a session that was neither serializable nor auto-closing: it held one connection open for its lifetime with no transaction. These two methods now pin IsolationLevel to Serializable and begin the transaction eagerly. A non-Serializable level passed to them is overridden rather than silently honoured.

The async daemon spends one retry budget instead of two (#​5593). ResilientEventLoader and the QuerySession inside it were both given the same pipeline, so a handled failure ran up to sixteen times.

A retried write no longer accumulates exceptions across attempts (#​5591). The exception list was shared, and ExecuteBatchPagesAsync branches on its count — so one operation failing twice turned a rethrow into an AggregateException, making the caller's exception type depend on how many retries happened.

Native AOT

Strong-typed document ids now work (#​5589, #​5579), with one registration per document type:

opts.Schema.For<Invoice>();
opts.RegisterValueTypeId<Invoice, InvoiceId, Guid>();

Previously a single strong-typed id anywhere in the store killed the application while the first document's mapping was built. The identity path closes a chain of generics over your id type, and a native image has no instantiation for them unless something roots it; naming all three types is what roots them. Under a JIT the call does nothing — unregistered types still take the reflective path. Not yet covered: F# single-case discriminated-union ids, and .IsOneOf over a strong-typed id. The intent is for Marten.SourceGenerator to emit these registrations so the call becomes unnecessary.

Also AOT: a decimal comparison in a LINQ filter is documented with a tested workaround (#​5597) — it is the BCL expression-tree factory rather than Marten, but it only shows up from a native binary. Marten's AOT runtime gate now covers strong-typed ids and decimals, so these stay pinned.

Fixes

  • PrefixSearch quotes each word as a tsquery lexeme (#​5571, #​5568), so a search box containing &, |, !, (, : or a tab no longer produces 42601: syntax error in tsquery. Not an injection — the term was already a parameter — but the documented contract says each word is treated as a prefix, and raw input has to be escaped to honour that.
  • A quick append nulls every DCB tag slot, not just the tagged ones (#​5570).
  • AdvisoryLock shutdown release is bounded, and the vendored copy moves back to Weasel (#​5572, #​5576).
  • Three catch-and-Console.WriteLine-and-rethrow blocks removed (#​5584) — they bypassed IMartenSessionLogger and any configured ILogger, and one of them also closed a connection on the line above the one that opened it.

Dependencies

JasperFx 2.80.2 (#​5590) and Weasel 9.41.0 (#​5596, #​5576). Both carry Native AOT work of their own on the identity path — JasperFx's ValueTypeInfo wrappers and aggregate identity sources, Weasel's non-generic IIdentification facade.

🤖 Generated with Claude Code

https://claude.ai/code/session_01481eiEZg1Bv6pu4DrgPRg3

Commits viewable in compare view.

Updated Microsoft.AspNetCore.DataProtection.Abstractions from 10.0.12 to 10.0.13.

Release notes

Sourced from Microsoft.AspNetCore.DataProtection.Abstractions's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.DependencyInjection.Abstractions from 10.0.12 to 10.0.13.

Release notes

Sourced from Microsoft.Extensions.DependencyInjection.Abstractions's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.Http from 10.0.12 to 10.0.13.

Release notes

Sourced from Microsoft.Extensions.Http's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.Http.Resilience from 10.10.0 to 10.11.0.

Release notes

Sourced from Microsoft.Extensions.Http.Resilience's releases.

10.11.0

.NET Extensions 10.11.0

This release adds optional scope capture for buffered logs and updates experimental HTTP latency enrichment APIs. It also includes fixes for AI streaming and function invocation, evaluation reports, HybridCache invalidation, and logging.

Experimental API Changes

New Experimental APIs

  • Optional logging-scope capture for global and per-request log buffering through GlobalLogBufferingOptions.IncludeScopes and PerRequestLogBufferingOptions.IncludeScopes (EXTEXP0003) #​7813

Breaking Changes to Experimental APIs

  • Incoming HTTP latency log enrichment: AddHttpLatencyTelemetry is renamed to AddHttpServerLatencyTelemetry and moves from HttpLatencyTelemetryServiceCollectionExtensions to HttpLoggingServiceCollectionExtensions. It remains experimental under EXTEXP0013 in this release. #​7730

What's Changed

AI

  • Yield final image when streaming with HostedImageGenerationTool #​7774 by @​iamAdarshh
  • Make the default tool-rejection message state that the decision is final #​7784 by @​manjunathshiva
  • AI: Remove obsolete OpenAI JsonPatch workaround #​7815 by @​jozkee (co-authored by @​Copilot)
  • Ignore empty model IDs in streaming responses #​7816 by @​valkiara
  • Honor FunctionInvocationContext.Terminate when the function throws #​7801 by @​gjz22
  • Fix ChatResponseUpdate.Clone dropping ContinuationToken #​7699 by @​dfedoryshchev
  • Decode non-base64 data URIs in DataContent to the octets they encode #​7798 by @​Laurianti

AI Evaluation

  • [M.E.AI.Evaluation.Reporting] Fix context and metric interpretation visualization #​7738 by @​grafanaKibana
  • Fix tokenizer attaching punctuation to number tokens #​7766 by @​tahakocal
  • Order iteration results numerically #​7769 by @​tahakocal
  • Score GLEU against the best matching reference #​7768 by @​tahakocal

Telemetry and Observability

  • Optionally preserve logging scopes in buffered log records #​7813 by @​evgenyfedorov2 (co-authored by @​Copilot)
  • Fix OOM from unbounded enumeration of ExtendedLogger tag joiners #​7819 by @​evgenyfedorov2 (co-authored by @​Copilot)
  • Fix log buffering race by removing the rule selector cache #​7803 by @​evgenyfedorov2 (co-authored by @​Copilot)

ASP.NET Core Extensions

  • Rename AddHttpLatencyTelemetry to AddHttpServerLatencyTelemetry (API-approved shape) #​7730 by @​EasyL0ver (co-authored by @​Copilot)
  • Fix ArgumentNullException in per-request log buffering at the end of a request #​7811 by @​evgenyfedorov2 (co-authored by @​Copilot)

AI Project Templates

  • Align aichatweb local vector-store keys with Guid record keys #​7804 by @​jongalloway (co-authored by @​adamsitnik @​Copilot)

Caching

... (truncated)

10.10.1

This release fixes two OpenAI integration issues: a TypeLoadException on tool-carrying Responses API calls and a streaming crash against third-party OpenAI-compatible endpoints, by upgrading the OpenAI SDK to 2.14.0.

Packages in this release

Package Version
Microsoft.Extensions.AI.OpenAI 10.10.1
Microsoft.Extensions.AI.Abstractions 10.10.1

What's Changed

AI

  • Upgrade OpenAI SDK to 2.14.0 #​7761 by @​zxyao145

Acknowledgements

  • @​zxyao145 made their first contribution in #​7761
  • @​zxyao145 submitted issue #​7760 (resolved by #​7761)
  • @​jozkee @​wtgodbe reviewed pull requests

Full Changelog: dotnet/extensions@v10.10.0...v10.10.1

Commits viewable in compare view.

Updated Microsoft.Extensions.Localization.Abstractions from 10.0.12 to 10.0.13.

Release notes

Sourced from Microsoft.Extensions.Localization.Abstractions's releases.

No release notes found for this version range.

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 Quartz.Extensions.Hosting from 4.3.0 to 4.5.1.

Release notes

Sourced from Quartz.Extensions.Hosting's releases.

4.5.1

Three packages take the fixed versions of dependencies named in Microsoft's October 13 security advisories. There is no public API change and no schema change, and no other package changes.

Fixed

  • Quartz.Dashboard.Agent requires Microsoft.AspNetCore.SignalR.Client 10.0.13. 4.5.0 required 10.0.0, and every SignalR client before 10.0.13 brings a Microsoft.AspNetCore.SignalR.Common covered by GHSA-334f-vvp4-7g6p (CVE-2026-70159). So an application referencing the agent got NU1903 at restore, and that is an error wherever warnings are errors. The fixed client asks for Microsoft.Extensions.DependencyInjection, Logging and Logging.Abstractions 10.0.13 or later, so an application referencing the agent now resolves those at least that high. The agent's own nuspec no longer repeats the framework-extension floors it inherits from Quartz. (#​4065)
  • Quartz.Weasel.Oracle and Quartz.Weasel.SqlServer require System.Security.Cryptography.Pkcs 9.0.21. Their database drivers, reached through Weasel, bring Pkcs 8.0.0 and 9.0.4, which GHSA-2fmv-rv2c-59x7 and GHSA-846f-f764-76mx cover. Neither package calls it. The direct reference lifts an application's graph to the fixed version, and can go once the drivers require a fixed one themselves. (#​4065)

The same SignalR fix ships for 3.x's Quartz.Dashboard in 3.22.6.

What's Changed

Other changes

Full Changelog: quartznet/quartznet@v4.5.0...v4.5.1

4.5.0

Quartz.NET 4.5 is one dashboard for a fleet. It fronts schedulers in other processes, on other machines and in other clusters, and tells apart workers that all run QuartzScheduler. Targets fronting one clustered store show as one row with its nodes. A new package, Quartz.Dashboard.Agent, lets a worker dial out to the dashboard, so the worker opens no inbound port. Six more packages are proven under native AOT on every pull request. An application on 4.4 compiles on 4.5 unchanged, and the database schema did not change.

dotnet add package Quartz --version 4.5.0

Highlights

  • A fleet, keyed target/name. Each AddQuartzHttpClient registration names its process with HttpClientOptions.Target, so w1/QuartzScheduler and w2/QuartzScheduler are two rows, beside store-attached windows and the local schedulers. Fleet
  • A cluster shows once. Targets that front one clustered store are detected and merged into one row, w1+w2+w3/QuartzScheduler, whose Cluster page starts, stands by, shuts down and interrupts each node. Fleet
  • Workers dial out: Quartz.Dashboard.Agent. UseDashboardAgent connects a scheduler to a dashboard over SignalR. The dashboard enables it with AcceptAgents. The worker needs no inbound port, no HTTP API and no web framework. Dashboard agent
  • Secure by default. The agent refuses every job type a dashboard names until IsJobTypeAllowed is set. The hub reads its token from the Authorization header only. A hub with neither tokens nor a policy fails at startup. Dashboard agent
  • Native AOT, proven per package. Quartz.Jobs, Quartz.Plugins, Quartz.Plugins.TimeZoneConverter, Quartz.HttpClient, Quartz.AspNetCore and Quartz.Dashboard.Agent now say IsAotCompatible. Each one is published as a native executable and run on Windows, Linux and macOS on every pull request. Trimming and native AOT

Fleet

  • Identity is target/name (#​4042, closes #​3774).
    • The new public SchedulerRef(SchedulerName, Target) is the key a dashboard addresses a scheduler by. Parse splits at the first /. A bare name is the key of a scheduler reached through no target.
    • HttpClientOptions.Target names the process. It becomes the client's service key and the first half of the key. / and + are refused.
    • The Schedulers page shows one row per key, with Target and Reached columns. The picker groups by target, and remembers the selection in the qz_scheduler cookie.
    • The HTTP API's {name} resolves to the untargeted entry only. A name held only by targets answers 404, naming the targets.
    • A local scheduler whose own name contains / keeps that name everywhere: in resolution, authorization, history and live logs.
  • A cluster behind several targets is one row (#​4042).
    • A fleet monitor asks every target which nodes it sees at QuartzDashboardOptions.ClusterDetectionInterval, one minute by default. Targets on one clustered store merge into a+b+c/name.
    • Membership is sticky: a node that stops answering stays in its cluster as unreachable, so the key changes on a topology change, never on an outage. Each round elects a preferred member from the targets that answered.
    • The Cluster page reaches each node through its member key. A cluster-wide lifecycle verb is refused, because a cluster has no single lifecycle.
    • Log events 9105–9110.
  • SchedulerRegistration gains Key, Members and LastSeenUtc. GET …/schedulers rows gain members and lastSeenUtc. SchedulerResource.Target lets an authorization policy see which process it is asked about.

Dashboard agent

  • New package Quartz.Dashboard.Agent (#​4044, closes #​3773).
    • Worker: UseDashboardAgent(o => { o.Endpoint = new("https://ops.example/quartz/agents"); o.Token = …; o.Target = "w1"; }).
    • Dashboard: AcceptAgents(a => a.Tokens.Primary = …).
    • The connection retries forever, from 1 s back to 30 s. The dashboard shows the worker Unknown, with when it was last seen, after three missed heartbeats (45 s by default). It forgets the worker after ForgetAfter, one hour by default. A restarted worker comes back on the same row.
    • History, live logs and every page work over the connection. History is read through the tunnel and the database schema is unchanged.
    • Only the SignalR client is referenced, with no Microsoft.AspNetCore.App.
  • What the agent accepts is decided on the worker.
    • ReadOnly, IsOperationAllowed, MaxConcurrentOperations (a bounded queue; overflow answers 503), MaxPageSize, and a message cap of 4 MiB by default.
    • IsJobTypeAllowed unset refuses every request that stores a job by type name, with 403. Triggering, pausing, rescheduling and deleting existing jobs all work.
    • A cancelled or timed-out operation is cancelled on the worker too, whether it is queued or running.
  • How the hub is authorized.
    • Bearer tokens in two slots, Primary and Secondary, for rotation. They are compared in constant time and read from the Authorization header only, never from a query string, because a URL ends up in access logs.
    • Alternatively, an AuthorizationPolicy.
    • A token-only hub stays reachable under a fail-closed fallback policy.
  • Log events 9111–9117 (dashboard) and 9300–9305 (agent).
  • One dashboard instance per deployment in agent mode: the agent registry lives in the process.

Trimming and native AOT

... (truncated)

4.4.0

Quartz.NET 4.4 is history you can run a business on. Each run says what it achieved: succeeded, failed,
cancelled or skipped, with a summary and metrics. The history keeps that per job, sweeps it by result and charts
it over time, and a health check degrades when a required job stops succeeding. Recovery respects rolling
deploys, and triggers already due fire in the transaction that acquires them: at 20 triggers a second on
PostgreSQL, 95–99 % of firings land within ±50 ms, up from 54 % on 4.3.0. Quartz.Weasel now manages the job store's schema on six databases, adding MySQL, Oracle and Firebird.

dotnet add package Quartz --version 4.4.0

Highlights

  • A run says what it achieved, and the history keeps it per job. context.Result, a status per job, retention
    by result, and a chart of runs over time. Execution history and outcomes
  • A health check per job. RequireSuccessWithin(jobKey, TimeSpan.FromHours(26)) degrades when a nightly job
    stops succeeding. Execution history and outcomes
  • A retry policy on the job class, and a scheduler-wide default. Also RunAtStartup, scheduling a trigger
    already paused, and pausing a set of keys with a reason in one call. Scheduling
  • Fire on acquire. One transaction per round instead of two: one-off throughput on PostgreSQL goes from 258–272 to
    420–429 firings a second. Reliability and clustering
  • Recovery that respects rolling deploys. A firing cancelled by a graceful shutdown can be replayed by a peer
    or the restarted node. Reliability and clustering
  • Weasel for six databases. Quartz.Weasel.MySQL, Quartz.Weasel.Oracle and Quartz.Weasel.Firebird join
    PostgreSQL, SQL Server and SQLite. Databases and Weasel
  • An HTTP client that reads a newer host, and HTTP API errors as problem details under native AOT.
    HTTP API and dashboard

Execution history and outcomes

  • Job outcomes (#​3971, closes #​3957). A job says what its run achieved:
    context.Result = JobRunReport.Skipped("…").With("released", 3).
    • Results: JobRunResult {Succeeded, Failed, Cancelled, Skipped}.
    • A summary and metrics go with it. Metrics are JSON, AOT-safe, capped at 4,000 characters (log events
      1059/1060).
    • Vetoes are recorded in the misfire feed (MisfireReason.Vetoed). Manual runs (TriggerJob) are marked.
    • Per-job JobRunStatus: last run, last success and failure, consecutive failures, counts.
    • Retention by result (RetentionByResult, MisfireRetention) and MaxEntriesPerJob.
    • How-to: Job Outcomes.
  • The database history keeps all of it (#​3980, closes #​3959; schema #​3972, closes #​3958).
    • Each run's row and its job's status commit in one transaction on the history connection.
    • The sweep is tiered by result, capped per job, and clears status rows of deleted jobs. One elected node
      sweeps per cluster.
    • The misfire feed is filtered by reason. A 4.2 row with no reason reads as Missed.
    • Known cost: runs of one job that complete at once take turns on its status row. On PostgreSQL, one hot job
      with history on went from 113–248 to 77–189 firings a second. Tracked in #​3979.
    • Fixed: the optional-table refusal named database/migrations/database/migrations/…. (#​3972)
  • A run whose job threw records the job's own message (#​3995, closes #​3992). The history, the per-job status
    and the HTTP API's JobExecuted event carry it, not the wrapper's "Job threw an unhandled exception". Log
    templates are unchanged.
  • Health check per job (#​3982, closes #​3961).
    ... (truncated)

Commits viewable in compare view.

Updated Radzen.Blazor from 12.0.5 to 12.1.4.

Release notes

Sourced from Radzen.Blazor's releases.

12.1.4

12.1.4 - 2026-10-16

Improvements

  • Scheduler gets an AllowDateSelection parameter that turns the date title into a button opening a date picker, so users can jump straight to a date. Month and year views offer months instead of days, and changing only the year just browses (#​626). Thanks to @​panoskentros!
  • ContextMenu gets a CloseOnScroll option in ContextMenuOptions that closes the menu when the container of the clicked element is scrolled, also after the menu was reopened while open, for example by right-clicking one row after another. Thanks to @​Radium001!

Fixes

  • DataGrid resets correctly when the filters of a column with a FilterTemplate bound to FilterValue and SecondFilterValue are cleared, instead of showing an empty grid or throwing "A second operation was started on this context instance". ClearFilters reset the operator to the type default (Equals for dates) while the filter value fell back to the bound parameter, and changing both bound values started overlapping LoadData calls. The declared operator is now restored, cleared template values no longer fall back to the parameter, and both values changing together reload the grid once (#​2768).
  • DataGrid keeps the SimpleWithMenu filter operator menu of a grid nested in another grid's row template open when clicked. The click bubbled to every ancestor grid's listener, so the popup was toggled once per nesting level and closed right after opening (#​2767).
  • DropDown and DropDownDataGrid follow the page's tab order when tabbing out of an open filterable dropdown instead of moving to the next element in the markup, and no longer land in the component's own closing popup. Thanks to @​jdurrantab!

12.1.3

12.1.3 - 2026-10-15

Improvements

  • Row gets a Columns parameter that sets how many columns fit on each line, so a layout with a fixed number of columns per line no longer needs Size on every RadzenColumn. ColumnsXS, ColumnsSM, ColumnsMD, ColumnsLG, ColumnsXL and ColumnsXX change it per breakpoint. Counts that do not divide 12, such as 5 or 7, work as well and Gap is respected. A column with its own Size for the current breakpoint keeps it (#​2760).

Fixes

  • Spreadsheet reads xlsx files with absolute relationship targets and cells without a reference, such as those written by SpreadCheetah, instead of showing empty sheets. A target like /xl/worksheets/sheet1.xml was prefixed with xl/ so the sheet was not found, and a <c> or <row> without the optional r attribute was dropped. Relationship targets are now resolved against their source part, for sheets as well as drawings, images, charts and tables, and a cell or row without a reference takes the position after the previous one (#​2757).
  • RadialGauge and ArcGauge no longer render C# source as text inside every scale tick. The tick label condition in the scale was missing its @, so if (!string.IsNullOrEmpty(tick.Value)) was emitted as a text node in each tick, which screen readers read once per tick, and an empty tick label was rendered even with ShowTickLabels="false".
  • Carousel no longer jumps back to the first item after every navigation in right-to-left pages. RTL scroll containers report a negative scrollLeft, so the index computed from the scroll position was negative, got clamped to 0 and reset the selection right after Navigate or a pager click. The scroll handler now uses the absolute scroll offset.
  • ODataServiceResult survives trimming when an app deserializes it through its own generic code, such as PersistentComponentState.TryTakeFromJson<T> or JsonSerializer.Deserialize<T> behind an unannotated helper. A trimmed Blazor WebAssembly app kept the type but lost its parameterless constructor and the Count and Value setters, so System.Text.Json threw NotSupportedException. Radzen.Blazor now embeds a trimmer descriptor that keeps these members whenever an app keeps the type.

12.1.2

12.1.2 - 2026-10-12

Improvements

  • AIChat Tool call icons have more contrast, tool call titles use the theme font and the Approve button is flat.

12.1.1

12.1.1 - 2026-10-12

Improvements

  • AIChat QueueMessages accepts messages sent while an answer streams instead of ignoring them: the message shows right away marked as queued, is sent when the answer completes, and Stop returns its text to the box. A service can take such a message mid-response through IAIChatService.TryQueueMessageAsync or an IChatMessageQueue its chat client exposes via GetService; a user-role ChatResponseUpdate with the message id tells the chat the model read it, which moves the message under the answer so far and starts a new assistant message. The send button stays next to the stop button while streaming.
  • AIChat HeaderTemplate, InputHeaderTemplate and InputFooterTemplate slots for a conversation switcher, status line, model picker or action buttons around the conversation and the input.
  • AIChat @​bind-Input reads and sets the text in the box, FocusAsync focuses it.
  • AIChat Text and tool calls of an answer keep the order the model produced them; ChatToolCall.TextPosition and ChatMessage.GetParts() expose it for custom templates.
  • AIChat ChatMessage.Kind with Status, Progress and Error entries rendered as a centered note, a spinner line and an alert; AddMessage(ChatMessage), RemoveMessage and Refresh manage them. RenderMessage renders a message the default way from inside MessageTemplate.
  • AIChat ShowAvatars, SendButtonText, SendButtonIcon, StopButtonText and StopButtonIcon.
  • AIChat AttachmentAdding receives every picked file and can cancel or replace it, for example with a scaled down image; MaxTotalAttachmentSize limits the attachments of a message as a whole.
  • AIChat UsageTemplate and MessageFooterTemplate render usage and extra content per message; ChatMessage.AdditionalProperties collects the AdditionalProperties of the streamed updates, for example credits or changed files.
  • AIChat The conversation store saves messages a service takes mid-response in the order the chat showed them, under the same ids.

Fixes

  • AIChat The streaming placeholder rendered as a finished message until the first token arrived.
  • AIChat In right-to-left layouts the whole send button was mirrored instead of only its icon.

12.1.0

12.1.0 - 2026-10-12

Improvements

  • AIChat is built on Microsoft.Extensions.AI. AIChatService talks to the model through IChatClient: register the client of any provider (OpenAI, Azure OpenAI, Ollama and others) with AddChatClient and the chat picks it up, or keep the built-in OpenAICompatibleChatClient, which streams from any OpenAI-compatible chat completions endpoint and now parses tool calls. IAIChatService.GetChatClient() exposes the configured pipeline, with the Model, MaxTokens and Temperature defaults applied, to your own code.
  • AIChat calls your C# code. Tools takes the AIFunctions created with AIFunctionFactory; calls run automatically and render as cards with the arguments, status and result, ToolCallTemplate renders a result with Radzen components (generative UI), ApprovalRequiredAIFunction makes the chat ask the user before a tool runs (ApproveToolCall, RejectToolCall), and ToolCallCompleted, ShowToolCalls and AllowMultipleToolCalls control the rest. Multiple approvals in one answer are batched and the answer continues once all of them are decided.
  • AIChat shows the reasoning of models that expose it as a collapsible block above the answer (ShowReasoning), lists the sources of an answer under it (ChatMessage.Citations, ShowCitations, CitationTemplate) from the ...

_Description h...

Description has been truncated

Bumps Aspire.Hosting.Docker from 13.6.0 to 13.6.1
Bumps Aspire.Hosting.PostgreSQL from 13.6.0 to 13.6.1
Bumps Aspire.Hosting.Testing from 13.6.0 to 13.6.1
Bumps Marten from 9.45.0 to 9.50.3
Bumps Microsoft.AspNetCore.DataProtection.Abstractions from 10.0.12 to 10.0.13
Bumps Microsoft.Extensions.DependencyInjection.Abstractions from 10.0.12 to 10.0.13
Bumps Microsoft.Extensions.Http from 10.0.12 to 10.0.13
Bumps Microsoft.Extensions.Http.Resilience from 10.10.0 to 10.11.0
Bumps Microsoft.Extensions.Localization.Abstractions from 10.0.12 to 10.0.13
Bumps Microsoft.NET.Test.Sdk from 18.10.1 to 18.11.0
Bumps Quartz.Extensions.Hosting from 4.3.0 to 4.5.1
Bumps Radzen.Blazor from 12.0.5 to 12.1.4
Bumps WolverineFx.Marten from 6.45.0 to 6.51.0
Bumps xunit.runner.visualstudio from 4.0.0 to 4.0.1
Bumps xunit.v3 from 4.0.1 to 4.0.2

---
updated-dependencies:
- dependency-name: Aspire.Hosting.Docker
  dependency-version: 13.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Aspire.Hosting.PostgreSQL
  dependency-version: 13.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Aspire.Hosting.Testing
  dependency-version: 13.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Marten
  dependency-version: 9.50.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: Microsoft.AspNetCore.DataProtection.Abstractions
  dependency-version: 10.0.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Microsoft.Extensions.DependencyInjection.Abstractions
  dependency-version: 10.0.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Microsoft.Extensions.Http
  dependency-version: 10.0.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Microsoft.Extensions.Http.Resilience
  dependency-version: 10.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: Microsoft.Extensions.Localization.Abstractions
  dependency-version: 10.0.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: Quartz.Extensions.Hosting
  dependency-version: 4.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: Radzen.Blazor
  dependency-version: 12.1.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: WolverineFx.Marten
  dependency-version: 6.51.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: xunit.runner.visualstudio
  dependency-version: 4.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: xunit.v3
  dependency-version: 4.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added .NET Pull requests that update .NET code dependencies Pull requests that update a dependency file labels Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file .NET Pull requests that update .NET code

Projects

None yet

0 participants