Severity: minor (UX; no data loss)
What happens
In ContentView.body, the render order is:
if core.view.library.loading { ProgressView() } else if subscriptions.isEmpty { … } else { List(...) }
Tapping Add dispatches FetchFeed, which sets model.loading = true. Because
the loading branch is checked first, the entire subscription list is replaced by
a centered spinner for the whole fetch+parse+save cycle, then reappears.
On an empty library this is correct (initial load). On a non-empty library it means
the user's existing subscriptions visibly disappear every time they add a feed. The
feed-parsing feature is what newly exposes this, since loading used to be
effectively initial-load-only.
Suggested fix
Only show the full-screen spinner during initial load:
if loading && subscriptions.isEmpty { ProgressView() }
and surface subscribe-in-progress inline near the Add button instead (e.g. disable
the field + small spinner), so the list stays visible.
Repro
Subscribe to one feed, then add a second — the first row vanishes until the second
finishes saving.
Severity: minor (UX; no data loss)
What happens
In
ContentView.body, the render order is:if core.view.library.loading { ProgressView() } else if subscriptions.isEmpty { … } else { List(...) }Tapping Add dispatches
FetchFeed, which setsmodel.loading = true. Becausethe
loadingbranch is checked first, the entire subscription list is replaced bya centered spinner for the whole fetch+parse+save cycle, then reappears.
On an empty library this is correct (initial load). On a non-empty library it means
the user's existing subscriptions visibly disappear every time they add a feed. The
feed-parsing feature is what newly exposes this, since
loadingused to beeffectively initial-load-only.
Suggested fix
Only show the full-screen spinner during initial load:
if loading && subscriptions.isEmpty { ProgressView() }and surface subscribe-in-progress inline near the Add button instead (e.g. disable
the field + small spinner), so the list stays visible.
Repro
Subscribe to one feed, then add a second — the first row vanishes until the second
finishes saving.