fix: DJ speed control, captive portal ClearPass, TTS, @@ handle
- audio: speed control now in audio callback with linear interpolation
instead of broken resampler approach — scratching actually works
- audio-decode: allow negative speed (-4 to +4), init ring_frac,
decoder always decodes at 1x (speed applied at playback)
- wifi: add ClearPass cmd=authenticate strategy for Getty portals,
add POST with accept params, add -k flag for HTTPS portals
- dj.mjs: TTS was calling tts.speak() but API exposes sound.speak()
— replaced all tts refs with sound.speak via say() helper
- ac-os: strip @ prefix from handle to prevent @@jeffrey double prefix
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>