summer-engine 2.2.0 → 2.5.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 (176) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +20 -5
  3. package/.codex-plugin/plugin.json +15 -5
  4. package/.cursor-plugin/plugin.json +15 -5
  5. package/.factory-plugin/plugin.json +2 -2
  6. package/.opencode/INSTALL.md +1 -1
  7. package/CHANGELOG.md +27 -6
  8. package/CLAUDE.md +2 -2
  9. package/GEMINI.md +2 -3
  10. package/README.md +82 -58
  11. package/_persona/summer/SKILL.md +5 -6
  12. package/commands/gameskill.md +103 -0
  13. package/dist/bin/summer.js +12 -4
  14. package/dist/commands/create.js +2 -0
  15. package/dist/commands/doctor.js +71 -1
  16. package/dist/commands/install.d.ts +17 -0
  17. package/dist/commands/install.js +63 -4
  18. package/dist/commands/memory.d.ts +14 -0
  19. package/dist/commands/memory.js +196 -0
  20. package/dist/commands/setup.js +12 -2
  21. package/dist/commands/skills.js +205 -8
  22. package/dist/commands/status.js +3 -0
  23. package/dist/lib/agent-config.d.ts +2 -2
  24. package/dist/lib/agent-config.js +298 -5
  25. package/dist/lib/api-client.d.ts +13 -0
  26. package/dist/lib/api-client.js +63 -26
  27. package/dist/lib/async-op-lifecycle.d.ts +60 -0
  28. package/dist/lib/async-op-lifecycle.js +83 -0
  29. package/dist/lib/project-memory.d.ts +33 -0
  30. package/dist/lib/project-memory.js +220 -0
  31. package/dist/lib/skills-registry.d.ts +134 -61
  32. package/dist/lib/skills-registry.js +106 -4
  33. package/dist/lib/version-check.d.ts +106 -0
  34. package/dist/lib/version-check.js +338 -0
  35. package/dist/mcp/server.d.ts +2 -0
  36. package/dist/mcp/server.js +81 -0
  37. package/dist/mcp/tools/debug-tools.js +32 -2
  38. package/dist/mcp/tools/project-tools.js +18 -6
  39. package/dist/mcp/tools/with-engine.d.ts +14 -0
  40. package/dist/mcp/tools/with-engine.js +52 -7
  41. package/gemini-extension.json +2 -2
  42. package/hooks/pre-commit-doctor.sh +0 -0
  43. package/hooks/run-hook.cmd +0 -0
  44. package/hooks/session-start.sh +0 -0
  45. package/package.json +6 -4
  46. package/skills/2d-assets/character-portrait/SKILL.md +1 -1
  47. package/skills/2d-assets/concept-art/SKILL.md +1 -1
  48. package/skills/2d-assets/create-asset-sheet/SKILL.md +163 -0
  49. package/skills/2d-assets/instantiate-asset-pack/SKILL.md +245 -0
  50. package/skills/2d-assets/pixel-art/SKILL.md +1 -1
  51. package/skills/2d-assets/skybox-panorama/SKILL.md +1 -1
  52. package/skills/2d-assets/sprite-sheet/SKILL.md +1 -1
  53. package/skills/2d-assets/tileable-texture/SKILL.md +1 -1
  54. package/skills/2d-assets/ui-graphics/SKILL.md +1 -1
  55. package/skills/2d-assets/use-widget-asset/SKILL.md +217 -0
  56. package/skills/3d-assets/character-model/SKILL.md +1 -1
  57. package/skills/3d-assets/organic-model/SKILL.md +1 -1
  58. package/skills/3d-assets/prop-model/SKILL.md +1 -1
  59. package/skills/3d-assets/vehicle-model/SKILL.md +1 -1
  60. package/skills/README.md +37 -30
  61. package/skills/ai-and-npcs/design-npc/SKILL.md +6 -6
  62. package/skills/animation/animation-tree/SKILL.md +2 -2
  63. package/skills/animation/facial-and-lipsync/SKILL.md +1 -1
  64. package/skills/animation/generate-motion/SKILL.md +1 -1
  65. package/skills/animation/procedural-animation/SKILL.md +2 -2
  66. package/skills/audio/adaptive-music/SKILL.md +1 -1
  67. package/skills/audio/audio-direction/SKILL.md +5 -5
  68. package/skills/audio/sound-effect/SKILL.md +2 -2
  69. package/skills/audio/voice-line/SKILL.md +25 -3
  70. package/skills/character-controllers/fps-controller/SKILL.md +5 -5
  71. package/skills/debugging/debug/SKILL.md +39 -1
  72. package/skills/deployment/export-and-ship/SKILL.md +4 -4
  73. package/skills/gameplay-mechanics/auto-fire-targeting/SKILL.md +170 -0
  74. package/skills/gameplay-mechanics/design-mechanic/SKILL.md +8 -8
  75. package/skills/level-design/design-level/SKILL.md +5 -5
  76. package/skills/level-design/scene-to-level/SKILL.md +125 -0
  77. package/skills/multiplayer-and-networking/host-authoritative-state/SKILL.md +4 -4
  78. package/skills/multiplayer-and-networking/peer-to-peer-multiplayer/SKILL.md +4 -4
  79. package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +7 -7
  80. package/skills/performance/tune-performance/SKILL.md +5 -5
  81. package/skills/rendering-and-lighting/3d-lighting/SKILL.md +1 -1
  82. package/skills/rendering-and-lighting/art-direction/SKILL.md +5 -5
  83. package/skills/scene-and-project/brainstorm-game/SKILL.md +4 -4
  84. package/skills/scene-and-project/play/SKILL.md +1 -1
  85. package/skills/scene-and-project/scene-composition/SKILL.md +30 -1
  86. package/skills/scripting-patterns/gdscript-patterns/SKILL.md +53 -0
  87. package/skills/ui-and-ux/ui-basics/SKILL.md +1 -1
  88. package/skills/video/animated-loop/SKILL.md +1 -1
  89. package/skills/video/cinematic-cutscene/SKILL.md +1 -1
  90. package/skills/video/trailer-shot/SKILL.md +1 -1
  91. package/skills/visual-effects/game-feel/SKILL.md +6 -6
  92. package/skills/workflow/brainstorming/SKILL.md +164 -0
  93. package/skills/workflow/brainstorming/scripts/frame-template.html +214 -0
  94. package/skills/workflow/brainstorming/scripts/helper.js +88 -0
  95. package/skills/workflow/brainstorming/scripts/server.cjs +354 -0
  96. package/skills/workflow/brainstorming/scripts/start-server.sh +148 -0
  97. package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -0
  98. package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -0
  99. package/skills/workflow/brainstorming/visual-companion.md +287 -0
  100. package/skills/workflow/debugging-game-feel/SKILL.md +174 -0
  101. package/skills/workflow/diagnosing-perf-regressions/SKILL.md +190 -0
  102. package/skills/workflow/dispatching-parallel-agents/SKILL.md +182 -0
  103. package/skills/workflow/gameskill/SKILL.md +111 -0
  104. package/skills/workflow/investigating-bugs/CREATION-LOG.md +119 -0
  105. package/skills/workflow/investigating-bugs/SKILL.md +296 -0
  106. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +158 -0
  107. package/skills/workflow/investigating-bugs/condition-based-waiting.md +115 -0
  108. package/skills/workflow/investigating-bugs/defense-in-depth.md +122 -0
  109. package/skills/workflow/investigating-bugs/find-polluter.sh +63 -0
  110. package/skills/workflow/investigating-bugs/root-cause-tracing.md +169 -0
  111. package/skills/workflow/investigating-bugs/test-academic.md +14 -0
  112. package/skills/workflow/investigating-bugs/test-pressure-1.md +58 -0
  113. package/skills/workflow/investigating-bugs/test-pressure-2.md +68 -0
  114. package/skills/workflow/investigating-bugs/test-pressure-3.md +69 -0
  115. package/skills/workflow/playtesting-a-feature/SKILL.md +173 -0
  116. package/skills/{_meta → workflow}/skill-create/SKILL.md +32 -22
  117. package/skills/{_meta → workflow}/skill-improve/SKILL.md +9 -10
  118. package/skills/{_meta → workflow}/skill-test/SKILL.md +12 -12
  119. package/skills/{_meta → workflow}/using-summer/SKILL.md +5 -2
  120. package/skills/workflow/verification-before-completion/SKILL.md +139 -0
  121. package/skills/workflow/writing-plans/SKILL.md +152 -0
  122. package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -0
  123. package/skills/workflow/writing-skills/SKILL.md +655 -0
  124. package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -0
  125. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  126. package/skills/workflow/writing-skills/graphviz-conventions.dot +172 -0
  127. package/skills/workflow/writing-skills/persuasion-principles.md +187 -0
  128. package/skills/workflow/writing-skills/render-graphs.js +168 -0
  129. package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -0
  130. package/dist/commands/assets.d.ts +0 -2
  131. package/dist/commands/assets.js +0 -189
  132. package/dist/commands/debug.d.ts +0 -2
  133. package/dist/commands/debug.js +0 -127
  134. package/dist/commands/doctor.test.d.ts +0 -1
  135. package/dist/commands/doctor.test.js +0 -29
  136. package/dist/commands/project.d.ts +0 -2
  137. package/dist/commands/project.js +0 -170
  138. package/dist/commands/scene.d.ts +0 -2
  139. package/dist/commands/scene.js +0 -290
  140. package/dist/lib/agent-config.test.d.ts +0 -1
  141. package/dist/lib/agent-config.test.js +0 -80
  142. package/dist/lib/format.test.d.ts +0 -1
  143. package/dist/lib/format.test.js +0 -36
  144. package/dist/lib/plugin-manifests.test.d.ts +0 -1
  145. package/dist/lib/plugin-manifests.test.js +0 -134
  146. package/dist/lib/with-engine.d.ts +0 -14
  147. package/dist/lib/with-engine.js +0 -109
  148. package/skills/_shared/collaborative-protocol.md +0 -50
  149. package/skills/_shared/gd-style.md +0 -121
  150. package/skills/_shared/godot-version.md +0 -32
  151. package/skills/_shared/mcp-tools-reference.md +0 -133
  152. package/skills/_shared/summer-folder.md +0 -44
  153. package/skills/_shared/template-registry.md +0 -40
  154. package/skills/_tests/runner.md +0 -90
  155. package/skills/_tests/specs/3d-lighting.md +0 -19
  156. package/skills/_tests/specs/art-direction.md +0 -115
  157. package/skills/_tests/specs/asset-strategy.md +0 -19
  158. package/skills/_tests/specs/audio-direction.md +0 -123
  159. package/skills/_tests/specs/brainstorm-game.md +0 -99
  160. package/skills/_tests/specs/debug.md +0 -94
  161. package/skills/_tests/specs/design-level.md +0 -113
  162. package/skills/_tests/specs/design-mechanic.md +0 -112
  163. package/skills/_tests/specs/design-npc.md +0 -143
  164. package/skills/_tests/specs/export-and-ship.md +0 -114
  165. package/skills/_tests/specs/fps-controller.md +0 -113
  166. package/skills/_tests/specs/gdscript-patterns.md +0 -19
  167. package/skills/_tests/specs/host-authoritative-state.md +0 -104
  168. package/skills/_tests/specs/make-game.md +0 -19
  169. package/skills/_tests/specs/peer-to-peer-multiplayer.md +0 -99
  170. package/skills/_tests/specs/play.md +0 -88
  171. package/skills/_tests/specs/scene-composition.md +0 -19
  172. package/skills/_tests/specs/setup-multiplayer.md +0 -106
  173. package/skills/_tests/specs/tune-performance.md +0 -104
  174. package/skills/_tests/specs/ui-basics.md +0 -19
  175. package/skills/_tests/specs/vfx.md +0 -116
  176. package/skills/catalog.yaml +0 -991
