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.
Add silent failure detection for apps that exit shortly after start
Reported by andyholst · filed Sep 13, 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
The Gap
Apps that exit silently (lifetime < 2s, exit code ≠ 0) are not caught by:
- omarchy-crash-watch — requires core dump
- Pre/post upgrade diff — service was never running long enough to snapshot
The Heuristic
Process starts → lives < threshold (2-5s) → exits with code ≠ 0
= "Silent failure" — app tried to start but failedWhat It Catches
- App fails to start (missing library, bad config, incompatible version)
- App crashes during initialization (before main loop)
- App exits due to dependency failure after upgrade
Implementation
Scope
Monitor binaries from packages installed by:
- Omarchy install scripts (install/hardware/*.sh, install/config/*.sh)
- Pacman (pacman -Qqe)
- AUR/yay (pacman -Qqm)
Watcher
Background systemd service (omarchy-silent-watch.service):
- Hooks into systemd journal for process exits
- For each exit: check lifetime (start → exit) and exit code
- If lifetime < threshold AND exit code ≠ 0 → flag as silent failure
False Positive Filtering
Known single-shot tools to ignore:
- --version, --help, --check invocations
- Package hooks (pacman, mkinitcpio)
- One-shot migration scripts
Suppression list: /usr/share/omarchy/silent-watch-suppressions.txt
Notification
⚠️ These apps failed to start after upgrade:
- coolercontrold (exited with code 1 after 0.3s)
- nvidia-powerd (exited with code 127 after 0.1s)
Click to diagnose and file bug reportBug Report Generation
Reuse existing reporting logic from `diagnose-crash/reporting.md`.
Determine Where to File
Is the broken component in Omarchy's sphere?
├── YES — omarchy-* command, Quickshell, Hyprland config, theme, migration
│ └── File to: github.com/omacom/omarchy/issues
│
├── NO — but Omarchy installs/configures it (coolercontrold, nvidia-utils, etc.)
│ └── File upstream bug (bugs.archlinux.org / third-party tracker)
│ └── CREATE Omarchy tracking issue (label: upstream, tracking)
│
└── NO — unrelated to Omarchy
└── File upstream bug onlySearch Before Filing
Search Omarchy issues:
gh search issues --repo omacom/omarchy "<app> silent"
gh issue list --repo omacom/omarchy --state all --search "<app>"Search Arch bugs:
- Search bugs.archlinux.org for package name + error
- If match found, comment with new evidence
- If not, file new against correct package/project
What the Bug Report Includes
| Field | Source |
|---|---|
| System details | omarchy debug |
| What's wrong | Silent failure log (exit code, lifetime, stderr) |
| Steps to reproduce | Run app after upgrade |
| Expected behavior | App stays running |
Labels: bug, silent-failure, auto-detected
Title format: [auto] <app> exits with code <N> after <time>s since <version>
User Consent
Agent shows exact title and body. Waits for explicit yes.
Signing
Filed by <model> via <agent harness>.
Devil's Advocate
Shared (Both Issues)
These apply to any automated bug reporting:
1. Fallback When gh Not Authenticated: If gh auth status fails, agent cannot file to GitHub. Fallback: hand user the finished text.
2. Arch Bug Tracker Specifics: bugs.archlinux.org requires Category, Severity, Reproducible, valid email, correct package/project. Agent must map service → Arch package → project/category.
3. AUR Packages Different Tracker: AUR packages have bugs at aur.archlinux.org, not bugs.archlinux.org. Detect via pacman -Qm.
4. Flatpak/Snap Packages: Third-party apps via Flatpak/Snap have different trackers. Agent must detect source and route.
5. Intermittent Failures: Both tools may catch something once. Report must note: reproducible or one-time.
6. No Internet Access: If upstream trackers unreachable: save report locally to /tmp/omarchy-report-<timestamp>.md, prompt user to file when online.
7. Non-Technical Users: Notification must be simple: one click to file, not multiple choices. Agent does the work.
8. Suppression List Maintenance: Who maintains suppression lists? Omarchy maintainers? Auto-generated from package metadata?
Silent-Watch Specific
S1. User Manually Killed: If user manually kills a process, watcher flags it. Distinguish: user action or upgrade-caused?
S2. Process Started by User vs System: User runs coolercontrold --check and exits fast — watcher flags it. Distinguish: user-initiated vs system startup?
S3. Threshold Tuning: 2s? 5s? Too short = noise, too long = misses real failures. Needs tuning after deployment.
S4. Multiple Silent Failures: Watcher catches 5 apps failed. One report with all issues, or one per issue?
Benefits
- Silent failures caught — apps that exit fast are detected
- Immediate detection — problems surface on app start
- Right destination — Omarchy bugs to Omarchy, Arch bugs to Arch
- Duplicate avoidance — search before filing upstream
- Complete reports — exit code + lifetime + stderr included
Open Questions
- Threshold? 2s? 5s? Needs tuning
- Performance? Background watcher must be lightweight
- Scope? All installed binaries or only Omarchy-managed?
- Arch bug tracker mapping? How to auto-map service → Arch package → project/category
- AUR detection? How to detect AUR vs official repo
- Suppression list maintenance? Who maintains it
- Threshold tuning? Needs deployment tuning
- User vs system process? How to distinguish
Related
Issue #11587 — Pre/post upgrade diff (complements this issue)
View raw text
## The Gap
Apps that exit silently (lifetime < 2s, exit code ≠ 0) are not caught by:
- `omarchy-crash-watch` — requires core dump
- Pre/post upgrade diff — service was never running long enough to snapshot
## The Heuristic
```
Process starts → lives < threshold (2-5s) → exits with code ≠ 0
= "Silent failure" — app tried to start but failed
```
## What It Catches
- App fails to start (missing library, bad config, incompatible version)
- App crashes during initialization (before main loop)
- App exits due to dependency failure after upgrade
## Implementation
### Scope
Monitor binaries from packages installed by:
- Omarchy install scripts (`install/hardware/*.sh`, `install/config/*.sh`)
- Pacman (`pacman -Qqe`)
- AUR/yay (`pacman -Qqm`)
### Watcher
Background systemd service (`omarchy-silent-watch.service`):
- Hooks into `systemd` journal for process exits
- For each exit: check lifetime (start → exit) and exit code
- If lifetime < threshold AND exit code ≠ 0 → flag as silent failure
### False Positive Filtering
Known single-shot tools to ignore:
- `--version`, `--help`, `--check` invocations
- Package hooks (pacman, mkinitcpio)
- One-shot migration scripts
Suppression list: `/usr/share/omarchy/silent-watch-suppressions.txt`
### Notification
```
⚠️ These apps failed to start after upgrade:
- coolercontrold (exited with code 1 after 0.3s)
- nvidia-powerd (exited with code 127 after 0.1s)
Click to diagnose and file bug report
```
## Bug Report Generation
**Reuse existing reporting logic from `diagnose-crash/reporting.md`.**
### Determine Where to File
```
Is the broken component in Omarchy's sphere?
├── YES — omarchy-* command, Quickshell, Hyprland config, theme, migration
│ └── File to: github.com/omacom/omarchy/issues
│
├── NO — but Omarchy installs/configures it (coolercontrold, nvidia-utils, etc.)
│ └── File upstream bug (bugs.archlinux.org / third-party tracker)
│ └── CREATE Omarchy tracking issue (label: upstream, tracking)
│
└── NO — unrelated to Omarchy
└── File upstream bug only
```
### Search Before Filing
**Search Omarchy issues:**
```bash
gh search issues --repo omacom/omarchy "<app> silent"
gh issue list --repo omacom/omarchy --state all --search "<app>"
```
**Search Arch bugs:**
- Search bugs.archlinux.org for package name + error
- If match found, comment with new evidence
- If not, file new against correct package/project
### What the Bug Report Includes
| Field | Source |
|-------|--------|
| System details | `omarchy debug` |
| What's wrong | Silent failure log (exit code, lifetime, stderr) |
| Steps to reproduce | Run app after upgrade |
| Expected behavior | App stays running |
**Labels**: `bug`, `silent-failure`, `auto-detected`
**Title format**: `[auto] <app> exits with code <N> after <time>s since <version>`
### User Consent
Agent shows exact title and body. Waits for explicit yes.
### Signing
`Filed by <model> via <agent harness>.`
## Devil's Advocate
### Shared (Both Issues)
These apply to any automated bug reporting:
**1. Fallback When gh Not Authenticated**: If `gh auth status` fails, agent cannot file to GitHub. Fallback: hand user the finished text.
**2. Arch Bug Tracker Specifics**: bugs.archlinux.org requires Category, Severity, Reproducible, valid email, correct package/project. Agent must map service → Arch package → project/category.
**3. AUR Packages Different Tracker**: AUR packages have bugs at aur.archlinux.org, not bugs.archlinux.org. Detect via `pacman -Qm`.
**4. Flatpak/Snap Packages**: Third-party apps via Flatpak/Snap have different trackers. Agent must detect source and route.
**5. Intermittent Failures**: Both tools may catch something once. Report must note: reproducible or one-time.
**6. No Internet Access**: If upstream trackers unreachable: save report locally to `/tmp/omarchy-report-<timestamp>.md`, prompt user to file when online.
**7. Non-Technical Users**: Notification must be simple: one click to file, not multiple choices. Agent does the work.
**8. Suppression List Maintenance**: Who maintains suppression lists? Omarchy maintainers? Auto-generated from package metadata?
### Silent-Watch Specific
**S1. User Manually Killed**: If user manually kills a process, watcher flags it. Distinguish: user action or upgrade-caused?
**S2. Process Started by User vs System**: User runs `coolercontrold --check` and exits fast — watcher flags it. Distinguish: user-initiated vs system startup?
**S3. Threshold Tuning**: 2s? 5s? Too short = noise, too long = misses real failures. Needs tuning after deployment.
**S4. Multiple Silent Failures**: Watcher catches 5 apps failed. One report with all issues, or one per issue?
## Benefits
1. **Silent failures caught** — apps that exit fast are detected
2. **Immediate detection** — problems surface on app start
3. **Right destination** — Omarchy bugs to Omarchy, Arch bugs to Arch
4. **Duplicate avoidance** — search before filing upstream
5. **Complete reports** — exit code + lifetime + stderr included
## Open Questions
1. **Threshold?** 2s? 5s? Needs tuning
2. **Performance?** Background watcher must be lightweight
3. **Scope?** All installed binaries or only Omarchy-managed?
4. **Arch bug tracker mapping?** How to auto-map service → Arch package → project/category
5. **AUR detection?** How to detect AUR vs official repo
6. **Suppression list maintenance?** Who maintains it
7. **Threshold tuning?** Needs deployment tuning
8. **User vs system process?** How to distinguish
## Related
Issue #11587 — Pre/post upgrade diff (complements this issue)
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 12:23 UTC