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.
omarchy-restart-shell SIGSEGV: QQuickWindowPrivate::polishItems during QQmlEngine destructor
Reported by 73Zut · filed Sep 15, 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
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
- Omarchy shell running (
quickshell -n -p /usr/share/omarchy/shell). - Run
omarchy restart shell(which loopsquickshell kill -p "$CONFIG_DIR" --any-displayuntil no instance remains, thenhyprctl dispatchofomarchy-launch-shell). - 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 survivedcoredumpctl 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::execPID 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::updateRegistrationon a replacement that is still starting - #8547 —
QQuickRepeaterteardown 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.
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