diff --git a/static/boot.js b/static/boot.js
index da34596b..ae17eb2e 100644
--- a/static/boot.js
+++ b/static/boot.js
@@ -284,9 +284,11 @@ function expandSidebar(){
_syncSidebarAria();
})();
// ── Boot-time tab visibility ────────────────────────────────────────────────
-// Apply hidden tabs from localStorage before first paint. If the active tab
-// is hidden, switch focus to chat. Runs after DOM is ready (unlike theme/skin
-// flash-prevention, tab elements aren't available in
).
+// Apply hidden tabs from localStorage. The primary flash-prevention is an
+// inline
diff --git a/static/panels.js b/static/panels.js
index e30da475..9372cbd6 100644
--- a/static/panels.js
+++ b/static/panels.js
@@ -152,7 +152,6 @@ function _beginSettingsPanelSession() {
_settingsThemeOnOpen = localStorage.getItem('hermes-theme') || 'dark';
_settingsSkinOnOpen = localStorage.getItem('hermes-skin') || 'default';
_settingsFontSizeOnOpen = localStorage.getItem('hermes-font-size') || 'default';
- _settingsHiddenTabsOnOpen = _getHiddenTabs().slice();
_pendingSettingsTargetPanel = null;
if (_settingsAppearanceAutosaveTimer) {
clearTimeout(_settingsAppearanceAutosaveTimer);
@@ -5110,7 +5109,6 @@ let _settingsHermesDefaultModelOnOpen = '';
let _settingsSection = 'conversation';
let _currentSettingsSection = 'conversation';
let _settingsAppearanceAutosaveTimer = null;
-let _settingsHiddenTabsOnOpen = null; // track hidden_tabs at open time for discard revert
let _settingsAppearanceAutosaveRetryPayload = null;
let _settingsPreferencesAutosaveTimer = null;
let _settingsPreferencesAutosaveRetryPayload = null;
@@ -5135,6 +5133,8 @@ function _applyTabVisibility(hidden){
var panel=el.dataset.panel;
if(!panel)return;
var shouldHide=hidden.indexOf(panel)!==-1;
+ // Never hide always-visible panels (chat, settings) even if present in hidden_tabs
+ if(_ALWAYS_VISIBLE_TABS.has(panel)) shouldHide=false;
el.classList.toggle('nav-tab-hidden',shouldHide);
});
// If the currently active tab is hidden, switch to chat
@@ -5342,7 +5342,6 @@ function _rememberAppearanceSaved(payload){
_settingsThemeOnOpen=payload.theme||localStorage.getItem('hermes-theme')||'dark';
_settingsSkinOnOpen=payload.skin||localStorage.getItem('hermes-skin')||'default';
_settingsFontSizeOnOpen=payload.font_size||localStorage.getItem('hermes-font-size')||'default';
- _settingsHiddenTabsOnOpen=Array.isArray(payload.hidden_tabs)?payload.hidden_tabs:[];
}
function _scheduleAppearanceAutosave(){
@@ -6477,7 +6476,6 @@ function _applySavedSettingsUi(saved, body, opts){
_settingsHermesDefaultModelOnOpen=body.default_model||_settingsHermesDefaultModelOnOpen||'';
// Sync window._defaultModel so newSession() uses the just-saved default without a reload (#908).
if(body.default_model) window._defaultModel=body.default_model;
- _settingsHiddenTabsOnOpen=_getHiddenTabs().slice();
if(typeof clearMessageRenderCache==='function') clearMessageRenderCache();
renderMessages();
if(typeof syncTopbar==='function') syncTopbar();
diff --git a/tests/test_sidebar_tab_visibility.py b/tests/test_sidebar_tab_visibility.py
index bd385fe7..3a936e18 100644
--- a/tests/test_sidebar_tab_visibility.py
+++ b/tests/test_sidebar_tab_visibility.py
@@ -102,18 +102,4 @@ def test_i18n_coverage():
assert label_count >= 11, f"Expected ≥11 locales, found {label_count}"
assert desc_count >= 11, f"Expected ≥11 locales, found {desc_count}"
assert label_count == desc_count, \
- f"Label ({label_count}) and desc ({desc_count}) counts must match"
-
-
-def test_settings_session_tracking():
- """Settings open/close lifecycle must track hidden_tabs for discard revert."""
- # _beginSettingsPanelSession snapshots hidden_tabs
- begin_block = PANELS_JS[PANELS_JS.find("function _beginSettingsPanelSession"):]
- begin_body = begin_block[:begin_block.find("\nfunction ", 1) or 2000]
- assert "_settingsHiddenTabsOnOpen" in begin_body
-
- # _applySavedSettingsUi updates the baseline on full save
- apply_block = PANELS_JS[PANELS_JS.find("function _applySavedSettingsUi"):]
- apply_body = apply_block[:apply_block.find("\nfunction ", 1) or 5000]
- assert "_settingsHiddenTabsOnOpen" in apply_body, \
- "_applySavedSettingsUi must update _settingsHiddenTabsOnOpen after full save"
\ No newline at end of file
+ f"Label ({label_count}) and desc ({desc_count}) counts must match"
\ No newline at end of file