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"))