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.
Failed bar option leaves no bar at all: pluginBarLoader error handler throws ReferenceError before the fallback runs
Reported by hshshshs12 · filed Aug 30, 2026Closed upstream on 2026-10-09 by the bot omarchybot, as a duplicate (target not recorded).
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
When a custom bar option fails to load, the shell is supposed to fall back to the default bar. Instead the error handler itself throws, the fallback never runs, and the session is left with no bar at all — the layer surface is gone and windows expand into the reclaimed space.
From the quickshell log (Omarchy 4.0.1-1):
WARN scene: @shell.qml[256:-1]: ReferenceError: errorString is not definedWhy
shell/shell.qml, pluginBarLoader.onStatusChanged (line 257 on master):
onStatusChanged: {
if (status === Loader.Error) {
var detail = errorString && errorString() ? errorString() : ""
console.warn("bar option " + shell.activeBarId + " failed to load, falling back to " + shell.defaultBarId + ":", detail)
shell.failedBarId = shell.activeBarId
}
}QtQuick.Loader has no errorString member, and in QML an unqualified lookup of an undefined name throws ReferenceError — the errorString && guard does not protect against that. The throw aborts the handler, so:
- the diagnostic
console.warnnever prints (the real load error is swallowed), and shell.failedBarIdis never set, soactiveBarId(line 181) never resolves back todefaultBarId, sodefaultBarLoadernever activates.
The same unguarded errorString pattern also appears at line 646 in the plugin-widget loader path and looks susceptible to the same failure.
Reproduce
- Switch to any bar option that fails to load — e.g. the verbatim clone from #9115, or
omarchy bar use x.barpointing at a bar QML with a syntax error. omarchy restart shell- No bar on any monitor; log shows the ReferenceError above instead of the intended "falling back to omarchy.bar" warning.
Expected
The failed bar option is recorded in failedBarId and the stock bar loads, as the surrounding code clearly intends.
Possible fix direction
Guard the lookup (typeof errorString === "function") or take the detail from the loader's sourceComponent when available — and consider wrapping the handler so a failure in diagnostics can never block shell.failedBarId = shell.activeBarId.
System
- Omarchy 4.0.1-1, Arch Linux (kernel 7.1.9-arch1-2)
- CPU: Intel i7-10700K, GPU: NVIDIA Quadro P2200
- Verified the same code is on current master (
shell/shell.qmllines 257 and 646)
View raw text
### What happened
When a custom bar option fails to load, the shell is supposed to fall back to the default bar. Instead the error handler itself throws, the fallback never runs, and the session is left with **no bar at all** — the layer surface is gone and windows expand into the reclaimed space.
From the quickshell log (Omarchy 4.0.1-1):
```
WARN scene: @shell.qml[256:-1]: ReferenceError: errorString is not defined
```
### Why
`shell/shell.qml`, `pluginBarLoader.onStatusChanged` (line 257 on master):
```qml
onStatusChanged: {
if (status === Loader.Error) {
var detail = errorString && errorString() ? errorString() : ""
console.warn("bar option " + shell.activeBarId + " failed to load, falling back to " + shell.defaultBarId + ":", detail)
shell.failedBarId = shell.activeBarId
}
}
```
`QtQuick.Loader` has no `errorString` member, and in QML an unqualified lookup of an undefined name throws `ReferenceError` — the `errorString &&` guard does not protect against that. The throw aborts the handler, so:
- the diagnostic `console.warn` never prints (the real load error is swallowed), and
- `shell.failedBarId` is never set, so `activeBarId` (line 181) never resolves back to `defaultBarId`, so `defaultBarLoader` never activates.
The same unguarded `errorString` pattern also appears at line 646 in the plugin-widget loader path and looks susceptible to the same failure.
### Reproduce
1. Switch to any bar option that fails to load — e.g. the verbatim clone from #9115, or `omarchy bar use x.bar` pointing at a bar QML with a syntax error.
2. `omarchy restart shell`
3. No bar on any monitor; log shows the ReferenceError above instead of the intended "falling back to omarchy.bar" warning.
### Expected
The failed bar option is recorded in `failedBarId` and the stock bar loads, as the surrounding code clearly intends.
### Possible fix direction
Guard the lookup (`typeof errorString === "function"`) or take the detail from the loader's `sourceComponent` when available — and consider wrapping the handler so a failure in diagnostics can never block `shell.failedBarId = shell.activeBarId`.
### System
- Omarchy 4.0.1-1, Arch Linux (kernel 7.1.9-arch1-2)
- CPU: Intel i7-10700K, GPU: NVIDIA Quadro P2200
- Verified the same code is on current master (`shell/shell.qml` lines 257 and 646)
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:06 UTC