From 8c028c9e10137751ed84be53c5e5552110777505 Mon Sep 17 00:00:00 2001 From: JJ Lee Date: Fri, 21 Aug 2026 14:09:47 +0200 Subject: [PATCH] =?UTF-8?q?fix(app):=20devtools=20toggle=20stuck=20ON=20?= =?UTF-8?q?=E2=80=94=20persist=20enabled=20state=20bidirectionally?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The developer tools toggle was stuck in the ON position because: 1. The default for developer.enabled was true (always showed ON) 2. Toggling OFF never persisted false to the store 3. Kobalte's controlled Switch always reflected the stale true value 4. Every click triggered onChange(false) but the visual never changed Fix: default to false, and persist both true/false so the controlled component reflects reality. The toggle now works bidirectionally: ON triggers rebuild, OFF restores marketplace and reloads. Companion: harmoniqs/amicode#489 --- .../settings-v2/developer-tools-controller.ts | 10 ++-------- packages/app/src/context/settings.tsx | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/app/src/components/settings-v2/developer-tools-controller.ts b/packages/app/src/components/settings-v2/developer-tools-controller.ts index 9813b8c42..12a6e867b 100644 --- a/packages/app/src/components/settings-v2/developer-tools-controller.ts +++ b/packages/app/src/components/settings-v2/developer-tools-controller.ts @@ -161,20 +161,14 @@ export function createDeveloperToolsController() { settings.developer.setAmicodePath(DEFAULT_AMICODE_PATH) } } - // Don't persist enabled=false — the marketplace build doesn't render - // Developer Tools at all, and persisting false prevents the dev build - // from showing it after a bash-script bootstrap without toggle interaction. + settings.developer.setEnabled(value) if (value) { - settings.developer.setEnabled(value) // Toggle ON: trigger a full rebuild (shows "Rebuilding..." status) rebuild("local") } else { - // Toggle OFF: show switching status, then the extension restores + reloads. - // Don't persist false — the reload brings up the marketplace build which - // doesn't have this section anyway. + // Toggle OFF: restore marketplace build and reload. setRebuildState("rebuilding") setRebuildError(undefined) - // Send enabled=false explicitly (can't rely on the signal since we didn't persist it) if (!inAmicode()) return setPending(true) setStatus(undefined) diff --git a/packages/app/src/context/settings.tsx b/packages/app/src/context/settings.tsx index 25fb8be84..299cbc270 100644 --- a/packages/app/src/context/settings.tsx +++ b/packages/app/src/context/settings.tsx @@ -216,7 +216,7 @@ const defaultSettings: Settings = { configDir: "", }, developer: { - enabled: true, + enabled: false, opencodePath: "", amicodePath: "", },