ci / docs-site (pull_request) Successful in 1m13s
ci / web (pull_request) Successful in 1m15s
apple / swift (pull_request) Successful in 1m27s
apple / screenshots (pull_request) Skipped
ci / rust-arm64 (pull_request) Successful in 3m14s
android / android (pull_request) Successful in 4m34s
windows / build (aarch64-pc-windows-msvc) (pull_request) Successful in 6m45s
windows / build (x86_64-pc-windows-msvc) (pull_request) Successful in 4m27s
ci / rust (pull_request) Successful in 14m5s
main moved from8983ec04to35ba64cawhile this branch sat open, taking the release from 98 commits to 135. Merged in and folded the new work into the notes. The largest addition is a new `## Before you update` section, because this batch carries changes that need the reader to DO something and they were not going to survive being buried in a Fixed bullet: * Linux users of the virtual Steam Deck pad must `usermod -aG punktfunk` and log back in, or it stops attaching — the capability moved off the `input` group (which every gamepad guide tells you to join) onto its own, because it can emulate arbitrary USB hardware. * Plugin UIs moved to their own origin on PORT+1, so a self-signed console needs the new port trusted once, and custom firewalls/proxies need it opened. * Saving a custom launch command re-confirms the console password, and add-ons may no longer set launch/pre-launch commands at all — a real break for any third-party add-on that populated them. * A fresh install now runs the plugin runner by default (upgrades untouched). * The Deck setup script used to leave the generated console password world-readable, so rotating it is worth a sentence. The library-sources work is written as GROUNDWORK, deliberately. All six built-in scanners still ship, still on by default, and nothing is removed — and none of the replacement add-ons are published yet, so the migration banner only appears as they arrive. Promising a user they can move Steam to an add-on today would be the v0.22.3 mistake again: notes describing a build nobody is getting. Two other honesty items. The Android HUD entry says outright that the stream did not get faster and the headline number only got smaller because it stopped counting the compositor's wait — otherwise every reader takes it for a speed-up. The Windows non-C: settings entry says plainly that nothing is recoverable, because the writes never reached disk, so there is no orphaned copy to restore and the reader has to re-enter their preferences once. `56adb470` (pad-audio WASAPI module path) is deliberately NOT a user-facing Fixed entry: verified it is not an ancestor of v0.24.0, so it repairs a Windows build break in code that has never shipped. It folds into the pad-audio feature. Same for `19f637ea`, which is CI-only. Under the hood gained the origin-isolation mechanism, the allowlist authorization gate that fails the build on an unclassified route, store claims and the v2 library.json shape, the registry auth work, the config-writer fallback, send pacing, and the vendored Deck WSI layer. The unverified list grew too: the origin split has not been in a real browser, the packaging default-on changes have had no installer run, and no launcher tile has ever been clicked. Re-verified after the merge, all green: lock diff versions-only 32/32 against origin/main, `cargo metadata --locked` resolves (35 members), `cargo fmt --all --check` clean in both workspaces, doc lazy-continuation scanner 0 hits over 521 files, notes body 0 internal-vocabulary hits above `## Under the hood`, Play notes still 494/500 by android.yml's own gate logic. Wire 2, C ABI 16, and the capability bytes are all unchanged from the bump commit — host_caps still has exactly one free bit (0x80). Play's "What's new" is left as it stands: at 494/500 there is no room, and the only Android-facing additions here (the stats-overlay measurement change and a certificate-strictness fix) are both worth less to a phone user than any line already in it.