forked from unom/punktfunk
90 commits since v0.31.4 (63 non-merge), cut atdb0f4f1e. **The C ABI steps 25 -> 26.** `punktfunk_connect_opts` closes the `punktfunk_connect_ex*` ladder: eleven generations each added a field by minting a new exported symbol plus a 20-something-parameter forwarding shim, and the replacement takes every option in ONE size-prefixed `PunktfunkConnectOpts`. Every `ex` keeps its symbol and behaviour, so this is an added surface, not a changed one. Layout is locked padding-free on both pointer widths (96/68 B) by const asserts AND by the C harness compiling the same sizes. The minor bump was already right before the ABI moved: ABR Phase 4 redefines every control-plane bitrate as the TOTAL WIRE BUDGET rather than the encoder rate, deliberately without a capability handshake. `include/punktfunk_core.h` documents the 10-bit SDR ask as "0.32" and says "every pre-0.32 client sets the two bits together", so the tree had pre-decided the number. Version table, re-derived at HEAD rather than read off the diff: * wire 2 -- unchanged. Three additive, ignorable additions: USER_FLAG_REPEAT, CLIENT_CAP_KEEP_HOST_AUDIO, and Welcome::host_caps2 (trailing, absent -> 0) carrying HOST_CAP2_REPEAT_MARK * C ABI 25 -> 26 (above) * crate dirs 27, 39 members, edition 2024, MSRV 1.85 -- unchanged * driver proto 6, gamepad channel 3, plugin index 1, host event schema 1, gamescope +pfhdr8, SDK 0.1.6 -- all unchanged; pf-driver-proto and punktfunk-host/src/events.rs show no diff at all * api/openapi.json 0.31.4 -> 0.32.0, content-identical (info.version is the whole diff); both copies re-stamped and byte-identical to each other * @punktfunk/plugin-kit stays 0.4.4 ON PURPOSE: plugin-kit/src/wire.ts changes exactly one line and it is a doc comment in the launch.kind table. `launcher_ui` is a bare string validated host-side, so nothing to republish. The CHANGELOG's `heroic-console` entry was filed under v0.31.4, butae13b29alanded AFTER that tag -- so that frozen section described a change v0.31.4 does not contain. Moved into the v0.32.0 section verbatim. Seven behavioural breaking changes, none of them a version step, all listed in CHANGELOG.md: the wire-budget redefinition; FLOOR_KBPS 5000 -> 2000; DSCP defaults to AUTO (local peers only); GameStream video AND control encryption default on (both graduated after their own on-glass pass on .173, and `PUNKTFUNK_GS_ENCRYPT=video` is the new middle rung); PyroWave forces Automatic bitrate; the console pairing routes move behind the console password (the security review's critical finding -- a console session cookie alone reached code execution); deep links auto-dial by stable record id only. Release notes rewritten to the ISO 24495-1/-5 plain-language rules: sentences under 30 words, paragraphs under 6 sentences, bold bullet lead-ins, an explicit overview, a table of contents, and acronyms defined on first use. The plugin's own text auditor reports 0 findings on the Play notes and 2 on the release notes, both of which are the words NVIDIA and AMD -- company names, not acronyms, deliberately left unexpanded. `cargo audit` stays GREEN: h2 0.4.18 -> 0.4.19 closed RUSTSEC-2026-0258, left open deliberately at the v0.31.1 cut. Only two allowed `unmaintained` warnings remain (audiopus_sys, paste). The Play whatsnew leads with the Android black screen, which is the one fault a phone or TV user in this cycle could not work around. Gates on the cut (the Mac): cargo fmt --all --check; cargo metadata --offline; lock diff versions-only 36/36; cargo test -p punktfunk-core --lib --features quic 503 passed / 0 failed; the C ABI harness PASSED (abi_version=26); the regenerated header is not stale; check-docs-drift.sh; check-docs-links.sh; the Play notes gate 412/500 chars and unique against 15 files; both openapi copies cmp identical; repo voice scan clean; cargo audit green.