Just to clarify, when autorate enters "sleep/idle" mode it stops sending latency probes (based on the observation that over a day quite some traffic volume accumulates, and on volume-metered links that can get expensive, so the goal is to spare these probes at times when they are not needed).
So getting epochs with only LOAD records is fine AS LONG AS the record type switches almost instantaneously back to DATA (plus LOAD) after you start a heavier usecase. I tend to simply run a speedtest, then two things need to happen:
a) if looking at autorate's log DATA entries need to appear
b) when running the speedtest the reported rate needs to be well above your configured minimum-rate assuming min_shaper_rates_enforcement is set to 1; if min_shaper_rates_enforcement was set to zero this becomes less clear as the "residual" shaper rate depends on what rate was active when sleep was entered.
So do you have any recollection what type of sleep you encountered?
We have no good theory why deep sleep happens, but it might involve a race condition somewhere that triggers rarely enough on decent links to make debugging a pain. However, my ISP or modem for a few days got my link in a mode with high packet loss which triggered the condition frequently, so maybe your starlink link with its inherent higher packet loss might help us finally solving that riddle...
@Lynx: if the dependence on packet loss holds, I think we really should strictly serialize sleep and reflector replacements and stall; I understand that we currently see not how these could interfere, but I argue that we currently do not actually make interference impossible we just do not see how they could interfere. This might reflect that they are mutually exclusive or just imply that we can not see far enough, so let me argue we should make sure these things are mutually exclusive.