From 8d84f9fe8cea7b909c036a563031f5a0e12beb1f Mon Sep 17 00:00:00 2001 From: rays Date: Mon, 14 Sep 2026 20:45:55 +0000 Subject: [PATCH] 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 Claude-Session: https://claude.ai/code/session_019Tk3nAVF6n4dtjQS17FRFr --- TODO.md | 30 +++++++++++++++--------------- web/index.html | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/TODO.md b/TODO.md index 5a53b38..ecbb91c 100644 --- a/TODO.md +++ b/TODO.md @@ -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 diff --git a/web/index.html b/web/index.html index d944de8..51d8e6f 100644 --- a/web/index.html +++ b/web/index.html @@ -174,7 +174,7 @@ input:focus,select:focus{outline:0;border-color:var(--accent)} .feed:hover{background:var(--panel2)} .feed.sel{background:var(--raise)} /* A show sits under its folder's title, a size down, so an open folder reads as one. */ -.feed.child{margin-left:44px} +.feed.child{margin-left:22px} .feed.child .art{width:28px;height:28px;font-size:11px} /* Only a folder has a triangle, hung in the margin so every feed's art lines up with the places above it. The button is the row's full height and 24 px wide: a near miss used to open the