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-4859GitHub issuePublicReceived

Agents panel: status banner is gated on `usageStatusText` but renders `authHelpText`, producing an empty warning box

Reported by johnfire · filed Sep 3, 2026Closed upstream on 2026-09-21 by bjarneo via an automated message, as a duplicate of #8445 (R-1410). GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

Agents panel: status banner is gated on `usageStatusText` but renders `authHelpText`, producing an empty warning boxrevision 1 · captured 2026-10-04 12:10 UTC via poll

What happened

In the agents panel, the status banner's visibility and its content are keyed off different fields:

shell/plugins/agents/Panel.qml (~line 498):

// ---------- Status ----------
BorderSurface {
  visible: !!root.provider && String(root.provider.usageStatusText || "") !== ""
  ...
  Text {
    id: statusText
    text: root.provider ? String(root.provider.authHelpText || "") : ""

So a record with a non-empty usageStatusText and an empty authHelpText renders an empty red warning box — urgent-tinted border and background, no text.

Why this matters beyond the shipped providers

It never fires for claude/codex/fireworks, because those set both fields together (or neither). But the plugin's own README advertises third-party collectors as the supported extension path:

Adding an agent therefore never touches this plugin: ship a collector that prints the record contract (see the claude and codex collectors in bin/), and the panel gains a tab.

The record contract is discoverable only by reading the shipped collectors' output, and nothing signals that usageStatusText means "something is wrong" rather than "a line of status to display". Setting it to a healthy summary — e.g. "$22.20 all-time across 49 sessions" — silently produces an empty alarm box.

Steps to reproduce

  1. Write ~/.local/state/omarchy/agents/usage/example.json:
   {
     "schemaVersion": 1, "id": "example", "name": "Example",
     "updatedAt": "2026-09-03T13:00:00+00:00",
     "ready": true, "hasLocalStats": true,
     "tierLabel": "Pay-as-you-go",
     "usageStatusText": "$22.20 all-time across 49 sessions",
     "authHelpText": "",
     "limits": [], "todayPrompts": 0, "todaySessions": 0,
     "todayTotalTokens": 0, "todayTokensByModel": {},
     "totalPrompts": 0, "totalSessions": 0, "activeDays": 0,
     "activeDates": [], "recentDays": [], "modelUsage": {}
   }
  1. omarchy-shell omarchy.agents refresh, then open the panel on the Example tab.

Expected

Either the status text renders, or no banner is drawn.

Actual

An empty urgent-styled box sits between the tab row and TOKENS BY DAY. The text is present in usageStatusText but never displayed, because the Text reads authHelpText.

Note heroMeta() (~line 181) does read usageStatusText, falling back to tierLabel — so the same field drives the hero subtitle and gates an unrelated warning box.

Suggested fix

Render the status text the visibility condition is based on:

text: root.provider
  ? String(root.provider.usageStatusText || root.provider.authHelpText || "")
  : ""

...or gate the banner on authHelpText instead, so the box appears only when there is help to show. Documenting the intended meaning of usageStatusText in the plugin README would also prevent third-party collectors from tripping on it.

System

  • Omarchy 4.0.2-1
  • Hyprland 0.56.2
  • quickshell 0.3.1-1
  • Kernel 7.1.9-arch1-2
  • AMD Ryzen AI 9 HX 370 / Radeon 890M
View raw text
## What happened

In the agents panel, the status banner's visibility and its content are keyed off **different** fields:

`shell/plugins/agents/Panel.qml` (~line 498):

```qml
// ---------- Status ----------
BorderSurface {
  visible: !!root.provider && String(root.provider.usageStatusText || "") !== ""
  ...
  Text {
    id: statusText
    text: root.provider ? String(root.provider.authHelpText || "") : ""
```

So a record with a non-empty `usageStatusText` and an empty `authHelpText` renders an **empty red warning box** — urgent-tinted border and background, no text.

## Why this matters beyond the shipped providers

It never fires for `claude`/`codex`/`fireworks`, because those set both fields together (or neither). But the plugin's own README advertises third-party collectors as the supported extension path:

> Adding an agent therefore never touches this plugin: ship a collector that prints the record contract (see the `claude` and `codex` collectors in `bin/`), and the panel gains a tab.

The record contract is discoverable only by reading the shipped collectors' output, and nothing signals that `usageStatusText` means "something is wrong" rather than "a line of status to display". Setting it to a healthy summary — e.g. `"$22.20 all-time across 49 sessions"` — silently produces an empty alarm box.

## Steps to reproduce

1. Write `~/.local/state/omarchy/agents/usage/example.json`:
   ```json
   {
     "schemaVersion": 1, "id": "example", "name": "Example",
     "updatedAt": "2026-09-03T13:00:00+00:00",
     "ready": true, "hasLocalStats": true,
     "tierLabel": "Pay-as-you-go",
     "usageStatusText": "$22.20 all-time across 49 sessions",
     "authHelpText": "",
     "limits": [], "todayPrompts": 0, "todaySessions": 0,
     "todayTotalTokens": 0, "todayTokensByModel": {},
     "totalPrompts": 0, "totalSessions": 0, "activeDays": 0,
     "activeDates": [], "recentDays": [], "modelUsage": {}
   }
   ```
2. `omarchy-shell omarchy.agents refresh`, then open the panel on the Example tab.

## Expected

Either the status text renders, or no banner is drawn.

## Actual

An empty urgent-styled box sits between the tab row and `TOKENS BY DAY`. The text is present in `usageStatusText` but never displayed, because the `Text` reads `authHelpText`.

Note `heroMeta()` (~line 181) *does* read `usageStatusText`, falling back to `tierLabel` — so the same field drives the hero subtitle and gates an unrelated warning box.

## Suggested fix

Render the status text the visibility condition is based on:

```qml
text: root.provider
  ? String(root.provider.usageStatusText || root.provider.authHelpText || "")
  : ""
```

...or gate the banner on `authHelpText` instead, so the box appears only when there is help to show. Documenting the intended meaning of `usageStatusText` in the plugin README would also prevent third-party collectors from tripping on it.

## System

- Omarchy 4.0.2-1
- Hyprland 0.56.2
- quickshell 0.3.1-1
- Kernel 7.1.9-arch1-2
- AMD Ryzen AI 9 HX 370 / Radeon 890M

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.

No decision has been recorded yet.