summer-engine 2.6.6 → 2.8.0

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 (168) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +4 -1
  3. package/.codex-plugin/plugin.json +6 -2
  4. package/.cursor-plugin/plugin.json +5 -1
  5. package/.opencode/INSTALL.md +1 -1
  6. package/.opencode/plugins/summer.js +2 -2
  7. package/AGENTS.md +11 -7
  8. package/CHANGELOG.md +40 -0
  9. package/GEMINI.md +9 -7
  10. package/README.md +63 -21
  11. package/_persona/summer/SKILL.md +1 -0
  12. package/assets/autopilot/README.md +51 -0
  13. package/assets/autopilot/autopilot.gd +222 -0
  14. package/assets/autopilot/probe_base.gd +262 -0
  15. package/assets/autopilot/run.sh +78 -0
  16. package/commands/gameskill.md +11 -2
  17. package/commands/summer.md +13 -0
  18. package/dist/bin/summer.js +12 -0
  19. package/dist/commands/config.d.ts +2 -0
  20. package/dist/commands/config.js +53 -0
  21. package/dist/commands/create.d.ts +1 -0
  22. package/dist/commands/create.js +38 -6
  23. package/dist/commands/debug.d.ts +2 -0
  24. package/dist/commands/debug.js +44 -0
  25. package/dist/commands/doctor.js +112 -8
  26. package/dist/commands/list.js +1 -1
  27. package/dist/commands/login.d.ts +19 -0
  28. package/dist/commands/login.js +123 -36
  29. package/dist/commands/logout.js +3 -16
  30. package/dist/commands/logs.d.ts +2 -0
  31. package/dist/commands/logs.js +19 -0
  32. package/dist/commands/mcp.js +7 -2
  33. package/dist/commands/open.js +1 -1
  34. package/dist/commands/publish.d.ts +2 -0
  35. package/dist/commands/publish.js +20 -0
  36. package/dist/commands/releases.d.ts +2 -0
  37. package/dist/commands/releases.js +20 -0
  38. package/dist/commands/run.js +1 -1
  39. package/dist/commands/skills.js +1 -1
  40. package/dist/lib/api-client.d.ts +15 -4
  41. package/dist/lib/api-client.js +138 -13
  42. package/dist/lib/async-op-lifecycle.d.ts +7 -2
  43. package/dist/lib/async-op-lifecycle.js +32 -9
  44. package/dist/lib/auth.d.ts +40 -12
  45. package/dist/lib/auth.js +173 -37
  46. package/dist/lib/cloud/engine-bridge.d.ts +17 -4
  47. package/dist/lib/cloud/engine-bridge.js +32 -6
  48. package/dist/lib/config.d.ts +20 -0
  49. package/dist/lib/config.js +142 -0
  50. package/dist/lib/creator.d.ts +93 -0
  51. package/dist/lib/creator.js +393 -0
  52. package/dist/lib/debug-report.d.ts +50 -0
  53. package/dist/lib/debug-report.js +308 -0
  54. package/dist/lib/engine.d.ts +35 -2
  55. package/dist/lib/engine.js +240 -6
  56. package/dist/lib/game-task-plan.js +4 -4
  57. package/dist/lib/mcp-boot-notice.d.ts +3 -0
  58. package/dist/lib/mcp-boot-notice.js +7 -0
  59. package/dist/lib/mcp-log.d.ts +3 -0
  60. package/dist/lib/mcp-log.js +72 -0
  61. package/dist/lib/public-surface-paths.d.ts +13 -0
  62. package/dist/lib/public-surface-paths.js +42 -0
  63. package/dist/lib/skills-registry.d.ts +33 -1
  64. package/dist/lib/skills-registry.js +55 -0
  65. package/dist/lib/store.d.ts +14 -0
  66. package/dist/lib/store.js +145 -0
  67. package/dist/lib/summer-compatibility.d.ts +6 -0
  68. package/dist/lib/summer-compatibility.js +22 -0
  69. package/dist/mcp/server.d.ts +10 -3
  70. package/dist/mcp/server.js +104 -11
  71. package/dist/mcp/tools/asset-tools.js +33 -12
  72. package/dist/mcp/tools/cloud-tools.js +15 -15
  73. package/dist/mcp/tools/creator-tools.d.ts +2 -0
  74. package/dist/mcp/tools/creator-tools.js +105 -0
  75. package/dist/mcp/tools/debug-tools.js +44 -1
  76. package/dist/mcp/tools/file-tools.d.ts +2 -0
  77. package/dist/mcp/tools/file-tools.js +154 -0
  78. package/dist/mcp/tools/generate-tools.js +159 -11
  79. package/dist/mcp/tools/project-tools.js +37 -27
  80. package/dist/mcp/tools/scene-tools.js +106 -29
  81. package/dist/mcp/tools/visual-tools.js +4 -3
  82. package/dist/mcp/tools/with-engine.js +4 -4
  83. package/hooks/session-start.sh +5 -5
  84. package/package.json +3 -1
  85. package/references/collaborative-protocol.md +50 -0
  86. package/references/gd-style.md +121 -0
  87. package/references/godot-version.md +51 -0
  88. package/references/mcp-tools-reference.md +199 -0
  89. package/references/public-surface-language.md +30 -0
  90. package/references/summer-folder.md +90 -0
  91. package/references/template-registry.md +73 -0
  92. package/skills/2d-assets/character-portrait/SKILL.md +17 -12
  93. package/skills/2d-assets/concept-art/SKILL.md +10 -9
  94. package/skills/2d-assets/create-asset-sheet/SKILL.md +17 -15
  95. package/skills/2d-assets/pixel-art/SKILL.md +36 -20
  96. package/skills/2d-assets/skybox-panorama/SKILL.md +32 -37
  97. package/skills/2d-assets/sprite-sheet/SKILL.md +40 -35
  98. package/skills/2d-assets/tileable-texture/SKILL.md +28 -22
  99. package/skills/2d-assets/ui-graphics/SKILL.md +46 -32
  100. package/skills/2d-assets/use-widget-asset/SKILL.md +8 -6
  101. package/skills/3d-assets/character-model/SKILL.md +34 -19
  102. package/skills/3d-assets/environment-kit/SKILL.md +11 -5
  103. package/skills/3d-assets/organic-model/SKILL.md +8 -5
  104. package/skills/3d-assets/prop-model/SKILL.md +9 -3
  105. package/skills/3d-assets/vehicle-model/SKILL.md +32 -19
  106. package/skills/README.md +1 -1
  107. package/skills/ai-and-npcs/design-npc/SKILL.md +31 -13
  108. package/skills/animation/animation-tree/SKILL.md +39 -15
  109. package/skills/animation/facial-and-lipsync/SKILL.md +25 -8
  110. package/skills/animation/generate-motion/SKILL.md +47 -15
  111. package/skills/animation/procedural-animation/SKILL.md +31 -13
  112. package/skills/animation/retarget/SKILL.md +127 -79
  113. package/skills/audio/adaptive-music/SKILL.md +24 -20
  114. package/skills/audio/ambient-bed/SKILL.md +22 -16
  115. package/skills/audio/audio-direction/SKILL.md +15 -10
  116. package/skills/audio/music-track/SKILL.md +18 -12
  117. package/skills/audio/sound-effect/SKILL.md +17 -12
  118. package/skills/audio/voice-line/SKILL.md +42 -42
  119. package/skills/character-controllers/fps-controller/SKILL.md +26 -16
  120. package/skills/debugging/debug/SKILL.md +74 -20
  121. package/skills/deployment/export-and-ship/SKILL.md +105 -38
  122. package/skills/deployment/remote-deploy/SKILL.md +140 -0
  123. package/skills/gameplay-mechanics/auto-fire-targeting/SKILL.md +26 -1
  124. package/skills/gameplay-mechanics/design-mechanic/SKILL.md +23 -15
  125. package/skills/level-design/design-level/SKILL.md +22 -8
  126. package/skills/level-design/scene-to-level/SKILL.md +13 -7
  127. package/skills/multiplayer-and-networking/host-authoritative-state/SKILL.md +8 -8
  128. package/skills/multiplayer-and-networking/peer-to-peer-multiplayer/SKILL.md +2 -7
  129. package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +26 -18
  130. package/skills/performance/tune-performance/SKILL.md +51 -32
  131. package/skills/rendering-and-lighting/3d-lighting/SKILL.md +34 -5
  132. package/skills/rendering-and-lighting/art-direction/SKILL.md +6 -8
  133. package/skills/scene-and-project/brainstorm-game/SKILL.md +7 -9
  134. package/skills/scene-and-project/make-game/SKILL.md +2 -1
  135. package/skills/scene-and-project/play/SKILL.md +10 -4
  136. package/skills/scene-and-project/scene-composition/SKILL.md +21 -8
  137. package/skills/scene-and-project/summer-cloud/SKILL.md +92 -0
  138. package/skills/scripting-patterns/gdscript-patterns/SKILL.md +1 -1
  139. package/skills/ui-and-ux/ui-basics/SKILL.md +16 -7
  140. package/skills/video/animated-loop/SKILL.md +63 -39
  141. package/skills/video/cinematic-cutscene/SKILL.md +66 -30
  142. package/skills/video/trailer-shot/SKILL.md +30 -21
  143. package/skills/visual-effects/_building-blocks/additive-billboard-particles.md +25 -16
  144. package/skills/visual-effects/_building-blocks/trauma-shake-snippet.md +5 -3
  145. package/skills/visual-effects/game-feel/SKILL.md +51 -33
  146. package/skills/visual-effects/recipes/dissolve/SKILL.md +51 -9
  147. package/skills/visual-effects/recipes/fire/SKILL.md +136 -49
  148. package/skills/visual-effects/recipes/hit-spark/SKILL.md +45 -8
  149. package/skills/visual-effects/recipes/lightning/SKILL.md +59 -27
  150. package/skills/visual-effects/recipes/magic-glow/SKILL.md +59 -26
  151. package/skills/visual-effects/recipes/muzzle-flash/SKILL.md +68 -25
  152. package/skills/visual-effects/recipes/smoke/SKILL.md +89 -28
  153. package/skills/visual-effects/recipes/water-ripple/SKILL.md +83 -23
  154. package/skills/workflow/brainstorming/SKILL.md +1 -1
  155. package/skills/workflow/debugging-game-feel/SKILL.md +29 -9
  156. package/skills/workflow/diagnosing-perf-regressions/SKILL.md +46 -21
  157. package/skills/workflow/gameskill/SKILL.md +11 -2
  158. package/skills/workflow/headless-scripting/SKILL.md +407 -0
  159. package/skills/workflow/investigating-bugs/SKILL.md +4 -2
  160. package/skills/workflow/mcpupdate/SKILL.md +9 -9
  161. package/skills/workflow/playtesting-a-feature/SKILL.md +94 -21
  162. package/skills/workflow/skill-create/SKILL.md +7 -7
  163. package/skills/workflow/skill-test/SKILL.md +3 -3
  164. package/skills/workflow/using-summer/SKILL.md +32 -3
  165. package/skills/workflow/verification-before-completion/SKILL.md +2 -0
  166. package/skills/workflow/writing-plans/SKILL.md +7 -7
  167. package/skills/workflow/writing-skills/SKILL.md +7 -5
  168. package/skills/workflow/writing-skills/testing-skills-with-subagents.md +1 -1
