glanceapp/glance · warning · errPartialContent
%w: missing %d RSS feeds
Error message
%w: missing %d RSS feeds
What it means
Returned by rssWidget.fetchItemsFromFeeds (internal/glance/widget-rss.go:186) when at least one but not all feeds failed (failed > 0 && failed < len(requests)). Entries from the healthy feeds are still returned with errPartialContent; each failing feed is logged ('Failed to get RSS feed' with URL and error) and skipped. Only when every feed fails does it return bare errNoContent instead.
Source
Thrown at internal/glance/widget-rss.go:186
slog.Error("Failed to get RSS feed", "url", requests[i].URL, "error", errs[i])
continue
}
for _, item := range feeds[i] {
if _, exists := seen[item.Link]; exists {
continue
}
entries = append(entries, item)
seen[item.Link] = struct{}{}
}
}
if failed == len(requests) {
return nil, errNoContent
}
if failed > 0 {
return entries, fmt.Errorf("%w: missing %d RSS feeds", errPartialContent, failed)
}
return entries, nil
}
func (widget *rssWidget) fetchItemsFromFeedTask(request rssFeedRequest) ([]rssFeedItem, error) {
req, err := http.NewRequest("GET", request.URL, nil)
if err != nil {
return nil, err
}
req.Header.Add("User-Agent", glanceUserAgentString)
widget.cachedFeedsMutex.Lock()
cache, isCached := widget.cachedFeeds[request.URL]
if isCached {
if cache.etag != "" {
req.Header.Add("If-None-Match", cache.etag)View on GitHub (pinned to 91324e8de7)
Solutions
- Check Glance logs for the exact failing URL and cause ('Failed to get RSS feed')
- Update or remove dead feed URLs from the widget config
- Verify the feed URL with curl -L and follow redirects to the current feed location
- For transient failures, rely on the next refresh — partial content still renders
Defensive patterns
Strategy: fallback
Try / catch
items, err := widget.fetchItemsFromFeeds()
if err != nil && errors.Is(err, errPartialContent) {
// render `items` from healthy feeds; check logs for failing URLs
} Prevention
- Audit feed URLs when sites redesign
- Follow permanent redirects to new feed locations
- Accept partial rendering — only total failure empties the widget
When it happens
Trigger: A subset of feed URLs erroring: 404/Gone after a site moved its feed path, DNS failure for one domain, TLS certificate expiry, a 403 from a feed behind Cloudflare, or a feed that changed to a format gofeed cannot parse — while at least one other feed in the widget still works.
Common situations: Aggregator widgets listing many feeds where one site redesigned; expired certs on small blogs; feeds that now require user-agent headers; transient network blips on refresh.
Related errors
- unexpected status code %d from %s
- %w: could not get %d watches
- %w could not fetch some hacker news posts
- %w: could not fetch data for %d market(s)
- %w: could not get %d releases
AI-assisted analysis of glanceapp/glance@91324e8de7 (2026-08-15).
Data as JSON: /api/errors/01d7fc0a52280f3a.
Report an issue: GitHub.