- Schema Validation at Publish Time: New
Hermodr.Publisher.EventSchemapackage adds automatic schema validation middleware to the publish pipeline (#90)SchemaValidationMiddleware— validates event payloads against registered schemas before channel dispatchSchemaValidationOptions— configurableMissingSchemaBehavior(Allow/Block/Fallback) andValidationFailureBehavior(Throw/Log)SchemaRegistrationsApplier— registers built-in deserializers (JSON, XML) into the deserializer registry at startupUseSchemaValidation()— fluent extension onEventPublisherBuilderwith auto-registration of schema services- Version-aware validation via
dataversionCloudEvent extension attribute - Format-agnostic deserialization enables validation for JSON, XML, and future formats
- 212 new tests across
Hermodr.Schema.XUnit(200) andHermodr.Publisher.EventSchema.XUnit(12) covering all middleware behaviors, version-aware lookup, and error handling
- Unified Diagnostics Infrastructure: New centralized telemetry and diagnostics system spanning all publisher and subscription components (#89)
HermodrDiagnostics— centralActivitySourceandMeterfor the entire pipelinePublisherTelemetry,ChannelTelemetry,SubscriptionTelemetry— per-component telemetry wrappersPipelineDiagnosticsMiddleware/PipelineDiagnosticsTelemetry— pipeline-level diagnostics middlewareTelemetryConstantspromoted fromHermodr.Publisher.OpenTelemetryto coreHermodr.Publisherfor cross-project reuse
- Per-Transport Instrumentation: Every transport channel now emits consistent OpenTelemetry traces and metrics
- New telemetry classes:
AuditTrailTelemetry,ServiceBusTransportTelemetry,DeadLetterTelemetry,MassTransitTransportTelemetry,OutboxTelemetry,RabbitMqTransportTelemetry,WebhookTransportTelemetry - All existing publish channels instrumented:
AuditTrailPublishChannel,ServiceBusPublishChannel,DeadLetterMessageReplayer,DeadLetterReplayProcessor,DeadLetterStorageHandler,MassTransitPublishChannel,OutboxPublishChannel,OutboxRelayProcessor,RabbitMqPublishChannel,WebhookPublishChannel
- New telemetry classes:
- New
OpenTelemetryBuilderExtensions— fluent extensions for configuring diagnostics on the event pipeline
- 15 new test files and significant extensions to existing tests covering the full telemetry surface:
ChannelMetricsTests,HermodrDiagnosticsTests,OpenTelemetryBuilderExtensionsTestsPipelineDiagnosticsMiddlewareTests,PipelineDiagnosticsTelemetryTestsPublisherMetricsTests,SubscriptionMetricsTestsTelemetryConstantsTests,TelemetryEdgeCasesTests,TelemetryMetricsTests,TelemetryTagsTests- Extended:
HermodrTelemetryTests,EndToEndTracePropagationTests - Removed obsolete
MetricsMiddlewareTests
(Detailed breakdown of every file and type changed in this release)
HermodrDiagnostics— new centralActivitySourceandMeterfor publisher diagnosticsPublisherTelemetry— new publisher-level telemetry wrapperChannelTelemetry— new channel-level telemetry wrapperTelemetryConstants— moved fromHermodr.Publisher.OpenTelemetryto core; defines activity source names, meter names, and tag keysEventPublisher— refactored to emit diagnostics throughHermodrDiagnosticsEventPublishChannel— refactored to emit channel-level traces and metrics
SubscriptionTelemetry— new subscription-level telemetry wrapperEventDispatcher— refactored to emit dispatch traces and metrics throughSubscriptionTelemetry
OpenTelemetryBuilderExtensions— new fluent extensions for wiring diagnosticsPipelineDiagnosticsMiddleware/PipelineDiagnosticsTelemetry— new middleware for pipeline-level diagnosticsHermodrTelemetry— refactored to delegate to core diagnosticsTelemetryMetrics— refactored to use core meterMetricsOptions— modified to align with new diagnosticsOpenTelemetryPublishMiddleware,OpenTelemetrySubscriptionMiddleware— refactored for new diagnostics pipelineTelemetryConstants— removed (moved to coreHermodr.Publisher)
AuditTrailTelemetry— new telemetry classAuditTrailPublishChannel— instrumented withAuditTrailTelemetry
ServiceBusTransportTelemetry— new telemetry classServiceBusPublishChannel— instrumented withServiceBusTransportTelemetry
DeadLetterTelemetry— new telemetry classDeadLetterMessageReplayer— instrumented withDeadLetterTelemetryDeadLetterReplayProcessor— instrumented withDeadLetterTelemetryDeadLetterStorageHandler— refactored to useDeadLetterTelemetry
MassTransitTransportTelemetry— new telemetry classMassTransitPublishChannel— instrumented withMassTransitTransportTelemetry
OutboxTelemetry— new telemetry classOutboxPublishChannel— refactored to useOutboxTelemetryOutboxRelayProcessor— refactored to useOutboxTelemetry
RabbitMqTransportTelemetry— new telemetry classRabbitMqPublishChannel— instrumented withRabbitMqTransportTelemetry
WebhookTransportTelemetry— new telemetry classWebhookPublishChannel— instrumented withWebhookTransportTelemetry
ChannelMetricsTests— channel-level metrics validationHermodrDiagnosticsTests— diagnostics source and meter testsHermodrTelemetryTests— extended telemetry coverageOpenTelemetryBuilderExtensionsTests— builder extension validationPipelineDiagnosticsMiddlewareTests— middleware behavior testsPipelineDiagnosticsTelemetryTests— pipeline telemetry validationPublisherMetricsTests— publisher-level metrics testsSubscriptionMetricsTests— subscription-level metrics testsTelemetryConstantsTests— constant and tag key validationTelemetryEdgeCasesTests— edge case coverage for telemetryTelemetryMetricsTests— metrics recording validationTelemetryTagsTests— tag propagation testsEndToEndTracePropagationTests— extended to include new diagnostics pathsMetricsMiddlewareTests— removed (superseded by new diagnostics)- AssemblyInfo and project file updates
Full Changelog: https://github.com/deveel/hermodr/compare/v1.2.5...v1.2.6
- Audit Trail Subsystem: Five new packages providing an append-only event audit trail with multiple storage backends and publisher integration (#82)
Hermodr.AuditTrail— core interfaces and types for writing, reading, and querying audit trail entriesHermodr.AuditTrail.InMemory— in-memory audit trail backend for testing and lightweight scenariosHermodr.AuditTrail.EntityFramework— EF Core backend for persisting audit trail entries to relational databasesHermodr.AuditTrail.NDJson— file-based backend using newline-delimited JSON with automatic file rolling, retention policies, and a pluggable filesystem abstractionHermodr.Publisher.AuditTrail— publisher integration channel that transparently records events to any configured audit trail backend
- 202 unit and integration tests across all five packages
- NDJson backend: 54 tests covering append/read, file rolling, retention, filtering, and concurrent I/O
- EF Core backend: SQLite integration tests for the full entry lifecycle
- Publisher channel: tests for recording, bypass, and typed/untyped routing
- New NDJson audit trail sample with REST query endpoints
- Comprehensive package reference in
docs/packages.md - README and ROADMAP updated with compliance and audit trail features
(Detailed breakdown of every file and type added in this release)
IAuditTrailWriter,IAuditTrailReader<TEntry>,IAuditTrailEntryinterfacesAuditTrailEntry— default implementation withFromCloudEvent()factoryAuditTrailBuilder— fluent DI registration builderAuditTrailStreamQuery— filter criteria (type, source, time range, attributes)AuditTrailPageQueryExtensions— 7 LINQ-style filter methods for paged queries
InMemoryAuditTrail— concurrent in-memory storage (writer + reader)InMemorySharedBag<TEntry>— thread-safe shared entry storeUseInMemory()/AddInMemoryAuditTrail()/AddAuditTrailQuerying()extensions
AuditTrailDbContext— EF Core DbContext with audit trail entity setsDbAuditTrailEntry/DbAuditTrailAttribute— EF entities with convertersEntityAuditTrailRepository— filtered streaming viaIQueryableEntityAuditTrail— EF Core writer + reader implementationUseEntityFramework()/AddEntityFrameworkAuditTrail()extensions
NdJsonAuditTrail— NDJSON file storage (writer + reader + IDisposable)- Auto file rolling by size (
MaxFileSizeBytes, default 10MB) or time interval (RollInterval) - Retention cleanup (
MaxFileCount, default 30 files) - Pluggable
IFileSystem(backed bySystem.IO.Abstractions) - Async streaming reads with concurrent writer support
- Auto file rolling by size (
NdJsonAuditTrailOptions— configurable directory, file naming, buffer sizeUseNDJson()/AddNDJsonAuditTrail()/AddNDJsonAuditTrailQuerying()extensions
AuditTrailPublishChannel/AuditTrailPublishChannel<TEvent>— records published events to audit trailBypassAuditTrailOptions— prevents infinite loops during replay/relay- 4 overloads of
AddAuditTrail()onEventPublisherBuilder
- Hermodr.AuditTrail.XUnit: 44 tests (builder, entries, page queries, stream queries, edge cases)
- Hermodr.AuditTrail.InMemory.XUnit: 43 tests (integration, shared bag, edge cases, DI registration)
- Hermodr.AuditTrail.EntityFramework.XUnit: 32 tests (EF entities, repository, SQLite integration)
- Hermodr.AuditTrail.NDJson.XUnit: 54 tests (append/read, rolling, retention, pluggable filesystem, cancellation, concurrent I/O)
- Hermodr.Publisher.AuditTrail.XUnit: 29 tests (channels, typed routing, builder, bypass scenarios)
samples/audit-trail/— EF Core with SQLite, order processing scenario, 6 REST endpointssamples/audit-trail-ndjson/— NDJson with file rolling, order processing scenario, 4 REST endpoints
- New:
docs/samples/audit-trail-ndjson.md - Updated:
docs/packages.md,docs/SUMMARY.md,README.md,ROADMAP.md
Full Changelog: https://github.com/deveel/hermodr/compare/v1.2.4...v1.2.5
- Project Rename: The project has been renamed from
Deveel.Eventsto Hermodr, giving it a new identity disconnected from the Deveel brand (#80).- All package names changed from
Deveel.Events.*toHermodr.* - All namespaces reorganized to match the new naming
- Solution file renamed from
Deveel.Events.slntoHermodr.sln - Migration path: update package references and
usingdirectives accordingly
- All package names changed from
- OpenTelemetry Support: New
Hermodr.Publisher.OpenTelemetrypackage providing distributed tracing, metrics collection, and W3C trace context propagation via CloudEvents extensions (#81)OpenTelemetryPublishMiddleware— injects trace context into outgoing CloudEventsOpenTelemetrySubscriptionMiddleware— restores parent trace context on incoming eventsMetricsMiddleware— collects publishing metrics (count, duration, errors) per event type- Full end-to-end trace correlation across service boundaries
- Re-export of packages: All existing
Deveel.Events.*packages are now published under theHermodr.*brand
- Comprehensive unit and integration tests for OpenTelemetry instrumentation:
HermodrTelemetryTests,MetricsMiddlewareTests,OpenTelemetryPublishMiddlewareTestsOpenTelemetrySubscriptionMiddlewareTests,OpenTelemetryBuilderExtensionsTests- End-to-end trace propagation tests
- All tests updated for namespace compliance after the rename
- New OpenTelemetry instrumentation guide (
docs/publishers/opentelemetry.md) - New sample project:
OrderService.OpenTelemetrydemonstrating distributed tracing setup - All docs updated to reflect the Hermodr rename and new package names
Full Changelog: https://github.com/deveel/hermodr/compare/v1.2.3...v1.2.4
- Delivery Log: New packages
Hermodr.Publisher.DeliveryLogandHermodr.Publisher.DeliveryLog.EntityFramework— middleware, in-memory, NDJSON file, and EF Core backends for recording event delivery attempts (#79) - Scheduled Delivery: Support for scheduled event delivery in outbox pattern (#77)
- Unit tests for dead-letter message handling and outbox message management
- Replaced delay-based assertions with task completions and polling
- README comparison of Hermodr and other .NET messaging frameworks
- DDD lifecycle management, Deveel.Repository, and test coverage tooling references
Full Changelog: https://github.com/deveel/hermodr/compare/v1.2.2...v1.2.3
- Dead Letter & Replay: New packages
Hermodr.Publisher.DeadLetterandHermodr.Publisher.DeadLetter.EntityFramework— capture failed messages and replay them through configurable pipelines (#76) - Outbox EF Core: Entity Framework Core support for the outbox pattern
- Dead letter concepts, configuration, and replay workflows
- Outbox integration with EF Core
Full Changelog: https://github.com/deveel/hermodr/compare/v1.2.1...v1.2.2
- Transactional Outbox Pattern: New
Hermodr.Publisher.Outboxpackage (#65)- Out-of-process relay with
OutboxRelayService - EF Core storage via
Hermodr.Publisher.Outbox.EntityFramework - Configurable relay intervals, batch sizes, and retry policies
- Out-of-process relay with
- Integration tests for SQLite and MySQL outbox repositories
- Outbox pattern concepts, configuration, and relay setup
- Framework integration guides for MediatR, Wolverine, and Brighter
Full Changelog: https://github.com/deveel/hermodr/compare/v1.2.0...v1.2.1
- Azure Service Bus publisher with connection factory abstraction
- RabbitMQ publisher with enhanced message factory
- Dead letter error handler for publish failures
- Package consolidation and dependency updates
- First-class documentation site with MkDocs
- Quick-start guides for all publishers
- Versioning strategy document
Full Changelog: https://github.com/deveel/hermodr/compare/v1.1.0...v1.2.0
- Subscriptions & Routing: New
Hermodr.Subscriptionspackage- Event filtering with expression-based filters
- Publisher-side routing via
IRoutingEventSubscription - JSON event data deserialization
- Webhook publisher with HMAC signature support
- MassTransit publish channel
- Subscription filter evaluation and routing tests
- Webhook signature provider tests
Full Changelog: https://github.com/deveel/hermodr/compare/v1.0.0...v1.1.0
- Core
Hermodr.Publisherlibrary with:- CloudEvents-compliant event publishing pipeline
- Named channel routing and middleware pipeline
- JSON/XML serialization
- Synchronous and scheduled publishing
Hermodr.Annotationsfor event metadata via attributesHermodr.Schemafor event schema definition, validation, and export (JSON, YAML, AsyncAPI)Hermodr.Schema.AsyncApi— AsyncAPI 2.x document generationHermodr.Schema.Yaml— YAML schema serializationHermodr.TestPublisher— in-memory test channel for unit testingHermodr.Publisher.RabbitMq— AMQP 0-9-1 publisherHermodr.Publisher.Webhook— HTTP webhook publisher with HMAC signingHermodr.Publisher.MassTransit— MassTransit transport integrationHermodr.Publisher.AzureServiceBus— Azure Service Bus integrationHermodr.Subscriptions— event filtering and routingHermodr.Publisher.DeadLetter— dead-letter error handlingHermodr.Publisher.DeliveryLog— delivery attempt logging
- Full unit and integration test suite across all packages
- Comprehensive documentation site with MkDocs material
- Quick-start guide, concepts, samples, and package reference