As spotted in https://github.com/ppy/osu/pull/33191/checks?check_run_id=42460062656
Seems like just a bog-standard race. Could be reproduced via
diff --git a/osu.Game/Screens/Ranking/SoloResultsScreen.cs b/osu.Game/Screens/Ranking/SoloResultsScreen.cs
index d11e7db178..1a594fd21b 100644
--- a/osu.Game/Screens/Ranking/SoloResultsScreen.cs
+++ b/osu.Game/Screens/Ranking/SoloResultsScreen.cs
@@ -45,6 +45,8 @@ protected override async Task<ScoreInfo[]> FetchScores()
if (Score.BeatmapInfo!.OnlineID <= 0 || Score.BeatmapInfo.Status <= BeatmapOnlineStatus.Pending)
return [];
+ await Task.Delay(5000).ConfigureAwait(false);
+
var criteria = new LeaderboardCriteria(
Score.BeatmapInfo!,
Score.Ruleset,
Closes https://github.com/ppy/osu/issues/27589.
Follows osu! spinner precedent in storing the holding state to the
judgement result rather than attempting to keep it in the DHO (which is
prone to getting dropped on pool re-use).
This was already being done on the old carousel (see `ApplyState`
methods) but wasn't correctly on new carousel.
Importantly, `FreeAfterUse` alone is not enough due to transitions. We
want to immediately stop calculation as soon as a panel is marked
non-visible.
There's no bindable flow for this so it's performed in `Update`. I don't
see this as an issue.