Skip to content

Conversation

@alexeyzimarev
Copy link
Contributor

@alexeyzimarev alexeyzimarev commented Oct 1, 2025

Also add AOT compatibility attributes

Summary by Bito

This PR introduces extensive AOT compatibility improvements across multiple components, including refining the type mapping source generator by removing unused attributes and updating property definitions. The changes replace 'required' modifiers with null-forgiving initializations, add dynamic code attributes, and update project files with IsAotCompatible properties to ensure proper operation in AOT environments while reducing reflection usage.

@bito-code-review
Copy link
Contributor

bito-code-review bot commented Oct 1, 2025

Code Review Agent Run #88a79e

Actionable Suggestions - 0
Additional Suggestions - 20
  • src/Core/src/Eventuous.Diagnostics/Metrics/Measure.cs - 1
    • Inaccurate trimming justification · Line 16-16
      The justification for the UnconditionalSuppressMessage attribute is misleading. While `MeasureContext` itself is a simple record struct, it contains an `object Context` field that could reference any type, making the trimming suppression potentially unsafe. The current justification claims "MeasureContext is not referencing anything" which is inaccurate since the `Context` field can hold arbitrary objects. Update the justification to accurately reflect that the diagnostic system handles the context object dynamically during trimming.
      Code suggestion
       @@ -16,1 +16,1 @@
      -        Justification = "MeasureContext is not referencing anything."
      +        Justification = "MeasureContext may hold arbitrary object; diagnostic system handles context dynamically."
  • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStore.cs - 1
    • Redundant AOT attributes · Line 35-35
      The AOT compatibility attributes ([RequiresDynamicCode] and [RequiresUnreferencedCode]) have been added to the AggregateStore implementation but are already present on the corresponding interface methods in IAggregateStore. This creates redundant attribute declarations. Since the interface already has these attributes, they should be removed from the implementation to avoid duplication and maintain consistency.
      Code suggestion
       @@ -34,3 +34,1 @@
            [Obsolete("Use IEventWriter.StoreAggregate<TAggregate, TState> instead.")]
      -    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      -    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
       @@ -42,3 +42,1 @@
            [Obsolete("Use IEventReader.LoadAggregate<TAggregate, TState> instead.")]
      -    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      -    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
       @@ -49,3 +49,1 @@
            [Obsolete("Use IEventReader.LoadAggregate<TAggregate, TState> instead.")]
      -    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      -    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
  • src/EventStore/src/Eventuous.EventStore/Producers/EventStoreProducer.cs - 2
    • Redundant attributes · Line 54-54
      The [RequiresDynamicCode] and [RequiresUnreferencedCode] attributes are redundantly added to the `ProduceMessages` method override. These attributes are already applied to the abstract base method in `BaseProducer` and are inherited by the override. Adding them again creates unnecessary duplication and potential maintenance issues. Remove these redundant attributes.
      Code suggestion
       @@ -54,3 +54,1 @@
      -    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      -    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
      -      protected override async Task ProduceMessages(
      +      protected override async Task ProduceMessages(
    • Inconsistent messages · Line 92-92
      The `CreateMessage` method uses hardcoded attribute messages that are inconsistent with the standard pattern used throughout the codebase. All other methods use `AttrConstants.DynamicSerializationMessage` for consistency. Update these attributes to use the standard constant for maintainability and consistency.
      Code suggestion
       @@ -92,3 +92,3 @@
      -    [RequiresUnreferencedCode("Calls Eventuous.IEventSerializer.SerializeEvent(Object)")]
      -    [RequiresDynamicCode("Calls Eventuous.IEventSerializer.SerializeEvent(Object)")]
      -    EventData CreateMessage(ProducedMessage message, bool setMessageType) {
      +    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
      +    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      +    EventData CreateMessage(ProducedMessage message, bool setMessageType) {
  • src/Relational/src/Eventuous.Sql.Base/SqlEventStoreBase.cs - 3
    • Inconsistent AOT attribute message · Line 112-112
      Inconsistent AOT attribute usage: `ReadInternal` uses specific call-site messages instead of the standard `Constants.DynamicSerializationMessage` used elsewhere. This creates inconsistency in the codebase. Standardize on using the shared constant for all serialization-related warnings to maintain consistency and make future maintenance easier.
      Code suggestion
       @@ -112,2 +112,2 @@
      -    [RequiresDynamicCode("Calls Eventuous.Sql.Base.SqlEventStoreBase<TConnection, TTransaction>.ToStreamEvent(PersistedEvent)")]
      -    [RequiresUnreferencedCode("Calls Eventuous.Sql.Base.SqlEventStoreBase<TConnection, TTransaction>.ToStreamEvent(PersistedEvent)")]
      +    [RequiresDynamicCode(Constants.DynamicSerializationMessage)]
      +    [RequiresUnreferencedCode(Constants.DynamicSerializationMessage)]
    • Inconsistent AOT attribute message · Line 130-130
      Inconsistent AOT attribute usage: `ToStreamEvent` uses specific call-site messages for both RequiresDynamicCode and RequiresUnreferencedCode attributes, deviating from the established pattern of using Constants.DynamicSerializationMessage. This creates inconsistency with other serialization methods in the same class.
      Code suggestion
       @@ -130,2 +130,2 @@
      -    [RequiresDynamicCode("Calls Eventuous.IEventSerializer.DeserializeEvent(ReadOnlySpan<Byte>, String, String)")]
      -    [RequiresUnreferencedCode("Calls Eventuous.IEventSerializer.DeserializeEvent(ReadOnlySpan<Byte>, String, String)")]
      +    [RequiresDynamicCode(Constants.DynamicSerializationMessage)]
      +    [RequiresUnreferencedCode(Constants.DynamicSerializationMessage)]
    • Inconsistent AOT attribute usage · Line 179-179
      Inconsistent AOT attribute ordering and message: The `Convert` local function has RequiresUnreferencedCode before RequiresDynamicCode, which is inconsistent with the ordering used in all other methods. Additionally, it uses a specific call-site message instead of the standard Constants.DynamicSerializationMessage.
      Code suggestion
       @@ -179,3 +179,3 @@
      -        [RequiresUnreferencedCode("Calls Eventuous.IEventSerializer.SerializeEvent(Object)")]
      -        [RequiresDynamicCode("Calls Eventuous.IEventSerializer.SerializeEvent(Object)")]
      -        NewPersistedEvent Convert(NewStreamEvent evt) {
      +        [RequiresDynamicCode(Constants.DynamicSerializationMessage)]
      +        [RequiresUnreferencedCode(Constants.DynamicSerializationMessage)]
      +        NewPersistedEvent Convert(NewStreamEvent evt) {
  • src/Core/src/Eventuous.Serialization/IEventSerializer.cs - 1
    • Inappropriate constant visibility · Line 15-15
      The constant strings for AOT warning messages are defined as `internal` within the interface, which is unconventional and creates accessibility inconsistencies. Since `DefaultEventSerializer` already references these constants via `IEventSerializer.SerializationUnreferencedCodeMessage`, the `internal` visibility is appropriate for cross-assembly usage. However, the messages are JSON-specific despite `IEventSerializer` being a generic serialization interface. Consider making the messages more generic by removing JSON-specific references to better align with the interface's generic nature.
      Code suggestion
       @@ -15,5 +15,5 @@
      -    internal const string SerializationUnreferencedCodeMessage =
      -        "JSON serialization and deserialization might require types that cannot be statically analyzed. Use DefaultStaticEventSerializer with System.Text.Json source generation for native AOT applications.";
      -    
      -    internal const string SerializationRequiresDynamicCodeMessage =
      -        "JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use DefaultStaticEventSerializer with System.Text.Json source generation for native AOT applications.";
      +    internal const string SerializationUnreferencedCodeMessage =
      +        "Serialization and deserialization might require types that cannot be statically analyzed. Use DefaultStaticEventSerializer with source generation for native AOT applications.";
      +
      +    internal const string SerializationRequiresDynamicCodeMessage =
      +        "Serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use DefaultStaticEventSerializer with source generation for native AOT applications.";
  • src/Core/src/Eventuous.Subscriptions/Checkpoints/CheckpointCommitHandler.cs - 1
    • Trimming suppression justification · Line 81-81
      The IL2026 trimming warning suppression has insufficient justification. The current justification "Diagnostics only" doesn't explain why the `CommitEvent` record type is safe for trimming. The `Diagnostic.Write` call with `new CommitEvent(...)` likely triggers this warning because record types can have reflection-based serialization behavior. Update the justification to explicitly state that `CommitEvent` contains only primitive types (string, CommitPosition) and is used solely for diagnostic purposes without reflection-based serialization, or consider moving the suppression to the `CommitEvent` record declaration for more targeted scoping.
      Code suggestion
       @@ -81,1 +81,1 @@
      -[UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Diagnostics only")]
      +[UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Safe trimming: CommitEvent contains only primitives and is used for diagnostics without reflection")]
  • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Eventuous.Extensions.DependencyInjection.csproj - 1
    • Enable AOT compatibility · Line 4-4
      The addition of `true` is appropriate for this dependency injection extension project. The codebase already has comprehensive AOT annotations throughout (195 instances of `[RequiresDynamicCode]` and `[RequiresUnreferencedCode]` attributes across core libraries), and this extension primarily contains registration helpers and extension methods that don't use reflection or dynamic code generation. This change aligns with the broader AOT compatibility initiative seen across the Eventuous project, as evidenced by 18 other projects already having this property set. The removal of the commented-out Microsoft.Extensions.Hosting reference is also appropriate as it reduces potential AOT compatibility concerns.
      Code suggestion
       @@ -3,1 +3,2 @@
      -        <PackageReadmeFile>README.md</PackageReadmeFile>
      +        <PackageReadmeFile>README.md</PackageReadmeFile>
      +        <IsAotCompatible>true</IsAotCompatible>
  • src/Core/src/Eventuous.Diagnostics/Eventuous.Diagnostics.csproj - 1
    • AOT compatibility warning · Line 3-3
      The addition of `true` is appropriate for this project since `Eventuous.Shared` already has this setting. However, the codebase uses `Assembly.GetName()` in `EventuousDiagnostics` class which can trigger AOT trimming warnings (IL2026). To ensure full AOT compatibility, add an `UnconditionalSuppressMessage` attribute to the `Assembly.GetName()` usage in `EventuousDiagnostics.cs` to suppress the trimming warning, as the assembly name is only used for diagnostic purposes.
      Code suggestion
       @@ -10,2 +10,7 @@
      -     static readonly AssemblyName AssemblyName = typeof(EventuousDiagnostics).Assembly.GetName();
      -     static readonly Version?     Version      = AssemblyName.Version;
      +     [System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage(
      +         "Trimming",
      +         "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code",
      +         Justification = "Assembly.GetName() used for diagnostics only"
      +     )]
      +     static readonly AssemblyName AssemblyName = typeof(EventuousDiagnostics).Assembly.GetName();
      +     static readonly Version?     Version      = AssemblyName.Version;
  • src/Core/src/Eventuous.Persistence/EventStore/TieredEventReader.cs - 2
    • Add AOT compatibility attributes · Line 13-13
      The addition of [RequiresDynamicCode] and [RequiresUnreferencedCode] attributes to the ReadEvents method is appropriate for AOT compatibility, as this method likely uses reflection-based serialization when loading events from the underlying IEventReader implementations. These attributes correctly propagate AOT warnings to consumers of TieredEventReader, ensuring they are aware of potential compatibility issues with Native AOT compilation.
      Code suggestion
       @@ -15,0 +13,2 @@
      +    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      +    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
    • Add AOT compatibility attributes · Line 33-33
      The addition of [RequiresDynamicCode] and [RequiresUnreferencedCode] attributes to the ReadEventsBackwards method maintains consistency with the ReadEvents method and follows the same AOT compatibility pattern established throughout the Eventuous codebase. This ensures uniform AOT warning propagation across all event reading operations in the tiered store.
      Code suggestion
       @@ -35,0 +33,2 @@
      +    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      +    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
  • src/Core/src/Eventuous.Serialization/Eventuous.Serialization.csproj - 1
    • Conditional AOT compatibility · Line 4-4
      The `IsAotCompatible` property is being added unconditionally, which could cause issues if this project targets frameworks earlier than .NET 7.0. Based on the pattern used in other Eventuous projects and Microsoft's recommendations, this should be conditional. The property enables AOT compatibility analyzers and marks the library as safe for Native AOT compilation, but requires .NET 7+ APIs to function correctly. Update to use a conditional check similar to `Eventuous.Shared.csproj` and other Eventuous libraries.
      Code suggestion
       @@ -3,2 +3,2 @@
      -        <RootNamespace>Eventuous</RootNamespace>
      -        <IsAotCompatible>true</IsAotCompatible>
      +        <RootNamespace>Eventuous</RootNamespace>
      +        <IsAotCompatible Condition="'$(TargetFramework)' >= 'net7.0'">true</IsAotCompatible>
  • src/Core/src/Eventuous.Application/ThrowingCommandService.cs - 1
    • Semantic duplication · Line 13-13
      The [RequiresDynamicCode] and [RequiresUnreferencedCode] attributes are being redundantly added to the method implementation in `ThrowingCommandService.Handle`. These attributes are already declared on the interface method `ICommandService.Handle` and do not need to be repeated on the implementation. This creates semantic duplication and is unnecessary according to .NET AOT compatibility guidelines. Remove these attributes from the implementation since interface method attributes are inherited by implementations.
      Code suggestion
       @@ -12,4 +12,2 @@
      -    where TState : State<TState>, new() {
      -    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      -    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
      -    public async Task<Result<TState>> Handle<TCommand>(TCommand command, CancellationToken cancellationToken) where TCommand : class {
      +    where TState : State<TState>, new() {
      +    public async Task<Result<TState>> Handle<TCommand>(TCommand command, CancellationToken cancellationToken) where TCommand : class {
  • Directory.Packages.props - 1
    • Redundant package reference · Line 52-52
      The addition of `Microsoft.CodeAnalysis` 4.10.0 alongside `Microsoft.CodeAnalysis.CSharp` 4.10.0 creates package redundancy. `Microsoft.CodeAnalysis.CSharp` already transitively includes `Microsoft.CodeAnalysis.Common` which provides the core APIs needed by analyzers and source generators. This redundancy can lead to version conflicts and maintenance overhead. The existing `Microsoft.CodeAnalysis.CSharp` reference in the analyzers projects (`Eventuous.Shared.Analyzers.csproj`, `Eventuous.Subscriptions.Generators.csproj`) and test projects shows this pattern is already established. Remove the redundant `Microsoft.CodeAnalysis` package to maintain consistency with the existing codebase pattern.
      Code suggestion
       @@ -51,3 +51,2 @@
            <PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" />
      -    <PackageVersion Include="Microsoft.CodeAnalysis" Version="4.10.0" PrivateAssets="all" />
            <PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.10.0" PrivateAssets="all" />
  • src/RabbitMq/src/Eventuous.RabbitMq/Subscriptions/RabbitMqSubscription.cs - 1
    • AOT attributes inconsistency · Line 96-96
      The `RequiresUnreferencedCode` and `RequiresDynamicCode` attributes are correctly added to the `Subscribe` method as it indirectly uses event serialization through the base class `DeserializeData` method. However, there's a potential inconsistency: the constructors (lines 32-94) also accept and pass the `eventSerializer` parameter to the base class, which could benefit from the same attributes for AOT compatibility warnings. Consider adding these attributes to the constructors as well to maintain consistency across the entire public API surface that deals with dynamic serialization.
      Code suggestion
       @@ -32,6 +32,8 @@
            /// <param name="eventSerializer">Event serializer</param>
      +    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
      +    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
            public RabbitMqSubscription(
                    ConnectionFactory                     connectionFactory,
                    IOptions<RabbitMqSubscriptionOptions> options,
       @@ -48,6 +50,8 @@
            /// <param name="eventSerializer"></param>
      +    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
      +    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
            public RabbitMqSubscription(
                    ConnectionFactory           connectionFactory,
                    RabbitMqSubscriptionOptions options,
       @@ -81,6 +85,8 @@
            /// <param name="eventSerializer">Event serializer instance</param>
      +    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
      +    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
            public RabbitMqSubscription(
                    ConnectionFactory connectionFactory,
                    string            exchange,
  • src/Core/src/Eventuous.Subscriptions/IMessageSubscription.cs - 1
    • AOT attributes on interface · Line 17-17
      The AOT compatibility attributes `[RequiresUnreferencedCode]` and `[RequiresDynamicCode]` should not be applied to interface methods. These attributes are implementation-specific and should remain on concrete implementations like `EventSubscription.Subscribe()`. Adding them to the interface creates an asymmetry with `Unsubscribe()` which lacks these attributes, and forces all implementations to inherit these warnings regardless of their actual AOT compatibility. The attributes are already correctly applied to the base `EventSubscription` implementation at lines 57-58, so removing them from the interface maintains consistency while preserving AOT analysis for actual implementations.
      Code suggestion
       @@ -17,3 +17,1 @@
      -    [RequiresUnreferencedCode(AttrConstants.DynamicSerializationMessage)]
      -    [RequiresDynamicCode(AttrConstants.DynamicSerializationMessage)]
      -    ValueTask Subscribe(OnSubscribed onSubscribed, OnDropped onDropped, CancellationToken cancellationToken);
      +    ValueTask Subscribe(OnSubscribed onSubscribed, OnDropped onDropped, CancellationToken cancellationToken);
  • src/Core/test/Eventuous.Tests/Eventuous.Tests.csproj - 1
    • Redundant package references · Line 14-14
      The Microsoft.CodeAnalysis and Microsoft.CodeAnalysis.CSharp package references are redundant in this test project. Both `Eventuous.Shared.Generators` and `Eventuous.Shared.Analyzers` already include these dependencies with the correct `PrivateAssets="all"` configuration. Adding them here creates unnecessary package duplication and potential version conflicts. The test project will receive these dependencies transitively through the analyzer references, which is the standard pattern for Roslyn analyzers and source generators.
      Code suggestion
       @@ -14,4 +14,2 @@
      -        <PackageReference Include="Microsoft.CodeAnalysis" PrivateAssets="all" />
      -        <PackageReference Include="Microsoft.CodeAnalysis.CSharp" PrivateAssets="all" />
      -      </ItemGroup>
      -      <ItemGroup>
      +      </ItemGroup>
      +      <ItemGroup>
  • src/Core/test/Eventuous.Tests/AggregateWithId/OperateOnAggregateWithId.cs - 1
    • Missing namespace import · Line 27-27
      The `[EventType("TestEvent")]` attribute addition is correct and follows Eventuous framework conventions, but requires the `Eventuous` namespace import to resolve properly. This change prevents the EV001 analyzer warning for using `TestEvent` as a domain event without proper type mapping. The `TestEvent` record is used as a domain event by `TestAggregate.Process()` -> `Apply(new TestEvent())` and verified by `OperateOnAggregateWithId.should_emit_event()` -> `Emitted(new TestEvent())`.
      Code suggestion
       @@ -1,3 +1,4 @@
        using Eventuous.Testing;
      +
      +using Eventuous;
       
Review Details
  • Files reviewed - 109 · Commit Range: 0fc8cef..53cc34a
    • Directory.Packages.props
    • Eventuous.slnx
    • samples/esdb/Bookings.Domain/Bookings.Domain.csproj
    • samples/esdb/Bookings.Domain/DomainModule.cs
    • samples/esdb/Bookings.Payments/Bookings.Payments.csproj
    • samples/esdb/Bookings.Payments/Program.cs
    • samples/esdb/Bookings/Bookings.csproj
    • samples/esdb/Bookings/Program.cs
    • src/Core/Eventuous.Core.slnf
    • src/Core/src/Eventuous.Application/AggregateService/CommandHandlerBuilder.cs
    • src/Core/src/Eventuous.Application/AggregateService/CommandHandlersMap.cs
    • src/Core/src/Eventuous.Application/AggregateService/CommandService.cs
    • src/Core/src/Eventuous.Application/Diagnostics/TracedCommandService.cs
    • src/Core/src/Eventuous.Application/Eventuous.Application.csproj
    • src/Core/src/Eventuous.Application/FunctionalService/CommandService.cs
    • src/Core/src/Eventuous.Application/FunctionalService/HandlersMap.cs
    • src/Core/src/Eventuous.Application/ICommandService.cs
    • src/Core/src/Eventuous.Application/Persistence/WriterExtensions.cs
    • src/Core/src/Eventuous.Application/ThrowingCommandService.cs
    • src/Core/src/Eventuous.Diagnostics/Eventuous.Diagnostics.csproj
    • src/Core/src/Eventuous.Diagnostics/Metrics/Measure.cs
    • src/Core/src/Eventuous.Domain/Eventuous.Domain.csproj
    • src/Core/src/Eventuous.Persistence/AggregateFactory.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregatePersistenceExtensions.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStore.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStoreExtensions.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStoreWithArchive.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/IAggregateStore.cs
    • src/Core/src/Eventuous.Persistence/Constants.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventReader.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventStore.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventWriter.cs
    • src/Core/src/Eventuous.Persistence/EventStore/IEventReader.cs
    • src/Core/src/Eventuous.Persistence/EventStore/IEventWriter.cs
    • src/Core/src/Eventuous.Persistence/EventStore/StoreFunctions.cs
    • src/Core/src/Eventuous.Persistence/EventStore/TieredEventReader.cs
    • src/Core/src/Eventuous.Persistence/EventStore/TieredEventStore.cs
    • src/Core/src/Eventuous.Persistence/Eventuous.Persistence.csproj
    • src/Core/src/Eventuous.Persistence/StateStore/IStateStore.cs
    • src/Core/src/Eventuous.Persistence/StateStore/StateStore.cs
    • src/Core/src/Eventuous.Persistence/StateStore/StateStoreFunctions.cs
    • src/Core/src/Eventuous.Producers/BaseProducer.cs
    • src/Core/src/Eventuous.Producers/Constants.cs
    • src/Core/src/Eventuous.Producers/Eventuous.Producers.csproj
    • src/Core/src/Eventuous.Producers/IProducer.cs
    • src/Core/src/Eventuous.Producers/ProducerExtensions.cs
    • src/Core/src/Eventuous.Producers/RegistrationExtensions.cs
    • src/Core/src/Eventuous.Serialization/DefaultEventSerializer.cs
    • src/Core/src/Eventuous.Serialization/DefaultMetadataSerializer.cs
    • src/Core/src/Eventuous.Serialization/DefaultStaticEventSerializer.cs
    • src/Core/src/Eventuous.Serialization/Eventuous.Serialization.csproj
    • src/Core/src/Eventuous.Serialization/IEventSerializer.cs
    • src/Core/src/Eventuous.Shared.Analyzers/EventUsageAnalyzer.cs
    • src/Core/src/Eventuous.Shared.Analyzers/Eventuous.Shared.Analyzers.csproj
    • src/Core/src/Eventuous.Shared.Generators/Eventuous.Shared.Generators.csproj
    • src/Core/src/Eventuous.Shared.Generators/TypeMappingsGenerator.cs
    • src/Core/src/Eventuous.Shared/Eventuous.Shared.csproj
    • src/Core/src/Eventuous.Shared/TypeMap/TypeMapper.cs
    • src/Core/src/Eventuous.Subscriptions.Generators/ConsumeContextConverterGenerator.cs
    • src/Core/src/Eventuous.Subscriptions.Generators/Eventuous.Subscriptions.Generators.csproj
    • src/Core/src/Eventuous.Subscriptions/Checkpoints/CheckpointCommitHandler.cs
    • src/Core/src/Eventuous.Subscriptions/Constants.cs
    • src/Core/src/Eventuous.Subscriptions/Consumers/MessageConsumeContextConverter.cs
    • src/Core/src/Eventuous.Subscriptions/EventSubscription.cs
    • src/Core/src/Eventuous.Subscriptions/EventSubscriptionWithCheckpoint.cs
    • src/Core/src/Eventuous.Subscriptions/Eventuous.Subscriptions.csproj
    • src/Core/src/Eventuous.Subscriptions/IMessageSubscription.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/NamedRegistrations.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionBuilder.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionBuilderExtensions.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionRegistrationExtensions.cs
    • src/Core/src/Eventuous.Subscriptions/SubscriptionHostedService.cs
    • src/Core/test/Eventuous.Tests.Application/Eventuous.Tests.Application.csproj
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Analyzed.cs
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Analyzer_Ev001_Tests.cs
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Eventuous.Tests.Shared.Analyzers.csproj
    • src/Core/test/Eventuous.Tests/AggregateWithId/OperateOnAggregateWithId.cs
    • src/Core/test/Eventuous.Tests/Eventuous.Tests.csproj
    • src/Core/test/Eventuous.Tests/ForgotToSetId.cs
    • src/Core/test/Eventuous.Tests/TypeRegistrationTests.cs
    • src/Diagnostics/src/Eventuous.Diagnostics.Logging/Eventuous.Diagnostics.Logging.csproj
    • src/Diagnostics/src/Eventuous.Diagnostics.OpenTelemetry/Eventuous.Diagnostics.OpenTelemetry.csproj
    • src/Diagnostics/src/Eventuous.Diagnostics.OpenTelemetry/MeterProviderBuilderExtensions.cs
    • src/EventStore/Eventuous.EventStore.slnf
    • src/EventStore/src/Eventuous.EventStore/Constants.cs
    • src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs
    • src/EventStore/src/Eventuous.EventStore/Eventuous.EventStore.csproj
    • src/EventStore/src/Eventuous.EventStore/Producers/EventStoreProducer.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/AllStreamSubscription.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/PersistentSubscriptionBase.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/StreamSubscription.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Eventuous.Extensions.DependencyInjection.csproj
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/AggregateFactory.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/AggregateStore.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/Services.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/StoreWithArchive.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/Stores.cs
    • src/Extensions/src/Eventuous.Extensions.Logging/Eventuous.Extensions.Logging.csproj
    • src/Extensions/src/Eventuous.Subscriptions.Polly/Eventuous.Subscriptions.Polly.csproj
    • src/Extensions/src/Eventuous.Subscriptions.Polly/SubscriptionBuilderExtensions.cs
    • src/Mongo/src/Eventuous.Projections.MongoDB/Eventuous.Projections.MongoDB.csproj
    • src/RabbitMq/src/Eventuous.RabbitMq/Constants.cs
    • src/RabbitMq/src/Eventuous.RabbitMq/Eventuous.RabbitMq.csproj
    • src/RabbitMq/src/Eventuous.RabbitMq/Producers/RabbitMqProducer.cs
    • src/RabbitMq/src/Eventuous.RabbitMq/Subscriptions/RabbitMqSubscription.cs
    • src/Relational/src/Eventuous.Sql.Base/Constants.cs
    • src/Relational/src/Eventuous.Sql.Base/Eventuous.Sql.Base.csproj
    • src/Relational/src/Eventuous.Sql.Base/SqlEventStoreBase.cs
    • src/Relational/src/Eventuous.Sql.Base/Subscriptions/SqlSubscriptionBase.cs
  • Files skipped - 2
    • src/Core/src/Eventuous.Shared.Analyzers/AnalyzerReleases.Shipped.md - Reason: Filter setting
    • src/Core/src/Eventuous.Shared.Analyzers/AnalyzerReleases.Unshipped.md - Reason: Filter setting
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Default Agent You can customize the agent settings here or contact your Bito workspace admin at alexey@ubiquitous.no.

Documentation & Help

AI Code Review powered by Bito Logo

@github-actions
Copy link

github-actions bot commented Oct 1, 2025

Test Results

 55 files   55 suites   2h 36m 28s ⏱️
232 tests 219 ✅ 0 💤 13 ❌
776 runs  760 ✅ 0 💤 16 ❌

For more details on these failures, see this check.

Results for commit 322429f.

♻️ This comment has been updated with latest results.

@bito-code-review
Copy link
Contributor

bito-code-review bot commented Oct 1, 2025

Changelist by Bito

This pull request implements the following key changes.

Key Change Files Impacted
Feature Improvement - Dynamic Code and AOT Compatibility Enhancements

StreamSubscription.cs - Inserted [RequiresDynamicCode] and [RequiresUnreferencedCode] attributes in subscription methods to enforce AOT safe dynamic serialization.

AggregateFactory.cs - Enhanced the AddAggregate method by adding dynamic attribute annotations to ensure only public constructors are accessed in AOT scenarios.

AggregateStore.cs - Updated AddAggregateStore overloads with dynamic code attributes for improved AOT compliance.

Services.cs - Modified AddCommandService to include dynamic attribute constraints, promoting safer dependency injection in trimmed builds.

StoreWithArchive.cs - Refactored AddEventStore method to include dynamic attribute annotations, strengthening AOT compatibility.

Stores.cs - Applied dynamic code attributes to AddEventReader, AddEventWriter, AddEventReaderWriter, and AddEventStore methods to support safe trimming.

SubscriptionBuilderExtensions.cs - Augmented the AddEventHandlerWithRetries extensions with dynamic attribute markers to ensure robust handler registration.

Constants.cs - Introduced new dynamic serialization messaging constants to aid AOT safe operation.

RabbitMqProducer.cs - Added dynamic code attributes to both ProduceMessages and Publish methods, securing message production under AOT constraints.

RabbitMqSubscription.cs - Annotated subscription methods including Subscribe, HandleReceived, and CreateContext with dynamic attributes for improved runtime safety.

Constants.cs - Added AOT-related constants to standardize dynamic serialization messaging across SQL components.

SqlEventStoreBase.cs - Integrated dynamic and unreferenced code attributes in event reading, writing, and conversion methods to enhance AOT support.

SqlSubscriptionBase.cs - Enhanced subscription polling and execution cycles with dynamic attribute annotations to ensure safe trimming in SQL-based event stores.

Feature Improvement - Project Configuration and Dependency Enhancements

Eventuous.Extensions.DependencyInjection.csproj - Updated project configuration by adding the true property and cleaning up dependency references.

Eventuous.Extensions.Logging.csproj - Improved the logging project by introducing AOT compatibility settings and reorganizing project references.

Eventuous.Subscriptions.Polly.csproj - Configured the subscription project for AOT compatibility through dedicated property updates.

Eventuous.Projections.MongoDB.csproj - Enabled AOT support by inserting the true flag in the project file.

Eventuous.RabbitMq.csproj - Added AOT compatibility flags to ensure that RabbitMQ integrations function properly in trimmed environments.

Eventuous.Sql.Base.csproj - Configured the SQL base project with AOT compatibility properties to standardize dynamic serialization behavior.

Copy link
Contributor

@bito-code-review bito-code-review bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bito is crafting review details...

@cloudflare-workers-and-pages
Copy link

Deploying eventuous-main with  Cloudflare Pages  Cloudflare Pages

Latest commit: d680a5e
Status: ✅  Deploy successful!
Preview URL: https://0bbf6431.eventuous-main.pages.dev
Branch Preview URL: https://type-mappings-source-generat.eventuous-main.pages.dev

View logs

@bito-code-review
Copy link
Contributor

AI Code Review is in progress (usually takes 3 to 15 minutes unless it's a very large PR).

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Default Agent You can customize the agent settings here or contact your Bito workspace admin at alexey@ubiquitous.no.

Documentation & Help

Copy link
Contributor

@bito-code-review bito-code-review bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Agent Run #43f1f9

Actionable Suggestions - 1
  • src/Core/src/Eventuous.Shared.Generators/TypeMappingsGenerator.cs - 1
Review Details
  • Files reviewed - 109 · Commit Range: 53cc34a..3a520a9
    • Directory.Packages.props
    • Eventuous.slnx
    • samples/esdb/Bookings.Domain/Bookings.Domain.csproj
    • samples/esdb/Bookings.Domain/DomainModule.cs
    • samples/esdb/Bookings.Payments/Bookings.Payments.csproj
    • samples/esdb/Bookings.Payments/Program.cs
    • samples/esdb/Bookings/Bookings.csproj
    • samples/esdb/Bookings/Program.cs
    • src/Core/Eventuous.Core.slnf
    • src/Core/src/Eventuous.Application/AggregateService/CommandHandlerBuilder.cs
    • src/Core/src/Eventuous.Application/AggregateService/CommandHandlersMap.cs
    • src/Core/src/Eventuous.Application/AggregateService/CommandService.cs
    • src/Core/src/Eventuous.Application/Diagnostics/TracedCommandService.cs
    • src/Core/src/Eventuous.Application/Eventuous.Application.csproj
    • src/Core/src/Eventuous.Application/FunctionalService/CommandService.cs
    • src/Core/src/Eventuous.Application/FunctionalService/HandlersMap.cs
    • src/Core/src/Eventuous.Application/ICommandService.cs
    • src/Core/src/Eventuous.Application/Persistence/WriterExtensions.cs
    • src/Core/src/Eventuous.Application/ThrowingCommandService.cs
    • src/Core/src/Eventuous.Diagnostics/Eventuous.Diagnostics.csproj
    • src/Core/src/Eventuous.Diagnostics/Metrics/Measure.cs
    • src/Core/src/Eventuous.Domain/Eventuous.Domain.csproj
    • src/Core/src/Eventuous.Persistence/AggregateFactory.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregatePersistenceExtensions.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStore.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStoreExtensions.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStoreWithArchive.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/IAggregateStore.cs
    • src/Core/src/Eventuous.Persistence/Constants.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventReader.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventStore.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventWriter.cs
    • src/Core/src/Eventuous.Persistence/EventStore/IEventReader.cs
    • src/Core/src/Eventuous.Persistence/EventStore/IEventWriter.cs
    • src/Core/src/Eventuous.Persistence/EventStore/StoreFunctions.cs
    • src/Core/src/Eventuous.Persistence/EventStore/TieredEventReader.cs
    • src/Core/src/Eventuous.Persistence/EventStore/TieredEventStore.cs
    • src/Core/src/Eventuous.Persistence/Eventuous.Persistence.csproj
    • src/Core/src/Eventuous.Persistence/StateStore/IStateStore.cs
    • src/Core/src/Eventuous.Persistence/StateStore/StateStore.cs
    • src/Core/src/Eventuous.Persistence/StateStore/StateStoreFunctions.cs
    • src/Core/src/Eventuous.Producers/BaseProducer.cs
    • src/Core/src/Eventuous.Producers/Constants.cs
    • src/Core/src/Eventuous.Producers/Eventuous.Producers.csproj
    • src/Core/src/Eventuous.Producers/IProducer.cs
    • src/Core/src/Eventuous.Producers/ProducerExtensions.cs
    • src/Core/src/Eventuous.Producers/RegistrationExtensions.cs
    • src/Core/src/Eventuous.Serialization/DefaultEventSerializer.cs
    • src/Core/src/Eventuous.Serialization/DefaultMetadataSerializer.cs
    • src/Core/src/Eventuous.Serialization/DefaultStaticEventSerializer.cs
    • src/Core/src/Eventuous.Serialization/Eventuous.Serialization.csproj
    • src/Core/src/Eventuous.Serialization/IEventSerializer.cs
    • src/Core/src/Eventuous.Shared.Analyzers/EventUsageAnalyzer.cs
    • src/Core/src/Eventuous.Shared.Analyzers/Eventuous.Shared.Analyzers.csproj
    • src/Core/src/Eventuous.Shared.Generators/Eventuous.Shared.Generators.csproj
    • src/Core/src/Eventuous.Shared.Generators/TypeMappingsGenerator.cs
    • src/Core/src/Eventuous.Shared/Eventuous.Shared.csproj
    • src/Core/src/Eventuous.Shared/TypeMap/TypeMapper.cs
    • src/Core/src/Eventuous.Subscriptions.Generators/ConsumeContextConverterGenerator.cs
    • src/Core/src/Eventuous.Subscriptions.Generators/Eventuous.Subscriptions.Generators.csproj
    • src/Core/src/Eventuous.Subscriptions/Checkpoints/CheckpointCommitHandler.cs
    • src/Core/src/Eventuous.Subscriptions/Constants.cs
    • src/Core/src/Eventuous.Subscriptions/Consumers/MessageConsumeContextConverter.cs
    • src/Core/src/Eventuous.Subscriptions/EventSubscription.cs
    • src/Core/src/Eventuous.Subscriptions/EventSubscriptionWithCheckpoint.cs
    • src/Core/src/Eventuous.Subscriptions/Eventuous.Subscriptions.csproj
    • src/Core/src/Eventuous.Subscriptions/IMessageSubscription.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/NamedRegistrations.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionBuilder.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionBuilderExtensions.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionRegistrationExtensions.cs
    • src/Core/src/Eventuous.Subscriptions/SubscriptionHostedService.cs
    • src/Core/test/Eventuous.Tests.Application/Eventuous.Tests.Application.csproj
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Analyzed.cs
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Analyzer_Ev001_Tests.cs
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Eventuous.Tests.Shared.Analyzers.csproj
    • src/Core/test/Eventuous.Tests/AggregateWithId/OperateOnAggregateWithId.cs
    • src/Core/test/Eventuous.Tests/Eventuous.Tests.csproj
    • src/Core/test/Eventuous.Tests/ForgotToSetId.cs
    • src/Core/test/Eventuous.Tests/TypeRegistrationTests.cs
    • src/Diagnostics/src/Eventuous.Diagnostics.Logging/Eventuous.Diagnostics.Logging.csproj
    • src/Diagnostics/src/Eventuous.Diagnostics.OpenTelemetry/Eventuous.Diagnostics.OpenTelemetry.csproj
    • src/Diagnostics/src/Eventuous.Diagnostics.OpenTelemetry/MeterProviderBuilderExtensions.cs
    • src/EventStore/Eventuous.EventStore.slnf
    • src/EventStore/src/Eventuous.EventStore/Constants.cs
    • src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs
    • src/EventStore/src/Eventuous.EventStore/Eventuous.EventStore.csproj
    • src/EventStore/src/Eventuous.EventStore/Producers/EventStoreProducer.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/AllStreamSubscription.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/PersistentSubscriptionBase.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/StreamSubscription.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Eventuous.Extensions.DependencyInjection.csproj
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/AggregateFactory.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/AggregateStore.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/Services.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/StoreWithArchive.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/Stores.cs
    • src/Extensions/src/Eventuous.Extensions.Logging/Eventuous.Extensions.Logging.csproj
    • src/Extensions/src/Eventuous.Subscriptions.Polly/Eventuous.Subscriptions.Polly.csproj
    • src/Extensions/src/Eventuous.Subscriptions.Polly/SubscriptionBuilderExtensions.cs
    • src/Mongo/src/Eventuous.Projections.MongoDB/Eventuous.Projections.MongoDB.csproj
    • src/RabbitMq/src/Eventuous.RabbitMq/Constants.cs
    • src/RabbitMq/src/Eventuous.RabbitMq/Eventuous.RabbitMq.csproj
    • src/RabbitMq/src/Eventuous.RabbitMq/Producers/RabbitMqProducer.cs
    • src/RabbitMq/src/Eventuous.RabbitMq/Subscriptions/RabbitMqSubscription.cs
    • src/Relational/src/Eventuous.Sql.Base/Constants.cs
    • src/Relational/src/Eventuous.Sql.Base/Eventuous.Sql.Base.csproj
    • src/Relational/src/Eventuous.Sql.Base/SqlEventStoreBase.cs
    • src/Relational/src/Eventuous.Sql.Base/Subscriptions/SqlSubscriptionBase.cs
  • Files skipped - 2
    • src/Core/src/Eventuous.Shared.Analyzers/AnalyzerReleases.Shipped.md - Reason: Filter setting
    • src/Core/src/Eventuous.Shared.Analyzers/AnalyzerReleases.Unshipped.md - Reason: Filter setting
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Default Agent You can customize the agent settings here or contact your Bito workspace admin at alexey@ubiquitous.no.

Documentation & Help

AI Code Review powered by Bito Logo

@bito-code-review
Copy link
Contributor

bito-code-review bot commented Oct 1, 2025

Code Review Agent Run #911142

Actionable Suggestions - 0
Review Details
  • Files reviewed - 109 · Commit Range: 3a520a9..322429f
    • Directory.Packages.props
    • Eventuous.slnx
    • samples/esdb/Bookings.Domain/Bookings.Domain.csproj
    • samples/esdb/Bookings.Domain/DomainModule.cs
    • samples/esdb/Bookings.Payments/Bookings.Payments.csproj
    • samples/esdb/Bookings.Payments/Program.cs
    • samples/esdb/Bookings/Bookings.csproj
    • samples/esdb/Bookings/Program.cs
    • src/Core/Eventuous.Core.slnf
    • src/Core/src/Eventuous.Application/AggregateService/CommandHandlerBuilder.cs
    • src/Core/src/Eventuous.Application/AggregateService/CommandHandlersMap.cs
    • src/Core/src/Eventuous.Application/AggregateService/CommandService.cs
    • src/Core/src/Eventuous.Application/Diagnostics/TracedCommandService.cs
    • src/Core/src/Eventuous.Application/Eventuous.Application.csproj
    • src/Core/src/Eventuous.Application/FunctionalService/CommandService.cs
    • src/Core/src/Eventuous.Application/FunctionalService/HandlersMap.cs
    • src/Core/src/Eventuous.Application/ICommandService.cs
    • src/Core/src/Eventuous.Application/Persistence/WriterExtensions.cs
    • src/Core/src/Eventuous.Application/ThrowingCommandService.cs
    • src/Core/src/Eventuous.Diagnostics/Eventuous.Diagnostics.csproj
    • src/Core/src/Eventuous.Diagnostics/Metrics/Measure.cs
    • src/Core/src/Eventuous.Domain/Eventuous.Domain.csproj
    • src/Core/src/Eventuous.Persistence/AggregateFactory.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregatePersistenceExtensions.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStore.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStoreExtensions.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/AggregateStoreWithArchive.cs
    • src/Core/src/Eventuous.Persistence/AggregateStore/IAggregateStore.cs
    • src/Core/src/Eventuous.Persistence/Constants.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventReader.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventStore.cs
    • src/Core/src/Eventuous.Persistence/Diagnostics/Tracing/TracedEventWriter.cs
    • src/Core/src/Eventuous.Persistence/EventStore/IEventReader.cs
    • src/Core/src/Eventuous.Persistence/EventStore/IEventWriter.cs
    • src/Core/src/Eventuous.Persistence/EventStore/StoreFunctions.cs
    • src/Core/src/Eventuous.Persistence/EventStore/TieredEventReader.cs
    • src/Core/src/Eventuous.Persistence/EventStore/TieredEventStore.cs
    • src/Core/src/Eventuous.Persistence/Eventuous.Persistence.csproj
    • src/Core/src/Eventuous.Persistence/StateStore/IStateStore.cs
    • src/Core/src/Eventuous.Persistence/StateStore/StateStore.cs
    • src/Core/src/Eventuous.Persistence/StateStore/StateStoreFunctions.cs
    • src/Core/src/Eventuous.Producers/BaseProducer.cs
    • src/Core/src/Eventuous.Producers/Constants.cs
    • src/Core/src/Eventuous.Producers/Eventuous.Producers.csproj
    • src/Core/src/Eventuous.Producers/IProducer.cs
    • src/Core/src/Eventuous.Producers/ProducerExtensions.cs
    • src/Core/src/Eventuous.Producers/RegistrationExtensions.cs
    • src/Core/src/Eventuous.Serialization/DefaultEventSerializer.cs
    • src/Core/src/Eventuous.Serialization/DefaultMetadataSerializer.cs
    • src/Core/src/Eventuous.Serialization/DefaultStaticEventSerializer.cs
    • src/Core/src/Eventuous.Serialization/Eventuous.Serialization.csproj
    • src/Core/src/Eventuous.Serialization/IEventSerializer.cs
    • src/Core/src/Eventuous.Shared.Analyzers/EventUsageAnalyzer.cs
    • src/Core/src/Eventuous.Shared.Analyzers/Eventuous.Shared.Analyzers.csproj
    • src/Core/src/Eventuous.Shared.Generators/Eventuous.Shared.Generators.csproj
    • src/Core/src/Eventuous.Shared.Generators/TypeMappingsGenerator.cs
    • src/Core/src/Eventuous.Shared/Eventuous.Shared.csproj
    • src/Core/src/Eventuous.Shared/TypeMap/TypeMapper.cs
    • src/Core/src/Eventuous.Subscriptions.Generators/ConsumeContextConverterGenerator.cs
    • src/Core/src/Eventuous.Subscriptions.Generators/Eventuous.Subscriptions.Generators.csproj
    • src/Core/src/Eventuous.Subscriptions/Checkpoints/CheckpointCommitHandler.cs
    • src/Core/src/Eventuous.Subscriptions/Constants.cs
    • src/Core/src/Eventuous.Subscriptions/Consumers/MessageConsumeContextConverter.cs
    • src/Core/src/Eventuous.Subscriptions/EventSubscription.cs
    • src/Core/src/Eventuous.Subscriptions/EventSubscriptionWithCheckpoint.cs
    • src/Core/src/Eventuous.Subscriptions/Eventuous.Subscriptions.csproj
    • src/Core/src/Eventuous.Subscriptions/IMessageSubscription.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/NamedRegistrations.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionBuilder.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionBuilderExtensions.cs
    • src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionRegistrationExtensions.cs
    • src/Core/src/Eventuous.Subscriptions/SubscriptionHostedService.cs
    • src/Core/test/Eventuous.Tests.Application/Eventuous.Tests.Application.csproj
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Analyzed.cs
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Analyzer_Ev001_Tests.cs
    • src/Core/test/Eventuous.Tests.Shared.Analyzers/Eventuous.Tests.Shared.Analyzers.csproj
    • src/Core/test/Eventuous.Tests/AggregateWithId/OperateOnAggregateWithId.cs
    • src/Core/test/Eventuous.Tests/Eventuous.Tests.csproj
    • src/Core/test/Eventuous.Tests/ForgotToSetId.cs
    • src/Core/test/Eventuous.Tests/TypeRegistrationTests.cs
    • src/Diagnostics/src/Eventuous.Diagnostics.Logging/Eventuous.Diagnostics.Logging.csproj
    • src/Diagnostics/src/Eventuous.Diagnostics.OpenTelemetry/Eventuous.Diagnostics.OpenTelemetry.csproj
    • src/Diagnostics/src/Eventuous.Diagnostics.OpenTelemetry/MeterProviderBuilderExtensions.cs
    • src/EventStore/Eventuous.EventStore.slnf
    • src/EventStore/src/Eventuous.EventStore/Constants.cs
    • src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs
    • src/EventStore/src/Eventuous.EventStore/Eventuous.EventStore.csproj
    • src/EventStore/src/Eventuous.EventStore/Producers/EventStoreProducer.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/AllStreamSubscription.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/PersistentSubscriptionBase.cs
    • src/EventStore/src/Eventuous.EventStore/Subscriptions/StreamSubscription.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Eventuous.Extensions.DependencyInjection.csproj
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/AggregateFactory.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/AggregateStore.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/Services.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/StoreWithArchive.cs
    • src/Extensions/src/Eventuous.Extensions.DependencyInjection/Registrations/Stores.cs
    • src/Extensions/src/Eventuous.Extensions.Logging/Eventuous.Extensions.Logging.csproj
    • src/Extensions/src/Eventuous.Subscriptions.Polly/Eventuous.Subscriptions.Polly.csproj
    • src/Extensions/src/Eventuous.Subscriptions.Polly/SubscriptionBuilderExtensions.cs
    • src/Mongo/src/Eventuous.Projections.MongoDB/Eventuous.Projections.MongoDB.csproj
    • src/RabbitMq/src/Eventuous.RabbitMq/Constants.cs
    • src/RabbitMq/src/Eventuous.RabbitMq/Eventuous.RabbitMq.csproj
    • src/RabbitMq/src/Eventuous.RabbitMq/Producers/RabbitMqProducer.cs
    • src/RabbitMq/src/Eventuous.RabbitMq/Subscriptions/RabbitMqSubscription.cs
    • src/Relational/src/Eventuous.Sql.Base/Constants.cs
    • src/Relational/src/Eventuous.Sql.Base/Eventuous.Sql.Base.csproj
    • src/Relational/src/Eventuous.Sql.Base/SqlEventStoreBase.cs
    • src/Relational/src/Eventuous.Sql.Base/Subscriptions/SqlSubscriptionBase.cs
  • Files skipped - 2
    • src/Core/src/Eventuous.Shared.Analyzers/AnalyzerReleases.Shipped.md - Reason: Filter setting
    • src/Core/src/Eventuous.Shared.Analyzers/AnalyzerReleases.Unshipped.md - Reason: Filter setting
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Default Agent You can customize the agent settings here or contact your Bito workspace admin at alexey@ubiquitous.no.

Documentation & Help

AI Code Review powered by Bito Logo

@alexeyzimarev alexeyzimarev merged commit 1328d29 into dev Oct 1, 2025
2 of 7 checks passed
@alexeyzimarev alexeyzimarev deleted the type-mappings-source-generator branch October 1, 2025 16:04
nmummau pushed a commit to nmummau/eventuous that referenced this pull request Oct 11, 2025
* Added type mappings source generator
* Added analyzer for unmapped types

Co-authored-by: bito-code-review[bot] <188872107+bito-code-review[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants