Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA 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.
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
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
System details
- Omarchy:
4.0.0.r2304.g7b336b1-1(dev channel);4.0.0.r2186.gee8ebf6-1when 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 migration1789764927.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
- Migration
1789764927runsomarchy-pkg-add owe owe-lockfeed. That install never completed.pacman.logrecords the command with no[ALPM] transaction startedorcompletedlines 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 failingomarchy-sleep-lockrestart loop. What remains is a stub local database entry:desc,files, andmtreeall 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.
- The next
-Syuupgradesowe 0.2.3-1 -> 0.2.6-1. pacman refuses to write over files no package owns.
omarchy-update-system-pkgs-when-conflictedrescues 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.
- The migration cannot repair it either:
omarchy-pkg-addcheckspacman -Q, which succeeds for a stub entry, and--neededskips the install.
Steps to reproduce
- Interrupt
pacman -S owe owe-lockfeed(power loss mid-transaction) so/var/lib/pacman/local/owe-<ver>/exists with emptydescandfiles. - Run
omarchy update. - 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-lockfeedThis 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