diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-09-11 13:57:44 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-09-11 13:57:44 +0200 |
| commit | 7adbf5163f0193d80bb5578dc875eba811f864bb (patch) | |
| tree | 95b6fc62835536a41f1fc47e646e904b27f9a042 /CLAUDE.md | |
| parent | 4b74ff3fc54f35fbc41d9c0f7d2b4ec89475154a (diff) | |
| download | meshbay-7adbf5163f0193d80bb5578dc875eba811f864bb.tar.gz | |
fix(hub): the asset fingerprint covers every file under static/
Everything under static/ is served at /a/<hash>/ 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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D9MCBBWSm9GhBESmqzJxNy
Diffstat (limited to 'CLAUDE.md')
| -rw-r--r-- | CLAUDE.md | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -549,7 +549,11 @@ do. Read them before writing anything that touches the same mechanism. fix can be written, tested, deployed, served and still not be what runs, which is indistinguishable from a fix that does not work. The whole module graph is now served under `/a/<content-hash>/` so relative imports inherit the prefix and - no cache can serve yesterday's build or half of each. `test_asset_versioning.py` + no cache can serve yesterday's build or half of each. The hash covers every file + under `static/`: it once covered a hand-kept list of top-level modules, the + catalogues were not on it, and a heading rewritten only in `en.js` stayed on a + phone after the deploy — immutable for a year at a URL that had not moved. + `test_asset_versioning.py` - **Redeploying during someone else's test destroys the evidence.** A node deploy restarts the daemon, which kills every live WebRTC session — the tester sees @@ -664,7 +668,7 @@ here are kept only where they are a rule about *editing* the code. | Groups, membership, presence, public-group quota | `meshbay_hub/api/groups.py` | §7.3 | | Admin API, instance policy, moderation | `meshbay_hub/api/admin.py`, `hub.py` | §7.4, §7.5 | | Notifications, federation, relays, reports | `meshbay_hub/api/notifications.py`, `federation.py`, `relay.py`, `moderation.py` | §7.6 | -| Asset versioning | `meshbay_hub/api/webapp.py` — `_asset_version()`, `_ASSETS` | the whole module graph is served under `/a/<hash>/`. **A new static file must be added to `_ASSETS`** | +| Asset versioning | `meshbay_hub/api/webapp.py` — `_asset_version()` | the whole module graph is served under `/a/<hash>/`, and the hash covers **every file under `static/`**, subdirectories included — nothing to register | | Token lifetimes | `meshbay_hub/config.py` — `[jwt]` | 4 h access, 30 days refresh. **Production sets both in `~/.config/meshbay/hub.toml`** — changing the code default alone does nothing there | ### Browser / desktop UI (`meshbay_hub/static/`) |