@@ -29,12 +29,9 @@ Static analysis is necessary but never sufficient for gameplay features. A clean
29
29
  NO "FEATURE SHIPPED" CLAIM WITHOUT A PLAYED WALKTHROUGH
30
30
  ```
31
31
 
32
- If you have not, in this session, called `summer_play` and either:
32
+ If you have not, in this session, driven the feature and read back what happened, you cannot claim it works.
33
33
 
34
- 1. Walked the feature yourself via MCP-driven repros where possible, OR
35
- 2. Asked the user to walk it and confirmed the result via `summer_get_console` / `summer_get_debugger_errors`
36
-
37
- — then you cannot claim the feature works.
34
+ **You walk the feature. Not the user.** A `RunVerification` probe presses your game's real inputs, reads state back across frames, and saves real rendered frames. Handing the walkthrough to the user is a last resort for things a probe genuinely cannot judge — see [What only a human can answer](#what-only-a-human-can-answer) — not the default.
38
35
 
39
36
  ## The Loop
40
37
 
@@ -51,7 +48,57 @@ Before pressing play, write down — in one or two sentences — what "feature w
51
48
 
52
49
  If you cannot describe the golden path in one sentence, you do not understand the feature well enough to verify it. Ask the user.
53
50
 
54
- ### 2. Press play
51
+ ### 2. Walk the golden path with a probe
52
+
53
+ Write the golden path as a `RunVerification` probe and send it as a raw op through `summer_batch`. The engine spawns a hidden, disposable game instance positioned offscreen, runs your GDScript, writes `results.json` plus any frames you saved, and kills the instance. It never touches the user's open editor, and nothing appears on their screen.
54
+
55
+ ```
56
+ summer_batch ops:[{
57
+ "op": "RunVerification",
58
+ "probe_source": "<your GDScript>",
59
+ "max_seconds": 20
60
+ }]
61
+ ```
62
+
63
+ A probe extends `SummerProbeBase` and has: `report(key, value)`, `save_frame(name)`, `dump_tree()`, `press(action, hold_ms)`, `key(keycode, hold_ms)`, `finish()`.
64
+
65
+ ```gdscript
66
+ extends SummerProbeBase
67
+
68
+ func _ready() -> void:
69
+ await super._ready()
70
+ for i in 20:
71
+ await get_tree().physics_frame # let the scene settle
72
+
73
+ var player := get_tree().current_scene.get_node("Player")
74
+ var start: Vector2 = player.position
75
+ save_frame("00_start")
76
+
77
+ await press("move_right", 500) # await, or the hold never elapses
78
+ await get_tree().physics_frame
79
+ report("walked_right", player.position.x > start.x + 50)
80
+ save_frame("01_after_walk")
81
+
82
+ var y_before: float = player.position.y
83
+ await press("jump", 50)
84
+ var apex := y_before
85
+ for i in 25:
86
+ await get_tree().physics_frame
87
+ apex = min(apex, player.position.y)
88
+ report("jumped", apex < y_before - 30)
89
+ save_frame("02_after_jump")
90
+
91
+ finish()
92
+ ```
93
+
94
+ Four rules the probe API will punish you for breaking:
95
+
96
+ - **`press()` and `key()` are coroutines.** `await press("jump", 50)` — calling them bare starts the press and never releases it. You also cannot store one in a variable and await it later; it returns void.
97
+ - **Assert on physics-frame-derived state.** `await get_tree().physics_frame` N times, then read positions. That is reproducible run to run.
98
+ - **Assert inequalities, never exact values.** `press(hold_ms)` waits on the wall clock, so the number of physics frames a key is held drifts between runs — the same walk lands on x=245 one run and x=250 the next. `position.x > start.x + 50` is a real assertion; `position.x == 250.0` is a flaky test you wrote yourself.
99
+ - **The global RNG is not seeded.** Anything downstream of `randf()` differs every run. Assert ranges, or seed it yourself in the probe.
100
+
101
+ If the probe cannot express the check — no `SummerProbeBase` in this build, or a genuinely out-of-process feature — fall back to `summer_play` + console reads:
55
102
 
56
103
  ```
