Proof Portal

Project overview

Omarchy

ProbeLabs73 findings · 87 requirements

A 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.

Compare findings

The compared side's slice of new, resolved and changed findings versus its base — read live from git.

Base
9f3abc104cc367a0a98151e8ea4698a7381e9b8b9f3abc1common ancestor of quattro-proof
Verified
85/85 realizable87/87 meet policyverification complete: 3
Compared
9f3abc104cc367a0a98151e8ea4698a7381e9b8b9f3abc1
Verified
85/85 realizable87/87 meet policyverification complete: 3
+0 new·−0 resolved·0 changed·73 unchanged
New (0)
Findings introduced by the compared side — its own slice of issues.

No new findings on the compared side.

Resolved (0)
Findings present at the base but gone on the compared side.

No findings resolved on the compared side.

Changed (0)
Same finding on both sides, with severity and/or status moved (old → new).

No findings changed severity or status.

▸Still open / unchanged (73)
Exported bash functions execute as root inside apply-lock despite the trusted-PATH replacementKnown issueLock engages when password PAM disappears during the stabilize window; the stranded watchdog stands downKnown issueomarchy-system-lock exits 0 when lock engagement fails, leaving the dismissed Lock row silentKnown issueFingerprint gate fail-open: substring grep treats not-enrolled or failed fprintd-list probes as enrolledKnown issueomarchy-apply-lock rewrites the lock PAM stacks in place; an interrupted run leaves a torn stack on the live pathKnown issueFailed PKEXEC_UID/user mapping silently degrades target_user to root, configuring PAM for the wrong accountKnown issueLock-service fingerprint probe fail-open: substring grep treats zero-enrollment fprintd-list output as configuredKnown issueCompositor-side lock loss with a request outstanding is treated as a finished unlock; no re-lockKnown issuevipsthumbnail still-image lane has no timeout; a stalled conversion wedges its fan-out lane indefinitelyKnown issuestripJsonc comma regex rewrites strings that carry a comma before } or ] (omacom/omarchy#13250)Known issueUnicode or control whitespace between JSONC tokens empties the whole menu fileKnown issueparse_keycodes rewrites code:N/mouse:N tokens anywhere in a record, corrupting descriptions and commandsKnown issueComma in a binding description shifts every later CSV field: truncated label, wrong dispatcher, failed dispatchKnown issueLua function binds (Select all, Universal copy/paste/cut, Zoom in, Reset zoom) render in the menu but dispatch nothingKnown issueLua bind scan aborts on the first throwing require; every later Lua bind silently vanishes from the menu cacheKnown issueWarm keybindings cache serves a stale Lua command after the user edits only the command a __lua bind runsKnown issueSuccessful hyprctl dispatch with a stderr warning is treated as a refusal and the exec command runs twiceKnown issueomarchy-menu-select hangs forever when the summoned menu dies before writing done_fileKnown issueomarchy-menu-select blocks forever inside the omarchy-shell summon call when the IPC never returnsKnown issueNon-positive sleep-lock budget for logind windows <= 1s: suspend proceeds with no lock attemptKnown issueFailed/empty readlink result stored as backgroundPath, wiping a good lock-screen wallpaperKnown issuefingerprintPam.start() returning false disables fingerprint auth for the rest of the lock with no retryKnown issueAbnormal PAM error increments failedAttempts twice (onError and onCompleted both run handlePasswordFailure)Known issueomarchy-hyprland-session-locked has no deadline on hyprctl -j monitors; a stalled compositor IPC hangs the probeKnown issueScreen add/remove while locked clears the blank intent and never re-arms the idle blank timerKnown issueIn-place video wallpaper overwrite during a running poster job keeps the stale poster frameKnown issueActivating an app row while appLibrary is null closes the menu and skips the launchKnown issueApps submenu sorts with code-unit < on lowercased labels while search sorts with localeCompareKnown issuechildCount counts when-hidden children and duplicate itemOrder entries, so the submenu badge disagrees with what rendersKnown issueContracted exit codes lost when the usage/diagnostic write fails: unknown verb exits 1, help exits 1Known issueFailed jq payload build still execs the menu IPC with an empty payload and exits 0Known issueA whitespace-only filter is not a search for rebuildDisplay but is truthy for the detail gatesKnown issueNon-numeric dmenu width/maxHeight become NaN and collapse the card layoutKnown issueFailed menu FileView reloads are asymmetric: user handler wipes last good items, default keeps stale setKnown issuefoldedListHeight returns a height above the available cap; availableRowsHeight never clamps at zeroKnown issuegoBack refuses to retrace while activeMenu is root, stranding navStack after a drill that landed on rootKnown issueMenu guard batch runs as one bash child with no deadline; a blocking guard freezes guard answers for the sessionKnown issueGuard batches carry no generation token: a batch computed for the previous items publishes onto the new setKnown issueGuard ids interpolated unquoted into the shared bash batch: metacharacter ids break the protocol or execute commandsKnown issueEscape in input mode clears the entered text instead of cancelling the requestKnown issueisDescendantOf reports every non-root id as a descendant of root, including ids absent from the menuKnown issueMap reads walk Object.prototype: item(), results maps, providersLoaded treat constructor/toString as real entriesKnown issueA flat menu containing an entry id 'items' is parsed as a wrapper and every sibling entry is silently discardedKnown issueparseMenuJsonc walks a top-level JSON array and renders phantom rows keyed 0, 1, ... (omacom/omarchy#13492)Known issueA whole-line comment in a CR-only menu file swallows the rest of the fileKnown issuestripJsonc removes only whole-line // comments; an inline comment tail empties the whole file (omacom/omarchy#13493)Known issuestripJsonc has no block-comment pass: a /* */ comment empties the whole fileKnown issueKeybindings menu build has no deadline on hyprctl binds or xkbcli compile-keymap; a stalled callee blocks the menuKnown issueRefused key-up after an accepted key-down leaves a synthetic key stuck down and skips the sendshortcut fallbackKnown issueopenRoute follows a link one hop and never re-inspects the target kind: link-to-action opens as a menuKnown issuenormalize-before-merge wipes unspecified defaults: a label-only user entry erases action/aliases/guardsKnown issuemergeMenuSources stores prototype-named ids but drops them from itemOrder - the row is written and never renderedKnown issuemergeAppRows/swapProviderRows keep stale .order values and mutate caller-owned rows in placeKnown issuenormalizeItem edge cases: null parent kept, boolean guards preserved, action:0 mis-kinded, numeric labelsKnown issueA new menu summon re-opens with the stale uninstall confirmation still upKnown issueopen() throws on a JSON null payload: parse succeeds, the catch does not run, the property read throwsKnown issueOpening a select menu walks its rows quadratically (omacom/omarchy#10601)Known issuepathFor coerces a null parent to the id 'null'/'0' row while parentPathFor returns emptyKnown issuependingInitialMenu is stored and never read: a route summoned before the JSONC loads opens root and stays thereKnown issueFailed/killed providers commit their partial stdout and stay marked loaded; apps provider loads with no AppLibraryKnown issueProvider rows colliding with a static id are silently dropped: takenIds only records batch-minted idsKnown issuedmenu request lifecycle drops waiters on re-summon, on a busy resultProc, and for doneFile-only requestsKnown issueresolveRoute folds the input before the exact-id lookup and returns the normalized string as fallthroughKnown issuerevealCursor loses the directional peek: an uninstantiated delegate skips it and the underhang write undoes itKnown issuesearchScore throws on a label-less merged row and returns a NaN rank that displayRow coerces to the best tierKnown issuesearchScore ranking anomalies: apps promoted in-tier, root exact-labels swamped, multi-term matches collapseKnown issueSearch text misses: whole-word description matching drops punctuation-glued words and hyphenated alias formsKnown issueGeometry flags silently coerce non-numeric and flag-like values: --width abc summons width 0Known issueFailed second mktemp leaks the selection handshake temp file: cleanup trap installed only after both files existKnown issuePayload fontFamily is sticky: a later open that omits it keeps the previous caller's fontKnown issuesummonAction rewrites an explicitly empty quoted payload to {} - the in-process summon diverges from the bash bytesKnown issueargv budget with a leading zero (08/09) bypasses the validation guard via an octal arithmetic errorKnown issueHeader invariant 'every call bounded by the budget remainder' unenforced on three external callsKnown issue

Comparing findings for Omarchy. Requirement coverage is intentionally not shown here — see Requirements for coverage.