diff --git a/scripts/gen_landing.py b/scripts/gen_landing.py index 0c9ca0a..6b10cc3 100755 --- a/scripts/gen_landing.py +++ b/scripts/gen_landing.py @@ -24,7 +24,8 @@ # record's `source_date_epoch`, else an em dash — never a filesystem timestamp — so # a second render of the same inputs is byte-identical (a NOOP republish never # manufactures a commit) — except that the page footer carries the render year, so -# the first render of each new year rewrites every page once. +# the first render of each new year rewrites every page once. The footer's +# `Site updated` time is the newest package Published epoch, so it moves only on a publish. # # Stdlib only + the `zstd` binary (to read a .pkg's +COMPACT_MANIFEST). Dev-only # tooling — not shipped in release archives (those contain only src/). @@ -537,9 +538,20 @@ def _site_header(root: str) -> str: ) -def _site_footer(root: str) -> str: +def _site_footer(root: str, updated: float | None = None) -> str: """The main site's footer. The year is the render year: the one render after - New Year changes the page, every other re-render stays byte-identical.""" + New Year changes the page, every other re-render stays byte-identical. + ``updated`` is the newest package publish epoch in the tree (issue #3485), never the + render clock, so a re-render without a publish stays byte-identical.""" + # Same text and datetime format as the main site's footer (site/dist), so both sites match. + site_updated = ( + " · Site updated " + + f'" + if updated is not None + else "" + ) year = datetime.now(timezone.utc).year return ( '