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-5191GitHub issuePublicDecided· Out of scope

"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

Decided: Out of scope — decided by agents · verified 2 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

"Launching …" OSD can stay on screen forever when the app's window appears at the 2 s markrevision 1 · captured 2026-10-07 03:22 UTC via poll

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:

// 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)
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