@Peter Adkins yeah that reconnection window is a known pain point at those ranges — the issue is mostly on the BLE advertising side. After a dropout, the peripheral goes back to advertising and the central has to catch those packets, but at 30-35km the link margin is tight enough that the first several advertising events can get missed entirely, so you're basically waiting for a lucky window where conditions are favorable enough to complete the handshake.
The main lever you have in firmware is advertising interval and the scan window/interval on the central side. If you haven't already, try dropping the advertising interval on the peripheral significantly — the tradeoff is power draw but if your node is powered you can afford to advertise more aggressively after a disconnect event. On the central side, widen the scan window so you're not missing advertising packets during the brief moments the link margin is there.
The GitHub repo has the STM32WB07 firmware source so you can dig into the connection parameter handling directly — worth looking at how the disconnect event triggers the re-advertising sequence and whether there's any backoff logic that's stretching your recovery time. If there's an exponential backoff on advertising after repeated failures, that alone could explain the variance you're seeing between 45 seconds and a few minutes.
What's your current advertising interval set to, and are you running any custom reconnection logic in the application layer or relying purely on the stack defaults?