Proof Portal
Project overview
Omarchy
ProbeLabs73 findings · 87 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.
Compare findings
The compared side's slice of new, resolved and changed findings versus its base — read live from git.
Base
d6aa8dae57dfa6ae524199246eb0789181eadc8bd6aa8da
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 issueKI-APPLY-LOCK-EXPORTED-FUNCTIONS-ROOTLock engages when password PAM disappears during the stabilize window; the stranded watchdog stands downKnown issueKI-LOCK-PAM-FLIP-ENGAGES-LOCKomarchy-system-lock exits 0 when lock engagement fails, leaving the dismissed Lock row silentKnown issueKI-260930-2FBEFingerprint gate fail-open: substring grep treats not-enrolled or failed fprintd-list probes as enrolledKnown issueKI-APPLY-LOCK-FPRINT-GATE-FAIL-OPENomarchy-apply-lock rewrites the lock PAM stacks in place; an interrupted run leaves a torn stack on the live pathKnown issueKI-APPLY-LOCK-PAM-NONATOMIC-WRITEFailed PKEXEC_UID/user mapping silently degrades target_user to root, configuring PAM for the wrong accountKnown issueKI-APPLY-LOCK-TARGET-USER-DEGRADES-ROOTLock-service fingerprint probe fail-open: substring grep treats zero-enrollment fprintd-list output as configuredKnown issueKI-LOCK-FPRINT-PROBE-FAIL-OPENCompositor-side lock loss with a request outstanding is treated as a finished unlock; no re-lockKnown issueKI-LOCK-SPONTANEOUS-UNLOCK-FAIL-OPENvipsthumbnail still-image lane has no timeout; a stalled conversion wedges its fan-out lane indefinitelyKnown issueKI-MENU-IMAGES-VIPS-NO-TIMEOUTstripJsonc comma regex rewrites strings that carry a comma before } or ] (omacom/omarchy#13250)Known issueKI-MENU-JSONC-COMMA-IN-STRINGUnicode or control whitespace between JSONC tokens empties the whole menu fileKnown issueKI-MENU-JSONC-UNICODE-WHITESPACEparse_keycodes rewrites code:N/mouse:N tokens anywhere in a record, corrupting descriptions and commandsKnown issueKI-MENU-KEYBINDINGS-CODE-REWRITE-OVERREACHComma in a binding description shifts every later CSV field: truncated label, wrong dispatcher, failed dispatchKnown issueKI-MENU-KEYBINDINGS-CSV-DESC-COMMALua function binds (Select all, Universal copy/paste/cut, Zoom in, Reset zoom) render in the menu but dispatch nothingKnown issueKI-MENU-KEYBINDINGS-FUNC-BIND-NO-DISPATCHLua bind scan aborts on the first throwing require; every later Lua bind silently vanishes from the menu cacheKnown issueKI-MENU-KEYBINDINGS-SCAN-DOFILE-ABORTWarm keybindings cache serves a stale Lua command after the user edits only the command a __lua bind runsKnown issueKI-MENU-KEYBINDINGS-STALE-LUA-CACHESuccessful hyprctl dispatch with a stderr warning is treated as a refusal and the exec command runs twiceKnown issueKI-MENU-KEYBINDINGS-STDERR-FAILS-DISPATCHomarchy-menu-select hangs forever when the summoned menu dies before writing done_fileKnown issueKI-MENU-SELECT-POLL-DEADLOCKomarchy-menu-select blocks forever inside the omarchy-shell summon call when the IPC never returnsKnown issueKI-MENU-SELECT-SUMMON-UNBOUNDEDNon-positive sleep-lock budget for logind windows <= 1s: suspend proceeds with no lock attemptKnown issueKI-SLEEP-LOCK-BUDGET-NONPOSITIVEFailed/empty readlink result stored as backgroundPath, wiping a good lock-screen wallpaperKnown issueKI-LOCK-EMPTY-READLINK-WIPES-WALLPAPERfingerprintPam.start() returning false disables fingerprint auth for the rest of the lock with no retryKnown issueKI-LOCK-FPRINT-START-FAIL-NO-RETRYAbnormal PAM error increments failedAttempts twice (onError and onCompleted both run handlePasswordFailure)Known issueKI-LOCK-PAM-ERROR-DOUBLE-COUNTomarchy-hyprland-session-locked has no deadline on hyprctl -j monitors; a stalled compositor IPC hangs the probeKnown issueKI-LOCK-PROBE-HYPRCTL-NO-TIMEOUTScreen add/remove while locked clears the blank intent and never re-arms the idle blank timerKnown issueKI-LOCK-SCREENS-CHANGE-BLANK-LOSTIn-place video wallpaper overwrite during a running poster job keeps the stale poster frameKnown issueKI-LOCK-STALE-POSTER-INPLACE-OVERWRITEActivating an app row while appLibrary is null closes the menu and skips the launchKnown issueKI-MENU-APP-ACTIVATE-NULL-LIBRARYApps submenu sorts with code-unit < on lowercased labels while search sorts with localeCompareKnown issueKI-MENU-APPS-SORT-LOCALEchildCount counts when-hidden children and duplicate itemOrder entries, so the submenu badge disagrees with what rendersKnown issueKI-MENU-CARET-COUNT-HIDDEN-CHILDRENContracted exit codes lost when the usage/diagnostic write fails: unknown verb exits 1, help exits 1Known issueKI-MENU-CLI-EXIT-CODE-WRITE-RACESFailed jq payload build still execs the menu IPC with an empty payload and exits 0Known issueKI-MENU-CLI-JQ-FAIL-LOOKS-SUCCESSA whitespace-only filter is not a search for rebuildDisplay but is truthy for the detail gatesKnown issueKI-MENU-DETAIL-WHITESPACE-QUERYNon-numeric dmenu width/maxHeight become NaN and collapse the card layoutKnown issueKI-MENU-DMENU-NAN-GEOMETRYFailed menu FileView reloads are asymmetric: user handler wipes last good items, default keeps stale setKnown issueKI-MENU-FILEVIEW-FAILURE-ASYMMETRYfoldedListHeight returns a height above the available cap; availableRowsHeight never clamps at zeroKnown issueKI-MENU-FOLD-HEIGHT-EXCEEDS-AVAILABLEgoBack refuses to retrace while activeMenu is root, stranding navStack after a drill that landed on rootKnown issueKI-MENU-GOBACK-ROOT-STRANDMenu guard batch runs as one bash child with no deadline; a blocking guard freezes guard answers for the sessionKnown issueKI-MENU-GUARD-BATCH-NO-DEADLINEGuard batches carry no generation token: a batch computed for the previous items publishes onto the new setKnown issueKI-MENU-GUARD-BATCH-STALE-APPLYGuard ids interpolated unquoted into the shared bash batch: metacharacter ids break the protocol or execute commandsKnown issueKI-MENU-GUARD-ID-INJECTION-BATCH-ABORTEscape in input mode clears the entered text instead of cancelling the requestKnown issueKI-MENU-INPUT-ESCAPE-CLEARS-FILTERisDescendantOf reports every non-root id as a descendant of root, including ids absent from the menuKnown issueKI-MENU-ISDESCENDANT-ROOT-ALWAYSMap reads walk Object.prototype: item(), results maps, providersLoaded treat constructor/toString as real entriesKnown issueKI-MENU-ITEM-PROTOTYPE-LEAKA flat menu containing an entry id 'items' is parsed as a wrapper and every sibling entry is silently discardedKnown issueKI-MENU-ITEMS-KEY-AMBIGUITYparseMenuJsonc walks a top-level JSON array and renders phantom rows keyed 0, 1, ... (omacom/omarchy#13492)Known issueKI-MENU-JSONC-ARRAY-ROOTA whole-line comment in a CR-only menu file swallows the rest of the fileKnown issueKI-MENU-JSONC-CR-LINE-ENDINGSstripJsonc removes only whole-line // comments; an inline comment tail empties the whole file (omacom/omarchy#13493)Known issueKI-MENU-JSONC-INLINE-COMMENTstripJsonc has no block-comment pass: a /* */ comment empties the whole fileKnown issueKI-MENU-JSONC-STRIP-GAPSKeybindings menu build has no deadline on hyprctl binds or xkbcli compile-keymap; a stalled callee blocks the menuKnown issueKI-MENU-KEYBINDINGS-NO-TIMEOUTRefused key-up after an accepted key-down leaves a synthetic key stuck down and skips the sendshortcut fallbackKnown issueKI-MENU-KEYBINDINGS-SENDKEY-UP-FAIL-STUCKopenRoute follows a link one hop and never re-inspects the target kind: link-to-action opens as a menuKnown issueKI-MENU-LINK-SINGLE-HOPnormalize-before-merge wipes unspecified defaults: a label-only user entry erases action/aliases/guardsKnown issueKI-MENU-MERGE-OVERRIDE-WIPES-DEFAULTSmergeMenuSources stores prototype-named ids but drops them from itemOrder - the row is written and never renderedKnown issueKI-MENU-MERGE-PROTOTYPE-IDSmergeAppRows/swapProviderRows keep stale .order values and mutate caller-owned rows in placeKnown issueKI-MENU-MERGE-STALE-ORDER-ALIASED-ROWSnormalizeItem edge cases: null parent kept, boolean guards preserved, action:0 mis-kinded, numeric labelsKnown issueKI-MENU-NORMALIZE-EDGE-CASESA new menu summon re-opens with the stale uninstall confirmation still upKnown issueKI-MENU-OPEN-LEAVES-CONFIRMopen() throws on a JSON null payload: parse succeeds, the catch does not run, the property read throwsKnown issueKI-MENU-OPEN-NULL-PAYLOADOpening a select menu walks its rows quadratically (omacom/omarchy#10601)Known issueKI-MENU-OPEN-QUADRATICpathFor coerces a null parent to the id 'null'/'0' row while parentPathFor returns emptyKnown issueKI-MENU-PATH-HELPERS-COERCIONpendingInitialMenu is stored and never read: a route summoned before the JSONC loads opens root and stays thereKnown issueKI-MENU-PENDING-INITIAL-MENU-DEADFailed/killed providers commit their partial stdout and stay marked loaded; apps provider loads with no AppLibraryKnown issueKI-MENU-PROVIDER-PARTIAL-COMMITProvider rows colliding with a static id are silently dropped: takenIds only records batch-minted idsKnown issueKI-MENU-PROVIDER-SLUG-COLLISION-DROPPEDdmenu request lifecycle drops waiters on re-summon, on a busy resultProc, and for doneFile-only requestsKnown issueKI-MENU-REQUEST-LIFECYCLEresolveRoute folds the input before the exact-id lookup and returns the normalized string as fallthroughKnown issueKI-MENU-RESOLVE-ROUTE-FOLDINGrevealCursor loses the directional peek: an uninstantiated delegate skips it and the underhang write undoes itKnown issueKI-MENU-REVEAL-CURSOR-PEEKsearchScore throws on a label-less merged row and returns a NaN rank that displayRow coerces to the best tierKnown issueKI-MENU-SEARCH-SCORE-CRASH-NANsearchScore ranking anomalies: apps promoted in-tier, root exact-labels swamped, multi-term matches collapseKnown issueKI-MENU-SEARCH-SCORE-RANKINGSearch text misses: whole-word description matching drops punctuation-glued words and hyphenated alias formsKnown issueKI-MENU-SEARCH-TEXT-NORMALIZATION-MISSESGeometry flags silently coerce non-numeric and flag-like values: --width abc summons width 0Known issueKI-MENU-SELECT-GEOMETRY-INT-COERCIONFailed second mktemp leaks the selection handshake temp file: cleanup trap installed only after both files existKnown issueKI-MENU-SELECT-HANDSHAKE-TMP-LEAKPayload fontFamily is sticky: a later open that omits it keeps the previous caller's fontKnown issueKI-MENU-STICKY-FONTFAMILYsummonAction rewrites an explicitly empty quoted payload to {} - the in-process summon diverges from the bash bytesKnown issueKI-MENU-SUMMON-ACTION-EMPTY-PAYLOADargv budget with a leading zero (08/09) bypasses the validation guard via an octal arithmetic errorKnown issueKI-SLEEP-LOCK-BUDGET-ARG-OCTALHeader invariant 'every call bounded by the budget remainder' unenforced on three external callsKnown issueKI-SLEEP-LOCK-DEADLINE-INVARIANT-GAPS
Comparing findings for Omarchy. Requirement coverage is intentionally not shown here — see Requirements for coverage.