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.
Network panel misreports WARP/WireGuard tun as "Ethernet (10gbit)" and shows tunnel IP instead of Wi-Fi
Reported by ujo4eva · filed Aug 19, 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-1 (Arch) · Intel Pentium Silver N5030 · Wi-Fi 6 AX200 (wlp2s0) + Realtek RTL8111 (enp3s0) · Wi-Fi SSID osarchy · CloudflareWARP VPN
What's wrong?
The network panel hero reads "Ethernet (10gbit)" while the machine is actually on Wi-Fi, and the IP shown is the WARP tunnel IP (172.16.0.2) instead of the Wi-Fi IP (10.42.0.148). SSID/gateway are empty. The bar icon is correct (Wi-Fi glyph, from the Quickshell NetworkManager backend via Panel.qml kind), so only the panel header/details — fed by omarchy-network-status — are wrong.
Root cause
bin/omarchy-network-status selects the active interface from the route table via ip route get 1.1.1.1, not from NetworkManager. CloudflareWARP installs a policy-routed default route (fwmark 0x100cf → table 65743) that captures that probe, so iface resolves to CloudflareWARP. Because the tun has no /sys/class/net/CloudflareWARP/wireless, the script classifies it type=ethernet, and /sys/class/net/CloudflareWARP/speed reports a bogus 10000 Mbps → formatHeaderSpeed(10000) renders "10gbit" (Model.js). Panel.qml then keys the hero off info.type/info.speed and shows info.ip.
Note bin/omarchy-network-band already does this correctly — it selects the connected device from nmcli device status (TYPE == wifi) instead of the route table.
Steps to reproduce
- Connect to Wi-Fi (
wlp2s0, any SSID). - Start CloudflareWARP (or any VPN whose
tunwins the default route, e.g. WireGuardAllowedIPs = 0.0.0.0/0). - Open the network panel (Wi-Fi icon in bar, or
SUPER+CTRL+W). - Observe hero "Ethernet (10gbit)" and IP
172.16.0.2.
Diagnostics
$ ip route get 1.1.1.1
1.1.1.1 dev CloudflareWARP table 65743 src 172.16.0.2 uid 1000
$ ip rule
0: from all lookup local
32765: not from all fwmark 0x100cf lookup 65743
32766: from all lookup main
32767: from all lookup default
$ omarchy-network-status --verbose
iface CloudflareWARP
ip 172.16.0.2
type ethernet
speed 10000
duplex full
$ ls -d /sys/class/net/CloudflareWARP/device # does not exist (virtual iface)
$ cat /sys/class/net/CloudflareWARP/speed # -> 10000
$ ls -d /sys/class/net/wlp2s0/wireless # -> exists
$ ls -d /sys/class/net/enp3s0/device # -> exists (physical NIC)Suggested fix
After resolving the route's iface, if it is not a real NIC (/sys/class/net/$iface/wireless and /sys/class/net/$iface/device both absent → virtual tun/tap/vpn), re-resolve from NetworkManager:
LC_ALL=C nmcli -t -f DEVICE,TYPE,STATE device status \
| awk -F: '$2 == "ethernet" && $3 == "connected" { print $1; exit }'
# fallback:
LC_ALL=C nmcli -t -f DEVICE,TYPE,STATE device status \
| awk -F: '$2 == "wifi" && $3 == "connected" { print $1; exit }'Ethernet first, to match the panel's kind precedence. When the probe route's dev differs from the physical iface, derive gateway from the physical device's default route (ip -j route show dev <iface> default | jq -r '.[0].gateway // ""'), and report speed/duplex for real NICs only.
Filed by deepseek-v4-flash-free via opencode.
View raw text
### System details
Omarchy `4.0.0-1` (Arch) · Intel Pentium Silver N5030 · Wi-Fi 6 AX200 (`wlp2s0`) + Realtek RTL8111 (`enp3s0`) · Wi-Fi SSID `osarchy` · CloudflareWARP VPN
### What's wrong?
The network panel hero reads **"Ethernet (10gbit)"** while the machine is actually on Wi-Fi, and the IP shown is the WARP tunnel IP (`172.16.0.2`) instead of the Wi-Fi IP (`10.42.0.148`). SSID/gateway are empty. The bar icon is correct (Wi-Fi glyph, from the Quickshell NetworkManager backend via `Panel.qml` `kind`), so only the panel header/details — fed by `omarchy-network-status` — are wrong.
### Root cause
`bin/omarchy-network-status` selects the active interface from the **route table** via `ip route get 1.1.1.1`, not from NetworkManager. CloudflareWARP installs a policy-routed default route (`fwmark 0x100cf → table 65743`) that captures that probe, so `iface` resolves to `CloudflareWARP`. Because the tun has no `/sys/class/net/CloudflareWARP/wireless`, the script classifies it `type=ethernet`, and `/sys/class/net/CloudflareWARP/speed` reports a bogus `10000` Mbps → `formatHeaderSpeed(10000)` renders `"10gbit"` (Model.js). `Panel.qml` then keys the hero off `info.type`/`info.speed` and shows `info.ip`.
Note `bin/omarchy-network-band` already does this correctly — it selects the connected device from `nmcli device status` (`TYPE == wifi`) instead of the route table.
### Steps to reproduce
1. Connect to Wi-Fi (`wlp2s0`, any SSID).
2. Start CloudflareWARP (or any VPN whose `tun` wins the default route, e.g. WireGuard `AllowedIPs = 0.0.0.0/0`).
3. Open the network panel (Wi-Fi icon in bar, or `SUPER+CTRL+W`).
4. Observe hero "Ethernet (10gbit)" and IP `172.16.0.2`.
### Diagnostics
```
$ ip route get 1.1.1.1
1.1.1.1 dev CloudflareWARP table 65743 src 172.16.0.2 uid 1000
$ ip rule
0: from all lookup local
32765: not from all fwmark 0x100cf lookup 65743
32766: from all lookup main
32767: from all lookup default
$ omarchy-network-status --verbose
iface CloudflareWARP
ip 172.16.0.2
type ethernet
speed 10000
duplex full
$ ls -d /sys/class/net/CloudflareWARP/device # does not exist (virtual iface)
$ cat /sys/class/net/CloudflareWARP/speed # -> 10000
$ ls -d /sys/class/net/wlp2s0/wireless # -> exists
$ ls -d /sys/class/net/enp3s0/device # -> exists (physical NIC)
```
### Suggested fix
After resolving the route's `iface`, if it is not a real NIC (`/sys/class/net/$iface/wireless` **and** `/sys/class/net/$iface/device` both absent → virtual `tun`/`tap`/`vpn`), re-resolve from NetworkManager:
```sh
LC_ALL=C nmcli -t -f DEVICE,TYPE,STATE device status \
| awk -F: '$2 == "ethernet" && $3 == "connected" { print $1; exit }'
# fallback:
LC_ALL=C nmcli -t -f DEVICE,TYPE,STATE device status \
| awk -F: '$2 == "wifi" && $3 == "connected" { print $1; exit }'
```
Ethernet first, to match the panel's `kind` precedence. When the probe route's dev differs from the physical `iface`, derive gateway from the physical device's default route (`ip -j route show dev <iface> default | jq -r '.[0].gateway // ""'`), and report `speed`/`duplex` for real NICs only.
> Filed by deepseek-v4-flash-free via opencode.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:44 UTC