57
104
  summer_clear_console
@@ -61,14 +108,9 @@ If you cannot describe the golden path in one sentence, you do not understand th
61
108
 
62
109
  `summer_clear_console` first so the buffer is not polluted by a previous session's errors. If you skip this, you will chase ghost errors that have nothing to do with the current feature.
63
110
 
64
- ### 3. Walk the golden path
65
-
66
- The MCP cannot simulate keyboard input, mouse motion, or controller. So either:
67
-
68
- - **The user plays.** Ask them to walk the exact golden path you defined. Wait for their confirmation that they did. Then check state.
69
- - **You drive via scene mutation.** For features that can be triggered through `summer_set_prop` or function calls exposed to the editor (e.g. autoload methods), drive them programmatically. Be honest about which path you took.
111
+ ### 3. Read back what actually happened
70
112
 
71
- After the walkthrough:
113
+ The probe's `results.json` is your primary evidence. Then check the editor's own view:
72
114
 
73
115
  ```
74
116
  summer_get_console (look for unexpected prints, warnings)
@@ -76,8 +118,20 @@ After the walkthrough:
76
118
  summer_get_diagnostics (overall counts)
77
119
  ```
78
120
 
121
+ A probe also collects engine errors itself — `results.json` carries `errors_seen`. Read it. An empty `reports` block with `finished: false` means the probe hit its `max_seconds` ceiling before calling `finish()`, which is a failure, not a pass.
122
+
79
123
  If anything is non-zero or unexpected, the feature is not done. Go to `summer:debug`.
