Repository navigation
Bump AndreGoepel.Core and 8 others - #181
Closed
dependabot[bot] wants to merge 1 commit into
Closed
dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps AndreGoepel.Core from 1.0.0 to 1.0.1 Bumps bunit from 2.8.6 to 2.9.0 Bumps Marten from 9.19.0 to 9.23.0 Bumps Npgsql to 8.0.9, 9.0.5 Bumps Quartz.Extensions.Hosting from 3.18.2 to 3.19.1 Bumps Quartz.Serialization.SystemTextJson from 3.18.2 to 3.19.1 Bumps Radzen.Blazor from 11.1.7 to 11.2.4 Bumps WolverineFx.Marten from 6.22.0 to 6.27.1 Bumps WolverineFx.RuntimeCompilation from 6.22.0 to 6.27.1 --- updated-dependencies: - dependency-name: AndreGoepel.Core dependency-version: 1.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: bunit dependency-version: 2.9.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Marten dependency-version: 9.23.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Npgsql dependency-version: 8.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Npgsql dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Quartz.Extensions.Hosting dependency-version: 3.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Quartz.Serialization.SystemTextJson dependency-version: 3.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Radzen.Blazor dependency-version: 11.2.4 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: WolverineFx.Marten dependency-version: 6.27.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: WolverineFx.RuntimeCompilation dependency-version: 6.27.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Owner
Contributor
Author
|
This pull request was built based on a group rule. Closing it will not ignore any of these versions in future pull requests. To ignore these dependencies, configure ignore rules in dependabot.yml |
dependabot
Bot
deleted the
dependabot/nuget/nuget-minor-patch-934f358db5
branch
August 13, 2026 16:14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rebasing might not happen immediately, so don't worry if this takes some time.
Note: if you make any changes to this PR yourself, they will take precedence over the rebase.
Pinned AndreGoepel.Core at 1.0.1.
Release notes
Sourced from AndreGoepel.Core's releases.
1.0.1
What's Changed
New Contributors
Full Changelog: andregoepel/core@v1.0.0...v1.0.1
Commits viewable in compare view.
Updated bunit from 2.8.6 to 2.9.0.
Release notes
Sourced from bunit's releases.
2.9.0
Changed
AngleSharp.CssCommits viewable in compare view.
Pinned Marten at 9.23.0.
Release notes
Sourced from Marten's releases.
9.23.0
Highlights
Store-agnostic document abstractions (#5216)
Marten now implements the
JasperFx.Events.Documentscontract added in JasperFx 2.47.0, the shared document session surface behind the Wolverine aggregate-handler unification (wolverine#3907).IQuerySessionIDocumentReadOperationsIDocumentOperationsIDocumentWriteOperationsIDocumentSessionIDocumentSessionOperationsIDocumentStoreIDocumentSessionFactory<IDocumentSession, IQuerySession>MartenLinqQueryProviderIDocumentQueryExecutorMarten already had every operation with matching signatures, so this is additive — existing code is unaffected. Marten passes all 42 tests in the shared document storage compliance suite.
Fixes
#5210 —
UseListenNotifyForEventAppendscorrupted inline projections in the same transaction.NotifyEventAppendedOperationwas markedNoDataReturnedCallbut emittedselect pg_notify(...), which returns a one-row result set.OperationPage.ApplyCallbacksAsyncnever advances the reader past aNoDataReturnedCall, so every later operation in the batch read the wrong result set — surfacing as spuriousConcurrencyExceptions and wrong document versions, far from the cause. Now uses theDO $$ BEGIN PERFORM pg_notify(...); END $$form, which fires the identical notification and returns nothing.HardDeleteWhere<T>could not remove already soft-deleted rows. It inherited the soft-delete exclusion filter, so a retention or purge sweep returned cleanly while leaving behind exactly the rows it existed to remove.HardDeleteby id was unaffected, which made the API look correct when spot-checked.#5159 —
UseOptimisticConcurrencyandUseNumericRevisionswere asymmetric.UseNumericRevisions(true)cleared the competing Guid version metadata;UseOptimisticConcurrency(true)did not clear the numeric revision metadata. The order of the two fluent calls therefore decided whether the configuration worked or threw at bootstrap. Both orders are now last-wins.The bootstrap guard is narrowed rather than dropped, and now reports which case it is:
IRevisioned,ILongVersioned, along[Version]member) still throws, naming the member — honoring the override would leave that property permanently unmapped#5131 —
StreamPagedByCursor<T>publishedtypeof(void)as its OpenAPI response type, so endpoints returning it advertised a 200 with no schema at all. Now publishes a newCursorPagedResult<T>, mirroring whatStreamPaged<T>already does withPagedResult<T>.Hardening and docs
#5213 — an audit test over the
NoDataReturnedCallinvariant. Reflects over every implementation and asserts its SQL cannot return a result set, so the class of bug behind #5210 goes red at build time rather than surfacing as a version mismatch three operations later.#5212 — regression pins ported from Polecat, covering
DeleteWherenot re-stampingmt_deleted_aton already-deleted rows.#5217 — documented Npgsql's
Max Auto Prepareconnection-string knob, including measurements showing no resolvable effect on read latency, and the reasons Marten does not enable prepared statements: generic plans displacing parameter-aware ones (which matters most under conjoined multi-tenancy, where a skewedtenant_idsits in nearly every predicate), per-connection plan memory, and runtime DDL invalidating cached plans.New public API
Marten.AspNetCore.CursorPagedResult<T>IQuerySession,IDocumentOperations,IDocumentSessionandIDocumentStorenow implement the correspondingJasperFx.Events.DocumentscontractsBoth are additive.
Not shipped
The opt-in LINQ query plan cache proposed in #5013 / #5018 was closed rather than merged. Benchmarking showed the cost it removes — LINQ parsing plus SQL generation — is 1.2 μs on the fastest realistic Marten query, against 28–56 μs of run-to-run variance on that same query. On a warm cache hit it allocated more than no cache at all, and in a conjoined multi-tenant store it cached nothing while paying two full LINQ parses per query. Details on #5018.
... (truncated)
9.22.6
A fix-and-adoption release: a masking-rule fix, a broadened event-store compliance net, a CI overhaul, and the JasperFx 2.46.0 / Weasel 9.24.0 dependency adoptions.
Fixes
Every matching masking rule runs, not just the first (#5199)
ApplyEventDataMaskingused to stop at the first masking rule whose event type matched, so an event enrolled in two rules (say, one masking a name and another masking an address) only ever had the first applied. All matching rules now compose: each rule runs in registration order against the output of the previous one.Test coverage
Compliance waves 6-8 + strong-typed identity (#5198, #5201, #5203, #5205)
Marten's event-store behavior is now enrolled in the shared
JasperFx.Events.ComplianceTestssuite for: stream compacting and event data masking (wave 6), projection rebuild/catch-up and dead letters (wave 7), conjoined event tenancy and subscriptions (wave 8), plusStrongTypedIdentityCompliance(#5144). These pin Marten's behavior to the same contract Polecat and future stores are held to.CI
One job per test project, supervised (#5096, #5208)
The monolithic CI test run is split into one job per test project running under Bobcat's supervisor, so a flaky suite no longer poisons the whole gate and failures name the project that produced them. Also removes stray
ITestOutputHelper/debug logger injections from tests (#5211).Dependencies
db-apply/db-assertacross physical databases (weasel#431/#442), per-fingerprint schema stamp keying (weasel#439), SQL ServerCREATE DATABASEpostcondition check (weasel#415), discovery progress reporting (weasel#432).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.SourceGeneratorregisters anEventProjection'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:And where it did compile, it silently did nothing. A projection registered through
AddProjectionWithServicesis 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 commonops.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.EventProjectionScenariono 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 intoSlowPollingTime— one second by default. Every append then raced a sleeping agent, and because the agent returns toCaughtUpafter 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.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
UseTenantPartitionedEventsenabled, 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/FindOrCreateDatabaseauto-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.QuotedSequenceNameescapes embedded quotes, matchingquote_ident/%Iso the name still resolves to the same object the quick-append function finds. Covers the create, drop, schema-apply and cleanup paths.BulkEventAppenderno longer builds an unquoted sequence name from a suffix read back out of the tenants table. This also fixes a functional bug:PreserveSourceSequencebulk imports previously failed with42601for hyphenated and GUID tenant ids under sharded tenancy.ShardedTenancyvalidates tenant ids destined for DDL, closing a long-standing asymmetry with theDefaultTenancyprovisioning 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.
Bug Fixes
mt_quick_append_eventsreturned{NULL}for an empty event array (#5062, #5088)array_length('{}', 1)isNULLin PostgreSQL rather than0, so calling the bulk append function with no events returned abigint[]whose single element wasNULL. Npgsql could not read that intolong[], and the resultingInvalidCastExceptionwas 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:
COALESCEs the array length, so an empty append means what it says: zero events appended, final version unchanged.ProjectionUpdateBatch.WaitForCompletion, for anAppendside effect that ended up with no events) no longer issues the call.OrderByagainst 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.IMessageBatchis called concurrently (#5065, #5085)Not a behavior change, but a documentation fix worth flagging if you implement
IMessageBatchyourself: 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
databaseFilterfor the high-water health check (#5061, #5089)AddMartenHighWaterHealthCheck'sdatabaseFilteris 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
IServiceProviderand is re-evaluated on every probe:silently lost its not-found guard and began running against a model that was never loaded — for a write model, that means appending events against a stream that was not fetched.
[WriteAggregate]and[ReadAggregate]now pin the unconditionalRequired = truethey have always had, in Marten, Polecat and Fisher alike. SayRequired = falseexplicitly, or move to[WriteModel]/[ReadModel], to opt out.If you are on 6.27.0 and use
[WriteAggregate]with a nullable parameter and no explicitRequired, upgrade.[ReadModel]takesRequiredfrom the parameter's nullable annotation (#3929)Matching what GH-3916 did for
[WriteModel]:Order orderis required and gets a not-found guard,Order? orderis not and is handed to your method asnullso your own null branch runs. An explicitRequiredat the call site still wins over the annotation.This closes the write/read asymmetry — a handler moving between the two forms no longer needs a different attribute spelling for identical intent.
What deliberately did not change
[Entity]keeps its unconditionalRequired = true. It is the oldest and most widely used of these attributes and is heavily used in HTTP endpoints, whereRequired = truewithOnMissing.Simple404is the documented 404 behaviour. Loosening it would turn a clean 404 into a runtimeNullReferenceExceptionin an endpoint body.[DeciderFunction]and[DcbModel]keepRequired = false. Their model is folded out of an event stream or boundary and is always materialized, so absence is not the normal case; inferring here would tighten the default and could stop messages that process today.Worth knowing
In an assembly compiled with
<Nullable>disable</Nullable>a reference-type parameter reads as unknown rather than nullable, so[WriteModel]and[ReadModel]fall back toRequired = true. The inference is a no-op for those projects rather than a silent behaviour change. Now documented in the persistence guide.6.27.0
Wolverine 6.27.0
New:
WolverineFx.FisherFisher — the embedded SQLite document database and event store — is now a first-class Wolverine persistence integration, alongside Marten and Polecat.
A Fisher-backed service is zero-infrastructure: no server, no container, no network. The transactional inbox/outbox, saga storage and the full aggregate handler workflow all work, and the store-agnostic
[WriteModel]/[ReadModel]/[DeciderFunction]/[DcbModel]attributes run against it unchanged — the same handler code compiles and runs on any of the three stores.Two SQLite realities shape it, both documented:
DurabilityMode.Solo. Leader election and agent distribution need several nodes sharing one database; a Fisher store is a file.Ancillary stores work too.
AddFisherStore<T>().IntegrateWithWolverine()is supported, and[Storage(typeof(IMyStore))]routes a handler to it without naming Fisher in the consumer's source.Not in this first release, each for a reason rather than for lack of time: multi-tenancy (Fisher's tenancy is a file per tenant), cluster durability modes, and transport schema stamping (SQLite has no schemas). See Fisher Integration.
Requires Fisher 0.6.0.
New:
[DcbModel]— Dynamic Consistency Boundaries, store-agnosticThe DCB workflow joins the store-agnostic vocabulary in Wolverine core. Where
[WriteModel]is about one stream,[DcbModel]spans every stream whose events match a tag query, with the store asserting at commit that no matching event landed in the meantime.Wolverine.Marten.BoundaryModelAttributeandWolverine.Polecat.BoundaryModelAttributenow inherit from it and behave identically — existing[BoundaryModel]code needs no change. Prefer[DcbModel]in new code.[WriteModel]fixesRequirednow defaults from the parameter's nullable annotation (#3916).Order orderis required and gets a not-found guard;Order? orderis not, and is handed to your method asnullso your own null branch runs. A nullable annotation withRequired = truewas a contradiction that silently resolved in favour of the attribute default, making the handler's null branch dead code. SettingRequiredexplicitly still overrides the annotation either way.Required = trueexplicitly to keep it.[Identity]is now honoured (#3918).[DeciderFunction]always respected[Identity]on the command member;[WriteModel]did not, so the same command against the same model needed an explicit[WriteModel("...")]under one form and nothing under the other. Resolution order is now: explicit[WriteModel("orderId")], then[Identity], then{Model}Id, thenid, then a strong typed id match.Amazon SQS: oversized messages (#3926)
A message too big for SQS is no longer retried forever. SQS caps a message at 256KB and rejects a larger one with
InvalidParameterValue - Message must be shorter than 262144 bytes (SenderFault: true).SenderFault: truemeans the identical request will fail identically forever, but Wolverine treated it as a transient send failure and re-queued it — which is why this presented as a flood of identical errors rather than one. An oversized message is now logged once and discarded.... (truncated)
6.26.0
Upgrade note
This release moves the Critter Stack dependencies forward together:
[5.7.0,6.0.0)(resolving to 5.7.0)[5.12.0,6.0.0)Polecat users get the larger jump of the two: the old range pin resolved to its 5.7.0 floor, so this is 5.7.0 → 5.12.0 in practice.
If you reference
JasperFx.Events.SourceGeneratorexplicitly and reference Polecat, you may hitCS0433("the type<X>Evolverexists in both<YourAssembly>and<YourAssembly>"). The generator ships both bundled inside the Polecat nupkg and as a standalone package; when the two copies are the same version they load as two analyzer instances and each emits every projection's Evolver dispatcher. Polecat 5.12.0 bundles 2.47.0, which is what this release pins, so the pair now matches. The fix is to drop one instance — seePolecatTests.csprojfor theDropDuplicateBundledEventSourceGeneratortarget we use, which keeps the explicitly-pinned generator and removes the bundled duplicate.Two new packages
WolverineFx.DataAnnotationsValidationandWolverineFx.FluentValidation.Grpcare published for the first time in this release. Both were documented as installable but had never actually shipped — every version returnedBlobNotFoundfrom nuget.org — because each declared aPackageIdwhile being absent from the packaging list. If you followed the Data Annotations validation or gRPC error details docs and found the package missing, it exists now. A build-time check keeps the two lists from drifting apart again. (#3905, #3909)Fixes
A
[WriteAggregate]-only chain now reportsIsTransactionalcorrectly. The Marten and Polecat aggregate handler workflows appended aSaveChangesAsyncpostprocessor but never setIChain.IsTransactional, so a chain reported having no transactional middleware while its generated code committed. The disagreement was visible toIHttpPolicyauthors, who had no reliable signal for whether a chain would commit — the workaround was an unusedIDocumentSessionparameter on every such endpoint, purely to flip the detection. Thanks to @esond for the report and the fix. (#3893, #3901)Outgoing batches no longer serialize eagerly.
OutgoingMessageBatchbuilt its contiguousbyte[]in its constructor whether or not anything read it. (#3906)Aggregate handler workflow unification (#3907, increment one)
Wolverine has carried two near-identical copies of the aggregate handler workflow — one in
Wolverine.Marten, one inWolverine.Polecat— and improvements had been landing on one copy at a time. This release starts implementing it once, in core.Nothing is retired and no public API changes.
[WriteAggregate],[ReadAggregate],[AggregateHandler],[ConsistentAggregate],Events,MartenOps/PolecatOpsand the rest of each integration's surface stay exactly where they are.What landed:
AggregateHandling.DetermineVersionMembernow returnsMemberInfo?— Marten's copy used a null-forgiving operator that was masking a real null fromIAggregateVersioning.VersionMember. Polecat regains AOT annotations it had dropped. Two reflectively-closed codegen frames widen aclassconstraint tonotnull, matchingIEventStream<T>'s own declaration; the narrower form threw for a struct aggregate instead of generating the same correct code.IEventSourcingFrameProvider, the store seam — deliberately a s...Description has been truncated