Release v15.29.4
Summary
Projection definitions were being treated as changed when only optional collection defaults differed (null vs empty), which could trigger broad replay behavior. This update makes comparison semantic for optional collections so only genuinely changed definitions are considered replay candidates.
Added
- Focused spec for
ProjectionDefinitionComparervalidating thatTags/Nestednulland empty forms compare as equivalent.
Changed
- Normalized optional metadata fields before projection definition comparison:
Tags: normalize ordering and treat empty as unset.Nested: treat empty as unset.
- Kept structural comparison behavior unchanged for real definition differences.
first = first with
{
Tags = NormalizeTags(first.Tags),
Nested = NormalizeNested(first.Nested)
};Fixed
- Prevented false-positive projection definition changes caused by storage/default serialization shape differences.
- Reduced unnecessary replay/replay-recommendation triggers for projections whose effective definition did not change.
Removed
- None.
Security
- None.
Deprecated
- None.