Downlink scheduled but never delivered -- Feature request?

This happens because of the downlink gateway selection logic. When a downlink is queued, it is sent to the gateway that has the best RSSI from uplinks from the device. This is so then if there are multiple gateways in the area of the device, it selects the one that has the best signal strength to maximize the chance the device receives the downlink.

I guess join-requests do not count towards the RSSI for this logic (likely because data-rates, subbands, etc have not been negotiated yet), and hence Chirpstack requires a single uplink from the device before it can decide what gateway to send any downlinks through.

As for setting a TTL for downlinks, you can set the queue-item expiration in newer chirpstack versions: