Originally created by: athanclark
Closes [#473], closes [#510], closes [#521]. Refs [#514] (two images left).
#473: public pages can be cached.
/for, help pages, profiles, and a timeline's page and its events.Cache-Control: public, s-maxage=60, stale-while-revalidate=300 and Vary: Cookie.private, no-store: anything with a session cookie or an Authorization header, router-payload (RSC) requests and 5xx responses.server/shared-cache.mjs decides, platform/proxy.js sets the header, and server/shared-response.cjs (prepended to the standalone server) keeps RSC requests private and appends Cookie to Next's Vary.docs/administration.md gets a "Reverse proxy, page caching and page speed" section, with an nginx cache sample and how to measure Core Web Vitals.#521: nginx's version is hidden. The NixOS module sets serverTokens = mkDefault false, and its VM test checks the Server header is just nginx. The documented nginx sample has server_tokens off.
#510: the hosted offline copy changes only on stable releases.
pages.yml becomes a reusable workflow, called by a new pages job in release.yml, or run by hand with a release tag. It no longer runs on every push to main.docs/guest-editing.md explains the shared github.io origin and recommends the downloaded file plus SHA256SUMS.txt.#514: pins.
test/ci-workflows.test.mjs checks that every build uses the same fixed Rust and that no image floats on latest.postgres:16-bookworm (it would conflict with [#527]) and archlinux:latest (there's no dated tag to pin to). Both are noted on [#514].After merging:
🤖 Generated with Claude Code
Tickets: #473
Tickets: #510
Tickets: #514
Tickets: #521
Tickets: #527
Ticket changed by: athanclark