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-5147GitHub issuePublicReceived

Menu window stops mapping after a panel reload (duplicate IpcHandlers) with no output loss involved

Reported by ucotman · filed Oct 4, 2026 · open at source

In the audited area (menu) — decided by agents · verified. Not validated yet.

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?
AreaIn the audited areamenu· 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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. So far: in the audited area (menu) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.

Original report

Menu window stops mapping after a panel reload (duplicate IpcHandlers) with no output loss involvedrevision 1 · captured 2026-10-04 21:53 UTC via poll

Summary

The panel/component tree re-instantiates and the previous handlers survive, producing the familiar duplicate-IpcHandler batch — with no output loss involved at all. After that single re-instantiation the menu IPC keeps answering ok, but the menu window never maps: SUPER+SPACE silently does nothing, and the bar stays visibly normal.

This is the same duplication mechanism described in #13072 and #13956, but neither of those paths is present here — nothing was disconnected, no monitor came or went, and the instance logged zero There are no outputs - creating placeholder screen / FALLBACK lines across its entire 8 h 52 m lifetime. So the recreation-without-destruction does not appear to be gated on the "no outputs" / placeholder-screen path.

Cross-links: #13072 (idle wake, duplicate IpcHandlers + leaked child processes), #13956 (KVM monitor disconnect/reconnect, rescanPlugins restores shortcuts), #13995 (overlapping quickshell generations — different mechanism, reported by me).

Environment

  • Framework Desktop, AMD Strix Halo, Omarchy
  • omarchy-dev 4.0.0.r6692.gc05d901-1
  • Quickshell 0.3.1 (Arch package)
  • Hyprland 0.56.2 (commit efb50993…, aquamarine 0.15.1)
  • Two permanent outputs: DP-4 (LG ULTRAGEAR+) and a headless Virtual-1 created via hyprctl output create headless Virtual-1
  • Several third-party plugins installed under ~/.config/omarchy/plugins/

Symptom

omarchy menu ping → ok, exactly one quickshell process, bar and background surfaces present as normal — but pressing SUPER+SPACE does nothing. The functional tell:

$ omarchy menu summon root
ok                                    # IPC accepted it
$ hyprctl layers | grep omarchy-menu
                                    # nothing: no overlay surface was ever created

No crash, no coredump (coredumpctl list /usr/bin/quickshell → nothing for this period), no extra engine generation. omarchy restart shell restores it immediately.

Evidence

Instance started 14:08:28, healthy, logging exactly one batch of duplicate-handler warnings at startup (one registration per live screen — 19 lines with DP-4 + Virtual-1, counting built-in and third-party panels together).

8 h 43 m later, with no output change, a second identical batch appeared in ~250 ms — built-in and third-party panels alike, i.e. the whole panel tree was re-instantiated, not one misbehaving plugin:

2026-10-04 22:51:10.310  WARN QQuickImage at /usr/share/omarchy/shell/plugins/agents/Panel.qml[1392:5]:
                         Cannot open: .../plugins/agents/assets/grok.svg
2026-10-04 22:51:10.310  WARN ShellIpc at /usr/share/omarchy/shell/plugins/agents/Panel.qml[794:3]:
                         Handler was registered but will not be used … target omarchy.agents
2026-10-04 22:51:10.320  WARN ShellIpc at .../panels/bluetooth/Panel.qml[640:3]: … omarchy.bluetooth
2026-10-04 22:51:10.331  WARN ShellIpc at .../panels/network/Panel.qml[210:3]: … omarchy.network
                         (monitor, power, weather, clock, indicators, elsewhen — same pattern)
2026-10-04 22:51:10.260  WARN IpcHandler at ~/.config/omarchy/plugins/ronald.input-sources/Panel.qml[115:3]
2026-10-04 22:51:10.266  WARN IpcHandler at ~/.config/omarchy/plugins/evo.webtheme/Panel.qml[208:3]
2026-10-04 22:51:10.408  WARN IpcHandler at ~/.config/omarchy/plugins/omaplug/BarWidget.qml[55:5]
2026-10-04 22:51:10.422  DEBUG qml: Panel.qml loaded, filterMode= 2 rows= 0
2026-10-04 22:51:12.622  DEBUG qml: marketplace entries: 4096
2026-10-04 22:51:16.596  DEBUG qml: updateCheckProcess onExited exitCode= 0

