ci / bun-nix (pull_request) Successful in 29s
ci / docs-site (pull_request) Successful in 1m18s
apple / swift (pull_request) Successful in 2m6s
apple / distribute (pull_request) Skipped
apple / screenshots (pull_request) Skipped
ci / web (pull_request) Successful in 9m11s
ci / rust-arm64 (pull_request) Successful in 15m47s
android / android (pull_request) Successful in 22m53s
ci / rust (pull_request) Successful in 49m22s
175 commits since v0.29.0 (131 non-merge). Cut from origin/maina17a8917. Re-cut fromd92266a4(129/99) as main moved through PRs #270-#282. THE NUMBER: 0.30.0 is forced, not chosen. The C ABI moved 20 -> 24 in four steps this cycle — 21 connect_ex10 (the device_name an unpaired client knocks with, #244), 22 the per-client access accessors (#245), 23 connection_audio_plc (Apple's drought concealment), 24 connect_ex11 plus the resolved-format accessors (the lossless plane, #263) — and gamescope moved +pfhdr7 -> +pfhdr8 (patch 0010, the seat keymap the keyboard-layout fix depends on). Two DEFAULTS also flipped, either of which alone rules out a patch: the host now serves the lossless audio plane unless refused (#280, marked breaking by its author), and trust::Settings::library_enabled is deleted along with the "Show game library" row (#273, likewise). scripts/ci/pf-version.sh derives the canary base as latest stable + one minor, so canaries move 0.30.x -> 0.31.x after the tag. Every C addition is additive and WIRE_VERSION stays 2: the new Hello and Welcome fields ride the trailing-field append discipline, and the one new control message (PipelineGap, type byte 0x0A) took a free byte in the block it belongs to. No existing C function changed signature or behaviour, and no repr(C) struct grew a field — the lossless format is read through accessors precisely because PunktfunkAudioPcm and PunktfunkStats have no struct_size guard and are allocated by value by every C embedder. Version table re-measured ona17a8917, not carried forward from the first cut: ABI 24, wire 2, driver protocol 6 / min 3 (pf-driver-proto has no diff against the v0.29.0 tag), gamepad channel 3, plugin index schema 1, edition 2024, MSRV 1.85, 27 crate dirs, SDK 0.1.4, plugin-kit 0.4.2, gamescope 8, api/openapi.json stamped 0.29.0. ⚠ RE-SYNC OWED AND DONE: docs-site/public/openapi.json had drifted from api/openapi.json. #276's game-lifetime work regenerated the api/ copy alone (adding GameOnNewLaunch, game_on_new_launch and the `untracked` game state) and nothing catches it — the mgmt drift test compares the LIVE ROUTE TABLE against the generated document, not the two files — so CI stayed green while the published API reference described 0.29. Re-synced byte-identical here and called out in the CHANGELOG. Three claims were corrected against the code rather than shipped as drafted, all three in the first cut's favour of being too narrow or too broad: * lossless rungs are NOT uniform across clients. Apple and Android list the full ladder (441/48/882/96/1764); pf_client_core lists only 48/96, and pf-client-core still filters a surround request out before the wire, so the desktop and console clients stay on Opus under 5.1. The notes say exactly that instead of "stereo only". * "send logs to host" ships on the Gaming Mode console alone — the Apple, Android and webOS legs are follow-ups. * the masked-color I-beam fix arrived via a fork branch but is authored by the repo owner, so it is NOT credited as an outside contribution. Gates run on this tree: cargo fmt --all --check clean; cargo metadata --locked ok; Cargo.lock diff versions-only (36/36 lines) against the new main; cargo test -p punktfunk-core green including the c_abi harness (261 + 1 + 8, the ABI-24 header compiles and round-trips; macOS needs LIBRARY_PATH=/opt/homebrew/opt/opus/lib); the android.yml Play notes gate run verbatim — 475/500 characters and not byte- identical to any prior release's; notes voice scan finds no internal names outside the For developers section; both openapi copies diff clean.
302 KiB
302 KiB