chore(release): cut 0.33.0 #440

Merged
enricobuehler merged 1 commits from worktree-release-0330-prep into main 2026-08-28 22:43:45 +00:00
Owner

45 commits since v0.32.0 (29 non-merge), cut at 95a2683a.

Every version number is unchanged, and the release is still breaking

The version table says wire 2, C ABI 26, driver 6, gamepad channel 3, plugin index 1, host event
schema 1, gamescope pfhdr8 — all unchanged. Anyone who reads only that row set concludes this is
a safe drop-in. It is not, and this is the thing to check before merging:

PUNKTFUNK_GRANT_ALL widens 0x3F0x7F. GRANT_POWER (1 << 6) joins the mask. That is
a value change to an existing macro, not an addition, so mask == GRANT_ALL now reads a
pre-power record as Custom. The host carries a legacy-full rule (an explicitly stored 0x3F reads
as the current GRANT_ALL), so existing Full-control pairings keep Full control — and gain host
power with it. A device you already trusted with everything can now shut the machine down. That is
called out in ## Before you update in the user notes, not buried.

Second break: CLIENT_CAP_KEEP_HOST_AUDIOPUNKTFUNK_CLIENT_CAP_KEEP_HOST_AUDIO. v0.32.0
emitted it without the prefix because cbindgen had no rename entry. Value unchanged; anything
compiled against the bare spelling fails to compile.

Generalises: diff the header, do not read the constants. A release can break embedders with
every version number standing still.

The one surface that really moves

api/openapi.json gains GET /api/v1/actions and POST /api/v1/actions/{id}. This is the first
release since v0.31.1 where that file's diff is not just the info.version stamp, so the
"re-stamped, not regenerated" caveat from the last few cuts does not apply here — the routes were
regenerated on #436, which added them.

Why minor

Not a renumber. Host power actions on every client (design/host-actions.md P0–P2),
punktfunk-host ctl with 15 verbs, Omarchy as a supported host, and the console handoff ticket.

@punktfunk/host stays 0.1.6 on purpose. sdk/src/gen/punktfunk.ts is regenerated with the
actions types, but the plugin token is refused both routes, so no plugin can call them. The
0.1.5/0.1.6 precedent — "the fix cannot reach a plugin until it ships" — does not apply, because
there is nothing for a plugin to reach.

First CHANGELOG section under the new house style

docs/writing.md §2 landed in #438 four commits ago, so this is the first section written to it:
Keep a Changelog categories plus the version table. 224 lines against v0.32.0's 454.

Kept the ## v0.33.0 heading rather than writing.md's example ## [0.33.0] — date. The CHANGELOG
header paragraph that #438 itself added names only the categories as the new rule, and
docs/releases/README.md still specifies one ## vX.Y.Z per section. Flagging it in case the
bracket form was actually intended.

cargo audit: chacha20 0.10.1 was yanked after v0.32.0 shipped

Same version as v0.32.0's lock — upstream yanked it since, so audit showed 3 allowed warnings
where v0.32.0 had 2. It is transitive via chacha20poly1305 0.11, and 0.10.2 is a lock-only bump.
Back to the two standing unmaintained warnings (audiopus_sys, paste). The lock diff is
therefore 37 lines, not the usual versions-only 36/36
— 36 workspace bumps plus chacha20. The
core suite was re-run after it.

Gates run on the Mac

cargo fmt --all --check · cargo test -p punktfunk-core --lib --features quic 508 passed, 0
failed
· C ABI harness PASS (abi_version=26), which is what proves the ABI row rather than
trusting the constant · check-docs-drift.sh · check-docs-links.sh · cargo audit · both
openapi copies cmp identical and stamped 0.33.0 · Play notes 424/500 chars and unique against
all 16 existing files · the ISO 24495 auditor clean on both notes files.

Not verified from here: the Windows, Linux, Android and Apple compile legs exist only in CI.
package never runs on a pull request, so the Windows host installer leg is only proven on the
merge sha — that is the check worth watching before the tag, and it is what nearly shipped a
Windows-hostless v0.32.0.

