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

Unowned owe files block omarchy update on every run: file-conflict recovery only clears omarchy* package names

Reported by justcarlson · filed Sep 26, 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

Unowned owe files block omarchy update on every run: file-conflict recovery only clears omarchy* package namesrevision 1 · captured 2026-09-28 21:23 UTC via poll

System details

  • Omarchy: 4.0.0.r2304.g7b336b1-1 (dev channel); 4.0.0.r2186.gee8ebf6-1 when the failure started
  • Host: MacBookPro16,1 (Apple T2), kernel 7.2.6-arch2-Watanare-T2-4-t2, Intel i9-9980HK
  • Failing upgrade: owe 0.2.3-1 -> 0.2.6-1, owe-lockfeed 0.2.3-1 -> 0.2.6-1 (installed by migration 1789764927.sh)

What's wrong?

omarchy update failed the same way on every attempt for days:

error: failed to commit transaction (conflicting files)
owe: /usr/bin/owe exists in filesystem
owe: /usr/bin/owed exists in filesystem
owe: /usr/bin/owe-render exists in filesystem
owe: /usr/bin/owe-idle exists in filesystem
owe: /usr/lib/systemd/user/owed.service exists in filesystem
owe: /usr/share/doc/owe/config.toml.example exists in filesystem
owe: /usr/share/owe/10-owe-sync exists in filesystem
owe-lockfeed: /usr/lib/qt6/qml/Owe/LockFeed/libowe_lockfeed.so exists in filesystem
owe-lockfeed: /usr/lib/qt6/qml/Owe/LockFeed/qmldir exists in filesystem
Errors occurred, no packages were upgraded.

No conflict-recovery output follows, only the generic "Something went wrong during the update!" trap. Retrying never clears it.

Root cause

  1. Migration 1789764927 runs omarchy-pkg-add owe owe-lockfeed. That install never completed. pacman.log records the command with no [ALPM] transaction started or completed lines after it, and the local db files were left 0 bytes. It ran 44 seconds after an unclean shutdown reboot (journal: system.journal corrupted or uncleanly shut down), while the machine sat in a failing omarchy-sleep-lock restart loop. What remains is a stub local database entry: desc, files, and mtree all 0 bytes.
   $ pacman -Qk owe owe-lockfeed
   owe: 0 total files, 0 missing files
   owe-lockfeed: 0 total files, 0 missing files
   $ pacman -Qo /usr/bin/owe
   error: No package owns /usr/bin/owe

