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-84GitHub issuePublicFixed

Undocking with the lid closed suspends with no active output: black screen after resume (clamshell race)

Reported by azzouzidk · filed Sep 26, 2026 · open at source

Decided: Duplicate — decided by arbitration 2 days ago.

R-578 is the earliest report of this defect — filed Sep 14, 2026, open upstream. This report (filed Sep 26, 2026) describes the same defect, so it is folded under it in the inbox.

Decided by arbitration· Oct 10, 2026

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?
AreaIn the audited arealock· 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 arbitration — agents disagreed and an independent third agent decided — see the decision.

Original report

Undocking with the lid closed suspends with no active output: black screen after resume (clamshell race)revision 1 · captured 2026-09-28 21:23 UTC via poll

System details

Framework Laptop 13 — AMD Ryzen AI 9 HX 370 / Radeon 890M, Omarchy 4.0.4-1, kernel 7.2.5-3-omarchy, Hyprland 0.56.2-2, Quickshell 0.3.1-1

What's wrong?

Undocking while the lid is closed can put the laptop to sleep with no active output and no lock surface. After waking up, the internal screen stays black and there's no way to recover without a hard reset. The kernel and userspace are still alive: network and services keep logging for minutes after the lid is opened.

Steps
1. Dock the laptop: an external monitor on a DisplayPort expansion card, plus a USB-C dock.
2. Close the lid. The laptop is docked, so HandleLidSwitchDocked=ignore keeps it awake. omarchy-system-lid-close → omarchy-hyprland-monitor-clamshell disables eDP-1 (internal-monitor-scale is written at this point).
3. With the lid still closed, unplug the monitor and the dock within a few seconds.
4. The laptop is now undocked with the lid closed, so logind suspends it immediately.
5. Later, open the lid: black screen, and no lock screen appears.

Journal (times in seconds)

22:42:29 systemd-logind: Lid closed.                       # docked -> ignored, eDP-1 disabled (clamshell)
22:42:31 kernel: [drm] DM_MST: stopping TM on aconnector   # monitor + dock unplugged
22:42:31 kernel: usb 7-1.x: USB disconnect ...
22:42:33 systemd-logind: Suspending...
22:42:33 hyprpolkitagent: There are no outputs - creating placeholder screen
22:42:33 omarchy-shell: DEBUG: Not creating lock surface for screen QScreen(..., name="") as it is not backed by a valid wayland output.
22:42:33 omarchy-shell: WARN quickshell.hyprland.ipc: Got removal for monitor "FALLBACK" which was not previously tracked.
22:42:34 kernel: PM: suspend entry (s2idle)
--- next morning ---
09:29:38 systemd-logind: Lid opened.
09:29:38 kernel: PM: suspend exit
         (network, services keep logging normally until the forced power-off ~2 min later; no oops, no Hyprland coredump)

The clamshell toggle directory was modified at 22:42:33, so the internal output was being re-enabled (clamshell flag removed + hyprctl reload) in the same second that the lock was requested and logind suspended. My reading is that suspend overtook the re-enable and lock. The session ended up locked with no lock surface on eDP-1, and nothing recreated one on resume, which leaves the screen black.

Expected: after undocking with the lid closed, the laptop sleeps with eDP-1 enabled and locked, and wakes to the lock screen.

Notes
- I've only seen this once and haven't tried to reproduce it deliberately. The diagnosis comes from the journal above. Resuming normally (lid close/open with nothing attached) works fine on this machine.
- Workaround: unplug external displays with the lid open.
- Possible fix direction: have the sleep lock (omarchy-system-sleep-lock / the PrepareForSleep path) wait until there is at least one enabled output with a lock surface. Or, on resume, re-run the clamshell reconcile and recreate lock surfaces for outputs that have none.

View raw text
### System details
Framework Laptop 13 — AMD Ryzen AI 9 HX 370 / Radeon 890M, Omarchy 4.0.4-1, kernel 7.2.5-3-omarchy, Hyprland 0.56.2-2, Quickshell 0.3.1-1

### What's wrong?

Undocking while the lid is closed can put the laptop to sleep with **no active output and no lock surface**. After waking up, the internal screen stays black and there's no way to recover without a hard reset. The kernel and userspace are still alive: network and services keep logging for minutes after the lid is opened.

**Steps**
1. Dock the laptop: an external monitor on a DisplayPort expansion card, plus a USB-C dock.
2. Close the lid. The laptop is docked, so `HandleLidSwitchDocked=ignore` keeps it awake. `omarchy-system-lid-close` → `omarchy-hyprland-monitor-clamshell` disables eDP-1 (internal-monitor-scale is written at this point).
3. With the lid still closed, unplug the monitor and the dock within a few seconds.
4. The laptop is now undocked with the lid closed, so logind suspends it immediately.
5. Later, open the lid: black screen, and no lock screen appears.

**Journal (times in seconds)**
```
22:42:29 systemd-logind: Lid closed.                       # docked -> ignored, eDP-1 disabled (clamshell)
22:42:31 kernel: [drm] DM_MST: stopping TM on aconnector   # monitor + dock unplugged
22:42:31 kernel: usb 7-1.x: USB disconnect ...
22:42:33 systemd-logind: Suspending...
22:42:33 hyprpolkitagent: There are no outputs - creating placeholder screen
22:42:33 omarchy-shell: DEBUG: Not creating lock surface for screen QScreen(..., name="") as it is not backed by a valid wayland output.
22:42:33 omarchy-shell: WARN quickshell.hyprland.ipc: Got removal for monitor "FALLBACK" which was not previously tracked.
22:42:34 kernel: PM: suspend entry (s2idle)
--- next morning ---
09:29:38 systemd-logind: Lid opened.
09:29:38 kernel: PM: suspend exit
         (network, services keep logging normally until the forced power-off ~2 min later; no oops, no Hyprland coredump)
```

The clamshell toggle directory was modified at 22:42:33, so the internal output was being re-enabled (clamshell flag removed + `hyprctl reload`) in the same second that the lock was requested and logind suspended. My reading is that suspend overtook the re-enable and lock. The session ended up locked with no lock surface on eDP-1, and nothing recreated one on resume, which leaves the screen black.

**Expected:** after undocking with the lid closed, the laptop sleeps with eDP-1 enabled and locked, and wakes to the lock screen.

**Notes**
- I've only seen this once and haven't tried to reproduce it deliberately. The diagnosis comes from the journal above. Resuming normally (lid close/open with nothing attached) works fine on this machine.
- Workaround: unplug external displays with the lid open.
- Possible fix direction: have the sleep lock (`omarchy-system-sleep-lock` / the PrepareForSleep path) wait until there is at least one enabled output with a lock surface. Or, on resume, re-run the clamshell reconcile and recreate lock surfaces for outputs that have none.

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

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.

  • DuplicateR-578Decided by arbitration · 2026-10-10 06:05 UTC