I suspect ATX is more complicated, but the process is likely similar. For me:
There is an online file which contains the information which tells the latest revision. The software reads the file and compares it to the EXE data, and if not current, handles the out of date issue as needed.
When I make a change, I first upload the new software, then update the data file. But, on occasion, I might miss something, or upload something incorrectly (as binary instead of ascii, or the reverse, proving yet again I am human). As soon as I am done, I test the new revision indicator and download myself. I usually catch errors before anyone else downloads, but not always.
There is also an issue with caching, as the user computer could not be reading the actual current revision info, as their browser or connection is reading a cached copy of the file. This is a REAL issue, and is one of the reasons I allow manual download, and have s system in place to try to keep the download from ever being cached.
I also usually leave the prior revision on my site, but not directly accessible, in case there is some need to install the prior revision (I can send a link). Has not been needed in years, but I still allow for human error.
OTOH, over the years, I have had to get stricter and stricter, and do have "stops" in place for cases where the user is not keeping current. Just a thing one must do not that computers and software are treated like appliances, and are expected to do all for the user, and insulate the user from any responsibility. When I started, 90% of my programming time was for the software functions/improvements. Now, 90% of my programming time is trying to prevent user errors.