v3.1.2 — Bugfix \u0026 Polish Release
HMAC
- Unified HMAC key location: stored in ~/.config/niruvi/.hmac_key (same across AppImage/installed/source modes)
Sound
- Fixed: sound effects now work after installation to ~/Applications/Niruvi/
Sandboxing (Shield)
- Fixed: Landlock LSM now applied in the child process, not the parent (broken sandbox isolation)
Bugfixes
- remove_hook(): .hook extension matching fixed (hooks were unremovable)
- read_json_with_hmac(): returns legacy files directly instead of None
- ShieldConfig.from_dict(): use_namespace default now True (consistent with init)
- self_update.py: exception shadowing fixed
- worker.py: removed dead except:raise code
- import() replaced with proper imports (3 files)
- manager.py: precise tempdir detection
- health_check.py: deduplicated os.uname() calls
- scripts.py: bare except: \u2192 except Exception:
Dependencies
- Added PyQt6-Multimedia
- Removed phantom requests dependency
Full changelog: v3.1.1...v3.1.2