From a00207d86ec3ad8b4cdc707fd71314d0d5deb1a5 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Tue, 14 Jul 2026 03:19:06 +0800 Subject: [PATCH] fix: keep command-line debug session-only --- frontend/src/App.svelte | 2 +- frontend/src/lib/log/debug.js | 6 ++++-- frontend/tests/debug-mode-test.mjs | 32 ++++++++++++++++++++++++++++++ scripts/test.sh | 4 ++++ 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 frontend/tests/debug-mode-test.mjs diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 35f718e..242c0d3 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -219,7 +219,7 @@ const settings = await App.GetAppSettings(); debug.log('[App] checkVault: GetAppSettings returned', settings); flog('checkVault: GetAppSettings returned'); - if (settings?.debug) debug.enable(); + if (settings?.debug) debug.enable({ persist: false }); debug.log('[App] checkVault: calling GetVaultStatus...'); vaultStatus = await App.GetVaultStatus() || { status: 'unknown', path: '', vaultId: '' }; diff --git a/frontend/src/lib/log/debug.js b/frontend/src/lib/log/debug.js index de32608..75e8f52 100644 --- a/frontend/src/lib/log/debug.js +++ b/frontend/src/lib/log/debug.js @@ -127,9 +127,11 @@ export var debug = { log: log, logf: logf, isEnabled: function () { return ENABLED; }, - enable: function () { + enable: function (options) { ENABLED = true; - try { localStorage.setItem('verstak-debug', 'true'); } catch (e) {} + if (!options || options.persist !== false) { + try { localStorage.setItem('verstak-debug', 'true'); } catch (e) {} + } }, disable: function () { ENABLED = false; diff --git a/frontend/tests/debug-mode-test.mjs b/frontend/tests/debug-mode-test.mjs new file mode 100644 index 0000000..9dcbf01 --- /dev/null +++ b/frontend/tests/debug-mode-test.mjs @@ -0,0 +1,32 @@ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import vm from 'node:vm'; + +const source = fs.readFileSync(path.resolve('frontend/src/lib/log/debug.js'), 'utf8'); +const values = new Map(); +const localStorage = { + getItem(key) { return values.has(key) ? values.get(key) : null; }, + setItem(key, value) { values.set(key, String(value)); }, + removeItem(key) { values.delete(key); }, +}; +const context = vm.createContext({ + console: { log() {} }, + localStorage, + window: { location: { search: '' } }, +}); +const module = new vm.SourceTextModule(source, { context, identifier: 'debug.js' }); +await module.link(() => { throw new Error('debug.js must not import modules'); }); +await module.evaluate(); + +const { debug } = module.namespace; +debug.enable({ persist: false }); + +assert.equal(debug.isEnabled(), true, 'session debug should enable diagnostics'); +assert.equal( + localStorage.getItem('verstak-debug'), + null, + 'a --debug session must not make diagnostics persist into ordinary launches', +); + +console.log('debug mode smoke passed'); diff --git a/scripts/test.sh b/scripts/test.sh index 8a72ae1..a0e65d5 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -43,6 +43,10 @@ WAILS_BINDINGS_STATUS=0 (cd "$ROOT" && node frontend/tests/wails-bindings-test.mjs) || WAILS_BINDINGS_STATUS=$? report "Wails notification bindings" "$WAILS_BINDINGS_STATUS" +DEBUG_MODE_STATUS=0 +(cd "$ROOT" && node --experimental-vm-modules frontend/tests/debug-mode-test.mjs) || DEBUG_MODE_STATUS=$? +report "session-only debug mode" "$DEBUG_MODE_STATUS" + # ── Frontend tests ── echo "[frontend]" if ensure_npm_deps "$ROOT/frontend"; then