windowTopic({ emptyWindows: 'upsert' }) was declared without emptyValues. The two go together: a
fork can orphan every revision of a window id, and the compensation for that has no row behind it —
the target must synthesize one, and only the route knows what an empty window looks like.
Fix — supply emptyValues. Without it the route would be delete-free in normal operation but
emit a delete on a fork, which is the worst of both: its consumers skipped tombstone retention on
the strength of the guarantee.