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.
System tray icon goes blank after an attention-icon round-trip (Qt SystemTrayIcon message)
Reported by Ant2210 · filed Sep 1, 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
A StatusNotifierItem that briefly enters NeedsAttention with an attention icon leaves its tray icon blank after the attention state clears. The tray slot keeps its size and stays clickable, but the icon is gone until the item is rebuilt (hide/show) or the shell restarts. Reproduced with EasyEffects 8.2.8 on omarchy 4.0.2 / quickshell 0.3.1.
Expected
After the attention icon disappears, the tray icon returns to the app's normal icon.
Actual
The icon goes blank. Hide + show the item (or omarchy restart shell) brings it back — so the icon data is intact; this is a re-render failure, not data loss.
Steps to reproduce
- EasyEffects 8.2.8 running, tray icon visible in the Omarchy bar tray.
- Click the EasyEffects tray icon → Output Presets → pick any preset.
- EasyEffects shows a 3s tray message (
SystemTrayIcon.showMessage(…, SystemTrayIcon.Information, 3000)); the icon becomes an info/"i" glyph (SNIStatus=NeedsAttention,AttentionIconName=dialog-information). - After ~3s the message clears (
Status→Active) and the EasyEffects icon goes blank and stays blank until the item is hidden/shown or the shell restarts.
Root cause
/usr/share/omarchy/shell/plugins/bar/widgets/Tray.qml, the TrayIcon component toggles Image.layer.enabled/visible based on symbolic-ness:
Image {
...
visible: !trayIconRoot.symbolic
layer.enabled: trayIconRoot.symbolic
}
MultiEffect {
...
visible: trayIconRoot.symbolic
}EasyEffects' icon (com.github.wwmm.easyeffects-symbolic) is symbolic → rendered through a hidden offscreen layer + MultiEffect tint. The attention icon dialog-information is not symbolic → plain visible image. Returning to the symbolic icon re-enables the layer with an unchanged image source, leaving the layer texture stale → blank. DBus side is healthy throughout (Status=Active, valid IconName + pixmaps); the blank only clears on item rebuild.
Proposed fix
Keep the layer persistent and switch only the tint:
Image {
...
visible: false
layer.enabled: true
}
MultiEffect {
...
colorization: trayIconRoot.symbolic ? 1.0 : 0.0
colorizationColor: root.foreground
}Verified locally by cloning the widget to ~/.config/omarchy/plugins/ant.tray/ and applying the same change — the icon now survives the attention round-trip.
Environment
- omarchy 4.0.2-1, quickshell 0.3.1-1, easyeffects 8.2.8-1, qt6-base 6.11.2-3, hyprland 0.56.2-1
- Intel i7-1355U, Iris Xe + RTX 3050, Hyprland/Wayland
View raw text
### Summary
A StatusNotifierItem that briefly enters `NeedsAttention` with an attention icon leaves its tray icon **blank** after the attention state clears. The tray slot keeps its size and stays clickable, but the icon is gone until the item is rebuilt (hide/show) or the shell restarts. Reproduced with EasyEffects 8.2.8 on omarchy 4.0.2 / quickshell 0.3.1.
### Expected
After the attention icon disappears, the tray icon returns to the app's normal icon.
### Actual
The icon goes blank. Hide + show the item (or `omarchy restart shell`) brings it back — so the icon *data* is intact; this is a re-render failure, not data loss.
### Steps to reproduce
1. EasyEffects 8.2.8 running, tray icon visible in the Omarchy bar tray.
2. Click the EasyEffects tray icon → **Output Presets** → pick any preset.
3. EasyEffects shows a 3s tray message (`SystemTrayIcon.showMessage(…, SystemTrayIcon.Information, 3000)`); the icon becomes an info/"i" glyph (SNI `Status=NeedsAttention`, `AttentionIconName=dialog-information`).
4. After ~3s the message clears (`Status` → `Active`) and the EasyEffects icon goes blank and stays blank until the item is hidden/shown or the shell restarts.
### Root cause
`/usr/share/omarchy/shell/plugins/bar/widgets/Tray.qml`, the `TrayIcon` component toggles `Image.layer.enabled`/`visible` based on symbolic-ness:
```qml
Image {
...
visible: !trayIconRoot.symbolic
layer.enabled: trayIconRoot.symbolic
}
MultiEffect {
...
visible: trayIconRoot.symbolic
}
```
EasyEffects' icon (`com.github.wwmm.easyeffects-symbolic`) is symbolic → rendered through a hidden offscreen layer + `MultiEffect` tint. The attention icon `dialog-information` is not symbolic → plain visible image. Returning to the symbolic icon re-enables the layer with an unchanged image source, leaving the layer texture stale → blank. DBus side is healthy throughout (`Status=Active`, valid `IconName` + pixmaps); the blank only clears on item rebuild.
### Proposed fix
Keep the layer persistent and switch only the tint:
```qml
Image {
...
visible: false
layer.enabled: true
}
MultiEffect {
...
colorization: trayIconRoot.symbolic ? 1.0 : 0.0
colorizationColor: root.foreground
}
```
Verified locally by cloning the widget to `~/.config/omarchy/plugins/ant.tray/` and applying the same change — the icon now survives the attention round-trip.
### Environment
- omarchy 4.0.2-1, quickshell 0.3.1-1, easyeffects 8.2.8-1, qt6-base 6.11.2-3, hyprland 0.56.2-1
- Intel i7-1355U, Iris Xe + RTX 3050, Hyprland/Wayland
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:23 UTC