Description
## Symptom
App crashes in `MicrophoneRelay.startAsync(bodyHost:)` with EXC_CRASH (SIGABRT). This is the same crash class as #274 (MicrophoneRelay double-start NSException) but the crash persists across multiple versions up to at least v0.2.120, suggesting the fix in earlier versions did not fully resolve it or a regression was introduced.
## Versions affected
- v0.2.115 (build 142) — issue #284
- v0.2.116 (build 143) — issues #283, #282, #281
- v0.2.119 (build 146) — issue #280
- v0.2.120 (build 147) — issue #279
## Backtrace (key frame across all)
```
5 HydraHeadiPad MicrophoneRelay.startAsync(bodyHost:) + 704 (MicrophoneRelay.swift:51) [v0.2.115]
5 HydraHeadiPad MicrophoneRelay.startAsync(bodyHost:) + 868 (MicrophoneRelay.swift:66) [v0.2.120]
```
The crash address offset changes slightly between versions (line 51 vs line 66), indicating the crash site evolved as code was modified but the underlying NSException was never caught.
## Source issues
Crash reports #284, #283, #282, #281, #280, #279
## Relationship to #274
Issue #274 tracks the original double-start NSException. This issue tracks that the crash survived into production versions well after #274 was filed. Either the fix was incomplete or a new call path to `startAsync` was introduced that re-triggers the same unhandled exception.