summer-engine 3.5.0 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +2 -1
  3. package/.codex-plugin/plugin.json +2 -1
  4. package/.cursor-plugin/plugin.json +2 -1
  5. package/.factory-plugin/plugin.json +2 -1
  6. package/CHANGELOG.md +23 -0
  7. package/README.md +3 -3
  8. package/commands/summer.md +1 -0
  9. package/dist/cli/commands/setup.js +2 -2
  10. package/dist/core/capabilities/publish-build.d.ts +4 -0
  11. package/dist/core/capabilities/publish-build.js +67 -34
  12. package/dist/core/capabilities/runtime-control.d.ts +2 -2
  13. package/dist/installer/agent-config.d.ts +5 -5
  14. package/dist/installer/agent-config.js +96 -32
  15. package/dist/installer/agent-table.d.ts +7 -6
  16. package/dist/installer/agent-table.js +117 -6
  17. package/dist/mcp/hosted-mount.js +2 -1
  18. package/dist/mcp/provider-safe-schema.d.ts +10 -0
  19. package/dist/mcp/provider-safe-schema.js +96 -0
  20. package/dist/mcp/server.js +3 -0
  21. package/gemini-extension.json +2 -1
  22. package/integrations/README.md +6 -0
  23. package/library/skills/README.md +3 -2
  24. package/library/skills/export-and-ship/SKILL.md +2 -0
  25. package/library/skills/make-game/SKILL.md +21 -2
  26. package/library/skills/make-game/resource.yaml +1 -0
  27. package/library/skills/multiplayer/SKILL.md +3 -1
  28. package/library/skills/multiplayer/resource.yaml +1 -0
  29. package/library/skills/multiplayer-movement/SKILL.md +1 -1
  30. package/library/skills/multiplayer-movement/files.md +2 -3
  31. package/library/skills/multiplayer-project/SKILL.md +20 -4
  32. package/library/skills/multiplayer-project/files.md +2 -3
  33. package/library/skills/multiplayer-publish/SKILL.md +86 -5
  34. package/library/skills/multiplayer-publish/resource.yaml +1 -0
  35. package/library/skills/multiplayer-state/SKILL.md +1 -1
  36. package/library/skills/multiplayer-state/files.md +2 -3
  37. package/library/skills/multiplayer-testing/SKILL.md +13 -0
  38. package/library/skills/multiplayer-testing/resource.yaml +1 -0
  39. package/library/skills/publish-your-game/SKILL.md +2 -0
  40. package/library/skills/release-readiness/SKILL.md +298 -0
  41. package/library/skills/release-readiness/resource.yaml +41 -0
  42. package/library/skills/summer-parties/SKILL.md +1 -1
  43. package/package.json +1 -1
  44. package/registry/generated/counts.json +2 -2
  45. package/registry/generated/gemini-extension.json +2 -1
  46. package/registry/generated/index.json +63 -11
  47. package/registry/generated/marketplace.claude.json +1 -1
  48. package/registry/generated/plugin.claude.json +2 -1
  49. package/registry/generated/plugin.codex.json +2 -1
  50. package/registry/generated/plugin.cursor.json +2 -1
  51. package/registry/generated/plugin.factory.json +2 -1
  52. package/registry/generated/skills-index.md +3 -2
  53. package/registry/generated/skills-registry.json +14 -0
