Skip to content

v0.48.0 — `add` actually adds

Choose a tag to compare

@ralyodio ralyodio released this 13 Aug 11:45
0c1ce82

/rss add https://example.com/feed.xml did nothing, and said nothing about it. The reader read every argument it was given as a search phrase, so that command opened a reader on the literal text "add https://example.com/feed.xml", matched no headline, and exited zero. add only ever existed on /news. Every verb that manages a subscription now works under either name, and they run without a terminal, because they print and exit rather than draw.

Subscribing is not much use without something to subscribe to, so the published feed lists become a catalogue you search rather than a thing you import:

/rss search rust,compilers    find feeds across every published list
/rss add 3                    subscribe to the third result
/news add profullstack        pull in a whole list
/news rm profullstack         take that list back out in one go
/news lists                   what is on offer, and what you have

Kagi's Small Web is in there — 32,968 feeds. That is a fine thing to search and an impossible thing to subscribe to: importing it would write a 33,000-entry news.opml and then try to fetch every one of them on the next /news. It is marked search-only and refuses a wholesale import. Which list a feed came from rides in the OPML folder rather than a file of our own, so a list stays removable as a unit even after a round trip through a different reader.

Searching 33,000 hostnames turns out to be the whole problem. Substring matching answered rust with Trust Machines, Trustnodes, frustrat.com and popthruster.com. Requiring the keyword to start a word fixed that and then found nothing at all for homelab, because the lists carry hostnames and the blog is called myhomelab.net. Sorting each list separately and concatenating put every weak match from a small list above every exact match from a large one, purely because of fetch order. So matches are scored — whole word, then start of a word, then anywhere — and sorted once across the merged results. /rss search rust now opens with rust.christina-quast.de and rustgeek.me.

Google News is gone, from the defaults and from search. Its item links were measured four ways and none of them reach the article:

route result
HEAD / redirect 302 whose location is the same URL plus locale, then 200 on a Google page
base64 path segment decodes to a protobuf holding an opaque AU_yqL… token, no URL
full GET 600KB Angular shell — the redirect is client-side, target not in the HTML
internal batchexecute 429 Too Many Requests on the first unauthenticated call

Their <description> is an <ol><li><a href=…> list of more Google links rather than a summary. So these were headlines that could be neither opened nor read, and six of the thirteen default feeds were made of them. They are dropped in collectNews, which covers /news and the /rss reader alike, and the desks they covered are named publishers now — NPR, BBC, the Guardian, ScienceDaily, Phys.org, each fetched and confirmed to return items. Search keeps Bing, which was always the half that carried a real publisher URL and a real summary.

The profullstack blogs are read out of the box, from profullstack.com/feeds.opml. It is the one published list small enough to be a default.

Full changelog: v0.47.0...v0.48.0