Add session readiness pre-flight to observer startup
Observer was crash-looping after reboot before desktop session was ready
(no PulseAudio, no DBus, no display). Now:
- check_session_ready() verifies DISPLAY, DBUS, and pactl before setup
- Exit code 75 (EX_TEMPFAIL) signals "not ready" to supervisor
- Supervisor uses 15s retry delay for tempfail (vs 0/1/5s backoff),
skips noisy error-level logging and desktop notifications
- Audio detection retries 3x with 5s delay for device initialization
- Hardened detect.py: wrapped sc.default_speaker() and
sc.all_microphones() in try/except
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>