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.
"Launching …" OSD can stay on screen forever when the app's window appears at the 2 s mark
Reported by travelingnomad1 · filed Oct 7, 2026 · open at source
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
What happened
Launching an app from the menu occasionally leaves a persistent
"Launching <app>…" overlay on screen. The app itself starts and works
normally; the overlay never goes away and must be dismissed manually withomarchy-shell osd close.
Seen twice on this machine with different apps (Nautilus and Remmina), both of
which take roughly two seconds to map their first window.
Cause
shell/services/AppLibrary.qml shows and hides the OSD with two independent
detached commands, and tracks its own idea of whether the OSD is open:
// launchDelay, interval: 2000
onTriggered: {
if (root.toplevelCount() > root.launchToplevelCount || ...) return
root.launchOsdOpen = true
Quickshell.execDetached(["omarchy-shell", "osd", "show", ...duration: 0...])
}
function closeLaunchFeedback(serial) {
...
if (root.launchOsdOpen) { // <-- guard
Quickshell.execDetached(["omarchy-shell", "osd", "close"])
root.launchOsdOpen = false
}
}If the window appears in the narrow interval around the 2000 ms mark, the two
commands race:
launchDelayfires, setslaunchOsdOpen = true, and spawnsosd show
with duration: 0 (no self-expiry).
2. The toplevel appears, maybeFinishLaunchFeedback() →
closeLaunchFeedback() runs and spawns osd close.
3. The two detached processes reach the shell out of order: **close is
processed before show**. The OSD ends up visible, with no expiry.
4. closeLaunchFeedback() has already set launchOsdOpen = false and stopped
launchTimeout, so the 15 s safety net never fires — and even if it did,
the if (root.launchOsdOpen) guard would skip the close.
The result is a permanent overlay. Apps whose first window maps at ~2 s hit
this repeatedly; faster or slower apps never do.
Expected
The overlay should always disappear once the window is up.
Suggested fix
Any one of:
- make the
launchTimeoutclose unconditional (drop thelaunchOsdOpen
guard), so a stuck overlay self-heals after 15 s; and/or
- give the OSD a non-zero duration so it expires by itself; and/or
- serialise show/close through one ordered channel instead of two detached
execDetached calls, so they cannot be reordered.
Steps to reproduce
Hard to trigger on demand because it depends on timing, but:
- Launch an app whose first window maps about 2 s after start (Remmina and
Nautilus both do on this hardware) from the Omarchy menu.
2. Repeat a handful of times.
3. Occasionally the "Launching …" overlay stays on screen indefinitely;
omarchy-shell osd close clears it.
System
- Omarchy 4.0.4-1, omarchy-settings 4.0.4-1
- Quickshell 0.3.1-1
- Kernel 7.2.5-3-omarchy
- CPU Intel Core i7-7Y75 / GPU Intel HD Graphics 615
- Google Pixelbook (Eve)
View raw text
### What happened
Launching an app from the menu occasionally leaves a persistent
**"Launching <app>…"** overlay on screen. The app itself starts and works
normally; the overlay never goes away and must be dismissed manually with
`omarchy-shell osd close`.
Seen twice on this machine with different apps (Nautilus and Remmina), both of
which take roughly two seconds to map their first window.
### Cause
`shell/services/AppLibrary.qml` shows and hides the OSD with two *independent*
detached commands, and tracks its own idea of whether the OSD is open:
```qml
// launchDelay, interval: 2000
onTriggered: {
if (root.toplevelCount() > root.launchToplevelCount || ...) return
root.launchOsdOpen = true
Quickshell.execDetached(["omarchy-shell", "osd", "show", ...duration: 0...])
}
function closeLaunchFeedback(serial) {
...
if (root.launchOsdOpen) { // <-- guard
Quickshell.execDetached(["omarchy-shell", "osd", "close"])
root.launchOsdOpen = false
}
}
```
If the window appears in the narrow interval around the 2000 ms mark, the two
commands race:
1. `launchDelay` fires, sets `launchOsdOpen = true`, and spawns `osd show`
with `duration: 0` (no self-expiry).
2. The toplevel appears, `maybeFinishLaunchFeedback()` →
`closeLaunchFeedback()` runs and spawns `osd close`.
3. The two detached processes reach the shell out of order: **close is
processed before show**. The OSD ends up visible, with no expiry.
4. `closeLaunchFeedback()` has already set `launchOsdOpen = false` and stopped
`launchTimeout`, so the 15 s safety net never fires — and even if it did,
the `if (root.launchOsdOpen)` guard would skip the close.
The result is a permanent overlay. Apps whose first window maps at ~2 s hit
this repeatedly; faster or slower apps never do.
### Expected
The overlay should always disappear once the window is up.
### Suggested fix
Any one of:
- make the `launchTimeout` close unconditional (drop the `launchOsdOpen`
guard), so a stuck overlay self-heals after 15 s; and/or
- give the OSD a non-zero `duration` so it expires by itself; and/or
- serialise show/close through one ordered channel instead of two detached
`execDetached` calls, so they cannot be reordered.
### Steps to reproduce
Hard to trigger on demand because it depends on timing, but:
1. Launch an app whose first window maps about 2 s after start (Remmina and
Nautilus both do on this hardware) from the Omarchy menu.
2. Repeat a handful of times.
3. Occasionally the "Launching …" overlay stays on screen indefinitely;
`omarchy-shell osd close` clears it.
### System
- Omarchy 4.0.4-1, omarchy-settings 4.0.4-1
- Quickshell 0.3.1-1
- Kernel 7.2.5-3-omarchy
- CPU Intel Core i7-7Y75 / GPU Intel HD Graphics 615
- Google Pixelbook (Eve)
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 22:03 UTC