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

4.0.3 regression: third-party bar-widget/panel plugins break (News Radar widget silently vanishes; themo.nfl / omaprox / agent-bar throw QML TypeErrors)

Reported by dreed47 · filed Sep 9, 2026 · open at source

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

4.0.3 regression: third-party bar-widget/panel plugins break (News Radar widget silently vanishes; themo.nfl / omaprox / agent-bar throw QML TypeErrors)revision 1 · captured 2026-09-28 21:23 UTC via poll

Summary

Upgrading from omarchy 4.0.2-1 to 4.0.3-1 broke every third-party bar-widget / panel plugin I have installed. One plugin (News Radar) silently stops rendering its bar widget entirely; three others throw QML TypeError / QML-engine "invalid context" errors on every state change. The plugin backends are fine — this is a regression in the shell's plugin runtime between 4.0.2 and 4.0.3.

Environment

  • omarchy 4.0.2-1 → 4.0.3-1 (also omarchy-settings 4.0.2-1 → 4.0.3-1), upgraded 2026-09-08 17:38:59 -0400
  • Shell picked up the new version on the next restart at 19:38 the same day; everything below is with the 4.0.3 shell running
  • quickshell 0.3.1-1 (Arch)
  • Shell launched as quickshell -n -p /usr/share/omarchy/shell
  • Built-in bar (no custom full-bar plugin); widgets configured under bar.layout in ~/.config/omarchy/shell.json

Affected plugins and symptoms

PluginKindSymptom on 4.0.3
io.github.mtolhuys.news-radar (0.5.5)bar-widget + panelBar widget never becomes visible; feed never auto-refreshes. No error logged.
themo.nflpanelPanel.qml:103 TypeError: Property 'refresh' ... is not a function; also QQmlVMEMetaObject: Internal error - attempted to evaluate a function in an invalid context (x6)
io.github.andressm415.omaproxpanel/serviceService.qml:307 TypeError: Property 'refresh' ... is not a function
othavi0.agent-barbar-widget + popupPopup.qml:200 TypeError: Property 'rebuildFocusTargets' ... is not a function (repeating). Possibly the same root cause as #10979.

Also seen in the shell log, not tied to a single plugin:

qt.core.qobject.connect!@QObject::connect(QJSEngine, QtObject): invalid nullptr parameter   (x10)

Likely related, filed the same day: #10979 (4.0.3: third-party bar-plugin popups become stuck overlays), #10990 (cloned menu plugin loses appLibrary capability on re-instantiation).

News Radar detail (the silent failure)

src/BarWidget.qml starts hidden (property bool barVisible: false, visible: barVisible) and only reveals itself after a startup handshake completes:

Component.onCompleted → runs bin/news-radar-client installed via a Process → StdioCollector.onStreamFinished parses it → runs bin/news-radar-client indicator → its onStreamFinished sets root.barVisible = result.barVisible !== false.

On 4.0.3 that handshake never completes, so barVisible stays false → zero-size, no widget. The same barVisible gate also blocks the periodic refresh-if-due timer, which is why the feed also freezes.

The helper binary itself is healthy: running bin/news-radar-client refresh (and indicator, read) directly from a terminal works perfectly and produces a current edition. So the break is entirely in how the QML bar widget runs under 4.0.3 — candidates I could not fully bisect from the outside:

  • Process / StdioCollector (Quickshell.Io) lifecycle behaving differently, so onStreamFinished never fires or fires against a torn-down context
  • bar.barWidgetRegistry.metadataFor(moduleName) returning null for the widget's own id, which makes helperPath compute to "" and every runHelper() call early-return (the helper would then never run and barVisible would never flip). Relevant shell code: shell.qml pluginBarWidgetRegistryFor() / publicBarWidgetSnapshot() / syncPluginApis(), and plugins/bar/Bar.qml's fallbackBarWidgetRegistry whose metadataFor() always returns null.
  • Plugin widget components being destroyed and recreated faster than the two async helper calls can complete

The "invalid context" QQmlVMEMetaObject internal error on themo.nfl points at the same area — queued Qt.callLater(function(){ root.<method>() }) callbacks firing after the component's QML context has been invalidated, i.e. more aggressive teardown/rebuild of plugin components in 4.0.3.

