From 568d5c4b0e1e6dd2f6a7193548c0d9f4c93f42dd Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Sat, 4 Jul 2026 01:15:26 +0000 Subject: [PATCH] gate-fix #5480: suppress 'unknown' server version (case-insensitive) to prevent false banner MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Codex gate: _normalizeWebUIVersion suppressed empty/__WEBUI_VERSION__/'not detected' but NOT 'unknown' — api/updates.py emits WEBUI_VERSION='unknown' on git-describe failure (Docker/CI images), so a real client version would falsely fire the stale-client banner against server='unknown'. Suppress 'unknown' (+ case-insensitive for all sentinels). + regression test asserting unknown/UNKNOWN/Unknown don't fire. --- static/panels.js | 9 ++++++++- tests/test_5428_stale_client_recovery.py | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/static/panels.js b/static/panels.js index 19201fbf..ac8390e8 100644 --- a/static/panels.js +++ b/static/panels.js @@ -2302,7 +2302,14 @@ async function hardRefreshWebUIClient(){ function _normalizeWebUIVersion(value){ if(!value) return ''; const s=String(value).trim(); - if(!s||s==='__WEBUI_VERSION__'||s==='not detected') return ''; + if(!s) return ''; + // Suppress placeholder / non-version sentinels (case-insensitive) so a real + // client version never "mismatches" against a server that couldn't detect its + // own version. api/updates.py can emit 'unknown' (git describe failure in a + // Docker/CI image); comparing a real version against 'unknown' would FALSELY + // fire the stale-client banner. (Codex #5480 gate) + const lower=s.toLowerCase(); + if(lower==='__webui_version__'||lower==='not detected'||lower==='unknown') return ''; return s; } diff --git a/tests/test_5428_stale_client_recovery.py b/tests/test_5428_stale_client_recovery.py index 33a2a76f..7a14f41b 100644 --- a/tests/test_5428_stale_client_recovery.py +++ b/tests/test_5428_stale_client_recovery.py @@ -177,6 +177,22 @@ def test_node_missing_server_version_no_banner(): assert result["display"] != "flex", f"Banner wrongly shown for missing server version: {result}" +def test_node_unknown_server_version_no_banner(): + """A server that reports webui_version='unknown' (git-describe failure in a + Docker/CI image, api/updates.py) must NOT falsely fire the stale-client + banner against a real client version. (Codex #5480 gate)""" + helpers = _extract_skew_helpers(PANELS_JS.read_text(encoding="utf-8")) + for server_val in ("unknown", "UNKNOWN", "Unknown"): + result = _run_harness( + _make_stub("v1"), + helpers, + f'checkWebUIVersionSkew({{ webui_version: "{server_val}" }});', + ) + assert result["display"] != "flex", ( + f"Banner wrongly shown for server version {server_val!r}: {result}" + ) + + def test_node_placeholder_client_version_no_banner(): """Unresolved __WEBUI_VERSION__ literal as bundle stamp keeps banner hidden.""" helpers = _extract_skew_helpers(PANELS_JS.read_text(encoding="utf-8"))