The files on disk belong to no package, and the four owe binaries are 0 bytes, so OWE was dead too.

  1. The next -Syu upgrades owe 0.2.3-1 -> 0.2.6-1. pacman refuses to write over files no package owns.
  1. omarchy-update-system-pkgs-when-conflicted rescues only conflicts blamed on omarchy packages:
   grep -oP '^omarchy(-dev|-settings|-settings-dev)?: \K.+(?= exists in filesystem$)' "$errors"
   ...
   ((${#leftovers[@]})) || exit 1

owe: and owe-lockfeed: lines match nothing. The handler exits 1 with no output, so every later update fails the same way.

  1. The migration cannot repair it either: omarchy-pkg-add checks pacman -Q, which succeeds for a stub entry, and --needed skips the install.

Steps to reproduce

  1. Interrupt pacman -S owe owe-lockfeed (power loss mid-transaction) so /var/lib/pacman/local/owe-<ver>/ exists with empty desc and files.
  2. Run omarchy update.
  3. The conflict is reported, recovery exits silently, and the update fails. Every later run repeats this.

Expected

The handler already re-checks ownership per path with pacman -Qo. The package-name prefix is the only barrier. Quarantine unowned conflicts for any package, or at least print why the handler gave up. The migration should repair a stub entry instead of skipping on --needed.

Workaround that fixed it

sudo pacman -S --overwrite=<each conflicting path> owe owe-lockfeed

This repopulates the db entries, takes ownership of the files (replacing the 0-byte binaries), and omarchy update passes.

Suggested fix

Broaden the handler's grep to any package when every reported conflict is unowned (the existing end anchor already excludes (owned by x) lines), and print a message when leftovers is empty instead of exiting 1 with no output.

Happy to PR it.

View raw text
## System details

- Omarchy: `4.0.0.r2304.g7b336b1-1` (dev channel); `4.0.0.r2186.gee8ebf6-1` when the failure started
- Host: MacBookPro16,1 (Apple T2), kernel `7.2.6-arch2-Watanare-T2-4-t2`, Intel i9-9980HK
- Failing upgrade: `owe 0.2.3-1 -> 0.2.6-1`, `owe-lockfeed 0.2.3-1 -> 0.2.6-1` (installed by migration `1789764927.sh`)

## What's wrong?

`omarchy update` failed the same way on every attempt for days:

```
error: failed to commit transaction (conflicting files)
owe: /usr/bin/owe exists in filesystem
owe: /usr/bin/owed exists in filesystem
owe: /usr/bin/owe-render exists in filesystem
owe: /usr/bin/owe-idle exists in filesystem
owe: /usr/lib/systemd/user/owed.service exists in filesystem
owe: /usr/share/doc/owe/config.toml.example exists in filesystem
owe: /usr/share/owe/10-owe-sync exists in filesystem
owe-lockfeed: /usr/lib/qt6/qml/Owe/LockFeed/libowe_lockfeed.so exists in filesystem
owe-lockfeed: /usr/lib/qt6/qml/Owe/LockFeed/qmldir exists in filesystem
Errors occurred, no packages were upgraded.
```

No conflict-recovery output follows, only the generic "Something went wrong during the update!" trap. Retrying never clears it.

## Root cause

1. Migration `1789764927` runs `omarchy-pkg-add owe owe-lockfeed`. That install never completed. `pacman.log` records the command with no `[ALPM] transaction started` or `completed` lines after it, and the local db files were left 0 bytes. It ran 44 seconds after an unclean shutdown reboot (journal: `system.journal corrupted or uncleanly shut down`), while the machine sat in a failing `omarchy-sleep-lock` restart loop. What remains is a stub local database entry: `desc`, `files`, and `mtree` all 0 bytes.

   ```
   $ pacman -Qk owe owe-lockfeed
   owe: 0 total files, 0 missing files
   owe-lockfeed: 0 total files, 0 missing files
   $ pacman -Qo /usr/bin/owe
   error: No package owns /usr/bin/owe
   ```

   The files on disk belong to no package, and the four `owe` binaries are 0 bytes, so OWE was dead too.

2. The next `-Syu` upgrades `owe 0.2.3-1 -> 0.2.6-1`. pacman refuses to write over files no package owns.

3. `omarchy-update-system-pkgs-when-conflicted` rescues only conflicts blamed on omarchy packages:

   ```bash
   grep -oP '^omarchy(-dev|-settings|-settings-dev)?: \K.+(?= exists in filesystem$)' "$errors"
   ...
   ((${#leftovers[@]})) || exit 1
   ```

   `owe:` and `owe-lockfeed:` lines match nothing. The handler exits 1 with no output, so every later update fails the same way.

4. The migration cannot repair it either: `omarchy-pkg-add` checks `pacman -Q`, which succeeds for a stub entry, and `--needed` skips the install.

## Steps to reproduce

1. Interrupt `pacman -S owe owe-lockfeed` (power loss mid-transaction) so `/var/lib/pacman/local/owe-<ver>/` exists with empty `desc` and `files`.
2. Run `omarchy update`.
3. The conflict is reported, recovery exits silently, and the update fails. Every later run repeats this.

## Expected

The handler already re-checks ownership per path with `pacman -Qo`. The package-name prefix is the only barrier. Quarantine unowned conflicts for any package, or at least print why the handler gave up. The migration should repair a stub entry instead of skipping on `--needed`.

## Workaround that fixed it

```
sudo pacman -S --overwrite=<each conflicting path> owe owe-lockfeed
```

This repopulates the db entries, takes ownership of the files (replacing the 0-byte binaries), and `omarchy update` passes.

## Suggested fix

Broaden the handler's grep to any package when every reported conflict is unowned (the existing end anchor already excludes `(owned by x)` lines), and print a message when `leftovers` is empty instead of exiting 1 with no output.

Happy to PR it.

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 18:31 UTC