Root cause: when VadBackend::SileroOnnx was selected, the capture
callback set the worker to None but never called try_new() to create
a replacement. The desktop path (engine.rs) correctly calls
SileroOnnxVadWorker::try_new(), but the iOS (CoreML) and Android
(ONNX) mobile paths only cleared the old worker without spawning a
new one. The VAD stayed stuck at 'warming up' forever, using the
WebRTC fallback for all voice activity detection.
Fix:
- iOS: call AppleCoreMlVadWorker::try_new() when SileroOnnx backend
is selected; mark fallback only on failure
- Android: call SileroOnnxVadWorker::try_new() with the model bundle
path when SileroOnnx backend is selected; same fallback logic