87 commits since v0.26.0. The number is forced rather than chosen: the C ABI moves 17 → 18, and scripts/ci/pf-version.sh already reports PF_BASE=0.27.0.
This fills in what docs/releases/v0.27.0.md and the ## v0.27.0 — in development CHANGELOG section explicitly deferred to the bump — the lead-in, the TL;DR, "Before you update", the version table and the commit count — and merges in the work that landed without notes: the Windows Xbox HID pad, the Apple console-UI batch, and the v0.26.0 field repairs. Everything already accumulated on main is kept as written.
Version table — re-derived at HEAD, not read off the diff
v0.26.0
v0.27.0
Wire protocol
2
2 unchanged
C ABI
17
18 — next_rumble_cmd2 ADDED, not widened
Workspace crate dirs
26
27 (punktfunk-encode-worker), 39 members
gamescope +pfhdrN
4
5 — 6 patches → 7 (the PipeWire UAF); pkgrel resets to 1
driver proto / gamepad channel / plugin index
6 / 3 / 1
unchanged
SDK / plugin-kit
0.1.4 / 0.4.0
unchanged
api/openapi.json
0.25.0
0.25.0
⚠ crates/pf-driver-proto is no longer byte-identical to the previous release — it was through both v0.25.0 and v0.26.0, and the last two CHANGELOGs told packagers so. Three additive device_types. Called out explicitly so anyone who has been skipping that crate stops.
⚠ api/openapi.json is not a mechanical per-release bump. "Lags one release by convention" reads like "always set it to the previous version" — it isn't. It moves only on an API edit, and the last one (6cffe29b) predates the v0.26.0 tag, so it correctly stays at 0.25.0.
Two judgement calls worth a look
The Play whatsnew. The Android app has exactly one user-visible change this release — the OLED palette is called Eclipse now (display name only; the stored oled id is unchanged, so saved choices carry over). The file names that and is otherwise explicit that the release is host-side, rather than recycling v0.26.0's text or inventing app changes.
A docs claim that was false.running-as-a-service.md said "0.26.0-2 revoked it everywhere". No such version exists — the Arch registry goes 0.26.0-1 straight to 0.27.0 canaries. The corrected 0.26.0 packages shipped under the same version string, which is exactly why a machine that installed an early one was never offered the fix, and why this release matters to those users. Reworded to say that.
Play gate's own python3 arithmetic: 400/500 characters, not byte-identical to any other release (wc -c misleads here — • is 3 bytes)
Notes voice check: 1 hit, reviewed and kept — getcap /usr/bin/punktfunk-host is a command the reader runs, the same class as the usermod line v0.26.0's notes carried
docs-site builds (bun install --frozen-lockfile && bun run build, exit 0)
No tag yet — that follows this merge.
87 commits since v0.26.0. The number is forced rather than chosen: the C ABI moves **17 → 18**, and `scripts/ci/pf-version.sh` already reports `PF_BASE=0.27.0`.
This fills in what `docs/releases/v0.27.0.md` and the `## v0.27.0 — in development` CHANGELOG section explicitly deferred to the bump — the lead-in, the TL;DR, "Before you update", the version table and the commit count — and merges in the work that landed without notes: the Windows Xbox HID pad, the Apple console-UI batch, and the v0.26.0 field repairs. **Everything already accumulated on main is kept as written.**
## Version table — re-derived at HEAD, not read off the diff
| | v0.26.0 | v0.27.0 |
|---|---|---|
| Wire protocol | 2 | **2** unchanged |
| C ABI | 17 | **18** — `next_rumble_cmd2` ADDED, not widened |
| Workspace crate dirs | 26 | **27** (`punktfunk-encode-worker`), 39 members |
| gamescope `+pfhdrN` | 4 | **5** — 6 patches → 7 (the PipeWire UAF); `pkgrel` resets to 1 |
| driver proto / gamepad channel / plugin index | 6 / 3 / 1 | unchanged |
| SDK / plugin-kit | 0.1.4 / 0.4.0 | unchanged |
| `api/openapi.json` | 0.25.0 | **0.25.0** |
⚠ **`crates/pf-driver-proto` is no longer byte-identical to the previous release** — it was through both v0.25.0 and v0.26.0, and the last two CHANGELOGs told packagers so. Three additive `device_type`s. Called out explicitly so anyone who has been skipping that crate stops.
⚠ **`api/openapi.json` is not a mechanical per-release bump.** "Lags one release by convention" reads like "always set it to the previous version" — it isn't. It moves only on an API *edit*, and the last one (`6cffe29b`) predates the v0.26.0 tag, so it correctly stays at 0.25.0.
## Two judgement calls worth a look
**The Play `whatsnew`.** The Android app has exactly one user-visible change this release — the OLED palette is called **Eclipse** now (display name only; the stored `oled` id is unchanged, so saved choices carry over). The file names that and is otherwise explicit that the release is host-side, rather than recycling v0.26.0's text or inventing app changes.
**A docs claim that was false.** `running-as-a-service.md` said "0.26.0-2 revoked it everywhere". No such version exists — the Arch registry goes `0.26.0-1` straight to 0.27.0 canaries. The corrected 0.26.0 packages shipped under the *same* version string, which is exactly why a machine that installed an early one was never offered the fix, and why this release matters to those users. Reworded to say that.
## Gates, all green on this commit
- `cargo fmt --all --check` clean
- `cargo metadata --locked` resolves
- `Cargo.lock` diff versions-only — 72/72 changed lines, 36 crates
- Play gate's own `python3` arithmetic: **400/500 characters**, not byte-identical to any other release (`wc -c` misleads here — `•` is 3 bytes)
- Notes voice check: 1 hit, reviewed and kept — `getcap /usr/bin/punktfunk-host` is a command the reader runs, the same class as the `usermod` line v0.26.0's notes carried
- `docs-site` builds (`bun install --frozen-lockfile && bun run build`, exit 0)
No tag yet — that follows this merge.
87 commits since v0.26.0. The number is forced rather than chosen: the C ABI moves
17 -> 18, and `scripts/ci/pf-version.sh` already reports PF_BASE=0.27.0.
Fills in what `docs/releases/v0.27.0.md` and the `## v0.27.0 — in development`
CHANGELOG section deferred to the bump -- the lead-in, the TL;DR, "Before you update",
the version table and the commit count -- and merges in the work that landed without
notes: the Windows Xbox HID pad, the Apple console-UI batch, and the v0.26.0 field
repairs. Everything already accumulated on main is kept as written.
Version table, all re-derived at HEAD rather than read off the diff:
* wire 2 (unchanged), C ABI 17 -> 18 (ADDED symbol, not widened)
* crate dirs 26 -> 27 (`punktfunk-encode-worker`), 39 members
* gamescope `+pfhdr4` -> `+pfhdr5` (6 patches -> 7, the PipeWire UAF), pkgrel resets to 1
* driver proto 6, gamepad channel 3, plugin index 1, SDK 0.1.4, plugin-kit 0.4.0 -- all unchanged
* `api/openapi.json` stays 0.25.0: it moves only on an API EDIT, and the last one
(`6cffe29b`) predates the v0.26.0 tag. It is not a mechanical per-release bump.
⚠ `crates/pf-driver-proto` is NO LONGER byte-identical to the previous release -- it was
through both v0.25.0 and v0.26.0, and the last two CHANGELOGs told packagers so. Three
additive `device_type`s. Called out explicitly so a packager who has been skipping it stops.
The Play whatsnew names the one real Android change (the OLED palette is Eclipse now;
display name only, the stored `oled` id is unchanged so saved choices carry over) and is
otherwise explicit that the release is host-side.
`docs-site/.../running-as-a-service.md` claimed "0.26.0-2 revoked it everywhere". No such
version exists -- the Arch registry goes 0.26.0-1 straight to 0.27.0 canaries -- and the
corrected 0.26.0 packages shipped under the SAME version string, which is exactly why a
machine that installed an early one was never offered the fix. Reworded to say that, since
it is the reason this release matters to those users.
Gates, all green on this commit:
* `cargo fmt --all --check` clean
* `cargo metadata --locked` resolves
* `Cargo.lock` diff versions-only -- 72/72 changed lines, 36 crates
* Play gate's own python3 arithmetic: 400/500 CHARACTERS, not byte-identical to any other
release (`wc -c` misleads -- `•` is 3 bytes)
* notes voice check: 1 hit, reviewed and kept -- `getcap /usr/bin/punktfunk-host` is a
command the reader runs, the same class as the `usermod` line v0.26.0's notes carried
* `docs-site` builds
NOT DONE: no tag yet.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
87 commits since v0.26.0. The number is forced rather than chosen: the C ABI moves 17 → 18, and
scripts/ci/pf-version.shalready reportsPF_BASE=0.27.0.This fills in what
docs/releases/v0.27.0.mdand the## v0.27.0 — in developmentCHANGELOG section explicitly deferred to the bump — the lead-in, the TL;DR, "Before you update", the version table and the commit count — and merges in the work that landed without notes: the Windows Xbox HID pad, the Apple console-UI batch, and the v0.26.0 field repairs. Everything already accumulated on main is kept as written.Version table — re-derived at HEAD, not read off the diff
next_rumble_cmd2ADDED, not widenedpunktfunk-encode-worker), 39 members+pfhdrNpkgrelresets to 1api/openapi.json⚠
crates/pf-driver-protois no longer byte-identical to the previous release — it was through both v0.25.0 and v0.26.0, and the last two CHANGELOGs told packagers so. Three additivedevice_types. Called out explicitly so anyone who has been skipping that crate stops.⚠
api/openapi.jsonis not a mechanical per-release bump. "Lags one release by convention" reads like "always set it to the previous version" — it isn't. It moves only on an API edit, and the last one (6cffe29b) predates the v0.26.0 tag, so it correctly stays at 0.25.0.Two judgement calls worth a look
The Play
whatsnew. The Android app has exactly one user-visible change this release — the OLED palette is called Eclipse now (display name only; the storedoledid is unchanged, so saved choices carry over). The file names that and is otherwise explicit that the release is host-side, rather than recycling v0.26.0's text or inventing app changes.A docs claim that was false.
running-as-a-service.mdsaid "0.26.0-2 revoked it everywhere". No such version exists — the Arch registry goes0.26.0-1straight to 0.27.0 canaries. The corrected 0.26.0 packages shipped under the same version string, which is exactly why a machine that installed an early one was never offered the fix, and why this release matters to those users. Reworded to say that.Gates, all green on this commit
cargo fmt --all --checkcleancargo metadata --lockedresolvesCargo.lockdiff versions-only — 72/72 changed lines, 36 cratespython3arithmetic: 400/500 characters, not byte-identical to any other release (wc -cmisleads here —•is 3 bytes)getcap /usr/bin/punktfunk-hostis a command the reader runs, the same class as theusermodline v0.26.0's notes carrieddocs-sitebuilds (bun install --frozen-lockfile && bun run build, exit 0)No tag yet — that follows this merge.
87 commits since v0.26.0. The number is forced rather than chosen: the C ABI moves 17 -> 18, and `scripts/ci/pf-version.sh` already reports PF_BASE=0.27.0. Fills in what `docs/releases/v0.27.0.md` and the `## v0.27.0 — in development` CHANGELOG section deferred to the bump -- the lead-in, the TL;DR, "Before you update", the version table and the commit count -- and merges in the work that landed without notes: the Windows Xbox HID pad, the Apple console-UI batch, and the v0.26.0 field repairs. Everything already accumulated on main is kept as written. Version table, all re-derived at HEAD rather than read off the diff: * wire 2 (unchanged), C ABI 17 -> 18 (ADDED symbol, not widened) * crate dirs 26 -> 27 (`punktfunk-encode-worker`), 39 members * gamescope `+pfhdr4` -> `+pfhdr5` (6 patches -> 7, the PipeWire UAF), pkgrel resets to 1 * driver proto 6, gamepad channel 3, plugin index 1, SDK 0.1.4, plugin-kit 0.4.0 -- all unchanged * `api/openapi.json` stays 0.25.0: it moves only on an API EDIT, and the last one (`6cffe29b`) predates the v0.26.0 tag. It is not a mechanical per-release bump. ⚠ `crates/pf-driver-proto` is NO LONGER byte-identical to the previous release -- it was through both v0.25.0 and v0.26.0, and the last two CHANGELOGs told packagers so. Three additive `device_type`s. Called out explicitly so a packager who has been skipping it stops. The Play whatsnew names the one real Android change (the OLED palette is Eclipse now; display name only, the stored `oled` id is unchanged so saved choices carry over) and is otherwise explicit that the release is host-side. `docs-site/.../running-as-a-service.md` claimed "0.26.0-2 revoked it everywhere". No such version exists -- the Arch registry goes 0.26.0-1 straight to 0.27.0 canaries -- and the corrected 0.26.0 packages shipped under the SAME version string, which is exactly why a machine that installed an early one was never offered the fix. Reworded to say that, since it is the reason this release matters to those users. Gates, all green on this commit: * `cargo fmt --all --check` clean * `cargo metadata --locked` resolves * `Cargo.lock` diff versions-only -- 72/72 changed lines, 36 crates * Play gate's own python3 arithmetic: 400/500 CHARACTERS, not byte-identical to any other release (`wc -c` misleads -- `•` is 3 bytes) * notes voice check: 1 hit, reviewed and kept -- `getcap /usr/bin/punktfunk-host` is a command the reader runs, the same class as the `usermod` line v0.26.0's notes carried * `docs-site` builds NOT DONE: no tag yet.