45 commits since v0.32.0 (29 non-merge), cut at `95a2683a`. ## Every version number is unchanged, and the release is still breaking The version table says wire 2, C ABI 26, driver 6, gamepad channel 3, plugin index 1, host event schema 1, gamescope `pfhdr8` — all unchanged. Anyone who reads only that row set concludes this is a safe drop-in. It is not, and this is the thing to check before merging: **`PUNKTFUNK_GRANT_ALL` widens `0x3F` → `0x7F`.** `GRANT_POWER` (`1 << 6`) joins the mask. That is a value change to an *existing* macro, not an addition, so `mask == GRANT_ALL` now reads a pre-power record as Custom. The host carries a legacy-full rule (an explicitly stored `0x3F` reads as the current `GRANT_ALL`), so existing Full-control pairings keep Full control — and gain host power with it. A device you already trusted with everything can now shut the machine down. That is called out in `## Before you update` in the user notes, not buried. Second break: `CLIENT_CAP_KEEP_HOST_AUDIO` → `PUNKTFUNK_CLIENT_CAP_KEEP_HOST_AUDIO`. v0.32.0 emitted it without the prefix because cbindgen had no rename entry. Value unchanged; anything compiled against the bare spelling fails to compile. **Generalises:** diff the header, do not read the constants. A release can break embedders with every version number standing still. ## The one surface that really moves `api/openapi.json` gains `GET /api/v1/actions` and `POST /api/v1/actions/{id}`. This is the first release since v0.31.1 where that file's diff is *not* just the `info.version` stamp, so the "re-stamped, not regenerated" caveat from the last few cuts does not apply here — the routes were regenerated on #436, which added them. ## Why minor Not a renumber. Host power actions on every client (`design/host-actions.md` P0–P2), `punktfunk-host ctl` with 15 verbs, Omarchy as a supported host, and the console handoff ticket. `@punktfunk/host` stays **0.1.6 on purpose**. `sdk/src/gen/punktfunk.ts` is regenerated with the actions types, but the plugin token is refused both routes, so no plugin can call them. The 0.1.5/0.1.6 precedent — "the fix cannot reach a plugin until it ships" — does not apply, because there is nothing for a plugin to reach. ## First CHANGELOG section under the new house style `docs/writing.md` §2 landed in #438 four commits ago, so this is the first section written to it: Keep a Changelog categories plus the version table. **224 lines against v0.32.0's 454.** Kept the `## v0.33.0` heading rather than writing.md's example `## [0.33.0] — date`. The CHANGELOG header paragraph that #438 itself added names only the *categories* as the new rule, and `docs/releases/README.md` still specifies one `## vX.Y.Z` per section. Flagging it in case the bracket form was actually intended. ## `cargo audit`: chacha20 0.10.1 was yanked after v0.32.0 shipped Same version as v0.32.0's lock — upstream yanked it since, so audit showed 3 allowed warnings where v0.32.0 had 2. It is transitive via `chacha20poly1305` 0.11, and 0.10.2 is a lock-only bump. Back to the two standing `unmaintained` warnings (`audiopus_sys`, `paste`). **The lock diff is therefore 37 lines, not the usual versions-only 36/36** — 36 workspace bumps plus chacha20. The core suite was re-run after it. ## Gates run on the Mac `cargo fmt --all --check` · `cargo test -p punktfunk-core --lib --features quic` **508 passed, 0 failed** · **C ABI harness PASS (`abi_version=26`)**, which is what proves the ABI row rather than trusting the constant · `check-docs-drift.sh` · `check-docs-links.sh` · `cargo audit` · both openapi copies `cmp` identical and stamped 0.33.0 · Play notes **424/500 chars** and unique against all 16 existing files · the ISO 24495 auditor clean on both notes files. **Not verified from here:** the Windows, Linux, Android and Apple compile legs exist only in CI. `package` never runs on a pull request, so the Windows host installer leg is only proven on the merge sha — that is the check worth watching before the tag, and it is what nearly shipped a Windows-hostless v0.32.0.
enricobuehler added 1 commit 2026-08-28 22:36:42 +00:00
chore(release): cut 0.33.0
ci / bun-nix (pull_request) Successful in 27s
ci / docs-drift (pull_request) Successful in 31s
ci / web (pull_request) Successful in 1m11s
apple / swift (pull_request) Successful in 2m14s
apple / distribute (pull_request) Skipped
apple / screenshots (pull_request) Skipped
windows-client / client (x64, , x86_64-pc-windows-msvc, C:\t) (pull_request) Successful in 7m11s
android / android (pull_request) Successful in 8m2s
ci / rust-arm64 (pull_request) Successful in 8m53s
ci / docs-site (pull_request) Failing after 10m5s
windows-client / client (arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (pull_request) Successful in 3m20s
nix / flake (pull_request) Successful in 10m40s
ci / rust (pull_request) Successful in 27m32s
a6efc467ce
45 commits since v0.32.0 (29 non-merge). Nothing versioned moves: wire
stays 2, C ABI 26, driver 6, gamepad channel 3, plugin index 1, host
event schema 1, gamescope pfhdr8. The management API grows two routes
for host actions, so openapi steps 0.32.0 -> 0.33.0 with a real diff
rather than a stamp.

Minor because of what the tree gained, not what it renumbered: host
power actions on every client, punktfunk-host ctl, Omarchy as a
supported host, and a widened GRANT_ALL. That last one is the embedder
trap of this cut -- 0x3F -> 0x7F is a value change to an existing macro,
so equality comparisons against it now read a pre-power record as
Custom. GRANT_ALL_PRE_POWER exists for that.

First CHANGELOG section written to docs/writing.md section 2: Keep a
Changelog categories, 224 lines against v0.32.0's 454.

Also drops chacha20 0.10.1, which upstream yanked after v0.32.0 shipped.
It is transitive via chacha20poly1305 and 0.10.2 is a lock-only bump, so
cargo audit is back to its two allowed unmaintained warnings.

Gates on the Mac: cargo fmt --check, cargo test -p punktfunk-core --lib
--features quic (508 passed, 0 failed), the C ABI harness (abi_version=26),
check-docs-drift.sh, check-docs-links.sh, cargo audit, both openapi copies
byte-identical, Play notes 424/500 chars and unique, and the ISO 24495
auditor clean on both notes files.
enricobuehler merged commit 35f549f04d into main 2026-08-28 22:43:45 +00:00
enricobuehler deleted branch worktree-release-0330-prep 2026-08-28 22:43:50 +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#440