Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA 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.
Bluetooth bar panel leaks discovery session, breaking LE device auto-reconnect
Reported by jturan · filed Sep 11, 2026Closed upstream on 2026-09-13 by its own reporter jturan, as not planned. Closed by its own reporter — not by itself evidence of a fix.
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?
- Not yet mapped to any requirement or component.
- 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?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
What happened
The Bluetooth bar panel leaks its BlueZ discovery session. After opening/closing
the panel, Discovering on the default adapter can get stuck true
indefinitely — even with the panel closed, the bar not scanning for anything,
and no other Bluetooth client (no blueman, no other app) holding a session.
Confirmed via D-Bus directly:
$ busctl --system get-property org.bluez /org/bluez/hci0 org.bluez.Adapter1 Discovering
b trueConsequences observed:
journalctl -u bluetoothfloods with device-registration errors for a bogus
all-zero address, hundreds of times per hour:
bluetoothd[804]: src/device.c:device_new() Unable to register device interface for 00:00:00:00:00:00
bluetoothd[804]: Unable to create object for found device 00:00:00:00:00:00 (611 occurrences in the last 3 hours alone on my system.)
- Two paired/bonded/trusted Bluetooth LE peripherals (Logitech MX Master 3 and
MX Keys) stopped auto-reconnecting after wake/idle. Both showed
Paired: yes / Bonded: yes / Trusted: yes / Connected: no and would not
reconnect on their own — only a manual channel-switch on the device forced a
fresh connection. This points to BlueZ's passive background auto-connect scan
for bonded LE devices being starved by the radio being pinned in active
discovery/inquiry mode indefinitely.
Root cause (from reading the panel source)
/usr/share/omarchy/shell/plugins/panels/bluetooth/Panel.qml runs two timers
to manage the adapter's discovery state:
discoveryRetry(while the panel is open) keeps writing
adapter.discovering = true once a second so the scan survives BlueZ
timeouts.
- discoveryStop (after the panel closes) is supposed to write
adapter.discovering = false, bounded to 3 attempts before giving up.
The file's own comments acknowledge the race that causes the leak: if aStopDiscovery write lands while a just-fired StartDiscovery hasn't been
confirmed by BlueZ yet, Quickshell's property dedup (it only forwards a write
that differs from the last confirmed state) silently swallows the stop.
After the bounded 3 attempts, owesDiscoveryStop is cleared and nothing ever
retries again — leaving discovery running until something external
(a full BlueZ/adapter reset) clears it.
Relevant code (Panel.qml lines ~504-554):
// BlueZ rejects StartDiscovery while the adapter is still powering up, and
// discovery can also time out on its own. While the panel is open, keep
// nudging it back on so an enabled adapter is always scanning.
Timer {
id: discoveryRetry
interval: 1000
repeat: true
triggeredOnStart: true
running: root.opened && root.adapter !== null && root.adapter.enabled && !root.adapter.discovering
onTriggered: {
root.owesDiscoveryStop = true
root.adapter.discovering = true
}
}
// The way back down. ... quickshell only forwards a discovering write that
// differs from the last state BlueZ reported, so a stop issued while a
// just-fired StartDiscovery is still awaiting confirmation would be
// swallowed and leak the session.
Timer {
id: discoveryStop
interval: 1000
repeat: true
property int attempts: 0
running: !root.opened && root.owesDiscoveryStop && root.adapter !== null && root.adapter.discovering === true
onRunningChanged: if (running) attempts = 0
onTriggered: {
var sibling = root.openSibling()
if (sibling) {
sibling.owesDiscoveryStop = true
root.owesDiscoveryStop = false
return
}
attempts += 1
if (attempts > 3) { root.owesDiscoveryStop = false; return }
root.adapter.discovering = false
}
}Expected behavior
Discovery should reliably stop shortly after the panel closes, and the app
should not give up and abandon a leaked session after 3 attempts — or should
fall back to a harder reset (e.g. re-issue StopDiscovery unconditionally, or
detect the stuck state) rather than leaving the radio pinned in discovery
mode indefinitely.
Steps to reproduce
Not yet narrowed to a reliable manual repro (didn't catch it happening live —
found the adapter already stuck on this way after normal daily use of the
Bluetooth panel). Suspect it's the acknowledged unconfirmed-StartDiscovery
race in the comments above, likely more probable when opening/closing the
panel in quick succession, or with a popout moving between monitors
(openSibling() path).
Workaround
Power-cycling the adapter clears the stuck session immediately:
bluetoothctl power off && bluetoothctl power onAfter that, previously-idle bonded LE devices auto-reconnect normally again on
next wake.
System details
- Omarchy version: 4.0.2-1 (channel: stable)
- Kernel: 7.1.9-arch1-2
- CPU: Intel(R) Core(TM) 5 320
- GPU: Intel Wildcat Lake (Intel Graphics),
xedriver - Affected devices: Logitech MX Master 3, Logitech MX Keys (both Bluetooth LE)
Note
omarchy debug --no-sudo --print documented in the contributing guide does
not exist as a command on this installed version (4.0.2-1) — `omarchy
commands --all has no debug` subcommand. Happy to provide anything else
needed.
View raw text
## What happened
The Bluetooth bar panel leaks its BlueZ discovery session. After opening/closing
the panel, `Discovering` on the default adapter can get stuck `true`
indefinitely — even with the panel closed, the bar not scanning for anything,
and no other Bluetooth client (no `blueman`, no other app) holding a session.
Confirmed via D-Bus directly:
```
$ busctl --system get-property org.bluez /org/bluez/hci0 org.bluez.Adapter1 Discovering
b true
```
Consequences observed:
- `journalctl -u bluetooth` floods with device-registration errors for a bogus
all-zero address, hundreds of times per hour:
```
bluetoothd[804]: src/device.c:device_new() Unable to register device interface for 00:00:00:00:00:00
bluetoothd[804]: Unable to create object for found device 00:00:00:00:00:00
```
(611 occurrences in the last 3 hours alone on my system.)
- Two paired/bonded/trusted Bluetooth LE peripherals (Logitech MX Master 3 and
MX Keys) stopped auto-reconnecting after wake/idle. Both showed
`Paired: yes / Bonded: yes / Trusted: yes / Connected: no` and would not
reconnect on their own — only a manual channel-switch on the device forced a
fresh connection. This points to BlueZ's passive background auto-connect scan
for bonded LE devices being starved by the radio being pinned in active
discovery/inquiry mode indefinitely.
## Root cause (from reading the panel source)
`/usr/share/omarchy/shell/plugins/panels/bluetooth/Panel.qml` runs two timers
to manage the adapter's discovery state:
- `discoveryRetry` (while the panel is open) keeps writing
`adapter.discovering = true` once a second so the scan survives BlueZ
timeouts.
- `discoveryStop` (after the panel closes) is supposed to write
`adapter.discovering = false`, bounded to 3 attempts before giving up.
The file's own comments acknowledge the race that causes the leak: if a
`StopDiscovery` write lands while a just-fired `StartDiscovery` hasn't been
confirmed by BlueZ yet, Quickshell's property dedup (it only forwards a write
that differs from the *last confirmed* state) silently swallows the stop.
After the bounded 3 attempts, `owesDiscoveryStop` is cleared and nothing ever
retries again — leaving discovery running until something external
(a full BlueZ/adapter reset) clears it.
Relevant code (`Panel.qml` lines ~504-554):
```qml
// BlueZ rejects StartDiscovery while the adapter is still powering up, and
// discovery can also time out on its own. While the panel is open, keep
// nudging it back on so an enabled adapter is always scanning.
Timer {
id: discoveryRetry
interval: 1000
repeat: true
triggeredOnStart: true
running: root.opened && root.adapter !== null && root.adapter.enabled && !root.adapter.discovering
onTriggered: {
root.owesDiscoveryStop = true
root.adapter.discovering = true
}
}
// The way back down. ... quickshell only forwards a discovering write that
// differs from the last state BlueZ reported, so a stop issued while a
// just-fired StartDiscovery is still awaiting confirmation would be
// swallowed and leak the session.
Timer {
id: discoveryStop
interval: 1000
repeat: true
property int attempts: 0
running: !root.opened && root.owesDiscoveryStop && root.adapter !== null && root.adapter.discovering === true
onRunningChanged: if (running) attempts = 0
onTriggered: {
var sibling = root.openSibling()
if (sibling) {
sibling.owesDiscoveryStop = true
root.owesDiscoveryStop = false
return
}
attempts += 1
if (attempts > 3) { root.owesDiscoveryStop = false; return }
root.adapter.discovering = false
}
}
```
## Expected behavior
Discovery should reliably stop shortly after the panel closes, and the app
should not give up and abandon a leaked session after 3 attempts — or should
fall back to a harder reset (e.g. re-issue `StopDiscovery` unconditionally, or
detect the stuck state) rather than leaving the radio pinned in discovery
mode indefinitely.
## Steps to reproduce
Not yet narrowed to a reliable manual repro (didn't catch it happening live —
found the adapter already stuck on this way after normal daily use of the
Bluetooth panel). Suspect it's the acknowledged unconfirmed-StartDiscovery
race in the comments above, likely more probable when opening/closing the
panel in quick succession, or with a popout moving between monitors
(`openSibling()` path).
## Workaround
Power-cycling the adapter clears the stuck session immediately:
```bash
bluetoothctl power off && bluetoothctl power on
```
After that, previously-idle bonded LE devices auto-reconnect normally again on
next wake.
## System details
- Omarchy version: 4.0.2-1 (channel: stable)
- Kernel: 7.1.9-arch1-2
- CPU: Intel(R) Core(TM) 5 320
- GPU: Intel Wildcat Lake (Intel Graphics), `xe` driver
- Affected devices: Logitech MX Master 3, Logitech MX Keys (both Bluetooth LE)
## Note
`omarchy debug --no-sudo --print` documented in the contributing guide does
not exist as a command on this installed version (4.0.2-1) — `omarchy
commands --all` has no `debug` subcommand. Happy to provide anything else
needed.
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.
No decision has been recorded yet.