From 7adbf5163f0193d80bb5578dc875eba811f864bb Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Fri, 11 Sep 2026 13:57:44 +0200 Subject: fix(hub): the asset fingerprint covers every file under static/ Everything under static/ is served at /a// with a year's `immutable`, but the hash was computed from a hand-kept list of 43 top-level modules. The ten catalogues and vendor/ were not on it, nor was anything the guarding test could see: it globbed *.js at the top level only. A change confined to the catalogues therefore kept the hash, and a phone went on showing a heading that had been rewritten and deployed - pull-to-refresh fetched the no-store shell, which was current, and never refetched en.js at a URL that had not moved. The fingerprint now hashes every file under static/, path and content, so a change, a rename or a new file moves the version with nothing to register. _ASSETS is gone, and CLAUDE.md, MESHBAY_DESIGN.md 9.4 step 6, assets/brand/README.md and docs/playlists.md no longer ask for it. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01D9MCBBWSm9GhBESmqzJxNy --- assets/brand/README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'assets') diff --git a/assets/brand/README.md b/assets/brand/README.md index b673589..1b37292 100644 --- a/assets/brand/README.md +++ b/assets/brand/README.md @@ -22,11 +22,10 @@ convert assets/brand/meshbay-M-transparent.png \ - `-resize x72` is 72 px tall for a picture displayed at 30 px — enough for a 2× screen, and 56 KB becomes 10 KB. -The derived file is listed in `_ASSETS` in `meshbay_hub/api/webapp.py`. It has -to be: that list is what the `/a//` fingerprint is computed from, so a -file missing from it is a file whose change never moves the URL, and a browser -holding the old one never asks again. Regenerate the picture, and the wordmark -changes for everyone; forget the list, and it changes for nobody. +The derived file lives under `static/`, and every file there feeds the +`/a//` fingerprint (`_asset_version()` in `meshbay_hub/api/webapp.py`): +regenerate the picture and the URL moves, so the wordmark changes for everyone +without anything to register. The M is a picture standing in for the letter M; `eshBay` beside it is text. Their sizes are set independently in `style.css` — `.nav-brand { font-size }` -- cgit v1.2.3