Proof Portal
Omarchy
ProbeLabs74 findings · 94 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.
The lock view's password field shall consume an auto-repeated key press without editing the text, except for Backspace and Delete.
Specification
The requirement exactly as authored — its complete prose text and, where present, the formal FRETish sentence it compiles to.
The lock view's password field shall consume an auto-repeated key press without editing the text, except for Backspace and Delete. A key held while a blanked display wakes then cannot fill the field with one character.
the lock_view shall always satisfy key_press_dropped <=> (key_autorepeat & !key_erases)
Rationale & tags
Why this requirement exists, and how it is categorised.
Rationale & tags
Why this requirement exists, and how it is categorised.
Waking a DPMS-blanked display can stall the compositor for seconds while the monitor modesets. The release of the wake key then arrives late, and client-side key repeat floods the password field. Upstream #7806 (merged 00cee6d3) drops auto-repeated presses in the field. Holding Backspace or Delete to clear the field stays useful.
Verification & provenance
How this requirement was checked: the review trail, edit history, and the machine-analysis status terms (each ⓘ explains what it means).
Review
- Status
- in_review
- Reviewer
- Claude Code · AI agent
- Reviewed
- Oct 4, 2026, 19:06 UTC
History
- Created
- Oct 4, 2026, 19:00 UTC · Claude Code · AI agent
- Modified
- Oct 4, 2026, 19:16 UTC · Claude Code · AI agent
Hazard review
- scenarioreviewedboundaryedge_case
Worst case: a held wake key fills the field and the next Enter submits a wrong password, counting a failed attempt. boundary: Backspace and Delete repeats still edit; every other repeat is consumed. edge_case: the first, non-repeated press of any key still reaches the field and wakes the display. error_handling not applicable: no failure path. input_domain not applicable: key codes from the compositor, not data. concurrency_scale not applicable: one key event at a time.
- propertynot applicable
A pure predicate over one key event.
- structuralnot applicable
Two key-code compares on one event: no buffer, numeric, encoding or format-string surface.
- domainnot applicable
Input handling of the lock view only.
Change history
Every recorded revision of this requirement's source file — newest first, each with its commit message and the diff for that change.
Review history
Human and AI-agent approvals of this requirement — the 'why was this approved' lineage, each with the reviewer's justification and the code it cites.
- Claude Code · AI agentApprovedSpec conformanceOct 4, 2026 · 14 hours agoREVIEW-261004-F4WB
Read shell/plugins/lock/LockView.qml at upstream 035ce29f. The password TextInput Keys.onPressed handler wakes the lock, then accepts the event and returns when event.isAutoRepeat && dropsAutoRepeat(event.key); dropsAutoRepeat is key !== Qt.Key_Backspace && key !== Qt.Key_Delete. Accepting in Keys.onPressed stops the TextInput from seeing the press, so an auto-repeat of any key other than Backspace/Delete is consumed without editing, and every other press reaches the field (Escape and Ctrl+U are accepted too, but they clear the field, an edit). key_press_dropped therefore equals key_autorepeat && !key_erases; the three violation rows need the guard changed and are dispositioned defensive. Witnesses in test/qml/lock/shell.qml drive real key events into the locked surface through a wtype virtual keyboard on the private sway: a tapped x types one character; x held for 1.5 s delivers at least three auto-repeat presses (counted through the wake each press triggers) and the field still holds one x; holding Backspace and Delete keeps erasing.
Cited code (4)
Obligations
What this requirement must witness to be considered satisfied — the required evidence, and the tests that discharge each one.
The tests that discharge each obligation need a synced audit
The evidence matrix behind each obligation comes from the audit index, which is produced by running an audit — not read from git. Nothing here means unknown — not that the requirement has no obligations.
Formula evidence
The formal formula behind this requirement, the variables it is written over, and the tests that exercise it (each term is explained inline).
Formula evidence
The formal formula behind this requirement, the variables it is written over, and the tests that exercise it (each term is explained inline).
FRETish formula
the lock_view shall always satisfy key_press_dropped <=> (key_autorepeat & !key_erases)
Witnesses· 2 scenarios total
- stepWaitexercises 2 condition scenarios
MC/DC truth table· 5 rows
Each row assigns the formula's conditions (T/F) and shows the Result— the formula's value for that input row, not a test pass/fail. A row proves a condition when flipping only that condition flips the outcome. The test that covers each row is linked.
mcdc:ignoreNo-actionfalse-result row satisfied by designUncoveredneeds a covering test| # | key_autorepeat | key_erases | key_press_dropped | Result | Proves | Covering test |
|---|---|---|---|---|---|---|
| 1 | F | F | F | T | key_autorepeat | |
| 2 | F | F | T | F | key_press_dropped | Exempted · defensive — Keys.onPressed consumes a key without editing only when event.isAutoRepeat && dropsAutoRepeat(key); the only other accepting arm (Escape, Ctrl+U) clears the field, which is an edit (reviewed: REVIEW-261004-F4WB) |
| 3 | T | F | F | F | key_autorepeat | Exempted · defensive — dropsAutoRepeat is true for every key other than Backspace and Delete, and the handler then accepts the event and returns before the TextInput sees it (reviewed: REVIEW-261004-F4WB) |
| 4 | T | F | T | T | key_erases | |
| 5 | T | T | T | F | key_erases | Exempted · defensive — dropsAutoRepeat is false for Backspace and Delete, so the handler falls through and the TextInput erases (reviewed: REVIEW-261004-F4WB) |
Its place
How this requirement connects — what proves it, what it affects, and what it rests on. Authored links only here; automatically derived links come from the audit index.
Loading graph…
Trace evidence
The concrete artifacts linked to this requirement — implementing code, verifying tests, documents, and the findings raised against it.
Impact
Blast radius — authored trace links only (automatically derived links come from the audit index and aren't shown here).
Impact
Blast radius — authored trace links only (automatically derived links come from the audit index and aren't shown here).
If you change this
Files to re-check (1)
- LockView.qmlshell/plugins/lock/LockView.qml
Tests to re-run (1)
- shell.qmltest/qml/lock/shell.qml
What this rests on
Discussions
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.