darshankabariya 94551413b1 fix: clamp straddling reconciliation ranges to the receiver's window
preProcessPayload only skipped ranges ENTIRELY below the receiver's sync
window, so when a wide-window peer (e.g. a store node) reconciled with a
narrow-window peer (e.g. a core node), the recursive split bottomed out
in a range straddling the narrow node's window floor and its below-window
items were still offered for transfer. Now a straddling range is split:
the below-window portion becomes Skip so the wide peer no longer offers
history older than the narrow node retains. Only triggers on a window
mismatch; equal windows never straddle, so store<->store and core<->core
sync are unchanged (full suite 37/37).

Added a reconciliation test proving a 2h-window initiator does not push a
45-min-old message to a 30-min-window peer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 13:18:49 +05:30
..