Subj : src/doors/syncdoom/README.md syncdoom.c xtrn/syncdoom/syncdoom.example To : Git commit to main/sbbs/master From : Rob Swindell (on Debian Linux) Date : Sun Jun 21 2026 00:59:50 https://gitlab.synchro.net/main/sbbs/-/commit/aca73d11b58ef35374d9da33 Modified Files: src/doors/syncdoom/README.md syncdoom.c xtrn/syncdoom/syncdoom.example.ini Log Message: syncdoom: AIMD auto-depth controller, stable depth, lag relabel, cap 8 Follow-up to dfd77154e. Live VPN testing showed the base-minus-penalty auto depth oscillating 4/5<->1 on a jittery link, and the depth-1 dips were a slideshow. Rework the controller and the supporting RTT measurement. - auto depth is now a delay-based AIMD controller with a dead-band and a rate limit (max_inflight is a pure getter; auto_depth_update runs per DSR report): probe up one when the round-trip is clean (<1.25x baseline), ease down when it queues, HOLD in between -> it SETTLES at the link's sustainable depth instead of hunting. Heavy queuing eases down (no longer slams to 1). Validated: holds high on a fat VPN, stable on LAN, no oscillation. - RTT baseline integrity: a reclaimed frame's late DSR report could be mis-matched to a freshly-sent one, reading absurdly low and collapsing the ceiling to depth 1 (the "manual cycle -> dips to 1 -> slow crawl back" bug). Two guards: skip exactly the reports owed by reclaimed frames (g_dsr_stale), and ignore any sample far below the smoothed RTT. - g_rt_high (renamed from the misleading "g_remote"): the frame round-trip is network latency PLUS the client's decode/render time, so a LAN with non-instant JXL decode legitimately has a ~50ms round-trip. Once it's non-trivial, floor depth at 2 (depth 1 there only caps the frame rate) -- latched, so a corrupted sample can never strand a remote player at depth 1. - Relabel the displayed/logged "RTT" -> "lag": it isn't pure ping (includes decode), so "lag" is honest. Overlay, Ctrl-T popup, exit telemetry. - Raise the depth cap 5 -> 8 (DEPTH_MAX; DSR ring widened to 16). On a high- latency link frame rate ~= depth/round-trip, so 5 left fps on the table (e.g. ~19fps at depth 5 / 230ms); depth 8 reaches the 35fps sim cap there. auto climbs to ~6 on such a link on its own; 7-8 are manual. Docs updated. Co-Authored-By: Claude Opus 4.8 --- þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net .