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

Hyprland 0.56.2 SIGSEGV on Super+G after moving an unrelated window into a workspace with a locked window group, group vanishes, workspace stays marked as occupied

Reported by gastyr · filed Sep 20, 2026 · open at source

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

Hyprland 0.56.2 SIGSEGV on Super+G after moving an unrelated window into a workspace with a locked window group, group vanishes, workspace stays marked as occupiedrevision 1 · captured 2026-09-28 21:23 UTC via poll

System details

AMD Ryzen 5 7600X, Omarchy version: 4.0.3, Hyprland version: v0.56.2 (commit efb50993780079460b0cbed1363e2166a2de1d9f), Kernel: 7.2.3-arch1-3 (#1 SMP PREEMPT_DYNAMIC Sun, 06 Sep 2026), GPU: AMD Radeon RX 6750 XT (Navi 22) + AMD Raphael iGPU, Libraries: Hyprutils 0.14.2, Hyprlang 0.6.8, Hyprcursor 0.1.13, Hyprgraphics 0.5.1, Aquamarine 0.15.0

What's wrong?

Repro steps

  1. Have two window rules that group two web apps into the same window group

on workspace 4, e.g.:

windowrulev2 = workspace 4 silent, group new lock, class:^(chrome-discord.com__channels_@me-Default)$
windowrulev2 = workspace 4 silent, group invade, class:^(chrome-web.whatsapp.com__-Default)$

Both apps launch on start, so this locked group is already established on
workspace 4 before any manual interaction happens.

  1. Focus a window that is NOT part of that group and is on a different

workspace (in my case, a browser window on workspace 1).
3. With focus on the browser, move it into workspace 4 using "swap window"
(bound to Super+Shift+Arrow). The browser lands on
workspace 4, but the existing window group (Discord+WhatsApp) disappears,
it is not visible on workspace 4 or on any other workspace.
4. Move the browser back to its own workspace (workspace 1).
5. Switch view to workspace 4. It is reported as occupied (window count > 0
in the workspace indicator), but nothing is rendered there. The window
group is gone from every workspace.
6. While on workspace 4 (visually empty), press Super+G (toggleGroup).
7. Hyprland crashes with SIGSEGV.

Expected behavior

Either the group should remain intact/visible after an unrelated window is
moved onto its workspace, or, failing that, toggleGroup should not crash
when invoked in a workspace whose tracked window/group state is already
inconsistent.

Actual behavior

Hyprland segfaults. Backtrace shows the crash inside
Layout::CWindowTarget::assignToSpace(), called from
Desktop::View::CGroup::remove() during CGroup::destroy(), triggered by
Config::Actions::toggleGroup():

Config::Actions::toggleGroup()
→ Desktop::View::CGroup::destroy()
→ Desktop::View::CGroup::remove()
→ Layout::CWindowTarget::assignToSpace() <- SIGSEGV

This looks like the same class of bug reported in #10342 (a window not
getting properly reassigned to the target workspace's CSpace, leaving a
stale reference to a destroyed workspace's space), but triggered by moving
a window INTO a workspace that hosts an existing locked group, rather than
moving a grouped window OUT. The group itself seems to be the one left with
the dangling CSpace reference once a foreign window lands on its workspace
and leaves again.

Full crash report attached below.
hyprlandCrashReport1313.txt

Related: #10342

View raw text
### System details

AMD Ryzen 5 7600X, Omarchy version: 4.0.3,  Hyprland version: v0.56.2 (commit efb50993780079460b0cbed1363e2166a2de1d9f), Kernel: 7.2.3-arch1-3 (#1 SMP PREEMPT_DYNAMIC Sun, 06 Sep 2026), GPU: AMD Radeon RX 6750 XT (Navi 22) + AMD Raphael iGPU, Libraries: Hyprutils 0.14.2, Hyprlang 0.6.8, Hyprcursor 0.1.13, Hyprgraphics 0.5.1, Aquamarine 0.15.0

### What's wrong?

## Repro steps

1. Have two window rules that group two web apps into the same window group
   on workspace 4, e.g.:

`windowrulev2 = workspace 4 silent, group new lock, class:^(chrome-discord.com__channels_@me-Default)$`
`windowrulev2 = workspace 4 silent, group invade, class:^(chrome-web.whatsapp.com__-Default)$`


   Both apps launch on start, so this locked group is already established on
   workspace 4 before any manual interaction happens.

2. Focus a window that is NOT part of that group and is on a different
   workspace (in my case, a browser window on workspace 1).
3. With focus on the browser, move it into workspace 4 using "swap window"
   (bound to Super+Shift+Arrow). The browser lands on
   workspace 4, but the existing window group (Discord+WhatsApp) disappears,
   it is not visible on workspace 4 or on any other workspace.
4. Move the browser back to its own workspace (workspace 1).
5. Switch view to workspace 4. It is reported as occupied (window count > 0
   in the workspace indicator), but nothing is rendered there. The window
   group is gone from every workspace.
6. While on workspace 4 (visually empty), press Super+G (toggleGroup).
7. Hyprland crashes with SIGSEGV.

## Expected behavior

Either the group should remain intact/visible after an unrelated window is
moved onto its workspace, or, failing that, toggleGroup should not crash
when invoked in a workspace whose tracked window/group state is already
inconsistent.

## Actual behavior

Hyprland segfaults. Backtrace shows the crash inside
`Layout::CWindowTarget::assignToSpace()`, called from
`Desktop::View::CGroup::remove()` during `CGroup::destroy()`, triggered by
`Config::Actions::toggleGroup()`:

`Config::Actions::toggleGroup()`
→ `Desktop::View::CGroup::destroy()`
→ `Desktop::View::CGroup::remove()`
→ `Layout::CWindowTarget::assignToSpace() <- SIGSEGV`


This looks like the same class of bug reported in #10342 (a window not
getting properly reassigned to the target workspace's CSpace, leaving a
stale reference to a destroyed workspace's space), but triggered by moving
a window INTO a workspace that hosts an existing locked group, rather than
moving a grouped window OUT. The group itself seems to be the one left with
the dangling CSpace reference once a foreign window lands on its workspace
and leaves again.

Full crash report attached below.
[hyprlandCrashReport1313.txt](https://github.com/user-attachments/files/32435063/hyprlandCrashReport1313.txt)

Related: #10342
  • hyprlandCrashReport1313.txt

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 16:37 UTC