diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-16 00:21:16 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-16 00:21:16 +0200 |
| commit | aa63cae5f004fc4d01471561404d59360784b784 (patch) | |
| tree | 0599e517f3501435b345a731e839b0f977df0a1f /packages/meshbay-node/src/meshbay_node/chat/store.py | |
| parent | 3b2d03a919e56d14f8097844b97b844ddf526cd6 (diff) | |
| download | meshbay-aa63cae5f004fc4d01471561404d59360784b784.tar.gz | |
fix(hub): revalidate static assets so a split SPA version cannot load
The SPA became a module graph that has to agree with itself: app.js
imports i18n.js, which imports a catalogue from locales/. Serving one of
them from cache while fetching another is not a stale page, it is a broken
one, and both directions were reproduced:
- a browser holding the previous i18n.js fails to *link* the new app.js
("does not provide an export named 'initLocale'"). That happens before
any code runs, so the fallback in the boot cannot catch it — blank page.
- the reverse pairing links and renders, but nothing calls initLocale(),
so every string comes out as its own key: nav.logout, group.tab_files.
Starlette sends only etag and last-modified, and with no explicit
freshness a browser is entitled to guess one — roughly 10% of the age
since last-modified, which is comfortably long enough to catch a deploy.
Caddy is a plain reverse proxy and adds nothing.
`no-cache` does not disable caching; it requires a conditional request,
which the existing ETag answers with a 304 and no body. Measured: 304,
0 bytes, on every static path.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/chat/store.py')
0 files changed, 0 insertions, 0 deletions