Skip to content

Releases

v13.0.5

Choose a tag to compare

@niemyjski niemyjski released this 14 Oct 21:14

Foundatio v13.0.5

Feature and maintenance release building on v13.0.4.

Highlights

  • Queue GroupId — a provider-neutral tenant/group key for queue entries, with support for SQS fair queues and FIFO, and Azure Service Bus sessions
  • Configurable hosted job startup timeout — new StartupActionsTimeout option for jobs that wait for startup actions
  • Dependency updates across OpenTelemetry, MessagePack, Polly, Microsoft.Extensions, and xUnit
  • Documentation improvements for SQS, Service Bus, and local AWS emulation

Queues: GroupId (#579)

  • Added QueueEntryOptions.GroupId and IQueueEntry.GroupId so a message can carry a tenant or group key through any queue implementation
  • Added SharedQueueOptions.GroupIdResolver (and a GroupId(Func<T, string?>) builder method) to derive the group id from the message payload. An explicit GroupId on the entry options overrides the resolver
  • An empty GroupId is normalized to null, so an Enqueuing handler can no longer hand a provider an empty group id
  • EnqueueAsync now copies the caller's QueueEntryOptions before applying the resolver and trace context, so reusing an options instance no longer carries the previous message's CorrelationId/TraceState and handler edits no longer leak back to the caller
  • GroupId is preserved across abandon and retry, including delayed retries
  • Added shared QueueTestBase tests so every provider is verified against the same GroupId behavior

Note: GroupId is carried by the core abstractions. Whether it changes delivery behavior depends on the provider package. Upgrade the provider (SQS, Azure Service Bus, Redis, Azure Storage) to a release that supports it. Providers that don't support GroupId ignore it.

Hosting: Configurable Startup Timeout (#569)

  • Added HostedJobOptions.StartupActionsTimeout and the matching StartupActionsTimeout(TimeSpan?) builder method for jobs registered with AddJob
  • Applies when WaitForStartupActions is enabled. When unset, the default remains five minutes
  • Nonpositive durations time out immediately; infinite waits are not supported
services.AddJob<CleanupJob>(o => o
    .WaitForStartupActions()
    .StartupActionsTimeout(TimeSpan.FromMinutes(15)));

Documentation

  • Clarified SQS FIFO deduplication id selection, the queue deletion window, ContentBasedDeduplication being read once per queue, and dead-letter encryption, limits, and at-least-once behavior
  • Documented Service Bus session abandon ordering and delayed retries on duplicate-detection queues
  • Referenced Floci instead of LocalStack for local AWS emulation (#576)
  • Clarified JobResult retry vs. permanent failure semantics for queue jobs versus standalone jobs
  • Removed Minio references from the docs and README (repository archived)

Build & CI

  • CI package publishing is limited to main and version tags, and branch nightlies are published so provider PRs can consume a matching build
  • The Feedz publish feed is now configurable in the build workflow
  • Removed the explicit Microsoft.SourceLink.GitHub package reference
  • MinVer 7.0.0 → 8.0.0

Dependency Updates

  • OpenTelemetry exporter/hosting: 1.18.0 → 1.19.1; instrumentation (AspNetCore, Http, Runtime): 1.18.0 → 1.19.0
  • MessagePack: 3.1.8 → 3.1.12
  • Polly: 8.7.0 → 8.8.0
  • Microsoft.AspNetCore.DataProtection: 8.0.30 → 8.0.32
  • Microsoft.Extensions.Configuration.* / Microsoft.AspNetCore.TestHost: 10.0.11 → 10.0.13
  • Microsoft.Extensions.TimeProvider.Testing: 10.9.0 → 10.11.0
  • xUnit v4: xunit.v3.mtp-v2 / xunit.v3.assert / xunit.v3.extensibility.core 4.0.0 → 4.0.2, xunit.runner.visualstudio 4.0.0 → 4.0.1
  • Microsoft.NET.Test.Sdk: 18.9.0 → 18.11.0
  • Moq: 4.20.72 → 4.21.0 (tests)
  • Aspire.Hosting.Redis (sample): 13.5.3 → 13.6.1
  • Docs tooling: js-yaml 4.3.1 → 4.3.2 (#562)

Note for consumers: If you reference Foundatio.TestHarness, Foundatio.Xunit.v3, or other Foundatio test packages, keep them aligned with your xUnit packages (4.0.x).

Packages

This release publishes the usual Foundatio packages, including:

  • Foundatio
  • Foundatio.Extensions.Hosting
  • Foundatio.TestHarness
  • Foundatio.Xunit.v3
  • Foundatio.MessagePack
  • Foundatio.DataProtection

Install via NuGet:

dotnet add package Foundatio --version 13.0.5

Full Changelog

v13.0.4...v13.0.5

v13.0.4

Choose a tag to compare

@niemyjski niemyjski released this 28 Aug 16:10

Foundatio v13.0.4

Maintenance and documentation release building on v13.0.2.

Highlights

  • xUnit v4 support in Foundatio.Xunit.v3 and the test harness packages
  • Redis documentation improvements for connection lifetime, graceful shutdown, and Pub/Sub timeout behavior
  • Dependency updates across OpenTelemetry, ASP.NET Core, MessagePack, and Microsoft.Extensions
  • Security fix — pinned System.Security.Cryptography.Xml to 8.0.4 to resolve transitive vulnerability advisories
  • Expanded cache test coverage for RemoveIfEqualAsync / ReplaceIfEqualAsync when keys do not exist

Documentation

  • Clarified recommended Redis IConnectionMultiplexer registration patterns in DI (factory-owned instances vs. pre-built singletons that are never disposed)
  • Added Connection Lifetime & Graceful Shutdown guidance for Redis, including app-side disposal and server-side timeout/keepalive considerations
  • Updated Redis Pub/Sub timeout behavior documentation
  • Improved dependency injection and getting-started examples

Testing

  • Upgraded test projects to xUnit v4 (xunit.v3.mtp-v2 4.0.0, xunit.runner.visualstudio 4.0.0)
  • Updated Foundatio.Xunit.v3 retry test execution to align with xUnit v4 APIs
  • Added test coverage ensuring RemoveIfEqualAsync and ReplaceIfEqualAsync return false and do not create keys when the target key does not exist

Note for consumers: If you reference Foundatio.TestHarness, Foundatio.Xunit.v3, or other Foundatio test packages, upgrade them together with your xUnit packages to 4.0.0 to avoid test discovery/runtime mismatches.

Dependency Updates

  • OpenTelemetry packages: 1.16.x / 1.15.x → 1.18.0
  • Microsoft.AspNetCore.DataProtection: 8.0.28 → 8.0.30
  • MessagePack: 3.1.7 → 3.1.8
  • Microsoft.Extensions.* / Microsoft.AspNetCore.TestHost: 10.0.11
  • Microsoft.NET.Test.Sdk: 18.7.0 → 18.9.0
  • Aspire.Hosting.Redis (sample): 13.4.6 → 13.5.3

Packages

This release publishes the usual Foundatio packages, including:

  • Foundatio
  • Foundatio.Extensions.Hosting
  • Foundatio.TestHarness
  • Foundatio.Xunit.v3
  • Foundatio.MessagePack
  • Foundatio.DataProtection

Install via NuGet:

dotnet add package Foundatio --version 13.0.4

Full Changelog

v13.0.2...v13.0.4

v13.0.2

Choose a tag to compare

@niemyjski niemyjski released this 25 Jun 19:23

What's Changed

  • chore(deps): bump uuid and mermaid in /docs by @dependabot[bot] in #513
  • fix: correct disposal ordering to prevent ObjectDisposedException during shutdown by @niemyjski in #519
  • Bump Microsoft.SourceLink.GitHub from 10.0.203 to 10.0.300 by @dependabot[bot] in #520
  • perf: change IMessage.Data from byte[] to ReadOnlyMemory by @niemyjski in #530
  • chore(deps-dev): bump dompurify from 3.4.0 to 3.4.11 in /docs by @dependabot[bot] in #529
  • chore(deps-dev): bump markdown-it from 14.1.0 to 14.2.0 in /docs by @dependabot[bot] in #521
  • chore(deps): bump esbuild and vite in /docs by @dependabot[bot] in #531

Full Changelog: v13.0.1...v13.0.2

v13.0.1

Choose a tag to compare

@niemyjski niemyjski released this 09 May 02:41

v13.0.1

This is a major release with 368 files changed across the entire Foundatio codebase. Here are the themes that define v13:

  • Reliability & Correctness: Dozens of race conditions, deadlocks, and disposal issues have been hunted down and fixed across queues, messaging, caching, and timers. Cancellation tokens are now properly linked to disposal for clean shutdown, and poison messages are gracefully handled instead of crashing consumers.
  • Consistent Error Handling: Every subsystem now has its own exception type (QueueException, MessageBusException, SerializerException) so consumers get predictable, catchable errors regardless of the underlying provider. These feature-specific exceptions are automatically excluded from resilience policy retries.
  • API Normalization: Cache TTL behavior, serializer validation, and expiration return values have been normalized across all implementations -- no more provider-specific quirks.
  • Null Safety: A comprehensive NRT audit eliminated null! suppressions across the codebase, fixing latent null bugs and adding proper nullable attributes. The API surface now accurately communicates nullability contracts.
  • Modern .NET: Dropped netstandard2.0 in favor of net8.0 + net10.0. Replaced DeepCloner with the actively-maintained FastCloner. ScheduledTimer now uses TimeProvider for testability.
  • Documentation Overhaul: Foundatio now has a dedicated documentation site with comprehensive guides, source code links, and real-world examples for every subsystem.

Documentation Site

Foundatio v13 ships with a brand-new documentation site covering every subsystem with guides, configuration examples, and direct source code links. Key additions:

  • New docs site built with VitePress (061bd763)
  • Source code links added to every subsystem: caching (8f6d37c1), queues (bb9af714), messaging (59cc2f57), locks (10241465), jobs (7df97b13), serialization (8819ba09), storage (bf2eb1b9)
  • Comprehensive hybrid caching documentation with RedisHybridCacheClient examples (2fc124df, 0791b496)
  • Cache stampede protection patterns (a6cfd75c)
  • Delayed message delivery and distributed tracing guide (da2c6162)
  • RabbitMQ delayed delivery and delayed-exchange plugin deprecation notes (#490)
  • Redis read routing and replica support guide (6860a0c1)
  • Redis replication lag risk documentation (98323dbe)
  • Queue names vs. queue IDs explainer (456389ed)
  • Cancellation token behavior clarification (70a63d12)
  • Cache expiration differences across implementations (1853daee)
  • Enhanced XML doc comments across all core interfaces (7fdad859)
  • Updated job samples (3e003a86) and added sample projects + benchmarks to the solution (160dd74f)
  • Added Foundatio.Mediator links to README and docs (b8f0eba1)

Breaking Changes

  • Dropped netstandard2.0 target: Foundatio now targets net8.0 and net10.0 only. Consumers on .NET Framework or older runtimes must stay on v12.x. by @niemyjski in 4c6aefed, a1089422
  • Normalized ICacheClient.IncrementAsync TTL behavior: Increment operations now consistently apply the TTL parameter across all implementations. Removed ListRemoveAsync ExpiresIn argument to align with all other Remove methods. by @niemyjski in #434
  • Normalized ICacheClient return values for expiration: GetExpirationAsync returns consistent values across implementations. by @niemyjski in #432
  • Normalized ISerializer argument validation: All serializer implementations now consistently validate arguments and throw ArgumentException / ArgumentNullException. by @niemyjski in #440
  • Added QueueException: Queue operations now throw QueueException for queue-specific errors. Guard added against reusing behavior instances. by @niemyjski in #448
  • MessageBusId and QueueId changed to init-only properties: These properties can no longer be set after construction. by @niemyjski in b73bf128
  • Removed obsolete Set/SetAdd/SetRemove methods from cache extensions: These were renamed to List* in v9.0.0 (Nov 2019) and have been [Obsolete] for 6+ years. by @niemyjski in 150beed5
  • Removed obsolete single-parameter GetFileStreamAsync overload: Deprecated in v10.7.0 (Jan 2024) when StreamMode was added. Use the overload accepting StreamMode and CancellationToken. by @niemyjski in 037baae5
  • Comprehensive NRT (Nullable Reference Types) null-safety audit: Eliminated null! suppressions, fixed latent null bugs, and added nullable attributes across the codebase. Return types and parameters may have changed nullability. by @niemyjski in #484, #498
  • Make AcquireAsync throw on failure to fix the silent-null lock footgun by @ejsmith in #508
  • Default JobResult.Message to empty string by @ejsmith in #507
  • fix: abandon queue entry when GetQueueEntryLockAsync throws by @niemyjski in #509

Added

  • Upgrade to xUnit v3 with Foundatio.Xunit.v3: Test infrastructure upgraded to xUnit v3. New Foundatio.Xunit.v3 package with retry test attributes (RetryFactAttribute, RetryTheoryAttribute) for automatic retry of flaky tests. The existing Foundatio.Xunit package continues to support xUnit v2. by @niemyjski in #431
  • Memory-limited in-memory cache: InMemoryCacheClient now supports MaxMemorySize with per-entry size limits and intelligent eviction when memory budgets are exceeded. by @niemyjski, @copilot in #400
  • Poison message handling for queues and message bus: Deserialization failures in queues and the message bus are now gracefully handled as poison messages instead of crashing consumers. Dead letter logging improved. by @niemyjski in #455
  • SerializerException: New exception type for serialization-specific errors, enabling targeted error handling. by @niemyjski in b314a052
  • MessageBusException: Consistent error handling for messaging operations with improved delayed message delivery. by @niemyjski in #443
  • QueueDeleted event on IQueue<T>: Consumers can now subscribe to queue deletion notifications. by @niemyjski in #447
  • OpenTelemetry error recording: Added Activity.AddException polyfill for recording exceptions in distributed traces across all target frameworks. by @niemyjski in #446
  • Synchronous IResiliencePolicy methods: Added sync overloads (Execute, ExecuteAsync) alongside existing async methods. by @ejsmith in #445
  • Feature-specific exceptions excluded from resilience policy retries: QueueException, MessageBusException, StorageException, SerializerException, and CacheException are no longer retried by resilience policies. by @niemyjski in 318fa1a0
  • GetAllExpirationsAsync and SetAllExpirationsAsync on ICacheClient: Bulk expiration read/write support with improved test coverage. by @niemyjski in #426
  • Option to dispose underlying scoped implementations: Scoped cache/queue/etc. wrappers can now optionally dispose their underlying instances. by @niemyjski in #412
  • Job status description: JobStatus now supports a Description property. by @ejsmith in [fdcc1442](htt...
Read more

v13.0.0

Choose a tag to compare

@niemyjski niemyjski released this 25 Apr 01:55
396bd48

v13.0.0

This is a major release with 368 files changed across the entire Foundatio codebase. Here are the themes that define v13:

  • Reliability & Correctness: Dozens of race conditions, deadlocks, and disposal issues have been hunted down and fixed across queues, messaging, caching, and timers. Cancellation tokens are now properly linked to disposal for clean shutdown, and poison messages are gracefully handled instead of crashing consumers.
  • Consistent Error Handling: Every subsystem now has its own exception type (QueueException, MessageBusException, SerializerException) so consumers get predictable, catchable errors regardless of the underlying provider. These feature-specific exceptions are automatically excluded from resilience policy retries.
  • API Normalization: Cache TTL behavior, serializer validation, and expiration return values have been normalized across all implementations -- no more provider-specific quirks.
  • Null Safety: A comprehensive NRT audit eliminated null! suppressions across the codebase, fixing latent null bugs and adding proper nullable attributes. The API surface now accurately communicates nullability contracts.
  • Modern .NET: Dropped netstandard2.0 in favor of net8.0 + net10.0. Replaced DeepCloner with the actively-maintained FastCloner. ScheduledTimer now uses TimeProvider for testability.
  • Documentation Overhaul: Foundatio now has a dedicated documentation site with comprehensive guides, source code links, and real-world examples for every subsystem.

Documentation Site

Foundatio v13 ships with a brand-new documentation site covering every subsystem with guides, configuration examples, and direct source code links. Key additions:

  • New docs site built with VitePress (061bd763)
  • Source code links added to every subsystem: caching (8f6d37c1), queues (bb9af714), messaging (59cc2f57), locks (10241465), jobs (7df97b13), serialization (8819ba09), storage (bf2eb1b9)
  • Comprehensive hybrid caching documentation with RedisHybridCacheClient examples (2fc124df, 0791b496)
  • Cache stampede protection patterns (a6cfd75c)
  • Delayed message delivery and distributed tracing guide (da2c6162)
  • RabbitMQ delayed delivery and delayed-exchange plugin deprecation notes (#490)
  • Redis read routing and replica support guide (6860a0c1)
  • Redis replication lag risk documentation (98323dbe)
  • Queue names vs. queue IDs explainer (456389ed)
  • Cancellation token behavior clarification (70a63d12)
  • Cache expiration differences across implementations (1853daee)
  • Enhanced XML doc comments across all core interfaces (7fdad859)
  • Updated job samples (3e003a86) and added sample projects + benchmarks to the solution (160dd74f)
  • Added Foundatio.Mediator links to README and docs (b8f0eba1)

Breaking Changes

  • Dropped netstandard2.0 target: Foundatio now targets net8.0 and net10.0 only. Consumers on .NET Framework or older runtimes must stay on v12.x. by @niemyjski in 4c6aefed, a1089422
  • Normalized ICacheClient.IncrementAsync TTL behavior: Increment operations now consistently apply the TTL parameter across all implementations. Removed ListRemoveAsync ExpiresIn argument to align with all other Remove methods. by @niemyjski in #434
  • Normalized ICacheClient return values for expiration: GetExpirationAsync returns consistent values across implementations. by @niemyjski in #432
  • Normalized ISerializer argument validation: All serializer implementations now consistently validate arguments and throw ArgumentException / ArgumentNullException. by @niemyjski in #440
  • Added QueueException: Queue operations now throw QueueException for queue-specific errors. Guard added against reusing behavior instances. by @niemyjski in #448
  • MessageBusId and QueueId changed to init-only properties: These properties can no longer be set after construction. by @niemyjski in b73bf128
  • Removed obsolete Set/SetAdd/SetRemove methods from cache extensions: These were renamed to List* in v9.0.0 (Nov 2019) and have been [Obsolete] for 6+ years. by @niemyjski in 150beed5
  • Removed obsolete single-parameter GetFileStreamAsync overload: Deprecated in v10.7.0 (Jan 2024) when StreamMode was added. Use the overload accepting StreamMode and CancellationToken. by @niemyjski in 037baae5
  • Comprehensive NRT (Nullable Reference Types) null-safety audit: Eliminated null! suppressions, fixed latent null bugs, and added nullable attributes across the codebase. Return types and parameters may have changed nullability. by @niemyjski in #484, #498

Added

  • Upgrade to xUnit v3 with Foundatio.Xunit.v3: Test infrastructure upgraded to xUnit v3. New Foundatio.Xunit.v3 package with retry test attributes (RetryFactAttribute, RetryTheoryAttribute) for automatic retry of flaky tests. The existing Foundatio.Xunit package continues to support xUnit v2. by @niemyjski in #431
  • Memory-limited in-memory cache: InMemoryCacheClient now supports MaxMemorySize with per-entry size limits and intelligent eviction when memory budgets are exceeded. by @niemyjski, @copilot in #400
  • Poison message handling for queues and message bus: Deserialization failures in queues and the message bus are now gracefully handled as poison messages instead of crashing consumers. Dead letter logging improved. by @niemyjski in #455
  • SerializerException: New exception type for serialization-specific errors, enabling targeted error handling. by @niemyjski in b314a052
  • MessageBusException: Consistent error handling for messaging operations with improved delayed message delivery. by @niemyjski in #443
  • QueueDeleted event on IQueue<T>: Consumers can now subscribe to queue deletion notifications. by @niemyjski in #447
  • OpenTelemetry error recording: Added Activity.AddException polyfill for recording exceptions in distributed traces across all target frameworks. by @niemyjski in #446
  • Synchronous IResiliencePolicy methods: Added sync overloads (Execute, ExecuteAsync) alongside existing async methods. by @ejsmith in #445
  • Feature-specific exceptions excluded from resilience policy retries: QueueException, MessageBusException, StorageException, SerializerException, and CacheException are no longer retried by resilience policies. by @niemyjski in 318fa1a0
  • GetAllExpirationsAsync and SetAllExpirationsAsync on ICacheClient: Bulk expiration read/write support with improved test coverage. by @niemyjski in #426
  • Option to dispose underlying scoped implementations: Scoped cache/queue/etc. wrappers can now optionally dispose their underlying instances. by @niemyjski in #412
  • Job status description: JobStatus now supports a Description property. by @ejsmith in fdcc1442
  • Enforce 5ms minimum expiration across all cache implementations: Prevents extremely short TTLs that cause race conditions. by @niemyjski in #463
  • net10.0 target framework: Added .NET 10 support alongside .NET 8. by @niemyjski in [4c6aefed](https://github.c...
Read more

v13.0.0-beta6

Choose a tag to compare

@niemyjski niemyjski released this 15 Apr 18:40

What's Changed

  • fix: implement two-phase dispose for MessageBus subscription lifecycle by @niemyjski in #492
  • Add poison message handling for queue deserialization failures by @niemyjski in #455
  • Enforce 5ms minimum expiration across all cache implementations by @niemyjski in #463
  • Fix InvalidCastException in InMemoryCacheClient.GetAsync<object>() for non-IConvertible types by @Copilot in #468
  • Fix race condition in InMemoryQueue.AbandonAsync causing flaky RunUntilEmptyAsync by @niemyjski in #470
  • FastCloner as DeepCloner replacement by @lofcz in #469
  • Bump dompurify from 3.3.1 to 3.3.2 in /docs by @dependabot[bot] in #471
  • Bump rollup from 4.55.1 to 4.59.0 in /docs by @dependabot[bot] in #465
  • Bump minimatch from 10.1.1 to 10.2.4 in /docs by @dependabot[bot] in #464
  • sync fast cloner to 3.5.3 by @lofcz in #485
  • refactor: comprehensive NRT null-safety audit — eliminate null! suppressions, fix latent bugs, add nullable attributes by @niemyjski in #484
  • Fix flaky metrics test caused by DateTime.UtcNow timer resolution race by @niemyjski in #488
  • Bump lodash-es from 4.17.23 to 4.18.1 in /docs by @dependabot[bot] in #489
  • Bump vite from 7.3.1 to 7.3.2 in /docs by @dependabot[bot] in #486
  • Bump picomatch from 4.0.3 to 4.0.4 in /docs by @dependabot[bot] in #483
  • Document RabbitMQ delayed delivery and plugin deprecation by @niemyjski in #490

New Contributors

Full Changelog: v13.0.0-beta3...v13.0.0-beta6

v13.0.0-beta5

Choose a tag to compare

@niemyjski niemyjski released this 14 Apr 01:31

What's Changed

  • Add poison message handling for queue deserialization failures by @niemyjski in #455
  • Enforce 5ms minimum expiration across all cache implementations by @niemyjski in #463
  • Fix InvalidCastException in InMemoryCacheClient.GetAsync<object>() for non-IConvertible types by @Copilot in #468
  • Fix race condition in InMemoryQueue.AbandonAsync causing flaky RunUntilEmptyAsync by @niemyjski in #470
  • FastCloner as DeepCloner replacement by @lofcz in #469
  • Bump dompurify from 3.3.1 to 3.3.2 in /docs by @dependabot[bot] in #471
  • Bump rollup from 4.55.1 to 4.59.0 in /docs by @dependabot[bot] in #465
  • Bump minimatch from 10.1.1 to 10.2.4 in /docs by @dependabot[bot] in #464
  • sync fast cloner to 3.5.3 by @lofcz in #485
  • refactor: comprehensive NRT null-safety audit — eliminate null! suppressions, fix latent bugs, add nullable attributes by @niemyjski in #484
  • Fix flaky metrics test caused by DateTime.UtcNow timer resolution race by @niemyjski in #488
  • Bump lodash-es from 4.17.23 to 4.18.1 in /docs by @dependabot[bot] in #489
  • Bump vite from 7.3.1 to 7.3.2 in /docs by @dependabot[bot] in #486
  • Bump picomatch from 4.0.3 to 4.0.4 in /docs by @dependabot[bot] in #483
  • Document RabbitMQ delayed delivery and plugin deprecation by @niemyjski in #490

New Contributors

Full Changelog: v13.0.0-beta3...v13.0.0-beta5

v13.0.0-beta4

Choose a tag to compare

@niemyjski niemyjski released this 13 Apr 18:15
6d7bd62

What's Changed

  • Add poison message handling for queue deserialization failures by @niemyjski in #455
  • Enforce 5ms minimum expiration across all cache implementations by @niemyjski in #463
  • Fix InvalidCastException in InMemoryCacheClient.GetAsync<object>() for non-IConvertible types by @Copilot in #468
  • Fix race condition in InMemoryQueue.AbandonAsync causing flaky RunUntilEmptyAsync by @niemyjski in #470
  • FastCloner as DeepCloner replacement by @lofcz in #469
  • Bump dompurify from 3.3.1 to 3.3.2 in /docs by @dependabot[bot] in #471
  • Bump rollup from 4.55.1 to 4.59.0 in /docs by @dependabot[bot] in #465
  • Bump minimatch from 10.1.1 to 10.2.4 in /docs by @dependabot[bot] in #464
  • sync fast cloner to 3.5.3 by @lofcz in #485
  • refactor: comprehensive NRT null-safety audit — eliminate null! suppressions, fix latent bugs, add nullable attributes by @niemyjski in #484
  • Fix flaky metrics test caused by DateTime.UtcNow timer resolution race by @niemyjski in #488
  • Bump lodash-es from 4.17.23 to 4.18.1 in /docs by @dependabot[bot] in #489
  • Bump vite from 7.3.1 to 7.3.2 in /docs by @dependabot[bot] in #486
  • Bump picomatch from 4.0.3 to 4.0.4 in /docs by @dependabot[bot] in #483
  • Document RabbitMQ delayed delivery and plugin deprecation by @niemyjski in #490

New Contributors

Full Changelog: v13.0.0-beta3...v13.0.0-beta4

v13.0.0-beta3

Choose a tag to compare

@niemyjski niemyjski released this 14 Feb 16:16
20838a0

What's Changed

  • Fix InMemoryQueue retry: create fresh entry per attempt (entry isolation) by @niemyjski in #454

Full Changelog: v13.0.0-beta2...v13.0.0-beta3

v13.0.0-beta2

Choose a tag to compare

@niemyjski niemyjski released this 14 Feb 02:59

What's Changed

  • [Breaking]: Normalize ISerializer argument validation and enhance test coverage by @niemyjski in #440
  • Improve delayed message delivery and add MessageBusException for consistent error handling by @niemyjski in #443
  • Add DeepClone benchmarks, upgrade DeepCloner to v0.10.4, and add sync resilience methods by @niemyjski in #445
  • Add QueueDeleted event to IQueue for queue deletion notifications by @niemyjski in #447
  • Add QueueException and guard against reusing behavior instances by @niemyjski in #448
  • Add OpenTelemetry error recording with Activity.AddException polyfill by @niemyjski in #446

Full Changelog: v13.0.0-beta1...v13.0.0-beta2