The LineageOS updater notified me that there will be no more updates for LineageOS 14, because now development on my phone happens on LineageOS 16, so I set aside some time and carefully followed the upgrade instructions.
I now have a phone with Lineageos 16, but the whole modem subsystem does not work.
Advice on #lineageos was that "the wiki instructions are often a bit generic.. offical thread often has the specific details".
Official thread is here, and the missing specific detail was "Make sure you had Samsung's Oreo firmware bootloader and modem before installing this.".
It looks like nothing ever installed firmware updates, since the Android that came with my phone ages ago. I can either wipe everything and install a stock android to let it do the upgrade, then replace it with LineageOS, or try a firmware upgrade.
This link has instructions for firmware upgrades using haimdall, which is in Debian, instead of Odin, which is in Windows.
Finding firmwares is embarassing. They only seem to be available from links on shady download sites, or commercial sites run by who knows whom. I verify sha256sums on LineageOS images, F-Droid has reproducible builds, but at the base of this wonderful stack there's going to be a blob downloaded off some forum on the internet.
In this case, this link points to some collection of firmware blobs.
I downloaded the pack and identified the ones for my phone, then unpacked the tar files and uncompressed the lz4 blobs.
With heimdall, I identified the mapping from partition names to blob names:
heimdall print-pit --no-reboot
Then I did the flashing:
heimdall flash --resume --RADIO modem.bin --CM cm.bin --PARAM param.bin --BOOTLOADER sboot.bin
The first time flashing didn't work, and I got stuck in download mode. This explains how to get out of download mode (power + volume down for 10s).
Second attempt worked fine, and now I have a working phone again:
heimdall flash --RADIO modem.bin --CM cm.bin --PARAM param.bin --BOOTLOADER sboot.bin