Bump the nuget-minor-patch group with 10 updates - #207
Closed
dependabot[bot] wants to merge 2 commits into
Closed
dependabot[bot] wants to merge 2 commits into
dependabot[bot] wants to merge 2 commits into
Conversation
Bumps AndreGoepel.Core from 1.0.2 to 1.0.3 Bumps AndreGoepel.Design.Blazor from 1.6.5 to 1.6.7 Bumps AndreGoepel.Marten.Configuration from 1.2.2 to 1.2.3 Bumps AndreGoepel.Marten.Testing from 1.2.1 to 1.2.2 Bumps Marten to 9.31.2, 9.32.0 Bumps Quartz.Extensions.Hosting from 3.20.0 to 3.20.1 Bumps Quartz.Serialization.SystemTextJson from 3.20.0 to 3.20.1 Bumps Radzen.Blazor from 11.2.8 to 11.3.2 Bumps WolverineFx.Marten from 6.32.0 to 6.33.0 Bumps WolverineFx.RuntimeCompilation from 6.32.0 to 6.33.0 --- updated-dependencies: - dependency-name: AndreGoepel.Core dependency-version: 1.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Design.Blazor dependency-version: 1.6.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Radzen.Blazor dependency-version: 11.3.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Marten.Configuration dependency-version: 1.2.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Marten dependency-version: 9.31.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Marten.Testing dependency-version: 1.2.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Marten dependency-version: 9.32.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Quartz.Extensions.Hosting dependency-version: 3.20.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Quartz.Serialization.SystemTextJson dependency-version: 3.20.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: WolverineFx.Marten dependency-version: 6.33.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: WolverineFx.RuntimeCompilation dependency-version: 6.33.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Contributor
Author
|
Superseded by #209. |
dependabot
Bot
deleted the
dependabot/nuget/nuget-minor-patch-9a8d4a0398
branch
September 12, 2026 02:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated AndreGoepel.Core from 1.0.2 to 1.0.3.
Release notes
Sourced from AndreGoepel.Core's releases.
1.0.3
What's Changed
Full Changelog: andregoepel/core@v1.0.2...v1.0.3
Commits viewable in compare view.
Updated AndreGoepel.Design.Blazor from 1.6.5 to 1.6.7.
Release notes
Sourced from AndreGoepel.Design.Blazor's releases.
1.6.7
What's Changed
Full Changelog: andregoepel/design-blazor@v1.6.6...v1.6.7
1.6.6
What's Changed
Full Changelog: andregoepel/design-blazor@v1.6.5...v1.6.6
Commits viewable in compare view.
Updated AndreGoepel.Marten.Configuration from 1.2.2 to 1.2.3.
Release notes
Sourced from AndreGoepel.Marten.Configuration's releases.
1.2.3
What's Changed
Full Changelog: andregoepel/marten-configuration@v1.2.2...v1.2.3
Commits viewable in compare view.
Updated AndreGoepel.Marten.Testing from 1.2.1 to 1.2.2.
Release notes
Sourced from AndreGoepel.Marten.Testing's releases.
1.2.2
What's Changed
Full Changelog: andregoepel/marten-testing@v1.2.1...v1.2.2
Commits viewable in compare view.
Updated Marten from 9.30.0 to 9.31.2.
Release notes
Sourced from Marten's releases.
9.31.2
A diagnostics-only patch release. No behavioural change to the write path.
A failed batched write now reports the SQL that failed
When a batched write failed, Marten threw a
MartenCommandExceptionwhose message rendered an empty command text. Reported from the field on an async projection:The
$ $ $is the message template interpolating a command that was always null.ReadNpgsqlCommand()looks for anNpgsqlCommandinexception.Data, and on theExecuteBatchPagesAsyncpath there is no single command to put there —AutoClosingLifetimetransformed the exception with nothing recorded at all, andWrapAndThrow(NpgsqlBatch, ...)recorded the batch under a key that nothing ever read.The practical consequence: the offending SQL was unrecoverable from the exception and from the logs, for every async projection write. That is precisely the situation where hand-written SQL — a
QueueSqlCommand, a customIStorageOperation, a projection side effect — turns out to be malformed, and the one thing you need to see is the statement.MartenCommandExceptionnow recovers the SQL from three sources, in order:NpgsqlCommandit was handed;NpgsqlException.BatchCommand— Npgsql identifies the exact statement the server rejected when the failure came out of a batch execution;NpgsqlBatchrecorded on the exception.The recovered statement is also exposed on a new
MartenCommandException.CommandTextproperty, so it can be read programmatically rather than scraped out of the message.AutoClosingLifetimeexecutes its batches inline rather than throughhandleCommandException, so it now records its batch. The other three connection lifetimes already routed throughWrapAndThrow(NpgsqlBatch, ...)and only needed a reader for the key they were already writing.Two guardrails worth knowing about: a batch renders at most five statements, so a 500-operation projection page cannot turn one failure into an unreadable log entry, and the whole resolution is wrapped in a
catch— building a diagnostic must never replace the real failure.Also released as 8.38.1 on the 8.x line.
9.31.1
A single-fix patch release that moves Marten to JasperFx 2.61.0, picking up the source generator fix for JasperFx/jasperfx#733. Weasel stays on 9.29.0.
Self-aggregating snapshots silently skipped a constructor-based
CreateA self-aggregating snapshot may declare its Create handler as an event-shaped constructor,
public Foo(FooCreated e), instead of a namedstatic Create. That works on its own. Adding aShouldDeletemethod to the same aggregate switched the source generator to a different emitter — one that built its dispatch switch from named conventional methods only — so the constructor's event type got no case arm at all.Nothing failed loudly. The generated code compiled, the constructor never ran, and the next Apply-only event built the aggregate through
RuntimeHelpers.GetUninitializedObject, skipping every field initializer. The visible symptom was anApplyEventExceptionwrapping aNullReferenceExceptionout of anApplythat appended to a collection property:The quieter outcome, where no
Applyhappens to dereference anything, is a silently blank aggregate.Both documented workarounds — converting the constructor to a
static Create, or registering the delete throughDeleteEvent<T>()instead ofShouldDelete— become unnecessary on this release.The same omission was also in the generated
EventTypesproperty on every self-aggregating path, including the ones whose dispatch was already correct, so an aggregate with a constructorCreateand noShouldDeletegains its creating event in that list here too.Covered by
Bug_jasperfx_733_event_constructor_create_with_should_deleteacross inline, async and live aggregation, plus the delete arm itself. See #5322.9.31.0
Every fix in this release removes a silent wrong answer — not a crash, not an exception, but a plausible-looking result that was wrong with nothing to tell you so. A stream folded into partial aggregates. Paging that returned arbitrary pages. Monitoring that went dark rather than broken. A search reading a key that did not exist. An index that was never created.
Plus one genuinely new feature: weighted full text search with relevance ranking.
New: weighted full text indexes and
ts_rankorderingA full text index used to concatenate its members into one flat vector, so a match in a title was exactly as relevant as a match in a long description. Now it can be weighted, and ranked:
The rank resolves the same tsvector the
Whereclause matched on, read from the index definition. That is the load-bearing design constraint rather than an implementation detail: a rank computed over a different vector than the filter matched on returns rows in an order that looks plausible and means nothing — a far quieter failure than returning the wrong rows.Requires Weasel 9.29.0 (weasel#541), which made it possible to index an expression that is already a
tsvector. See the full text documentation for the costs worth knowing first — GIN cannot order, so this is a post-filter sort; and adding weights to an existing index drops and recreates it.Silent wrong answers, fixed
Async projections folded one stream into several partial aggregates (#5305, originally #4085). When a stream's events disagreed about
tenant_id, the daemon sliced it per tenant and applied the pieces over each other, so anApplysaw a document with every property at its default. Marten had setForceSingleTenancysince the original fix, butTenantedEventSlicerhonoured that flag on only one of its two overloads — and the async daemon reaches the other one. The flag was being set on precisely the path that could not read it. Fixed upstream in JasperFx 2.58.0.OrderByafter aGroupJoin/SelectManywas dropped from the SQL (#5311). Silently, and withSkip/Takeit was worse:OFFSETandLIMITwere emitted while the ordering was not, and unordered paging in PostgreSQL has no stable row order — so rows repeat across pages while others never appear.Whereon a bare-side selector andCountover a join were wrong in the same surface and are fixed too.A store with monitoring off dropped the monitoring columns another store had added (#5309). Two
DocumentStores over oneDatabaseSchemaNamethat disagreed aboutEnableExtendedProgressionTrackingkept stripping each other'smt_event_progressioncolumns — last writer wins, silent on both sides. A service beside a seeder or a reporting job is an ordinary arrangement, and neither was doing anything wrong. The shape of that table no longer depends on configuration at all.Full text search rewrote JSON keys, not just the column (#5314, thanks @mlh758). A member whose serialized name contained
dataproducedd.data ->> 'd.data'— a key that does not exist. Two quiet consequences: that member contributed nothing to the search, and the expression no longer matched the index, so the GIN index could not serve the query either.A second full text index over different members was silently discarded (#5315). Index names derive from the table rather than from the members, so two
FullTextIndex()calls collided by construction and the second was thrown away — never registered, never created, never searched. Ambiguity is now refused with an explanatory exception instead of resolved by declaration order.A DCB boundary aggregate failed far from its cause (JasperFx 2.60.0). An identity-less
[BoundaryAggregate]folded byEvolve(IEvent)got no evolver and no diagnostic, surfacing much later asFetchForWritingByTags<T>throwing "No source-generated dispatcher found" — naming neither the type nor the reason. Now it generates, and a[BoundaryAggregate]with nothing to fold events with is reported asJFXEVT007.A DCB tag version was captured after the events were read (#5300). Two batched statements do not share a
READ COMMITTEDsnapshot, so the version could reflect a concurrent append. Captured before the read now.Also in this release
projection-runCLI command arrives with JasperFx 2.60.0 and needs no Marten change — every host referencingJasperFx.Eventspicks it up. It replays one projection over a stream slice or DCB tag match and prints per-event before/after state, writing nothing.Bug_5268's concurrent index test no longer depends on how much unrelated transaction load happens to be in flight (#5308), so validating a dependency bump by running the whole suite at once is trustworthy again.BuildSlicernow agrees withFetchAsyncPlanabout global aggregates (#5307). Alignment rather than a fix — no reachable corruption depended on it, and the reasoning is written down at the call site so the question does not have to be reconstructed next time.Upgrade notes
OrderByFragment.Expressionschanged fromList<string>toList<ISqlFragment>. A public API break, deliberately taken: an ordering could not carry a parameter while the clause was a list of strings, which is why the older ngram ranking inlines its search term rather than binding it. Nothing outside Marten's own LINQ internals is likely to touch this type, but it is a compile break if you did.... (truncated)
Commits viewable in compare view.
Updated Marten from 9.30.0 to 9.32.0.
Release notes
Sourced from Marten's releases.
9.32.0
Two coordinated feature waves against JasperFx.Events 2.63.0, plus the compliance enrollments that keep Marten, Polecat, and Fisher synchronized.
Broadened event querying (jasperfx#737 → #5330 / #5331)
QueryEventsAsync/EventQuerynow supports inclusive timestamp windows (TimestampFrom/TimestampTo), inclusive sequence windows (SequenceFloor/SequenceCeiling), multiple event type aliases (EventTypeNames, union with the singleEventTypeName), and DCB tag conditions folded into the query (TagConditions— the TagTables and HStore modes both translate through the same SQL asQueryByTagsAsync). Results are contractually ordered sequence-ascending;TotalCountcounts matches across all pages.Stream state querying + the compaction watermark (jasperfx#740 → #5333 / #5334)
QueryStreamStates(tenantId?)exposes a realIQueryable<StreamState>overmt_streams— every public member translates inWhere(), includingAggregateType == typeof(X)(resolved through the stored type alias) and the newCompactedVersionwatermark, so a compaction policy predicate likes.AggregateType == typeof(Order) && s.Version - s.CompactedVersion > 1000 && !s.IsArchivedruns server-side.mt_streamsgains an additivecompacted_version bigint NOT NULL DEFAULT 0column (Weasel migration; expect a one-time schema-touch burst on a first local test run against pre-existing schemas), andCompactStreamAsyncrecords the watermark in the same unit of work — monotonically (greatest()), so a replayed lower-cutoff compaction can never move it backwards. Untranslatable members and a tenant scope on a non-conjoined store refuse by name, never silently match-all.CLI + compliance
The JasperFx.Events
event-queryandstream-querycommands are covered end-to-end against Marten (first CLI-execution tests in the repo). Compliance:EventQueryCompliance(41 facts) andStreamStateQueryCompliance(15) enrolled; the full compliance namespace runs 388/388 on net9.0 and net10.0.Note for code importing both
MartenandJasperFx.Events.Documents: extension-styleToListAsyncover the stream queryable is ambiguous (CS0121) — call the JasperFx extensions explicitly.🤖 Generated with Claude Code
9.31.2
A diagnostics-only patch release. No behavioural change to the write path.
A failed batched write now reports the SQL that failed
When a batched write failed, Marten threw a
MartenCommandExceptionwhose message rendered an empty command text. Reported from the field on an async projection:The
$ $ $is the message template interpolating a command that was always null.ReadNpgsqlCommand()looks for anNpgsqlCommandinexception.Data, and on theExecuteBatchPagesAsyncpath there is no single command to put there —AutoClosingLifetimetransformed the exception with nothing recorded at all, andWrapAndThrow(NpgsqlBatch, ...)recorded the batch under a key that nothing ever read.The practical consequence: the offending SQL was unrecoverable from the exception and from the logs, for every async projection write. That is precisely the situation where hand-written SQL — a
QueueSqlCommand, a customIStorageOperation, a projection side effect — turns out to be malformed, and the one thing you need to see is the statement.MartenCommandExceptionnow recovers the SQL from three sources, in order:NpgsqlCommandit was handed;NpgsqlException.BatchCommand— Npgsql identifies the exact statement the server rejected when the failure came out of a batch execution;NpgsqlBatchrecorded on the exception.The recovered statement is also exposed on a new
MartenCommandException.CommandTextproperty, so it can be read programmatically rather than scraped out of the message.AutoClosingLifetimeexecutes its batches inline rather than throughhandleCommandException, so it now records its batch. The other three connection lifetimes already routed throughWrapAndThrow(NpgsqlBatch, ...)and only needed a reader for the key they were already writing.Two guardrails worth knowing about: a batch renders at most five statements, so a 500-operation projection page cannot turn one failure into an unreadable log entry, and the whole resolution is wrapped in a
catch— building a diagnostic must never replace the real failure.Also released as 8.38.1 on the 8.x line.
9.31.1
A single-fix patch release that moves Marten to JasperFx 2.61.0, picking up the source generator fix for JasperFx/jasperfx#733. Weasel stays on 9.29.0.
Self-aggregating snapshots silently skipped a constructor-based
CreateA self-aggregating snapshot may declare its Create handler as an event-shaped constructor,
public Foo(FooCreated e), instead of a namedstatic Create. That works on its own. Adding aShouldDeletemethod to the same aggregate switched the source generator to a different emitter — one that built its dispatch switch from named conventional methods only — so the constructor's event type got no case arm at all.Nothing failed loudly. The generated code compiled, the constructor never ran, and the next Apply-only event built the aggregate through
RuntimeHelpers.GetUninitializedObject, skipping every field initializer. The visible symptom was anApplyEventExceptionwrapping aNullReferenceExceptionout of anApplythat appended to a collection property:The quieter outcome, where no
Applyhappens to dereference anything, is a silently blank aggregate.Both documented workarounds — converting the constructor to a
static Create, or registering the delete throughDeleteEvent<T>()instead ofShouldDelete— become unnecessary on this release.The same omission was also in the generated
EventTypesproperty on every self-aggregating path, including the ones whose dispatch was already correct, so an aggregate with a constructorCreateand noShouldDeletegains its creating event in that list here too.Covered by
Bug_jasperfx_733_event_constructor_create_with_should_deleteacross inline, async and live aggregation, plus the delete arm itself. See #5322.9.31.0
Every fix in this release removes a silent wrong answer — not a crash, not an exception, but a plausible-looking result that was wrong with nothing to tell you so. A stream folded into partial aggregates. Paging that returned arbitrary pages. Monitoring that went dark rather than broken. A search reading a key that did not exist. An index that was never created.
Plus one genuinely new feature: weighted full text search with relevance ranking.
New: weighted full text indexes and
ts_rankorderingA full text index used to concatenate its members into one flat vector, so a match in a title was exactly as relevant as a match in a long description. Now it can be weighted, and ranked:
The rank resolves the same tsvector the
Whereclause matched on, read from the index definition. That is the load-bearing design constraint rather than an implementation detail: a rank computed over a different vector than the filter matched on returns rows in an order that looks plausible and means nothing — a far quieter failure than returning the wrong rows.Requires Weasel 9.29.0 (weasel#541), which made it possible to index an expression that is already a
tsvector. See the full text documentation for the costs worth knowing first — GIN cannot order, so this is a post-filter sort; and adding weights to an existing index drops and recreates it.Silent wrong answers, fixed
Async projections folded one stream into several partial aggregates (#5305, originally #4085). When a stream's events disagreed about
tenant_id, the daemon sliced it per tenant and applied the pieces over each other, so anApplysaw a document with every property at its default. Marten had setForceSingleTenancysince the original fix, butTenantedEventSlicerhonoured that flag on only one of its two overloads — and the async daemon reaches the other one. The flag was being set on precisely the path that could not read it. Fixed upstream in JasperFx 2.58.0.OrderByafter aGroupJoin/SelectManywas dropped from the SQL (#5311). Silently, and withSkip/Takeit was worse:OFFSETandLIMITwere emitted while the ordering was not, and unordered paging in PostgreSQL has no stable row order — so rows repeat across pages while others never appear.Whereon a bare-side selector andCountover a join were wrong in the same surface and are fixed too.A store with monitoring off dropped the monitoring columns another store had added (#5309). Two
DocumentStores over oneDatabaseSchemaNamethat disagreed aboutEnableExtendedProgressionTrackingkept stripping each other'smt_event_progressioncolumns — last writer wins, silent on both sides. A service beside a seeder or a reporting job is an ordinary arrangement, and neither was doing anything wrong. The shape of that table no longer depends on configuration at all.Full text search rewrote JSON keys, not just the column (#5314, thanks @mlh758). A member whose serialized name contained
dataproducedd.data ->> 'd.data'— a key that does not exist. Two quiet consequences: that member contributed nothing to the search, and the expression no longer matched the index, so the GIN index could not serve the query either.A second full text index over different members was silently discarded (#5315). Index names derive from the table rather than from the members, so two
FullTextIndex()calls collided by construction and the second was thrown away — never registered, never created, never searched. Ambiguity is now refused with an explanatory exception instead of resolved by declaration order.A DCB boundary aggregate failed far from its cause (JasperFx 2.60.0). An identity-less
[BoundaryAggregate]folded byEvolve(IEvent)got no evolver and no diagnostic, surfacing much later asFetchForWritingByTags<T>throwing "No source-generated dispatcher found" — naming neither the type nor the reason. Now it generates, and a[BoundaryAggregate]with nothing to fold events with is reported asJFXEVT007.A DCB tag version was captured after the events were read (#5300). Two batched statements do not share a
READ COMMITTEDsnapshot, so the version could reflect a concurrent append. Captured before the read now.Also in this release
projection-runCLI command arrives with JasperFx 2.60.0 and needs no Marten change — every host referencingJasperFx.Eventspicks it up. It replays one projection over a stream slice or DCB tag match and prints per-event before/after state, writing nothing.Bug_5268's concurrent index test no longer depends on how much unrelated transaction load happens to be in flight (#5308), so validating a dependency bump by running the whole suite at once is trustworthy again.BuildSlicernow agrees withFetchAsyncPlanabout global aggregates (#5307). Alignment rather than a fix — no reachable corruption depended on it, and the reasoning is written down at the call site so the question does not have to be reconstructed next time.Upgrade notes
OrderByFragment.Expressionschanged fromList<string>toList<ISqlFragment>. A public API break, deliberately taken: an ordering could not carry a parameter while the clause was a list of strings, which is why the older ngram ranking inlines its search term rather than binding it. Nothing outside Marten's own LINQ internals is likely to touch this type, but it is a compile break if you did.... (truncated)
Commits viewable in compare view.
Updated Quartz.Extensions.Hosting from 3.20.0 to 3.20.1.
Release notes
Sourced from Quartz.Extensions.Hosting's releases.
3.20.1
Quartz.NET 3.20.1 is a maintenance release: every change is a bug fix, the public API is untouched (the baselines did not move), and the schema is 3.20's. Most of it was found while 4.0 was being finished and rehearsed — a fix that turned out to be as old as 3.x was ported here rather than left on the newer line — and one item comes from a production application's 3.19.1 → 4.0 upgrade that also read on 3.x. Eight of the fixes change what a running scheduler does, each marked Behavior change worth noting below.
What changed
Landed on the branch since 3.20.0:
DailyTimeIntervalTriggerstored through the default Newtonsoft path reads back again —TimeOfDayhas no parameterless constructor, so with the trigger converters off (the default)EndTimeOfDaythrew "Unable to find a constructor" andStartTimeOfDaysilently read back as midnight. A converter scoped toTimeOfDay-typed members reads both forms; nothing about what is written changed, so every blob a released 3.20 wrote is one this reads. (9ee33fec17, fixes #3508)StartTimeUtckept its milliseconds while the fire times are counted in whole seconds, so a start of22:50:00.68could produce a first fire at22:50:00.000. Start and end are rounded down to the second when set, asCronTriggerImplalways did. (cc051a7788, #3386)RAMJobStoreand as a permanentCOMPLETErow in the ADO store. Both stores finish it now. (0af9431d3e, #3507)[DisallowConcurrentExecution]job is neither acquired nor swept, so the completion that unblocks it is the first thing that can settle its missed fire time;RAMJobStorenow does whatJobStoreSupport.RecoverUnblockedMisfiresalways did. (c9d8658a35, #3463)RAMJobStorewrotePausedoverError, so a failed trigger vanished from every listing once its group was paused andResetTriggerFromErrorStatehad nothing to reset. It now pauses only what the ADO store pauses: waiting, acquired and blocked triggers. (a56a16ca0c)RescheduleJobadvanced a never-fired repeating simple trigger's start time past a next fire time it kept, so it fired at the stale time and again at its start. (3e086091fc, #3554)overwrite-existing-dataon, and a repeating trigger that starts now fired twice milliseconds apart. (f25080cef6, #3554)Dictionary<string, string>job-data value written by the Newtonsoft package carried a$typethe System.Text.Json reader handed back as an entry, and one written by System.Text.Json came back from Json.NET as aJObject. Both readers read both shapes; neither writer changed. (83ba80ce79, part of #3582)QRTZ_SIMPROP_TRIGGERStoo — a database missing only that table passed validation and failed on the first calendar-interval, daily-time-interval or recurrence trigger insert. (b33c70487b, #3564)4b3c43a90e); untagged builds from the branch say 3.20 (0e2f6bcf31); the XML scheduling integration test opens its own fixture's data source (4c07210199, #3573).Ported from 4.0:
JobToBeExecutedescaped as itself rather than the exception the run shell catches, soTriggeredJobCompletewas never reached: the trigger stayed acquired and, for a[DisallowConcurrentExecution]job, every sibling trigger stayed blocked; the firing was also listed as executing for the life of the process. (port of #3502)IDX_QRTZ_T_NFT_ST_MISFIRE, whose second column is compared with<>and stops the seek dead. Measured on 4.x against 100,000 triggers: the count 111 ms → 0.7 ms, the sweep 66 ms → 0.7 ms. No schema change. (port of #3608)RescheduleJobandUpdateTriggerDetailson the ADO store resolved the job's class to decide whether the new trigger could run, and failed in an administration node without the assembly. Both read the job's two attribute flags fromQRTZ_JOB_DETAILSnow, so the decision is right without the class and a placeholderITypeLoadHelper— which decided that question by whether the placeholder carried the attribute — is no longer needed. (port of #3705)40001,40P01;40002excepted) is transient. Firebird reports a write conflict that way withIsTransientfalse, andMySql.Dataits 1213 deadlock. (port of #3454)SimpleTriggerinterval finer than a millisecond was stored as0, read back as zero, and left the trigger inACQUIREDfor good behind a divide-by-zero the store logged and swallowed. It is refused on write now, naming the trigger and the column;RAMJobStorekeeps accepting it. (port of #3673)List<string>or a nested object serialized happily and threw on the next read with the blob already in the database, and every later acquisition of the trigger failed on it. A value that would be stored as a JSON array, or as an object other than aDictionary<string, string>, is refused before the first byte is written, naming the entry and its type. Anything stored as a number or a string — every numeric type,DateTime,Guid,byte[],Uri— still round-trips exactly as before. (port of #3495)JsonSerializationExceptionat store time, where it used to be a blob the next read failed on. The refusal also covers three shapes that did not throw before but never came back as themselves either — a non-genericHashtable, an object whose properties are all strings, and aJobDataMapnested inside aJobDataMap— each of which the reader handed back as aDictionary<string, string>. Store one of those as a string of your own making.EndTimeUtcfalling between two fire times of the same day let the trigger go on firing until the daily window closed, andFinalFireTimeUtcreported that close even when it was a day past the end. (port of the daily half of #3458)NativeJobno longer deadlocks a child that writes more than a pipe buffer — both streams were redirected whether or notconsumeStreamsasked for them to be read, so with the defaults a chatty process blocked on its own write and the job's synchronous wait held a worker for ever. Nothing is redirected unless consumed. (port of the rc.1 fix)EnlistConnectioninside aTransactionScopetook aMicrosoft.Data.Sqliteconnection on trust, and SQLite cannot enlist, so every statement committed on the spot and a rolled-back scope left the schedule behind.EnlistTransaction(DbTransaction)still works there. (port of the beta.1 fix)now - MisfireThresholdwas a misfire toRAMJobStoreand to the ADO store's single-trigger path but not to its periodic sweep; the sweep says<=now and the acquisition predicate moved to>in step. (port of #3462)"3,14"read as314from the floating-point accessors whileGetIntthrew. (port of the beta.1 fix)GetDoubleandGetFloatthrow aFormatExceptionfor such a string where they used to answer a number a hundred times too large.[matches literally on SQL Server — T-SQL reads[as a character class inLIKE; it is escaped on that dialect only, because the standard forbids escaping a non-wildcard elsewhere. (port of the rc.1 fix)[matches the groups it names rather than the character class T-SQL read it as, so it can list, pause, resume or delete a different set than on 3.20.DirectoryScanJobstores its previous scan as something a job store can write — it kept aList<FileInfo>under[PersistJobDataAfterExecution], which System.Text.Json cannot write, so its first firing on such a store failed to persist. A legacy list already in a running scheduler is still read. (port of the rc.1 fix)DirectoryScanJobruns at all on 3.20 — it read its optional job-data keys withGetString, which throws for a key that is not there, so a job configured without a directory provider or listener name failed on every firing withKeyNotFoundException. Found while porting the previous item; the optional keys are asked for rather than read.SelectSchedulerStateRecordsbinds its parameters in statement order — only a provider withBindByNameoff could ever have noticed. (port of the alpha.3 fix)Public API
Unchanged. No signature was added, altered or removed, and the
PublicApiTestbaselines did not move.... (truncated)
Commits viewable in compare view.
Updated Quartz.Serialization.SystemTextJson from 3.20.0 to 3.20.1.
Release notes
Sourced from Quartz.Serialization.SystemTextJson's releases.
3.20.1
Quartz.NET 3.20.1 is a maintenance release: every change is a bug fix, the public API is untouched (the baselines did not move), and the schema is 3.20's. Most of it was found while 4.0 was being finished and rehearsed — a fix that turned out to be as old as 3.x was ported here rather than left on the newer line — and one item comes from a production application's 3.19.1 → 4.0 upgrade that also read on 3.x. Eight of the fixes change what a running scheduler does, each marked Behavior change worth noting below.
What changed
Landed on the branch since 3.20.0:
DailyTimeIntervalTriggerstored through the default Newtonsoft path reads back again —TimeOfDayhas no parameterless constructor, so with the trigger converters off (the default)EndTimeOfDaythrew "Unable to find a constructor" andStartTimeOfDaysilently read back as midnight. A converter scoped toTimeOfDay-typed members reads both forms; nothing about what is written changed, so every blob a released 3.20 wrote is one this reads. (9ee33fec17, fixes #3508)StartTimeUtckept its milliseconds while the fire times are counted in whole seconds, so a start of22:50:00.68could produce a first fire at22:50:00.000. Start and end are rounded down to the second when set, asCronTriggerImplalways did. (cc051a7788, #3386)RAMJobStoreand as a permanentCOMPLETErow in the ADO store. Both stores finish it now. (0af9431d3e, #3507)[DisallowConcurrentExecution]job is neither acquired nor swept, so the completion that unblocks it is the first thing that can settle its missed fire time;RAMJobStorenow does whatJobStoreSupport.RecoverUnblockedMisfiresalways did. (c9d8658a35, #3463)RAMJobStorewrotePausedoverError, so a failed trigger vanished from every listing once its group was paused andResetTriggerFromErrorStatehad nothing to reset. It now pauses only what the ADO store pauses: waiting, acquired and blocked triggers. (a56a16ca0c)RescheduleJobadvanced a never-fired repeating simple trigger's start time past a next fire time it kept, so it fired at the stale time and again at its start. (3e086091fc, #3554)overwrite-existing-dataon, and a repeating trigger that starts now fired twice milliseconds apart. (f25080cef6, #3554)Dictionary<string, string>job-data value written by the Newtonsoft package carried a$typethe System.Text.Json reader handed back as an entry, and one written by System.Text.Json came back from Json.NET as aJObject. Both readers read both shapes; neither writer changed. (83ba80ce79, part of #3582)QRTZ_SIMPROP_TRIGGERStoo — a database missing only that table passed validation and failed on the first calendar-interval, daily-time-interval or recurrence trigger insert. (b33c70487b, #3564)4b3c43a90e); untagged builds from the branch say 3.20 (0e2f6bcf31); the XML scheduling integration test opens its own fixture's data source (4c07210199, #3573).Ported from 4.0:
JobToBeExecutedescaped as itself rather than the exception the run shell catches, soTriggeredJobCompletewas never reached: the trigger stayed acquired and, for a[DisallowConcurrentExecution]job, every sibling trigger stayed blocked; the firing was also listed as executing for the life of the process. (port of #3502)IDX_QRTZ_T_NFT_ST_MISFIRE, whose second column is compared with<>and stops the seek dead. Measured on 4.x against 100,000 triggers: the count 111 ms → 0.7 ms, the sweep 66 ms → 0.7 ms. No schema change. (port of #3608)RescheduleJobandUpdateTriggerDetailson the ADO store resolved the job's class to decide whether the new trigger could run, and failed in an administration node without the assembly. Both read the job's two attribute flags fromQRTZ_JOB_DETAILSnow, so the decision is right without the class and a placeholderITypeLoadHelper— which decided that question by whether the placeholder carried the attribute — is no longer needed. (port of #3705)40001,40P01;40002excepted) is transient. Firebird reports a write conflict that way withIsTransientfalse, andMySql.Dataits 1213 deadlock. (port of #3454)SimpleTriggerinterval finer than a millisecond was stored as0, read back as zero, and left the trigger inACQUIREDfor good behind a divide-by-zero the store logged and swallowed. It is refused on write now, naming the trigger and the column;RAMJobStorekeeps accepting it. (port of #3673)List<string>or a nested object serialized happily and threw on the next read with the blob already in the database, and every later acquisition of the trigger failed on it. A value that would be stored as a JSON array, or as an object other than aDictionary<string, string>, is refused before the first byte is written, naming the entry and its type. Anything stored as a number or a string — every numeric type,DateTime,Guid,byte[],Uri— still round-trips exactly as before. (port of #3495)JsonSerializationExceptionat store time, where it used to be a blob the next read failed on. The refusal also covers three shapes that did not throw before but never came back as themselves either — a non-genericHashtable, an object whose properties are all strings, and aJobDataMapnested inside aJobDataMap— each of which the reader handed back as aDictionary<string, string>. Store one of those as a string of your own making.EndTimeUtcfalling between two fire times of the same day let the trigger go on firing until the daily window closed, andFinalFireTimeUtcreported that close even when it was a day past the end. (port of the daily half of #3458)NativeJobno longer deadlocks a child that writes more than a pipe buffer — both streams were redirected whether or notconsumeStreamsasked for them to be read, so with the defaults a chatty process blocked on its own write and the job's synchronous wait held a worker for ever. Nothing is redirected unless consumed. (port of the rc.1 fix)EnlistConnectioninside aTransactionScopetook aMicrosoft.Data.Sqliteconnection on trust, and SQLite cannot enlist, so every statement committed on the spot and a rolled-back scope left the schedule behind.EnlistTransaction(DbTransaction)still works there. (port of the beta.1 fix)now - MisfireThresholdwas a misfire toRAMJobStoreand to the ADO store's single-trigger path but not to its periodic sweep; the sweep says<=now and the acquisition predicate moved to>in step. (port of #3462)"3,14"read as314from the floating-point accessors whileGetIntthrew. (port of the beta.1 fix)GetDoubleandGetFloatthrow aFormatExceptionfor such a string where they used to answer a number a hundred times too large.[matches literally on SQL Server — T-SQL reads[as a character class inLIKE; it is escaped on that dialect only, because the standard forbids escaping a non-wildcard elsewhere. (port of the rc.1 fix)[matches the groups it names rather than the character class T-SQL read it as, so it can list, pause, resume or delete a different set than on 3.20.DirectoryScanJobstores its previous scan as something a job store can write — it kept aList<FileInfo>under[PersistJobDataAfterExecution], which System.Text.Json cannot write, so its first firing on such a store failed to persist. A legacy list already in a running scheduler is still read. (port of the rc.1 fix)DirectoryScanJobruns at all on 3.20 — it read its optional job-data keys withGetString, which throws for a key that is not there, so a job configured without a directory provider or listener name failed on every firing withKeyNotFoundException. Found while porting the previous item; the optional keys are asked for rather than read.SelectSchedulerStateRecordsbinds its parameters in statement order — only a provider withBindByNameoff could ever have noticed. (port of the alpha.3 fix)Public API
Unchanged. No signature was added, altered or removed, and the
PublicApiTestbaselines did not move.... (truncated)
Commits viewable in compare view.
Updated Radzen.Blazor from 11.2.8 to 11.3.2.
Release notes
Sourced from Radzen.Blazor's releases.
11.3.2
11.3.2 - 2026-09-04
Improvements
Fixes
11.3.1
11.3.1 - 2026-09-03
Improvements
Fixes
11.3.0
11.3.0 - 2026-09-02
Improvements
Fixes
Commits viewable in compare view.
Updated WolverineFx.Marten from 6.32.0 to 6.33.0.
Release notes
Sourced from WolverineFx.Marten's releases.
6.33.0
The headline is a new package. WolverineFx.AI makes a one shot LLM call an ordinary Wolverine message: durable, outbox enrolled, retried by the same rules as everything else, and testable without a model anywhere in sight.
WolverineFx.AI (new package)
An
LlmCalloutis a message. Return one from a handler next to your storage action and it is enrolled in that handler's outbox, so a callout cannot fire for a transaction that did not commit and cannot be lost to a restart in between. The model's answer comes back as an ordinary cascading message, with an ordinary handler, an ordinary retry policy, and its own place in the correlation chain. (closes #4227)LlmBudget.MaximumPromptCharactersrefuses a runaway prompt before your provider is ever called;MaximumTokensPerWindowrefuses callouts once the node has burned its allowance. Both dead letter rather than retry, and so does an answer that cannot be parsed into the response type you asked for -- retrying either is the runaway spend the budget exists to stop.IChatClientfor testing.StubChatClientexercises a callout's whole round trip with no key, no network and no model.Wolverine.AI.AotSmokeproject underTrimMode=fullthat CI runs. (closes #4230)The package references only the Microsoft.Extensions.AI abstractions, never a vendor SDK. The provider -- Anthropic, OpenAI, Azure, Ollama -- and any middleware over it stay your choice.
Fixes
wolverine_nodescredited only one, so nothing in the system could ever stop the extra copy. (closes #4240)AssignmentChangeddescription carries an agent URI, a schema name and a destination node, which on a real cluster overran thedescriptioncolumn and failed the wholeAgentCommandbatch behind it. MySQL was worst hit atVARCHAR(255). (closes #4246)ServiceLocationPolicy.NotAllowed-- on HTTP endpoints and, now, on message handlers. Under the Wolverine 6 default this made the validation middleware unusable and threw at bootstrap. (closes #4238)[Entity],[All],[Queryable],[WriteAggregate]and the rest. (closes #3935)opts.DefaultDuplicateStatusCode, and deduplication refusals now advertise their problem document in OpenAPI.IHost.StopAsyncno longer tears the agents down twice.Upgrade note
6.33.0 requires Weasel 9.30.0, and that raises the GH-4246 fix from "new databases only" to "existing ones too": the schema differ now compares character lengths, so a widened
varcharis no longer invisible to it and an existing table is corrected in place by anALTER TABLE ... MODIFYthat keeps its rows.Worth knowing before you upgrade: that comparison runs in both directions. Width drift that was previously invisible now generates
ALTERs, and a model narrower than an existing column will emit a narrowingALTERthat can fail on real data. Sizes that are not character lengths -- a MySQLint(11)display width, a decimal precision, a datetime fsp -- are still ignored.Dependencies
JasperFx 2.60.0, Marten 9.30.0, Polecat 5.21.1, Fisher 1.0.6, Weasel 9.30.0.
Commits viewable in compare view.
Updated WolverineFx.RuntimeCompilation from 6.32.0 to 6.33.0.
Release notes
Sourced from WolverineFx.RuntimeCompilation's releases.
6.33.0
The headline is a new package. WolverineFx.AI makes a one shot LLM call an ordinary Wolverine message: durable, outbox enrolled, retried by the same rules as everything else, and testable without a model anywhere in sight.
WolverineFx.AI (new package)
An
LlmCalloutis a message. Return one from a handler next to your storage action and it is enrolled in that handler's outbox, so a callout cannot fire for a transaction that did not commit and cannot be lost to a restart in between. The model's answer comes back as an ordinary cascading message, with an ordinary handler, an ordinary retry policy, and its own place in the correlation chain. (closes #4227)LlmBudget.MaximumPromptCharactersrefuses a runaway prompt before your provider is ever called;MaximumTokensPerWindowrefuses callouts once the node has burned its allowance. Both dead letter rather than retry, and so does an answer that cannot be parsed into the response type you asked for -- retrying either is the runaway spend the budget exists to stop.IChatClientfor testing.StubChatClientexercises a callout's whole round trip with no key, no network and no model.Wolverine.AI.AotSmokeproject underTrimMode=fullthat CI runs. (closes #4230)The package references only the Microsoft.Extensions.AI abstractions, never a vendor SDK. The provider -- Anthropic, OpenAI, Azure, Ollama -- and any middleware over it stay your choice.
Fixes
wolverine_nodescredited only one, so nothing in the system could ever stop the extra copy. (closes #4240)AssignmentChangeddescription carries an agent URI, a schema name and a destination node, which on a real cluster overran thedescriptioncolumn and failed the wholeAgentCommandbatch behind it. MySQL was worst hit atVARCHAR(255). (closes #4246)ServiceLocationPolicy.NotAllowed-- on HTTP endpoints and, now, on message handlers. Under the Wolverine 6 default this made the validation middleware unusable and threw at bootstrap. (closes #4238)[Entity],[All],[Queryable],[WriteAggregate]and the rest. (closes #3935)opts.DefaultDuplicateStatusCode, and deduplication refusals now advertise their problem document in OpenAPI.IHost.StopAsyncno longer tears the agents down twice.Upgrade note
6.33.0 requires Weasel 9.30.0, and that raises the GH-4246 fix from "new databases only" to "existing ones too": the schema differ now compares character lengths, so a widened
varcharis no longer invisible to it and an existing table is corrected in place by anALTER TABLE ... MODIFYthat keeps its rows.Worth knowing before you upgrade: that comparison runs in both directions. Width drift that was previously invisible now generates
ALTERs, and a model narrower than an existing column will emit a narrowingALTERthat can fail on real data. Sizes that are not character lengths -- a MySQLint(11)display width, a decimal precision, a datetime fsp -- are still ignored.Dependencies
JasperFx 2.60.0, Marten 9.30.0, Polecat 5.21.1, Fisher 1.0.6, Weasel 9.30.0.
Commits viewable in compare view.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group updat...Description has been truncated