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 quic508 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.
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.
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.
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 isa safe drop-in. It is not, and this is the thing to check before merging:
PUNKTFUNK_GRANT_ALLwidens0x3F→0x7F.GRANT_POWER(1 << 6) joins the mask. That isa value change to an existing macro, not an addition, so
mask == GRANT_ALLnow reads apre-power record as Custom. The host carries a legacy-full rule (an explicitly stored
0x3Freadsas the current
GRANT_ALL), so existing Full-control pairings keep Full control — and gain hostpower with it. A device you already trusted with everything can now shut the machine down. That is
called out in
## Before you updatein the user notes, not buried.Second break:
CLIENT_CAP_KEEP_HOST_AUDIO→PUNKTFUNK_CLIENT_CAP_KEEP_HOST_AUDIO. v0.32.0emitted 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.jsongainsGET /api/v1/actionsandPOST /api/v1/actions/{id}. This is the firstrelease since v0.31.1 where that file's diff is not just the
info.versionstamp, 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.mdP0–P2),punktfunk-host ctlwith 15 verbs, Omarchy as a supported host, and the console handoff ticket.@punktfunk/hoststays 0.1.6 on purpose.sdk/src/gen/punktfunk.tsis regenerated with theactions 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.0heading rather than writing.md's example## [0.33.0] — date. The CHANGELOGheader paragraph that #438 itself added names only the categories as the new rule, and
docs/releases/README.mdstill specifies one## vX.Y.Zper section. Flagging it in case thebracket form was actually intended.
cargo audit: chacha20 0.10.1 was yanked after v0.32.0 shippedSame 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
chacha20poly13050.11, and 0.10.2 is a lock-only bump.Back to the two standing
unmaintainedwarnings (audiopus_sys,paste). The lock diff istherefore 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 quic508 passed, 0failed · C ABI harness PASS (
abi_version=26), which is what proves the ABI row rather thantrusting the constant ·
check-docs-drift.sh·check-docs-links.sh·cargo audit· bothopenapi copies
cmpidentical and stamped 0.33.0 · Play notes 424/500 chars and unique againstall 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.
packagenever runs on a pull request, so the Windows host installer leg is only proven on themerge sha — that is the check worth watching before the tag, and it is what nearly shipped a
Windows-hostless v0.32.0.