From e709413157255a6174eed6b4194a0c1f6fa4dcb7 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 25 Jul 2026 09:42:57 +0000 Subject: [PATCH] Send Cache-Control: no-store with the dashboard page The UI is inlined in app.py, so an upgrade changes the HTML behind a URL that never changes and carried no cache headers. A browser holding the previous page after an update is indistinguishable from the update having failed. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01NAddJGE1G6eGaPzmScG5Vh --- services/security-dashboard.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/security-dashboard.sh b/services/security-dashboard.sh index ccd18b9..18d11d8 100644 --- a/services/security-dashboard.sh +++ b/services/security-dashboard.sh @@ -3789,6 +3789,11 @@ class Handler(BaseHTTPRequestHandler): self.send_response(status) self.send_header("Content-Type", "text/html; charset=utf-8") self.send_header("Content-Length", str(len(body))) + # The page is inlined into this file, so a dashboard update changes + # the HTML at a URL that never changes. Without this a browser can + # keep serving the previous UI after an upgrade, which looks exactly + # like the upgrade having silently failed. + self.send_header("Cache-Control", "no-store, must-revalidate") self.end_headers() self.wfile.write(body)