0.31.0 #320

Merged
enricobuehler merged 4 commits from worktree-release-next-prep into main 2026-08-19 06:18:21 +00:00
Owner

Release prep for 0.31.0, cut from main at 790db5ed (PR #318). 90 commits since v0.30.0, 65 non-merge.

Commits on the branch:

  1. style: cargo fmt drift — whitespace-only. crates/pf-console-ui/src/screens/controllers.rs and crates/punktfunk-host/src/audio/linux/pad_card_volume.rs landed on main formatted differently from rustfmt 1.96.0, so ci.yml's Format step is red on the tip this is cut from.
  2. release: 0.31.0Cargo.toml 0.30.0 → 0.31.0, Cargo.lock (versions-only, 36 lines), docs/releases/v0.31.0.md, docs/releases/whatsnew/v0.31.0.txt (498/500), and the ## v0.31.0 section of CHANGELOG.md.
  3. merge of origin/main (#318 landed after the first cut) + release: 0.31.0 — re-cut updating the count and the Nix cache paragraph (signing key installed, DNS via unom/infra OpenTofu).

Why a minor and not 0.30.1: nothing versioned moved (wire 2, ABI 24 with the header byte-identical to the tag, driver 6/3, gamepad 3, index 1, gamescope +pfhdr8, openapi still 0.29.0). It is a minor because the cycle is feature-shaped and one commit is !: the Android Compose console is deleted and pf-console-ui is the console on all three ABIs; ASurfaceControl is the default Android present path; the Linux desktop-audio capture flips to a host-owned null sink by default; topology: exclusive on Hyprland/sway goes from silently-extend to actually disabling outputs; the Nix binary cache ships; and the Linux host package grows three system files the DualSense audio path needs. Canaries already sit at 0.31.x. If you'd rather call it 0.30.1, the notes and CHANGELOG only need the number changed.

Gates run locally (MacBook, 1.96.0): fmt clean, cargo metadata --offline ok, cargo test -p punktfunk-core unit suite 272 passed, Play notes gate 498/500 + unique, notes voice scan clean, both openapi copies identical, header regenerated with no diff. Not run: the C ABI harness — no libopus on this machine (ld: library 'opus' not found); header unchanged since v0.30.0 where it passed. Detailed in the CHANGELOG's Verification status.

Owed but not in this PR (called out in the CHANGELOG version table): sdk-v0.1.5 (the mgmt-endpoint follow in sdk/src/config.ts is unpublished) and plugin-kit-v0.4.3 (SyncSettings.minInterval is unpublished). Also pre-existing: packaging/gamescope/PKGBUILD still says pfhdr7.

After merge, per docs/releases/README.md: git tag -a v0.31.0 … && git push origin v0.31.0, wait for green, dispatch announce.

Release prep for **0.31.0**, cut from `main` at 790db5ed (PR #318). 90 commits since v0.30.0, 65 non-merge. Commits on the branch: 1. `style: cargo fmt drift` — whitespace-only. `crates/pf-console-ui/src/screens/controllers.rs` and `crates/punktfunk-host/src/audio/linux/pad_card_volume.rs` landed on main formatted differently from rustfmt 1.96.0, so `ci.yml`'s Format step is red on the tip this is cut from. 2. `release: 0.31.0` — `Cargo.toml` 0.30.0 → 0.31.0, `Cargo.lock` (versions-only, 36 lines), `docs/releases/v0.31.0.md`, `docs/releases/whatsnew/v0.31.0.txt` (498/500), and the `## v0.31.0` section of `CHANGELOG.md`. 3. merge of `origin/main` (#318 landed after the first cut) + `release: 0.31.0 — re-cut` updating the count and the Nix cache paragraph (signing key installed, DNS via unom/infra OpenTofu). **Why a minor and not 0.30.1:** nothing versioned moved (wire 2, ABI 24 with the header byte-identical to the tag, driver 6/3, gamepad 3, index 1, gamescope +pfhdr8, openapi still 0.29.0). It is a minor because the cycle is feature-shaped and one commit is `!`: the Android Compose console is deleted and `pf-console-ui` is the console on all three ABIs; ASurfaceControl is the default Android present path; the Linux desktop-audio capture flips to a host-owned null sink by default; `topology: exclusive` on Hyprland/sway goes from silently-extend to actually disabling outputs; the Nix binary cache ships; and the Linux host package grows three system files the DualSense audio path needs. Canaries already sit at 0.31.x. If you'd rather call it 0.30.1, the notes and CHANGELOG only need the number changed. **Gates run locally** (MacBook, 1.96.0): fmt clean, `cargo metadata --offline` ok, `cargo test -p punktfunk-core` unit suite 272 passed, Play notes gate 498/500 + unique, notes voice scan clean, both openapi copies identical, header regenerated with no diff. **Not run:** the C ABI harness — no libopus on this machine (`ld: library 'opus' not found`); header unchanged since v0.30.0 where it passed. Detailed in the CHANGELOG's *Verification status*. **Owed but not in this PR** (called out in the CHANGELOG version table): `sdk-v0.1.5` (the `mgmt-endpoint` follow in `sdk/src/config.ts` is unpublished) and `plugin-kit-v0.4.3` (`SyncSettings.minInterval` is unpublished). Also pre-existing: `packaging/gamescope/PKGBUILD` still says `pfhdr7`. After merge, per `docs/releases/README.md`: `git tag -a v0.31.0 … && git push origin v0.31.0`, wait for green, dispatch `announce`.
enricobuehler added 2 commits 2026-08-18 22:18:47 +00:00
Two files landed on main formatted differently from rustfmt 1.96.0's
output, so ci.yml's Format step fails on the tip the release is cut
from. Whitespace only; no behaviour change.
release: 0.31.0 — version bump, notes, CHANGELOG, Play notes
android / android (pull_request) Canceled after 0s
apple / swift (pull_request) Canceled after 1m46s
apple / distribute (pull_request) Canceled after 0s
apple / screenshots (pull_request) Canceled after 0s
ci / rust (pull_request) Canceled after 0s
ci / rust-arm64 (pull_request) Canceled after 0s
ci / web (pull_request) Canceled after 0s
ci / docs-site (pull_request) Canceled after 0s
ci / bun-nix (pull_request) Canceled after 0s
nix / flake (pull_request) Canceled after 0s
windows-client / client (arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (pull_request) Canceled after 1m47s
windows-client / client (x64, , x86_64-pc-windows-msvc, C:\t) (pull_request) Canceled after 0s
65c4b4b17e
88 commits since v0.30.0 (64 non-merge). Cut from origin/main 8a4eac4c
(PR #317 merged; PR #318, the Nix cache signing-key follow-up, is open
and NOT in this cut).

THE NUMBER: 0.31.0 is a judgement call, not forced. Nothing versioned
moved — WIRE_VERSION 2, C ABI 24 with include/punktfunk_core.h byte-
identical to the v0.30.0 tag, driver protocol 6 / min 3 (pf-driver-proto
has no diff against the tag), gamepad channel 3, plugin index schema 1,
host event schema 1, gamescope +pfhdr8 with no new patch files,
api/openapi.json still stamped 0.29.0 and unchanged, SDK 0.1.4,
plugin-kit 0.4.2. On that table alone this could be 0.30.1. It is a
minor because the cycle is feature-shaped and one commit carries a `!`:
the Android Compose console is deleted outright and pf-console-ui over
Skia/GL becomes the console on all three ABIs (#301, #317); the Android
present path moves to ASurfaceControl by default (#290); the Linux
desktop-audio capture flips to a host-owned null-audio-sink by default
with PUNKTFUNK_STREAM_SINK=stream as a one-release escape (#305);
`topology: exclusive` on Hyprland/sway goes from silently-extend to
genuinely disabling the operator's outputs, which is the default policy
on every auto-detected box (#304, closes #284); a Nix binary cache
ships (#313); and the Linux host package grows three new system files
(udev rule, WirePlumber policy, ALSA UCM drop-in) that the DualSense
audio path depends on (#291, #302, #315). scripts/ci/pf-version.sh
already derives the canary base as latest stable + one minor, so
canaries have sat at 0.31.x since the v0.30.0 tag and move to 0.32.x
after this one.

Version table re-measured on 8a4eac4c, not carried forward. Two rows
carry a warning rather than a change: sdk/ and plugin-kit/ both have
real code changes (the mgmt-endpoint follow in config.ts/runner-cli.ts;
SyncSettings.minInterval in sync-engine.ts) with package.json unbumped.
They version off their own sdk-v*/plugin-kit-v* tags and this commit
does not touch them; the CHANGELOG names sdk-v0.1.5 and
plugin-kit-v0.4.3 as owed so they are cut deliberately.

The release branch also carries one preceding whitespace-only commit:
crates/pf-console-ui/src/screens/controllers.rs and
crates/punktfunk-host/src/audio/linux/pad_card_volume.rs had landed on
main formatted differently from rustfmt 1.96.0 (the pinned toolchain),
so ci.yml's Format step was red on the tip this is cut from. `cargo fmt
--all` and nothing else.

Gates run on this tree (this MacBook, rustc/rustfmt 1.96.0): cargo fmt
--all --check clean; cargo metadata --offline ok; Cargo.lock diff
versions-only (36/36 lines); cargo test -p punktfunk-core unit suite
272 passed; the android.yml Play notes gate run verbatim — 498/500
characters and not byte-identical to any prior release's; notes voice
scan finds no internal names outside the For developers section (the
two hits, `nixpkgs` and Flatpak, are things those users configure by
name); both openapi copies cmp identical and unchanged since the tag;
include/punktfunk_core.h regenerated by the build and git-diff clean.

⚠ NOT run here: the C ABI harness (tests/c_abi.rs) — it links -lopus
and this machine has no libopus (`ld: library 'opus' not found`; the
Mac Studio has it). The header is byte-identical to v0.30.0's, where the
harness passed, and nothing in punktfunk-core's C surface changed; the
CI runner is its first execution for this tag. Named in the CHANGELOG's
Verification status rather than left to be discovered.

No outside contributor is credited by name: every attribution in the
64 bodies is a dated field report or "a reporter", and issue #284 was
filed by the maintainer. The Thanks section thanks the field reports
without naming anyone.
enricobuehler added 2 commits 2026-08-18 22:20:47 +00:00
release: 0.31.0 — re-cut on 790db5ed (#318 merged after the first cut)
apple / swift (pull_request) Successful in 2m1s
apple / distribute (pull_request) Skipped
apple / screenshots (pull_request) Skipped
windows-client / client (arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (pull_request) Successful in 2m58s
ci / rust-arm64 (pull_request) Failing after 1m54s
ci / web (pull_request) Successful in 1m54s
windows-client / client (x64, , x86_64-pc-windows-msvc, C:\t) (pull_request) Failing after 3m24s
ci / rust (pull_request) Failing after 2m39s
ci / bun-nix (pull_request) Successful in 34s
ci / docs-site (pull_request) Successful in 1m44s
android / android (pull_request) Successful in 7m6s
nix / flake (pull_request) Successful in 13m47s
601f040ffe
90 commits since v0.30.0 (65 non-merge), was 88/64. #318 installed the
Nix cache signing key (public half now pinned in the docs and served by
the cache) and moved its DNS provisioning into unom/infra's OpenTofu; the
CHANGELOG's Nix paragraph says so instead of listing the PR as absent.
The notes needed no change: their NixOS line already pointed at the
install guide and the cache-served key. Version table unaffected — #318
touches docs and the setup wizard only.
enricobuehler merged commit 9c33bc9397 into main 2026-08-19 06:18:21 +00:00
enricobuehler deleted branch worktree-release-next-prep 2026-08-19 06:18:23 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#320