Require 4 consecutive short reads before shrinking AdaptiveReadBuffer, matching the Go server's readLoop behaviour and preventing buffer size thrashing.