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 --- docs/MESHBAY_DESIGN.md | 7 ++++--- docs/playlists.md | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'docs') diff --git a/docs/MESHBAY_DESIGN.md b/docs/MESHBAY_DESIGN.md index d24d7a9..472d5ab 100644 --- a/docs/MESHBAY_DESIGN.md +++ b/docs/MESHBAY_DESIGN.md @@ -1963,9 +1963,10 @@ There is no folder-browsing protocol and this does not add one. 5. **i18n:** at minimum a tab label key **in all ten catalogues**. A settings key added to the client must be added ten times; write the table and generate the insert. -6. **Add both files to the asset fingerprint list.** A module reached through the - registry is not imported by name anywhere, so nothing else would notice it - changing and a browser would keep serving the cached copy. +6. **Nothing to register for caching.** Every file under `static/` feeds the + `/a//` fingerprint, subdirectories included, so a new or changed module + moves the URL by itself — which matters for a module reached through the + registry, since nothing imports it by name. 7. **Add the file to the test file-set lists** — hook ordering, sticky headers, transport contracts. A file missing from those lists is never checked, which fails silently rather than loudly. diff --git a/docs/playlists.md b/docs/playlists.md index 8e57546..485011a 100644 --- a/docs/playlists.md +++ b/docs/playlists.md @@ -439,7 +439,8 @@ throws on first access, at a point far from the version constant. 1. `playlists.js` (data) and `playlists-page.js` (UI). 2. Route + sidebar entry in `app.js`. -3. `webapp.py`'s `_ASSETS` tuple — both new files. +3. Nothing for caching: every file under `static/` feeds the `/a//` + fingerprint. 4. `test_hook_ordering.py` (`STATIC_FILES`) and `test_transport_contracts.py` (`SPLIT_FILES`) — both new files. 5. i18n keys in all ten `static/locales/*.js`; `test_locales.py` holds them -- cgit v1.2.3