When updating mods with scripts, it is common that the update does not properly download all data - while claiming that the mod is up to date.
When joining a server with a script mismatched mod, the user is given a prompt which says, "ADDON LOAD ERROR: SCRIPT MISMATCH". It fails to communicate to the user which mod is not matched. The user intends to fix this easily.
When the user uses the intended tool (validate mods), it is very slow, and it often does not successfully find the mismatched mod or fix it.
It seems to be possible, through testing, that a logical process can be used, in which the game checks only the mods the server requires, using data it already stores locally:
When a mod finishes downloading, the game already writes a <file>_<version>_manifest.json next to each file. It contains the expected file size and SHA-512 checksums for each chunk of up to 8 MB. The game also writes "corrupted" in ServerData.json.
When a join fails with a DATA kick (such as SCRIPT_MISMATCH), take the mod list from that join attempt. That’s already in console.log under “Loaded addons”.
For only those mods: read the existing corrupted flag, compare each file’s size against its manifest, then optionally compare the chunk checksums.
Show the result in the kick dialog: the mod’s name, version and the specific problem (e.g. “data.pak is incomplete”), with a button to re-download only that mod.
A size-only check across a full server modlist (~146 mods in this situation) takes about a second, because it only reads file metadata. A full checksum pass runs at disk speed and can stop at the first bad mod. I built a proof of concept with this exact process, as an offline HTML page that uses only the files above. It identified the broken mod immediately where validation did not.
Observed case
Mod: Blackhawk Tweaks by Awenzj v1.0.109 (689910D4936BDF6C)
data.pak on disk: 189,996,891 bytes. Manifest expects 190,182,212 bytes (185,321 bytes short).
ServerData.json showed the correct version (1.0.109) and "corrupted": true. That file was written when the download finished, 5 minutes before the join attempt.
The game still allowed the join. The kick dialog only said SCRIPT MISMATCH and didn’t name the mod, even though the game had already marked it as corrupted.
Deleting the mod folder and letting it re-download fixed it immediately.
Expected behavior
A mod the game has marked as corrupted should not be reported as up to date. It should be re-downloaded or flagged before joining.
A SCRIPT_MISMATCH kick should name the mod or mods responsible and offer to repair them.