I have the same issue right now in a Krastorio 2 + Space Exploration game:
60.462 Checksum for script __miniloader__/control.lua: 2263722597
60.986 Error ClientMultiplayerManager.cpp:1119: mod-miniloader was registered for the following events when the map was saved but has not re-registered them as a result of loading: on_tick (ID 0)
60.986 Error ClientMultiplayerManager.cpp:100: MultiplayerManager failed: "" + multiplayer.script-event-mismatch + "
" + "
mod-miniloader"
60.986 Info ClientMultiplayerManager.cpp:591: UpdateTick(27452066) changing state from(ConnectedLoadingMap) to(Failed)
68.352 Info ClientMultiplayerManager.cpp:207: Quitting multiplayer connection.
The server saves the map, client downloads it, then gets disconnected. Verified it by trying to connect multiple times with multiple clients, same result. At the time, nobody was on the server, i.e. it was paused/idle.
I've just quickly browsed through the code (although I don't really do Factorio modding) and noticed that there's no persistent event handler for on_tick, but rather subscriptions/unsubscriptions that happen somewhat dynamically. What if there's a subscription for on_tick (to evaluate things for the next tick), but since the server is paused after the current tick has been processed (e.g. because all players have disconnected), the next tick isn't evaluated (and the event handler therefore not removed)? On the server, the mod would be registered for on_tick, but on the clients (which have no idea of the previous frame or its actions), it wouldn't be - hence creating the desync.