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

omarchy-restart-shell SIGSEGV: QQuickWindowPrivate::polishItems during QQmlEngine destructor

Reported by 73Zut · filed Sep 15, 2026 · open at source

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

omarchy-restart-shell SIGSEGV: QQuickWindowPrivate::polishItems during QQmlEngine destructorrevision 1 · captured 2026-09-28 21:23 UTC via poll

What happened

omarchy restart shell killed the running Omarchy shell over Quickshell IPC. During teardown the process SIGSEGV'd. Quickshell's crash handler restarted a replacement; omarchy-restart-shell's quickshell kill loop then killed that replacement too, and it died on the same stack. A third launch a few seconds later stayed up. The bar flickered and came back. No user data was lost.

This is a shutdown-path crash, not an idle crash.

What was expected

quickshell kill / omarchy restart shell should exit the shell cleanly, then start a new instance.

Steps to reproduce

  1. Omarchy shell running (quickshell -n -p /usr/share/omarchy/shell).
  2. Run omarchy restart shell (which loops quickshell kill -p "$CONFIG_DIR" --any-display until no instance remains, then hyprctl dispatch of omarchy-launch-shell).
  3. Journal shows Exiting due to IPC request, then SIGSEGV.

Reproduced twice in one restart (PIDs 1690679 and 1692614, four seconds apart, matching stacks). Not retested after removing a third-party plugin that was loaded at the time (see below).

Evidence

Journal, 2026-09-15 16:41 MDT:

16:41:21  omarchy-shell: INFO: Exiting due to IPC request.
16:41:21  omarchy-shell: WARN qml: data-goblin.fileblade: drive watcher failed (1): Backend stopped
16:41:22  systemd-coredump: Process 1690679 (quickshell) ... signal 11/SEGV
16:41:22  omarchy-shell: ERROR: Quickshell has crashed under pid 1690679
16:41:22  omarchy-shell: ERROR: Quickshell has been restarted.
16:41:26  second SIGSEGV, PID 1692614, same stack
16:41:29  third IPC exit; replacement PID 1694054 survived

coredumpctl info for both dumps: signal 11, si_code: SI_TKILL. That is Quickshell's crash handler catching the original fault and re-raising. The original work is the Qt frames below.

Stack (Quickshell crash report, PID 1690679)

Config: /usr/share/omarchy/shell/shell.qml. Report: ~/.cache/quickshell/crashes/0ph4ch2flt/report.txt.

#4  QQuickWindowPrivate::polishItems()     libQt6Quick.so.6
#6  QQuickWindow::event(QEvent*)
#8  QPlatformWindow::deliverUpdateRequest()
#17 libQt6QmlWorkerScript.so.6             (nested event-loop spin)
#19 QQmlEngine::~QQmlEngine()
#23 QObject::~QObject()
#25 QObject::event(QEvent*)                (deferred delete)
#33 QEventLoop::exec
#34 QCoreApplication::exec

PID 1692614 (~/.cache/quickshell/crashes/0ph4ycgflt/report.txt) is the same path.

gdb on the systemd core confirmed <signal handler called> between Quickshell's re-raise and the libQt6Quick polish frames. Arch debuginfod was enabled but did not finish symbolizing Qt internals in time; unnamed frames are left unnamed. They sit in libQt6Quick above polishItems and in quickshell itself.

Mechanism (proved vs inferred)

Proved: IPC kill starts teardown; QQmlEngine is destroyed; a nested event loop still delivers a pending window update; polishItems then SIGSEGVs.

Inferred: destroy-engine-while-a-QQuickWindow still has a polish/update queued. omarchy-restart-shell's kill loop makes that two crashes instead of one, because the crash handler respawns an instance the loop then kills.

Third-party code in the address space

data-goblin.fileblade was loaded in the dying process and logged Backend stopped; retry in 360 ms during exit. The crashing frames are Qt/Quickshell C++, not plugin QML. Fileblade was removed after this dump; this restart has not been reproduced on a stock plugin set. Do not treat Fileblade as the root cause from this report alone.

Not a duplicate of:

  • #10098 — IpcHandler::updateRegistration on a replacement that is still starting
  • #8547 — QQuickRepeater teardown on Hyprland workspace moves, not an IPC kill

System

Omarchyomarchy-dev 4.0.0.r2147.g2fbac0c-1 (edge)
Quickshell0.3.1-1
Qt6.11.2 (qt6-base 6.11.2-3, qt6-declarative 6.11.2-2)
Hyprland0.56.2-3
Kernel7.2.5-3-omarchy
GPUIntel TigerLake-LP GT2 / i915 (8086:9a49)
MachineDell Vostro 14 5410, 16 GiB

omarchy-debug --no-sudo --print log (24h): https://logs.omarchy.org/11w9pR

Cores remain in systemd-coredump for PIDs 1690679 and 1692614 on this machine.

