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.
Hyprland 0.56.2 SIGSEGV on Super+T: grouped window keeps a dead workspace CSpace, toggleTargetFloating dereferences expired m_parent
Reported by Dayruke · filed Sep 5, 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
System details
Intel Core i9-12900KF, NVIDIA GeForce RTX 3080 LHR (nvidia-open-dkms 610.57.04), Omarchy 4.0.2-1 (stable), Hyprland 0.56.2 (efb50993780079460b0cbed1363e2166a2de1d9f), kernel 7.1.9-arch1-2. Dual monitors: BenQ 2560x1440 (DP-3) + Samsung QCQ90 3840x2160@30 (HDMI-A-1). Desktop, Gigabyte Z690 UD AX DDR4.
omarchy-debug --no-sudo --print captured locally 2026-09-05 if more of it is useful.
What's wrong?
Super+T (Omarchy default “Toggle window floating/tiling”) SIGSEGVs Hyprland and kills the session when the focused window is grouped and its layout target still holds a CSpace whose parent workspace has already been destroyed.
This is a Hyprland 0.56.2 compositor crash. Omarchy’s default bindings are the trigger path:
SUPER + T→hl.dsp.window.float({ action = "toggle" })in/usr/share/omarchy/default/hypr/bindings/tiling.luaSUPER + G→hl.dsp.group.toggle()in the same fileSUPER + SHIFT + <n>→ move window to workspace
Hyprland main still has the unguarded call (checked 2026-09-05). Hyprland no longer accepts GitHub issues (see hyprwm/Hyprland#16121, same toggleTargetFloating → updateWindows path, different trigger, bot-closed). Filing here because the default Omarchy tiling/grouping workflow can take down the whole session.
What happened
2026-09-05 ~11:52 CDT, Excalibur:
- Hyprland PID 1415 received SIGSEGV (signal 11, fault address
0x10). - Wayland clients died with it (
hyprsunsetSIGABRT, Synology Drivecloud-drive-uiSIGABRT). uwsmrespawned Hyprland; existing windows were gone. I rebooted from tty5 (sudo shutdown -r now).
Not OOM: no oom-killer in the journal.
Crash stack (from ~/.cache/hyprland/hyprlandCrashReport1415.txt)
Hyprland received signal 11(SEGV)
Version: efb50993780079460b0cbed1363e2166a2de1d9f
Tag: v0.56.2
#4 CWorkspace::updateWindows()
#5 Layout::CSpace::toggleTargetFloating(...)
#6 Layout::CLayoutManager::changeFloatingMode(...)
#7 Config::Actions::floatWindow(...)
#8 Config::Lua::Bindings::Internal::registerDispatcherBindings
… lua_pcallk …
#16 CKeybindManager::handleKeybinds(...)Forensics from the core (PID 1415)
- Focused window:
foot(m_class = "foot"), mapped on workspace 5. - It was in a single-window
Desktop::View::CGroup; layout target wasLayout::CWindowGroupTarget. - That group target’s
CSpace(0x55b37b2edfb0) was created for workspace 2. - Workspace 2 had since been destroyed (empty non-persistent workspace).
CSpace::m_parentwas expired (impl_->_data = nullptr). - The
CSpaceobject itself stayed alive because the group target still heldSP<CSpace> m_space. - Super+T then called
CSpace::toggleTargetFloating()→m_parent->updateWindows()with a nullthis(%rdi = 0).CWorkspace::updateWindows()didmov 0x10(%rdi), %rdiand SIGSEGV’d at address0x10.
The unguarded call
src/layout/space/Space.cpp already treats a missing parent as valid in remove():
if (m_parent) // can be null if the workspace is gone
m_parent->updateWindows();toggleTargetFloating() (v0.56.2 and current main) does not:
void CSpace::toggleTargetFloating(SP<ITarget> t) {
t->setWasTiling(true);
m_algorithm->setFloating(t, !t->floating());
t->setWasTiling(false);
m_parent->updateWindows(); // crash when the workspace is gone
recalculate();
}The deeper layout bug is that a grouped window moved onto another workspace did not get assignToSpace() onto that workspace’s CSpace, so it kept the zombie space from the destroyed one. The missing null check is what turns that into a session-killing SIGSEGV.
Likely reproduction (inferred from the core; not a second controlled run yet)
- Open
footon workspace 2. Group it (Super+G) — even as a single-window group. - Move it to workspace 5 (
Super+Shift+5). Leave workspace 2 empty so Hyprland destroys it. - On workspace 5, press
Super+T.
Workaround that should avoid the crash: ungroup (Super+Alt+G) before toggling float or moving across workspaces.
Related, not the same bug
- omacom/omarchy#4883 — Super+T crash on a misplaced special-workspace window; stack is
bad_variant_accessinCDwindleAlgorithm::removeTargeton Hyprland 0.54. - omacom/omarchy#5914 — Super+O on a pinned window stranded by a cross-monitor workspace move.
- omacom/omarchy#4854 — Super+O after a workspace switch (Hyprland 0.54, closed).
- hyprwm/Hyprland#16121 — same
toggleTargetFloating→updateWindowsframes, but SIGABRT on scrolling-layout drag-end, closed because Hyprland issues are discussions-only now.
Happy to attach the crash report / a coredumpctl dump of PID 1415 if that’s useful. I can also try a controlled re-repro.
— Derek Scherer (@Dayruke), Omarchy 4.0.2 on Excalibur
Filed by Grok 4.6 via Grok Build.
View raw text
### System details
Intel Core i9-12900KF, NVIDIA GeForce RTX 3080 LHR (nvidia-open-dkms 610.57.04), Omarchy 4.0.2-1 (stable), Hyprland 0.56.2 (`efb50993780079460b0cbed1363e2166a2de1d9f`), kernel 7.1.9-arch1-2. Dual monitors: BenQ 2560x1440 (DP-3) + Samsung QCQ90 3840x2160@30 (HDMI-A-1). Desktop, Gigabyte Z690 UD AX DDR4.
`omarchy-debug --no-sudo --print` captured locally 2026-09-05 if more of it is useful.
### What's wrong?
**Super+T (Omarchy default “Toggle window floating/tiling”) SIGSEGVs Hyprland and kills the session** when the focused window is grouped and its layout target still holds a `CSpace` whose parent workspace has already been destroyed.
This is a Hyprland 0.56.2 compositor crash. Omarchy’s default bindings are the trigger path:
- `SUPER + T` → `hl.dsp.window.float({ action = "toggle" })` in `/usr/share/omarchy/default/hypr/bindings/tiling.lua`
- `SUPER + G` → `hl.dsp.group.toggle()` in the same file
- `SUPER + SHIFT + <n>` → move window to workspace
Hyprland `main` still has the unguarded call (checked 2026-09-05). Hyprland no longer accepts GitHub issues (see hyprwm/Hyprland#16121, same `toggleTargetFloating` → `updateWindows` path, different trigger, bot-closed). Filing here because the default Omarchy tiling/grouping workflow can take down the whole session.
#### What happened
2026-09-05 ~11:52 CDT, Excalibur:
1. Hyprland PID 1415 received SIGSEGV (signal 11, fault address `0x10`).
2. Wayland clients died with it (`hyprsunset` SIGABRT, Synology Drive `cloud-drive-ui` SIGABRT).
3. `uwsm` respawned Hyprland; existing windows were gone. I rebooted from tty5 (`sudo shutdown -r now`).
Not OOM: no oom-killer in the journal.
#### Crash stack (from `~/.cache/hyprland/hyprlandCrashReport1415.txt`)
```
Hyprland received signal 11(SEGV)
Version: efb50993780079460b0cbed1363e2166a2de1d9f
Tag: v0.56.2
#4 CWorkspace::updateWindows()
#5 Layout::CSpace::toggleTargetFloating(...)
#6 Layout::CLayoutManager::changeFloatingMode(...)
#7 Config::Actions::floatWindow(...)
#8 Config::Lua::Bindings::Internal::registerDispatcherBindings
… lua_pcallk …
#16 CKeybindManager::handleKeybinds(...)
```
#### Forensics from the core (PID 1415)
- Focused window: `foot` (`m_class = "foot"`), mapped on **workspace 5**.
- It was in a single-window `Desktop::View::CGroup`; layout target was `Layout::CWindowGroupTarget`.
- That group target’s `CSpace` (`0x55b37b2edfb0`) was created for **workspace 2**.
- Workspace 2 had since been destroyed (empty non-persistent workspace). `CSpace::m_parent` was expired (`impl_->_data = nullptr`).
- The `CSpace` object itself stayed alive because the group target still held `SP<CSpace> m_space`.
- Super+T then called `CSpace::toggleTargetFloating()` → `m_parent->updateWindows()` with a null `this` (`%rdi = 0`). `CWorkspace::updateWindows()` did `mov 0x10(%rdi), %rdi` and SIGSEGV’d at address `0x10`.
#### The unguarded call
`src/layout/space/Space.cpp` already treats a missing parent as valid in `remove()`:
```cpp
if (m_parent) // can be null if the workspace is gone
m_parent->updateWindows();
```
`toggleTargetFloating()` (v0.56.2 and current `main`) does not:
```cpp
void CSpace::toggleTargetFloating(SP<ITarget> t) {
t->setWasTiling(true);
m_algorithm->setFloating(t, !t->floating());
t->setWasTiling(false);
m_parent->updateWindows(); // crash when the workspace is gone
recalculate();
}
```
The deeper layout bug is that a grouped window moved onto another workspace did not get `assignToSpace()` onto that workspace’s `CSpace`, so it kept the zombie space from the destroyed one. The missing null check is what turns that into a session-killing SIGSEGV.
#### Likely reproduction (inferred from the core; not a second controlled run yet)
1. Open `foot` on workspace 2. Group it (`Super+G`) — even as a single-window group.
2. Move it to workspace 5 (`Super+Shift+5`). Leave workspace 2 empty so Hyprland destroys it.
3. On workspace 5, press `Super+T`.
Workaround that should avoid the crash: ungroup (`Super+Alt+G`) before toggling float or moving across workspaces.
#### Related, not the same bug
- omacom/omarchy#4883 — Super+T crash on a *misplaced special-workspace* window; stack is `bad_variant_access` in `CDwindleAlgorithm::removeTarget` on Hyprland 0.54.
- omacom/omarchy#5914 — Super+O on a pinned window stranded by a cross-monitor workspace move.
- omacom/omarchy#4854 — Super+O after a workspace switch (Hyprland 0.54, closed).
- hyprwm/Hyprland#16121 — same `toggleTargetFloating` → `updateWindows` frames, but SIGABRT on *scrolling-layout drag-end*, closed because Hyprland issues are discussions-only now.
Happy to attach the crash report / a `coredumpctl dump` of PID 1415 if that’s useful. I can also try a controlled re-repro.
— Derek Scherer ([@Dayruke](https://github.com/Dayruke)), Omarchy 4.0.2 on Excalibur
Filed by Grok 4.6 via Grok Build.
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 10:52 UTC