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

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

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

Agents panel: limits and balance meters are visually identical but mean opposite things; collector estimate marker is strippedrevision 1 · captured 2026-09-28 21:23 UTC via poll

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.

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