Fluxzero 1.197.0
1.197.0 (2026-06-09)
Features
feat(eventsourcing): add aggregate commit policies (
f16f8e4)Adds explicit aggregate commit policies for sync/async after-handler and after-batch commits while preserving legacy sync-after-batch behavior for applications without a defaults version. New defaults can resolve DEFAULT to async-after-batch, and the property value default now falls through to defaults-version or legacy behavior.
Tests cover policy resolution, legacy commitInBatch fallback, and the sync versus async completion timing for handler and batch commits.
feat(tracking): allow async results without blocking batches (
a965c76)Consumers can opt out of awaiting asynchronous handler results before completing the current batch. The default remains true, so existing consumers keep the previous completion semantics.
Tests: ./mvnw -q -pl sdk -Dtest=AsyncCompletionScopeTest,DefaultTrackingAsyncResultTest,EventSourcingRepositoryTest test
Bug Fixes
fix(tracking): preserve handler failure stop signal (
c8027a7)Keep BatchProcessingException from stopTracker visible to the tracker after reporting handler failures, so failed messages are not marked as processed.
Also update aggregate playback commit-failure coverage to assert the expected failure while still checking cache invalidation.
Tests:
- ./mvnw -q -pl sdk -Dtest=AggregatePlaybackTest,ThrowingErrorHandlerTest -Dsurefire.failIfNoSpecifiedTests=false test
- ./mvnw -q -pl sdk -Dtest=DefaultTrackingAsyncResultTest,ThrowingErrorHandlerTest -Dsurefire.failIfNoSpecifiedTests=false test
- ./mvnw -q -pl sdk test
- git diff --check
fix(tracking): keep async results fire-and-forget by default (
8d49650)Restore the historical behavior for CompletionStage handler results by making awaitAsyncResults default to false. When the option is explicitly enabled, the tracker now collects result publication stages and waits for them before completing the current batch.
Tests: ./mvnw -q -pl sdk -am -Dtest=DefaultTrackingAsyncResultTest,AsyncCompletionScopeTest,EventSourcingRepositoryTest -Dsurefire.failIfNoSpecifiedTests=false test
- fix(sdk): avoid websocket client stalls (
f91e5b9)
Performance Improvements
perf(proxy): reduce lifecycle test overhead (
2923525)Lazy-initialize LZ4 helpers so websocket capability parsing does not eagerly load native compression.
Add a proxy metrics switch and keep the lifecycle test focused on startup and forwarding by disabling metrics and compression there.
Tests: ./mvnw -q -pl common,proxy,sdk -Dtest=CompressionAlgorithmTest,WebSocketCapabilitiesTest,ProxyServerLifecycleTest,ForwardProxyConsumerTest,ProxyServerTest,JettyProxyWebsocketSessionTest,AggregateEntitiesTest -Dsurefire.failIfNoSpecifiedTests=false test
perf(eventsourcing): run aggregate commits asynchronously (
67cfe97)Aggregate commits now return futures that are registered in a completion scope, so handler and batch callbacks can start all commit work before waiting for the combined completion. Searchable document publication remains ordered after event storage to preserve the previous correctness contract.
Tests: ./mvnw -q -pl sdk -Dtest=AsyncCompletionScopeTest,DefaultTrackingAsyncResultTest,EventSourcingRepositoryTest test
Code Refactoring
refactor(modeling): remove aggregate commitInBatch (
a0b479f)Use commitPolicy as the only aggregate-level commit timing API. The default fallback remains sync_after_batch unless a newer defaults version or explicit property selects another policy.
Projects that used @Aggregate(commitInBatch = ...) must switch to @Aggregate(commitPolicy = ...).
Tests: ./mvnw -q -pl sdk -Dtest=DefaultAggregateRepositoryCommitPolicyTest,AggregateCommitPolicyTest -Dsurefire.failIfNoSpecifiedTests=false test
Tests: ./mvnw -q -pl sdk test
refactor(configuration): centralize defaults version handling (
c1c7778)Move defaults version parsing to ApplicationProperties so cache, scheduling, tracking, TestFixture, and aggregate commit policy resolution share the same behavior.
Also document websocket result diagnostics modes and metadata helpers.
Tests:
- ./mvnw -q -pl sdk -Dtest=ApplicationPropertiesTest,DefaultAggregateRepositoryCommitPolicyTest,DefaultCacheTest,ConsumerConfigurationTest,GivenWhenThenSchedulingTest,FluxzeroConfigTest -Dsurefire.failIfNoSpecifiedTests=false test
- git diff --check
refactor(websocket): gate result diagnostics by mode (
e907bf0)Websocket result diagnostics now use NONE, DEFAULT, and HEAVY modes. The default keeps runtime result timing metadata, the legacy timing boolean still enables HEAVY, and low-level receive timestamps are only captured when HEAVY is active.
Tests: ./mvnw -q -pl sdk -am -Dtest=AbstractWebsocketClientTest,JdkWebsocketConnectorTest,SessionPoolTest -Dsurefire.failIfNoSpecifiedTests=false test