- AudioAssistStateMachine (core/audio, pure, tested): proximity bands
with enter/exit hysteresis (close 1.0/1.2, near 3.0/3.4 degrees),
cadence preserved across band changes (no threshold double-ping),
lock cue driven solely by LockDetector's fireFeedback transition -
no second lock threshold, and the haptic debounce paces the ping.
- Silence gates: disabled, backgrounded, settling, invalid placement,
or outside FACE_UP all reset and mute; all five unit-tested.
- SonarSoundPool: locally synthesized WAV pings via SoundPool with
USAGE_ASSISTANCE_SONIFICATION; zero audio-focus APIs (verified by
grep); player exists only while enabled and resumed, released on
composition disposal.
- Persisted SONAR ON/OFF header control using the existing
audioCueEnabled preference; off by default; state shown as text,
never color alone.
- Guidance slot fixed at 56dp so settling/correction/level copy no
longer shifts the instrument (Slice 4 polish note).
59 tests passing.
Audited-by: Claude (no findings)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>