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.
Password prompt flashes before displays blank on suspend and hibernate
Reported by ClGratton · filed Aug 30, 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?
- 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. So far: in the audited area (lock) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.
Original report
System details
Omarchy 4.0.1 Quattro, Hyprland 0.56.2, Quickshell 0.3.1, NVIDIA RTX 3080 Ti, and two DisplayPort outputs.
Problem
Starting suspend briefly exposed the desktop lock password views before the displays entered S3. Hibernate showed the same transition whenever it also took the desktop session lock.
The ordering was secure but visually wrong. The lock request began, each WlSessionLockSurface mapped visibly, the compositor reported the session secure, and only then did sleep begin.
Expected behavior
Sleep preparation should remain visually black while still acquiring a secure ext-session-lock surface on every output. The synchronized password views should appear after resume. Suspend must never begin before the compositor reports the session lock secure.
Failed approach
Pre-sleep DPMS-off is unsafe on this system. Two hardware cycles left both physical DisplayPort sinks black after resume while Hyprland and the Vulkan shell still reported both outputs enabled. The original rendering-only candidate was also abandoned after a black wake that required a hard reboot. Neither approach is deployed or proposed for merge.
Verified design
The tested replacement adds a sleep-specific lock entry point. It turns on a black concealment state before requesting ext-session-lock, stops the ordinary five-second lock blank timer for the duration of sleep preparation, and never sends a pre-sleep DPMS-off request. The existing secure-lock poll still controls release of logind's delay inhibitor.
Concealment has three independent release paths. The persistent sleep monitor sends a generic resumeFromSleep event only after logind reports a known PreparingForSleep=false. Keyboard input can reveal the view directly. Pointer input can reveal it after the secure surface's initialization movement has settled. The resume event is shared with #9181, which also uses it to restore password focus; #9231 does not need a second sleep monitor.
The monitor arms the next delay inhibitor before retrying shell notification, so an immediate second suspend is still protected. Unknown logind state never reveals the view.
Verification
The exact dual-output hardware reproduction passed on 2026-09-02. Concealment was active before the lock mapped, the session became secure before the inhibitor was released, neither output received a pre-sleep blank request, and the user saw neither the desktop nor the password prompt flash. After real S3 resume, the shell accepted the shared resume event, both outputs remained active, the password view appeared normally, and the first unlock completed successfully.
The focused sleep-lock, sleep-monitor, focus-recovery, idle-handoff, and sleep-handoff tests all pass. The complete 228-file composed shell suite has no affected failures; its five failures are the same unrelated host/baseline categories present before this change.
The final branch is intentionally stacked on #9181 and #9632 so the resume bridge and idle concealment each have one owner. A separate #9231 pull request should wait for those prerequisites rather than duplicate their code.
View raw text
### System details Omarchy 4.0.1 Quattro, Hyprland 0.56.2, Quickshell 0.3.1, NVIDIA RTX 3080 Ti, and two DisplayPort outputs. ### Problem Starting suspend briefly exposed the desktop lock password views before the displays entered S3. Hibernate showed the same transition whenever it also took the desktop session lock. The ordering was secure but visually wrong. The lock request began, each `WlSessionLockSurface` mapped visibly, the compositor reported the session secure, and only then did sleep begin. ### Expected behavior Sleep preparation should remain visually black while still acquiring a secure ext-session-lock surface on every output. The synchronized password views should appear after resume. Suspend must never begin before the compositor reports the session lock secure. ### Failed approach Pre-sleep DPMS-off is unsafe on this system. Two hardware cycles left both physical DisplayPort sinks black after resume while Hyprland and the Vulkan shell still reported both outputs enabled. The original rendering-only candidate was also abandoned after a black wake that required a hard reboot. Neither approach is deployed or proposed for merge. ### Verified design The tested replacement adds a sleep-specific lock entry point. It turns on a black concealment state before requesting ext-session-lock, stops the ordinary five-second lock blank timer for the duration of sleep preparation, and never sends a pre-sleep DPMS-off request. The existing secure-lock poll still controls release of logind's delay inhibitor. Concealment has three independent release paths. The persistent sleep monitor sends a generic `resumeFromSleep` event only after logind reports a known `PreparingForSleep=false`. Keyboard input can reveal the view directly. Pointer input can reveal it after the secure surface's initialization movement has settled. The resume event is shared with #9181, which also uses it to restore password focus; #9231 does not need a second sleep monitor. The monitor arms the next delay inhibitor before retrying shell notification, so an immediate second suspend is still protected. Unknown logind state never reveals the view. ### Verification The exact dual-output hardware reproduction passed on 2026-09-02. Concealment was active before the lock mapped, the session became secure before the inhibitor was released, neither output received a pre-sleep blank request, and the user saw neither the desktop nor the password prompt flash. After real S3 resume, the shell accepted the shared resume event, both outputs remained active, the password view appeared normally, and the first unlock completed successfully. The focused sleep-lock, sleep-monitor, focus-recovery, idle-handoff, and sleep-handoff tests all pass. The complete 228-file composed shell suite has no affected failures; its five failures are the same unrelated host/baseline categories present before this change. The final branch is intentionally stacked on #9181 and #9632 so the resume bridge and idle concealment each have one owner. A separate #9231 pull request should wait for those prerequisites rather than duplicate their code.
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.
- Decided by agents · verified: in the audited area (lock)
- Decided by agents · verified: matches no known issue
The outcome (valid, duplicate, not a bug, …) is not decided yet.