If the input range is fully inclusive, we shouldn’t be returning an empty range. [A.5, A.5] should return [A, A+1). Without the change, it is returning [A+1, A+1), which is considered empty. We will only increment the lower bound if it is smaller than the pre-incremented upper frame number.
The issue this was causing is that in FSequenceUpdater_Hierarchical::Update() the subsequences get their range incremented by the tickrate, so they get a subframe. This differs from the typical behaviour of the root, which would have an [A, A] range when evaluating from EvaluateInternal(PlayPosition.GetCurrentPositionAsRange()). For an input without a subframe, this function already returned a valid rage, so this issue is not visible in a basic sequence where everything is played at root.
See suggested fix Fix that TimeRangeToNumberRange can return an empty range when the in… by LHG-JonAnderJimenez · Pull Request #14635 · EpicGames/UnrealEngine
[Attachment Removed]