## Codename-11/hermes-relay — v0.5.0…v0.5.1

_28 commits._

### Features
- **feat(voice): wire silenceThresholdMs to actually auto-stop listening** (cdfcc16)
- **feat(voice): wire barge-in to VoiceState lifecycle with resume support** (213d0eb)
- **feat(voice): add duplex audio listener with AEC for barge-in** (217d77a)
- **feat(voice): add barge-in Voice Settings section** (366911d)
- **feat(voice): add Silero VAD engine for barge-in** (e7beeb2)
- **feat(voice): add VoicePlayer ducking helpers** (dbce8f0)
- **feat(voice): add BargeInPreferences DataStore** (b3f3605)
- **feat(voice): prefetch next sentence synthesis while current plays** (36d8c67)
- **feat(voice): coalesce short sentences and add secondary-break chunking** (17f97e9)
- **feat(voice): sanitize assistant text client-side before TTS chunking** (1cd03f7)
- **feat(relay): strip markdown/tool-annotations/URLs before TTS** (393c0ba)

### Fixes
- **fix(ui): remember mapped bridge flows to satisfy Compose lint** (19b44e1)
- **fix(voice): use androidx.annotation.OptIn not kotlin.OptIn for lint** (ae8b7be)
- **fix(voice): opt into Media3 UnstableApi for ExoPlayer.audioSessionId** (eb8510f)
- **fix(bootstrap): append command middleware in-place to preserve FrozenList** (351c3b3)
- **fix(voice): defer auto-resume until TTS pipeline drains + persist interaction mode** (4a714fd)

### Backend
- **release: v0.5.1** (d5695eb)
- **Merge feature/voice-quality-pass into main for v0.5.1 release** (7de5625)

### Tests
- **test(voice): @Ignore remaining 3 new test files; full voice suite deferred** (ff8efc3)
- **test(voice): @Ignore 4 more hanging unit tests; scope #32 to full set** (720ba98)
- **test(voice): @Ignore VoicePlayerTest + revert Robolectric; track in #32** (d5342bd)
- **test(voice): add Robolectric + factory seam so VoicePlayerTest runs in CI** (456f91e)

### Docs
- **docs(claude.md): add lint-before-push gate for Kotlin changes** (344a996)
- **docs: record voice barge-in in DEVLOG, CHANGELOG, spec, and voice.md** (3fa4897)
- **docs(plans): add voice barge-in plan** (0df99f3)
- **docs: record voice quality pass in DEVLOG, CHANGELOG, and spec** (0894da9)
- **docs(plans): add voice quality pass plan** (a4c6f29)

### Chore
- **refactor(voice): swap MediaPlayer for Media3 ExoPlayer for gapless playback** (bbea189)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/Codename-11/hermes-relay?utm_source=github-action)._