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

silently leaves packages from the previous channel installed (edge > stable)

Reported by jaroet · filed Oct 5, 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

silently leaves packages from the previous channel installed (edge > stable)revision 1 · captured 2026-10-05 09:03 UTC via poll

System details

Omarchy 4.0.4-1

What's wrong?

omarchy channel set silently leaves packages from the previous channel installed, and omarchy-update-orphan-pkgs cannot detect them

Summary

After switching from the edge channel back to stable, applications that were only ever published on edge remain installed. They are not reported by the update, not offered by the orphan-cleanup step, and no prompt or warning appears at any point. Because they are no longer provided by any configured repository, pacman -Qem lists them, which makes omarchy-update-aur-pkgs run yay -Sua against those names on every subsequent update.

Steps to reproduce

  1. omarchy channel set edge
  2. Install an application that is only published on the edge channel.
  3. omarchy channel set stable
  4. pacman -Qem — the edge-only package is still listed.
  5. pacman -Qdt — the package is not listed, so omarchy-update-orphan-pkgs never offers it for removal.
  6. omarchy update — the AUR update step now runs on every update.

What happened

After switching edge → stable, two packages installed from the edge channel stayed installed. Neither is provided by core, extra, multilib, or the stable omarchy repository any more, but both remain installed with Install Reason: Explicitly installed.

omarchy-update-aur-pkgs gates on pacman -Qem (bin/omarchy-update-aur-pkgs:5), so it ran on every update and invoked:

yay -Sua --noconfirm --cleanafter --ignore gcc14,gcc14-libs

(bin/omarchy-update-aur-pkgs:8)

yay resolved one of the leftover names against the AUR. An unrelated project in the AUR shares that name and carries a higher version number, so yay treated it as an available upgrade and built it. That project is a Rust/Tauri application: each update downloaded roughly 495 crates (~48 MiB) and started compiling 783, and the build was never able to complete, so the installed version never changed. Because the version mismatch therefore survived every run, and because --cleanafter removes the build directory after a successful install (which never happened), every subsequent omarchy update repeated the full download and compile from scratch.

yay additionally printed Packages not in AUR: <name> for the second leftover package on every run. That is a direct signal that a locally installed package is not resolvable, and it is currently only a passing log line.

Root cause

Two independent gaps combine to produce this.

1. The channel switch never computes the difference between channels.

bin/omarchy-channel-set refreshes the pacman configuration for the new channel (omarchy-refresh-pacman, line 86), reinstalls only omarchy and omarchy-settings (line 88), and then runs omarchy-update -y (line 99). It never compares which packages the previous channel provided against which packages the new channel provides, so packages unique to the old channel are simply left behind.

2. The only automated cleanup structurally cannot catch them.

omarchy-update-orphan-pkgs is the existing cleanup step, but it collects candidates with:

mapfile -t orphans < <(pacman -Qtdq 2>/dev/null || true)

(bin/omarchy-update-orphan-pkgs:8)

pacman -Qtdq returns only orphaned packages — those installed as a dependency, or auto-installed. A package the user installed explicitly that has since lost its repository is not an orphan, so this step can never surface the exact failure mode of a channel switch.

Impact

Leaving an edge-only package installed has consequences beyond a stale package:

  • pacman -Qem stays non-empty, so the AUR update step runs on every omarchy update even for users with no AUR packages at all.
  • Any leftover name that happens to match an unrelated, higher-versioned AUR project triggers a full source build on every update, indefinitely.
  • --cleanafter guarantees the build directory is not reused, so nothing is cached between runs.

The user receives no indication that a channel switch left anything behind, and the one cleanup step that exists reports nothing.

Expected behavior

Either of these would prevent it:

  • omarchy channel set reports packages that are installed but no longer provided by any configured repository, and offers to remove them as part of the switch; or
  • omarchy-update-orphan-pkgs additionally considers installed packages that are not provided by any repository, not just pacman -Qtdq orphans.

Environment

  • Omarchy 4.0.4-1
  • Arch Linux, yay 13.0.1
  • Reproduced by switching edge → stable
View raw text
### System details

Omarchy 4.0.4-1

