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.
Recursive plugin inotify + 150ms reload: git checkout / save storms take down the shell
Reported by gw7523 · filed Sep 7, 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 Ultra 5 225, NVIDIA GeForce RTX 5080, Omarchy 4.0.2-1, Hyprland 0.56.2
What's wrong?
shell/services/PluginRegistry.qml runs inotifywait -m -r on ~/.config/omarchy/plugins (the whole tree, including each plugin's .git). localPluginIdForPath already ignores /.git/ paths, but:
- the kernel still watches every git object dir (omamail's
.githere is ~22M / hundreds of directories) - working-tree writes (a
git checkout, or an editor saving QML) still firelocalPluginChanged shell.qmlreloads the entire plugin graph on a 150ms timer
On this seat an omamail git checkout / merge at 12:22 produced a burst of Local plugin changed, reloading: omamail, ShortcutHelp.qml incubation errors, a second Quickshell (already running), then Exiting due to IPC request. Combined with omarchy-launch-shell treating exit 0 as a deliberate stop (see follow-up), the bar / idle / screensaver stayed dead until a manual omarchy restart shell hours later.
Expected: .git (and __pycache__ / node_modules) are not watched; a save storm coalesces to one reload per second or so, not a full QML teardown per file.
Suggested guardrails in tree:
- pass
inotifywait --exclude '/\.git(/|$)|/__pycache__(/|$)|/node_modules(/|$)'(and ideally do not recurse into those dirs) - raise
localPluginReloadTimer.intervalfrom 150ms to ~1000ms
--exclude only filters events, not watches; skipping .git in the watch list is better. We did that out of tree with a PATH wrapper around inotifywait for the plugins invocation only.
View raw text
### System details Intel Core Ultra 5 225, NVIDIA GeForce RTX 5080, Omarchy 4.0.2-1, Hyprland 0.56.2 ### What's wrong? `shell/services/PluginRegistry.qml` runs `inotifywait -m -r` on `~/.config/omarchy/plugins` (the whole tree, including each plugin's `.git`). `localPluginIdForPath` already ignores `/.git/` paths, but: 1. the kernel still watches every git object dir (omamail's `.git` here is ~22M / hundreds of directories) 2. **working-tree** writes (a `git checkout`, or an editor saving QML) still fire `localPluginChanged` 3. `shell.qml` reloads the **entire** plugin graph on a 150ms timer On this seat an omamail `git checkout` / merge at 12:22 produced a burst of `Local plugin changed, reloading: omamail`, ShortcutHelp.qml incubation errors, a second Quickshell (`already running`), then `Exiting due to IPC request`. Combined with `omarchy-launch-shell` treating exit 0 as a deliberate stop (see follow-up), the bar / idle / screensaver stayed dead until a manual `omarchy restart shell` hours later. Expected: `.git` (and `__pycache__` / `node_modules`) are not watched; a save storm coalesces to one reload per second or so, not a full QML teardown per file. Suggested guardrails in tree: - pass `inotifywait --exclude '/\.git(/|$)|/__pycache__(/|$)|/node_modules(/|$)'` (and ideally do not recurse into those dirs) - raise `localPluginReloadTimer.interval` from 150ms to ~1000ms `--exclude` only filters events, not watches; skipping `.git` in the watch list is better. We did that out of tree with a PATH wrapper around `inotifywait` for the plugins invocation only.
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 11:05 UTC