docs(hardware): sudo path of parallel fingerprint passes; drop a check that cannot fail
All checks were successful
Check / eval (push) Successful in 3m4s

Bernardo, AMD dev box, gen 422, fingerprint.pam = true (parallel default):
one prompt, typed password works, sensor works, wrong-finger x3 falls back to
password. Three of the item's counts confirmed on the real reader.

The fourth — "password keeps working with fprintd stopped" — is removed as a
trap rather than checked off. fprintd is D-Bus activated, so `systemctl stop`
does not keep it down: PAM asks D-Bus, D-Bus restarts it. Bernardo ran it and
reported that *the fingerprint still worked*, which is precisely the evidence
that the daemon came back and the dead-reader path was never exercised. A
check that passes whether or not the property holds is worse than no check.

The property itself needs no hardware: password is `auth sufficient` at order
11700, independent of the fprintd rule at 11400, so no fprintd failure can
gate it — visible by eval on the rendered pam.d text, and asserted in the VM
with no reader by checks.hardware-toggles. Doing it for real would need
`systemctl mask`, and masking a working machine's auth daemon to re-prove an
evaluated invariant is not a trade worth making.

Still open on this item: hyprlock, the greeter (needs the reboot), and
`fingerprint.parallel = false` restoring sequential behavior.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 12:48:16 +01:00
parent e4404e0162
commit 625b7e38a3

View File

@@ -158,18 +158,27 @@ the **T14s** (webcam case).
`systemd-inhibit --list`, `hyprctl monitors all -j`, `hyprctl workspaces `systemd-inhibit --list`, `hyprctl monitors all -j`, `hyprctl workspaces
-j`, and `pactl --format=json list sinks` before changing state again. -j`, and `pactl --format=json list sinks` before changing state again.
- [ ] **Parallel fingerprint-or-password on the real reader** (AMD dev - [ ] **Parallel fingerprint-or-password on the real reader** (AMD dev
box, 2026-07-12) — with a finger enrolled and box, 2026-07-12) — **sudo path PASSED 2026-07-14** (Bernardo, dev box,
`fingerprint.pam = true` (parallel is the default): `sudo -k true` gen 422, `fingerprint.pam = true`, parallel default): `sudo -k true`
must show ONE prompt ("Enter Password or Place finger…"); typing showed ONE prompt, the typed password worked, touching the sensor
the password immediately works, touching the sensor instead works, instead worked, and wrong-finger ×3 fell back to password.
wrong-finger ×3 falls back to password, and password keeps working **Still open:** hyprlock and the greeter must accept both factors and
with fprintd stopped (`systemctl stop fprintd`). Also check not wedge on a leftover prompt after a fingerprint win (known cosmetic
hyprlock and the greeter accept both factors and don't wedge on a quirk of the hack — pthread_cancel'd prompt); `fingerprint.parallel =
leftover prompt after a fingerprint win (known cosmetic quirk of false` must restore the old sequential behavior.
the hack — pthread_cancel'd prompt). `fingerprint.parallel = false` **Do NOT "check password still works with `systemctl stop fprintd`"**
must restore the old sequential behavior. VM already asserts the that check was in this item and it is a trap that cannot fail. fprintd
PAM stack shape + password-only lockout safety with no reader is D-Bus activated, so PAM asks D-Bus and D-Bus starts it straight back
(checks.hardware-toggles). up: Bernardo ran it and *the fingerprint still authenticated*, which is
the tell that the daemon never stayed down. It proves nothing about a
dead reader. The property it was reaching for is structural anyway —
password is `auth sufficient` at order 11700, independent of the fprintd
rule at 11400, so no fprintd failure can gate it (verify by eval:
`nix eval --raw <flake>#nixosConfigurations.<host>.config.security.pam
.services.sudo.text`), and checks.hardware-toggles asserts that shape in
the VM with no reader at all. If someone genuinely wants it on hardware
it needs `systemctl mask` + stop, and masking a working machine's
authentication daemon to re-prove an evaluated invariant is a bad trade.
- [ ] **#55 fingerprint enroll on real reader** — with - [ ] **#55 fingerprint enroll on real reader** — with
`nomarchy.hardware.fingerprint.enable` and a physical reader: System `nomarchy.hardware.fingerprint.enable` and a physical reader: System
Fingerprint Enroll a finger; List shows it; Verify succeeds; optional Fingerprint Enroll a finger; List shows it; Verify succeeds; optional