@Michelle Riggs yeah this is a really valid concern and you're right to separate "link budget exists" from "OTA will actually work" — those are two different problems.
The STM32WB07 does support OTA via the ST BLE stack, and the GitHub repo has the firmware source so you can actually see what's implemented and what you'd need to build on top of. The honest answer is that at 50km you're going to be dealing with meaningful latency and potentially some packet loss depending on conditions, so your OTA implementation needs solid chunk-level acknowledgment and retry logic — if it's just fire-and-forget with no error recovery baked in, a dropped packet mid-transfer means you're in a bad spot with a half-flashed device. The STM32WB07 has dual-bank flash which is your best friend here — it lets you write the new firmware to the inactive bank while the current one keeps running, and only swap on a verified successful transfer, so a failed OTA doesn't brick the node.
Realistically I'd treat this less as "can I push OTA over the air" and more as "can I design a transfer protocol that degrades gracefully" — checksums on every chunk, explicit ACK per block, automatic rollback if the new image doesn't boot cleanly. That's doable, it's just not trivial to implement from scratch. Worth digging through the repo and seeing what's already there before you build anything custom.