From 1353bea7e15f1250a0fa38d432cbce4695b7e575 Mon Sep 17 00:00:00 2001 From: iris Date: Sat, 12 Sep 2026 01:05:30 +0200 Subject: [PATCH] swarm-ui: PWA follow-ups from review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - manifest.webmanifest: mara — "name should be hyperhive", was "hyperhive swarm". - sw.js: argus — cache-write path didn't check response.ok before caching; an error response would get served back as if it were the real asset on the next offline/failed fetch. --- frontend/packages/swarm-ui/src/manifest.webmanifest | 2 +- frontend/packages/swarm-ui/src/sw.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/frontend/packages/swarm-ui/src/manifest.webmanifest b/frontend/packages/swarm-ui/src/manifest.webmanifest index 83a6bfc8..d62d6ecc 100644 --- a/frontend/packages/swarm-ui/src/manifest.webmanifest +++ b/frontend/packages/swarm-ui/src/manifest.webmanifest @@ -1,5 +1,5 @@ { - "name": "hyperhive swarm", + "name": "hyperhive", "short_name": "swarm", "description": "Swarm-level operator UI — agent roster, hives, jobs, issues across the swarm.", "start_url": "/", diff --git a/frontend/packages/swarm-ui/src/sw.js b/frontend/packages/swarm-ui/src/sw.js index 4728640f..2368a12e 100644 --- a/frontend/packages/swarm-ui/src/sw.js +++ b/frontend/packages/swarm-ui/src/sw.js @@ -100,8 +100,14 @@ self.addEventListener("fetch", (event) => { event.respondWith( fetch(event.request) .then((response) => { - const copy = response.clone(); - caches.open(CACHE_NAME).then((cache) => cache.put(event.request, copy)); + // Only a genuinely good response is worth caching — an error + // response (a 404/500, or a proxy hiccup wearing a 2xx-adjacent + // status) would otherwise get served back as if it were the real + // asset on the next offline/failed fetch. + if (response.ok) { + const copy = response.clone(); + caches.open(CACHE_NAME).then((cache) => cache.put(event.request, copy)); + } return response; }) .catch(() => caches.match(event.request)),