Warning count went 19 → 38 (2.0×). The menu died somewhere in that window. It happened twice that day, ~13:45 and ~22:51, both times immediately following a Panel.qml loaded + marketplace entries: 4096 pair. The log identifies the re-instantiation but not its caller; updateCheckProcess finishing seconds before is correlation, not proof.

Why a fixed warning threshold is the wrong detection rule

Worth flagging because it defeats log-based watchdogs (including my own, which slept through both events today): the healthy count is proportional to screen count plus installed plugins, so any absolute number calibrated on one monitor layout is wrong on another. Per-instance baseline is stable and self-calibrating — record the count once the instance is past its startup window, then treat any further duplicate-handler warning as evidence that a re-instantiation orphaned registrations. On this box that is 19 → anything > 19, which catches both events; a >= 40 threshold missed both at 38.

Questions

  1. Is omarchy-shell shell rescanPlugins the intended lighter recovery for this state (as reported in #13956)? I have only tested omarchy restart shell. If rescanPlugins remaps the menu window again, that is a much better thing for a watchdog to try before a full restart.
  2. Is there a way to ask the shell directly whether a plugin/panel instance is still alive but unbacked — something cheaper than counting log lines?

Also observed

plugins/agents/Panel.qml:185 declares { providerId: "grok", providerName: "Grok" }, but plugins/agents/assets/ ships only claude.svg, codex.svg, codex-light.svg, fireworks.svg — no grok.svg. Every panel load logs one Cannot open: …/assets/grok.svg from Panel.qml[1392:5]. Unrelated to the dead menu, just noise on each reload.


Filed with an AI assistant assembling these logs; the observations and commands above are from my own machine.

View raw text
## Summary

The panel/component tree re-instantiates and the previous handlers survive, producing the familiar duplicate-`IpcHandler` batch — **with no output loss involved at all**. After that single re-instantiation the menu IPC keeps answering `ok`, but the menu window never maps: `SUPER+SPACE` silently does nothing, and the bar stays visibly normal.

This is the same duplication mechanism described in #13072 and #13956, but neither of those paths is present here — nothing was disconnected, no monitor came or went, and the instance logged **zero** `There are no outputs - creating placeholder screen` / `FALLBACK` lines across its entire 8 h 52 m lifetime. So the recreation-without-destruction does not appear to be gated on the "no outputs" / placeholder-screen path.

Cross-links: #13072 (idle wake, duplicate IpcHandlers + leaked child processes), #13956 (KVM monitor disconnect/reconnect, `rescanPlugins` restores shortcuts), #13995 (overlapping quickshell generations — different mechanism, reported by me).

## Environment

- Framework Desktop, AMD Strix Halo, Omarchy
- `omarchy-dev 4.0.0.r6692.gc05d901-1`
- Quickshell 0.3.1 (Arch package)
- Hyprland 0.56.2 (commit `efb50993…`, aquamarine 0.15.1)
- Two permanent outputs: `DP-4` (LG ULTRAGEAR+) and a headless `Virtual-1` created via `hyprctl output create headless Virtual-1`
- Several third-party plugins installed under `~/.config/omarchy/plugins/`

## Symptom

`omarchy menu ping` → `ok`, exactly one `quickshell` process, bar and background surfaces present as normal — but pressing `SUPER+SPACE` does nothing. The functional tell:

```console
$ omarchy menu summon root
ok                                    # IPC accepted it
$ hyprctl layers | grep omarchy-menu
                                    # nothing: no overlay surface was ever created
```

No crash, no coredump (`coredumpctl list /usr/bin/quickshell` → nothing for this period), no extra engine generation. `omarchy restart shell` restores it immediately.

## Evidence

Instance started 14:08:28, healthy, logging exactly one batch of duplicate-handler warnings at startup (one registration per live screen — 19 lines with `DP-4` + `Virtual-1`, counting built-in and third-party panels together).

8 h 43 m later, with no output change, a second identical batch appeared in ~250 ms — built-in and third-party panels alike, i.e. the whole panel tree was re-instantiated, not one misbehaving plugin:

```
2026-10-04 22:51:10.310  WARN QQuickImage at /usr/share/omarchy/shell/plugins/agents/Panel.qml[1392:5]:
                         Cannot open: .../plugins/agents/assets/grok.svg
2026-10-04 22:51:10.310  WARN ShellIpc at /usr/share/omarchy/shell/plugins/agents/Panel.qml[794:3]:
                         Handler was registered but will not be used … target omarchy.agents
2026-10-04 22:51:10.320  WARN ShellIpc at .../panels/bluetooth/Panel.qml[640:3]: … omarchy.bluetooth
2026-10-04 22:51:10.331  WARN ShellIpc at .../panels/network/Panel.qml[210:3]: … omarchy.network
                         (monitor, power, weather, clock, indicators, elsewhen — same pattern)
2026-10-04 22:51:10.260  WARN IpcHandler at ~/.config/omarchy/plugins/ronald.input-sources/Panel.qml[115:3]
2026-10-04 22:51:10.266  WARN IpcHandler at ~/.config/omarchy/plugins/evo.webtheme/Panel.qml[208:3]
2026-10-04 22:51:10.408  WARN IpcHandler at ~/.config/omarchy/plugins/omaplug/BarWidget.qml[55:5]
2026-10-04 22:51:10.422  DEBUG qml: Panel.qml loaded, filterMode= 2 rows= 0
2026-10-04 22:51:12.622  DEBUG qml: marketplace entries: 4096
2026-10-04 22:51:16.596  DEBUG qml: updateCheckProcess onExited exitCode= 0
```

Warning count went 19 → 38 (2.0×). The menu died somewhere in that window. It happened twice that day, ~13:45 and ~22:51, both times immediately following a `Panel.qml loaded` + `marketplace entries: 4096` pair. The log identifies the re-instantiation but not its caller; `updateCheckProcess` finishing seconds before is correlation, not proof.

## Why a fixed warning threshold is the wrong detection rule

Worth flagging because it defeats log-based watchdogs (including my own, which slept through both events today): the healthy count is proportional to screen count plus installed plugins, so any absolute number calibrated on one monitor layout is wrong on another. Per-instance baseline is stable and self-calibrating — record the count once the instance is past its startup window, then treat *any further* duplicate-handler warning as evidence that a re-instantiation orphaned registrations. On this box that is `19 → anything > 19`, which catches both events; a `>= 40` threshold missed both at 38.

## Questions

1. Is `omarchy-shell shell rescanPlugins` the intended lighter recovery for this state (as reported in #13956)? I have only tested `omarchy restart shell`. If `rescanPlugins` remaps the menu window again, that is a much better thing for a watchdog to try before a full restart.
2. Is there a way to ask the shell directly whether a plugin/panel instance is still alive but unbacked — something cheaper than counting log lines?

## Also observed

`plugins/agents/Panel.qml:185` declares `{ providerId: "grok", providerName: "Grok" }`, but `plugins/agents/assets/` ships only `claude.svg`, `codex.svg`, `codex-light.svg`, `fireworks.svg` — no `grok.svg`. Every panel load logs one `Cannot open: …/assets/grok.svg` from `Panel.qml[1392:5]`. Unrelated to the dead menu, just noise on each reload.

---

*Filed with an AI assistant assembling these logs; the observations and commands above are from my own machine.*

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.

  • Decided by agents · verified: in the audited area (menu)
  • Decided by agents · verified: matches no known issue

The outcome (valid, duplicate, not a bug, …) is not decided yet.