Skip to content

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 21 Jun 10:25
· 184 commits to main since this release
03ad83e

Bug Fixes

  • Correlate RPC on RequestId, envelope replies, enable publisher confirms (4d5ed3a)
  • Serialize consumer channel writes on partitioned queues (49db951)
  • Advance in-memory RetryCount; make consume Headers read-only (ba5467d)
  • Round-trip queue: URIs through PublishContext address getters (e959ffe)
  • Hold the outbox relay until the transport declares its subscriber topology so startup publishes are not dropped (d1f2173)
  • Hold requests until the bus has started so warmup-time requests are not published before their responder exists (03384c5)
  • Release the publish channel-pool slot when discarding a faulted channel throws (77f8eff)
  • Roll back transactional commands on a failed Result and wire the ITransactionalCommand marker (1ab6b09)
  • Resolve BaseController logger via ILoggerFactory instead of a non-registered ILogger (3272708)
  • Poll immediately before waiting the first interval (cc18b53)
  • Forward the CancellationToken to async validators in the validation behavior (be8f154)
  • Key the Sender request-handler cache by response type to avoid a cross-response cast (e013dee)
  • Preserve headers/trace and fail fast on unresolved types in the broker relay (0efc31f)
  • Throw a descriptive error instead of NRE when the domain-event relay cannot resolve a type (7df4274)
  • Harden integration-test fixtures against scope/teardown races and unbounded host restarts (0c7af81)
  • Give a clear startup error when no transport is configured (a0a2586)
  • Return a still-open channel after a returned/nacked publish instead of discarding it (5b05429)
  • Exit the relay cleanly when stopped during the gate wait (0e8023d)

CI/CD

  • Trunk-based releases, versioned docs, drop CHANGELOG in favor of GitHub Releases (115d818)
  • Mark public API shipped on release and move CI scripts to eng/ (a3e5546)
  • Allow Dependabot-authored PRs in Claude review workflow (b800ffb)
  • Set up NuGet.org trusted publishing and pinned semver releases (5baca04)
  • Limit dependabot auto-merge to patch and minor updates (671ecf5)
  • Follow the triggering comment in the @claude workflow (7007b6d)
  • Add CodeQL buildless analysis workflow (001085d)

Documentation

  • Remove placeholder XML doc boilerplate across src, tests, and samples (e35450e)
  • Document writing a custom transport (0694f89)
  • Restructure root README and add contributing, issue, and PR templates (bab03e7)
  • Forbid Co-Authored-By trailers in commit guidelines (55c17d4)
  • Describe behavior timelessly instead of as changes (fbcdedc)
  • List all 24 packages in the README (931fd75)
  • Document the validation behavior's Result-vs-ValidationException failure contract (312c212)
  • Correct exactly-once overclaim and document transport-delegated poison handling (577e29e)
  • Note retry head-of-line caveat, concurrency math, and connection recovery (4dcdf37)
  • Update article prose for the renamed public API members (20cc281)

Features

  • Harden RabbitMQ transport and add config-driven setup (fc554fe)
  • Add IConsumeFilter pipeline for consumer cross-cutting concerns (ab8eaba)
  • Add LoggingConsumeFilter as default opt-out filter (fa8ff73)
  • Add point-to-point ISendEndpoint with ctx.SendAsync (000a641)
  • Wrap publishes in MessageEnvelope and key dispatch by URN (98dcc1d)
  • Support per-request timeout via IRequestContext (eae2c14)
  • Per-aggregate ordering via UsePartitioner (a81ec69)
  • Add in-memory retry mode preserving per-key order on failure (dc24d8b)
  • Single active consumer for cross-instance ordering (bc0f1d5)
  • Add CorrelationId-keyed UsePartitioner overloads (e47519a)
  • Make QueueDefinition consumer/subscription registration public (e29995a)
  • Bounded publish channel pool with RabbitMq transport options (c7b539b)
  • Publish Fault to the fault exchange by convention on consume failure (12bf5a6)
  • Add in-memory ITestHarness transport on the public Transport SDK (6217b3d)
  • Add idempotent inbox consume filter with relational EF Core store (1f5ed31)
  • Extract EF Core inbox base package and add Cosmos idempotency store (0fd4a3f)
  • Add per-container ConfigureWebHost/ConfigureServices extension points (3e300f4)
  • Run inbox/outbox/command transactions in the EF execution strategy instead of disabling retries (4fe49df)
  • Add publish/send filter pipeline with a scoped filtering publisher over the transport terminal (b630729)
  • Add transactional bus-publish outbox on a unified pluggable-sink outbox engine with a commit-time relay trigger (7dd9359)
  • Add AddTransactionalConsumer and gate transactional capture on ISaveOutboxMessages.IsInTransaction (c902c2b)
  • Share containers across the assembly via a ContainerHost with per-class scopes built into the fixture bases (3ae39d6)
  • Add Vulthil.xUnit.Cosmos emulator fixture with a database per test class (8c57c94)
  • Signal the relay after a non-transactional save captures domain events, with interceptor tests (fcf0261)
  • Add IRestartableHostedService so the test harness can pause the outbox relay around the per-test reset (686fd3c)
  • Dead-letter exhausted messages, deterministic ordering, and isolated parallel publishing (463dfe6)
  • Register the MySQL DbContext (Aspire on net9, Microting on net10) and add a configureDbContextOptions passthrough across the EF Core providers (18ec46f)
  • Compare entities by identity via Equals and GetHashCode (06c64dc)
  • Give ValidationError value-based equality and a non-empty invariant, and add an Error.Validation factory (e417774)
  • Add Ensure, GetValueOrDefault, TapError, MapError, Recover, Or/OrElse, Combine, and Zip combinators with async overloads (c833e25)
  • Produce RFC 7807 ProblemDetails for handled failures, uncaught exceptions, and the OpenAPI document (f621d6c)
  • Rename the relay ActivitySource to its package and auto-register it when tracing is enabled (78c9171)
  • Add opt-in outbox and inbox retention sweeps (relational + Cosmos) (3e71fa8)
  • Model consumer retry, Fault emission, and request timeout (b48bc23)
  • Add outbox relay and inbox guard metrics (782a5b8)
  • Resolve test DbContexts from DI and add IStartupResource hook (c81ab27)

