From 6ec900e4566e327afedba9465bcf8f51a7e0241e Mon Sep 17 00:00:00 2001 From: rays Date: Sun, 13 Sep 2026 13:06:16 +0000 Subject: [PATCH] TODO.md: the errors in the production log Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019Dcx59boh4pasuNwAVU7un --- TODO.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/TODO.md b/TODO.md index 2139787..8bfdf9a 100644 --- a/TODO.md +++ b/TODO.md @@ -1 +1,39 @@ # 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 left `config.toml` about 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_download` falls back to `true` (`src/main.rs:937`). `docs/users.md` says 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 way `sync_group` treats ones the list + dropped: remove those with nothing downloaded, mark the rest orphaned. `remove_feed` and `ipx rm` + both leave them behind today. (`src/main.rs`, `src/web.rs`) +- [ ] **Read feeds with a bare `&`.** kcpw has `https://kcpw.org/?post_type=post&p=125715`, + and both feedland feeds have the same fault. Strict XML refuses them; browsers and other readers do + not. When `feed::parse` fails, 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 (``), 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. A `202` with an empty body (British Antarctic Survey) should read as "nothing yet", not + as a parse failure. (`src/feed.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 now `joanwestenberg.com/feed`. + Nothing for ipx to fix; subscribe to the new URL directly. + +The rest are the publishers' doing: 404 (24 feeds), 403 from sites that refuse anything but a +browser (5), no longer resolving or connecting (7), and one each of 400 (an invite-only Substack), +401 (a site gone private) and 402 (an expired rss.app trial). Once the first item lands, all of them +but Westenberg stop being scanned. + +After these: `cargo test`, `node tests/page-smoke.js`, `npx playwright test`.