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.
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
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
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-settings4.0.2-1→4.0.3-1), upgraded2026-09-08 17:38:59 -0400 - Shell picked up the new version on the next restart at
19:38the 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.layoutin~/.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, soonStreamFinishednever fires or fires against a torn-down contextbar.barWidgetRegistry.metadataFor(moduleName)returningnullfor the widget's own id, which makeshelperPathcompute to""and everyrunHelper()call early-return (the helper would then never run andbarVisiblewould never flip). Relevant shell code:shell.qmlpluginBarWidgetRegistryFor()/publicBarWidgetSnapshot()/syncPluginApis(), andplugins/bar/Bar.qml'sfallbackBarWidgetRegistrywhosemetadataFor()always returnsnull.- 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
- On omarchy 4.0.2 with any of the plugins above installed and enabled, confirm they work.
- Upgrade to 4.0.3, restart the shell.
- News Radar: no bar widget appears;
~/.cache/omarchy-news-radar/feed.jsonmtime stops advancing. Others: tail the quickshell log (/run/user/<uid>/quickshell/by-id/*/log.qslog) and see theTypeError: 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