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,88 +0,0 @@
1
- # Skill Spec: /play
2
-
3
- ## Fixture
4
-
5
- - A Godot/Summer project with a main scene set in `project.godot`.
6
- - Summer Engine running, MCP available.
7
-
8
- ## Case 1: Happy Path — clean run
9
-
10
- **Fixture:** Project compiles cleanly. Game is not currently running.
11
-
12
- **Input:** "Play."
13
-
14
- **Expected MCP tool sequence (in order):**
15
-
16
- 1. `summer_is_running` — false
17
- 2. `summer_get_script_errors` — clean
18
- 3. `summer_clear_console`
19
- 4. `summer_play`
20
- 5. (~2 second wait)
21
- 6. `summer_get_diagnostics`
22
- 7. `summer_get_debugger_errors`
23
- 8. (Skill reports "Running. No errors or warnings.")
24
-
25
- **Assertions:**
26
-
27
- - [ ] First call is `summer_is_running` to avoid double-launch.
28
- - [ ] `summer_get_script_errors` runs BEFORE `summer_play` (avoid noisy fail).
29
- - [ ] `summer_clear_console` runs before `summer_play` (so post-run output is clean).
30
- - [ ] Skill waits before reading post-play state (≥1 second).
31
- - [ ] Skill does NOT call `summer_stop` on its own.
32
- - [ ] Skill reports state in one short sentence, doesn't dump raw tool output.
33
-
34
- ## Case 2: Failure — game is already running
35
-
36
- **Fixture:** Game already running.
37
-
38
- **Input:** "Play."
39
-
40
- **Expected behavior:**
41
-
42
- - `summer_is_running` returns true.
43
- - Skill asks: "It's already playing. Stop and restart, or leave it?"
44
- - Waits for user.
45
- - On "leave it": no further calls. On "stop and restart": `summer_stop`, then continues from step 2.
46
-
47
- **Assertions:**
48
-
49
- - [ ] Skill does not unilaterally restart.
50
- - [ ] Skill does not unilaterally `summer_stop` without asking.
51
-
52
- ## Case 3: Compile error before play
53
-
54
- **Fixture:** Script error in `scripts/player.gd:14` (typo). Game not running.
55
-
56
- **Input:** "Play."
57
-
58
- **Expected behavior:**
59
-
60
- - `summer_is_running` → false.
61
- - `summer_get_script_errors` → returns error.
62
- - Skill stops, surfaces the error, suggests `/debug`.
63
- - Does NOT call `summer_play` (would just produce more noise).
64
-
65
- **Assertions:**
66
-
67
- - [ ] No `summer_play` call when script errors are present.
68
- - [ ] Error message is one line, not raw tool output.
69
- - [ ] Skill explicitly mentions `/debug` as the next move.
70
-
71
- ## Case 4: Runtime crash
72
-
73
- **Fixture:** Compiles fine. Game crashes on first frame (e.g. null pointer in `_ready`).
74
-
75
- **Input:** "Play."
76
-
77
- **Expected behavior:**
78
-
79
- - Steps 1–5 run normally.
80
- - `summer_get_debugger_errors` returns a stack trace.
81
- - Skill reports the crash in one line and offers `/debug`.
82
- - Does NOT auto-`summer_stop` — the user might want to inspect.
83
-
84
- **Assertions:**
85
-
86
- - [ ] Skill detects the crash via `summer_get_debugger_errors`, not by absence of output.
87
- - [ ] Crash report is concise: error class, location, message.
88
- - [ ] Skill explicitly mentions `/debug` as the next move.
@@ -1,19 +0,0 @@
1
- # Skill Spec: /scene-composition
2
-
3
- > Stub spec. Expand with Happy / Failure / Edge cases. See `fps-controller.md` for the canonical format.
4
-
5
- ## Fixture
6
-
7
- - TBD
8
-
9
- ## Case 1: Happy Path
10
-
11
- **Input:** "<typical user prompt>"
12
-
13
- **Expected MCP tool sequence (in order):**
14
-
15
- 1. TBD
16
-
17
- **Assertions:**
18
-
19
- - [ ] TBD
@@ -1,106 +0,0 @@
1
- # Skill Spec: /setup-multiplayer
2
-
3
- ## Fixture
4
-
5
- - Godot 4.5 / Summer Engine project, single-player game with `World/Player` (CharacterBody3D) and a working camera + movement script.
6
- - Summer MCP tools available.
7
- - Host file tools available (Read, Edit, Write).
8
- - No multiplayer setup yet (no autoloads, no MultiplayerSpawner, no Synchronizer).
9
-
10
- ## Case 1: Happy Path — co-op LAN (2–4 players)
11
-
12
- **Input:** "Add multiplayer to my game. Co-op for me and three friends."
13
-
14
- **Expected MCP tool sequence (in order):**
15
-
16
- 1. (Skill asks the four blocking questions — type / count / authority / network — and waits.)
17
- 2. User confirms: co-op online, 4 players, host one of the players, public internet.
18
- 3. (Skill explicitly states the locked decision: "Going with **host authority**, ENet transport, 30 Hz input / 20 Hz position. Refactoring authority later is brutal — confirm.")
19
- 4. After user OK:
20
- - `summer_get_scene_tree`
21
- - `summer_inspect_node "./World/Player"`
22
- - `Write scripts/network.gd` (autoload)
23
- - `summer_project_setting(name="autoload/Network", value="*res://scripts/network.gd")`
24
- - `summer_add_node(parent="./World/Players/Player", type="MultiplayerSynchronizer", name="Sync")` (or the equivalent on the player scene)
25
- - SceneReplicationConfig saved as standalone `.tres` (NOT inline)
26
- - `Write scripts/player_net.gd`
27
- - `summer_save_scene`
28
- - `summer_get_script_errors`
29
-
30
- **Assertions:**
31
-
32
- - [ ] Skill asks all four blocking questions BEFORE any tool call.
33
- - [ ] Skill explicitly names the authority model (host) and gets a confirmation before mutating.
34
- - [ ] Skill picks ENet (NOT custom transport, NOT WebRTC).
35
- - [ ] Generated script uses `MultiplayerSpawner` pattern (host spawns, clients receive).
36
- - [ ] Player script disables `_physics_process` for non-local peers.
37
- - [ ] Camera is local-only (`camera.current = is_local`).
38
- - [ ] Damage RPC checks `multiplayer.is_server()` before applying.
39
- - [ ] At least one `any_peer` RPC validates `get_remote_sender_id()`.
40
- - [ ] SceneReplicationConfig is a standalone `.tres`, NOT inline sub_resource.
41
- - [ ] Skill does NOT replicate cosmetic VFX or local UI.
42
- - [ ] Final step is `summer_save_scene` then `summer_get_script_errors`.
43
-
44
- ## Case 2: Failure Path — user wants competitive PvP without dedicated server
45
-
46
- **Input:** "Add competitive PvP for 8 players, hosted by one of them, with anti-cheat."
47
-
48
- **Expected behavior:**
49
-
50
- - Skill names the conflict: "Anti-cheat with host-authority is fundamentally broken — the host can always cheat. For competitive PvP at this scale, you need a dedicated server. Want me to scaffold that path (different code, different deploy story), or are we doing trusted-host co-op-style PvP?"
51
- - Does NOT silently scaffold host-authority code that the user thinks has anti-cheat.
52
- - Does NOT scaffold dedicated-server code without explicit confirmation (different complexity).
53
-
54
- **Assertions:**
55
-
56
- - [ ] Skill flags the architectural impossibility, not just "this is hard".
57
- - [ ] Skill names the trade-off explicitly (host = host can cheat; dedicated = ops cost).
58
- - [ ] Skill stops to ask before generating any code.
59
- - [ ] Skill does NOT just pick host-authority because it's the default.
60
-
61
- ## Case 3: Edge Case — user says "let's also do rollback netcode for our co-op"
62
-
63
- **Fixture:** Same as Case 1.
64
-
65
- **Input:** "Add multiplayer with rollback netcode so we don't see lag."
66
-
67
- **Expected behavior:**
68
-
69
- - Skill calls out: "Rollback netcode is a 6-month project on its own and is the right answer for fighting games / lock-step RTS, not co-op. For co-op, host authority + smooth interpolation gives you 95% of the perceived smoothness for 5% of the work. Want me to scaffold the standard host model?"
70
- - Does NOT start scaffolding rollback.
71
- - Does NOT silently downgrade to host-authority — names the choice and the trade-off.
72
-
73
- **Assertions:**
74
-
75
- - [ ] Skill names rollback as wrong-tool-for-job for co-op.
76
- - [ ] Skill names the standard alternative (host authority + interpolation).
77
- - [ ] Skill stops to confirm before scaffolding.
78
- - [ ] Skill points to specialist skill for lag compensation if user insists on competitive shooter.
79
-
80
- ## Case 4: No Summer MCP — fallback path
81
-
82
- **Fixture:** Same as Case 1, but Summer MCP unavailable.
83
-
84
- **Input:** "Add co-op multiplayer for 4 players."
85
-
86
- **Expected behavior:**
87
-
88
- - Skill detects MCP unavailable.
89
- - Asks the user to paste their existing main scene `.tscn` so the autoload + spawn paths reference real nodes.
90
- - Asks the user to paste `project.godot` so the autoload entry can be added by hand.
91
- - Writes `scripts/network.gd` + `scripts/player_net.gd` directly via host file tools.
92
- - Provides a manual `project.godot` patch (autoload entry + replication config path) as text the user can paste.
93
- - Provides scene-editor instructions for adding the MultiplayerSynchronizer + setting up replication properties.
94
- - Still asks "May I write …" before each file write.
95
-
96
- **Assertions:**
97
-
98
- - [ ] Skill does not blindly call `summer_*` tools and fail.
99
- - [ ] Generated scripts compile in Godot 4.5 / Summer Engine.
100
- - [ ] Skill provides a `project.godot` patch in valid Godot project format.
101
- - [ ] Skill still asks for confirmation on each write.
102
- - [ ] Same opinionated decisions hold (host authority, ENet, no replication of cosmetic VFX).
103
-
104
- ---
105
-
106
- This spec runs via `/skill-test setup-multiplayer spec` (see `_meta/skill-test/SKILL.md`).
@@ -1,104 +0,0 @@
1
- # Skill Spec: /tune-performance
2
-
3
- ## Fixture
4
-
5
- - Godot 4.5 / Summer Engine project with a 3D scene.
6
- - Summer MCP tools available (engine running on localhost:6550).
7
- - Host file tools available (Read, Edit, Write).
8
-
9
- ## Case 1: Happy Path — rendering hotspot (foliage)
10
-
11
- **Fixture:** `World/Foliage` contains 240 individual MeshInstance3D children, all using the same tree mesh. Game runs at ~22 fps, render time ~14 ms / frame.
12
-
13
- **Input:** "My game is slow when I look at the forest."
14
-
15
- **Expected MCP tool sequence (in order):**
16
-
17
- 1. (Skill asks one focused question and waits — confirms it's framerate-drops-when-looking-at-X.)
18
- 2. `summer_clear_console`
19
- 3. `summer_play`
20
- 4. (Skill asks user to look at the forest for 5–10 seconds.)
21
- 5. `summer_get_diagnostics` — baseline numbers
22
- 6. `summer_stop`
23
- 7. (Skill identifies render time > 50% frame budget, dominant cost = rendering.)
24
- 8. `summer_get_scene_tree` + `summer_inspect_node "./World/Foliage"` — confirms 240 MeshInstance3D children.
25
- 9. (Skill states hypothesis: "240 MeshInstance3D = 240 draw calls. MultiMeshInstance3D will drop this to ~1.")
26
- 10. (Skill asks: "May I refactor `./World/Foliage` to use a MultiMeshInstance3D? Expected render time: 14 ms → 3–5 ms.")
27
- 11. After OK: applies fix, `summer_save_scene`, `summer_clear_console`, `summer_play`, `summer_get_diagnostics`, `summer_stop`.
28
- 12. Reports before/after.
29
-
30
- **Assertions:**
31
-
32
- - [ ] Skill takes a baseline measurement BEFORE proposing a fix.
33
- - [ ] Skill identifies the dominant cost using actual numbers, not a guess.
34
- - [ ] Skill proposes ONE fix, not a bundle of three.
35
- - [ ] Proposal includes an expected metric movement (e.g. "14 ms → 3–5 ms").
36
- - [ ] Skill asks "May I" before mutating.
37
- - [ ] Skill re-measures after applying the fix and reports before/after.
38
- - [ ] Skill never optimizes physics or scripting in this scenario (since rendering was dominant).
39
-
40
- ## Case 2: Failure Path — wrong subsystem hypothesis
41
-
42
- **Fixture:** Game stutters every ~3 seconds. User suspects "lag spikes from too many enemies".
43
-
44
- **Input:** "Game stutters every few seconds. I think it's the enemy AI."
45
-
46
- **Expected behavior:**
47
-
48
- - Skill resists the user's guess and takes a baseline.
49
- - `summer_get_diagnostics` shows: avg frame time fine, but periodic 80 ms spikes.
50
- - `summer_get_console` shows shader-compilation warnings: "Compiling SpatialMaterial #1234".
51
- - Skill identifies: this is shader compile jitter, not AI.
52
- - Skill says: "The spikes correlate with shader compilation, not the AI loop. Fix is a warmup pass on scene load (force-render off-screen to compile materials). Should I add the warmup pass?"
53
-
54
- **Assertions:**
55
-
56
- - [ ] Skill verifies via diagnostics + console BEFORE accepting the user's hypothesis.
57
- - [ ] Skill names the actual cause (shader compile) explicitly.
58
- - [ ] Skill does NOT optimize AI code that wasn't the cause.
59
- - [ ] Skill proposes a targeted fix (warmup) rather than a generic one.
60
-
61
- ## Case 3: Edge Case — Summer MCP available but engine not currently running
62
-
63
- **Fixture:** Same as Case 1 but the engine is open and idle, not playing.
64
-
65
- **Input:** "Why is my game slow?"
66
-
67
- **Expected behavior:**
68
-
69
- - Skill calls `summer_is_running` → false.
70
- - Skill explains: "I need to play the game and reproduce the slowdown to get real numbers."
71
- - Asks user permission: "May I `summer_play` and ask you to reproduce the slow scenario?"
72
- - After OK: runs the play → reproduce → diagnostics → stop loop.
73
- - Does NOT skip baseline measurement and just guess from reading code.
74
-
75
- **Assertions:**
76
-
77
- - [ ] Skill checks `summer_is_running` first.
78
- - [ ] Skill asks before invoking `summer_play`.
79
- - [ ] Skill insists on baseline numbers before fixing anything.
80
- - [ ] Skill does NOT skip straight to "let me read your scripts and guess".
81
-
82
- ## Case 4: No Summer MCP — fallback path
83
-
84
- **Fixture:** Same as Case 1, but Summer MCP unavailable.
85
-
86
- **Input:** "My forest scene is slow."
87
-
88
- **Expected behavior:**
89
-
90
- - Skill detects MCP unavailable.
91
- - Asks the user to enable Godot's Monitor panel (`Debug → Monitors`) and paste at minimum: FPS, frame time (ms), draw calls, video/video memory used, physics active objects.
92
- - Reasons over the pasted numbers the same way it would over diagnostics.
93
- - Continues with hypothesis → proposal → "May I edit?" → manual verification (asks the user to re-run and paste new numbers).
94
-
95
- **Assertions:**
96
-
97
- - [ ] Skill does not blindly call `summer_*` tools and fail.
98
- - [ ] Skill asks for the specific numbers it needs (not a vague "tell me more").
99
- - [ ] Skill still anchors on baseline-first, ONE-fix-at-a-time loop.
100
- - [ ] Skill names the dominant cost from the user-pasted numbers.
101
-
102
- ---
103
-
104
- This spec runs via `/skill-test tune-performance spec` (see `_meta/skill-test/SKILL.md`).
@@ -1,19 +0,0 @@
1
- # Skill Spec: /ui-basics
2
-
3
- > Stub spec. Expand with Happy / Failure / Edge cases. See `fps-controller.md` for the canonical format.
4
-
5
- ## Fixture
6
-
7
- - TBD
8
-
9
- ## Case 1: Happy Path
10
-
11
- **Input:** "<typical user prompt>"
12
-
13
- **Expected MCP tool sequence (in order):**
14
-
15
- 1. TBD
16
-
17
- **Assertions:**
18
-
19
- - [ ] TBD
@@ -1,116 +0,0 @@
1
- # Skill Spec: /vfx
2
-
3
- ## Fixture
4
-
5
- - Godot 4.5 / Summer Engine project, main scene with `World/Player` (CharacterBody3D + Camera3D) and `World/Enemy` (CharacterBody3D + MeshInstance3D + a `damaged(amount)` signal).
6
- - `default_bus_layout.tres` defines `Master`, `Music`, `Ambient`, `SFX` buses (at minimum).
7
- - Summer MCP tools available (engine running on localhost:6550).
8
- - Host file tools available (Read, Edit, Write).
9
-
10
- ## Case 1: Happy Path — combat hits feel flat
11
-
12
- **Input:** "My combat feels flat. Add some juice."
13
-
14
- **Expected behavior:**
15
-
16
- 1. Skill asks one focused question: "What feels flat? combat hits / pickups / explosions / spell casts / something else."
17
- 2. User says "combat hits".
18
- 3. Skill calls `summer_get_scene_tree`, `summer_inspect_node "./World/Enemy"`, `summer_inspect_node "./World/Player/Camera3D"`, and confirms the audio bus list.
19
- 4. Skill proposes the full trio bundle: "I'm about to add HitFlash on `./World/Enemy`, CameraShake script on `./World/Player/Camera3D`, AudioDucker autoload, and wire the `damaged` signal so one hit fires all three. OK?"
20
- 5. After user OK:
21
- - `summer_add_node(parent="./World/Enemy", type="Node", name="HitFlash")`
22
- - `Write scripts/vfx/hit_flash.gd`
23
- - `Write scripts/vfx/camera_shake.gd`
24
- - `Write scripts/vfx/audio_ducker.gd`
25
- - Register `AudioDucker` as an autoload (project settings or `.cfg` edit).
26
- - `summer_connect_signal(from="./World/Enemy", signal="damaged", to="./World/Enemy/HitFlash", method="flash")`
27
- - `summer_save_scene`
28
- - `summer_get_script_errors`
29
-
30
- **Assertions:**
31
-
32
- - [ ] Skill asks the "what feels flat?" question before any tool call.
33
- - [ ] Skill reads scene tree AND inspects both Enemy mesh and Player Camera3D before mutation.
34
- - [ ] Skill confirms audio bus names exist before installing AudioDucker.
35
- - [ ] Skill explicitly states the bundle of changes and asks "May I" / "OK?" before mutation.
36
- - [ ] HitFlash uses `create_tween()` + `tween_callback`, NOT `await create_timer().timeout`.
37
- - [ ] HitFlash kills any in-flight tween on re-entry (rapid hits).
38
- - [ ] CameraShake uses quadratic falloff (`_trauma * _trauma`), NOT linear.
39
- - [ ] CameraShake subtracts last frame's `_shake_offset` before applying the new one.
40
- - [ ] AudioDucker captures `_initial_volumes` once in `_ready()` and applies ducking as an offset (relative dB drop), NOT absolute writes.
41
- - [ ] AudioDucker kills any in-flight tween before starting a new duck.
42
- - [ ] Final hit flash duration is 0.06–0.12 sec.
43
- - [ ] Skill never calls `summer_set_resource_property` on an inline sub_resource (e.g. for the flash StandardMaterial3D).
44
- - [ ] Skill ends with `summer_save_scene` then `summer_get_script_errors`.
45
-
46
- ## Case 2: Failure Path — missing audio buses
47
-
48
- **Fixture:** project's `default_bus_layout.tres` has only `Master`. No `Music`, `Ambient`, `SFX`.
49
-
50
- **Input:** "Add hit feedback. Audio ducking too."
51
-
52
- **Expected behavior:**
53
-
54
- - Skill calls `summer_get_scene_tree` then inspects the bus layout (or asks the user to paste it).
55
- - Sees only `Master` exists.
56
- - Skill does NOT install AudioDucker silently — it explains: "Audio ducking only works if at least Music/Ambient/SFX buses exist. With one Master bus, ducking would also duck the impact SFX you're trying to highlight. I can either (a) install hit-flash + camera-shake now and defer ducking until you set up buses via the `audio-direction` skill, or (b) walk through bus setup first."
57
- - Waits for user choice.
58
- - Whichever path: hit-flash + camera-shake still install correctly.
59
-
60
- **Assertions:**
61
-
62
- - [ ] Skill detects single-bus layout and stops to ask.
63
- - [ ] Skill does NOT register AudioDucker autoload silently.
64
- - [ ] Skill names `audio-direction` skill as the prerequisite.
65
- - [ ] Skill still ships the other two systems in this session if the user picks (a).
66
-
67
- ## Case 3: Edge Case — pickup pulse without trauma
68
-
69
- **Fixture:** Same as Case 1, but the user is polishing pickups (peaceful glow), not combat.
70
-
71
- **Input:** "Make my health pickups feel more rewarding when collected."
72
-
73
- **Expected behavior:**
74
-
75
- - Skill asks the focused question; user says "pickups".
76
- - Skill recognizes pickups should NOT trigger camera shake or aggressive audio ducking — those read as combat, not reward.
77
- - Skill installs only the HitFlash module (renaming usage as a pickup pulse — same script, called on collection), and proposes a small upward duck (0.2 amount, 0.3 duration) so the pickup "ding" reads above ambient.
78
- - Skill explicitly says: "Skipping camera shake here — shake reads as 'something hit me', wrong feeling for pickups. Same for heavy ducking. Want a tiny duck (0.2) to make the pickup chime pop?"
79
- - Does NOT call `add_trauma` from the pickup handler.
80
-
81
- **Assertions:**
82
-
83
- - [ ] Skill recognizes pickups ≠ combat and adapts the trio.
84
- - [ ] Skill explicitly skips camera-shake with reasoning, not silently.
85
- - [ ] HitFlash script is reused (not a forked copy) — `flash()` called on the pickup mesh.
86
- - [ ] Audio duck `amount` ≤ 0.3, duration ≤ 0.4 (gentle).
87
- - [ ] Skill does NOT install the full combat trio when the answer was "pickups".
88
-
89
- ## Case 4: No Summer MCP — file-edit fallback
90
-
91
- **Fixture:** Same as Case 1, but Summer MCP is unavailable (Cursor in a project where the engine is not connected).
92
-
93
- **Input:** "Add hit-flash + camera-shake + audio ducking to my combat."
94
-
95
- **Expected behavior:**
96
-
97
- - Skill detects MCP unavailable.
98
- - Asks the user to paste (a) the relevant `.tscn` snippet showing Enemy + Player + Camera3D node paths, and (b) the bus list from `default_bus_layout.tres`.
99
- - Writes `scripts/vfx/hit_flash.gd`, `scripts/vfx/camera_shake.gd`, `scripts/vfx/audio_ducker.gd` directly via host file tools.
100
- - Provides a `.tscn` patch for adding the HitFlash node and a manual instruction for registering the AudioDucker autoload via `project.godot` or the editor.
101
- - Provides a manual signal-connect instruction (or a `.tscn` connection block) instead of `summer_connect_signal`.
102
- - Still asks "May I write `scripts/vfx/<file>.gd`?" before each file write.
103
- - Does NOT blindly call `summer_*` tools.
104
-
105
- **Assertions:**
106
-
107
- - [ ] Skill identifies MCP unavailable and adapts.
108
- - [ ] Generated GDScript is syntactically valid Godot 4.5 with type hints.
109
- - [ ] Skill asks the user to paste the scene snippet AND the bus list.
110
- - [ ] Skill provides explicit autoload-registration instructions (no `summer_*` autoload tool exists).
111
- - [ ] Skill applies "May I write …" protocol on each of the 3 file writes.
112
- - [ ] No `summer_*` tool calls appear in the transcript when MCP is flagged unavailable.
113
-
114
- ---
115
-
116
- This spec runs via `/skill-test vfx spec` (see `_meta/skill-test/SKILL.md`).