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.
Agents panel: limits and balance meters are visually identical but mean opposite things; collector estimate marker is stripped
Reported by tobias-hui · filed Sep 7, 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
What's wrong?
The Agents panel renders two visually identical Meter bars whose values mean the opposite thing, and neither row says which one you are looking at.
shell/plugins/agents/Panel.qml:
- LIMITS rows (line 746-748):
value: limitRow.window.percent— the fraction of the allowance consumed. The bar fills toward the cap and turns urgent atpercent >= 0.9(line 708). - BALANCE section (line 534-538):
ratio = balance.remaining / balance.funded— the fraction left. The bar drains toward empty and turns urgent at<= 0.1(line 45-46). The comment there is explicit: "The meter shows what is left, not what is used."
Both bars are the same component Meter (line 767) with the same track, same fill color, and the same label/percent row layout. A row reading Weekly 49% is identical in appearance whether it means "49% spent" or "49% left". I spent real time diagnosing which of the two my own panel was showing, which is the answer a dashboard should never make its reader reconstruct.
Suggested fix
State the direction in the row, at minimum for limits, which is where every subscription lands:
LimitRowtitle:"Weekly used"/ percent meaning consumed, or- a
— remainingsuffix on the balance row, or - draw the balance meter from the right edge (or inverted) so the two directions are distinguishable without reading text.
limitWindows() (line 112-122) already honors an explicit entry.title from a collector, so collectors can carry the unit today. That is the workaround I applied to my own collectors, but the panel default should not be ambiguous.
Second finding: a collector's "(est.)" marker is silently dropped
windowTitle() (line 91-98) derives the row title by pattern-matching the label, and it returns early on a keyword hit — "Weekly (7-day, est.)" renders as plain Weekly, and "5-hour (est.)" renders as Session. The scope: "local-estimate" field a collector sets is never drawn anywhere in the panel.
Net effect: a locally estimated figure (computed from session transcripts against a hard-coded plan cap) is rendered exactly like an API-reported one, and the only marker the collector had — in the label — is stripped. Estimates should stay visually distinguishable, since they are the numbers least safe to act on.
Recreation
- Add a collector record under
~/.local/state/omarchy/agents/usage/withlimits: [{label: "Weekly (7-day)", percent: 0.49}]and a second withbalance: {remaining: 10, funded: 20}. - Open the panel and switch tabs: both draw an identical half-full bar, one meaning 49% consumed and the other 50% remaining.
- For the estimate marker, use
label: "Weekly (7-day, est.)"and observe the row title renders asWeekly.
System details
Omarchy 4.0.2-1, AMD Ryzen AI 9 HX 470, Hyprland, Quickshell. Verified against shell/plugins/agents/Panel.qml at HEAD, which is byte-identical to the installed copy.
View raw text
## What's wrong?
The Agents panel renders two visually identical `Meter` bars whose values mean the **opposite** thing, and neither row says which one you are looking at.
`shell/plugins/agents/Panel.qml`:
- **LIMITS** rows (line 746-748): `value: limitRow.window.percent` — the fraction of the allowance **consumed**. The bar fills toward the cap and turns urgent at `percent >= 0.9` (line 708).
- **BALANCE** section (line 534-538): `ratio = balance.remaining / balance.funded` — the fraction **left**. The bar drains toward empty and turns urgent at `<= 0.1` (line 45-46). The comment there is explicit: "The meter shows what is left, not what is used."
Both bars are the same `component Meter` (line 767) with the same track, same fill color, and the same label/percent row layout. A row reading `Weekly 49%` is identical in appearance whether it means "49% spent" or "49% left". I spent real time diagnosing which of the two my own panel was showing, which is the answer a dashboard should never make its reader reconstruct.
### Suggested fix
State the direction in the row, at minimum for limits, which is where every subscription lands:
- `LimitRow` title: `"Weekly used"` / percent meaning consumed, or
- a `— remaining` suffix on the balance row, or
- draw the balance meter from the right edge (or inverted) so the two directions are distinguishable without reading text.
`limitWindows()` (line 112-122) already honors an explicit `entry.title` from a collector, so collectors can carry the unit today. That is the workaround I applied to my own collectors, but the panel default should not be ambiguous.
### Second finding: a collector's "(est.)" marker is silently dropped
`windowTitle()` (line 91-98) derives the row title by pattern-matching the label, and it returns early on a keyword hit — `"Weekly (7-day, est.)"` renders as plain `Weekly`, and `"5-hour (est.)"` renders as `Session`. The `scope: "local-estimate"` field a collector sets is never drawn anywhere in the panel.
Net effect: a locally estimated figure (computed from session transcripts against a hard-coded plan cap) is rendered exactly like an API-reported one, and the only marker the collector had — in the label — is stripped. Estimates should stay visually distinguishable, since they are the numbers least safe to act on.
### Recreation
1. Add a collector record under `~/.local/state/omarchy/agents/usage/` with `limits: [{label: "Weekly (7-day)", percent: 0.49}]` and a second with `balance: {remaining: 10, funded: 20}`.
2. Open the panel and switch tabs: both draw an identical half-full bar, one meaning 49% consumed and the other 50% remaining.
3. For the estimate marker, use `label: "Weekly (7-day, est.)"` and observe the row title renders as `Weekly`.
### System details
Omarchy 4.0.2-1, AMD Ryzen AI 9 HX 470, Hyprland, Quickshell. Verified against `shell/plugins/agents/Panel.qml` at HEAD, which is byte-identical to the installed copy.
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:04 UTC