forked from unom/punktfunk
Release 0.9.1 — a patch release led by three field-reported crash/brick fixes, a security-review hardening pass, and the tiered stats overlay landing on every platform. The regression that forces the release: 0.9.0's stats-HUD display stage hard-linked an API-33 NDK symbol believed API-26, so the native library failed to load on every Android < 13 device — "Identity unavailable: …NativeBridge", dead pair button, no discovery. The callback is now dlsym-resolved (pre-13 devices simply lose that one HUD row), and a new CI guard fails the APK build if the native lib ever imports a symbol beyond the API-28 floor. Two more crash-class host fixes ride along. GNOME: one console Approve admitted every parked knock a retrying client had stacked up — three instant Mutter virtual monitors segfaulted gnome-shell down to the GDM greeter; knock generations now admit exactly one, Mutter topology mutations are serialized process-wide, stale session-env is cleared, and an opt-in PUNKTFUNK_RECOVER_SESSION_CMD hook can revive a dead session on the next connect. Windows: twin identical GPUs died in a TEX_FAIL retry loop when the IDD-push ring opened on the wrong twin — the ring now rebinds once onto the render LUID the driver reports, and GPU inventory ordering is LUID-sorted and stable for the boot. Input: held gamepad state is rock-solid — Android pins one qualified pad device (motion-sensor siblings zeroed axes on every event interleave), and pad state now travels as sequence-gated idempotent snapshots (HOST_CAP_GAMEPAD_STATE, negotiated; either end older falls back to the per-transition path). Security review findings addressed: sliding-window anti-replay on the AEAD-authenticated data-plane sequence, 0600 client key + 0700 config dir (existing stores re-locked), the web console's post-login open redirect closed, the Windows installer's FFmpeg DLLs SHA-256-pinned, and a fork guard on PR jobs sharing signing-runner labels. Features: the 3-tier stats overlay (Compact/Normal/Detailed) ships on every platform with cycle shortcuts and settings pickers; Apple gains the experimental stage-3 glass-gated presenter (fixes the hidden 29-30 ms display-stage queue on 120 Hz ProMotion; stage 2 stays default) and a morphing, device-corner-concentric overlay card. Plus repo-wide docs sync and the flatpak CI network hardening. The [workspace.package] version (inherited by every crate via version.workspace) is the release being cut; the 14 workspace entries in Cargo.lock and the api/openapi.json info.version are refreshed to match (CI builds --locked). Canary derives from the tag as minor+1 of the latest stable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>