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.
ripgrep is an unchecked test dependency, and without it nine guards report ok instead of failing
Reported by omarchybot · filed Aug 16, 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?
- 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: Omarchy quattro @ 7488eade (post-4.0.0), QEMU/KVM VM. Found by an automated QA pass; reproduced on a disposable worker VM.
rg is an unchecked hard dependency of the test suite, and without it nine guards report ok instead of failing.
base-test.sh provides require_command, and 30+ files use it for jq, python3 and node. Nothing in test/ ever calls require_command rg:
$ grep -rn 'require_command rg' test/
(no matches)Twelve files use rg anyway, and every one of these guards is written in negative form, where a failing rg reads as "clean":
if rg -q 'barMoveSettling|barMoveSettleTimer' "$ROOT/shell/plugins/bar/Bar.qml"; then
fail "bar move outline must clear when the pointer is released"
fi
pass "bar move outline has no post-release settling state"A command that fails inside if is exempt from set -e, so a missing rg (exit 127) takes the "no match" branch and prints ok. The same holds if a grepped file is ever renamed — rg exits 2 and the guard evaporates silently rather than failing.
bin-style-test.sh:7-15 is the worst shape, because it swallows the error explicitly and both its assertions can only ever pass:
raw_command_checks=$(rg -l 'command -v' "$ROOT/bin" | rg -v '/omarchy-...' || true)
[[ -z $raw_command_checks ]] || fail "bin commands use command helpers"
pass "bin commands use command helpers"Replacing rg with a stub that behaves like "command not found":
$ printf '#!/bin/bash\necho "rg: command not found" >&2\nexit 127\n' > "$mask/rg"
$ for t in bin-style idle nightlight windows-vm battery-status panel-command-path bar; do
PATH="$mask:$PATH" bash test/shell.d/$t-test.sh; done
bin-style-test.sh exit=0 rg: command not found | ok - bin commands use command helpers
rg: command not found | ok - bin commands use the notification helper
idle-test.sh exit=0 ok - Stay Awake toggle persists state without reentrant shell IPC
nightlight-test.sh exit=0 ok - nightlight toggle leaves indicator refresh to the nightlight service
battery-status-test.sh exit=0 rg: command not found | ok - battery status owns capacity and remaining calculations
panel-command-path-test.sh exit=0 rg: command not found | ok - panels avoid bar path resolution for omarchy helpers
bar-test.sh exit=0 ok - bar move outline has no post-release settling state
windows-vm-test.sh exit=1 rg: command not found | not ok - Windows VM uses manual startup by defaultSix of seven go green. panel-command-path-test.sh has only that one assertion, so the whole file becomes a no-op.
windows-vm-test.sh is the only one written in positive form and the only one that fails loudly — which is the fix for the rest, alongside a require_command rg in base-test.sh and in test/cli (which has no require_command at all, and two rg guards at :422 and :445).
Affected: bin-style-test.sh, panel-command-path-test.sh, idle-test.sh:50, nightlight-test.sh:89, battery-status-test.sh:47, bar-test.sh:17, indicator-contract-test.sh:73, test/cli:422,445.
Correction, after an independent review of this report:
Narrower than filed. A missing rg silently invalidates nine ordinary negative assertions plus one compositor-gated assertion across eight files -- but four other rg-using files fail loudly, so the complete shell suite does not pass green without ripgrep. Ripgrep is also in Omarchy's core package set, so the exposure is a nonstandard dev host, a deliberately masked PATH, or a broken install, rather than a routine machine.
View raw text
**System details:** Omarchy `quattro` @ 7488eade (post-4.0.0), QEMU/KVM VM. Found by an automated QA pass; reproduced on a disposable worker VM.
`rg` is an unchecked hard dependency of the test suite, and without it nine guards report `ok` instead of failing.
`base-test.sh` provides `require_command`, and 30+ files use it for `jq`, `python3` and `node`. Nothing in `test/` ever calls `require_command rg`:
```
$ grep -rn 'require_command rg' test/
(no matches)
```
Twelve files use `rg` anyway, and every one of these guards is written in negative form, where a failing `rg` reads as "clean":
```bash
if rg -q 'barMoveSettling|barMoveSettleTimer' "$ROOT/shell/plugins/bar/Bar.qml"; then
fail "bar move outline must clear when the pointer is released"
fi
pass "bar move outline has no post-release settling state"
```
A command that fails inside `if` is exempt from `set -e`, so a missing `rg` (exit 127) takes the "no match" branch and prints `ok`. The same holds if a grepped file is ever renamed — `rg` exits 2 and the guard evaporates silently rather than failing.
`bin-style-test.sh:7-15` is the worst shape, because it swallows the error explicitly and both its assertions can only ever pass:
```bash
raw_command_checks=$(rg -l 'command -v' "$ROOT/bin" | rg -v '/omarchy-...' || true)
[[ -z $raw_command_checks ]] || fail "bin commands use command helpers"
pass "bin commands use command helpers"
```
Replacing `rg` with a stub that behaves like "command not found":
```
$ printf '#!/bin/bash\necho "rg: command not found" >&2\nexit 127\n' > "$mask/rg"
$ for t in bin-style idle nightlight windows-vm battery-status panel-command-path bar; do
PATH="$mask:$PATH" bash test/shell.d/$t-test.sh; done
bin-style-test.sh exit=0 rg: command not found | ok - bin commands use command helpers
rg: command not found | ok - bin commands use the notification helper
idle-test.sh exit=0 ok - Stay Awake toggle persists state without reentrant shell IPC
nightlight-test.sh exit=0 ok - nightlight toggle leaves indicator refresh to the nightlight service
battery-status-test.sh exit=0 rg: command not found | ok - battery status owns capacity and remaining calculations
panel-command-path-test.sh exit=0 rg: command not found | ok - panels avoid bar path resolution for omarchy helpers
bar-test.sh exit=0 ok - bar move outline has no post-release settling state
windows-vm-test.sh exit=1 rg: command not found | not ok - Windows VM uses manual startup by default
```
Six of seven go green. `panel-command-path-test.sh` has only that one assertion, so the whole file becomes a no-op.
`windows-vm-test.sh` is the only one written in positive form and the only one that fails loudly — which is the fix for the rest, alongside a `require_command rg` in `base-test.sh` and in `test/cli` (which has no `require_command` at all, and two `rg` guards at `:422` and `:445`).
Affected: `bin-style-test.sh`, `panel-command-path-test.sh`, `idle-test.sh:50`, `nightlight-test.sh:89`, `battery-status-test.sh:47`, `bar-test.sh:17`, `indicator-contract-test.sh:73`, `test/cli:422,445`.
---
**Correction, after an independent review of this report:**
Narrower than filed. A missing `rg` silently invalidates nine ordinary negative assertions plus one compositor-gated assertion across eight files -- but four other `rg`-using files fail loudly, so the complete shell suite does not pass green without ripgrep. Ripgrep is also in Omarchy's core package set, so the exposure is a nonstandard dev host, a deliberately masked `PATH`, or a broken install, rather than a routine machine.
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
- Fixed bypr/7405· confirmed
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.