@@ -0,0 +1,298 @@
1
+ ---
2
+ name: release-readiness
3
+ description: "Before releasing a Summer game version, prove players can play it: server scene, online join, saved progress, no fixed Game ID, a released Summer compiles it."
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: deployment
7
+ user-invocable: true
8
+ allowed-tools: Read Grep Glob Bash summer_read_file summer_get_diagnostics
9
+ paths: ["export_presets.cfg", "project.godot", "summer.build.json", "world.json", "**/*.gd"]
10
+ ---
11
+
12
+ # /release-readiness: prove players can play it
13
+
14
+ Summer checks every upload: platforms, packs, and the files they name. Those
15
+ checks prove the export is well formed. They can't prove that a player who
16
+ presses **Play online** gets into a game. Each check below exists because a
17
+ real release passed every upload check and still failed for its players.
18
+
19
+ The creator docs have the same checklist, with the same numbers:
20
+ https://docs.summerengine.com/publishing/release-readiness (fetch it as `.md`).
21
+
22
+ ## When to run it
23
+
24
+ - Before you upload a new Build of a game that will go to players.
25
+ - Before you promote or release a version.
26
+ - After a release fails for players, to find the cause, and then to add the
27
+ check that would have caught it (see the last section).
28
+
29
+ For a jam build or a prototype nobody else plays, skip it.
30
+
31
+ ## How to report
32
+
33
+ Run every check that applies. Each check needs **evidence**: a command's
34
+ output or something you saw in the running game. Reading the project and
35
+ deciding it looks right is not evidence.
36
+
37
+ Report one line per check:
38
+
39
+ - **pass**, with the evidence;
40
+ - **fail**, with what you saw;
41
+ - **not applicable**, with the reason (for example, no server);
42
+ - **not run**, with what is still needed (for example, "needs a real online
43
+ join after publishing").
44
+
45
+ A check that was not run is not a pass. Show the list to the user before you
46
+ change anything; the user decides what to fix and whether to release with a
47
+ check still open.
48
+
49
+ ## Test the file you upload
50
+
51
+ Run the checks on the summer.games `.zip`, not on something close to it.
52
+ Export the bundle (in the editor: **Project > Export**, preset
53
+ **summer.games**, **Export Project**; from an agent: `summer_export_game`; or
54
+ from a terminal), then take the server pack and the packaged build file out
55
+ of it:
56
+
57
+ ```sh
58
+ <summer> --headless --path . --import
59
+ <summer> --headless --path . --export-release "summer.games" build/<game>.summer.zip
60
+ mkdir -p build/bundle
61
+ unzip -o build/<game>.summer.zip server.pck client.pck summer-bundle.json config/summer.build.json -d build/bundle
62
+ ```
63
+
64
+ A game without a server has no `server.pck` or `config/`; `unzip` then
65
+ warns about the missing names and extracts the rest.
66
+
67
+ `<summer>` is the Summer Engine executable. Two look-alikes hide real
68
+ failures:
69
+
70
+ - **A server pack exported on its own** with your server preset
71
+ (`--export-pack`) is not the bundle's `server.pck`. For example, it keeps
72
+ `gameId`, which the bundle leaves out, so it can pass check 6 while the
73
+ uploaded `.zip` fails it.
74
+ - **Local Play** always starts the authority scene by name, so it can't catch
75
+ check 1. It also runs without a hosted identity, so it can't catch check 6.
76
+
77
+ ## The checks
78
+
79
+ Checks 1 and 2 apply to every game with a server (`summer.build.json` names
80
+ a `server.exportPreset`). Checks 3 and 4 apply to every game with online
81
+ play. Checks 5, 6 and 7 apply to every game.
82
+
83
+ ### 1. The server pack starts the authority scene
84
+
85
+ **Why.** Summer starts a hosted World's `server.pck` with no scene argument,
86
+ so the pack's own main scene decides what runs. The server preset must carry
87
+ the custom feature `summer_authority`, and `project.godot` must set that
88
+ feature's main scene:
89
+
90
+ ```ini
91
+ [application]
92
+
93
+ run/main_scene="res://client/main.tscn"
94
+ run/main_scene.summer_client="res://client/main.tscn"
95
+ run/main_scene.summer_authority="res://authority/main.tscn"
96
+ ```
97
+
98
+ ```ini
99
+ # export_presets.cfg, the server preset
100
+ platform="Linux"
101
+ dedicated_server=true
102
+ custom_features="summer_authority"
103
+ ```
104
+
105
+ Without the feature, `run/main_scene.summer_authority` never applies and
106
+ the server starts the players' main scene, usually the title screen. That
107
+ scene never restores the World or tells Summer it is ready, so **every
108
+ online join fails with `world_start_timeout`**. The bundle manifest still
109
+ names the authority scene as the server's main scene, so reading the
110
+ manifest proves nothing.
111
+
112
+ **Check it.** Start the bundle's `server.pck` the way Summer does, with no
113
+ scene argument, and stop it after a few seconds:
114
+
115
+ ```sh
116
+ perl -e 'alarm shift; exec @ARGV' 15 <summer> --headless --verbose --main-pack build/bundle/server.pck
117
+ ```
118
+
119
+ Find the first `Completed load for: 'res://….tscn'` line. It must be the
120
+ authority scene: the `entry_point` of the `headless_engine` component in
121
+ `world.json`. Later lines may complain that there is no hosted World; that
122
+ is expected in a local run. Then confirm the source too: the server preset in
123
+ `export_presets.cfg` has `summer_authority` in `custom_features`, and
124
+ `project.godot` sets `run/main_scene.summer_authority`.
125
+
126
+ **Fix.** Add `summer_authority` to the server preset's **Features > Custom**,
127
+ set `application/run/main_scene.summer_authority` to the authority scene,
128
+ export again and rerun the check. If your Summer version's export refuses a
129
+ server pack that starts the wrong scene, that refusal is this check failing;
130
+ run the check anyway, because older versions don't refuse it.
131
+
132
+ ### 2. Join online with the version you release
133
+
134
+ **Why.** Check 1 runs on your computer. Players use a hosted server, and some
135
+ failures, such as check 6, only show up there.
136
+
137
+ **Check it.** Right after you publish or promote the version, open the game
138
+ in a Summer Games app as a player, join online and play until you are in the
139
+ game. Do it before you tell players about the update. An agent can't do this
140
+ step; report it as **not run** and ask the user to do it, then record what
141
+ they saw. If the join fails, see [Troubleshooting](#troubleshooting).
142
+
143
+ ### 3. Players can find online play
144
+
145
+ **Why.** If nobody, including you, reaches online play, nobody notices when
146
+ it breaks. A game hid online play behind a grown-ups setting, so its hosted
147
+ join was never tried before release, and it failed for every player who
148
+ found it.
149
+
150
+ **Check it.** Start the client as a new player and follow the default path
151
+ to online play. List every gate on that path: settings, parental or age
152
+ gates, debug toggles. A new player should reach online play without
153
+ changing a setting. If online play is off by default on purpose, the user
154
+ must confirm that decision, and then check 2 must run before every release.
155
+
156
+ ### 4. The server saves online progress
157
+
158
+ **Why.** Progress kept only in the player's local files is lost on
159
+ reinstall or a new device, and players can edit it.
160
+
161
+ **Check it.** In code, the authority loads each player's progress when they
162
+ join (`Summer.authority.player_data.load(session)`) and saves it with
163
+ `commit_public` or `commit_secret` (`summer-player-data`). Then play online,
164
+ earn something, leave, and join again from a fresh install or another
165
+ device. The progress must still be there. Local Play stores player data on
166
+ disk; only hosted play proves it lasts.
167
+
168
+ ### 5. Players can get back to the title
169
+
170
+ **Why.** A player with no way out of a session has to kill the app.
171
+
172
+ **Check it.** Play into a session, online and offline, and find the way
173
+ back: a pause menu or a **Leave** button. Use it, then start a new session
174
+ from the title. In online play, leaving should call
175
+ `Summer.client.leave()` before the title loads.
176
+
177
+ ### 6. The game doesn't hard-code its Game ID
178
+
179
+ **Why.** The summer.games export is portable: the bundle's
180
+ `summer.build.json` has no `gameId`. Summer takes the game's identity from
181
+ wherever it runs: the Summer Games app, the hosted server or Local Play.
182
+ Any other ID fails on the hosted server with `game_identity_mismatch`, "The
183
+ initialized Game ID does not match hosted runtime context." The authority
184
+ then stops before it restores the World or reports ready, and every online
185
+ join ends in `world_start_timeout`, even though check 1 passes. The Summer
186
+ Games app refuses a mismatched ID the same way.
187
+
188
+ **Check it.**
189
+
190
+ 1. Find every call: `grep -rn "Summer.initialize" --include=*.gd .`
191
+ 2. For each, trace the argument back to where it comes from. It must be
192
+ nothing (`Summer.initialize()`) or an ID the game got from Summer. It must
193
+ never be a literal, a placeholder, or a fallback such as
194
+ `"game.my-game"` used when `gameId` is missing.
195
+ 3. `cat build/bundle/config/summer.build.json`: it has no `gameId`, so
196
+ anything the game reads from this file at run time comes back empty.
197
+
198
+ Local Play and the local run in check 1 have no hosted identity, so a wrong
199
+ ID passes there. Only check 2 proves this one.
200
+
201
+ **Fix.** Call `Summer.initialize()` with no ID (Summer 0.7.1 and later), on
202
+ the client and on the authority.
203
+
204
+ ### 7. Export with a released Summer, and its scripts compile on the players' runtime
205
+
206
+ **Why.** The export records which Summer made it, in the client pack's
207
+ `.summer/export.json` and under `export` in the bundle's
208
+ `summer-bundle.json`: `summerVersion` and `engineSha`. Players' apps run the
209
+ game on a released Summer runtime with the same MAJOR.MINOR and a patch at
210
+ least the stamped one. A development build of Summer
211
+ can stamp a version that is already released while it has APIs that release
212
+ lacks. Scripts that use them then fail to compile on every player's device,
213
+ and the game opens to an empty or black window. Summer doesn't compile
214
+ scripts when you upload, so every upload check passes.
215
+
216
+ **Check it.**
217
+
218
+ 1. Read the stamp: `cat build/bundle/summer-bundle.json`. The export log
219
+ shows it too: `Exported by Summer <version> (engine <sha>)`.
220
+ 2. `summerVersion` must be a released Summer version, and `engineSha` must
221
+ equal that release's `engineSha` in
222
+ `downloads.summer.games/engine-templates/<summerVersion>/manifest.json`
223
+ (published for Summer 0.7.1 and later). If it differs, or that address has
224
+ nothing for the version, a development build made the export.
225
+ 3. Run the client pack on that released Summer, and fail on any compile
226
+ error. The run exits normally even when a script fails, so the grep is the
227
+ check:
228
+
229
+ ```sh
230
+ perl -e 'alarm shift; exec @ARGV' 60 <released-summer> --headless --verbose --main-pack build/bundle/client.pck --quit-after 600 > build/client-run.log 2>&1
231
+ grep -E 'SCRIPT ERROR|Parse Error|Failed to load script' build/client-run.log
232
+ ```
233
+
234
+ `<released-summer>` is the Summer executable of the stamped version from
235
+ the download page, not the development build that made the export. The
236
+ grep must print nothing. The run compiles the scripts that the main
237
+ scene and autoloads load; a script that loads only later in play compiles
238
+ when play reaches it, so check 2 still matters for online games.
239
+
240
+ **Fix.** Ask the user to install the current Summer release from
241
+ https://summerengine.com/download (or, with their OK, run
242
+ `summer install --yes`). Export again with it, and rerun this check on the
243
+ new `.zip` before you upload it.
244
+
245
+ ## Troubleshooting
246
+
247
+ ### Every online join fails with `world_start_timeout`, but Local Play works
248
+
249
+ Most likely, in this order:
250
+
251
+ 1. The server pack starts the wrong scene. Run check 1.
252
+ 2. The game passes a fixed Game ID. Run check 6.
253
+
254
+ After the fix, export a new `.zip`, upload it, promote it and run check 2.
255
+
256
+ ### The game opens to a blank window for every player
257
+
258
+ The game works in your editor, but every player sees an empty or black
259
+ window. Running the client pack as in check 7 prints
260
+ `Parse Error: Static function "…" not found` and
261
+ `Failed to load script "res://…"`. A development build of Summer made the
262
+ export, and the scripts use something the released version doesn't have.
263
+ Re-export with the current Summer release, upload the new version and
264
+ promote it.
265
+
266
+ ### The game server's log is empty
267
+
268
+ An empty server log is not proof that the server hung or never started. A
269
+ release server holds back what the game prints until it exits when it isn't
270
+ attached to a terminal, so its log can look empty while the title scene
271
+ runs. Don't debug from the empty log; run check 1 on your own computer to
272
+ see which scene starts.
273
+
274
+ ## Add a check after every incident
275
+
276
+ The list grows from real failures. When a release fails in a way no check
277
+ here would have caught:
278
+
279
+ 1. Fix the game, and record the cause in the project's `.summer/memory/`.
280
+ 2. Write the check that would have caught it: **Why**, **Check it** (a
281
+ command to run or something to observe, against the real summer.games
282
+ `.zip`), and **Fix**.
283
+ 3. Propose it for this skill and for the docs page
284
+ (`/publishing/release-readiness`), with the same number in both, through
285
+ a pull request to summerengine/summer and to the docs. Until it lands,
286
+ keep it in the project's memory so the next release runs it.
287
+
288
+ ## Checklist
289
+
290
+ - [ ] Ran the checks on the summer.games `.zip` you upload, not a separately exported pack.
291
+ - [ ] 1. The bundle's `server.pck`, run with no scene, loads the authority scene first.
292
+ - [ ] 2. A real online join with the released version reaches the game (or is reported as not run).
293
+ - [ ] 3. A new player reaches online play without changing a setting, or the user confirmed it is off on purpose.
294
+ - [ ] 4. Online progress is loaded and committed through authority player data, and survives a fresh install.
295
+ - [ ] 5. Players can get back to the title from inside a session, online and offline.
296
+ - [ ] 6. Every `Summer.initialize` passes no ID, or an ID the game got from Summer.
297
+ - [ ] 7. The export stamp names a released Summer and its `engineSha`, and `client.pck` run on that released Summer prints no `SCRIPT ERROR`, `Parse Error` or `Failed to load script`.
298
+ - [ ] One line per check reported to the user before anything is changed.
@@ -0,0 +1,41 @@
1
+ id: skill/release-readiness
2
+ kind: skill
3
+ version: 1.0.0
4
+ summary: "Before releasing a Summer game version, prove players can play it: server scene, online join, saved progress, no fixed Game ID, a released Summer compiles it."
5
+ use_when:
6
+ - "before uploading, promoting or releasing a new version to players: is it ready to release"
7
+ - "every online join fails with world_start_timeout, or the hosted server's log is empty, while Local Play works"
8
+ - "Summer.initialize fails with game_identity_mismatch: the initialized Game ID does not match hosted runtime context"
9
+ - "checking that a hosted game's server.pck starts the authority scene and not the title screen"
10
+ - "players get a blank or black screen when they open the released game, but it runs in the editor: client scripts fail with Parse Error or Failed to load script"
11
+ - "a game release failed for players and the check that would have caught it needs adding"
12
+ do_not_use_when:
13
+ - "only producing a local export for a jam or prototype nobody else plays — skill/export-and-ship"
14
+ facets:
15
+ lifecycle:
16
+ - launch
17
+ - support
18
+ domains:
19
+ - deployment
20
+ - multiplayer
21
+ - playtest
22
+ modalities:
23
+ - project
24
+ - docs
25
+ compatibility:
26
+ engine: ">=4.6"
27
+ related:
28
+ skills:
29
+ - skill/multiplayer
30
+ - skill/multiplayer-publish
31
+ - skill/multiplayer-testing
32
+ - skill/multiplayer-project
33
+ - skill/summer-player-data
34
+ - skill/publish-your-game
35
+ - skill/export-and-ship
36
+ - skill/make-game
37
+ - skill/bounded-engine-runs
38
+ source: official
39
+ license: MIT
40
+ status: preview
41
+ recommended: false
@@ -57,7 +57,7 @@ func _ready() -> void:
57
57
  spawner.state_group_created.connect(_on_group_created)
58
58
  spawner.entity_spawned.connect(_on_entity_spawned)
59
59
  spawner.event_received.connect(_on_event)
60
- var initialized: SummerResult = await Summer.initialize(Game.GAME_ID).get_result_or_completed_signal()
60
+ var initialized: SummerResult = await Summer.initialize().get_result_or_completed_signal()
61
61
  if not initialized.ok:
62
62
  push_error(initialized.message)
63
63
  return
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "summer-engine",
3
- "version": "3.5.0",
3
+ "version": "3.5.2",
4
4
  "description": "Local Summer CLI and MCP server for Summer Engine. Install and run the engine, connect Claude Code, Cursor, Codex, Gemini, and other agents, and build real games with bundled skills, hooks, and plugins.",
5
5
  "keywords": [
6
6
  "summer-engine",
@@ -4,9 +4,9 @@
4
4
  "collection": 0,
5
5
  "example": 0,
6
6
  "reference": 9,
7
- "skill": 122,
7
+ "skill": 123,
8
8
  "template": 19,
9
9
  "tool": 105
10
10
  },
11
- "total": 255
11
+ "total": 256
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry",
3
3
  "name": "summer",
4
- "version": "3.5.0",
4
+ "version": "3.5.2",
5
5
  "description": "Agent tooling for Summer Engine: MCP bridge, context primer, and game-dev skills. Use with the npm CLI for skill files on disk.",
6
6
  "contextFileName": "GEMINI.md",
7
7
  "mcpServers": {
@@ -93,6 +93,7 @@
93
93
  "./library/skills/psx-retro-rendering/",
94
94
  "./library/skills/publish-your-game/",
95
95
  "./library/skills/realtime-wet-surfaces/",
96
+ "./library/skills/release-readiness/",
96
97
  "./library/skills/remote-deploy/",
97
98
  "./library/skills/retarget/",
98
99
  "./library/skills/running-in-the-cloud/",
@@ -1599,7 +1599,7 @@
1599
1599
  "id": "skill/export-and-ship",
1600
1600
  "kind": "skill",
1601
1601
  "version": "1.0.3",
1602
- "content_hash": "6d8551fc18fd82ae6c71df61ca5798c0f0753a89b83e45824e3b87828b871d93",
1602
+ "content_hash": "d255ed8ed7d74ed8f8b8a67dde9e774fd877135392758e706ba34242e2453715",
1603
1603
  "summary": "Assess and prepare a game export: inventory installed templates and targets, validate release assets and config, produce supported builds after approval.",
1604
1604
  "use_when": [
1605
1605
  "the user wants to assess or prepare a Summer game export — Steam, itch, HTML5, iOS, Android targets as available in the installed build",
@@ -2146,7 +2146,7 @@
2146
2146
  "id": "skill/make-game",
2147
2147
  "kind": "skill",
2148
2148
  "version": "1.1.0",
2149
- "content_hash": "eba4e2b75b685fa814b218d8fd6c4cac0e4f4f692030645ab7e37d36c1caf83d",
2149
+ "content_hash": "6b254b93c236527ecf7d7a3128aa9daa3fe264e533a011ce7cb829df4fd90a32",
2150
2150
  "summary": "Orchestration spine for 'make me a game': brainstorm, plan, scaffold, mechanics, art, audio, polish, verify, ship — delegates to specialist skills.",
2151
2151
  "use_when": [
2152
2152
  "the user says 'make me a game', 'build me a game', 'I want to make a [genre] game', or 'let's build something' — running the full game-dev pipeline",
@@ -2173,6 +2173,7 @@
2173
2173
  "skills": [
2174
2174
  "skill/audio-direction",
2175
2175
  "skill/export-and-ship",
2176
+ "skill/release-readiness",
2176
2177
  "skill/design-mechanic",
2177
2178
  "skill/tune-performance",
2178
2179
  "skill/art-direction",
@@ -2193,7 +2194,7 @@
2193
2194
  "id": "skill/multiplayer",
2194
2195
  "kind": "skill",
2195
2196
  "version": "1.0.0",
2196
- "content_hash": "7a7212fba4b1aee4d9c9e5649b2ade77836829e6d9409e010b9731d79232305b",
2197
+ "content_hash": "06771fb6465e2ed96bb03900d98e1b53bb79e36cda4f5540d8371fc4308274d5",
2197
2198
  "summary": "Start here for Summer multiplayer: how the authority, clients, Worlds and Sessions fit, and which skill comes next.",
2198
2199
  "use_when": [
2199
2200
  "the user wants multiplayer, co-op, PvP, online play over the internet, or to play with friends in a Summer game",
@@ -2224,6 +2225,7 @@
2224
2225
  "skill/multiplayer-state",
2225
2226
  "skill/multiplayer-testing",
2226
2227
  "skill/multiplayer-publish",
2228
+ "skill/release-readiness",
2227
2229
  "skill/summer-matchmaking",
2228
2230
  "skill/summer-player-data"
2229
2231
  ]
@@ -2235,7 +2237,7 @@
2235
2237
  "id": "skill/multiplayer-movement",
2236
2238
  "kind": "skill",
2237
2239
  "version": "1.0.0",
2238
- "content_hash": "ab68306636a6916030e4c1a6c3e06fb41cefb13bb1b47a5c2f0fa08e24067508",
2240
+ "content_hash": "b48c1aa09e885071d5007ecd8863a38f9bd467fa216314bac329a6bbc8df6e68",
2239
2241
  "summary": "Client-side movement in Summer multiplayer: owners move instantly, others glide, the authority checks each pose.",
2240
2242
  "use_when": [
2241
2243
  "moving players in a Summer multiplayer game: each player's own character, other players drawn smoothly",
@@ -2274,7 +2276,7 @@
2274
2276
  "id": "skill/multiplayer-project",
2275
2277
  "kind": "skill",
2276
2278
  "version": "1.0.0",
2277
- "content_hash": "801ded4cdd3cff6ca060fa920c6738ffe26eff3e8cff63ea88dfe3d185931886",
2279
+ "content_hash": "c730c94e08e9807ad9404f4104eb1ad389c1a73e47a804929b31db29c8497b17",
2278
2280
  "summary": "Set up a Summer multiplayer project: both entry scenes, World and queue files, joining, and a first Local Play run.",
2279
2281
  "use_when": [
2280
2282
  "making a Summer game playable online or co-op: the first multiplayer setup",
@@ -2319,7 +2321,7 @@
2319
2321
  "id": "skill/multiplayer-publish",
2320
2322
  "kind": "skill",
2321
2323
  "version": "1.0.0",
2322
- "content_hash": "52117117e661cbd898d4faece8f72ef2304118999c80bce55a709619e8cec289",
2324
+ "content_hash": "9b716c90273e17b261123d2ee828bc7eadc1d7ca73ed040bf007cd20a2fbae96",
2323
2325
  "summary": "Ship a hosted Summer multiplayer game: the summer.games bundle, server preset, pre-upload checks, and a new Build.",
2324
2326
  "use_when": [
2325
2327
  "publishing a hosted Summer multiplayer game online so other players can join it",
@@ -2346,7 +2348,8 @@
2346
2348
  "skills": [
2347
2349
  "skill/multiplayer",
2348
2350
  "skill/multiplayer-project",
2349
- "skill/multiplayer-testing"
2351
+ "skill/multiplayer-testing",
2352
+ "skill/release-readiness"
2350
2353
  ]
2351
2354
  },
2352
2355
  "status": "preview",
@@ -2356,7 +2359,7 @@
2356
2359
  "id": "skill/multiplayer-state",
2357
2360
  "kind": "skill",
2358
2361
  "version": "1.0.0",
2359
- "content_hash": "64c1639093e7d51a39125236270278799fcddc42dab98cdf3d2649deec09d912",
2362
+ "content_hash": "38e79fe70609234ad717f00685b6165e2dd41ee860ce0b721a07ac2f56ad80f4",
2360
2363
  "summary": "Authority-owned game state in Summer multiplayer: shared and private State groups, validated Commands, and Events.",
2361
2364
  "use_when": [
2362
2365
  "score, health, doors, rounds, inventories or wallets in a Summer multiplayer game, and who owns them",
@@ -2400,7 +2403,7 @@
2400
2403
  "id": "skill/multiplayer-testing",
2401
2404
  "kind": "skill",
2402
2405
  "version": "1.0.0",
2403
- "content_hash": "dd727ec7384785d9515dd7e906c46d4229e600a752aef81f5a645e908470a536",
2406
+ "content_hash": "115c160d7e42a95589bac14a572811b0c9c3b26b37c5386b6eb647f2889ef162",
2404
2407
  "summary": "Test a Summer multiplayer game with Local Play: several players, a bad network, bots, and what a passing run shows.",
2405
2408
  "use_when": [
2406
2409
  "running or testing a Summer multiplayer game locally with several players (Local Play)",
@@ -2432,6 +2435,7 @@
2432
2435
  "skill/multiplayer-movement",
2433
2436
  "skill/multiplayer-state",
2434
2437
  "skill/multiplayer-publish",
2438
+ "skill/release-readiness",
2435
2439
  "skill/summer-friends",
2436
2440
  "skill/summer-match-results",
2437
2441
  "skill/summer-matchmaking",
@@ -2824,7 +2828,7 @@
2824
2828
  "id": "skill/publish-your-game",
2825
2829
  "kind": "skill",
2826
2830
  "version": "1.0.0",
2827
- "content_hash": "b39692641d859b1d5a9d9b2e990bed521b0aba52319d336b4e3633c253a07a60",
2831
+ "content_hash": "0328c6d71f662059cc2514864e005c2e71cf90811553ef2a2ecabbbf9cb4305f",
2828
2832
  "summary": "Publish a Summer game on Summer Games through MCP: store page, art, build upload, submit, and one approval link for the owner.",
2829
2833
  "use_when": [
2830
2834
  "the user says 'publish my game', 'put it on summer.games', 'launch it on the store' or 'submit it for review'",
@@ -2892,6 +2896,54 @@
2892
2896
  "status": "preview",
2893
2897
  "recommended": false
2894
2898
  },
2899
+ {
2900
+ "id": "skill/release-readiness",
2901
+ "kind": "skill",
2902
+ "version": "1.0.0",
2903
+ "content_hash": "f6336bb2d8c2b5915a397d5a49341d142e8988ee3091d557950da0307f47761d",
2904
+ "summary": "Before releasing a Summer game version, prove players can play it: server scene, online join, saved progress, no fixed Game ID, a released Summer compiles it.",
2905
+ "use_when": [
2906
+ "before uploading, promoting or releasing a new version to players: is it ready to release",
2907
+ "every online join fails with world_start_timeout, or the hosted server's log is empty, while Local Play works",
2908
+ "Summer.initialize fails with game_identity_mismatch: the initialized Game ID does not match hosted runtime context",
2909
+ "checking that a hosted game's server.pck starts the authority scene and not the title screen",
2910
+ "players get a blank or black screen when they open the released game, but it runs in the editor: client scripts fail with Parse Error or Failed to load script",
2911
+ "a game release failed for players and the check that would have caught it needs adding"
2912
+ ],
2913
+ "facets": {
2914
+ "lifecycle": [
2915
+ "launch",
2916
+ "support"
2917
+ ],
2918
+ "domains": [
2919
+ "deployment",
2920
+ "multiplayer",
2921
+ "playtest"
2922
+ ],
2923
+ "modalities": [
2924
+ "project",
2925
+ "docs"
2926
+ ]
2927
+ },
2928
+ "compatibility": {
2929
+ "engine": ">=4.6"
2930
+ },
2931
+ "related": {
2932
+ "skills": [
2933
+ "skill/multiplayer",
2934
+ "skill/multiplayer-publish",
2935
+ "skill/multiplayer-testing",
2936
+ "skill/multiplayer-project",
2937
+ "skill/summer-player-data",
2938
+ "skill/publish-your-game",
2939
+ "skill/export-and-ship",
2940
+ "skill/make-game",
2941
+ "skill/bounded-engine-runs"
2942
+ ]
2943
+ },
2944
+ "status": "preview",
2945
+ "recommended": false
2946
+ },
2895
2947
  {
2896
2948
  "id": "skill/remote-deploy",
2897
2949
  "kind": "skill",
@@ -3786,7 +3838,7 @@
3786
3838
  "id": "skill/summer-parties",
3787
3839
  "kind": "skill",
3788
3840
  "version": "1.0.0",
3789
- "content_hash": "f32352dafa1077cf124a7ef4136041333bc8c73110fe37545e393ec6d862f4cd",
3841
+ "content_hash": "3e306760574435b38fa0d0aefddf9569ea733a1dce0f279bed1c1e7fc072a7c8",
3790
3842
  "summary": "Let a Summer party play together: the leader presses Play, members follow into the same match. Hosted only.",
3791
3843
  "use_when": [
3792
3844
  "friends in a Summer party should land in the same multiplayer match: party play, play with friends, squad up",
@@ -11,7 +11,7 @@
11
11
  {
12
12
  "name": "summer",
13
13
  "source": "./",
14
- "version": "3.5.0",
14
+ "version": "3.5.2",
15
15
  "description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 105-tool MCP bridge to the local desktop app.",
16
16
  "author": {
17
17
  "name": "Summer Engine",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "_generated": "GENERATED from integrations/claude — do not edit; npm run generate:registry",
4
4
  "name": "summer",
5
- "version": "3.5.0",
5
+ "version": "3.5.2",
6
6
  "description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 105-tool MCP bridge to the local desktop app.",
7
7
  "author": {
8
8
  "name": "Summer Engine",
@@ -96,6 +96,7 @@
96
96
  "./library/skills/psx-retro-rendering/",
97
97
  "./library/skills/publish-your-game/",
98
98
  "./library/skills/realtime-wet-surfaces/",
99
+ "./library/skills/release-readiness/",
99
100
  "./library/skills/remote-deploy/",
100
101
  "./library/skills/retarget/",
101
102
  "./library/skills/running-in-the-cloud/",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_generated": "GENERATED from integrations/codex — do not edit; npm run generate:registry",
3
3
  "name": "summer",
4
- "version": "3.5.0",
4
+ "version": "3.5.2",
5
5
  "description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 105-tool MCP bridge. Build games by talking.",
6
6
  "author": {
7
7
  "name": "Summer Engine",
@@ -91,6 +91,7 @@
91
91
  "./library/skills/psx-retro-rendering/",
92
92
  "./library/skills/publish-your-game/",
93
93
  "./library/skills/realtime-wet-surfaces/",
94
+ "./library/skills/release-readiness/",
94
95
  "./library/skills/remote-deploy/",
95
96
  "./library/skills/retarget/",
96
97
  "./library/skills/running-in-the-cloud/",
@@ -3,7 +3,7 @@
3
3
  "_generated": "GENERATED from integrations/cursor — do not edit; npm run generate:registry",
4
4
  "name": "summer",
5
5
  "displayName": "Summer",
6
- "version": "3.5.0",
6
+ "version": "3.5.2",
7
7
  "description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 105-tool MCP bridge to the local desktop app.",
8
8
  "author": {
9
9
  "name": "Summer Engine",
@@ -103,6 +103,7 @@
103
103
  "./library/skills/psx-retro-rendering/",
104
104
  "./library/skills/publish-your-game/",
105
105
  "./library/skills/realtime-wet-surfaces/",
106
+ "./library/skills/release-readiness/",
106
107
  "./library/skills/remote-deploy/",
107
108
  "./library/skills/retarget/",
108
109
  "./library/skills/running-in-the-cloud/",
@@ -2,7 +2,7 @@
2
2
  "_generated": "GENERATED from integrations/factory — do not edit; npm run generate:registry",
3
3
  "name": "summer",
4
4
  "description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 105-tool MCP bridge to the local desktop app.",
5
- "version": "3.5.0",
5
+ "version": "3.5.2",
6
6
  "author": {
7
7
  "name": "Summer Engine",
8
8
  "email": "founders@summerengine.com",
@@ -88,6 +88,7 @@
88
88
  "./library/skills/psx-retro-rendering/",
89
89
  "./library/skills/publish-your-game/",
90
90
  "./library/skills/realtime-wet-surfaces/",
91
+ "./library/skills/release-readiness/",
91
92
  "./library/skills/remote-deploy/",
92
93
  "./library/skills/retarget/",
93
94
  "./library/skills/running-in-the-cloud/",