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.
Lock screen: after a wrong password, the failure message replaces the field with no visible prompt — screen looks unusable, input actually works
Reported by folknology · filed Oct 3, 2026 · open at source
At a glance
- 1 · What is claimed?
- ConfirmedReproducible: after a failed attempt the empty field shows only the failure message (no placeholder, no cursor) while it still accepts typing
- Not confirmedAffects the lock component
- 3 · Is it reproducible?
- An engine-executed run exited 1 and showed the defect signal. See reproducer
- 4 · What remains unclear?
- Open question for maintainers: Open decision: what should the password field show after a failed attempt? Options: (A) keep the current behaviour (the failure message replaces the prompt until the first keystroke); (B) show the failure message and the prompt together (the report's suggestion); (C) show the message for a time chosen by the maintainers, then the prompt again (open PR #14170); (D) show the message outside the field.
- Open question for maintainers: The decision is the Omarchy maintainers'; a draft requirement listing these options sits on this report's branch (report/cmus3invr006gcdw4hm3h94a5), and approving one option = merging that draft into the baseline with the chosen text.
- Affects the lock component — no requirement of the lock component is confirmed as violated
- 5 · What happens next?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. So far: not a duplicate of another report — decided by agents · verified; in the audited area (lock) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.
Open question — draft spec awaiting a decision
What shall the password field show after a failed attempt?
(upstream quattro 035ce29f) handlePasswordFailure sets failureMessage 'Authentication failed (N)' (Service.qml:346-355); with an empty field the overlay text shows that message instead of the 'Enter Password' placeholder (LockView.qml:225), the text cursor is hidden (LockView.qml:42, :188) and the border uses the error colour (LockView.qml:43); the field still accepts typing and the first character clears the message (LockView.qml:195-201).
- AKeep the current behaviour
- BThe lock view shall show the failure message and the password prompt together
- CThe lock view shall show the failure message for a time chosen by the maintainers, then the prompt again
- DThe failure message shall appear outside the field
Approving this draft means choosing one option; its text then replaces this description.
Why this is an open question
Raised by omacom/omarchy#14125 (proof inbox R-2205). The validation (report/cmus3invr006gcdw4hm3h94a5, rval-1d0d301a89cd1f41155b5ae3843fac19) reproduced the display with the real LockView.qml. No requirement governs the failure display. Open upstream PR #14170 implements option C; a commenter on the issue prefers keeping the message in the field.
Proposed on this report's branch @ e6db639e7f · specs/software/requirements/SW-REQ-261005-XJN0.req.yaml · not part of the audited spec until approved and merged
Written after the validation was sealed at 4e5857ec6f: the seal covers the reproducer and the observed behaviour, not this proposed text.
Original report
What happened
After a single wrong password on the lock screen, the input field is replaced by a red "Authentication failed (1)" message with no visible text field, no placeholder, no cursor, and no prompt to type. The screen looks locked out / broken. In fact the input is still active and focused — the field with password dots only reappears once the user starts typing.
I hit this today and initially concluded I could not log in at all ("the text box is red and says authentication failure (1) so I cannot type anything in to login"). Clicking on the box changed nothing. Only when I started typing anyway did the dot field reveal itself and the password worked on the next attempt.
This is likely a contributor to reports of "locked out, had to reboot" (e.g. the random-failure discussion #1469): a user who gets one rejection and then sees a dead-looking red screen may not realize they can just keep typing.
Expected behaviour
After a failed attempt, the lock screen should remain obviously usable: keep the visible input field (or placeholder text such as "Password") alongside the failure message, so it's clear typing is still accepted.
Steps to reproduce
- Lock the screen (
omarchy system lock, or wait for the idle lock). - Type a wrong password and submit.
- Observe: field disappears, only the red "Authentication failed (1)" message shows, with no affordance indicating input still works.
- Type anything — the dot field reappears, confirming input was active the whole time.
Root cause (from reading the packaged source)
In shell/plugins/lock/LockView.qml (~line 186), the placeholder Text overlays the TextInput and is visible whenever passwordInput.text.length === 0:
text: root.authenticatingPassword ? "Checking…" : (root.failureMessage.length > 0 ? root.failureMessage : root.placeholderText)When failureMessage is set, the placeholder renders the error instead of the normal placeholder, so with an empty field the UI shows only the red error and no "type your password" affordance. Note onTextChanged does clear the failure message on the first keystroke (if (text.length > 0 && root.failureMessage.length > 0) root.clearFailureRequested()), which is why the field "reappears" on typing — but nothing tells the user that.
Environment
- Omarchy: 4.0.4-1, quickshell 0.3.1-1
- Kernel 7.2.5-3-omarchy, Intel Arc B390 (xe driver), x86_64
- No fingerprint enrolled (password-only lock); PAM stack stock (
/etc/pam.d/omarchy-lock-passwordmatchesomarchy-apply-lockoutput) - faillock tally was 1/10 — not a faillock lockout; the same password authenticated successfully on the next attempt
Suggested fix
Show the failure message above/below the field rather than in place of the placeholder, or render both (error text + "Password" placeholder) so the field visibly invites input after a failure.
View raw text
## What happened
After a single wrong password on the lock screen, the input field is replaced by a red **"Authentication failed (1)"** message with no visible text field, no placeholder, no cursor, and no prompt to type. The screen looks locked out / broken. In fact the input is still active and focused — the field with password dots only reappears once the user starts typing.
I hit this today and initially concluded I could not log in at all ("the text box is red and says authentication failure (1) so I cannot type anything in to login"). Clicking on the box changed nothing. Only when I started typing anyway did the dot field reveal itself and the password worked on the next attempt.
This is likely a contributor to reports of "locked out, had to reboot" (e.g. the random-failure discussion #1469): a user who gets one rejection and then sees a dead-looking red screen may not realize they can just keep typing.
## Expected behaviour
After a failed attempt, the lock screen should remain obviously usable: keep the visible input field (or placeholder text such as "Password") alongside the failure message, so it's clear typing is still accepted.
## Steps to reproduce
1. Lock the screen (`omarchy system lock`, or wait for the idle lock).
2. Type a wrong password and submit.
3. Observe: field disappears, only the red "Authentication failed (1)" message shows, with no affordance indicating input still works.
4. Type anything — the dot field reappears, confirming input was active the whole time.
## Root cause (from reading the packaged source)
In `shell/plugins/lock/LockView.qml` (~line 186), the placeholder `Text` overlays the `TextInput` and is visible whenever `passwordInput.text.length === 0`:
```qml
text: root.authenticatingPassword ? "Checking…" : (root.failureMessage.length > 0 ? root.failureMessage : root.placeholderText)
```
When `failureMessage` is set, the placeholder renders the error *instead of* the normal placeholder, so with an empty field the UI shows only the red error and no "type your password" affordance. Note `onTextChanged` does clear the failure message on the first keystroke (`if (text.length > 0 && root.failureMessage.length > 0) root.clearFailureRequested()`), which is why the field "reappears" on typing — but nothing tells the user that.
## Environment
- Omarchy: 4.0.4-1, quickshell 0.3.1-1
- Kernel 7.2.5-3-omarchy, Intel Arc B390 (xe driver), x86_64
- No fingerprint enrolled (password-only lock); PAM stack stock (`/etc/pam.d/omarchy-lock-password` matches `omarchy-apply-lock` output)
- faillock tally was 1/10 — not a faillock lockout; the same password authenticated successfully on the next attempt
## Suggested fix
Show the failure message above/below the field rather than *in place of* the placeholder, or render both (error text + "Password" placeholder) so the field visibly invites input after a failure.Validation
AI validator claude-code (claude-opus-5.5) · evaluated revision 1 at product commit 1e43373287af · sealed 2026-10-05T14:30:14Z
Validation of omacom/omarchy#14125 on quattro-proof 1e433732 (upstream quattro 035ce29f product code plus the proof layer). The reported display reproduces with the real LockView.qml given the state Service.qml sets after handlePasswordFailure() (failureMessage 'Authentication failed (1)', Service.qml:346-355 upstream): with an empty field the only visible text is the red failure message, which replaces the 'Enter Password' placeholder (LockView.qml:225); the text cursor is hidden (showPasswordCursor, LockView.qml:42; cursorVisible, LockView.qml:188) and the border uses the error colour (LockView.qml:43). The field still accepts input (enabled, not read-only), and the first typed character clears the message (LockView.qml:195-201). No requirement governs what the field shows after a failed attempt, so the expected display is an open specification question for the maintainers. Open upstream PR #14170 proposes clearing the message with a timer; a commenter on the issue prefers keeping the message in the field.
- ConfirmedReproducible
Reproducible: after a failed attempt the empty field shows only the failure message (no placeholder, no cursor) while it still accepts typing
Engine: engine-executed run exited 1 and showed the defect signal
Evidence: file test/reports/report-cmus3invr006gcdw4hm3h94a5.sh
Validator's rationale (commentary): Observed with the real LockView.qml: visible text ['Authentication failed (1)'], placeholder not shown, cursorVisible false, input enabled. No requirement covers the failure display; the expected form is the open question below.
Affects the lock component
Engine: no requirement of the lock component is confirmed as violated
Engine reference checks at 4e5857ec6fb6 (9/9 ok)
- okcommit4e5857ec6fb655aee09181947339b211950be86b
- okbase commit1e43373287afbd6dca4674ad463d5b5db7812358
- okbase ancestry1e43373287afbd6dca4674ad463d5b5db7812358
- okproduct code untouchedthis report's reproducer branch
- okbranchthis report's reproducer branch
- okfiletest/reports/report-cmus3invr006gcdw4hm3h94a5.qml
- okfiletest/reports/report-cmus3invr006gcdw4hm3h94a5.sh
- okcomponentlock
- okknown issuewithheld
The engine's own check, at validation time, that the commits, the reproducer branch (touching only reproducer files), the reproducer files and every mapped requirement / component / known issue really exist.
Validator-authored hypothesis. Each claim's verification is engine-computed: confirmed only from an engine-executed reproducer run recorded in this record, refuted when recorded evidence contradicts it. Prose is commentary. The disposition of the report is a human decision.
Reproducer
bash test/reports/report-cmus3invr006gcdw4hm3h94a5.sh
Setup failure: exit 2 means the reproducer could not set up (e.g. the product did not build) — such a run decides nothing.
Defect signal: output contains AS-REPORTED:
AS-REPORTED: after a failed attempt the empty field shows only the failure message (no placeholder, no cursor) while the field still accepts typing
Observed on this tree (quickshell 0.3.1, lock plugin shell/plugins/lock): - before a failure, the field shows ["Enter Password"] (placeholderText "Enter Password") - after one failed attempt (empty field), the visible text is ["Authentication failed (1)"] - the placeholder "Enter Password" is not shown - the field border uses the error colour: errorState=true; text cursor shown: false (showPasswordCursor=false) - the field still takes input: enabled=true, readOnly=false - the first typed character clears the failure message (clearFailureRequested); visible text then [] AS-REPORTED: after a failed attempt the empty field shows only the failure message (no placeholder, no cursor) while the field still accepts typing
Needs: linux · quickshell (0.3.x) and jq on PATH; a sway binary for a private headless compositor (PROOF_ENV_DIR/sysroot/usr/bin/sway, else sway on PATH); the script exits 2 with SETUP: otherwise. Nothing to build: the QML is loaded straight from the worktree · ran on linux/amd64
Linked
- Related PRpr/13183· confirmed
- Fixed bypr/14170· confirmed
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.
- Decided by agents · verified: not a duplicate of another report
- Decided by agents · verified: in the audited area (lock)
- Decided by agents · verified: matches no known issue
The outcome (valid, duplicate, not a bug, …) is not decided yet.