From 91d123e9b59d5bfb7eb60d35c7ed2bc9e951616e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 7 Jun 2026 00:46:20 +0000 Subject: [PATCH] Version Packages --- .changeset/large-room-callbacks.md | 30 ----------------------------- CHANGELOG.md | 31 ++++++++++++++++++++++++++++++ package.json | 2 +- rust/Cargo.toml | 2 +- 4 files changed, 33 insertions(+), 32 deletions(-) delete mode 100644 .changeset/large-room-callbacks.md diff --git a/.changeset/large-room-callbacks.md b/.changeset/large-room-callbacks.md deleted file mode 100644 index ab27dc2..0000000 --- a/.changeset/large-room-callbacks.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -"kit": minor ---- - -Large-room callbacks: negotiated roster-epoch ctx encoding, game-declared -heartbeats, and the Rust mirror of the 1024-player baseline work. - -- **Ctx roster-epoch mode** (`GameMeta.CtxFeatures: kit.CtxFeatRosterEpoch`): - the host sends the full member list only when the roster changes (with a - `u32` epoch) and a 6-byte unchanged marker otherwise — removing the - O(members) encode/decode/copy from every callback (~100KB per input at - 1000 players, the dominant large-room input cost and the residual - `-gc=leaking` leak). Sentinel member-counts `0xFFFE`/`0xFFFF` (ABI.md - §4.1); legacy guests stay byte-identical; ABI major stays 2. Both SDKs - decode the sentinels and keep an epoch-aware roster cache (zero member - allocations on the unchanged form); the legacy byte-skim cache is retained - for pre-feature hosts. -- **`GameMeta.HeartbeatMS`**: declare your wake cadence (0 = default; - validated 20..1000 at meta encode). Host precedence: admin - `host.heartbeat_ms` > declaration > 50ms default. `shellcade-kit play` - honors the declaration locally. -- **Rust crate parity**: mirrors both meta fields + the sentinel decode + - the epoch roster cache (`Rc`-shared members), and ALSO picks up the - v2.5.0 Go-only baseline work it missed: `ROSTER_CAP` 16 → 1024 with - lazily-allocated per-slot baselines and allocated-only broadcast - reconcile. Golden vectors pin the Go/Rust meta encodings byte-identical. -- New trailing meta section (`u32 ctxFeatures` + `u16 heartbeatMS`) after - the config-spec section, presence-guarded both directions; `GUIDE.md` - gains the large-room authoring section (heartbeat + feature declaration + - render-on-change dirty tracking). diff --git a/CHANGELOG.md b/CHANGELOG.md index 540b39f..d563ee7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # kit +## 2.6.0 + +### Minor Changes + +- 6df5bea: Large-room callbacks: negotiated roster-epoch ctx encoding, game-declared + heartbeats, and the Rust mirror of the 1024-player baseline work. + + - **Ctx roster-epoch mode** (`GameMeta.CtxFeatures: kit.CtxFeatRosterEpoch`): + the host sends the full member list only when the roster changes (with a + `u32` epoch) and a 6-byte unchanged marker otherwise — removing the + O(members) encode/decode/copy from every callback (~100KB per input at + 1000 players, the dominant large-room input cost and the residual + `-gc=leaking` leak). Sentinel member-counts `0xFFFE`/`0xFFFF` (ABI.md + §4.1); legacy guests stay byte-identical; ABI major stays 2. Both SDKs + decode the sentinels and keep an epoch-aware roster cache (zero member + allocations on the unchanged form); the legacy byte-skim cache is retained + for pre-feature hosts. + - **`GameMeta.HeartbeatMS`**: declare your wake cadence (0 = default; + validated 20..1000 at meta encode). Host precedence: admin + `host.heartbeat_ms` > declaration > 50ms default. `shellcade-kit play` + honors the declaration locally. + - **Rust crate parity**: mirrors both meta fields + the sentinel decode + + the epoch roster cache (`Rc`-shared members), and ALSO picks up the + v2.5.0 Go-only baseline work it missed: `ROSTER_CAP` 16 → 1024 with + lazily-allocated per-slot baselines and allocated-only broadcast + reconcile. Golden vectors pin the Go/Rust meta encodings byte-identical. + - New trailing meta section (`u32 ctxFeatures` + `u16 heartbeatMS`) after + the config-spec section, presence-guarded both directions; `GUIDE.md` + gains the large-room authoring section (heartbeat + feature declaration + + render-on-change dirty tracking). + ## 2.5.0 ### Minor Changes diff --git a/package.json b/package.json index e27954a..e8d60c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kit", - "version": "2.5.0", + "version": "2.6.0", "private": true, "description": "Version management for the shellcade gamekit (Go module + CLI). Versions and changelogs are driven by changesets; binaries by GoReleaser.", "scripts": { diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 80bc275..7914980 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -15,7 +15,7 @@ [package] name = "shellcade-kit" -version = "2.5.0" +version = "2.6.0" edition = "2021" # #[unsafe(no_mangle)] (emitted by shellcade_game! so expansions survive # edition-2024 game crates) stabilized in 1.82.