What I see with my node (ESP32+SX1276) and a Things Indoor gateway, is that an SF12 message (with plenty of RSSI/SNR margin) from the node is usually immediately responded to by an ADR command from the network to lower the SF (increase the rate) of the node.
A reason why ADR might not work, is that the node uses the wrong downlink parameters.
In particular the “dn2dr” downlink data rate might be configured incorrectly.
When you use OTAA, the node is told what the configured rate is and ADR should work automagically.
When you use ABP, you need to manually configure it. TTN uses SF9.