Releases: mizrael/OpenSleigh
v3.1.0
Release Date: January 10, 2026
NEW FEATURES
✨ Multiple Saga Starters Support (#101)
- Sagas can now be initiated by multiple message types
- Optimistic concurrency prevents duplicate saga creation
- Full E2E test coverage for sequential/parallel scenarios
IMPROVEMENTS
🚀 RabbitMessageSubscriber: Proper cancellation token propagation
- Enables graceful shutdown of long-running handlers
CONTRIBUTORS
@arootbeer - Multiple saga starters implementation
@mizrael - Bug fixes and testing
v3.0.7
🎉 Major Features
Multiple Saga Starters (#101)
- BREAKING CHANGE: Sagas can now be started by multiple message types instead of just one
- SagaDescriptor.InitiatorType (Type) → SagaDescriptor.InitiatorTypes (ISet)
- A saga can implement multiple IStartedBy interfaces
- Each starter message type can independently create saga instances
- Added OptimisticLockException to handle concurrent saga creation when multiple starter messages arrive simultaneously
- Enhanced retry logic in RabbitMessageSubscriber and InMemorySubscriber to handle optimistic concurrency conflicts
- Improved saga instance lifecycle management for parallel message processing
✅ Testing
E2E Test Coverage
- Added comprehensive E2E tests for optimistic concurrency scenarios
- Added E2E tests for in-memory transport and persistence layers
- New test scenarios:
- ParallelMultiStartSagaScenario - concurrent saga creation from different starter messages
- SequentialMultiStartSagaScenario - sequential saga creation from different starter messages
- Tests for SQL Server, PostgreSQL, RabbitMQ, and in-memory implementations
- Created reusable E2ETestsBase class for test infrastructure
🏗️ Infrastructure & DevOps
CI/CD Improvements
- Migrated from Coveralls to CodeCov for code coverage reporting
- Integrated SonarCloud for code quality and security analysis
- Updated CircleCI configuration with improved test execution
- Enhanced codecov.yaml configuration
Dependencies
- Updated Kafka Docker image to latest version
- Various minor dependency updates
📚 Documentation
- Added CLAUDE.md: Comprehensive architecture and development guide covering:
- Repository overview and build commands
- Three-layer architecture with detailed component descriptions
- Message lifecycle flow diagrams
- Critical patterns (idempotency, pessimistic locking, correlation)
- Debugging guidance and test organization
- Added .github/copilot-instructions.md for GitHub Copilot integration
- Updated README.md with latest information
🔧 Refactoring & Code Quality
- Extensive refactoring and code cleanup across transport and persistence layers
- Fixed message type resolution logic in TypeExtensions
- Removed unnecessary dynamic casts
- Improved RabbitMQ infrastructure cleanup
- Renamed PostgreSqlOutboxRepository → PostgreSQLOutboxRepository (consistent casing)
- Enhanced SQL saga state repository with better concurrency handling
🐛 Bug Fixes
- Fixed test execution issues across integration test suites
- Fixed RabbitMQ infrastructure cleanup in test environments
- Fixed configuration issues in CI pipeline
- Various minor fixes for test stability
Migration Guide (v3.0.6 → v3.0.7)
Breaking Change: If you have custom code that accesses SagaDescriptor.InitiatorType:
// Before (v3.0.6)
Type initiatorType = descriptor.InitiatorType;
// After (v3.0.7)
ISet initiatorTypes = descriptor.InitiatorTypes;
// or to get the first one:
Type firstInitiatorType = descriptor.InitiatorTypes.First();
New Feature: To create a saga with multiple starters:
public class MySaga : Saga,
IStartedBy, // Can start the saga
IStartedBy, // Can also start the saga
IHandleMessage // Regular handler
{
// Both FirstStarterMessage and SecondStarterMessage can create new saga instances
// If concurrent starter messages arrive, OptimisticLockException will be thrown
// and the transport layer will retry automatically
}
Contributors: David Guida (@mizrael), Matt Mills (@arootbeer)
v3.0.6
What's Changed
- Improved idempotency support by @mizrael in #96
- Add net8.0 support by @iseesharp83 in #97
New Contributors
- @iseesharp83 made their first contribution in #97
Full Changelog: v3.0.4...v3.0.6
v3.0.5
v3.0.4
v3.0.2-alpha
Full Changelog: v3.0.1-alpha...v3.0.2-alpha
OpenSleigh v3.0.1-alpha
What's Changed
Full Changelog: v3.0.0-alpha...v3.0.1-alpha
OpenSleigh v3.0.0-alpha
What's Changed
Full Changelog: v2.0.7...v3.0.0-alpha
OpenSleigh v2.0.7
What's Changed
Full Changelog: v2.0.6...v2.0.7
Samples and documentation are available on https://www.opensleigh.net/
You can download this release from Nuget:
https://www.nuget.org/packages/OpenSleigh.Core/
https://www.nuget.org/packages/OpenSleigh.Abstractions/
https://www.nuget.org/packages/OpenSleigh.Persistence.InMemory/
https://www.nuget.org/packages/OpenSleigh.Persistence.Mongo/
https://www.nuget.org/packages/OpenSleigh.Persistence.SQLServer/
https://www.nuget.org/packages/OpenSleigh.Persistence.PostgreSQL/
https://www.nuget.org/packages/OpenSleigh.Transport.AzureServiceBus/
https://www.nuget.org/packages/OpenSleigh.Transport.RabbitMQ/
https://www.nuget.org/packages/OpenSleigh.Persistence.Cosmos.Mongo/
https://www.nuget.org/packages/OpenSleigh.Persistence.Cosmos.SQL/
https://www.nuget.org/packages/OpenSleigh.Transport.Kafka/
OpenSleigh v.2.0.6
What's Changed
- refactored Outbox by @mizrael in #77
- refactored Saga Runners by @mizrael in #80
- Abstractions cleanup by @mizrael in #82
Full Changelog: v.2.0.5...v2.0.6
Samples and documentation are available on https://www.opensleigh.net/
You can download this release from Nuget:
https://www.nuget.org/packages/OpenSleigh.Core/
https://www.nuget.org/packages/OpenSleigh.Abstractions/
https://www.nuget.org/packages/OpenSleigh.Persistence.InMemory/
https://www.nuget.org/packages/OpenSleigh.Persistence.Mongo/
https://www.nuget.org/packages/OpenSleigh.Persistence.SQLServer/
https://www.nuget.org/packages/OpenSleigh.Persistence.PostgreSQL/
https://www.nuget.org/packages/OpenSleigh.Transport.AzureServiceBus/
https://www.nuget.org/packages/OpenSleigh.Transport.RabbitMQ/
https://www.nuget.org/packages/OpenSleigh.Persistence.Cosmos.Mongo/
https://www.nuget.org/packages/OpenSleigh.Persistence.Cosmos.SQL/
https://www.nuget.org/packages/OpenSleigh.Transport.Kafka/