80
124
 
125
+ ### What only a human can answer
126
+
127
+ A probe reports facts. It cannot hold an opinion. Ask the user only when the question is genuinely experiential:
128
+
129
+ - **Does it feel right?** Floaty jumps, sluggish input, mushy hit feedback — see `summer:debugging-game-feel`.
130
+ - **Does it look good?** Composition, colour, readability. A probe can prove a light exists and prove the frame is not black; it cannot tell you the scene is ugly.
131
+ - **Is this fun?** Not a measurable property.
132
+
133
+ "I cannot simulate input" is not on that list, and has not been true since `RunVerification` shipped. If you catch yourself asking the user to press a key, write the probe instead.
134
+
81
135
  ### 4. Probe the edges
82
136
 
83
137
  The golden path proves the happy case. Most gameplay bugs live in the edges. Before claiming done, probe at least these four classes:
@@ -120,13 +174,15 @@ The console catches "looks right but isn't right" cases — silent errors, depre
120
174
 
121
175
  ## When to record video vs when console+diagnostics is enough
122
176
 
123
- Console + diagnostics + your walkthrough description is usually enough. Ask the user for a video or screenshot when:
177
+ Your probe already produces the visual record: `save_frame()` writes a real rendered JPEG at each step, and a sequence of them across a movement is a flipbook of the feature happening. **You are not the only one who cannot see the game — until you save frames, nobody can.** Save them at the interesting moments and read them back.
178
+
179
+ Ask the user for a video or a live look only when:
124
180
 
125
- - The feature is **visual** (camera, lighting, particles, animation, UI layout) and the user is the only one who can see the result.
126
181
  - The feature **feels wrong** — see `summer:debugging-game-feel`. Frame counts and console output cannot capture "the jump feels floaty."
