diff --git a/src/rss_generator.py b/src/rss_generator.py index 0ce80f19..76180ff4 100644 --- a/src/rss_generator.py +++ b/src/rss_generator.py @@ -61,28 +61,27 @@ def generate_rss() -> None: ) items = items[:ITEMS_PER_FEED] - # Deterministic build date: derive from the digest's content timestamp - # (_meta.last_updated, the actual analysis date) instead of wall-clock now(). - # Using now() rewrote on every republish, so a regenerated- - # but-unchanged feed still differed between develop and master (perpetual - # cosmetic drift). Mirrors the v2_optimizer pattern that prefers - # _meta.last_updated over file mtime. Falls back to the most recent item - # date, then a fixed constant, so the feed is always a pure function of input. - build_dt = None - meta_updated = digest.get("_meta", {}).get("last_updated", "") - if meta_updated: + # Deterministic build date = the freshest item's content date, so the feed + # is a pure function of its items. (This used wall-clock now() — rewritten on + # every republish — then _meta.last_updated, but that analysis timestamp is + # itself bumped on each publish even when the ranked content is unchanged, so + # the feed still drifted between develop and master. The item dates only move + # when the content actually changes.) Falls back to _meta.last_updated, then + # a fixed constant, only when no item carries a parseable date. + item_dates = [] + for _it in items: try: - build_dt = datetime.fromisoformat(meta_updated) + item_dates.append(datetime.strptime(_it.get("date", ""), "%Y-%m-%d")) except Exception: - build_dt = None - if build_dt is None: - item_dates = [] - for _it in items: - try: - item_dates.append(datetime.strptime(_it.get("date", ""), "%Y-%m-%d")) - except Exception: - pass - build_dt = max(item_dates) if item_dates else datetime(2026, 1, 1) + pass + if item_dates: + build_dt = max(item_dates) + else: + meta_updated = digest.get("_meta", {}).get("last_updated", "") + try: + build_dt = datetime.fromisoformat(meta_updated) if meta_updated else datetime(2026, 1, 1) + except Exception: + build_dt = datetime(2026, 1, 1) build_date = _rfc822(build_dt) lines = [ diff --git a/v2-docs/feed.xml b/v2-docs/feed.xml index 8ba08a17..53f39432 100644 --- a/v2-docs/feed.xml +++ b/v2-docs/feed.xml @@ -5,7 +5,7 @@ https://nubenetes.com/ AI-curated top picks from the Cloud Native & Kubernetes ecosystem en - Sat, 20 Jun 2026 12:42:56 +0200 + Thu, 18 Jun 2026 00:00:00 -0000 Kubecost 🌟