Status: IN
`_expire_events` uses `watermark - duration` as a one-sided cutoff for buffer cleanup, while `contains()` is symmetric; this is correct because future events can only arrive at or after the watermark
Source: entries/2026/05/29/topic-sliding-vs-tumbling-windows.md