@@ -1,123 +0,0 @@
1
- # Skill Spec: /audio-direction
2
-
3
- ## Fixture
4
-
5
- - Godot 4.5 / Summer Engine project, default audio bus layout (Master only).
6
- - `.summer/GameSoul.md` exists; brief: "Cozy farming sim, vertical slice scope."
7
- - `.summer/art-bible.md` exists; mood: "soft, hand-warmed, golden-hour, painterly".
8
- - No `.summer/audio-bible.md` yet.
9
- - No `audio/` folder yet.
10
- - Summer MCP available.
11
-
12
- ## Case 1: Happy Path — define audio direction for cozy farming sim
13
-
14
- **Input:** "Define the audio direction. References: Stardew Valley OST, Studio Ghibli scores, and Outer Wilds. Acoustic, organic SFX."
15
-
16
- **Expected MCP tool sequence (in order):**
17
-
18
- 1. `Read .summer/GameSoul.md` — anchor to brief
19
- 2. `Read .summer/art-bible.md` — anchor to visual mood
20
- 3. (Skill notes the rhyme: "soft, hand-warmed, golden-hour" + acoustic references = acoustic / folk style as primary)
21
- 4. (Skill walks: music style → tempo + key → SFX vocabulary (8 classes) → dynamic music plan with state machine → spatial + mix rules)
22
- 5. (Skill shows the bible inline)
23
- 6. (Skill asks: "May I create `audio/default_bus_layout.tres` with these buses: Master / Music / SFX / UI / Voice / Ambient / Reverb_Small / Reverb_Large / Reverb_Outdoor?")
24
- 7. `Write audio/default_bus_layout.tres`
25
- 8. `summer_project_setting(key="audio/buses/default_bus_layout", value="res://audio/default_bus_layout.tres")`
26
- 9. (Skill asks: "May I create `.summer/audio-bible.md` with this bible?")
27
- 10. `Write .summer/audio-bible.md`
28
- 11. (Skill optionally asks: "May I generate first-pass SFX seeds for UI, pickup, damage?")
29
- 12. (On yes) `summer_generate_audio(prompt="soft woody UI click, 80ms, no reverb", duration=0.1)` etc.
30
-
31
- **Assertions:**
32
-
33
- - [ ] Skill reads BOTH `.summer/GameSoul.md` AND `.summer/art-bible.md` to anchor.
34
- - [ ] Skill enforces 3+ references — does not proceed with one or two.
35
- - [ ] Skill picks ONE primary music style; if user pitches multiple, names the conflict.
36
- - [ ] Music section has explicit tempo range (BPM), key center, time signature — not "varies".
37
- - [ ] SFX vocabulary has 8 classes, each with character + examples + a DON'T rule.
38
- - [ ] DON'T rules include things like "no pure sine ding for pickup" and "no same footstep for all surfaces".
39
- - [ ] Dynamic music plan picks ONE model (layered / vertical / horizontal / procedural) — not a list.
40
- - [ ] Dynamic music plan defines a state machine with named states + transitions + crossfade times.
41
- - [ ] Spatial + mix section has concrete dB values, attenuation curve, max distance, master ceiling -1 dBTP.
42
- - [ ] Mix defaults to SFX 0 dB / Music -8 dB / UI -3 dB (SFX loudest).
43
- - [ ] Bus layout has at least Music, SFX, UI, Voice, Ambient + 1+ Reverb send buses.
44
- - [ ] Skill asks "May I ..." before any `Write`, `summer_project_setting`, or `summer_generate_audio` call.
45
- - [ ] Skill writes `.summer/audio-bible.md` only after asking.
46
- - [ ] Skill never calls `summer_set_resource_property` on an inline sub_resource (silent-fail trap).
47
- - [ ] Skill ends with routing to `/summer:design-mechanic` or implementation skill.
48
-
49
- ## Case 2: Failure Path — references contradict the brief
50
-
51
- **Fixture:** Same as Case 1, but brief says "horror walking sim".
52
-
53
- **Input:** "References: Mario 64 OST, A Hat in Time, Banjo-Kazooie. Bouncy chiptune."
54
-
55
- **Expected behavior:**
56
-
57
- - Skill identifies the conflict: "Brief says horror; references are bright N64 platformer scores. Those want opposite shapes — horror wants ambient drone or industrial; bouncy chiptune undercuts dread."
58
- - Skill asks the user to resolve: "(a) keep horror brief, change references to ambient/industrial, (b) keep bouncy references, change brief away from horror, or (c) intentional juxtaposition (rare; works in 1 in 50 games — Undertale, Buckshot Roulette)."
59
- - Skill does NOT silently pick or design a "horror chiptune" hybrid without flagging the friction.
60
-
61
- **Assertions:**
62
-
63
- - [ ] Skill names the brief vs. references conflict explicitly.
64
- - [ ] Skill explains *why* the shapes oppose.
65
- - [ ] Skill offers (c) intentional juxtaposition as a valid but rare path.
66
- - [ ] No bible written until the user resolves.
67
-
68
- ## Case 3: Edge Case — user wants no music
69
-
70
- **Fixture:** Same as Case 1.
71
-
72
- **Input:** "Reference: Inside, Limbo. No music — just diegetic sound and ambience."
73
-
74
- **Expected behavior:**
75
-
76
- - Skill accepts "no music" as a valid direction (those references genuinely use it).
77
- - Skill replaces the dynamic music plan section with a "Diegetic-only ambience plan":
78
- - Named ambience layers (room tone / wind / distant water / heart-rate-tied sub-bass when tense)
79
- - Rules for when sub-bass enters (proximity to threat) and exits
80
- - SFX still gets all 8 vocabulary classes (with extra weight on the "Ambient layer" class)
81
- - Skill keeps the bus layout but removes the Music bus or marks it "reserved (unused in v1)".
82
- - Skill notes the trade-off: "Diegetic-only is harder to make feel paced — every level needs an ambient arc that does what music would normally do."
83
-
84
- **Assertions:**
85
-
86
- - [ ] Skill does NOT force a music style on a no-music game.
87
- - [ ] Bible has a Diegetic / ambience plan section instead of (or supplementing) Dynamic music plan.
88
- - [ ] Bus layout reflects the choice (no Music bus or marked reserved).
89
- - [ ] Skill flags the trade-off: pacing is now ambience's job.
90
-
91
- ## Case 4: No Summer MCP — file-edit fallback
92
-
93
- **Fixture:** Same as Case 1, but Summer MCP is unavailable.
94
-
95
- **Input:** "Define the audio direction for my cozy farming sim."
96
-
97
- **Expected behavior:**
98
-
99
- - Skill detects no MCP.
100
- - Walks the design beats normally.
101
- - Instead of `summer_project_setting`, prints the `project.godot` snippet for the user to paste:
102
-
103
- ```
104
- [audio]
105
- buses/default_bus_layout="res://audio/default_bus_layout.tres"
106
- ```
107
-
108
- - Generates `audio/default_bus_layout.tres` content as plain text for the user to save (Godot's `.tres` resource format with bus entries).
109
- - Writes `.summer/audio-bible.md` via host `Write`.
110
- - Does NOT call `summer_generate_audio` — instead suggests external SFX library searches or asks the user to handle generation later.
111
- - Asks "May I write ..." before each file write.
112
-
113
- **Assertions:**
114
-
115
- - [ ] Skill identifies that MCP is unavailable; does not blindly call `summer_*`.
116
- - [ ] Generated `project.godot` snippet uses correct INI section format.
117
- - [ ] Generated `default_bus_layout.tres` is valid Godot 4 resource format.
118
- - [ ] Skill still writes `.summer/audio-bible.md`.
119
- - [ ] Skill does not attempt audio generation when generation tools are unavailable.
120
-
121
- ---
122
-
123
- This spec runs via `/skill-test audio-direction spec` (see `_meta/skill-test/SKILL.md`).
@@ -1,99 +0,0 @@
1
- # Skill Spec: /brainstorm-game
2
-
3
- ## Fixture
4
-
5
- - Empty Godot 4.5 / Summer Engine project, `project.godot` exists, no `.summer/` folder yet.
6
- - Summer MCP available.
7
- - Host file tools available (Read, Write, Edit).
8
-
9
- ## Case 1: Happy Path — fresh idea, full brainstorm
10
-
11
- **Input:** "I want to make a game but I don't know what."
12
-
13
- **Expected behavior:**
14
-
15
- 1. Skill asks the one opening question: "One sentence — what kind of game do you want to make?"
16
- 2. (Simulated user reply: "Something like Hades, but cozy.")
17
- 3. Skill recognizes Action-Combat anchor + cozy modifier, picks Action-Combat branch, but flags the tension: "Hades is tense, cozy is calm — let's pin which side wins."
18
- 4. Skill walks: core loop candidate → user refinement → three mechanics (push back if user lists more) → one-phrase art direction → scope (recommend vertical slice).
19
- 5. Skill drafts the 1-page brief inline, shows it to the user.
20
- 6. Skill asks: "May I create `.summer/GameSoul.md` with this brief?"
21
- 7. On yes, calls `Write .summer/GameSoul.md`.
22
- 8. Skill ends with the routing question pointing to `/summer:design-mechanic` or similar.
23
-
24
- **Assertions:**
25
-
26
- - [ ] Skill asks ONLY the opening question first, no menu of options.
27
- - [ ] Skill picks ONE branch, not multiple; doesn't ask 6 questions in parallel.
28
- - [ ] Skill enforces the three-mechanic limit (pushes back if user lists more).
29
- - [ ] Brief includes all 8 fields: Pitch, Core loop, Three mechanics, Art direction, Scope, Win condition, "One thing this is NOT", Inspirations, Parked for later.
30
- - [ ] Skill asks "May I create `.summer/GameSoul.md`?" before writing.
31
- - [ ] Brief is shown inline before being written so the user can react.
32
- - [ ] Skill ends with a routing question to a next `/summer:` step.
33
- - [ ] Skill defaults to "vertical slice" scope when the user is unsure.
34
-
35
- ## Case 2: Failure Path — `.summer/GameSoul.md` already exists
36
-
37
- **Fixture:** Same as Case 1, except `.summer/GameSoul.md` already exists with a previous game's brief.
38
-
39
- **Input:** "I want to brainstorm a new game."
40
-
41
- **Expected behavior:**
42
-
43
- - Skill reads the existing `.summer/GameSoul.md` first via `Read`.
44
- - Skill walks the brainstorm normally.
45
- - Before writing, skill detects the file exists and asks: "`.summer/GameSoul.md` already exists. May I overwrite it, or merge into a 'Revision 2' section below the existing brief?"
46
- - Does NOT silently overwrite.
47
-
48
- **Assertions:**
49
-
50
- - [ ] Skill reads existing `.summer/GameSoul.md` before drafting the new brief.
51
- - [ ] Skill shows the user what would change before writing.
52
- - [ ] Skill explicitly offers overwrite vs. merge — does not default-pick.
53
- - [ ] No `Write` call happens until the user answers.
54
-
55
- ## Case 3: Edge Case — user pitches a multiplayer 4-player co-op horror RPG with crafting
56
-
57
- **Fixture:** Same as Case 1.
58
-
59
- **Input:** "I want a 4-player online co-op horror RPG with crafting, base-building, dialogue trees, and procedural worlds, kind of like Valheim meets Phasmophobia meets Disco Elysium."
60
-
61
- **Expected behavior:**
62
-
63
- - Skill catches the multiplayer flag (4-player co-op = scope explosion) and surfaces it explicitly: "Multiplayer is its own scope category — it roughly 3x's everything. Confirm: is multiplayer non-negotiable, or could a great single-player version land first and multiplayer come later?"
64
- - Skill enforces the three-mechanic constraint hard. Names which mechanics from the user's pitch are content vs. mechanics, e.g.: "crafting + base-building are systems, not mechanics; dialogue is a mechanic if choices change outcomes."
65
- - Skill states a sanity-check concern: "Procedural worlds + horror + RPG depth + multiplayer at vertical-slice scope is unrealistic. Suggest scoping to one of those four pillars."
66
- - Skill does NOT just write the brief with all five things in it.
67
- - Skill asks the user to pick the cut.
68
-
69
- **Assertions:**
70
-
71
- - [ ] Skill flags multiplayer explicitly and asks about negotiability before continuing.
72
- - [ ] Skill distinguishes "system/feature" from "mechanic" out loud.
73
- - [ ] Skill names a scope concern instead of writing the brief verbatim from the pitch.
74
- - [ ] Skill never writes a brief with more than three mechanics.
75
- - [ ] Skill offers a clear cut, not a vague "scope down" platitude.
76
-
77
- ## Case 4: No Summer MCP / no host file write — fallback path
78
-
79
- **Fixture:** Same as Case 1, except the host has no file-write tool (read-only agent in a constrained environment).
80
-
81
- **Input:** "Help me brainstorm a game."
82
-
83
- **Expected behavior:**
84
-
85
- - Skill detects no write tool is available.
86
- - Walks the brainstorm normally.
87
- - Instead of asking "May I create `.summer/GameSoul.md`?", prints the full brief to the user with explicit save instruction: "Save this as `.summer/GameSoul.md` in your project root. Every Summer skill reads it."
88
- - Still ends with the routing question.
89
-
90
- **Assertions:**
91
-
92
- - [ ] Skill does NOT call a file-write tool that doesn't exist.
93
- - [ ] Skill prints the brief inline as a self-contained block.
94
- - [ ] Skill includes the explicit save instruction with the canonical path.
95
- - [ ] Skill still asks the user the brainstorm questions and the routing question.
96
-
97
- ---
98
-
99
- This spec runs via `/skill-test brainstorm-game spec` (see `_meta/skill-test/SKILL.md`).
@@ -1,94 +0,0 @@
1
- # Skill Spec: /debug
2
-
3
- ## Fixture
4
-
5
- - A Godot/Summer project with one or more reproducible bugs.
6
- - Summer Engine running, MCP available.
7
- - Host file tools available (Read, Edit, Write).
8
-
9
- ## Case 1: Happy Path — runtime error with clear stack trace
10
-
11
- **Fixture:** `scripts/player.gd` has `velocity.y -= GRAVTY * delta` (typo: GRAVTY instead of GRAVITY). Player crashes on `_physics_process` first frame.
12
-
13
- **Input:** "Debug my game. The player crashes the moment I press play."
14
-
15
- **Expected MCP tool sequence (in order):**
16
-
17
- 1. (Skill asks the user one clarifying question and waits.)
18
- 2. `summer_get_script_errors` — finds `Identifier "GRAVTY" not declared` at scripts/player.gd:14
19
- 3. (Optional: `summer_get_console` to confirm no other errors hiding)
20
- 4. `Read scripts/player.gd` — read 20–40 lines around line 14
21
- 5. (Skill states hypothesis: typo, GRAVTY → GRAVITY)
22
- 6. (Skill asks: "May I edit `scripts/player.gd` to rename GRAVTY → GRAVITY?")
23
- 7. `Edit scripts/player.gd` — apply fix on user OK
24
- 8. `summer_get_script_errors` — verify clean
25
-
26
- **Assertions:**
27
-
28
- - [ ] Skill asks for the user's description before any tool call.
29
- - [ ] First diagnostic tool called is `summer_get_script_errors` (cheapest).
30
- - [ ] Skill does NOT grep the whole codebase before reading the error.
31
- - [ ] Skill reads only the file + lines indicated by the error, not the whole file.
32
- - [ ] Skill states a single specific hypothesis before proposing a fix.
33
- - [ ] Skill asks "May I edit …" before writing.
34
- - [ ] After the fix, skill re-runs `summer_get_script_errors` to verify.
35
- - [ ] Skill never calls `summer_set_resource_property` on an inline sub-resource (silent-fail trap).
36
-
37
- ## Case 2: Failure Path — bug only reproduces at runtime
38
-
39
- **Fixture:** Game compiles fine but crashes when player picks up a coin: `Invalid call. Nonexistent function 'play' in base 'Nil'.` AudioStreamPlayer node was deleted in editor but pickup script still references it.
40
-
41
- **Input:** "When I pick up a coin, the game crashes."
42
-
43
- **Expected behavior:**
44
-
45
- - Skill calls `summer_get_script_errors` first → clean.
46
- - Skill realizes it's runtime: `summer_clear_console`, `summer_play`.
47
- - Skill asks user: "Reproduce the bug now — pick up a coin."
48
- - After confirmation, calls `summer_get_debugger_errors`.
49
- - Stack trace points to `coin.gd:32`, function `_on_body_entered`, calling `audio.play()` where `audio` is `null`.
50
- - Skill calls `summer_inspect_node "./Coin/AudioStreamPlayer"` to confirm the node is missing.
51
- - Skill proposes: re-add the AudioStreamPlayer (via `summer_add_node`) OR null-check in code.
52
- - Asks the user which.
53
-
54
- **Assertions:**
55
-
56
- - [ ] Skill recognizes that script-errors-clean + crash-on-runtime = runtime-only bug.
57
- - [ ] Skill explicitly invokes the play→reproduce→read-debugger loop, not just one shot.
58
- - [ ] Skill verifies the missing-node hypothesis with `summer_inspect_node` BEFORE editing code.
59
- - [ ] Skill offers BOTH options (fix scene OR fix code) instead of unilaterally picking.
60
-
61
- ## Case 3: Edge Case — user gives a vague description
62
-
63
- **Fixture:** Same as Case 1.
64
-
65
- **Input:** "Something's broken."
66
-
67
- **Expected behavior:**
68
-
69
- - Skill asks one focused follow-up: "What's happening, and when?"
70
- - Does NOT start grepping code or running tools blindly.
71
-
72
- **Assertions:**
73
-
74
- - [ ] No tool calls happen until the user gives a concrete symptom.
75
- - [ ] Skill's follow-up is one short question, not a checklist.
76
-
77
- ## Case 4: No Summer MCP — fallback path
78
-
79
- **Fixture:** Same as Case 1, but Summer MCP is unavailable (engine not connected).
80
-
81
- **Input:** "Debug my game."
82
-
83
- **Expected behavior:**
84
-
85
- - Skill detects MCP unavailable.
86
- - Asks the user to copy-paste from Godot's Output and Debugger panels.
87
- - Reasons over the pasted text the same way it would over MCP output.
88
- - Continues with the rest of the workflow (read code, hypothesize, propose fix).
89
-
90
- **Assertions:**
91
-
92
- - [ ] Skill does not blindly call `summer_*` tools and fail.
93
- - [ ] Skill explicitly asks for the panel output instead of guessing.
94
- - [ ] The rest of the loop (hypothesis → "May I edit?" → verify) still runs.
@@ -1,113 +0,0 @@
1
- # Skill Spec: /design-level
2
-
3
- ## Fixture
4
-
5
- - Godot 4.5 / Summer Engine project, main scene already has a `World/Player` (CharacterBody3D) with FPS controller wired.
6
- - `.summer/GameSoul.md` exists; brief: "Action-combat game, three mechanics: dash, parry, double-jump. Vertical slice scope."
7
- - `.summer/mechanics/parry.md` exists.
8
- - No `levels/` folder yet.
9
- - Summer MCP available.
10
-
11
- ## Case 1: Happy Path — design level 1, a combat encounter
12
-
13
- **Input:** "Design level 1, a 5-minute combat encounter that teaches parry."
14
-
15
- **Expected MCP tool sequence (in order):**
16
-
17
- 1. `Read .summer/GameSoul.md` — anchor to the brief
18
- 2. (Optional: `Read .summer/mechanics/parry.md` — anchor to the mechanic being taught)
19
- 3. (Skill walks: type → teaching goal → pacing curve (5 beats with intensity numbers) → encounters list → secrets list → reward gating → spaces list)
20
- 4. (Skill shows the node-tree skeleton inline)
21
- 5. (Skill asks: "May I create `levels/level_01.tscn` with this skeleton?")
22
- 6. `summer_create_scene(path="res://levels/level_01.tscn", root_type="Node3D", root_name="World")`
23
- 7. `summer_add_node(parent="./World", type="Node3D", name="Geometry")` and children
24
- 8. `summer_add_node(parent="./World", type="Node3D", name="Spawns")` and children
25
- 9. `summer_add_node(parent="./World", type="Node3D", name="Triggers")` and Area3D children
26
- 10. `summer_add_node(parent="./World", type="Node3D", name="Pickups")`
27
- 11. `summer_add_node(parent="./World", type="Node3D", name="Secrets")`
28
- 12. `summer_add_node(parent="./World", type="Node3D", name="Lighting")` with WorldEnvironment + DirectionalLight3D
29
- 13. `summer_save_scene`
30
- 14. (Skill asks: "May I create `.summer/levels/level_01.md` with the design doc?")
31
- 15. `Write .summer/levels/level_01.md`
32
- 16. `summer_get_script_errors`
33
-
34
- **Assertions:**
35
-
36
- - [ ] Skill reads `.summer/GameSoul.md` to anchor.
37
- - [ ] Skill reads the relevant `.summer/mechanics/<name>.md` if the level teaches an existing mechanic.
38
- - [ ] Skill states a concrete teaching goal — not a vague "fun encounter".
39
- - [ ] Skill draws a 5-beat pacing curve with intensity numbers (Intro / Build / Peak / Release / Hook).
40
- - [ ] Skill lists 4 encounters with timing + space mapping.
41
- - [ ] Skill lists 3 secrets with which beat each lives in.
42
- - [ ] Skill lists reward gating, gates rewards behind tests.
43
- - [ ] Skill enforces 4-6 distinct spaces (does not produce 12 micro-rooms).
44
- - [ ] Skill asks "May I create ..." before `summer_create_scene`.
45
- - [ ] Skeleton is markers + Area3Ds, NOT meshes / enemy scripts (those come later).
46
- - [ ] Skill writes the design doc to `.summer/levels/<name>.md`.
47
- - [ ] Skill never calls `summer_set_resource_property` on an inline sub_resource.
48
- - [ ] Final step is `summer_save_scene` then `summer_get_script_errors`.
49
-
50
- ## Case 2: Failure Path — user blends three level types
51
-
52
- **Fixture:** Same as Case 1.
53
-
54
- **Input:** "Design a stealth level with a puzzle in the middle and a boss at the end."
55
-
56
- **Expected behavior:**
57
-
58
- - Skill recognizes blended types: stealth + puzzle + boss.
59
- - Skill pushes back: "That's three level types. Pick one as the primary; the other two become flavor or get split into sequential levels."
60
- - Skill names the trade-off: "Stealth + boss in the same level kills both — stealth wants tension that releases at the encounter, boss wants tension that builds *to* the encounter. They're opposite shapes."
61
- - Skill does NOT silently pick one or design all three at once.
62
-
63
- **Assertions:**
64
-
65
- - [ ] Skill identifies the blend explicitly.
66
- - [ ] Skill explains the design tension between the blended types.
67
- - [ ] Skill asks the user to pick one primary type before designing.
68
- - [ ] No `summer_create_scene` call until user picks.
69
-
70
- ## Case 3: Edge Case — no `.summer/GameSoul.md` exists
71
-
72
- **Fixture:** Same as Case 1, but `.summer/GameSoul.md` does NOT exist.
73
-
74
- **Input:** "Design level 1 of my game."
75
-
76
- **Expected behavior:**
77
-
78
- - Skill detects no brief exists.
79
- - Skill suggests: "No `.summer/GameSoul.md` yet — without a brief, this level has no game to serve. Run `/summer:brainstorm-game` first, or give me the core loop + mechanics inline so I can anchor the design."
80
- - Skill does NOT design a generic level in a vacuum.
81
-
82
- **Assertions:**
83
-
84
- - [ ] Skill checks for `.summer/GameSoul.md` early (before designing).
85
- - [ ] Skill explicitly recommends `/summer:brainstorm-game` if absent.
86
- - [ ] Skill offers the inline-anchor alternative as a fallback.
87
- - [ ] No design happens without anchoring information.
88
-
89
- ## Case 4: No Summer MCP — file-edit fallback
90
-
91
- **Fixture:** Same as Case 1, but Summer MCP is unavailable.
92
-
93
- **Input:** "Design level 1 — a 5-minute combat encounter."
94
-
95
- **Expected behavior:**
96
-
97
- - Skill detects no MCP.
98
- - Walks the design beats normally.
99
- - Instead of `summer_create_scene` + `summer_add_node`, prints the full `.tscn` file contents for the user to save manually at `levels/level_01.tscn`.
100
- - Generated `.tscn` is syntactically valid Godot 4 scene format with the marker/Area3D skeleton (no meshes).
101
- - Still writes the design doc to `.summer/levels/level_01.md` via host `Write`.
102
- - Asks "May I write ..." before each file write.
103
-
104
- **Assertions:**
105
-
106
- - [ ] Skill identifies that MCP is unavailable; does not blindly call `summer_*`.
107
- - [ ] Generated `.tscn` is parseable Godot 4 scene file.
108
- - [ ] Skeleton in the `.tscn` matches the spaces / spawns / triggers structure from the design doc.
109
- - [ ] Skill still writes `.summer/levels/<name>.md`.
110
-
111
- ---
112
-
113
- This spec runs via `/skill-test design-level spec` (see `_meta/skill-test/SKILL.md`).
@@ -1,112 +0,0 @@
1
- # Skill Spec: /design-mechanic
2
-
3
- ## Fixture
4
-
5
- - Godot 4.5 / Summer Engine project with `World/Player` (CharacterBody3D + CollisionShape3D + Camera3D) already in the main scene.
6
- - A `scripts/player_controller.gd` exists with single-jump logic.
7
- - `.summer/GameSoul.md` exists, brief says: "core loop is precise platforming, three mechanics: dash, double-jump, parry".
8
- - Summer MCP available.
9
-
10
- ## Case 1: Happy Path — design double-jump
11
-
12
- **Input:** "Design the double-jump mechanic."
13
-
14
- **Expected MCP tool sequence (in order):**
15
-
16
- 1. (Skill asks one clarifying question if any — e.g., "Tap or hold-and-release?" — and waits.)
17
- 2. `Read .summer/GameSoul.md` — anchor to the brief
18
- 3. (Skill walks the five layers: input, response, feedback (visual/audio/mechanical), failure modes, depth)
19
- 4. (Skill names tunables as `@export` vars)
20
- 5. (Skill sketches the node-graph plan and asks "May I add `DoubleJumpFX` and `JumpAudio` to `./World/Player`?")
21
- 6. `summer_get_scene_tree` — confirm Player exists
22
- 7. `summer_add_node(parent="./World/Player", type="GPUParticles3D", name="DoubleJumpFX")`
23
- 8. `summer_set_prop("./World/Player/DoubleJumpFX", "emitting", "false")`
24
- 9. `summer_add_node(parent="./World/Player", type="AudioStreamPlayer3D", name="JumpAudio")`
25
- 10. `summer_input_map_bind(name="jump", events=[{type:"key", key:"Space"}])` (idempotent)
26
- 11. (Skill asks "May I modify `scripts/player_controller.gd` to add double-jump logic?")
27
- 12. `Edit scripts/player_controller.gd` — merge double-jump logic
28
- 13. (Skill asks "May I create `.summer/mechanics/double-jump.md` with the design doc?")
29
- 14. `Write .summer/mechanics/double-jump.md`
30
- 15. `summer_save_scene`
31
- 16. `summer_get_script_errors`
32
-
33
- **Assertions:**
34
-
35
- - [ ] Skill reads `.summer/GameSoul.md` to anchor the design to the brief.
36
- - [ ] Skill walks all five layers (input, response, feedback, failure modes, depth) before scaffolding.
37
- - [ ] Skill enforces all THREE feedback channels (visual, audio, mechanical) — pushes back if user only names two.
38
- - [ ] Skill lists 3-7 tunables as `@export` vars (not `const`).
39
- - [ ] Skill asks "May I add ..." before scene mutations.
40
- - [ ] Skill asks "May I modify ..." before script edits.
41
- - [ ] Skill writes the design doc to `.summer/mechanics/<name>.md`.
42
- - [ ] Skill never calls `summer_set_resource_property` on an inline sub_resource (silent-fail trap).
43
- - [ ] Generated GDScript uses typed vars, `@export`, `class_name`, `@onready`, signals (matches `_shared/gd-style.md`).
44
- - [ ] Final step is `summer_save_scene` then `summer_get_script_errors`.
45
-
46
- ## Case 2: Failure Path — user names a system, not a mechanic
47
-
48
- **Fixture:** Same as Case 1.
49
-
50
- **Input:** "Design the inventory."
51
-
52
- **Expected behavior:**
53
-
54
- - Skill recognizes "inventory" is a system, not a mechanic.
55
- - Skill pushes back: "Inventory is a system. The mechanics inside it are pickup, equip, drop, use, swap. Which one?"
56
- - Does NOT start designing a generic "inventory mechanic".
57
- - Waits for the user to pick a verb.
58
-
59
- **Assertions:**
60
-
61
- - [ ] Skill explicitly distinguishes system vs. mechanic.
62
- - [ ] Skill asks the user to pick a verb before walking the five layers.
63
- - [ ] No scene mutations or file writes happen until the user picks.
64
-
65
- ## Case 3: Edge Case — user can't articulate depth
66
-
67
- **Fixture:** Same as Case 1.
68
-
69
- **Input:** "Design the double-jump."
70
-
71
- **During step 3, on Layer 5 (depth):**
72
-
73
- User says: "Players will use it strategically."
74
-
75
- **Expected behavior:**
76
-
77
- - Skill rejects the hand-wave: "That's not depth — name the choice the player makes."
78
- - Skill offers a concrete frame: "Depth = the resource is finite or has a cost, and level design forces a choice between using it now or saving it. If neither is true, this is just a higher-jumping single-jump."
79
- - Skill asks the user to either (a) name the cost / choice, or (b) cut the mechanic.
80
- - Skill does NOT scaffold a depth-less mechanic.
81
-
82
- **Assertions:**
83
-
84
- - [ ] Skill does not accept "strategically" / "for skilled play" / "it's interesting" as depth.
85
- - [ ] Skill names a concrete depth-vector (cost, resource, choice).
86
- - [ ] Skill explicitly offers "cut the mechanic" as a valid outcome.
87
- - [ ] No scaffolding happens until depth is articulated.
88
-
89
- ## Case 4: No Summer MCP — file-edit fallback
90
-
91
- **Fixture:** Same as Case 1, but Summer MCP is unavailable (engine not connected).
92
-
93
- **Input:** "Design the double-jump mechanic."
94
-
95
- **Expected behavior:**
96
-
97
- - Skill detects no MCP and falls back to file edits.
98
- - Walks the five layers normally.
99
- - Instead of `summer_add_node`, prints the `.tscn` snippet for `DoubleJumpFX` and `JumpAudio` nodes for the user to paste into the scene file (or asks the user which `.tscn` to edit).
100
- - Asks before each file write.
101
- - Still writes the GDScript stub via `Edit` and the design doc via `Write`.
102
-
103
- **Assertions:**
104
-
105
- - [ ] Skill identifies that MCP is unavailable; does not blindly call `summer_*` tools.
106
- - [ ] Generated `.tscn` snippet is syntactically valid Godot 4 scene format.
107
- - [ ] Skill still asks "May I write ..." before each file write.
108
- - [ ] Skill still produces both the GDScript stub AND the design doc at `.summer/mechanics/<name>.md`.
109
-
110
- ---
111
-
112
- This spec runs via `/skill-test design-mechanic spec` (see `_meta/skill-test/SKILL.md`).