https://gitlab.synchro.net/main/sbbs/-/commit/5d4d4828e0a8231eedcf1f2a
Added Files:
exec/load/ircd/PROTOCOL.md timestamps.js exec/tests/ircd/clock.js rolling.js state.js timestamps.js
Modified Files:
exec/ircd.js exec/load/ircd/channel.js config.js core.js server.js unregistered.js user.js exec/tests/ircd/connect.js lib.sjs network.js skipif
Log Message:
Fix IRCd state synchronization and preserve rolling upgrades
Channel state and nick presence could diverge when timestamps were rewritten
in transit, losing modes were not explicitly removed, or corrections raced
with leaf activity. Preserve trusted timestamps and resolve channel and topic conflicts consistently, including same-second changes and topic clears.
Keep hubs authoritative over untrusted leaves. Assign network timestamps to leaf channel objects, replicate their mappings between upgraded hubs, and
send authoritative channel snapshots without resurrecting pending PARTs.
Verify clocks before linking mutually configured upgraded hubs and while linked, with a configurable 30-second default skew limit.
Keep legacy hubs, leaves, and services usable throughout a rolling upgrade. Gate protocol extensions by capability and use JOIN/MODE corrections for old leaves, including TS-zero modes and compatibility with their -l parser.
Accept legacy burst state only for newly introduced, exclusive leaf channels; retain route validation and hub authority over established channels.
Bound NAMES and snapshot member lists by wire length, preserve mode arguments and founder status, and document the protocol and remaining legacy limits.
Validation: 220 checks pass, including nine live mixed-version tests against the previous daemon for modes, presence, leaf and hub reconnects, and clock compatibility. All test daemons were stopped and git diff --check passes.
--- SBBSecho 3.38-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)