• docs/xymodem_verification.md

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sunday, August 30, 2026 17:21:07
    https://gitlab.synchro.net/main/sbbs/-/commit/5a540e056f80c1af0ba86942
    Modified Files:
    docs/xymodem_verification.md
    Log Message:
    docs/xymodem: compare the three knob failures against lrzsz and DSZ

    The first cut reported three options that fail hard rather than
    degrading, and left it there. That was the wrong stopping point: XMODEM
    has no capability negotiation, so somebody has to degrade, and the useful question is whether anyone else does better in the same situation.
    Measured against both references, the three sort into three different
    verdicts.

    CRC fallback is ours to be proud of. XMODEM-CRC specifies the
    degradation on the receiver: ask with C, fall back to NAK after enough unanswered attempts. Put a checksum-only sender in front of each
    receiver and sexyz rc falls back and completes in 12 seconds, DSZ rx
    falls back and completes, and lrz --xmodem -c does not, timing out at
    40. So the deadlock reported for SendCRC=false is lrzsz declining to
    degrade, not us.

    G-mode fallback is ours to fix. The mirror test, a sender refusing G in
    front of a G-mode receiver: DSZ rb -g drops out of G and completes, while
    sexyz rg gives up with "Error fetching YMODEM header block" after 27
    seconds. That is the clearest actionable item in the document.

    And the receive-side block-size cap has nothing to compare against --
    neither lrz nor DSZ exposes such a setting -- so MaxBlockSize is Synchronet-only and its sole reachable effect is to break a transfer that
    would otherwise work.

    The common thread that survives all three: when a capability mismatch
    ends a session, nothing in the log names the cause.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net