fix(notifications): honor disabled sound settings - #8355
Conversation
UX Review (Fable 5, fork) — 🟡 CONCERNSUX-level review of I have everything I need. The change is sound (silent native toasts, cross-tab sync, all=none fix, truthful previews), but the new failure branch in UX-Verdict: CONCERNS When a settings save fails, every control in the sound panel silently refuses to move — the panel looks frozen, with zero explanation. Watch
[UX-REVIEWED] 3839ddf |
Design Review (Fable 5, fork) — 🟡 CONCERNSDesign-level review of Design-Verdict: CONCERNS Cross-window sync stops at the playback hook; the settings panel stays stale and can silently clobber another window's saved settings. Watch
Suggestions
[DESIGN-REVIEWED] 3839ddf |
First Principles Review (Fable 5, fork) — ✅ PASSPremise-level review of All verification is done. Every claimed fix maps to a real defect in the base code, First-Principles-Verdict: PASS Every item traces to a named, reproducible defect in the base code, fixed in the single owning mechanism; nothing rides along except a verified dead-guard deletion. What this change shipsIntent: make the user's sound-off settings actually stop notification audio — a FIX.
Electron's updater toasts ( [FIRST-PRINCIPLES-REVIEWED] 3839ddf |
Opus 4.8 Review (fork) — ✅ no blocking findingsReviewed |
GPT 5.6 Review (fork) — ✅ no blocking findingsReviewed Review detailsNo findings. |
Problem / Motivation
Notification sounds can still play after the user disables them. Native OS notifications do not request silent delivery, sound settings are cached per window, failed storage writes can leave the UI showing unapplied state, and the global All = None setting does not override the built-in approval pulse.
Why it matters
A sound-off control must be authoritative. Unexpected notification audio is disruptive, and settings that differ between windows or between the UI and runtime behavior undermine trust in the notification controls.
What changed
silent: true, keeping WebAudio as the single sound source.Coordination note: #7821 rewrites
useNativeNotificationfor service-worker delivery. It does not address these sound-setting bugs; if it lands first, this PR must preservesilent: truein its sharedNotificationOptionsobject during conflict resolution.Tests
npx vitest run src/test/useNotificationSound.test.ts src/test/notificationSilentOptions.test.ts src/test/NotificationsPanel.test.tsx— 53 passednpx tsc -b./scripts/docs-lint.shgit diff origin/main...HEAD --check