{"record":{"id":"60587f8cc9a50c6d","repo":"glanceapp/glance","slug":"w-v-60587f","errorCode":null,"errorMessage":"%w: %v","messagePattern":"%w: %v","errorType":"exception","errorClass":"errNoContent","httpStatus":null,"severity":"error","filePath":"internal/glance/widget-rss.go","lineNumber":158,"sourceCode":"}\n\ntype rssFeedItemList []rssFeedItem\n\nfunc (f rssFeedItemList) sortByNewest() rssFeedItemList {\n\tsort.Slice(f, func(i, j int) bool {\n\t\treturn f[i].PublishedAt.After(f[j].PublishedAt)\n\t})\n\n\treturn f\n}\n\nfunc (widget *rssWidget) fetchItemsFromFeeds() (rssFeedItemList, error) {\n\trequests := widget.FeedRequests\n\n\tjob := newJob(widget.fetchItemsFromFeedTask, requests).withWorkers(30)\n\tfeeds, errs, err := workerPoolDo(job)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"%w: %v\", errNoContent, err)\n\t}\n\n\tfailed := 0\n\tentries := make(rssFeedItemList, 0, len(feeds)*10)\n\tseen := make(map[string]struct{})\n\n\tfor i := range feeds {\n\t\tif errs[i] != nil {\n\t\t\tfailed++\n\t\t\tslog.Error(\"Failed to get RSS feed\", \"url\", requests[i].URL, \"error\", errs[i])\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, item := range feeds[i] {\n\t\t\tif _, exists := seen[item.Link]; exists {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tentries = append(entries, item)","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/glanceapp/glance/blob/91324e8de762702e97b0ac5c8e36271d644d8642/internal/glance/widget-rss.go#L140-L176","documentation":"Returned by rssWidget.fetchItemsFromFeeds (internal/glance/widget-rss.go:158) when the worker pool itself failed before any feed was fetched (workerPoolDo returned err). This is infrastructure-level: the pool could not be started or panicked — distinct from per-feed errors 135, which are counted individually. Wrapped in errNoContent, so the RSS widget renders empty.","triggerScenarios":"workerPoolDo returns a non-nil third return value: job scheduling failure or a panic recovered from a worker before results are collected. Per-feed HTTP/parse failures do NOT produce this error (they go to the errs slice); only a pool-wide failure does.","commonSituations":"Essentially an internal failure mode — a Glance bug or runtime-level issue (e.g., panic in fetchItemsFromFeedTask). Users almost always see 135/136 instead; encountering 134 alone suggests reporting upstream.","solutions":["Restart Glance — pool startup failures are transient runtime states","Update Glance to the latest version in case the panic/failure was fixed","Report upstream with the wrapped %v detail and your feed list if it reproduces","Confirm the widget config is a valid list of feed URLs (config problems normally fail earlier)"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"if _, err := widget.fetchItemsFromFeeds(); err != nil && errors.Is(err, errNoContent) {\n    // pool-level failure (not per-feed): restart/retry; report if persistent\n}","preventionTips":["Treat this rare pool-level error as a restart-and-report signal","Keep Glance updated for worker-pool fixes","Per-feed problems surface as errPartialContent (135), not this"],"tags":["rss","worker-pool","internal"],"backgroundTag":null,"analyzedSha":"91324e8de762702e97b0ac5c8e36271d644d8642","analyzedAt":"2026-08-15T14:12:54.279Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}