{"id":"stream-join-watermark-monotonic","text":"The join processor's watermark only advances forward via `max(current, event.timestamp)`; `advance_time()` silently ignores timestamps at or below the current watermark","truth_value":"IN","source":"entries/2026/05/29/stream-join-processor-stream_join_processor.md","source_url":"","source_hash":"","justifications":[],"dependents":[],"metadata":{"example":"self._watermark = max(self._watermark, event.timestamp - self._allowed_lateness)"},"explanation":{"steps":[{"node":"stream-join-watermark-monotonic","truth_value":"IN","reason":"premise"}]}}