- Stop scanning an OPML/Patreon feed's derived rows once nobody subscribes to it; retire them (drop or orphan) the way sync_group already does when the list itself drops one. This is what let 922 defunct davewiner feeds keep scanning hourly after the OPML left config. - Repair feed XML with a bare `&`, and give a plain reason (moved web page with its new address when linked, or nothing yet for an empty body) instead of a raw parser error. - Show a failing feed's plain-English reason and next step (Unsubscribe / Use the new address) in the sidebar and on its own page, once it has been down a day. - Fix four small UI bugs: show-note links open in a new tab, video files play as video, an opened item no longer disappears from the Unread tab, and Subscribe/Unsubscribe get their own icons. - Fix Settings disappearing for non-admin accounts: it was hiding the whole modal instead of just the admin-only parts (Users, the editable schedule/quota, Save), which are the only parts the server actually refuses them. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DmQfE1eFPApnXWyPHBWqUA
4.4 KiB
4.4 KiB
To do
Errors in the log
From the production log and the feeds' stored errors on 2026-09-13. The Docker log only reached back
to 12:32 UTC, so the list comes from feeds.last_error: 57 of 1,059 feeds. None of it is ipx's
User-Agent; a browser gets the same answers.
- Stop scanning an OPML's feeds once nobody subscribes to it. 55 of the 57 are feeds from
davewiner(lists.opml.org/davefeeds.xml). The list leftconfig.tomlabout 14 hours before this was written, but its 922 feeds are still in the database and still scanned every hour, with auto-download on:subscriptions()adds every derived feed, and with no parent to copy from,auto_downloadfalls back totrue(src/main.rs:937).docs/users.mdsays a feed stops being scanned when its last subscriber leaves. Skip a derived feed whose parent is not in config, and when the last subscriber leaves an OPML, treat its feeds the waysync_grouptreats ones the list dropped: remove those with nothing downloaded, mark the rest orphaned.remove_feedandipx rmboth leave them behind today. (src/main.rs,src/web.rs) - Read feeds with a bare
&. kcpw has<link>https://kcpw.org/?post_type=post&p=125715</link>, and both feedland feeds have the same fault. Strict XML refuses them; browsers and other readers do not. Whenfeed::parsefails, try once more with every&that does not start an entity written as&. Nobody subscribes to these three now, but the next feed like them will fail the same way. (src/feed.rs) - Say what came back when it is not a feed. Thirteen errors read "not RSS (the input did not
begin with an rss tag) and not Atom (...)". Each one checked was a web page: the feed moved and its
old URL redirects to the site, or the domain lapsed. Say "got a web page, not a feed", and when the
page links a feed (
<link rel="alternate" type="application/rss+xml">), name it. That link found the new feed for om.co, ms.now, Letters of Note, the Daily Dot, Hell Gate, The Frame Lab and Daily Kos. A202with an empty body (British Antarctic Survey) should read as "nothing yet", not as a parse failure. (src/feed.rs) - Show a publisher's error in the UI. Today a failing feed shows its raw error in red only
once you open it (
web/index.html:877,:960); the OPML view marks a failing child "error" (:988), and the sidebar shows nothing. Mark a failing feed in the sidebar too, and say whose problem it is and what to do, in plain words: a 404 means the publisher took the feed down or moved it, 401 and 403 that the site refuses ipx, 402 that the feed needs a paid plan, a name that no longer resolves that the site is gone, and a web page instead of a feed that it moved (with the new URL when the page links one). Offer Unsubscribe, or Use the new address. Keep timeouts, 5xx and 429 out of it, and flag a feed only once it has failed for a day: macmanx failed once and read fine an hour later. That needs the time a feed started failing, kept besidelast_errorand cleared when a check succeeds. (web/index.html,src/db.rs,src/main.rs) - Westenberg. The only failing feed anyone subscribes to. The Hacker News stars list still
gives
joanwestenberg.com/rss, which is a 404; the feed is nowjoanwestenberg.com/feed. Nothing for ipx to fix; subscribe to the new URL directly.
Other Fixes and Features
- Remember which feed is selected and view (all, unread, flagged, etc) user as selected between visits. If unknown default to All Subscriptions
- When clicking any link it should open in a new tab
- In mobile (iOS) sometimes the top line items like the hamburger menu are not clickable unless you do a hard refresh
- video files play as audio files, they should play as video.
- Move Light/Dark/Classic options to user settings. Include an Auto mode that uses system preferences for light/dark modes
- Below Popular, have a currently listening section to show what podcasts have been started and not finnished
- Update subscribe/unsubscribe icons to be circle-minus (unsubscribe) and circle-check (subscribe)
- If I'm on the Unread tab, and I click to read an item the entry in the list will disappear. it should remain until I click to another item.
Directory Overhaul
- Directory needs to be more functional, with categories and a more interesting layout. use /frontend-design to help