127
- - The bug is **non-deterministic** — sometimes-works features need a recording to share with anyone diagnosing later.
182
+ - The bug is **non-deterministic** and your probe cannot reproduce it after several attempts.
183
+ - The judgement is aesthetic — see [What only a human can answer](#what-only-a-human-can-answer).
128
184
 
129
- Don't ask for video reflexively. Most features can be verified through `summer_get_console` + a "did the golden path work?" question. Cost-aware.
185
+ Don't ask reflexively. A saved frame sequence answers most "did it visually work" questions without involving the user at all.
130
186
 
131
187
  ## Red Flags — STOP
132
188
 
@@ -137,10 +193,15 @@ Don't ask for video reflexively. Most features can be verified through `summer_g
137
193
  | "User said make this — I'll move on once it builds" | The user wants the feature to work, not to build. |
138
194
  | "It would take too long to play" | Playtest takes 60 seconds. Shipping a broken feature costs hours. |
139
195
  | "The unit test passes" | Unit tests cover code paths, not gameplay sequences. |
140
- | "I already played it in a previous session" | State changed. Press play in this session. |
196
+ | "I already played it in a previous session" | State changed. Verify in this session. |
141
197
  | "I'll let the user catch any issues" | That is the user's job description for a non-AI engineer. Yours is to ship working features. |
142
198
  | Skipping `summer_clear_console` before `summer_play` | You will chase last session's errors. |
143
199
  | Skipping `summer_get_console` because diagnostics looked fine | Silent warnings and signal misfires hide there. |
200
+ | "The MCP can't simulate input, so the user has to test it" | False. `RunVerification` presses actions and keys. Write the probe. |
201
+ | "I'll ask the user to press jump and tell me what happened" | You can press jump. They should not have to QA your work. |
202
+ | Probe returned `finished: false`, you called it a pass | It hit `max_seconds` before `finish()`. That is a failure. |
203
+ | Asserting `position.x == 250.0` in a probe | Hold time is wall-clock. Assert `> start.x + 50`. |
204
+ | `press("jump", 50)` without `await` | It is a coroutine. The key is never released. |
144
205
 
145
206
  ## Rationalization Prevention
146
207
 
@@ -154,10 +215,22 @@ Don't ask for video reflexively. Most features can be verified through `summer_g
154
215
 
155
216
  ## When the engine isn't running
156
217
 
157
- If `summer_play` returns "Summer Engine is not running":
218
+ `RunVerification` is dispatched by the editor, so it needs the editor running. **The verify instance itself does not.** You can spawn exactly the same probe runtime straight from your shell, with no editor at all:
219
+
220
+ ```bash
221
+ /Applications/Summer.app/Contents/MacOS/Summer \
222
+ --path <project-dir> \
223
+ --summer-verify <abs-path-to-probe.gd> \
224
+ --summer-verify-out <abs-out-dir> \
225
+ --summer-verify-max 30
226
+ ```
227
+
228
+ Then read `<out-dir>/results.json` and the JPEGs beside it. The probe must extend the base class — copy `summer_probe_base.gd` into the project and `extends "res://summer_probe_base.gd"`, or use the project's `tests/autopilot/` scaffold if it has one. See `summer:headless-scripting` for the full pattern and its traps.
229
+
230
+ So if `summer_play` returns "Summer Engine is not running":
158
231
 
159
- 1. Tell the user: `summer run` to start it.
160
- 2. Do not claim the feature is verified from static analysis alone. Say: "Code compiles and looks correct, but I cannot playtest until the engine is running."
232
+ 1. Run the probe directly from the shell as above. That is a real playtest.
233
+ 2. Only if that is also impossible: tell the user `summer run` to start the editor, and say plainly "code compiles and looks correct, but I have not played it" — do not claim verification from static analysis alone.
161
234
  3. When the engine comes back, run the loop.
162
235
 
163
236
  ## The Bottom Line
@@ -15,9 +15,9 @@ allowed-tools: Read Write Glob Grep
15
15
 
16
16
  Ask the user:
17
17
  - **Name** (kebab-case, ≤ 64 chars). Example: `state-machine-patterns`.
18
- - **Category** (one of the 20 in `SKILL_CATEGORIES` at `src/lib/skills-registry.ts`). Example: `scripting-patterns`.
18
+ - **Category** (must be one of the values in the `SKILL_CATEGORIES` array at `src/lib/skills-registry.ts` — read it, do not guess). Example: `scripting-patterns`.
19
19
  - **One-sentence description** for the frontmatter.
20
- - **Template-id** (optional). Lookup against `references/template-registry.md`.
20
+ - **Template-id** (optional). Lookup against `../../../references/template-registry.md`.
21
21
 
22
22
  ### 2. Create the folder
23
23
 
@@ -80,13 +80,13 @@ May I <action>?
80
80
 
81
81
  → **template-id**: `<template-id>`
82
82
  → **Repo**: <github URL from references/template-registry.md>
83
- → **Bootstrap**: `summer template clone <template-id> my-game`
83
+ → **Bootstrap**: `summer create <template-id> my-game` (see `summer list templates` for the slugs)
84
84
 
85
85
  ## See also
86
86
 
87
- - `references/godot-version.md`
88
- - `references/mcp-tools-reference.md`
89
- - `references/gd-style.md`
87
+ - `../../../references/godot-version.md`
88
+ - `../../../references/mcp-tools-reference.md`
89
+ - `../../../references/gd-style.md`
90
90
  - (other relevant skills)
91
91
  ```
92
92
 
@@ -149,5 +149,5 @@ This skill writes files (the new skill folder + plugin manifest update + TS regi
149
149
 
150
150
  ## See also
151
151
 
152
- - `references/collaborative-protocol.md`
152
+ - `../../../references/collaborative-protocol.md`
153
153
  - `workflow/skill-test/SKILL.md`
@@ -21,7 +21,7 @@ For a single skill at `skills/<category>/<name>/`, run these checks:
21
21
  - At least one `summer_*` MCP tool example.
22
22
  - At least one file-edit fallback block (e.g., raw `.tscn` snippet) OR an explicit "no fallback for this — Summer MCP required" note.
23
23
  4. **Collaborative protocol.** If the skill triggers user-visible writes, body must contain at least one of: `May I`, `I'm about to`, `Continue?`, `OK?`, `Proceed?`. Skills that only inspect/read are exempt.
24
- 5. **Template-id resolved.** If the skill's frontmatter declares `template-id: <id>`, that id must exist in `references/template-registry.md`.
24
+ 5. **Template-id resolved.** If the skill's frontmatter declares `template-id: <id>`, that id must exist in `../../../references/template-registry.md`.
25
25
  6. **Tests/spec.md present.** Every skill in a non-`_meta` category must have `tests/spec.md` with at least one `## Case` heading.
26
26
  7. **Relative links resolve.** Every `](../references/...)`, `](../../references/...)`, `](./references/...)`, and `](./examples/...)` link must point at an existing file (FAIL if broken). Forward references in `## See also` to other SKILL.md files (e.g., `[design-mechanic](../../gameplay-mechanics/design-mechanic/SKILL.md)`) are allowed to dangle and only WARN if the target is missing — the catalog evolves and skills should be free to point at planned skills.
27
27
 
@@ -80,7 +80,7 @@ This skill is **read-only**. It never writes. No "May I" needed.
80
80
 
81
81
  ## See also
82
82
 
83
- - `references/collaborative-protocol.md`
84
- - `references/template-registry.md`
83
+ - `../../../references/collaborative-protocol.md`
84
+ - `../../../references/template-registry.md`
85
85
  - `tests/runner.md`
86
86
  - `tests/specs/` — per-skill behavioral specs
@@ -36,12 +36,22 @@ If `CLAUDE.md` says "skip the brainstorm, just build it" and a skill says "alway
36
36
  Two layers:
37
37
 
38
38
  - **Skills** — discipline guides that fire on specific situations: brainstorming a game, designing a mechanic, building an FPS controller, debugging a crash, shipping a build. Each one is a SKILL.md you load via the Skill tool.
39
- - **MCP tools** — `summer_*` tools that talk to the running Summer Engine on `localhost:6550`. Scene mutation (`summer_add_node`, `summer_set_prop`), inspection (`summer_get_scene_tree`, `summer_inspect_node`), play/diagnostics (`summer_play`, `summer_get_diagnostics`), asset import/generation (`summer_import_from_url`, `summer_generate_3d`), and 30+ more.
39
+ - **MCP tools** — `summer_*` tools that talk to the running Summer Engine on `localhost:6550`. Scene mutation (`summer_add_node`, `summer_set_prop`), inspection (`summer_get_scene_tree`, `summer_inspect_node`), play/diagnostics (`summer_play`, `summer_get_diagnostics`), asset import/generation (`summer_import_from_url`, `summer_generate_3d`), whole-project sync to Summer Cloud (`summer_cloud_push`, `summer_cloud_pull`; see `summer:summer-cloud`), and 30+ more.
40
40
 
41
- **Scripting language:** Summer Engine is compatible with Godot 4.5. You can write game code in either:
41
+ **Scripting language:** The user is making a Summer game with the Summer SDK.
42
+ GDScript is the default creator language. Summer currently uses the 4.6.1
43
+ upstream technical base, plans to adopt 4.7.1 next, and follows upstream
44
+ continuously. Confirm version-sensitive behavior from the engine's own version
45
+ string rather than turning that base into the product identity. You can write
46
+ game code in either:
42
47
 
43
48
  - **GDScript** (`.gd`) — the default. Best supported by Summer skills (see `summer:gdscript-patterns`). Use this unless the user has explicitly chosen C#.
44
- - **C#** (`.cs`) — fully supported by the engine. There is no `summer:csharp-patterns` skill yet — when writing C#, use the Godot 4.5 C# API from first principles. The patterns are different (different lifecycle method names, different signal API, different export attributes), so don't blindly translate GDScript idioms. Confirm with the user that they want C# before producing it; switching languages mid-project is painful.
49
+ - **C#** (`.cs`) — supported by the shipped Mono build. There is no
50
+ `summer:csharp-patterns` skill yet. When writing C#, use the upstream C# API
51
+ reference matching the current Summer technical base. The lifecycle, signal
52
+ API, and export attributes differ, so do not blindly translate GDScript
53
+ idioms. Confirm that the user wants C# before producing it; switching
54
+ languages mid-project is painful.
45
55
 
46
56
  Scenes are always `.tscn`/`.scn`. Resources are always `.tres`/`.res`. Drive the engine through `summer_*` tools — do not hand-edit `.tscn` files; the editor holds in-memory state that diverges from disk.
47
57
 
@@ -90,6 +100,7 @@ These thoughts mean STOP. Check skills first.
90
100
  | "I'll write the GDScript myself, no skill" | `gdscript-patterns` encodes idioms that Claude/Codex/Cursor regularly get wrong (signal connection, type hints, `_ready` vs `_process`). |
91
101
  | "The engine isn't running, I'll just edit files" | Editing scene files directly while the engine is running silently overwrites in-memory state. Check the skill. |
92
102
  | "I remember this skill" | Skills evolve. Re-read the current version. |
103
+ | "I'll just zip the project to move it to another machine" | `summer:summer-cloud` syncs the whole project (big assets included) by hash, with restorable versions. Load it whenever the user mentions sync, a second machine, sharing with a teammate, backing up assets, or restoring a version. |
93
104
 
94
105
  ## Skill Priority
95
106
 
@@ -128,6 +139,24 @@ If skills aren't found or the MCP server fails to start:
128
139
  2. If not, point them at: `npx -y summer-engine@latest setup <agent> --yes --force`.
129
140
  3. If `summer doctor` is available, run it: `summer doctor` reports auth, engine, port, project memory, and skill state.
130
141
 
142
+ ## When Summer Is Stale
143
+
144
+ Run `summer doctor` early in a fresh Summer session when setup, MCP tools, slash commands, or skills behave oddly. If doctor reports `cli-version-current` or `skills-version-stale` as warning/fail, refresh before continuing:
145
+
146
+ ```
147
+ npx clear-npx-cache && npx -y summer-engine@latest setup <agent> --yes --force
148
+ ```
149
+
150
+ Use the real agent slug from doctor or the current environment (`claude-code`, `codex`, `cursor`, `gemini`, `github-copilot`, `vscode-copilot`, `opencode`, etc.).
151
+
152
+ Why this exact command matters:
153
+
154
+ - `@latest` forces npm/npx to resolve the current published Summer CLI instead of reusing a stale cached package.
155
+ - `clear-npx-cache` clears old npx package material on machines that keep serving an older Summer.
156
+ - `setup ... --force` rewrites copied skill/slash-command files, which do not update just because the MCP server restarted.
157
+
158
+ After the refresh, restart or reload the agent/MCP session if tools were missing. MCP tool changes load on MCP reconnect; copied skills and slash commands load when the agent notices the rewritten files or starts a fresh session.
159
+
131
160
  ## User Instructions Trump Everything
132
161
 
133
162
  A direct user instruction ("skip the brainstorm", "just write the code", "don't use the MCP, edit files") overrides this skill. Surface the trade-off in one sentence ("Skipping brainstorm — heads up, scope creep is the most common reason game projects die.") and proceed as instructed.
@@ -45,6 +45,7 @@ Skip any step = lying, not verifying
45
45
  | Linter clean | Linter output: 0 errors | Partial check, extrapolation |
46
46
  | Build succeeds | Build command: exit 0 | Linter passing, logs look good |
47
47
  | Bug fixed | Test original symptom: passes | Code changed, assumed fixed |
48
+ | Gameplay behaviour works | `RunVerification` probe: pressed the input, read the state back | Script compiles, game boots, diagnostics clean |
48
49
  | Regression test works | Red-green cycle verified | Test passes once |
49
50
  | Agent completed | VCS diff shows changes | Agent reports "success" |
50
51
  | Requirements met | Line-by-line checklist | Tests passing |
@@ -72,6 +73,7 @@ Skip any step = lying, not verifying
72
73
  | "I'm tired" | Exhaustion ≠ excuse |
73
74
  | "Partial check is enough" | Partial proves nothing |
74
75
  | "Different words so rule doesn't apply" | Spirit over letter |
76
+ | "There's no way to test gameplay, I'll ask the user" | There is. A `RunVerification` probe presses input and reads state back. Ask the user only for what a probe cannot judge. |
75
77
 
76
78
  ## Key Patterns
77
79
 
@@ -13,7 +13,7 @@ Assume they are a skilled developer, but know almost nothing about our toolset o
13
13
 
14
14
  **Announce at start:** "I'm using the writing-plans skill to create the implementation plan."
15
15
 
16
- **Context:** If working in an isolated worktree, it should have been created via the `summer:using-git-worktrees` skill at execution time.
16
+ **Context:** If the work needs isolation from the current checkout, create a git worktree for it before execution starts.
17
17
 
18
18
  **Save plans to:** `docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md`
19
19
  - (User preferences for plan location override this default)
@@ -49,7 +49,7 @@ This structure informs the task decomposition. Each task should produce self-con
49
49
  ```markdown
50
50
  # [Feature Name] Implementation Plan
51
51
 
52
- > **For agentic workers:** REQUIRED SUB-SKILL: Use summer:subagent-driven-development (recommended) or summer:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
52
+ > **For agentic workers:** implement this plan task-by-task, in order, checking off each step as it lands. Steps use checkbox (`- [ ]`) syntax for tracking. Dispatch a fresh subagent per task where the tasks are independent (see summer:dispatching-parallel-agents), otherwise execute inline with a review checkpoint after each task.
53
53
 
54
54
  **Goal:** [One sentence describing what this builds]
55
55
 
@@ -139,14 +139,14 @@ After saving the plan, offer execution choice:
139
139
 
140
140
  **1. Subagent-Driven (recommended)** - I dispatch a fresh subagent per task, review between tasks, fast iteration
141
141
 
142
- **2. Inline Execution** - Execute tasks in this session using executing-plans, batch execution with checkpoints
142
+ **2. Inline Execution** - Execute tasks in this session, batched with checkpoints
143
143
 
144
144
  **Which approach?"**
145
145
 
146
146
  **If Subagent-Driven chosen:**
147
- - **REQUIRED SUB-SKILL:** Use summer:subagent-driven-development
148
- - Fresh subagent per task + two-stage review
147
+ - One fresh subagent per task, each given the task's full text and nothing else from this session's history. See `summer:dispatching-parallel-agents` for prompt structure and when parallelism is safe.
148
+ - Two-stage review: read the subagent's summary, then verify the diff yourself before starting the next task.
149
149
 
150
150
  **If Inline Execution chosen:**
151
- - **REQUIRED SUB-SKILL:** Use summer:executing-plans
152
- - Batch execution with checkpoints for review
151
+ - Execute tasks in order in this session, stopping at a checkpoint after each task for review.
152
+ - Never batch past a failing step. Fix it, verify it, then continue.
@@ -15,7 +15,7 @@ You write test cases (pressure scenarios with subagents), watch them fail (basel
15
15
 
16
16
  **Core principle:** If you didn't watch an agent fail without the skill, you don't know if the skill teaches the right thing.
17
17
 
18
- **REQUIRED BACKGROUND:** You MUST understand summer:test-driven-development before using this skill. That skill defines the fundamental RED-GREEN-REFACTOR cycle. This skill adapts TDD to documentation.
18
+ **REQUIRED BACKGROUND:** This skill adapts the RED-GREEN-REFACTOR cycle to documentation. The cycle: write the test first and watch it FAIL for the reason you expect (red), make the smallest change that passes it (green), then clean up without changing behaviour (refactor). A test you never saw fail proves nothing.
19
19
 
20
20
  **Official guidance:** For Anthropic's official skill authoring best practices, see anthropic-best-practices.md. This document provides additional patterns and guidelines that complement the TDD-focused approach in this skill.
21
21
 
@@ -280,10 +280,12 @@ wc -w skills/path/SKILL.md
280
280
  **When writing documentation that references other skills:**
281
281
 
282
282
  Use skill name only, with explicit requirement markers:
283
- - ✅ Good: `**REQUIRED SUB-SKILL:** Use summer:test-driven-development`
283
+ - ✅ Good: `**REQUIRED SUB-SKILL:** Use summer:verification-before-completion`
284
284
  - ✅ Good: `**REQUIRED BACKGROUND:** You MUST understand summer:investigating-bugs`
285
- - ❌ Bad: `See skills/testing/test-driven-development` (unclear if required)
286
- - ❌ Bad: `@skills/testing/test-driven-development/SKILL.md` (force-loads, burns context)
285
+ - ❌ Bad: `See skills/debugging/debug` (unclear if required)
286
+ - ❌ Bad: `@skills/debugging/debug/SKILL.md` (force-loads, burns context)
287
+
288
+ **Check the skill exists before you point at it.** The registry of shipped skills is the `SKILL_REGISTRY` array in `src/lib/skills-registry.ts` and the `skills:` array in `.claude-plugin/plugin.json`. A `REQUIRED SUB-SKILL` pointing at a skill that was never shipped is worse than no cross-reference: the reader stops and looks for something that does not exist.
287
289
 
288
290
  **Why no @ links:** `@` syntax force-loads files immediately, consuming 200k+ context before you need them.
289
291
 
@@ -390,7 +392,7 @@ Edit skill without testing? Same violation.
390
392
  - Don't "adapt" while running tests
391
393
  - Delete means delete
392
394
 
393
- **REQUIRED BACKGROUND:** The summer:test-driven-development skill explains why this matters. Same principles apply to documentation.
395
+ **Why this matters:** an untested change is an assertion, not a result. Same principle in documentation as in code.
394
396
 
395
397
  ## Testing All Skill Types
396
398
 
@@ -10,7 +10,7 @@ You run scenarios without the skill (RED - watch agent fail), write skill addres
10
10
 
11
11
  **Core principle:** If you didn't watch an agent fail without the skill, you don't know if the skill prevents the right failures.
12
12
 
13
- **REQUIRED BACKGROUND:** You MUST understand summer:test-driven-development before using this skill. That skill defines the fundamental RED-GREEN-REFACTOR cycle. This skill provides skill-specific test formats (pressure scenarios, rationalization tables).
13
+ **REQUIRED BACKGROUND:** the RED-GREEN-REFACTOR cycle as stated just above. This reference supplies the skill-specific test formats on top of it (pressure scenarios, rationalization tables).
14
14
 
15
15
  **Complete worked example:** See examples/CLAUDE_MD_TESTING.md for a full test campaign testing CLAUDE.md documentation variants.
16
16