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-remove-browser uninstalls the package with no running-process check, leaving a half-dead browser that dumps core for hours
Reported by seanfreiburg · filed Aug 14, 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
What happened
omarchy-remove-browser uninstalls a browser package without checking whether that browser is currently running. If it is, the running process survives on deleted inodes and is left in a half-dead state: the browser window stays up and usable, but every child process it subsequently spawns hits a fatal CHECK during startup and dumps core.
On this machine that produced three core dumps over two hours from a browser that still looked fine on screen.
This affects all six browsers the script supports, not just Chrome. Every branch — chrome, brave, brave-origin, edge, firefox, zen — calls omarchy-pkg-drop with no running-process check, so the same failure is reachable through any of them. Chrome is simply what I hit; the reproduction and crash detail below are Chrome-specific, but the defect is in the shared removal path. The Chromium-family browsers (Chrome, Brave, Brave Origin, Edge) would fail in the same multi-process way; Firefox and Zen would degrade differently but are equally unguarded.
Timeline from pacman.log + journal:
| Time (2026-08-14) | Event |
|---|---|
| 13:33:34 | Chrome launched via gtk-launch google-chrome.desktop |
| 13:36:28 | omarchy-remove-browser chrome invoked |
| 13:36:32 | pacman -Rns --noconfirm google-chrome — /opt/google/chrome deleted |
| 13:36:34 | Core dump: child OnDeviceModelService, SIGTRAP |
| 15:11:44 | Core dump: child VideoCaptureService, SIGTRAP |
| 15:30:26 | Core dump: child VideoCaptureService, SIGTRAP |
The browser process itself (PID 20399) was still running with 143 mappings backed by deleted inodes at the time of diagnosis, ~2 hours after the package was removed.
Expected
omarchy-remove-browser should detect that the target browser is running and either refuse with a message, or prompt to close it first — before handing the package to omarchy-pkg-drop.
Actual
/usr/share/omarchy/bin/omarchy-remove-browser goes straight to removal with no running-process check. The chrome branch:
chrome)
echo "Removing Chrome..."
set_fallback_default_browser google-chrome.desktop
omarchy-pkg-drop google-chrome
rm -f ~/.config/chrome-flags.conf
sudo rm -f /etc/opt/chrome/policies/managed/color.json
;;omarchy-pkg-drop in turn runs sudo pacman -Rns --noconfirm, so there is no confirmation step anywhere in the path. All six browser branches (chrome, brave, brave-origin, edge, firefox, zen) have the same gap.
Steps to reproduce
- Launch Chrome and leave it open.
- Run
omarchy remove browser chrome. - Leave the still-running Chrome window open and visit a page that requests camera/mic access (or otherwise causes a new utility process to spawn).
coredumpctl listshows SIGTRAP core dumps from/opt/google/chrome/chrome.
Crash detail
The crash itself is correct Chrome behavior, not a Chrome bug — it is a deliberate CHECK failure, since the install directory the child needs is gone. Chrome ships stripped and publishes no debug symbols, so no frame symbolizes. I recovered the machine code at the crash site by reading the deleted binary back through /proc/<browser-pid>/exe:
... e8 4f b2 3e fd call <check-failure handler>
cc int3 <- trapped here
=> 0f 0b ud2 <- RIP after the trapThat int3; ud2 pair is Chrome's IMMEDIATE_CRASH(), emitted by a failed CHECK(). int3 raises SIGTRAP with si_code: SI_KERNEL, matching what coredumpctl info recorded. The kernel agrees independently:
traps: chrome[92502] trap int3 ip:55720d1e78ba sp:7fffbed73a50 error:0 in chrome[5eb68ba,55720a4d8000+d72d000]Both VideoCaptureService crashes are at the identical offset (chrome + 0x5eb78ba); the OnDeviceModelService crash is at a different one (+ 0x50c6b15) — so it is one root cause reached through more than one code path, not a single repeated failure. Without symbols I cannot name the specific assertion; the plausible candidates are resource files (icudtl.dat, .pak) or a sibling .so resolved by path relative to the deleted module directory.
Ruled out: no memory pressure (32 GiB free, zero swap used, no OOM kills) and no library-ABI skew (nothing Chrome links against was upgraded in the window).
Suggested fix
A pgrep guard in omarchy-remove-browser before omarchy-pkg-drop, applied to all six branches — refuse, or prompt to quit the browser first. Removing a browser while it is open seems like the common case rather than an exotic one, and the current failure mode is silent: nothing on screen indicates anything is wrong, while core dumps accumulate in the background.
Related
#6748 (omarchy-update replacing /usr/share/omarchy/shell under the running Quickshell) is the same class of bug — a package operation applied underneath a running program — but a different component, and its fix was a sequencing change specific to omarchy-update rather than a general guard. Noting it as precedent, not as a duplicate.
System
omarchy version: 4.0.0-1- Kernel: Linux 7.1.8-arch1-3
- Removed package:
google-chrome 151.0.7922.137-1
Filed by Claude Opus 5 (1M context) via Claude Code.
View raw text
## What happened
`omarchy-remove-browser` uninstalls a browser package without checking whether that browser is currently running. If it is, the running process survives on deleted inodes and is left in a half-dead state: the browser window stays up and usable, but every child process it subsequently spawns hits a fatal `CHECK` during startup and dumps core.
On this machine that produced three core dumps over two hours from a browser that still looked fine on screen.
**This affects all six browsers the script supports, not just Chrome.** Every branch — `chrome`, `brave`, `brave-origin`, `edge`, `firefox`, `zen` — calls `omarchy-pkg-drop` with no running-process check, so the same failure is reachable through any of them. Chrome is simply what I hit; the reproduction and crash detail below are Chrome-specific, but the defect is in the shared removal path. The Chromium-family browsers (Chrome, Brave, Brave Origin, Edge) would fail in the same multi-process way; Firefox and Zen would degrade differently but are equally unguarded.
Timeline from `pacman.log` + journal:
| Time (2026-08-14) | Event |
|---|---|
| 13:33:34 | Chrome launched via `gtk-launch google-chrome.desktop` |
| 13:36:28 | `omarchy-remove-browser chrome` invoked |
| 13:36:32 | `pacman -Rns --noconfirm google-chrome` — `/opt/google/chrome` deleted |
| **13:36:34** | Core dump: child `OnDeviceModelService`, SIGTRAP |
| 15:11:44 | Core dump: child `VideoCaptureService`, SIGTRAP |
| 15:30:26 | Core dump: child `VideoCaptureService`, SIGTRAP |
The browser process itself (PID 20399) was still running with **143 mappings** backed by deleted inodes at the time of diagnosis, ~2 hours after the package was removed.
## Expected
`omarchy-remove-browser` should detect that the target browser is running and either refuse with a message, or prompt to close it first — before handing the package to `omarchy-pkg-drop`.
## Actual
`/usr/share/omarchy/bin/omarchy-remove-browser` goes straight to removal with no running-process check. The `chrome` branch:
```bash
chrome)
echo "Removing Chrome..."
set_fallback_default_browser google-chrome.desktop
omarchy-pkg-drop google-chrome
rm -f ~/.config/chrome-flags.conf
sudo rm -f /etc/opt/chrome/policies/managed/color.json
;;
```
`omarchy-pkg-drop` in turn runs `sudo pacman -Rns --noconfirm`, so there is no confirmation step anywhere in the path. All six browser branches (`chrome`, `brave`, `brave-origin`, `edge`, `firefox`, `zen`) have the same gap.
## Steps to reproduce
1. Launch Chrome and leave it open.
2. Run `omarchy remove browser chrome`.
3. Leave the still-running Chrome window open and visit a page that requests camera/mic access (or otherwise causes a new utility process to spawn).
4. `coredumpctl list` shows SIGTRAP core dumps from `/opt/google/chrome/chrome`.
## Crash detail
The crash itself is correct Chrome behavior, not a Chrome bug — it is a deliberate `CHECK` failure, since the install directory the child needs is gone. Chrome ships stripped and publishes no debug symbols, so no frame symbolizes. I recovered the machine code at the crash site by reading the deleted binary back through `/proc/<browser-pid>/exe`:
```
... e8 4f b2 3e fd call <check-failure handler>
cc int3 <- trapped here
=> 0f 0b ud2 <- RIP after the trap
```
That `int3; ud2` pair is Chrome's `IMMEDIATE_CRASH()`, emitted by a failed `CHECK()`. `int3` raises SIGTRAP with `si_code: SI_KERNEL`, matching what `coredumpctl info` recorded. The kernel agrees independently:
```
traps: chrome[92502] trap int3 ip:55720d1e78ba sp:7fffbed73a50 error:0 in chrome[5eb68ba,55720a4d8000+d72d000]
```
Both `VideoCaptureService` crashes are at the identical offset (`chrome + 0x5eb78ba`); the `OnDeviceModelService` crash is at a different one (`+ 0x50c6b15`) — so it is one root cause reached through more than one code path, not a single repeated failure. Without symbols I cannot name the specific assertion; the plausible candidates are resource files (`icudtl.dat`, `.pak`) or a sibling `.so` resolved by path relative to the deleted module directory.
Ruled out: no memory pressure (32 GiB free, zero swap used, no OOM kills) and no library-ABI skew (nothing Chrome links against was upgraded in the window).
## Suggested fix
A `pgrep` guard in `omarchy-remove-browser` before `omarchy-pkg-drop`, applied to all six branches — refuse, or prompt to quit the browser first. Removing a browser while it is open seems like the common case rather than an exotic one, and the current failure mode is silent: nothing on screen indicates anything is wrong, while core dumps accumulate in the background.
## Related
#6748 (`omarchy-update` replacing `/usr/share/omarchy/shell` under the running Quickshell) is the same class of bug — a package operation applied underneath a running program — but a different component, and its fix was a sequencing change specific to `omarchy-update` rather than a general guard. Noting it as precedent, not as a duplicate.
## System
- `omarchy version`: 4.0.0-1
- Kernel: Linux 7.1.8-arch1-3
- Removed package: `google-chrome 151.0.7922.137-1`
---
Filed by Claude Opus 5 (1M context) via Claude Code.
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:05 UTC