Halve child-feed indent; update TODO with error-log findings

The Patreon/OPML group indent (44px) read as too deep; 22px still
reads as nested without eating that much row width.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Tk3nAVF6n4dtjQS17FRFr
This commit is contained in:
2026-09-14 20:45:55 +00:00
parent e38e3c563c
commit 8d84f9fe8c
2 changed files with 16 additions and 16 deletions

30
TODO.md
View File

@@ -2,22 +2,22 @@
## Errors in the log
- [ ] **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.
Checked production on 2026-09-14: 76 of 1,102 feeds carry a stored error. 55 are stale entries on
the `davewiner` OPML's derived feeds, from before it left `config.toml` -- confirmed that fix is
actually working: those feeds stopped being scanned six hours ago and the old error text was just
never cleared. Of the rest, everything with a subscriber classifies cleanly through
`explain_failure` (404, 401/403, DNS gone, a web page in place of the feed) except one:
## Icons
- [x] **Audit the icon set for consistency.** Checked every glyph in `ICON` (`web/index.html`)
against its source, weight, sizing, and every place it's used — both the `${ICON.x}` template
calls and the `data-icon="x"` lookups the startup loop wires up (`web/index.html:713`). Found one
real problem: `minus`, a bare uncircled minus glyph, was defined but never referenced anywhere;
`circleMinus` already covers the one place a minus-shaped icon is used (Unsubscribe). Removed it.
Everything else checked out: `flag`'s regular weight against `flagOn`'s solid is the standard
outline/filled toggle idiom, not a mismatch; icon sizing is one shared 16px base rule with three
narrowly-scoped overrides; `caret` is deliberately reused (not duplicated) for both the folder
triangle and the sort arrow, rotated correctly per context; play/pause swapping is symmetric.
(`web/index.html`)
- [ ] **Explain a feed that fails to parse, not just one that fails to fetch.** `explain_failure`
(`src/feed.rs:107`) turns an HTTP status or a DNS failure into a plain-English reason, but a feed
that comes back 200 and then fails to parse as RSS or Atom falls through to `None` -- no reason,
no suggested fix, ever, even after it has failed for a day. `doghouse`
(`http://feeds2.feedburner.com/thedoghousediaries/feed`) is failing that way right now: "not RSS
(reached end of input without finding a complete channel) and not Atom (unexpected end of
input)" -- could be a permanently broken feed or a publisher that occasionally truncates the
response; either way, once `FLAG_AFTER_SECS` (`src/web.rs:508`) passes a subscriber gets nothing
in the sidebar, unlike every other failure class. Add a generic "this feed isn't coming back
clean" reason for the parse-failure case, same as the others get. (`src/feed.rs`)
## Directory Overhaul