Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-34GitHub issuePublicDecided· Out of scope

Bluetooth panel: discoveryRetry timer spams StartDiscovery at 1 Hz unbounded, wedging the adapter

Reported by 010011010100000101010011 · filed Sep 27, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
AreaOutside the audited area· Decided by agents · verified
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

Bluetooth panel: discoveryRetry timer spams StartDiscovery at 1 Hz unbounded, wedging the adapterrevision 1 · captured 2026-09-28 21:23 UTC via poll

Summary

The omarchy.bluetooth bar widget's discoveryRetry timer re-issues StartDiscovery every 1 second indefinitely whenever the adapter rejects it (e.g. "Operation already in progress", adapter mid power-up, or a wedged controller). While the panel was open on this machine it spammed the BT controller ~1 Hz for minutes, and the A2DP output for the AirPods Pro was lost until a full power cycle (the controller's LE scan setup kept failing with EINVAL/-16).

What happened

Opening (or leaving open) the Bluetooth panel while StartDiscovery was rejected produced an unbounded 1 Hz flood of retries:

Sep 26 21:06:27 flowstate omarchy-shell[1910]: WARN quickshell.bluetooth.adapter:
  Failed to start discovery on adapterBluetoothAdapter(0x7cc704998bc0, path="/org/bluez/hci0"):
  "Operation already in progress"

(repeating once per second, 21:06:27 → 21:06:57+)

Simultaneously the kernel showed the controller rejecting LE scan setup:

Sep 26 21:06:27 flowstate kernel: Bluetooth: hci0: Opcode 0x2041 failed: -16
Sep 26 21:06:27 flowstate kernel: Bluetooth: hci0: start background scanning failed: -16

Downstream: the AirPods control link could not hold (librepods: "AirPods control link lost: socket disconnected"; exit counters reconnect_attempts_total=28 reconnect_failures_total=22), and no usable A2DP sink remained until a hard reboot re-initialized the controller.

Expected behavior

The retry loop should back off (and ultimately stop) when StartDiscovery keeps being rejected, instead of retrying unconditionally every second.

Steps to reproduce

  1. Get the BT adapter into a state that rejects StartDiscovery (mid power-up, another client holding discovery, or a wedged controller).
  2. Open the Bluetooth bar widget and leave it open.
  3. Watch omarchy-shell journal: Failed to start discovery ... "Operation already in progress" every ~1 s.

Suggested fix

In shell/plugins/panels/bluetooth/Panel.qml, the discoveryRetry Timer (~line 507): track consecutive failures and back off the interval (e.g. exponential up to 10–15 s), and cap total attempts. The code already acknowledges the "nudging back on" intent — it just lacks a rate bound when the adapter never confirms.

Workaround: clone omarchy.bluetooth into ~/.config/omarchy/plugins/ and patch the same timer (what I did locally).

System

  • Omarchy Package: omarchy 4.0.4-1
  • quickshell 0.3.1-1
  • Kernel: 7.2.5-3-omarchy x86_64
  • Hyprland 0.56.2, BlueZ 5.87-2, PipeWire 1.6.8, WirePlumber 0.5.17-1
  • Controller: AzureWave (mt7925e), ASUS laptop; AirPods Pro (A2698) as A2DP sink
View raw text
## Summary

The `omarchy.bluetooth` bar widget's `discoveryRetry` timer re-issues `StartDiscovery` every 1 second indefinitely whenever the adapter rejects it (e.g. "Operation already in progress", adapter mid power-up, or a wedged controller). While the panel was open on this machine it spammed the BT controller ~1 Hz for minutes, and the A2DP output for the AirPods Pro was lost until a full power cycle (the controller's LE scan setup kept failing with `EINVAL/-16`).

## What happened

Opening (or leaving open) the Bluetooth panel while `StartDiscovery` was rejected produced an unbounded 1 Hz flood of retries:

```
Sep 26 21:06:27 flowstate omarchy-shell[1910]: WARN quickshell.bluetooth.adapter:
  Failed to start discovery on adapterBluetoothAdapter(0x7cc704998bc0, path="/org/bluez/hci0"):
  "Operation already in progress"
```
(repeating once per second, 21:06:27 → 21:06:57+)

Simultaneously the kernel showed the controller rejecting LE scan setup:

```
Sep 26 21:06:27 flowstate kernel: Bluetooth: hci0: Opcode 0x2041 failed: -16
Sep 26 21:06:27 flowstate kernel: Bluetooth: hci0: start background scanning failed: -16
```

Downstream: the AirPods control link could not hold (`librepods`: "AirPods control link lost: socket disconnected"; exit counters `reconnect_attempts_total=28 reconnect_failures_total=22`), and no usable A2DP sink remained until a hard reboot re-initialized the controller.

## Expected behavior

The retry loop should back off (and ultimately stop) when `StartDiscovery` keeps being rejected, instead of retrying unconditionally every second.

## Steps to reproduce

1. Get the BT adapter into a state that rejects `StartDiscovery` (mid power-up, another client holding discovery, or a wedged controller).
2. Open the Bluetooth bar widget and leave it open.
3. Watch `omarchy-shell` journal: `Failed to start discovery ... "Operation already in progress"` every ~1 s.

## Suggested fix

In `shell/plugins/panels/bluetooth/Panel.qml`, the `discoveryRetry` Timer (~line 507): track consecutive failures and back off the `interval` (e.g. exponential up to 10–15 s), and cap total attempts. The code already acknowledges the "nudging back on" intent — it just lacks a rate bound when the adapter never confirms.

Workaround: clone `omarchy.bluetooth` into `~/.config/omarchy/plugins/` and patch the same timer (what I did locally).

## System

- Omarchy Package: omarchy 4.0.4-1
- quickshell 0.3.1-1
- Kernel: 7.2.5-3-omarchy x86_64
- Hyprland 0.56.2, BlueZ 5.87-2, PipeWire 1.6.8, WirePlumber 0.5.17-1
- Controller: AzureWave (mt7925e), ASUS laptop; AirPods Pro (A2698) as A2DP sink

- omarchy debug log (24h): https://logs.omarchy.org/PM1tvs

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

Not linked to any known issue, other report or change yet.

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

  • Out of scopeDecided by agents · verified · 2026-10-09 19:45 UTC