Reproduce

  1. On omarchy 4.0.2 with any of the plugins above installed and enabled, confirm they work.
  2. Upgrade to 4.0.3, restart the shell.
  3. News Radar: no bar widget appears; ~/.cache/omarchy-news-radar/feed.json mtime stops advancing. Others: tail the quickshell log (/run/user/<uid>/quickshell/by-id/*/log.qslog) and see the TypeError: Property '...' is not a function / "invalid context" lines on each panel open or state change.

Workaround

Downgrading omarchy and omarchy-settings back to 4.0.2-1 restores all of them. Prefer not to run that as a standing fix.

Ask

Please treat the 4.0.2 → 4.0.3 plugin-runtime change as a regression. Happy to add full log excerpts, test a patch, or bisect further with pointers on which shell commit touched the bar-widget registry / plugin component lifecycle.

View raw text
### Summary

Upgrading from omarchy `4.0.2-1` to `4.0.3-1` broke every third-party bar-widget / panel plugin I have installed. One plugin (News Radar) silently stops rendering its bar widget entirely; three others throw QML `TypeError` / QML-engine "invalid context" errors on every state change. The plugin backends are fine — this is a regression in the shell's plugin runtime between 4.0.2 and 4.0.3.

### Environment

- omarchy `4.0.2-1` → `4.0.3-1` (also omarchy-settings `4.0.2-1` → `4.0.3-1`), upgraded `2026-09-08 17:38:59 -0400`
- Shell picked up the new version on the next restart at `19:38` the same day; everything below is with the 4.0.3 shell running
- quickshell `0.3.1-1` (Arch)
- Shell launched as `quickshell -n -p /usr/share/omarchy/shell`
- Built-in bar (no custom full-bar plugin); widgets configured under `bar.layout` in `~/.config/omarchy/shell.json`

### Affected plugins and symptoms

| Plugin | Kind | Symptom on 4.0.3 |
|---|---|---|
| `io.github.mtolhuys.news-radar` (0.5.5) | bar-widget + panel | Bar widget never becomes visible; feed never auto-refreshes. **No error logged.** |
| `themo.nfl` | panel | `Panel.qml:103` `TypeError: Property 'refresh' ... is not a function`; also `QQmlVMEMetaObject: Internal error - attempted to evaluate a function in an invalid context` (x6) |
| `io.github.andressm415.omaprox` | panel/service | `Service.qml:307` `TypeError: Property 'refresh' ... is not a function` |
| `othavi0.agent-bar` | bar-widget + popup | `Popup.qml:200` `TypeError: Property 'rebuildFocusTargets' ... is not a function` (repeating). Possibly the same root cause as #10979. |

Also seen in the shell log, not tied to a single plugin:

```
qt.core.qobject.connect!@QObject::connect(QJSEngine, QtObject): invalid nullptr parameter   (x10)
```

Likely related, filed the same day: #10979 (4.0.3: third-party bar-plugin popups become stuck overlays), #10990 (cloned menu plugin loses appLibrary capability on re-instantiation).

### News Radar detail (the silent failure)

`src/BarWidget.qml` starts hidden (`property bool barVisible: false`, `visible: barVisible`) and only reveals itself after a startup handshake completes:

`Component.onCompleted` → runs `bin/news-radar-client installed` via a `Process` → `StdioCollector.onStreamFinished` parses it → runs `bin/news-radar-client indicator` → its `onStreamFinished` sets `root.barVisible = result.barVisible !== false`.

On 4.0.3 that handshake never completes, so `barVisible` stays `false` → zero-size, no widget. The same `barVisible` gate also blocks the periodic `refresh-if-due` timer, which is why the feed also freezes.

The helper binary itself is healthy: running `bin/news-radar-client refresh` (and `indicator`, `read`) directly from a terminal works perfectly and produces a current edition. So the break is entirely in how the QML bar widget runs under 4.0.3 — candidates I could not fully bisect from the outside:

- `Process` / `StdioCollector` (`Quickshell.Io`) lifecycle behaving differently, so `onStreamFinished` never fires or fires against a torn-down context
- `bar.barWidgetRegistry.metadataFor(moduleName)` returning `null` for the widget's own id, which makes `helperPath` compute to `""` and every `runHelper()` call early-return (the helper would then never run and `barVisible` would never flip). Relevant shell code: `shell.qml` `pluginBarWidgetRegistryFor()` / `publicBarWidgetSnapshot()` / `syncPluginApis()`, and `plugins/bar/Bar.qml`'s `fallbackBarWidgetRegistry` whose `metadataFor()` always returns `null`.
- Plugin widget components being destroyed and recreated faster than the two async helper calls can complete

The "invalid context" `QQmlVMEMetaObject` internal error on `themo.nfl` points at the same area — queued `Qt.callLater(function(){ root.<method>() })` callbacks firing after the component's QML context has been invalidated, i.e. more aggressive teardown/rebuild of plugin components in 4.0.3.

### Reproduce

1. On omarchy 4.0.2 with any of the plugins above installed and enabled, confirm they work.
2. Upgrade to 4.0.3, restart the shell.
3. News Radar: no bar widget appears; `~/.cache/omarchy-news-radar/feed.json` mtime stops advancing. Others: tail the quickshell log (`/run/user/<uid>/quickshell/by-id/*/log.qslog`) and see the `TypeError: Property '...' is not a function` / "invalid context" lines on each panel open or state change.

### Workaround

Downgrading `omarchy` and `omarchy-settings` back to `4.0.2-1` restores all of them. Prefer not to run that as a standing fix.

### Ask

Please treat the 4.0.2 → 4.0.3 plugin-runtime change as a regression. Happy to add full log excerpts, test a patch, or bisect further with pointers on which shell commit touched the bar-widget registry / plugin component lifecycle.

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:20 UTC