Proof Portal
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.
menu
66 requirements allocated to this component across categories functional, interface.
Contracts
Interface contracts this component is a producer or consumer of.
No interface contracts
This component neither produces nor consumes a declared interface contract.
Responsibilities
the requirements this component owns, by intent — filter for coverage gapsFindings 57 open · 0 resolved
Open (57)
known issues, coverage gaps and checks that still need attention- Mediumomarchy-system-lock exits 0 when lock engagement fails, leaving the dismissed Lock row silentReviewedKI-260930-2FBE
- Mediumvipsthumbnail still-image lane has no timeout; a stalled conversion wedges its fan-out lane indefinitelyReviewedKI-MENU-IMAGES-VIPS-NO-TIMEOUT
- MediumstripJsonc comma regex rewrites strings that carry a comma before } or ] (omacom/omarchy#13250)OpenKI-MENU-JSONC-COMMA-IN-STRING
- MediumUnicode or control whitespace between JSONC tokens empties the whole menu fileOpenKI-MENU-JSONC-UNICODE-WHITESPACE
- Mediumparse_keycodes rewrites code:N/mouse:N tokens anywhere in a record, corrupting descriptions and commandsOpenKI-MENU-KEYBINDINGS-CODE-REWRITE-OVERREACH
- MediumComma in a binding description shifts every later CSV field: truncated label, wrong dispatcher, failed dispatchOpenKI-MENU-KEYBINDINGS-CSV-DESC-COMMA
- MediumLua function binds (Select all, Universal copy/paste/cut, Zoom in, Reset zoom) render in the menu but dispatch nothingOpenKI-MENU-KEYBINDINGS-FUNC-BIND-NO-DISPATCH
- MediumLua bind scan aborts on the first throwing require; every later Lua bind silently vanishes from the menu cacheOpenKI-MENU-KEYBINDINGS-SCAN-DOFILE-ABORT
- MediumWarm keybindings cache serves a stale Lua command after the user edits only the command a __lua bind runsOpenKI-MENU-KEYBINDINGS-STALE-LUA-CACHE
- MediumSuccessful hyprctl dispatch with a stderr warning is treated as a refusal and the exec command runs twiceOpenKI-MENU-KEYBINDINGS-STDERR-FAILS-DISPATCH
- Mediumomarchy-menu-select hangs forever when the summoned menu dies before writing done_fileReviewedKI-MENU-SELECT-POLL-DEADLOCK
- Mediumomarchy-menu-select blocks forever inside the omarchy-shell summon call when the IPC never returnsOpenKI-MENU-SELECT-SUMMON-UNBOUNDED
- LowActivating an app row while appLibrary is null closes the menu and skips the launchOpenKI-MENU-APP-ACTIVATE-NULL-LIBRARY
- LowApps submenu sorts with code-unit < on lowercased labels while search sorts with localeCompareOpenKI-MENU-APPS-SORT-LOCALE
- LowchildCount counts when-hidden children and duplicate itemOrder entries, so the submenu badge disagrees with what rendersOpenKI-MENU-CARET-COUNT-HIDDEN-CHILDREN
- LowContracted exit codes lost when the usage/diagnostic write fails: unknown verb exits 1, help exits 1OpenKI-MENU-CLI-EXIT-CODE-WRITE-RACES
- LowFailed jq payload build still execs the menu IPC with an empty payload and exits 0OpenKI-MENU-CLI-JQ-FAIL-LOOKS-SUCCESS
- LowA whitespace-only filter is not a search for rebuildDisplay but is truthy for the detail gatesOpenKI-MENU-DETAIL-WHITESPACE-QUERY
- LowNon-numeric dmenu width/maxHeight become NaN and collapse the card layoutOpenKI-MENU-DMENU-NAN-GEOMETRY
- LowFailed menu FileView reloads are asymmetric: user handler wipes last good items, default keeps stale setOpenKI-MENU-FILEVIEW-FAILURE-ASYMMETRY
- LowfoldedListHeight returns a height above the available cap; availableRowsHeight never clamps at zeroOpenKI-MENU-FOLD-HEIGHT-EXCEEDS-AVAILABLE
- LowgoBack refuses to retrace while activeMenu is root, stranding navStack after a drill that landed on rootOpenKI-MENU-GOBACK-ROOT-STRAND
- LowMenu guard batch runs as one bash child with no deadline; a blocking guard freezes guard answers for the sessionReviewedKI-MENU-GUARD-BATCH-NO-DEADLINE
- LowGuard batches carry no generation token: a batch computed for the previous items publishes onto the new setOpenKI-MENU-GUARD-BATCH-STALE-APPLY
- LowGuard ids interpolated unquoted into the shared bash batch: metacharacter ids break the protocol or execute commandsOpenKI-MENU-GUARD-ID-INJECTION-BATCH-ABORT
- LowEscape in input mode clears the entered text instead of cancelling the requestOpenKI-MENU-INPUT-ESCAPE-CLEARS-FILTER
- LowisDescendantOf reports every non-root id as a descendant of root, including ids absent from the menuOpenKI-MENU-ISDESCENDANT-ROOT-ALWAYS
- LowMap reads walk Object.prototype: item(), results maps, providersLoaded treat constructor/toString as real entriesOpenKI-MENU-ITEM-PROTOTYPE-LEAK
- LowA flat menu containing an entry id 'items' is parsed as a wrapper and every sibling entry is silently discardedOpenKI-MENU-ITEMS-KEY-AMBIGUITY
- LowparseMenuJsonc reads a top-level JSON array as entries with ids 0, 1, … (omacom/omarchy#13492)OpenKI-MENU-JSONC-ARRAY-ROOT
- LowA whole-line comment in a CR-only menu file swallows the rest of the fileOpenKI-MENU-JSONC-CR-LINE-ENDINGS
- LowstripJsonc removes only whole-line // comments; an inline comment tail empties the whole file (omacom/omarchy#13493)OpenKI-MENU-JSONC-INLINE-COMMENT
- LowstripJsonc has no block-comment pass: a /* */ comment empties the whole fileOpenKI-MENU-JSONC-STRIP-GAPS
- LowKeybindings menu build has no deadline on hyprctl binds or xkbcli compile-keymap; a stalled callee blocks the menuReviewedKI-MENU-KEYBINDINGS-NO-TIMEOUT
- LowRefused key-up after an accepted key-down leaves a synthetic key stuck down and skips the sendshortcut fallbackOpenKI-MENU-KEYBINDINGS-SENDKEY-UP-FAIL-STUCK
- LowopenRoute follows a link one hop and never re-inspects the target kind: link-to-action opens as a menuOpenKI-MENU-LINK-SINGLE-HOP
- Lownormalize-before-merge wipes unspecified defaults: a label-only user entry erases action/aliases/guardsOpenKI-MENU-MERGE-OVERRIDE-WIPES-DEFAULTS
- LowmergeMenuSources stores prototype-named ids but drops them from itemOrder - the row is written and never renderedOpenKI-MENU-MERGE-PROTOTYPE-IDS
- LowmergeAppRows/swapProviderRows keep stale .order values and mutate caller-owned rows in placeOpenKI-MENU-MERGE-STALE-ORDER-ALIASED-ROWS
- LownormalizeItem edge cases: null parent kept, boolean guards preserved, action:0 mis-kinded, numeric labelsOpenKI-MENU-NORMALIZE-EDGE-CASES
- LowA menu summon leaves a pending uninstall question on top of the new promptOpenKI-MENU-OPEN-LEAVES-CONFIRM
- Lowopen() throws on a JSON null payload: parse succeeds, the catch does not run, the property read throwsOpenKI-MENU-OPEN-NULL-PAYLOAD
- LowOpening a select menu walks its rows quadratically (omacom/omarchy#10601)OpenKI-MENU-OPEN-QUADRATIC
- LowpathFor coerces a null parent to the id 'null'/'0' row while parentPathFor returns emptyOpenKI-MENU-PATH-HELPERS-COERCION
- LowpendingInitialMenu is stored and never read: a route summoned before the JSONC loads opens root and stays thereOpenKI-MENU-PENDING-INITIAL-MENU-DEAD
- LowFailed/killed providers commit their partial stdout and stay marked loaded; apps provider loads with no AppLibraryOpenKI-MENU-PROVIDER-PARTIAL-COMMIT
- LowProvider rows colliding with a static id are silently dropped: takenIds only records batch-minted idsOpenKI-MENU-PROVIDER-SLUG-COLLISION-DROPPED
- Lowdmenu request lifecycle drops waiters on re-summon, on a busy resultProc, and for doneFile-only requestsOpenKI-MENU-REQUEST-LIFECYCLE
- LowresolveRoute folds the input before the exact-id lookup and returns the normalized string as fallthroughOpenKI-MENU-RESOLVE-ROUTE-FOLDING
- LowrevealCursor loses the directional peek: an uninstantiated delegate skips it and the underhang write undoes itOpenKI-MENU-REVEAL-CURSOR-PEEK
- LowsearchScore throws on a label-less merged row and returns a NaN rank that displayRow coerces to the best tierOpenKI-MENU-SEARCH-SCORE-CRASH-NAN
- LowsearchScore ranking anomalies: apps promoted in-tier, root exact-labels swamped, multi-term matches collapseOpenKI-MENU-SEARCH-SCORE-RANKING
- LowSearch text misses: whole-word description matching drops punctuation-glued words and hyphenated alias formsOpenKI-MENU-SEARCH-TEXT-NORMALIZATION-MISSES
- LowGeometry flags silently coerce non-numeric and flag-like values: --width abc summons width 0OpenKI-MENU-SELECT-GEOMETRY-INT-COERCION
- LowFailed second mktemp leaks the selection handshake temp file: cleanup trap installed only after both files existOpenKI-MENU-SELECT-HANDSHAKE-TMP-LEAK
- LowPayload fontFamily is sticky: a later open that omits it keeps the previous caller's fontOpenKI-MENU-STICKY-FONTFAMILY
- LowsummonAction rewrites an explicitly empty quoted payload to {} - the in-process summon diverges from the bash bytesOpenKI-MENU-SUMMON-ACTION-EMPTY-PAYLOAD
Attached code & tests
traced files across this component’s requirements, deduplicated by path- BarWidget.qmlshell/plugins/menu/BarWidget.qml
- Menu.qmlshell/plugins/menu/Menu.qml
- MenuModel.jsshell/plugins/menu/MenuModel.js
- omarchy-menubin/omarchy-menu
- omarchy-menu-filebin/omarchy-menu-file
- omarchy-menu-imagesbin/omarchy-menu-images
- omarchy-menu-inputbin/omarchy-menu-input
- omarchy-menu-keybindingsbin/omarchy-menu-keybindings
- omarchy-menu-pluginbin/omarchy-menu-plugin
- omarchy-menu-selectbin/omarchy-menu-select
- omarchy-menu-sharebin/omarchy-menu-share
- omarchy-menu-timezonebin/omarchy-menu-timezone
- keybindings-menu-test.shtest/shell.d/keybindings-menu-test.sh
- menu-acceptance-test.shtest/shell.d/menu-acceptance-test.sh
- menu-compositor-test.shtest/shell.d/menu-compositor-test.sh
- menu-dispatcher-test.shtest/shell.d/menu-dispatcher-test.sh
- menu-dmenu-test.shtest/shell.d/menu-dmenu-test.sh
- menu-file-test.shtest/shell.d/menu-file-test.sh
- menu-guards-test.shtest/shell.d/menu-guards-test.sh
- menu-images-test.shtest/shell.d/menu-images-test.sh
- menu-plugin-test.shtest/shell.d/menu-plugin-test.sh
- menu-pointer-lifecycle-test.shtest/shell.d/menu-pointer-lifecycle-test.sh
- menu-share-test.shtest/shell.d/menu-share-test.sh
- menu-test.shtest/shell.d/menu-test.sh
- menu-timezone-test.shtest/shell.d/menu-timezone-test.sh
- menumodel-replay.test.mjstest/node/menumodel-replay.test.mjs
- report-reproducers.test.mjstest/node/report-reproducers.test.mjs
How this component connects
Open in graphDiscussions
Discuss this with the proof team. Nothing changes in your audit automatically — you open a request and a staff member records any outcome inside the thread.