Skip to content

BREAKING: Update core interface signatures and enforce plugin-safe is…#16

Merged
mshimshon merged 1 commit intomainfrom
version-2
Jan 28, 2026
Merged

BREAKING: Update core interface signatures and enforce plugin-safe is…#16
mshimshon merged 1 commit intomainfrom
version-2

Conversation

@mshimshon
Copy link
Copy Markdown
Owner

…olation

BREAKING: Change default dispatch order to reducers-first
BREAKING: Remove per-effect middleware and unify effect execution phases
BREAKING: Guarantee deterministic BeforeEffect → Effects → AfterEffects flow
BREAKING: Enforce non-singleton actions for correct scoping
BREAKING: Replace transient lifetimes with scoped/singleton for core components
BREAKING: Change ScanAssemblies to accept Assembly[] instead of Type[]
BREAKING: Register IPulseGlobalTracker as scoped instead of singleton
BREAKING: Remove AddStatePulse<Action,Effect,Reducer,State> extension
BREAKING: Add AddStatePulseService() for auto type detection
BREAKING: Add OnDispatchFailure(Exception, object) to IDispatchMiddleware
BREAKING: Remove async dispatch rethrow; only synchronous Await() rethrows
BREAKING: Convert reducers from Task to synchronous methods
BREAKING: Remove ReducerExt helper
BREAKING: Deprecate IDispatcherPrepper.Prepare(Func)

FEATURE: Add global config for dispatch ordering and effect execution
FEATURE: Add global and per-dispatch ordering (EffectsFirst/ReducersFirst)
FEATURE: Guarantee BeforeReducers middleware runs before AfterReducer
FEATURE: Allow reducers to run parallel with BeforeReducing when not awaited
FEATURE: Add true fire-and-forget effect execution mode
FEATURE: Add per-dispatch overrides (EffectsFirst, ReducersFirst, SequentialEffects, ParallelEffects)
FEATURE: Add InvalidDispatchCombinationException for invalid config mixes
FEATURE: Add safe recursive dispatch support in fire-and-forget mode
FEATURE: Add PulseTrackingModel for thread-safe vs single-threaded tracking
FEATURE: Add GlobalTrackerLifetime for scoped/singleton/BlazorServer/WASM
FEATURE: Add IStateFeatureSingleton for shared server-side state
FEATURE: Make reducers/effects/middleware/validators always transient
FEATURE: Add global StateVersioning ticker to prevent stale state updates
FEATURE: Add automatic stale-state discard with IStateAccessor
FEATURE: Add Roslyn analyzer error for Prepare(entity) constructor mismatch
FEATURE: Add Roslyn analyzer error for With() on init/get-only properties

SECURITY: Enforce Roslyn validation for StateOf usage to prevent leaks
SECURITY: Fix internal configuration paths

FIX: Resolve various warnings
FIX: Correct internal configuration behavior
FIX: Ensure middleware registration via scanned assemblies
FIX: Fix Await() not being respected in some cases
FIX: Resolve race-condition cancellation affecting final action
FIX: Fix race-condition inconsistencies
FIX: Fix StateOf() cast failure to IStateAccessor
FIX: Make AddStatePulseServices() configuration optional

…olation

BREAKING: Change default dispatch order to reducers-first
BREAKING: Remove per-effect middleware and unify effect execution phases
BREAKING: Guarantee deterministic BeforeEffect → Effects → AfterEffects flow
BREAKING: Enforce non-singleton actions for correct scoping
BREAKING: Replace transient lifetimes with scoped/singleton for core components
BREAKING: Change ScanAssemblies to accept Assembly[] instead of Type[]
BREAKING: Register IPulseGlobalTracker as scoped instead of singleton
BREAKING: Remove AddStatePulse<Action,Effect,Reducer,State> extension
BREAKING: Add AddStatePulseService<Implementation>() for auto type detection
BREAKING: Add OnDispatchFailure(Exception, object) to IDispatchMiddleware
BREAKING: Remove async dispatch rethrow; only synchronous Await() rethrows
BREAKING: Convert reducers from Task to synchronous methods
BREAKING: Remove ReducerExt helper
BREAKING: Deprecate IDispatcherPrepper<TAction>.Prepare(Func<TAction>)

FEATURE: Add global config for dispatch ordering and effect execution
FEATURE: Add global and per-dispatch ordering (EffectsFirst/ReducersFirst)
FEATURE: Guarantee BeforeReducers middleware runs before AfterReducer
FEATURE: Allow reducers to run parallel with BeforeReducing when not awaited
FEATURE: Add true fire-and-forget effect execution mode
FEATURE: Add per-dispatch overrides (EffectsFirst, ReducersFirst, SequentialEffects, ParallelEffects)
FEATURE: Add InvalidDispatchCombinationException for invalid config mixes
FEATURE: Add safe recursive dispatch support in fire-and-forget mode
FEATURE: Add PulseTrackingModel for thread-safe vs single-threaded tracking
FEATURE: Add GlobalTrackerLifetime for scoped/singleton/BlazorServer/WASM
FEATURE: Add IStateFeatureSingleton for shared server-side state
FEATURE: Make reducers/effects/middleware/validators always transient
FEATURE: Add global StateVersioning ticker to prevent stale state updates
FEATURE: Add automatic stale-state discard with IStateAccessor
FEATURE: Add Roslyn analyzer error for Prepare<T>(entity) constructor mismatch
FEATURE: Add Roslyn analyzer error for With() on init/get-only properties

SECURITY: Enforce Roslyn validation for StateOf<T> usage to prevent leaks
SECURITY: Fix internal configuration paths

FIX: Resolve various warnings
FIX: Correct internal configuration behavior
FIX: Ensure middleware registration via scanned assemblies
FIX: Fix Await() not being respected in some cases
FIX: Resolve race-condition cancellation affecting final action
FIX: Fix race-condition inconsistencies
FIX: Fix StateOf<TState>() cast failure to IStateAccessor<object>
FIX: Make AddStatePulseServices() configuration optional
@mshimshon mshimshon merged commit 67cfb8d into main Jan 28, 2026
1 of 2 checks passed
@mshimshon mshimshon deleted the version-2 branch March 4, 2026 17:13
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.

1 participant