a distraction free minimalist rss reader

fix: fetches should follow good-citizen polcies #16

Closed zaphar.bsky.social
targeting main from follow-frb-guidelines
Closed opened by and assigned to zaphar.bsky.social
targeting main from follow-frb-guidelines

Add the shared vocabulary for the polite-fetch subsystem (fetch-policy.md, interfaces.md §3a):

  • FeedStatus::Dead, the terminal permanent-gone state (+ is_dead()).
  • Feed politeness fields: enabled, etag, last_modified, advertised_min, freshness_until, retry_after_until.
  • Seam types: ConditionalCtx, HttpMeta, FetchOutcome, RefreshTrigger, FeedSchedule.
  • Pure feed_eligible(schedule, now, trigger): the max(...) politeness floor; Dead never eligible; advisory floors self-heal; unparseable now fails closed.
  • Pure backoff_delay(attempt, base, cap, jitter01): full jitter via a caller-supplied fraction, keeping domain rand-free.
  • Config: retry_count default 5->3, new retry_base_secs/retry_cap_secs.

chrono added (no clock feature) for the pure date arithmetic. +10 unit tests.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Commits 0