chore(release): v1.4.38.4

Self-healing stale-shell after every deploy. New `<VersionPoller>`
client component proactively polls `/api/version` and triggers an
SW-unregister + cache wipe + hard reload when the server moves
ahead of the running shell. SW `CACHE_VERSION` now keys to the
release tag so the precached chunk graph from the previous deploy
is dropped on next SW install.

See CHANGELOG.md.
This commit is contained in:
Marc-André Bombeck committed 2026-05-18 05:49:49 +02:00
1 parent 34a8f081ef
commit d0f8084fb2
1 file changed
+42
+42
View File
@@ -1,5 +1,47 @@
# Changelog
## [1.4.38.4] — 2026-05-18 — Self-healing stale-shell after every deploy
v1.4.38.3 closed the stale-shell case where the user trips
`ChunkLoadError` mid-navigation — but the reload only fired AFTER
the error surfaced. Users sitting on the dashboard or insights
overview rode out the staleness until they clicked something. The
PWA shell could silently drift across several deploys, surfacing
nothing visible to the user until a click happened to lazy-load a
missing chunk.
### Added
- **`<VersionPoller>` client component** mounted inside
`<Providers>`. Polls `/api/version` every 60 s. If the live
version moves ahead of the shell-baked version it unregisters
every active service worker, wipes CacheStorage, and triggers
`window.location.reload()`. `sessionStorage` gates the reload to
once per session so a mid-deploy webhook race that briefly serves
a stale image cannot loop the page.
- **`NEXT_PUBLIC_APP_VERSION`** is now injected from `package.json`
at build time (via `next.config.ts`) so the running shell knows
which release it was built against. Available to any client
component that needs to compare against the live server version.
### Changed
- **Service worker `CACHE_VERSION` now keys to the release tag**
(`v1.4.38.4`). The `activate` step already evicts any cache name
outside the current pair, so bumping the string at release time
guarantees the precached root HTML and the precached
`/_next/static/*` chunks from the previous deploy are dropped on
the next SW install. The string is now part of the release
routine alongside the `package.json` bump.
### Operator notes
- No new migration. No env-var change.
- Coolify auto-deploys main on tag push.
- Users on the pre-v1.4.38.4 shell still need a single manual
refresh to pick up the new poller; from v1.4.38.4 onwards every
future release self-heals.
## [1.4.38.3] — 2026-05-17 — CI green-up, e2e drift fixes, chunk-load auto-recover
Cleans up the three pre-existing CI reds that had been failing on