Miscellaneous

  • Group src and tests projects into solution folders (98d6562)
  • Remove unused code identified during review (b80bd21)
  • Drop unused package refs and relocate Options.DataAnnotations to the outbox package (78de776)
  • Regenerate WebApi migrations into a coherent three-step history (267eb34)

Refactoring

  • Add nuget image (741a2ec)
  • Decorate handlers directly instead of relying on ISender (93fa154)
  • Merge options/provider behind dual interfaces and gate default filters at registration (139c82b)
  • Collapse consumer invokers into MessageHandler + typed factory (4112353)
  • Consolidate routing-key config; nullable Subscribe (faeacb4)
  • Internalize configurator impls; align UseRetry nullability (5b6cdd0)
  • Typed Fault.OriginalContext snapshot; drop Null* contexts (6aa0997)
  • Promote envelope, pipeline factory, handler kind, rpc fault to public primitives (f37bfc9)
  • Extract generic MessageExecutionRegistry; RabbitMq consumes it (dc4197c)
  • Make IPublishContext write-only via Set methods; SetTimeout returns void (b028d03)
  • Make publish context and envelope factory public (e988532)
  • Add public envelope-based message context builder (3a7f484)
  • Build RabbitMq test providers via public AddMessaging and drop the IVT (eb9ee37)
  • Extract the engine into the Vulthil.SharedKernel.Outbox package and namespace, off the infrastructure package (2d26ff3)
  • Make the engine persistence-agnostic via IOutboxStore and isolate EF in Vulthil.SharedKernel.Outbox.EntityFrameworkCore (16eb5f4)
  • Move method-body rationale into XML docs and drop non-AAA comments (ac6f855)
  • Deduplicate open-generic pipeline-handler validation (b6ccc0b)
  • Make AggregateRoot.Raise protected so events are raised only from within the aggregate (06cb563)
  • Apply outbox/inbox EF mappings via internal provider configs exposed as ModelBuilder extensions (daae146)
  • Fold opt-in sweeps into outbox/inbox setup options (39d54b5)
  • Drop redundant GetMessageConfiguration overload and honor nullable CorrelationId (2556368)
  • Tidy the public API surface ahead of the 1.0 freeze (66a07c9)
  • Apply pre-1.0 API audit follow-ups (a7c8d78)

Testing

  • Expand integration scenarios and add failure-config + timeout tests (ae5f51d)
  • Cover transport primitives in core test project (d165661)
  • Add BaseUnitTestCase teardown hook; adopt Target and ctor mock-field patterns across tests (ee26cb4)
  • Drive consume-filter and polymorphic dispatch tests through AutoMocker (45451ae)
  • Add Fault and MessageContextSnapshot tests for Abstractions (2bec04b)
  • Pin integration test HttpClients to the http endpoint to avoid CI dev-cert TLS failures (6aa36b3)
  • Add Cosmos emulator test container wired through a WebApplicationFactory (97e14de)
  • Move library-level integration tests out of the WebApi sample onto a dedicated Vulthil.TestHost composition root (1d32723)

WIP

Build

  • Centralize SDK version in global.json and bump Aspire to 13.4.2 (51506b1)
  • Bump .NET, analyzer, Aspire, and OpenTelemetry versions and declare record members in PublicAPI (00c0578)
  • Pin MessagePack above GHSA-hv8m-jj95-wg3x in the messaging integration tests (5ec948b)
  • Bump github/codeql-action from 3 to 4 in the dotnet group (668f239)
  • Suppress the intentional per-TFM UseMySql APICompat difference for the MySQL package (5655df0)
  • Suppress NU1903 for the transitive SQLitePCLRaw advisory (GHSA-2m69-gcr7-jv3q) (d6882b7)
  • Suppress NU1903 for the transitive SQLitePCLRaw advisory (GHSA-2m69-gcr7-jv3q) (49ff65d)
  • Bump actions/checkout (b89446a)