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

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

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+T: grouped window keeps a dead workspace CSpace, toggleTargetFloating dereferences expired m_parentrevision 1 · captured 2026-09-28 21:23 UTC via poll

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():

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)

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