v0.2.0
Three gaps a first unattended run found in a real corpus. All three are about the same thing: telling a permanent condition apart from today's news.
A source that cannot be read
body_fetchable = false marks a site that refuses automated retrieval as a standing policy. Previously every must-read from such a source came back unread, and validation — correctly, under the old rule — demanded an anomaly explaining why, every single day. A permanent condition reported as fresh news is noise, and it buries the anomalies that are news.
The run now skips the fetch it knows will fail, and the digest says which of the two applies: not retrieved today, or never will be. That difference is the whole of what a reader can act on.
A source that has stopped
Conditional GET, added in 0.1.0 to be polite, opened a hole: a frozen feed answers 304 forever, the error streak resets on every success, and probably_dead only ever counted errors. Two feeds in a real corpus had last published in 2025 and 2022 and looked perfectly healthy to every signal the tool had. A human caught them by reading timestamps.
Sources now report stale and stale_days against stale_after_days (default 60, per-source override — a quarterly advisory is not dead at 61 days).
A window wider than the feed
When every item a feed served fell inside the collection window, the window outran the feed's reach and there may have been more it never showed. Weaker than a gap — it says cannot tell, not lost — and it fired immediately on the one source the predecessor's README had warned about in prose: a feed that returns five items and loses the rest if you skip a day. That warning is now a signal.
Both new signals go to the operator, not into the digest's caveats. A feed frozen since 2022 is not missing today's news; it has none.
Upgrading
body_fetchable and stale_after_days are new keys in sources.toml. A corpus that uses them requires 0.2.0 — 0.1.0 rejects unknown keys rather than ignoring them.