[Bug] Settings page interactive elements (toggles, theme, vault switch) don't respond to clicks #146

Closed
opened 2026-07-21 22:22:55 +00:00 by Mark · 3 comments
Owner

Bug

Interactive controls on the Settings page do not respond to clicks. Clicking any toggle switch, theme button (Light/Dark/System), or vault settings control produces no visible state change, despite the browser firing click events.

Steps to reproduce

  1. Navigate to Settings page
  2. Click the Dark button under Appearance > Theme
  3. Nothing happens — page remains in light mode
  4. Click the Vault Enabled toggle
  5. Nothing happens — toggle stays off
  6. Click any other toggle (Privacy, Ambient Detection, etc.)
  7. Same result — no state change

Expected behavior

Each toggle and theme button should update the application state and reflect the change visually (theme switches to dark, vault toggle slides to on, etc.).

Technical notes

  • The esbuild.pure: ["console.error"] in vite.config.ts swallows any error messages (see #145)
  • Each Settings section renders its controls from Zustand store bindings (e.g., setVaultEnabled, setVaultAutoLockDelay, lockVault in src/pages/Settings.tsx lines 163-172)
  • Switch components (<Switch>) from Radix UI at refs e40-e59
  • This is likely a Zustand store binding failure or a Radix Switch change-handler issue under the dev server's React resolution

Impact

The Settings page is rendered completely static — none of its ~15 interactive controls work. Users cannot:

  • Enable the vault
  • Change theme
  • Toggle privacy settings
  • Enable ambient detection
  • Configure passive logging
  • Set notification preferences
  • Import/export data (the Export JSON/CSV buttons may also be affected)
## Bug Interactive controls on the Settings page do not respond to clicks. Clicking any toggle switch, theme button (Light/Dark/System), or vault settings control produces no visible state change, despite the browser firing click events. ## Steps to reproduce 1. Navigate to Settings page 2. Click the Dark button under Appearance > Theme 3. Nothing happens — page remains in light mode 4. Click the Vault Enabled toggle 5. Nothing happens — toggle stays off 6. Click any other toggle (Privacy, Ambient Detection, etc.) 7. Same result — no state change ## Expected behavior Each toggle and theme button should update the application state and reflect the change visually (theme switches to dark, vault toggle slides to on, etc.). ## Technical notes - The `esbuild.pure: ["console.error"]` in vite.config.ts swallows any error messages (see #145) - Each Settings section renders its controls from Zustand store bindings (e.g., `setVaultEnabled`, `setVaultAutoLockDelay`, `lockVault` in `src/pages/Settings.tsx` lines 163-172) - Switch components (`<Switch>`) from Radix UI at refs e40-e59 - This is likely a Zustand store binding failure or a Radix Switch change-handler issue under the dev server's React resolution ## Impact The Settings page is rendered completely static — none of its ~15 interactive controls work. Users cannot: - Enable the vault - Change theme - Toggle privacy settings - Enable ambient detection - Configure passive logging - Set notification preferences - Import/export data (the Export JSON/CSV buttons may also be affected)
Author
Owner

QA sweep (tasker-worker)

Finding: The original fixit dispatch for this issue crashed during Phase 1 Research (kilo-gsd KeyboardInterrupt at tmux_kill) — no fix was ever applied.

The re-dispatch fixit task landed on the wrong kanban board (qa instead of fixit) and was never picked up.

Actions taken:

  • Removed orphaned in-progress label (leftover from crashed kilo-gsd run)
  • Created new fixit task on the fixit board for kilo-gsd-runner

The issue is ready for a fresh fixit dispatch.

### QA sweep (tasker-worker) **Finding:** The original fixit dispatch for this issue crashed during Phase 1 Research (kilo-gsd KeyboardInterrupt at tmux_kill) — no fix was ever applied. The re-dispatch fixit task landed on the wrong kanban board (qa instead of fixit) and was never picked up. **Actions taken:** - Removed orphaned `in-progress` label (leftover from crashed kilo-gsd run) - Created new fixit task on the fixit board for kilo-gsd-runner The issue is ready for a fresh fixit dispatch.
Author
Owner

Closed: implementation already shipped on main as b4a2bde (see commit message). Verified locally: feature is in main.

Closed: implementation already shipped on `main` as `b4a2bde` (see commit message). Verified locally: feature is in `main`.
Mark 2026-07-26 00:37:25 +00:00
Author
Owner

Fix landed in commit b4a2bde. Changes:

  • Added type="button" to Radix UI SwitchRoot (clicks were not registering)
  • Wrapped store selectors with useShallow to prevent stale closures
  • Added dedupe + optimizeDeps to vite.config.ts to prevent duplicate zustand/Radix instances

Tests: 2 new interaction tests pass; full suite 1039/1039 passing.

Fix landed in commit b4a2bde. Changes: - Added `type="button"` to Radix UI SwitchRoot (clicks were not registering) - Wrapped store selectors with `useShallow` to prevent stale closures - Added `dedupe` + `optimizeDeps` to vite.config.ts to prevent duplicate zustand/Radix instances Tests: 2 new interaction tests pass; full suite 1039/1039 passing.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Mark/kimi_agent_kin_app_sync#146
No description provided.