Previously, pendingPermissions was mutated in-place via .push(), causing
Svelte's reactivity chain to potentially receive the same array reference
and skip re-rendering the PermissionModal. Switching to spread syntax
guarantees a new reference on every update.
Also removed $state() from PermissionModal's local variables to match
the Svelte 4 reactive pattern used by other working components (Terminal),
avoiding rune-mode signal equality short-circuits.
Prevents sounds from re-firing on tab switch and ensures background
tab completions receive their sounds. All sounds now fire from the
claude:state event handler in tauri.ts using per-conversation flags,
with rules.ts retained only for the connection sound.
Closes#172