Well, I try to use stable releases, so the last working is 18.06.4.
According to the error message, swap seems to be disabled in the kernel.
But I don't understand the logic of disabling swap, when this model has enough resources to install and run VPN and has a USB port for extroot/swap.
Well, then we are talking about a 1.5 year regression window since June 2018
Two minutes of git search revealed this conclusion for you:
It has been disabled in July 2018 for your router family (among others) due to the relatively small flash size.
You can easily do pretty much anything for your own builds.
But getting something accepted to the public code would be much more difficult.
Specifically to your questions:
"small_flash" is set for the whole target (as a feature), so you can't easily remove that for just one router. But when you personally build only for your own router type, you can naturally remove that also from the other routers.
USB can be present in really resource-limited 4/32 routers, so that does not indicate the wish to bloat the firmware by enabling the swap features in kernel by default. (Using USB based disk for swap is not that optimal performance-wise.) The devs have tried to keep the resource-limited routers (like yours) alive by selectively disabling less-used features.
Note that as your router (DIR-620 D1) only has 32 MB RAM, it is pretty much abandoned from the generic OpenWrt perspective in 19.07. If you want to take special config action to keep it still alive, feel free to do that in your own builds, but do not expect the generic public OpenWrt to accommodate for that.
Just implement one of my proposals for your own build.
I assume that KERNEL_SWAP would be the critical option...
Might be possible as it looks like a normal config item option. Haven't checked.
Not really. I haven't looked into the other effects of small_flash option, but there may be some other relevant places where it has impact. Squashfs optimization etc.
But as I have no relevant devices, I have never looked into its impact on detailed level.
It does not work for some reason.
Perhaps it is related to small_flash inside tmp/.targetinfo which is produced by scripts/feeds install -a.
It seems to work, but the result looks identical to simply using CONFIG_KERNEL_SWAP=y which makes the build_dir/target-*/linux-*/linux-*/.vermagic to not match the official build.
Is there a way to build it to be able to use the official repositories?