TLDR; Requests for non-existent versions were causing all other legitimate requests for "latest" or a correct version to also show "not on hub". i.e. one bad dependency and the whole scan was corrupted.
Our scan has a de-duplication section that removes duplicates so that you don't end up having to download the same var twice.
On the website, and in certain places in-game, if a version doesn't exist then the Hub will serve the latest version as an alternative. However, specifically in the "scan hub for missing packages", dependencies with specific versions (instead of "latest") are hard coded to return "not on hub" if they aren't available. The "specific version" thing was originally intended mainly for plugins, where downloading an alternative version would likely break the plugin. Today, there are all kinds of reasons a creator might use "specific" instead of "latest", but development has ended for VaM 1.x.
In any case, what was happening:
1. You scan for missing packages and VaM sends a request for something like AshAuryn.Sexpressions.1 (doesn't exist), AshAuryn.Sexpressions.2 (valid), AshAuryn.Sexpressions.5 (latest version), and AshAuryn.Sexpressions.latest (this would be v5 as well)
2. The API would try to find v1 first, and since it doesn't exist it would offer v5 instead. It would also offer v2, v5 (again since it was specifically requested), and v5 one more time (because latest was requested)
3. Then, so that you don't end up downloading v5 three separate times, it would remove the duplicates of version 5 (it would remove the request for "Sexpressions.5" and the one for "Sexpressions.latest") leaving only the "Hey you requested v1 and it doesn't exist so here's v5 instead"
4. Then, in-game, VaM's old code would say "Hey, v1 doesn't exist, so I'm going to say "not on hub" and delete this file", and since the duplicates were already removed, and vam has removed the file, everything that needs v5 now says "not on hub"
The solution was to track mismatches and make sure we're keeping the information about specific versions that don't exist, but also serving at least one "legitimate" copy of the latest version if there are other vars that also need it.
@Faco2000 -- For the ones that still say "not on hub" like the vars that are weirdly depending on "Sexpressions.1" which doesn't exist, you can try unzipping the var into a folder, editing the meta.json file, and changing the "1" to "latest". Re-zip it and make sure the file ends in .var and not .zip, then try to load the scene. This may or may not repair that var. For a more in-depth repair, you may need to run all of the scene and preset files through a text-editor search pattern and replace all instances of "Sexpressions.1" with "Sexpressions.latest". Obviously only try this if you really care about that scene and there's no replacement.