Freeze per-side rate once a transfer goes idle
Commit

Previously the rate displayed in the --progress ticker and the end-of-run throughput line was computed as bytes / (now − start), which kept shrinking once bytes stopped flowing — a sync that streamed 11 MB at 367 KB/s would tick down to 366, 365, 364 ... while the post-transfer phases (planning, ref creation) ran. Misleading.
Track per-side lastByteAt on every non-empty Read and surface two new fields on each SideBytes snapshot: ActiveNanos (start → last byte) and IdleNanos (last byte → snapshot time). Renderers compute the rate from ActiveNanos so it freezes at the actual transfer rate, and append a "✓" marker once IdleNanos crosses 750ms (or unconditionally on the final render) so it's visually obvious which sides have finished.
Entire-Checkpoint: 8416b4de95dd