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

Web app installer saves non-PNG icons with a .png extension

Reported by pjgeutjens · filed Aug 20, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 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

Web app installer saves non-PNG icons with a .png extensionrevision 1 · captured 2026-09-28 21:29 UTC via poll

System details

  • Omarchy 4.0.0-1
  • AMD Ryzen 5 7600X
  • NVIDIA GeForce RTX 4070 and AMD Raphael integrated graphics

What's wrong?

omarchy-webapp-install accepts any downloaded image/*, but saves every downloaded icon to a filename ending in .png without converting its contents. When a site serves WebP, the launcher can therefore receive a .png file containing WebP data and show no app icon.

Steps to reproduce

Run:

omarchy webapp install Threads https://www.threads.com/ ""
file ~/.local/share/icons/hicolor/256x256/apps/threads.png
grep '^Icon=' ~/.local/share/applications/Threads.desktop

Observed on a clean temporary $HOME:

threads.png: RIFF (little-endian) data, WebP image, with alpha, 57x57
Icon=threads

The Threads entry is created, but its icon is missing in the app launcher.

Expected behavior

Downloaded icons stored with a .png filename should contain PNG data so icon-theme consumers can render them reliably.

Relevant code

download_icon() validates only that the payload MIME type matches image/*. Both the automatic site-icon path and explicit icon-URL path pass a destination ending in .png, but neither converts the downloaded payload.

Since ImageMagick is part of the Omarchy base package set, the downloaded image could be validated in a temporary file and encoded as a real PNG at the destination.

View raw text
### System details

- Omarchy 4.0.0-1
- AMD Ryzen 5 7600X
- NVIDIA GeForce RTX 4070 and AMD Raphael integrated graphics

### What's wrong?

`omarchy-webapp-install` accepts any downloaded `image/*`, but saves every downloaded icon to a filename ending in `.png` without converting its contents. When a site serves WebP, the launcher can therefore receive a `.png` file containing WebP data and show no app icon.

### Steps to reproduce

Run:

```bash
omarchy webapp install Threads https://www.threads.com/ ""
file ~/.local/share/icons/hicolor/256x256/apps/threads.png
grep '^Icon=' ~/.local/share/applications/Threads.desktop
```

Observed on a clean temporary `$HOME`:

```text
threads.png: RIFF (little-endian) data, WebP image, with alpha, 57x57
Icon=threads
```

The Threads entry is created, but its icon is missing in the app launcher.

### Expected behavior

Downloaded icons stored with a `.png` filename should contain PNG data so icon-theme consumers can render them reliably.

### Relevant code

`download_icon()` validates only that the payload MIME type matches `image/*`. Both the automatic site-icon path and explicit icon-URL path pass a destination ending in `.png`, but neither converts the downloaded payload.

Since ImageMagick is part of the Omarchy base package set, the downloaded image could be validated in a temporary file and encoded as a real PNG at the destination.

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 08:48 UTC