Filed by Grok 4.6 via Grok Build.

View raw text
## What happened

`omarchy restart shell` killed the running Omarchy shell over Quickshell IPC. During teardown the process SIGSEGV'd. Quickshell's crash handler restarted a replacement; `omarchy-restart-shell`'s `quickshell kill` loop then killed that replacement too, and it died on the same stack. A third launch a few seconds later stayed up. The bar flickered and came back. No user data was lost.

This is a shutdown-path crash, not an idle crash.

## What was expected

`quickshell kill` / `omarchy restart shell` should exit the shell cleanly, then start a new instance.

## Steps to reproduce

1. Omarchy shell running (`quickshell -n -p /usr/share/omarchy/shell`).
2. Run `omarchy restart shell` (which loops `quickshell kill -p "$CONFIG_DIR" --any-display` until no instance remains, then `hyprctl dispatch` of `omarchy-launch-shell`).
3. Journal shows `Exiting due to IPC request`, then SIGSEGV.

Reproduced twice in one restart (PIDs 1690679 and 1692614, four seconds apart, matching stacks). Not retested after removing a third-party plugin that was loaded at the time (see below).

## Evidence

Journal, 2026-09-15 16:41 MDT:

```
16:41:21  omarchy-shell: INFO: Exiting due to IPC request.
16:41:21  omarchy-shell: WARN qml: data-goblin.fileblade: drive watcher failed (1): Backend stopped
16:41:22  systemd-coredump: Process 1690679 (quickshell) ... signal 11/SEGV
16:41:22  omarchy-shell: ERROR: Quickshell has crashed under pid 1690679
16:41:22  omarchy-shell: ERROR: Quickshell has been restarted.
16:41:26  second SIGSEGV, PID 1692614, same stack
16:41:29  third IPC exit; replacement PID 1694054 survived
```

`coredumpctl info` for both dumps: signal 11, `si_code: SI_TKILL`. That is Quickshell's crash handler catching the original fault and re-raising. The original work is the Qt frames below.

### Stack (Quickshell crash report, PID 1690679)

Config: `/usr/share/omarchy/shell/shell.qml`. Report: `~/.cache/quickshell/crashes/0ph4ch2flt/report.txt`.

```
#4  QQuickWindowPrivate::polishItems()     libQt6Quick.so.6
#6  QQuickWindow::event(QEvent*)
#8  QPlatformWindow::deliverUpdateRequest()
#17 libQt6QmlWorkerScript.so.6             (nested event-loop spin)
#19 QQmlEngine::~QQmlEngine()
#23 QObject::~QObject()
#25 QObject::event(QEvent*)                (deferred delete)
#33 QEventLoop::exec
#34 QCoreApplication::exec
```

PID 1692614 (`~/.cache/quickshell/crashes/0ph4ycgflt/report.txt`) is the same path.

gdb on the systemd core confirmed `<signal handler called>` between Quickshell's re-raise and the `libQt6Quick` polish frames. Arch debuginfod was enabled but did not finish symbolizing Qt internals in time; unnamed frames are left unnamed. They sit in `libQt6Quick` above `polishItems` and in `quickshell` itself.

## Mechanism (proved vs inferred)

**Proved:** IPC kill starts teardown; `QQmlEngine` is destroyed; a nested event loop still delivers a pending window update; `polishItems` then SIGSEGVs.

**Inferred:** destroy-engine-while-a-`QQuickWindow` still has a polish/update queued. `omarchy-restart-shell`'s kill loop makes that two crashes instead of one, because the crash handler respawns an instance the loop then kills.

## Third-party code in the address space

`data-goblin.fileblade` was loaded in the dying process and logged `Backend stopped; retry in 360 ms` during exit. The crashing frames are Qt/Quickshell C++, not plugin QML. Fileblade was removed after this dump; this restart has **not** been reproduced on a stock plugin set. Do not treat Fileblade as the root cause from this report alone.

Not a duplicate of:

- #10098 — `IpcHandler::updateRegistration` on a replacement that is still starting
- #8547 — `QQuickRepeater` teardown on Hyprland workspace moves, not an IPC kill

## System

| | |
|---|---|
| Omarchy | `omarchy-dev 4.0.0.r2147.g2fbac0c-1` (edge) |
| Quickshell | 0.3.1-1 |
| Qt | 6.11.2 (`qt6-base` 6.11.2-3, `qt6-declarative` 6.11.2-2) |
| Hyprland | 0.56.2-3 |
| Kernel | 7.2.5-3-omarchy |
| GPU | Intel TigerLake-LP GT2 / i915 (`8086:9a49`) |
| Machine | Dell Vostro 14 5410, 16 GiB |

`omarchy-debug --no-sudo --print` log (24h): https://logs.omarchy.org/11w9pR

Cores remain in systemd-coredump for PIDs 1690679 and 1692614 on this machine.

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 13:57 UTC