New features
- Support SoftISP cameras (IPU6/MIPI) via packed RGB and the simple pipeline (#185)
- PAM: scanner-active prompt and covered-camera message (#184)
Security & reliability
- PAM helper: fixed deadline below the PAM timeout, killed through a pidfd; fail closed on argument/auth errors
- Helper reads config, models, enrolled faces and writes logs as the user, not root
- Config: never use half-parsed configs; clamp retry/delay/timeout and threshold values
- Fingerprint: bounded fprintd calls, pinned VerifyStatus sender, no C++ exceptions across FFI
- Face/camera: bounds-checked image and MJPEG sizes, safer libcamera request handling, fail closed on invalid anti-spoof output
- App: strict CSP, denied webview permissions, HTTPS-only and hash-pinned model downloads, private data directory
Improvements
- Camera prefers MJPEG, caps RGB size, brightest-of-N IR frames (#183)
- MiniFASv2 gets the context crop it was trained on (#186); AI anti-spoofing off by default (#182)
- Colour camera and anti-spoofing model opened once per auth session
- Bundled libcamera no longer links libcrypto/gnutls (#181)
Packaging
- Bundled libraries found through RUNPATH instead of ld.so.conf.d
- PAM profile refreshed on deb upgrade (#228) and removed from common-auth on uninstall
- Dropped curl from deb depends
Internal
- Config types and Tauri bindings generated from Rust (#227)
- Large refactors of face auth, app settings and hooks; new C++, Rust and TS unit tests (#229)
Full Changelog: 1.4.2...1.5.0-rc1