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.
Quattro upgrade writes rd.luks.name while mkinitcpio uses encrypt hook, breaking encrypted root boot
Reported by gcarre · filed Aug 17, 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
Upgrade from an existing encrypted Omarchy installation to Quattro; LUKS root with Btrfs, EFI system partition at /boot, Linux 7.1.8-arch1-3, Limine 12.5.2.
What's wrong?
The Quattro upgrade can carry a systemd/sd-encrypt kernel parameter into a UKI built with Omarchy's classic mkinitcpio encrypt hook, leaving encrypted-root systems unbootable.
After the upgrade, both Limine and the old systemd-boot entry failed with:
ERROR: Failed to mount '/dev/mapper/root' on real root
You are now being dropped into an emergency shell.In the emergency shell, /dev/mapper contained only control; the physical root partition was present and correctly identified as crypto_LUKS. Manually running cryptsetup luksOpen /dev/sda3 root created /dev/mapper/root, after which blkid identified the expected Btrfs filesystem and it mounted successfully. The LUKS metadata, passphrase, and filesystem were therefore healthy; automatic activation in the initramfs was missing.
omarchy-upgrade-to-quattro wrote /etc/default/limine with the correct redacted LUKS UUID but the wrong parameter for the resulting initramfs:
rd.luks.name=<LUKS_UUID>=root root=/dev/mapper/root rwThe generated UKI contained that command line. However, Quattro ships /etc/mkinitcpio.conf.d/omarchy_hooks.conf with:
HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs)That is the classic udev + encrypt path. Its volume selector is cryptdevice=; rd.luks.name= belongs to the systemd + sd-encrypt path and is ignored by the effective initramfs.
Replacing the generated selector with:
cryptdevice=UUID=<LUKS_UUID>:root root=/dev/mapper/root rwand running limine-mkinitcpio restored normal boot on the affected machine.
The source of the mismatch is the root-command-line preservation loop in bin/omarchy-upgrade-to-quattro: it copies rd.luks.name from /proc/cmdline verbatim even though the package transaction installs the classic encrypt hook before rebuilding the UKIs.
This is related to #6728 because the failure occurs before encrypted root is mounted, but #6728 was ultimately attributed to an Intel microcode regression. PR #6758 independently notes that Omarchy's encrypt hook ignores rd.luks.*, but it only hardens validation and deliberately continues copying those parameters; it does not convert the incompatible selector.
Expected behavior: when the Quattro upgrade carries forward rd.luks.name=<uuid>=<mapper> from a pre-Quattro sd-encrypt boot, it should write the equivalent cryptdevice=UUID=<uuid>:<mapper> selector required by Omarchy's effective classic encrypt hook before regenerating Limine entries and UKIs.
View raw text
### System details Upgrade from an existing encrypted Omarchy installation to Quattro; LUKS root with Btrfs, EFI system partition at `/boot`, Linux `7.1.8-arch1-3`, Limine `12.5.2`. ### What's wrong? The Quattro upgrade can carry a systemd/sd-encrypt kernel parameter into a UKI built with Omarchy's classic mkinitcpio `encrypt` hook, leaving encrypted-root systems unbootable. After the upgrade, both Limine and the old systemd-boot entry failed with: ```text ERROR: Failed to mount '/dev/mapper/root' on real root You are now being dropped into an emergency shell. ``` In the emergency shell, `/dev/mapper` contained only `control`; the physical root partition was present and correctly identified as `crypto_LUKS`. Manually running `cryptsetup luksOpen /dev/sda3 root` created `/dev/mapper/root`, after which `blkid` identified the expected Btrfs filesystem and it mounted successfully. The LUKS metadata, passphrase, and filesystem were therefore healthy; automatic activation in the initramfs was missing. `omarchy-upgrade-to-quattro` wrote `/etc/default/limine` with the correct redacted LUKS UUID but the wrong parameter for the resulting initramfs: ```text rd.luks.name=<LUKS_UUID>=root root=/dev/mapper/root rw ``` The generated UKI contained that command line. However, Quattro ships `/etc/mkinitcpio.conf.d/omarchy_hooks.conf` with: ```text HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) ``` That is the classic `udev` + `encrypt` path. Its volume selector is `cryptdevice=`; `rd.luks.name=` belongs to the `systemd` + `sd-encrypt` path and is ignored by the effective initramfs. Replacing the generated selector with: ```text cryptdevice=UUID=<LUKS_UUID>:root root=/dev/mapper/root rw ``` and running `limine-mkinitcpio` restored normal boot on the affected machine. The source of the mismatch is the root-command-line preservation loop in `bin/omarchy-upgrade-to-quattro`: it copies `rd.luks.name` from `/proc/cmdline` verbatim even though the package transaction installs the classic `encrypt` hook before rebuilding the UKIs. This is related to #6728 because the failure occurs before encrypted root is mounted, but #6728 was ultimately attributed to an Intel microcode regression. PR #6758 independently notes that Omarchy's `encrypt` hook ignores `rd.luks.*`, but it only hardens validation and deliberately continues copying those parameters; it does not convert the incompatible selector. Expected behavior: when the Quattro upgrade carries forward `rd.luks.name=<uuid>=<mapper>` from a pre-Quattro sd-encrypt boot, it should write the equivalent `cryptdevice=UUID=<uuid>:<mapper>` selector required by Omarchy's effective classic `encrypt` hook before regenerating Limine entries and UKIs.
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 04:31 UTC