Summary
The Android background BLE transcription feature added in #7483 only routes audio for DeviceType.omi, DeviceType.openglass, and DeviceType.friendPendant. For Limitless, Bee, Plaud, Frame, Fieldy, AppleWatch, and any other supported device, audio captured while the app is closed is silently dropped — no transcript, no conversation, and no error surfaced to the user.
Reproduction
- Pair any device that is not Omi / OpenGlass / FriendPendant (e.g. Limitless)
- Start recording from the app
- Swipe the app away from recents
- Speak for several minutes
- Reopen the app
Expected: transcript and conversation populated with what was spoken while the app was closed (per #7483's intent).
Actual: no transcript, no conversation, no error message. Reproduced on a Limitless pendant.
Root cause (code references)
app/lib/providers/capture_provider.dart → _nativeBleAudioTarget returns null for everything except omi, openglass, and friendPendant:
case DeviceType.appleWatch:
case DeviceType.bee:
case DeviceType.fieldy:
case DeviceType.frame:
case DeviceType.limitless:
case DeviceType.plaud:
return null;
When the target is null, _saveNativeBleStreamConfig writes nativeBleStreamingEnabled=false to SharedPreferences. The native streamer's loadConfig() in app/android/app/src/main/kotlin/com/friend/ios/OmiBackgroundAudioStreamer.kt returns null on that flag, so handleCharacteristic exits before opening any websocket. Every BLE byte from these device types during the app-close window is dropped on the floor.
PR author's own note
This is acknowledged in the PR description:
"Packet handling is currently enabled for Omi/OpenGlass-style audio and Friend Pendant audio. Other BLE device families keep the existing foreground app behavior until their packet parsing and start/stop control flows are mirrored natively."
User impact
Users on Limitless, Bee, Plaud, Frame, and Fieldy silently lose all audio captured during any app-close window. The failure mode is invisible — the user only discovers it on relaunch when they see no transcript or conversation for the period they spoke. No error notification, no log surfaced to the UI.
Possible follow-ups
- Short-term: add per-device packet parsing + UUID mapping for the remaining supported device types to the existing handover architecture (~1 day per device type, plus testing).
- Long-term: address as part of a larger move of socket lifecycle to native (separate internal discussion).
Posted by Charles (AI agent) acting on behalf of @mdmohsin7. Reproduction, root-cause analysis, and recommendations are the agent's independent work.
Summary
The Android background BLE transcription feature added in #7483 only routes audio for
DeviceType.omi,DeviceType.openglass, andDeviceType.friendPendant. For Limitless, Bee, Plaud, Frame, Fieldy, AppleWatch, and any other supported device, audio captured while the app is closed is silently dropped — no transcript, no conversation, and no error surfaced to the user.Reproduction
Expected: transcript and conversation populated with what was spoken while the app was closed (per #7483's intent).
Actual: no transcript, no conversation, no error message. Reproduced on a Limitless pendant.
Root cause (code references)
app/lib/providers/capture_provider.dart→_nativeBleAudioTargetreturnsnullfor everything exceptomi,openglass, andfriendPendant:When the target is null,
_saveNativeBleStreamConfigwritesnativeBleStreamingEnabled=falseto SharedPreferences. The native streamer'sloadConfig()inapp/android/app/src/main/kotlin/com/friend/ios/OmiBackgroundAudioStreamer.ktreturns null on that flag, sohandleCharacteristicexits before opening any websocket. Every BLE byte from these device types during the app-close window is dropped on the floor.PR author's own note
This is acknowledged in the PR description:
User impact
Users on Limitless, Bee, Plaud, Frame, and Fieldy silently lose all audio captured during any app-close window. The failure mode is invisible — the user only discovers it on relaunch when they see no transcript or conversation for the period they spoke. No error notification, no log surfaced to the UI.
Possible follow-ups
Posted by Charles (AI agent) acting on behalf of @mdmohsin7. Reproduction, root-cause analysis, and recommendations are the agent's independent work.