Window operators drop late events by default. When they receive a late event, they already computed and emitted a result.
Since there is not good default behavior to hay ndle a late event in this case, they are simply dropped.
However, Flink offers multiple ways to explicitly handle late events such as sending them to a side output or computing and emitting an updated result.
So, if you apply a ProcessFunction before any other operator, you can handle all late events.