Skip to content

chore(deps): Bump the minor-and-patch group with 10 updates - #329

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/nuget/backend/minor-and-patch-9fd627d07e
Open

chore(deps): Bump the minor-and-patch group with 10 updates#329
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/nuget/backend/minor-and-patch-9fd627d07e

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 6, 2026

Copy link
Copy Markdown
Contributor

Updated Anthropic from 12.35.1 to 12.39.0.

Updated Marten from 9.15.4 to 9.22.5.

Release notes

Sourced from Marten's releases.

9.22.5

Two source-generator and test-harness fixes that both surfaced on projections built through AddProjectionWithServices, plus the JasperFx 2.42.2 adoption they ride on.

Fixes

The source generator no longer breaks a projection that takes dependencies (#​5192)

The bundled JasperFx.Events.SourceGenerator registers an EventProjection's discovered published document types (#​4166) by writing into your partial class. It used to emit a parameterless constructor to do it, which failed two ways for exactly the projections that need dependencies injected.

It broke the build outright against a primary constructor. C# requires every other constructor to chain through the primary one, so this failed with CS8862 inside the generated <T>.TypeRegistration.g.cs:

public partial class MyProjection(ILogger<MyProjection> logger) : EventProjection
{
    public override ValueTask ApplyAsync(IDocumentOperations operations, IEvent e, CancellationToken cancellation)
    {
        operations.Store(new Thing());
        return new ValueTask();
    }
}

And where it did compile, it silently did nothing. A projection registered through AddProjectionWithServices is built by the container, which calls the dependency-taking constructor — so the generated parameterless one never ran and the published types went unregistered. That also left the projection's teardown targets unregistered, so a rebuild did not wipe its documents.

Registration now rides an override of ProjectionBase.PublishedTypes(), which does not care how the instance was constructed.

Affects 9.22.3 and 9.22.4. Earlier versions discovered published types syntactically, so only an explicit ops.Store<Doc>(x) produced a registration and the far more common ops.Store(x) produced none — which meant the constructor was rarely emitted at all.

One behavior change to be aware of: the generator used to skip registration entirely when your class already had an explicit parameterless constructor, a guard that existed only because you cannot add a second one. An override has no such conflict, so those projections now get their published types registered too. That is the intended #​4166 behavior, but on upgrade it can newly provision document storage — and newly register teardown targets — for a projection that was quietly getting neither. If a projection writes into storage that must not be truncated on rebuild, set DeletePublishedTypesOnTeardown = false.

EventProjectionScenario no longer spends its wall clock asleep (#​5195, in part)

Almost none of a scenario's time was work. The harness wipes the event store and then starts the daemon, so the high-water agent's first look saw an empty store, read CaughtUp, and settled into SlowPollingTime — one second by default. Every append then raced a sleeping agent, and because the agent returns to CaughtUp after each batch drains, the cost recurred at every batch boundary. Since a boundary is how a scenario says "these appends must land in different daemon batches", the more precisely a test described its batching, the slower it got.

A scenario owns both the appends and the daemon that must notice them, so it now says so directly, through an in-process IDaemonWakeup — a semaphore release, no database round trip and no LISTEN/NOTIFY. Nothing about your store's polling configuration changes.

batch boundaries before after
1 ~1290ms ~300ms
3 ~3357ms ~815ms

A flat ~250ms per boundary remains, from a hard-coded poll delay in WaitForNonStaleDataAsync. That is the other half of #​5195 and is still open.

Dependencies

JasperFx / JasperFx.Events 2.42.2. Adopting it also enrolls Marten in the strong-typed identity event-sourcing compliance suite that landed in 2.42.0 (IComplianceStoreRegistrar.RegisterValueType<T>()), taking the shared cross-store suite to 167 passing tests against Marten.

9.22.4

What's Changed

Full Changelog: JasperFx/marten@V9.22.3...V9.22.4

9.22.3

What's Changed

Full Changelog: JasperFx/marten@V9.22.1...V9.22.3

9.22.1

Security release. Upgrade is recommended for anyone using sharded tenancy together with Events.UseTenantPartitionedEvents.

A tenant id was interpolated into a double-quoted PostgreSQL identifier without doubling an embedded double quote, so a tenant id containing one could terminate the identifier and execute additional SQL statements. This is a different class from the two advisories previously published on this repository, both of which were the single-quoted string-literal class; neither of those fixes addressed this.

You are affected only if you use sharded tenancy, have UseTenantPartitionedEvents enabled, and your application passes attacker-influenced input as a tenant id. Note that the reachable surface includes ordinary session resolution, not just administrative provisioning calls — GetTenantAsync / FindOrCreateDatabase auto-provision an unknown tenant. Applications using tenant ids from a trusted fixed set are not exploitable.

Affected versions: 9.4.0 through 9.22.0.

Full details, including remediation guidance for existing data, are in the security advisory: GHSA-3vp4-34pf-2rcw

What changed

  • PerTenantEventSequences.QuotedSequenceName escapes embedded quotes, matching quote_ident/%I so the name still resolves to the same object the quick-append function finds. Covers the create, drop, schema-apply and cleanup paths.
  • BulkEventAppender no longer builds an unquoted sequence name from a suffix read back out of the tenants table. This also fixes a functional bug: PreserveSourceSequence bulk imports previously failed with 42601 for hyphenated and GUID tenant ids under sharded tenancy.
  • ShardedTenancy validates tenant ids destined for DDL, closing a long-standing asymmetry with the DefaultTenancy provisioning path. It is a narrow denylist rather than the existing identifier allowlist, so hyphenated and GUID tenant ids keep working.

Dependency

Requires Weasel.Postgresql 9.21.1, which escapes partition bound values (JasperFx/weasel#​416). Both halves are needed; the dependency is pulled in automatically.

Credit to Barak Srour (Apiiro) for the report.

9.22.0

The partitioning feature is new, but otherwise this was all about CritterWatch improvements for a huge installation

What's Changed

Full Changelog: JasperFx/marten@V9.21.0...V9.22.0

9.21.0

Highlights

A small, low-risk release: two bug fixes reported against 9.20.x, a LINQ ordering fix, a Newtonsoft serialization fix, and a new health-check overload for Wolverine-managed daemon distribution.

[!NOTE]
There is a change to the mt_quick_append_events PostgreSQL function in this release, and applying it is NOT mandatory or required.

You do not need to patch your database, schedule a migration, or coordinate a deployment window to take 9.21.0. The client-side half of the #​5062 fix ships in the assembly, so upgrading the NuGet package alone is sufficient — 9.21.0 is correct against the function version you already have deployed.

Under the default AutoCreate.CreateOrUpdate the function is simply refreshed the next time Marten ensures event storage exists (a CREATE OR REPLACE FUNCTION, no lock on your event data). If you run AutoCreate.None with db-patch / db-apply, your next patch will contain one extra CREATE OR REPLACE FUNCTION … mt_quick_append_events statement — apply it whenever it suits your normal cadence. See the migration guide for details.

Bug Fixes

mt_quick_append_events returned {NULL} for an empty event array (#​5062, #​5088)

array_length('{}', 1) is NULL in PostgreSQL rather than 0, so calling the bulk append function with no events returned a bigint[] whose single element was NULL. Npgsql could not read that into long[], and the resulting InvalidCastException was thrown from the batch's post-processing loop — where it displaced whatever exception had actually made the append fail. Callers were left with an unrelated, non-retryable error instead of the real one; for the reporter that dead-lettered Wolverine messages which would otherwise have been retried.

Fixed on three fronts:

  • The function now COALESCEs the array length, so an empty append means what it says: zero events appended, final version unchanged.
  • The append operation no longer reads the returned array when the batch carries no events — this is what makes the fix effective without any database change.
  • The one code path in Marten that could reach the function with empty arrays (ProjectionUpdateBatch.WaitForCompletion, for an Append side effect that ended up with no events) no longer issues the call.

OrderBy against a dictionary indexer dropped the key (#​5063, #​5073)

OrderBy(x => x.SomeDictionary["key"]) generated SQL that ignored the indexer key, so the ordering was wrong (or arbitrary) rather than failing loudly.

Lazy LINQ sequences serialized as objects under Newtonsoft (#​5076, #​5080)

A document property holding a deferred-execution sequence (Select(...), Where(...) without a materializing call) was written by Newtonsoft as an iterator object rather than a JSON array, so it would not round-trip. These are now written as plain arrays.

IMessageBatch is called concurrently (#​5065, #​5085)

Not a behavior change, but a documentation fix worth flagging if you implement IMessageBatch yourself: the async daemon raises projection side effects from multiple threads at once (measured at up to 8 concurrent publishers across 10 threads for a single-stream projection catching up). The interface previously said nothing about this. An implementation that appends to an unsynchronized collection will silently drop messages — the same hazard, in a real outbox, that showed up here as a "flaky" test.

New

Provider-aware databaseFilter for the high-water health check (#​5061, #​5089)

AddMartenHighWaterHealthCheck's databaseFilter is captured at registration time, so it cannot resolve services — which makes it unable to express "the databases this node currently owns" when ownership is runtime state. That is precisely the case under Wolverine-managed daemon distribution, where agents are assigned per (database, tenant) and rebalanced over a node's lifetime.

There is now an overload whose filter receives the IServiceProvider and is re-evaluated on every probe:

Services.AddHealthChecks().AddMartenHighWaterHealthCheck(
    (services, database) => services.GetRequiredService<IWolverineRuntime>()
        .Agents.AllLocallyOwnedDatabaseIds()
        .Any(id => id.Name.EqualsIgnoreCase(database.Identifier)),
    staleThreshold: TimeSpan.FromSeconds(30),
    includeExternallyManaged: true);
 ... (truncated)

## 9.20.2

## What's Changed
* Fix NgramIndex to match NgramSearch's unaccent-aware mt_grams_vector expression by @​dat-honguyen in https://github.com/JasperFx/marten/pull/5060

## New Contributors
* @​dat-honguyen made their first contribution in https://github.com/JasperFx/marten/pull/5060

**Full Changelog**: https://github.com/JasperFx/marten/compare/V9.20.1...V9.20.2

## 9.20.1

Two real improvements:
1. Less log noise and faster/cleaner shutdowns at production time
2. Adjustments to the "high water mark" detection to ignore idle transactions from advisory locks in advancing the high water mark. This was a side effect of the extra work we did in 9.18 to try to stop event skipping from slow transactions

## What's Changed
* fix(#​4953): allocation fence keeps idle advisory-lock sessions from holding gap skips forever by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5057
* Adopt JasperFx.Events 2.36.2: clear resolved daemons on coordinator stop, idempotent AddAsyncDaemon by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5058


**Full Changelog**: https://github.com/JasperFx/marten/compare/V9.20.0...V9.20.1

## 9.20.0

Bug fixes around permutations of the natural key usage, new convenience mechanisms for querying for event store data

## What's Changed
* chore(deps-dev): bump find-my-way from 9.5.0 to 9.7.0 by @​dependabot[bot] in https://github.com/JasperFx/marten/pull/5045
* chore(deps-dev): bump postcss from 8.5.14 to 8.5.23 by @​dependabot[bot] in https://github.com/JasperFx/marten/pull/5046
* Retire the previous natural key row when the key changes (#​5041) by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5049
* Add FetchStreamStatePlan + FetchStreamPlan: raw event stream fetches as batchable query plans by @​uniquelau in https://github.com/JasperFx/marten/pull/5043
* StreamEventState + StreamEvents result types for Marten.AspNetCore by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5053
* Natural key table: scope the FK guard, and land the partitioned-FK repro (#​5044) by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5050
* Adopt JasperFx.Events 2.36.0: shard failure classification, drain timeout docs, natural key extraction by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5054


**Full Changelog**: https://github.com/JasperFx/marten/compare/V9.19.0...V9.20.0

## 9.19.0

Marten 9.19.0 is a maintenance release adopting the coordinated **JasperFx / JasperFx.Events 2.35.0** drop, with a new projection side-effect capability and a secondary-store fix.

## Event sourcing

- **`RaiseSideEffects` slice-identity overload** — JasperFx.Events 2.35.0 (jasperfx#​561) adds a backwards-compatible aggregation-projection overload `RaiseSideEffects(IDocumentOperations operations, TId id, IEventSlice<TDoc> slice)`. The new `id` parameter hands you the slice identity **even when `slice.Snapshot` is null** because the aggregate was deleted in the same batch — so a `MultiStreamProjection` can recover the aggregate key to emit a follow-on event or publish a message on deletion. The original two-argument overload is unchanged, and the new one delegates to it by default. Documented with a compiled sample in [Side Effects](https://martendb.io/events/projections/side-effects).

## Fixes

- **#​5039** — `SecondaryStoreConfig.Build` threw `UriFormatException` when a secondary store was registered with a **generic** marker interface (e.g. `AddMartenStore<IMartenStoreMarker<MyContext>>()`). A closed generic CLR type name contains a backtick + arity, which is not a valid URI host. The `marten://` subject is now sanitized (arity stripped, generic argument names folded in so distinct closed generics still map to distinct subjects).

## Dependencies

- JasperFx / JasperFx.Events / JasperFx.Events.SourceGenerator / JasperFx.SourceGenerator → **2.35.0**
- Weasel.Postgresql / Weasel.Storage → 9.17.0 (unchanged)

## Notes

- The LINQ query-plan cache proposal (#​5013 / #​5018) is **not** in this releasereview surfaced a correctness gap on null filter values; it remains open for a follow-up.
- #​5001 (`running_on_node` under managed distribution) is resolved on the Marten side and closed; the node-stamping half ships in the JasperFx 2.35.0 / Wolverine distribution layer.


## 9.18.0

Marten 9.18.0 focuses on **raw-JSON streaming endpoints for ASP.NET Core**, **server-side LINQ `Select()` projection**, and continued **event-store observability** work.

## ASP.NET Core streaming & pagination

- **`StreamPaged<T>`** — stream a paged JSON envelope (`pageNumber`/`pageSize`/`totalItemCount`/`pageCount`/`hasNextPage`/`hasPreviousPage`/`items`) in a **single** round trip via a `count(*) OVER()` window column (#​5014). Test coverage hardened to pin the camelCase wire contract, page-past-end behavior, and filtered totals (#​5028).
- **`StreamPagedByCursor<T>`** — keyset ("seek") pagination that costs the same regardless of depth, using an opaque continuation cursor (#​5016). Now streams the **raw, already-persisted `data` column** byte-identical to `StreamMany`/`StreamPaged` (no hydrate + re-serialize) by reading the next cursor's ORDER BY key values off the same reader; a malformed client-supplied cursor now returns a clean **400** instead of a 500 (#​5033).
- **ETag / `If-None-Match` (304)** conditional-request support on `StreamOne<T>` and `StreamAggregate<T>` (#​5015). `StreamOne<T>` now reads the document's `mt_version` **inline in the same single round trip** (no follow-up metadata query), and the `where T : notnull` constraint tightening was reversed (#​5030).

## LINQ

- Simple `Select()` projections (`x => new Dto { A = x.A, B = x.Nested.B }`) now translate to a server-side **`jsonb_build_object(...)`** expression that is streamable as raw JSON, instead of hydrating the full document and projecting on the client (#​5017). Value-preserving conversions — widening numerics (`int`→`long`/`decimal`), boxing to `object`, nullable wrapping, `enum`→integral under `EnumStorage.AsInteger` — stay translatable and streamable; only lossy/computed conversions fall back (#​5032).
- **DCB tag operators** usable in `Where()` over events (#​5004).
- **`AggregateToMany()`** LINQ operator — run an event query through a multi-stream projection (#​5003).

## Event store, projections & daemon

- **Marten.TimescaleDB** extension — projection + document hypertables (#​4995).
- **Extended-progression telemetry**: batched per-flush heartbeat writes (#​5008); fixed a shutdown telemetry race in `extended_progression_batch_write` (#​5023); `running_on_node` write-path regression coverage (#​5001 / #​5007). The cross-repo `running_on_node` population under Wolverine-managed distribution is completed via JasperFx 2.34.0 + Wolverine.
- **Tenant-scoped event/tag explorer reads** — `ReadStreamAsync` / `GetRecentStreamsAsync` overrides honor tenancy (#​5020, #​5025), plus a `MultiStreamProjection` stepthrough via the instrumented fold in `EventStoreExplorer` (#​5002).
- **HighWaterHealthCheck** scoped to owned databases, with per-tenant and `ExternallyManaged` daemon support (#​4992).
- Surface JasperFx's application-assembly-reuse warning (GH-3521) at startup (#​5000).

## Multi-tenancy & infrastructure

- Token-capable maintenance connection for tenant database provisioning (#​5006).
- Docs: connecting to **Azure Database for PostgreSQL with Entra ID / managed identity** (#​4993).

## Dependencies

- JasperFx / JasperFx.Events **2.34.0**, Weasel **9.17.0**.

**Full changelog:** https://github.com/JasperFx/marten/compare/V9.17.0...V9.18.0


## 9.17.0

## High-water health check: opt-in `autoRestart` + heartbeat primary signal (#​4986)

Builds on the detection-only check from 9.16 (#​4984). Requires JasperFx **2.32.0** (jasperfx#​539), which this release rolls up to (#​4987).

- **Opt-in `autoRestart`** — `AddMartenHighWaterHealthCheck(TimeSpan? staleThreshold = null, long minimumGap = 1, bool autoRestart = false)`. When the check is Unhealthy and `autoRestart` is on, it asks the local projection coordinator's daemon to restart the high-water agent's **poll loop only** — the mark is never advanced — capped to once per staleness window per database. The cycle is still reported **Unhealthy** so an alert still fires. Intended for Solo / leader nodes.
- **Heartbeat is now the primary staleness signal**when `EnableExtendedProgressionTracking` is on, the high-water agent stamps a liveness heartbeat on the `HighWaterMark` row every poll cycle. Heartbeat age proves the loop is *cycling* independent of whether the mark *advances*, so a quiet store is never a false positive, and a dead agent is caught even when projections are fully caught up (the exact #​4961 blind spot). The original sequence-gap heuristic is retained as the `ExtendedProgression`-off fallback.

**Full changelog:** https://github.com/JasperFx/marten/compare/V9.16.1...V9.17.0

## 9.16.1

Async daemon data-safety release: the high water detection can no longer advance past "outstanding" event sequence numbers — sequences reserved by transactions that are still in flight — which could silently skip those events in async projections under concurrent append load (bulk imports being the classic case). Root-caused and fixed from discussion #​4953.

The four closed mechanisms:

* The `GapDetector` command batched three statements, each reading its own READ COMMITTED snapshot — commits landing mid-command could defeat every gap check and silently advance the mark over an in-flight append, regardless of `StaleSequenceThreshold`. Detection is now a single statement / single snapshot.
* Projection rebuilds and forced catch-up looped the gap-skipping detection toward the *reserved* sequence `last_value`, mowing through in-flight gaps. `CheckNowAsync` (JasperFx.Events 2.29.1) now targets the highest *committed* sequence and simply waits for in-flight appends to land.
* The stale fallback could teleport the mark to `reserved last_value - 32` across thousands of in-flight reservations on an idle-then-suddenly-busy store, because its gate measured staleness against `mt_event_progression.last_updated`. The threshold is now measured from when each specific gap was first observed.
* Wall-clock stale skipping could not tell a slow transaction from a rolled-back one. Before skipping any stale gap, Marten now checks PostgreSQL for evidence that a transaction which could still fill the gap is alive (`pg_locks` on the mt_events tables, open transactions in `pg_stat_activity`, in-progress write xids from `pg_current_snapshot()`), and holds while any exists — by default Marten never knowingly skips past a live appender. Only provably-dead gaps (rolled-back appends) are skipped, bounded to the sequence ceiling observed with the gap, and every skip is logged at Warning with its exact range.

New knobs on `StoreOptions.Projections`: `UseTransactionEvidenceForGapSkipping` (default `true`; `false` restores the previous wall-clock behavior) and `SkipStaleGapsDespiteLiveTransactionsAfter` (default `null` = never skip a live appender; PostgreSQL's `idle_in_transaction_session_timeout` is the recommended backstop against leaked sessions).

## What's Changed
* fix(#​4953): high water detection never crosses outstanding event sequences by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4977
* Consumes JasperFx.Events 2.29.1 (https://github.com/JasperFx/jasperfx/pull/530)

**Full Changelog**: https://github.com/JasperFx/marten/compare/V9.16.0...V9.16.1


## 9.16.0

Lot of CritterWatch, couple bug fixes too

## What's Changed
* Fix AdvancedSql/raw-SQL scalar queries for reference-typed columns (byte[], IPAddress, etc.) by @​mdissel in https://github.com/JasperFx/marten/pull/4960
* fix(#​4961): PostgresqlListenWakeup falls back to a timeout wait when the DB is unreachable by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4965
* Bump JasperFx to 2.28.0; declare EventProjection doc types for rebuild teardown (#​4685 COPY) by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4969
* fix(#​4966): update natural key on projection rebuild (JasperFx 2.28.1) by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4970
* test(#​4963): verify + document the blue/green side-effect gate by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4971
* fix(#​4964): hold the Normal high-water mark before a leading sequence gap by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4972
* refactor(#​4968): route stream archive through the shared Weasel event-store seam by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4973
* feat(#​4962): targeted per-cell ReadProjectionProgressAsync on MartenDatabase by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4974
* feat(#​4975): exact ReadProjectionProgressAsync(ShardName) override + JasperFx 2.29.0 by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4976


**Full Changelog**: https://github.com/JasperFx/marten/compare/v9.15.4...V9.16.0

Commits viewable in [compare view](https://github.com/JasperFx/marten/compare/v9.15.4...V9.22.5).
</details>

Updated [Marten.EntityFrameworkCore](https://github.com/JasperFx/marten) from 9.15.4 to 9.22.5.

<details>
<summary>Release notes</summary>

_Sourced from [Marten.EntityFrameworkCore's releases](https://github.com/JasperFx/marten/releases)._

## 9.22.5

Two source-generator and test-harness fixes that both surfaced on projections built through `AddProjectionWithServices`, plus the JasperFx 2.42.2 adoption they ride on.

## Fixes

### The source generator no longer breaks a projection that takes dependencies (#​5192)

The bundled `JasperFx.Events.SourceGenerator` registers an `EventProjection`'s discovered published document types (#​4166) by writing into your partial class. It used to emit a parameterless constructor to do it, which failed two ways for exactly the projections that need dependencies injected.

**It broke the build outright against a primary constructor.** C# requires every other constructor to chain through the primary one, so this failed with **CS8862** inside the generated `<T>.TypeRegistration.g.cs`:

```csharp
public partial class MyProjection(ILogger<MyProjection> logger) : EventProjection
{
    public override ValueTask ApplyAsync(IDocumentOperations operations, IEvent e, CancellationToken cancellation)
    {
        operations.Store(new Thing());
        return new ValueTask();
    }
}

And where it did compile, it silently did nothing. A projection registered through AddProjectionWithServices is built by the container, which calls the dependency-taking constructor — so the generated parameterless one never ran and the published types went unregistered. That also left the projection's teardown targets unregistered, so a rebuild did not wipe its documents.

Registration now rides an override of ProjectionBase.PublishedTypes(), which does not care how the instance was constructed.

Affects 9.22.3 and 9.22.4. Earlier versions discovered published types syntactically, so only an explicit ops.Store<Doc>(x) produced a registration and the far more common ops.Store(x) produced none — which meant the constructor was rarely emitted at all.

One behavior change to be aware of: the generator used to skip registration entirely when your class already had an explicit parameterless constructor, a guard that existed only because you cannot add a second one. An override has no such conflict, so those projections now get their published types registered too. That is the intended #​4166 behavior, but on upgrade it can newly provision document storage — and newly register teardown targets — for a projection that was quietly getting neither. If a projection writes into storage that must not be truncated on rebuild, set DeletePublishedTypesOnTeardown = false.

EventProjectionScenario no longer spends its wall clock asleep (#​5195, in part)

Almost none of a scenario's time was work. The harness wipes the event store and then starts the daemon, so the high-water agent's first look saw an empty store, read CaughtUp, and settled into SlowPollingTime — one second by default. Every append then raced a sleeping agent, and because the agent returns to CaughtUp after each batch drains, the cost recurred at every batch boundary. Since a boundary is how a scenario says "these appends must land in different daemon batches", the more precisely a test described its batching, the slower it got.

A scenario owns both the appends and the daemon that must notice them, so it now says so directly, through an in-process IDaemonWakeup — a semaphore release, no database round trip and no LISTEN/NOTIFY. Nothing about your store's polling configuration changes.

batch boundaries before after
1 ~1290ms ~300ms
3 ~3357ms ~815ms

A flat ~250ms per boundary remains, from a hard-coded poll delay in WaitForNonStaleDataAsync. That is the other half of #​5195 and is still open.

Dependencies

JasperFx / JasperFx.Events 2.42.2. Adopting it also enrolls Marten in the strong-typed identity event-sourcing compliance suite that landed in 2.42.0 (IComplianceStoreRegistrar.RegisterValueType<T>()), taking the shared cross-store suite to 167 passing tests against Marten.

9.22.4

What's Changed

Full Changelog: JasperFx/marten@V9.22.3...V9.22.4

9.22.3

What's Changed

Full Changelog: JasperFx/marten@V9.22.1...V9.22.3

9.22.1

Security release. Upgrade is recommended for anyone using sharded tenancy together with Events.UseTenantPartitionedEvents.

A tenant id was interpolated into a double-quoted PostgreSQL identifier without doubling an embedded double quote, so a tenant id containing one could terminate the identifier and execute additional SQL statements. This is a different class from the two advisories previously published on this repository, both of which were the single-quoted string-literal class; neither of those fixes addressed this.

You are affected only if you use sharded tenancy, have UseTenantPartitionedEvents enabled, and your application passes attacker-influenced input as a tenant id. Note that the reachable surface includes ordinary session resolution, not just administrative provisioning calls — GetTenantAsync / FindOrCreateDatabase auto-provision an unknown tenant. Applications using tenant ids from a trusted fixed set are not exploitable.

Affected versions: 9.4.0 through 9.22.0.

Full details, including remediation guidance for existing data, are in the security advisory: GHSA-3vp4-34pf-2rcw

What changed

  • PerTenantEventSequences.QuotedSequenceName escapes embedded quotes, matching quote_ident/%I so the name still resolves to the same object the quick-append function finds. Covers the create, drop, schema-apply and cleanup paths.
  • BulkEventAppender no longer builds an unquoted sequence name from a suffix read back out of the tenants table. This also fixes a functional bug: PreserveSourceSequence bulk imports previously failed with 42601 for hyphenated and GUID tenant ids under sharded tenancy.
  • ShardedTenancy validates tenant ids destined for DDL, closing a long-standing asymmetry with the DefaultTenancy provisioning path. It is a narrow denylist rather than the existing identifier allowlist, so hyphenated and GUID tenant ids keep working.

Dependency

Requires Weasel.Postgresql 9.21.1, which escapes partition bound values (JasperFx/weasel#​416). Both halves are needed; the dependency is pulled in automatically.

Credit to Barak Srour (Apiiro) for the report.

9.22.0

The partitioning feature is new, but otherwise this was all about CritterWatch improvements for a huge installation

What's Changed

Full Changelog: JasperFx/marten@V9.21.0...V9.22.0

9.21.0

Highlights

A small, low-risk release: two bug fixes reported against 9.20.x, a LINQ ordering fix, a Newtonsoft serialization fix, and a new health-check overload for Wolverine-managed daemon distribution.

[!NOTE]
There is a change to the mt_quick_append_events PostgreSQL function in this release, and applying it is NOT mandatory or required.

You do not need to patch your database, schedule a migration, or coordinate a deployment window to take 9.21.0. The client-side half of the #​5062 fix ships in the assembly, so upgrading the NuGet package alone is sufficient — 9.21.0 is correct against the function version you already have deployed.

Under the default AutoCreate.CreateOrUpdate the function is simply refreshed the next time Marten ensures event storage exists (a CREATE OR REPLACE FUNCTION, no lock on your event data). If you run AutoCreate.None with db-patch / db-apply, your next patch will contain one extra CREATE OR REPLACE FUNCTION … mt_quick_append_events statement — apply it whenever it suits your normal cadence. See the migration guide for details.

Bug Fixes

mt_quick_append_events returned {NULL} for an empty event array (#​5062, #​5088)

array_length('{}', 1) is NULL in PostgreSQL rather than 0, so calling the bulk append function with no events returned a bigint[] whose single element was NULL. Npgsql could not read that into long[], and the resulting InvalidCastException was thrown from the batch's post-processing loop — where it displaced whatever exception had actually made the append fail. Callers were left with an unrelated, non-retryable error instead of the real one; for the reporter that dead-lettered Wolverine messages which would otherwise have been retried.

Fixed on three fronts:

  • The function now COALESCEs the array length, so an empty append means what it says: zero events appended, final version unchanged.
  • The append operation no longer reads the returned array when the batch carries no events — this is what makes the fix effective without any database change.
  • The one code path in Marten that could reach the function with empty arrays (ProjectionUpdateBatch.WaitForCompletion, for an Append side effect that ended up with no events) no longer issues the call.

OrderBy against a dictionary indexer dropped the key (#​5063, #​5073)

OrderBy(x => x.SomeDictionary["key"]) generated SQL that ignored the indexer key, so the ordering was wrong (or arbitrary) rather than failing loudly.

Lazy LINQ sequences serialized as objects under Newtonsoft (#​5076, #​5080)

A document property holding a deferred-execution sequence (Select(...), Where(...) without a materializing call) was written by Newtonsoft as an iterator object rather than a JSON array, so it would not round-trip. These are now written as plain arrays.

IMessageBatch is called concurrently (#​5065, #​5085)

Not a behavior change, but a documentation fix worth flagging if you implement IMessageBatch yourself: the async daemon raises projection side effects from multiple threads at once (measured at up to 8 concurrent publishers across 10 threads for a single-stream projection catching up). The interface previously said nothing about this. An implementation that appends to an unsynchronized collection will silently drop messages — the same hazard, in a real outbox, that showed up here as a "flaky" test.

New

Provider-aware databaseFilter for the high-water health check (#​5061, #​5089)

AddMartenHighWaterHealthCheck's databaseFilter is captured at registration time, so it cannot resolve services — which makes it unable to express "the databases this node currently owns" when ownership is runtime state. That is precisely the case under Wolverine-managed daemon distribution, where agents are assigned per (database, tenant) and rebalanced over a node's lifetime.

There is now an overload whose filter receives the IServiceProvider and is re-evaluated on every probe:

Services.AddHealthChecks().AddMartenHighWaterHealthCheck(
    (services, database) => services.GetRequiredService<IWolverineRuntime>()
        .Agents.AllLocallyOwnedDatabaseIds()
        .Any(id => id.Name.EqualsIgnoreCase(database.Identifier)),
    staleThreshold: TimeSpan.FromSeconds(30),
    includeExternallyManaged: true);
 ... (truncated)

## 9.20.2

## What's Changed
* Fix NgramIndex to match NgramSearch's unaccent-aware mt_grams_vector expression by @​dat-honguyen in https://github.com/JasperFx/marten/pull/5060

## New Contributors
* @​dat-honguyen made their first contribution in https://github.com/JasperFx/marten/pull/5060

**Full Changelog**: https://github.com/JasperFx/marten/compare/V9.20.1...V9.20.2

## 9.20.1

Two real improvements:
1. Less log noise and faster/cleaner shutdowns at production time
2. Adjustments to the "high water mark" detection to ignore idle transactions from advisory locks in advancing the high water mark. This was a side effect of the extra work we did in 9.18 to try to stop event skipping from slow transactions

## What's Changed
* fix(#​4953): allocation fence keeps idle advisory-lock sessions from holding gap skips forever by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5057
* Adopt JasperFx.Events 2.36.2: clear resolved daemons on coordinator stop, idempotent AddAsyncDaemon by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5058


**Full Changelog**: https://github.com/JasperFx/marten/compare/V9.20.0...V9.20.1

## 9.20.0

Bug fixes around permutations of the natural key usage, new convenience mechanisms for querying for event store data

## What's Changed
* chore(deps-dev): bump find-my-way from 9.5.0 to 9.7.0 by @​dependabot[bot] in https://github.com/JasperFx/marten/pull/5045
* chore(deps-dev): bump postcss from 8.5.14 to 8.5.23 by @​dependabot[bot] in https://github.com/JasperFx/marten/pull/5046
* Retire the previous natural key row when the key changes (#​5041) by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5049
* Add FetchStreamStatePlan + FetchStreamPlan: raw event stream fetches as batchable query plans by @​uniquelau in https://github.com/JasperFx/marten/pull/5043
* StreamEventState + StreamEvents result types for Marten.AspNetCore by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5053
* Natural key table: scope the FK guard, and land the partitioned-FK repro (#​5044) by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5050
* Adopt JasperFx.Events 2.36.0: shard failure classification, drain timeout docs, natural key extraction by @​jeremydmiller in https://github.com/JasperFx/marten/pull/5054


**Full Changelog**: https://github.com/JasperFx/marten/compare/V9.19.0...V9.20.0

## 9.19.0

Marten 9.19.0 is a maintenance release adopting the coordinated **JasperFx / JasperFx.Events 2.35.0** drop, with a new projection side-effect capability and a secondary-store fix.

## Event sourcing

- **`RaiseSideEffects` slice-identity overload** — JasperFx.Events 2.35.0 (jasperfx#​561) adds a backwards-compatible aggregation-projection overload `RaiseSideEffects(IDocumentOperations operations, TId id, IEventSlice<TDoc> slice)`. The new `id` parameter hands you the slice identity **even when `slice.Snapshot` is null** because the aggregate was deleted in the same batch — so a `MultiStreamProjection` can recover the aggregate key to emit a follow-on event or publish a message on deletion. The original two-argument overload is unchanged, and the new one delegates to it by default. Documented with a compiled sample in [Side Effects](https://martendb.io/events/projections/side-effects).

## Fixes

- **#​5039** — `SecondaryStoreConfig.Build` threw `UriFormatException` when a secondary store was registered with a **generic** marker interface (e.g. `AddMartenStore<IMartenStoreMarker<MyContext>>()`). A closed generic CLR type name contains a backtick + arity, which is not a valid URI host. The `marten://` subject is now sanitized (arity stripped, generic argument names folded in so distinct closed generics still map to distinct subjects).

## Dependencies

- JasperFx / JasperFx.Events / JasperFx.Events.SourceGenerator / JasperFx.SourceGenerator → **2.35.0**
- Weasel.Postgresql / Weasel.Storage → 9.17.0 (unchanged)

## Notes

- The LINQ query-plan cache proposal (#​5013 / #​5018) is **not** in this releasereview surfaced a correctness gap on null filter values; it remains open for a follow-up.
- #​5001 (`running_on_node` under managed distribution) is resolved on the Marten side and closed; the node-stamping half ships in the JasperFx 2.35.0 / Wolverine distribution layer.


## 9.18.0

Marten 9.18.0 focuses on **raw-JSON streaming endpoints for ASP.NET Core**, **server-side LINQ `Select()` projection**, and continued **event-store observability** work.

## ASP.NET Core streaming & pagination

- **`StreamPaged<T>`** — stream a paged JSON envelope (`pageNumber`/`pageSize`/`totalItemCount`/`pageCount`/`hasNextPage`/`hasPreviousPage`/`items`) in a **single** round trip via a `count(*) OVER()` window column (#​5014). Test coverage hardened to pin the camelCase wire contract, page-past-end behavior, and filtered totals (#​5028).
- **`StreamPagedByCursor<T>`** — keyset ("seek") pagination that costs the same regardless of depth, using an opaque continuation cursor (#​5016). Now streams the **raw, already-persisted `data` column** byte-identical to `StreamMany`/`StreamPaged` (no hydrate + re-serialize) by reading the next cursor's ORDER BY key values off the same reader; a malformed client-supplied cursor now returns a clean **400** instead of a 500 (#​5033).
- **ETag / `If-None-Match` (304)** conditional-request support on `StreamOne<T>` and `StreamAggregate<T>` (#​5015). `StreamOne<T>` now reads the document's `mt_version` **inline in the same single round trip** (no follow-up metadata query), and the `where T : notnull` constraint tightening was reversed (#​5030).

## LINQ

- Simple `Select()` projections (`x => new Dto { A = x.A, B = x.Nested.B }`) now translate to a server-side **`jsonb_build_object(...)`** expression that is streamable as raw JSON, instead of hydrating the full document and projecting on the client (#​5017). Value-preserving conversions — widening numerics (`int`→`long`/`decimal`), boxing to `object`, nullable wrapping, `enum`→integral under `EnumStorage.AsInteger` — stay translatable and streamable; only lossy/computed conversions fall back (#​5032).
- **DCB tag operators** usable in `Where()` over events (#​5004).
- **`AggregateToMany()`** LINQ operator — run an event query through a multi-stream projection (#​5003).

## Event store, projections & daemon

- **Marten.TimescaleDB** extension — projection + document hypertables (#​4995).
- **Extended-progression telemetry**: batched per-flush heartbeat writes (#​5008); fixed a shutdown telemetry race in `extended_progression_batch_write` (#​5023); `running_on_node` write-path regression coverage (#​5001 / #​5007). The cross-repo `running_on_node` population under Wolverine-managed distribution is completed via JasperFx 2.34.0 + Wolverine.
- **Tenant-scoped event/tag explorer reads** — `ReadStreamAsync` / `GetRecentStreamsAsync` overrides honor tenancy (#​5020, #​5025), plus a `MultiStreamProjection` stepthrough via the instrumented fold in `EventStoreExplorer` (#​5002).
- **HighWaterHealthCheck** scoped to owned databases, with per-tenant and `ExternallyManaged` daemon support (#​4992).
- Surface JasperFx's application-assembly-reuse warning (GH-3521) at startup (#​5000).

## Multi-tenancy & infrastructure

- Token-capable maintenance connection for tenant database provisioning (#​5006).
- Docs: connecting to **Azure Database for PostgreSQL with Entra ID / managed identity** (#​4993).

## Dependencies

- JasperFx / JasperFx.Events **2.34.0**, Weasel **9.17.0**.

**Full changelog:** https://github.com/JasperFx/marten/compare/V9.17.0...V9.18.0


## 9.17.0

## High-water health check: opt-in `autoRestart` + heartbeat primary signal (#​4986)

Builds on the detection-only check from 9.16 (#​4984). Requires JasperFx **2.32.0** (jasperfx#​539), which this release rolls up to (#​4987).

- **Opt-in `autoRestart`** — `AddMartenHighWaterHealthCheck(TimeSpan? staleThreshold = null, long minimumGap = 1, bool autoRestart = false)`. When the check is Unhealthy and `autoRestart` is on, it asks the local projection coordinator's daemon to restart the high-water agent's **poll loop only** — the mark is never advanced — capped to once per staleness window per database. The cycle is still reported **Unhealthy** so an alert still fires. Intended for Solo / leader nodes.
- **Heartbeat is now the primary staleness signal**when `EnableExtendedProgressionTracking` is on, the high-water agent stamps a liveness heartbeat on the `HighWaterMark` row every poll cycle. Heartbeat age proves the loop is *cycling* independent of whether the mark *advances*, so a quiet store is never a false positive, and a dead agent is caught even when projections are fully caught up (the exact #​4961 blind spot). The original sequence-gap heuristic is retained as the `ExtendedProgression`-off fallback.

**Full changelog:** https://github.com/JasperFx/marten/compare/V9.16.1...V9.17.0

## 9.16.1

Async daemon data-safety release: the high water detection can no longer advance past "outstanding" event sequence numbers — sequences reserved by transactions that are still in flight — which could silently skip those events in async projections under concurrent append load (bulk imports being the classic case). Root-caused and fixed from discussion #​4953.

The four closed mechanisms:

* The `GapDetector` command batched three statements, each reading its own READ COMMITTED snapshot — commits landing mid-command could defeat every gap check and silently advance the mark over an in-flight append, regardless of `StaleSequenceThreshold`. Detection is now a single statement / single snapshot.
* Projection rebuilds and forced catch-up looped the gap-skipping detection toward the *reserved* sequence `last_value`, mowing through in-flight gaps. `CheckNowAsync` (JasperFx.Events 2.29.1) now targets the highest *committed* sequence and simply waits for in-flight appends to land.
* The stale fallback could teleport the mark to `reserved last_value - 32` across thousands of in-flight reservations on an idle-then-suddenly-busy store, because its gate measured staleness against `mt_event_progression.last_updated`. The threshold is now measured from when each specific gap was first observed.
* Wall-clock stale skipping could not tell a slow transaction from a rolled-back one. Before skipping any stale gap, Marten now checks PostgreSQL for evidence that a transaction which could still fill the gap is alive (`pg_locks` on the mt_events tables, open transactions in `pg_stat_activity`, in-progress write xids from `pg_current_snapshot()`), and holds while any exists — by default Marten never knowingly skips past a live appender. Only provably-dead gaps (rolled-back appends) are skipped, bounded to the sequence ceiling observed with the gap, and every skip is logged at Warning with its exact range.

New knobs on `StoreOptions.Projections`: `UseTransactionEvidenceForGapSkipping` (default `true`; `false` restores the previous wall-clock behavior) and `SkipStaleGapsDespiteLiveTransactionsAfter` (default `null` = never skip a live appender; PostgreSQL's `idle_in_transaction_session_timeout` is the recommended backstop against leaked sessions).

## What's Changed
* fix(#​4953): high water detection never crosses outstanding event sequences by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4977
* Consumes JasperFx.Events 2.29.1 (https://github.com/JasperFx/jasperfx/pull/530)

**Full Changelog**: https://github.com/JasperFx/marten/compare/V9.16.0...V9.16.1


## 9.16.0

Lot of CritterWatch, couple bug fixes too

## What's Changed
* Fix AdvancedSql/raw-SQL scalar queries for reference-typed columns (byte[], IPAddress, etc.) by @​mdissel in https://github.com/JasperFx/marten/pull/4960
* fix(#​4961): PostgresqlListenWakeup falls back to a timeout wait when the DB is unreachable by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4965
* Bump JasperFx to 2.28.0; declare EventProjection doc types for rebuild teardown (#​4685 COPY) by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4969
* fix(#​4966): update natural key on projection rebuild (JasperFx 2.28.1) by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4970
* test(#​4963): verify + document the blue/green side-effect gate by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4971
* fix(#​4964): hold the Normal high-water mark before a leading sequence gap by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4972
* refactor(#​4968): route stream archive through the shared Weasel event-store seam by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4973
* feat(#​4962): targeted per-cell ReadProjectionProgressAsync on MartenDatabase by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4974
* feat(#​4975): exact ReadProjectionProgressAsync(ShardName) override + JasperFx 2.29.0 by @​jeremydmiller in https://github.com/JasperFx/marten/pull/4976


**Full Changelog**: https://github.com/JasperFx/marten/compare/v9.15.4...V9.16.0

Commits viewable in [compare view](https://github.com/JasperFx/marten/compare/v9.15.4...V9.22.5).
</details>

Updated [OpenTelemetry.Instrumentation.AspNetCore](https://github.com/open-telemetry/opentelemetry-dotnet-contrib) from 1.16.0 to 1.17.0.

<details>
<summary>Release notes</summary>

_Sourced from [OpenTelemetry.Instrumentation.AspNetCore's releases](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/releases)._

## 1.17.0

* NuGet: [OpenTelemetry.Exporter.Geneva v1.17.0](https://www.nuget.org/packages/OpenTelemetry.Exporter.Geneva/1.17.0)

  * Updated OpenTelemetry core component version(s) to `1.17.0`.
    ([#​4773](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4773))
  
  * Updated ETW manifest and payload in `EtwDataTransport`
    with synthetic payload so that the runtime-generated .NET
    ETW manifest matches the actual payload.
    ([#​4729](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4729)

  See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/Exporter.Geneva-1.17.0/src/OpenTelemetry.Exporter.Geneva/CHANGELOG.md) for details.


## 1.17.0-rc.1

* NuGet: [OpenTelemetry.Instrumentation.Process v1.17.0-rc.1](https://www.nuget.org/packages/OpenTelemetry.Instrumentation.Process/1.17.0-rc.1)

  * Updated OpenTelemetry core component version(s) to `1.17.0`.
    ([#​4773](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4773))

  See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/Instrumentation.Process-1.17.0-rc.1/src/OpenTelemetry.Instrumentation.Process/CHANGELOG.md) for details.


## 1.17.0-beta.1

* NuGet: [OpenTelemetry.Extensions.Enrichment v1.17.0-beta.1](https://www.nuget.org/packages/OpenTelemetry.Extensions.Enrichment/1.17.0-beta.1)

  * Updated OpenTelemetry core component version(s) to `1.17.0`.
    ([#​4773](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4773))

  See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/Extensions.Enrichment-1.17.0-beta.1/src/OpenTelemetry.Extensions.Enrichment/CHANGELOG.md) for details.


## 1.17.0-alpha.1

* NuGet: [OpenTelemetry.Instrumentation.EventCounters v1.17.0-alpha.1](https://www.nuget.org/packages/OpenTelemetry.Instrumentation.EventCounters/1.17.0-alpha.1)

  * Assemblies are now digitally signed using cosign.
    ([#​4637](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4637))
  
  * Updated OpenTelemetry core component version(s) to `1.17.0`.
    ([#​4773](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4773))

  See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/Instrumentation.EventCounters-1.17.0-alpha.1/src/OpenTelemetry.Instrumentation.EventCounters/CHANGELOG.md) for details.


Commits viewable in [compare view](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/compare/Instrumentation.AWS-1.16.0...Exporter.Geneva-1.17.0).
</details>

Updated [OpenTelemetry.Instrumentation.Http](https://github.com/open-telemetry/opentelemetry-dotnet-contrib) from 1.16.0 to 1.17.0.

<details>
<summary>Release notes</summary>

_Sourced from [OpenTelemetry.Instrumentation.Http's releases](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/releases)._

## 1.17.0

* NuGet: [OpenTelemetry.Exporter.Geneva v1.17.0](https://www.nuget.org/packages/OpenTelemetry.Exporter.Geneva/1.17.0)

  * Updated OpenTelemetry core component version(s) to `1.17.0`.
    ([#​4773](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4773))
  
  * Updated ETW manifest and payload in `EtwDataTransport`
    with synthetic payload so that the runtime-generated .NET
    ETW manifest matches the actual payload.
    ([#​4729](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4729)

  See [CHANGELOG](h...

_Description has been truncated_

Bumps Anthropic from 12.35.1 to 12.39.0
Bumps Marten from 9.15.4 to 9.22.5
Bumps Marten.EntityFrameworkCore from 9.15.4 to 9.22.5
Bumps OpenTelemetry.Instrumentation.AspNetCore from 1.16.0 to 1.17.0
Bumps OpenTelemetry.Instrumentation.Http from 1.16.0 to 1.17.0
Bumps SonarAnalyzer.CSharp from 10.29.0.143774 to 10.31.0.145097
Bumps WolverineFx from 6.17.0 to 6.24.9
Bumps WolverineFx.EntityFrameworkCore from 6.17.0 to 6.24.9
Bumps WolverineFx.Marten from 6.17.0 to 6.24.9
Bumps WolverineFx.RuntimeCompilation from 6.17.0 to 6.24.9

---
updated-dependencies:
- dependency-name: Anthropic
  dependency-version: 12.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Marten
  dependency-version: 9.22.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Marten.EntityFrameworkCore
  dependency-version: 9.22.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: OpenTelemetry.Instrumentation.AspNetCore
  dependency-version: 1.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: OpenTelemetry.Instrumentation.Http
  dependency-version: 1.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: SonarAnalyzer.CSharp
  dependency-version: 10.31.0.145097
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: WolverineFx
  dependency-version: 6.24.9
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: WolverineFx.EntityFrameworkCore
  dependency-version: 6.24.9
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: WolverineFx.Marten
  dependency-version: 6.24.9
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: WolverineFx.RuntimeCompilation
  dependency-version: 6.24.9
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-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 Aug 6, 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

Development

Successfully merging this pull request may close these issues.

0 participants