- Race: isLoadingNextPage was set inside the launched coroutine, so a rapid second
OnLoadNextPage passed the guard before the flag flipped -> the same page loaded twice and
items were appended twice. Set the loading flag synchronously before launching.
- Restore: when a middle page failed after earlier pages loaded, the error was swallowed
(error=null, no event). Now any restore failure emits a ShowSnackbar; partial restores show
the loaded list + snackbar, full failures show the error state.
Found by the milestone review.