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.
upgrade-to-quattro: missing bin/omarchy-done aborts at step 18/30 and leaves # both NetworkManager and iwd enabled
Reported by jfbourdeau · filed Aug 6, 2026Closed upstream on 2026-08-08 by the merge of PR #6617 (closed by dhh). GitHub close reason: completed.
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
System details
Lenovo Yoga C640 (81UE), Intel i7-10510U, kernel 7.1.5-arch1-2, # omarchy-dev 4.0.0.r1541.gfd1034f (edge) — upgraded from Omarchy 3.8.4
What's wrong?
Upgrading 3.8.4 → Quattro with omarchy-upgrade-to-quattro, the run ended with:
==> Applying Omarchy quattro system transition
==> Applying Omarchy firewall defaults
==> Normalizing SDDM login configuration
==> Applying Omarchy quattro user transition
bash: line 831: /usr/share/omarchy/bin/omarchy-done: No such file or directoryand returned to the prompt — no error summary and no reboot prompt, so it reads as
if the upgrade had finished.
Cause. The script is fetched from quattro branch HEAD, but the installed package
(omarchy-dev 4.0.0.r1046.gd570d99 at the time) did not ship bin/omarchy-done, which the
script calls at the end of the user-transition block:
"$root/bin/omarchy-done" mark first-run-user
...
"$root/bin/omarchy-done" mark finalize-userUnder set -euo pipefail that aborts the whole run inside apply_user_transition — the
18th of 30 top-level calls.
Why this is more than cosmetic: the machine is unsafe to reboot in that state.apply_system_transition had already enabled NetworkManager, but cleanup_retired_services
— the step that disables iwd — is one of the twelve that never ran:
$ systemctl is-enabled NetworkManager iwd
enabled
enabledRebooting there starts two network managers competing for the Wi-Fi adapter, on a laptop
that was just upgraded over Wi-Fi. Also still pending at that point: waybar/walker removal,omarchy-bar defaults, post-upgrade migrations, the final package upgrade, andrestore_hyprland_config_reload (Hyprland reloads stay suppressed).
Workaround that worked
sudo curl -fsSL https://raw.githubusercontent.com/basecamp/omarchy/refs/heads/quattro/bin/omarchy-done \
-o /usr/share/omarchy/bin/omarchy-done && sudo chmod +x /usr/share/omarchy/bin/omarchy-done
bash ~/upgrade-to-quattro.sh --devThe re-run completed all 30 steps, reached the reboot prompt, and the system came up clean
(hyprctl configerrors empty, Quickshell running, NetworkManager fine). It also movedomarchy-dev from r1046 to r1541, which is presumably why the file exists now — so this
is likely only reproducible when the packaged build lags the branch, i.e. on edge.
Suggestions
- Guard the call —
[ -x "$root/bin/omarchy-done" ] && …, or write the marker file
directly as a fallback. A "mark setup as done" step shouldn't be able to abort an OS
migration two-thirds of the way through.
2. Make the network switch atomic: disable iwd in the same step that enables
NetworkManager, so no failure path can leave both enabled.
3. On non-zero exit, print a loud "upgrade incomplete — do NOT reboot, re-run the script".
Currently set -e exits silently and the last visible line looks like normal progress.
View raw text
### System details Lenovo Yoga C640 (81UE), Intel i7-10510U, kernel 7.1.5-arch1-2, # omarchy-dev 4.0.0.r1541.gfd1034f (edge) — upgraded from Omarchy 3.8.4 ### What's wrong? Upgrading 3.8.4 → Quattro with `omarchy-upgrade-to-quattro`, the run ended with: ``` ==> Applying Omarchy quattro system transition ==> Applying Omarchy firewall defaults ==> Normalizing SDDM login configuration ==> Applying Omarchy quattro user transition bash: line 831: /usr/share/omarchy/bin/omarchy-done: No such file or directory ``` and returned to the prompt — no error summary and no reboot prompt, so it reads as if the upgrade had finished. **Cause.** The script is fetched from `quattro` branch HEAD, but the installed package (`omarchy-dev 4.0.0.r1046.gd570d99` at the time) did not ship `bin/omarchy-done`, which the script calls at the end of the user-transition block: ```bash "$root/bin/omarchy-done" mark first-run-user ... "$root/bin/omarchy-done" mark finalize-user ``` Under `set -euo pipefail` that aborts the whole run inside `apply_user_transition` — the **18th of 30 top-level calls**. **Why this is more than cosmetic: the machine is unsafe to reboot in that state.** `apply_system_transition` had already enabled NetworkManager, but `cleanup_retired_services` — the step that disables `iwd` — is one of the twelve that never ran: ``` $ systemctl is-enabled NetworkManager iwd enabled enabled ``` Rebooting there starts two network managers competing for the Wi-Fi adapter, on a laptop that was just upgraded over Wi-Fi. Also still pending at that point: waybar/walker removal, `omarchy-bar defaults`, post-upgrade migrations, the final package upgrade, and `restore_hyprland_config_reload` (Hyprland reloads stay suppressed). **Workaround that worked** ```bash sudo curl -fsSL https://raw.githubusercontent.com/basecamp/omarchy/refs/heads/quattro/bin/omarchy-done \ -o /usr/share/omarchy/bin/omarchy-done && sudo chmod +x /usr/share/omarchy/bin/omarchy-done bash ~/upgrade-to-quattro.sh --dev ``` The re-run completed all 30 steps, reached the reboot prompt, and the system came up clean (`hyprctl configerrors` empty, Quickshell running, NetworkManager fine). It also moved `omarchy-dev` from `r1046` to `r1541`, which is presumably why the file exists now — so this is likely only reproducible when the packaged build lags the branch, i.e. on `edge`. **Suggestions** 1. Guard the call — `[ -x "$root/bin/omarchy-done" ] && …`, or write the marker file directly as a fallback. A "mark setup as done" step shouldn't be able to abort an OS migration two-thirds of the way through. 2. Make the network switch atomic: disable `iwd` in the same step that enables NetworkManager, so no failure path can leave both enabled. 3. On non-zero exit, print a loud **"upgrade incomplete — do NOT reboot, re-run the script"**. Currently `set -e` exits silently and the last visible line looks like normal progress.
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.