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

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).

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

Failed bar option leaves no bar at all: pluginBarLoader error handler throws ReferenceError before the fallback runsrevision 1 · captured 2026-09-28 21:24 UTC via poll

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):

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)
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