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.2: bar tooltip renders raw HTML — Text.PlainText on tooltipLabel breaks rich-text tooltips
Reported by Balthazzahr · filed Sep 3, 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
Since omarchy 4.0.2-1, the shared bar tooltip renders its text as plain text only. Any widget that passes rich HTML (e.g. the custom.sysmon plugin) now shows the raw markup — <font ...>, <b>, , <br/> — as a single unwrapped line of "code" instead of a formatted multi-line box. This is a silent regression from 4.0.1, where the tooltip label used the default Text.AutoText and rendered rich text correctly.
Environment
- omarchy: 4.0.2-1 (built 2026-08-31, installed 2026-09-02)
- shell branch:
quattro - quickshell: current packaged build
- kernel: 7.1.9-arch1-2
Reproduction
- Have any bar widget/plugin set
tooltipText(or callbar.showTooltip(target, text)) with a rich-text string, e.g."<font color='#ff5555'><b>CPU</b></font> 48.0°C<br/>..."(this is exactly whatcustom.sysmon'sWidget.qmldoes via itsformattedTooltip). - Hover the widget.
Actual: the tooltip shows the raw markup literally, all on one line (the <br/> separators render as literal text, so it never wraps into rows).
Expected (4.0.1 behavior): the rich text is rendered — colored, bolded, multi-line, space-aligned box.
Root cause
Single-line change between omarchy-4.0.1-1 and omarchy-4.0.2-1 in shell/plugins/bar/Bar.qml (the tooltipLabel Text inside the tooltipWindow PopupWindow, ~line 1108):
Text {
id: tooltipLabel
+ textFormat: Text.PlainText
anchors.centerIn: parent
text: root.tooltipTextConfirmed by diffing the two package tarballs from /var/cache/pacman/pkg. Forcing Text.PlainText is almost certainly a deliberate hardening against the known quickshell rich-text rendering crashes (e.g. #9302, #9269, #8676 — SIGSEGV in QQuickTextPrivate::updateLayout with HTML text), but it silently breaks any existing rich-text tooltip usage with no warning.
Suggested fix options
- Drop
textFormat: Text.PlainText(restore defaultText.AutoText) now that the underlying quickshell crashes are addressed, or - Scope the hardening instead of applying it globally, e.g. only force plain text for tooltips that are known-safe, or
- If plain-text-only tooltips are now an intentional contract, document it in
shell/plugins/bar/README.md(bar.showTooltip) so plugin authors don't build rich-text tooltips that silently degrade.
Workaround (user-side)
Patch the custom plugin to emit plain text (monospace space-padded columns, \n line breaks) — this is what I've applied locally; it renders correctly under Text.PlainText but loses per-cell color coding.
View raw text
## Summary
Since omarchy `4.0.2-1`, the shared bar tooltip renders its text as **plain text only**. Any widget that passes rich HTML (e.g. the `custom.sysmon` plugin) now shows the raw markup — `<font ...>`, `<b>`, ` `, `<br/>` — as a single unwrapped line of "code" instead of a formatted multi-line box. This is a silent regression from 4.0.1, where the tooltip label used the default `Text.AutoText` and rendered rich text correctly.
## Environment
- omarchy: 4.0.2-1 (built 2026-08-31, installed 2026-09-02)
- shell branch: `quattro`
- quickshell: current packaged build
- kernel: 7.1.9-arch1-2
## Reproduction
1. Have any bar widget/plugin set `tooltipText` (or call `bar.showTooltip(target, text)`) with a rich-text string, e.g. `"<font color='#ff5555'><b>CPU</b></font> 48.0°C<br/>..."` (this is exactly what `custom.sysmon`'s `Widget.qml` does via its `formattedTooltip`).
2. Hover the widget.
**Actual:** the tooltip shows the raw markup literally, all on one line (the `<br/>` separators render as literal text, so it never wraps into rows).
**Expected (4.0.1 behavior):** the rich text is rendered — colored, bolded, multi-line, space-aligned box.
## Root cause
Single-line change between `omarchy-4.0.1-1` and `omarchy-4.0.2-1` in `shell/plugins/bar/Bar.qml` (the `tooltipLabel` `Text` inside the `tooltipWindow` `PopupWindow`, ~line 1108):
```diff
Text {
id: tooltipLabel
+ textFormat: Text.PlainText
anchors.centerIn: parent
text: root.tooltipText
```
Confirmed by diffing the two package tarballs from `/var/cache/pacman/pkg`. Forcing `Text.PlainText` is almost certainly a deliberate hardening against the known quickshell rich-text rendering crashes (e.g. #9302, #9269, #8676 — SIGSEGV in `QQuickTextPrivate::updateLayout` with HTML text), but it silently breaks any existing rich-text tooltip usage with no warning.
## Suggested fix options
1. Drop `textFormat: Text.PlainText` (restore default `Text.AutoText`) now that the underlying quickshell crashes are addressed, or
2. Scope the hardening instead of applying it globally, e.g. only force plain text for tooltips that are known-safe, or
3. If plain-text-only tooltips are now an intentional contract, document it in `shell/plugins/bar/README.md` (`bar.showTooltip`) so plugin authors don't build rich-text tooltips that silently degrade.
## Workaround (user-side)
Patch the custom plugin to emit plain text (monospace space-padded columns, `\n` line breaks) — this is what I've applied locally; it renders correctly under `Text.PlainText` but loses per-cell color coding.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:39 UTC