### What's wrong?

# `omarchy channel set` silently leaves packages from the previous channel installed, and `omarchy-update-orphan-pkgs` cannot detect them

## Summary

After switching from the `edge` channel back to `stable`, applications that were only ever published on `edge` remain installed. They are not reported by the update, not offered by the orphan-cleanup step, and no prompt or warning appears at any point. Because they are no longer provided by any configured repository, `pacman -Qem` lists them, which makes `omarchy-update-aur-pkgs` run `yay -Sua` against those names on every subsequent update.

## Steps to reproduce

1. `omarchy channel set edge`
2. Install an application that is only published on the `edge` channel.
3. `omarchy channel set stable`
4. `pacman -Qem` — the `edge`-only package is still listed.
5. `pacman -Qdt` — the package is **not** listed, so `omarchy-update-orphan-pkgs` never offers it for removal.
6. `omarchy update` — the AUR update step now runs on every update.

## What happened

After switching `edge` → `stable`, two packages installed from the `edge` channel stayed installed. Neither is provided by `core`, `extra`, `multilib`, or the `stable` omarchy repository any more, but both remain installed with `Install Reason: Explicitly installed`.

`omarchy-update-aur-pkgs` gates on `pacman -Qem` (`bin/omarchy-update-aur-pkgs:5`), so it ran on every update and invoked:

```
yay -Sua --noconfirm --cleanafter --ignore gcc14,gcc14-libs
```

(`bin/omarchy-update-aur-pkgs:8`)

yay resolved one of the leftover names against the AUR. An **unrelated** project in the AUR shares that name and carries a higher version number, so yay treated it as an available upgrade and built it. That project is a Rust/Tauri application: each update downloaded roughly 495 crates (~48 MiB) and started compiling 783, and the build was never able to complete, so the installed version never changed. Because the version mismatch therefore survived every run, and because `--cleanafter` removes the build directory after a successful install (which never happened), every subsequent `omarchy update` repeated the full download and compile from scratch.

yay additionally printed `Packages not in AUR: <name>` for the second leftover package on every run. That is a direct signal that a locally installed package is not resolvable, and it is currently only a passing log line.

## Root cause

Two independent gaps combine to produce this.

**1. The channel switch never computes the difference between channels.**

`bin/omarchy-channel-set` refreshes the pacman configuration for the new channel (`omarchy-refresh-pacman`, line 86), reinstalls only `omarchy` and `omarchy-settings` (line 88), and then runs `omarchy-update -y` (line 99). It never compares which packages the previous channel provided against which packages the new channel provides, so packages unique to the old channel are simply left behind.

**2. The only automated cleanup structurally cannot catch them.**

`omarchy-update-orphan-pkgs` is the existing cleanup step, but it collects candidates with:

```
mapfile -t orphans < <(pacman -Qtdq 2>/dev/null || true)
```

(`bin/omarchy-update-orphan-pkgs:8`)

`pacman -Qtdq` returns only *orphaned* packages — those installed as a dependency, or auto-installed. A package the user installed explicitly that has since lost its repository is **not** an orphan, so this step can never surface the exact failure mode of a channel switch.

## Impact

Leaving an `edge`-only package installed has consequences beyond a stale package:

- `pacman -Qem` stays non-empty, so the AUR update step runs on every `omarchy update` even for users with no AUR packages at all.
- Any leftover name that happens to match an unrelated, higher-versioned AUR project triggers a full source build on every update, indefinitely.
- `--cleanafter` guarantees the build directory is not reused, so nothing is cached between runs.

The user receives no indication that a channel switch left anything behind, and the one cleanup step that exists reports nothing.

## Expected behavior

Either of these would prevent it:

- `omarchy channel set` reports packages that are installed but no longer provided by any configured repository, and offers to remove them as part of the switch; or
- `omarchy-update-orphan-pkgs` additionally considers installed packages that are not provided by any repository, not just `pacman -Qtdq` orphans.

## Environment

- Omarchy 4.0.4-1
- Arch Linux, yay 13.0.1
- Reproduced by switching `edge` → `stable`

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

  • Related PRpr/8781· confirmed

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 21:32 UTC