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.
Omarchy update failed due to non-English locale
Reported by luannbertaud · 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: dev (7b336b1b), Locale: fr_FR
What's wrong?
TLDR
omarchy-update-stay-awake fails on every non-English locale: root_owned_parent_chain compares stat -Lc '%F' output to the hardcoded English string "directory"
System details
- Omarchy 4, dev checkout to branch
quattro - System locale: French (
fr_FR.UTF-8—LC_ALL/LANGnot forced toC) XDG_RUNTIME_DIR=/run/user/1000, owned by user, mode700
What's wrong
omarchy update fails at the "Create system snapshot" / stay-awake step with:
Refusing to use an unsafe Omarchy update inhibitor state path.
Something went wrong during the update!Root cause
In bin/omarchy-update-stay-awake, root_owned_parent_chain() walks the parent directory chain of $XDG_RUNTIME_DIR and calls:
read -r owner mode type < <(/usr/bin/stat -Lc '%u %a %F' -- "$parent") || return 1
[[ $owner == 0 && $type == "directory" ]] || return 1stat's %F format is locale-dependent: it prints the translated file-type name (e.g. répertoire in French), not the literal English word directory. This comparison always fails even though the directory is root-owned, 755.
This function does not force LC_ALL=C before calling stat, unlike other functions in the same file (e.g. read_state_record).
Reproduction
for d in /run/user/1000 /run/user /run /; do
stat -Lc 'owner=%u mode=%a type=%F' -- "$d"
doneOn a French-locale system this prints type=répertoire for every directory, which root_owned_parent_chain rejects.
Full trace :
++ /usr/bin/stat -Lc '%u %a %F' -- /run/user
+ [[ 0 == 0 ]]
+ [[ répertoire == directory ]]
+ return 1
+ fail_state_boundary
+ echo 'Refusing to use an unsafe Omarchy update inhibitor state path.'Expected behavior
root_owned_parent_chain should force LC_ALL=C.
Workaround
Use LC_ALL=C omarchy update.
View raw text
### System details Omarchy: dev (7b336b1b), Locale: fr_FR ### What's wrong? ## TLDR `omarchy-update-stay-awake` fails on every non-English locale: `root_owned_parent_chain` compares `stat -Lc '%F'` output to the hardcoded English string `"directory"` ## System details - Omarchy 4, dev checkout to branch `quattro` - System locale: French (`fr_FR.UTF-8` — `LC_ALL`/`LANG` not forced to `C`) - `XDG_RUNTIME_DIR=/run/user/1000`, owned by user, mode `700` ## What's wrong `omarchy update` fails at the "Create system snapshot" / stay-awake step with: ``` Refusing to use an unsafe Omarchy update inhibitor state path. Something went wrong during the update! ``` ## Root cause In `bin/omarchy-update-stay-awake`, `root_owned_parent_chain()` walks the parent directory chain of `$XDG_RUNTIME_DIR` and calls: ```bash read -r owner mode type < <(/usr/bin/stat -Lc '%u %a %F' -- "$parent") || return 1 [[ $owner == 0 && $type == "directory" ]] || return 1 ``` `stat`'s `%F` format is locale-dependent: it prints the *translated* file-type name (e.g. `répertoire` in French), not the literal English word `directory`. This comparison always fails even though the directory is root-owned, `755`. This function does **not** force `LC_ALL=C` before calling `stat`, unlike other functions in the same file (e.g. `read_state_record`). ## Reproduction ```bash for d in /run/user/1000 /run/user /run /; do stat -Lc 'owner=%u mode=%a type=%F' -- "$d" done ``` On a French-locale system this prints `type=répertoire` for every directory, which `root_owned_parent_chain` rejects. Full trace : ``` ++ /usr/bin/stat -Lc '%u %a %F' -- /run/user + [[ 0 == 0 ]] + [[ répertoire == directory ]] + return 1 + fail_state_boundary + echo 'Refusing to use an unsafe Omarchy update inhibitor state path.' ``` ## Expected behavior `root_owned_parent_chain` should force `LC_ALL=C`. ## Workaround Use `LC_ALL=C omarchy update`.
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:38 UTC