@@ -85,10 +85,12 @@ struct AlertsView: View {
8585 // The manual Refresh/Retry buttons spawn detached Tasks not tied to
8686 // `.task(id: stream)` cancellation, so a slow refresh for the old stream
8787 // can resolve after a switch. Drop stale results.
88− guard stream == appState.selectedStream else { return }
88+ // Still clear isLoading on the stale path: this task set the spinner,
89+ // so leaving it true wedges the ProgressView and disables Refresh.
90+ guard stream == appState.selectedStream else { isLoading = false; return }
8991 alertConfig = config
9092 } catch {
91− guard stream == appState.selectedStream else { return }
93+ guard stream == appState.selectedStream else { isLoading = false; return }
9294 errorMessage = ParseableError.userFriendlyMessage(for: error)
9395 }
9496