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
@@ -0,0 +1,174 @@
1
+ ---
2
+ name: debugging-game-feel
3
+ description: Use when a gameplay feature works correctly but feels wrong — floaty jumps, mushy combat, sluggish camera, weightless impacts. Different from logical bug debugging; the bug is subjective and lives in tuning, timing, and feedback layers.
4
+ ---
5
+
6
+ # Debugging Game Feel
7
+
8
+ ## Overview
9
+
10
+ "Works but feels wrong" is its own debugging discipline. The code is correct. No diagnostic flags it. The unit tests pass. And yet the jump is floaty, the sword has no weight, the camera lags the player, the dash is unsatisfying.
11
+
12
+ **Core principle:** Game-feel bugs are tuning bugs, not logic bugs. Treat them with discipline — isolate one variable, compare to a reference, measure what you can, feel what you can't.
13
+
14
+ This skill is for the diagnostic phase. The polish-and-juice layer (screen shake, hit-stop, particles, sound design) is `summer:visual-effects/game-feel` — go there once you've identified WHICH variable is wrong.
15
+
16
+ ## When To Use
17
+
18
+ - The user says: "feels floaty", "feels mushy", "feels off", "feels sluggish", "doesn't feel right", "lacks impact", "lacks weight", "doesn't feel satisfying".
19
+ - The feature passes `summer:playtesting-a-feature` (no errors, golden path runs) but still doesn't feel right.
20
+ - You're tuning movement, combat, camera, or any interaction with frame-level timing.
21
+
22
+ ## When NOT To Use
23
+
24
+ - The feature has a **concrete reproducible bug** — go to `summer:investigating-bugs`.
25
+ - The feature **crashes or throws** — go to `summer:debug`.
26
+ - The feature **hasn't been built yet** — design it via `summer:brainstorming` first.
27
+
28
+ ## The Iron Law
29
+
30
+ ```
31
+ ONE VARIABLE AT A TIME. ALWAYS.
32
+ ```
33
+
34
+ Game-feel debugging is the place where engineers most often violate this rule, because each variable is a small tweak. "Let me bump acceleration AND friction AND max speed all together" produces a result you cannot reason about. You learn nothing. The bug returns.
35
+
36
+ ## The Loop
37
+
38
+ ```
39
+ Anchor → Isolate → Tweak one variable → Compare → Decide → Repeat
40
+ ```
41
+
42
+ ### 1. Anchor: name the reference
43
+
44
+ Before touching any value, decide what "right" feels like. Game feel is subjective; without an anchor, you are debugging air.
45
+
46
+ Two ways to anchor:
47
+
48
+ | Anchor type | When to use | Example |
49
+ |---|---|---|
50
+ | **Reference game footage** | The user has a target in mind (Hollow Knight jumps, Dark Souls weight, Hades dashes) | "Match the Hollow Knight jump arc — peak in ~0.25s, fall ~0.35s, terminal velocity around frame 30" |
51
+ | **Internal known-good** | An older build / a sibling feature in the same game already feels right | "The pistol fires snappy. Make the rifle feel as snappy as the pistol minus the recovery frames." |
52
+
53
+ Write the anchor down in one sentence. If the user can't articulate it, ask. "What game does this remind you of when it's working?" is a fast way to extract the reference.
54
+
55
+ ### 2. Isolate: name the suspect variable
56
+
57
+ Game-feel bugs almost always live in one of a small set of axes. Pick the most likely one first.
58
+
59
+ | Domain | Common suspect variables |
60
+ |---|---|
61
+ | Jump | gravity, jump velocity, terminal velocity, coyote-time window, jump-buffer window, variable-jump cutoff, apex hang time |
62
+ | Run | acceleration, max speed, friction (ground vs air), deceleration on input release, turn-around speed |
63
+ | Combat hit | hit-stop duration (attacker), hit-stop duration (target), screen shake amplitude + duration, knockback velocity + decay, recovery frames |
64
+ | Camera | follow lag (lerp factor or spring stiffness), lookahead distance, deadzone size, snap-vs-smooth on direction change |
65
+ | Dash | distance, duration, ease curve, cooldown, i-frame window, end-lag |
66
+ | UI feedback | input-to-response frame count, tween duration, easing function, sound onset delay |
67
+
68
+ If you cannot pick one suspect: state the top two, pick the one you think is most likely (say which), tweak it, see if it moved the feel. Do not tweak both.
69
+
70
+ ### 3. Tweak one variable
71
+
72
+ - Read the current value via `summer_inspect_node` or open the relevant `.tres` / `.gd` file.
73
+ - Change ONE value. Save.
74
+ - Trigger `summer_play` and walk the feature.
75
+ - Ask: did the feel move toward or away from the anchor?
76
+
77
+ ### 4. Compare
78
+
79
+ Two compare modes:
80
+
81
+ **Feel:** subjective. The user (or you, if you have eyes on the screen) reports "warmer" or "colder." This is fine. Most game-feel work is felt, not measured.
82
+
83
+ **Measure:** objective. When the feel is ambiguous, drop down to frame counts.
84
+
85
+ | Question | Measurement |
86
+ |---|---|
87
+ | "Does the jump peak too fast?" | `print` the y-velocity in `_physics_process`, count frames from launch to peak |
88
+ | "Is the camera too laggy?" | `print` `camera.global_position - target.global_position` per frame |
89
+ | "Is the input dead?" | Log input event frame and resulting state-machine transition frame; subtract |
90
+ | "Is the hit-stop too short?" | Log frame at hit + frame at unfreeze |
91
+
92
+ The point of measurement is to ground the conversation in numbers when "feels off" stops being useful. You do not need to measure most tweaks — only the ambiguous ones.
93
+
94
+ ### 5. Decide
95
+
96
+ After the tweak:
97
+
98
+ - **Felt closer to the anchor** → commit the change, move to the next suspect variable if the feel still isn't right.
99
+ - **Felt further** → revert the change, pick a different suspect variable.
100
+ - **No change in feel** → revert the change, you tweaked the wrong variable.
101
+
102
+ Never leave a tweak in the codebase that you couldn't tell did anything. It will compound with the next tweak and you will lose the thread.
103
+
104
+ ## The Compounding Tweaks Trap
105
+
106
+ The most common failure mode in game-feel work:
107
+
108
+ ```
109
+ Jump feels floaty.
110
+ Bump gravity from 980 → 1200. Still floaty.
111
+ Bump it to 1500. A bit better.
112
+ Also reduce jump velocity from 500 → 450.
113
+ Also tweak terminal velocity 1500 → 2000.
114
+ Also add a 3-frame coyote window because why not.
115
+ Now it feels... different. But the dash that used to feel great no longer does.
116
+ Try to undo? You don't remember the starting point.
117
+ ```
118
+
119
+ **Antidote:**
120
+
121
+ 1. Note the starting values before you begin.
122
+ 2. One variable at a time.
123
+ 3. After every tweak, ask: anchor closer or farther? If unsure, revert.
124
+ 4. Commit small revertible changes — one variable per commit during a feel-tuning session. Easy to bisect.
125
+
126
+ ## Feel Principles (Briefly)
127
+
128
+ Game feel rests on three small ideas. Most "feels wrong" bugs trace to one of these being undertuned:
129
+
130
+ | Principle | What it means | What it looks like when broken |
131
+ |---|---|---|
132
+ | **Anticipation** | A small wind-up before a big action | Sword swings feel like they "appear" instead of being thrown |
133
+ | **Follow-through** | The action continues past the input | Player snaps to a stop on input release — feels robotic |
134
+ | **Weight** | Visible cost to changing direction or stopping | Player turns on a dime at full speed — feels weightless |
135
+
136
+ These are diagnostic tools, not lecture material. When the user says "feels weightless," your suspect-variable shortlist is: deceleration on input release, friction, turn-around speed, animation cross-fade time.
137
+
138
+ ## Red Flags — STOP
139
+
140
+ | Red flag | Reality |
141
+ |---|---|
142
+ | Tweaking 2+ variables in one play session without reverting between | You will lose the signal. |
143
+ | "Let me just feel it out without an anchor" | You will tune in circles. Name the reference. |
144
+ | "The user said floaty so I'm jacking gravity" | "Floaty" can also mean weak air control, slow terminal velocity, or too-long apex hang. Confirm before tweaking. |
145
+ | Skipping the play step ("I'll just bump the number and trust the feel") | Game feel is felt, not predicted. Play every tweak. |
146
+ | Adding "while I'm here" tweaks to unrelated features | Game feel debugging is a focused activity. Stay on the one feature. |
147
+ | Going to `summer:visual-effects/game-feel` before identifying the broken variable | Juice on top of a broken tuning makes the bug louder. Fix tuning first. |
148
+ | Spending >30 minutes on one variable without progress | The anchor is wrong, or the variable is wrong. Step back, re-anchor. |
149
+
150
+ ## Rationalization Prevention
151
+
152
+ | Excuse | Reality |
153
+ |---|---|
154
+ | "It's subjective — I'll just iterate fast" | Fast iteration without isolation is thrashing, not iteration. |
155
+ | "I know game feel, I don't need an anchor" | Even pros anchor. Especially pros anchor. |
156
+ | "Two variables are coupled, I have to tune them together" | Then tune one, ship that delta, tune the other separately. |
157
+ | "The user can't articulate the anchor" | "What game does this remind you of when it works?" — one question, anchor obtained. |
158
+ | "Adding juice will hide the bad tuning" | It won't. It amplifies it. |
159
+
160
+ ## When To Escalate
161
+
162
+ After diagnosis pins down which variable(s) are wrong, the tuning is done — but the feature may still want polish. Hand off to:
163
+
164
+ - `summer:visual-effects/game-feel` — for the screen-shake, hit-stop, particle, sound layer once tuning is locked.
165
+ - `summer:debug` — if mid-debug you discover an actual error (signal not firing, node freed) hiding under the feel issue.
166
+
167
+ ## The Bottom Line
168
+
169
+ Feel bugs are tuning bugs. Tuning is a one-variable-at-a-time discipline. Anchor to a reference. Tweak one number. Play it. Decide. Repeat.
170
+
171
+ **Related skills:**
172
+ - `summer:investigating-bugs` — for logical bugs with concrete repros, not feel.
173
+ - `summer:playtesting-a-feature` — the playtest discipline this skill plugs into.
174
+ - `summer:debug` — when the feel investigation surfaces an actual error.
@@ -0,0 +1,190 @@
1
+ ---
2
+ name: diagnosing-perf-regressions
3
+ description: Use when frame rate, frame time, or load time has gotten worse since a known-good state — "it used to run at 60, now it's at 30." Focused on finding the cause of a regression, not general performance tuning.
4
+ ---
5
+
6
+ # Diagnosing Performance Regressions
7
+
8
+ ## Overview
9
+
10
+ There is a difference between "this game is slow" and "this game got slow." This skill is for the second one.
11
+
12
+ **Core principle:** A regression has a cause. The cause is a specific change. Bisect to find the change, then root-cause from there.
13
+
14
+ This skill is **not** general performance tuning. If the game has always run at 30fps and you want to push it to 60, that is `summer:tune-performance` (the domain skill for budget-driven optimization). This skill is the diagnostic — what broke, where, when.
15
+
16
+ ## When To Use
17
+
18
+ - "It used to run at 60fps, now it's at 30."
19
+ - "Load time was 3s yesterday, now it's 15s."
20
+ - "Frame stutters started after I added X."
21
+ - "Build went from buttery to choppy and I don't know why."
22
+
23
+ ## When NOT To Use
24
+
25
+ - "The game has always been slow, help me speed it up." → `summer:tune-performance`.
26
+ - "I want to know if my game is fast enough to ship." → `summer:tune-performance`.
27
+ - "The game crashes." → `summer:debug`.
28
+
29
+ ## The Iron Law
30
+
31
+ ```
32
+ NO PERF FIX WITHOUT A KNOWN-GOOD vs KNOWN-BAD MEASUREMENT
33
+ ```
34
+
35
+ You cannot fix a regression you have not measured. Eyeballing "feels laggy" is not a measurement. Get a number for the good state and a number for the bad state before touching code.
36
+
37
+ ## The Loop
38
+
39
+ ```
40
+ Measure now → Find last good → Bisect changes → Match to a cliff → A/B fix → Re-measure
41
+ ```
42
+
43
+ ### 1. Measure now
44
+
45
+ ```
46
+ summer_play (on the scene that's slow)
47
+ ── wait 5-10 seconds of normal play ──
48
+ summer_get_diagnostics
49
+ summer_get_console
50
+ summer_stop
51
+ ```
52
+
53
+ What to capture:
54
+
55
+ | Metric | Source | Why |
56
+ |---|---|---|
57
+ | Avg FPS / frame time | `summer_get_diagnostics` or in-game perf monitor | Headline number |
58
+ | Spike pattern | `summer_get_console` if user has frame-time prints, else in-game monitor | Steady 30 vs intermittent stutters → different causes |
59
+ | Scene complexity | `summer_get_scene_tree` (root counts) | Establishes baseline for instance/body count cliffs |
60
+
61
+ Write the bad-state number down. "Scene `Level3` runs at 31fps avg, drops to 12fps when 5+ enemies are on screen."
62
+
63
+ ### 2. Find the last known-good state
64
+
65
+ Ask the user: when did it last run well? Then go to the VCS:
66
+
67
+ ```bash
68
+ git log --oneline --since="<last good date>" --until="now"
69
+ ```
70
+
71
+ If they can name a commit ("it was fine on Monday's build"), check that out and measure it the same way. You now have:
72
+
73
+ - Known good: commit X, scene `Level3`, 60fps avg.
74
+ - Known bad: HEAD, scene `Level3`, 31fps avg.
75
+
76
+ If they can't name a date: ask for the rough window, list the commits, ask which ones are likely candidates. Do not bisect blind across 200 commits.
77
+
78
+ ### 3. Bisect the changes
79
+
80
+ ```bash
81
+ git log --oneline <last-good>..HEAD
82
+ ```
83
+
84
+ Read the list. Group commits into suspects:
85
+
86
+ | Likely culprit | Why |
87
+ |---|---|
88
+ | Big asset imports (.glb, textures, audio) | GPU memory, draw-call count |
89
+ | New shaders or material changes | Compilation stalls, overdraw, pipeline switches |
90
+ | Scene additions (enemies, props, lights) | Physics-body count, instance count, light count |
91
+ | `_process` / `_physics_process` additions | CPU per-frame cost |
92
+ | Signal connections in tight loops | Hidden per-frame cost |
93
+ | Particle systems | GPU + CPU |
94
+ | `@tool` scripts running in editor | Misleading editor FPS |
95
+ | Resource preload changes | First-use stalls |
96
+
97
+ If a single commit is the obvious suspect (e.g. "Added 200 enemies to spawner"), test it first. Otherwise actually `git bisect` — check out the midpoint, measure FPS, repeat. Don't theorize through it; the bisect is fast and definitive.
98
+
99
+ ### 4. Match to one of the four Godot perf cliffs
100
+
101
+ Godot 4.x regressions cluster heavily into four categories. Knowing them shortens diagnosis to minutes.
102
+
103
+ | Cliff | Symptom | How to verify | Common cause |
104
+ |---|---|---|---|
105
+ | **Too many physics bodies** | FPS scales inversely with on-screen actor count, no GPU pressure | Count active `CharacterBody`/`RigidBody`/`Area` nodes; FPS doubles when half are queue_freed | Spawner with no upper cap; bullets/particles using physics bodies; collision layers too broad |
106
+ | **Shader compilation stalls** | First-frame or first-effect-fire stutter, then smooth; only on shipped builds, not editor | Frame-time spike on first cast/shot; clean after; `OS.has_feature("editor")` differences | New shader added; `unique` material not pre-warmed; pipeline cache not built |
107
+ | **GPU instance count / draw calls** | Steady low FPS, scales with what's on screen, no CPU pressure | RenderingServer perf monitors show high draw call count; FPS recovers when camera looks away | Forgot to enable MultiMeshInstance; unique materials per instance breaking instancing; too-detailed LOD0 |
108
+ | **Transparent overdraw** | FPS tanks when looking at smoke, fire, foliage, glass — fine otherwise | Look at the offending region, FPS drops; look away, recovers | New particle effect with large quads; transparent UI over the viewport; fog/volumetrics |
109
+
110
+ If the bad-state symptom matches one row, you have your hypothesis. Verify by reverting just the change you suspect and re-measuring.
111
+
112
+ ### 5. A/B with one variable
113
+
114
+ This is the most violated step. Discipline:
115
+
116
+ - **Revert one suspect commit** (or stub the suspect feature behind a flag).
117
+ - Rebuild / reload the scene.
118
+ - Measure FPS the same way you did in step 1.
119
+ - Compare to known-bad. Did it recover?
120
+
121
+ If yes → root cause confirmed. Now decide: fix the change, or accept the perf cost.
122
+ If no → that wasn't it. Restore. Try the next suspect.
123
+
124
+ **Never** revert multiple changes at once during diagnosis. You will not know which one was the cause, and the bug will return on the next merge.
125
+
126
+ ### 6. Re-measure after the fix
127
+
128
+ The fix is not done until the same measurement that found the regression returns the good number. Same scene, same play duration, same warm-up.
129
+
130
+ ```
131
+ summer_clear_console
132
+ summer_play
133
+ ── 5-10 seconds of play ──
134
+ summer_get_diagnostics
135
+ summer_stop
136
+ ```
137
+
138
+ State the result with the number: "Reverted the per-frame `get_tree().get_nodes_in_group()` call in `enemy_manager.gd`. Level3 back to 58fps avg." Not "should be faster now."
139
+
140
+ ## When To Escalate
141
+
142
+ | Situation | Go to |
143
+ |---|---|
144
+ | Regression confirmed and root cause known, but the fix is "make the feature cheaper" rather than "undo the change" | `summer:tune-performance` for the optimization pass |
145
+ | The regression turns out to be a crash or error in disguise (the slow path is throwing exceptions in a tight loop) | `summer:debug` |
146
+ | The cause is a Godot version change or engine-side regression | Surface to the user; this is not a project-side fix |
147
+ | Bisect lands on a commit that touches 40 files | Subdivide the commit: check out the commit, revert subsets, re-measure |
148
+
149
+ ## Red Flags — STOP
150
+
151
+ | Red flag | Reality |
152
+ |---|---|
153
+ | "Just optimize the whole scene" | That's tuning, not regression diagnosis. Find what changed first. |
154
+ | Reverting 3 commits at once to "see if it helps" | You learn nothing. Revert one. |
155
+ | Eyeballing "feels slow" without measuring | You will optimize the wrong thing. Get a number. |
156
+ | Skipping the known-good measurement | Without a baseline, you don't know when you're done. |
157
+ | Reading the slow scene's code top-to-bottom looking for inefficiency | The regression is in what changed, not in what was already there. |
158
+ | Adding caching / pooling / LOD before identifying the cause | These are tuning moves. They can hide the regression instead of fixing it. |
159
+ | Trusting editor FPS as ground truth | Editor runs `@tool` scripts, debug overlays, and a different render pipeline. Measure in a built or `--game` run when possible. |
160
+ | "Maybe it's just a Tuesday thing" | Performance does not regress randomly. There is a cause. |
161
+
162
+ ## Rationalization Prevention
163
+
164
+ | Excuse | Reality |
165
+ |---|---|
166
+ | "User wants it fixed now, no time to bisect" | Bisect is 5-15 minutes. Blind optimization can burn a day. |
167
+ | "The slow commit is obvious, no need to A/B" | The "obvious" cause is wrong ~30% of the time. Verify before fixing. |
168
+ | "I'll measure after I fix it" | If you don't have the bad number, you can't prove the fix worked. |
169
+ | "It's probably just Godot" | Engine-side regressions exist but are rare. Suspect your project first. |
170
+ | "Adding a pool / LOD / cache will help anyway" | Premature optimization on the wrong system is wasted work. |
171
+
172
+ ## When The Engine Isn't Running
173
+
174
+ If `summer_play` is unavailable:
175
+
176
+ 1. Ask the user for an in-game perf overlay screenshot (FPS, frame time, draw call count).
177
+ 2. Walk the bisect logically with them: "Run on commit X, tell me the FPS. Run on commit Y, tell me the FPS."
178
+ 3. Do not claim a fix is verified from code reading alone.
179
+
180
+ ## The Bottom Line
181
+
182
+ A regression is a delta. Diagnose the delta, not the codebase.
183
+
184
+ Measure now. Measure last-good. Bisect what changed. Match to a Godot perf cliff. A/B one variable. Re-measure. Done.
185
+
186
+ **Related skills:**
187
+ - `summer:tune-performance` — for general optimization once the regression is fixed or when no regression exists.
188
+ - `summer:investigating-bugs` — when the slow path turns out to be a logic bug (errors in a tight loop).
189
+ - `summer:debug` — when the perf issue is actually a crash or freeze.
190
+ - `summer:verification-before-completion` — to claim the fix worked, with numbers.
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: dispatching-parallel-agents
3
+ description: Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
4
+ ---
5
+
6
+ # Dispatching Parallel Agents
7
+
8
+ ## Overview
9
+
10
+ You delegate tasks to specialized agents with isolated context. By precisely crafting their instructions and context, you ensure they stay focused and succeed at their task. They should never inherit your session's context or history — you construct exactly what they need. This also preserves your own context for coordination work.
11
+
12
+ When you have multiple unrelated failures (different test files, different subsystems, different bugs), investigating them sequentially wastes time. Each investigation is independent and can happen in parallel.
13
+
14
+ **Core principle:** Dispatch one agent per independent problem domain. Let them work concurrently.
15
+
16
+ ## When to Use
17
+
18
+ ```dot
19
+ digraph when_to_use {
20
+ "Multiple failures?" [shape=diamond];
21
+ "Are they independent?" [shape=diamond];
22
+ "Single agent investigates all" [shape=box];
23
+ "One agent per problem domain" [shape=box];
24
+ "Can they work in parallel?" [shape=diamond];
25
+ "Sequential agents" [shape=box];
26
+ "Parallel dispatch" [shape=box];
27
+
28
+ "Multiple failures?" -> "Are they independent?" [label="yes"];
29
+ "Are they independent?" -> "Single agent investigates all" [label="no - related"];
30
+ "Are they independent?" -> "Can they work in parallel?" [label="yes"];
31
+ "Can they work in parallel?" -> "Parallel dispatch" [label="yes"];
32
+ "Can they work in parallel?" -> "Sequential agents" [label="no - shared state"];
33
+ }
34
+ ```
35
+
36
+ **Use when:**
37
+ - 3+ test files failing with different root causes
38
+ - Multiple subsystems broken independently
39
+ - Each problem can be understood without context from others
40
+ - No shared state between investigations
41
+
42
+ **Don't use when:**
43
+ - Failures are related (fix one might fix others)
44
+ - Need to understand full system state
45
+ - Agents would interfere with each other
46
+
47
+ ## The Pattern
48
+
49
+ ### 1. Identify Independent Domains
50
+
51
+ Group failures by what's broken:
52
+ - File A tests: Tool approval flow
53
+ - File B tests: Batch completion behavior
54
+ - File C tests: Abort functionality
55
+
56
+ Each domain is independent - fixing tool approval doesn't affect abort tests.
57
+
58
+ ### 2. Create Focused Agent Tasks
59
+
60
+ Each agent gets:
61
+ - **Specific scope:** One test file or subsystem
62
+ - **Clear goal:** Make these tests pass
63
+ - **Constraints:** Don't change other code
64
+ - **Expected output:** Summary of what you found and fixed
65
+
66
+ ### 3. Dispatch in Parallel
67
+
68
+ ```typescript
69
+ // In Claude Code / AI environment
70
+ Task("Fix agent-tool-abort.test.ts failures")
71
+ Task("Fix batch-completion-behavior.test.ts failures")
72
+ Task("Fix tool-approval-race-conditions.test.ts failures")
73
+ // All three run concurrently
74
+ ```
75
+
76
+ ### 4. Review and Integrate
77
+
78
+ When agents return:
79
+ - Read each summary
80
+ - Verify fixes don't conflict
81
+ - Run full test suite
82
+ - Integrate all changes
83
+
84
+ ## Agent Prompt Structure
85
+
86
+ Good agent prompts are:
87
+ 1. **Focused** - One clear problem domain
88
+ 2. **Self-contained** - All context needed to understand the problem
89
+ 3. **Specific about output** - What should the agent return?
90
+
91
+ ```markdown
92
+ Fix the 3 failing tests in src/agents/agent-tool-abort.test.ts:
93
+
94
+ 1. "should abort tool with partial output capture" - expects 'interrupted at' in message
95
+ 2. "should handle mixed completed and aborted tools" - fast tool aborted instead of completed
96
+ 3. "should properly track pendingToolCount" - expects 3 results but gets 0
97
+
98
+ These are timing/race condition issues. Your task:
99
+
100
+ 1. Read the test file and understand what each test verifies
101
+ 2. Identify root cause - timing issues or actual bugs?
102
+ 3. Fix by:
103
+ - Replacing arbitrary timeouts with event-based waiting
104
+ - Fixing bugs in abort implementation if found
105
+ - Adjusting test expectations if testing changed behavior
106
+
107
+ Do NOT just increase timeouts - find the real issue.
108
+
109
+ Return: Summary of what you found and what you fixed.
110
+ ```
111
+
112
+ ## Common Mistakes
113
+
114
+ **❌ Too broad:** "Fix all the tests" - agent gets lost
115
+ **✅ Specific:** "Fix agent-tool-abort.test.ts" - focused scope
116
+
117
+ **❌ No context:** "Fix the race condition" - agent doesn't know where
118
+ **✅ Context:** Paste the error messages and test names
119
+
120
+ **❌ No constraints:** Agent might refactor everything
121
+ **✅ Constraints:** "Do NOT change production code" or "Fix tests only"
122
+
123
+ **❌ Vague output:** "Fix it" - you don't know what changed
124
+ **✅ Specific:** "Return summary of root cause and changes"
125
+
126
+ ## When NOT to Use
127
+
128
+ **Related failures:** Fixing one might fix others - investigate together first
129
+ **Need full context:** Understanding requires seeing entire system
130
+ **Exploratory debugging:** You don't know what's broken yet
131
+ **Shared state:** Agents would interfere (editing same files, using same resources)
132
+
133
+ ## Real Example from Session
134
+
135
+ **Scenario:** 6 test failures across 3 files after major refactoring
136
+
137
+ **Failures:**
138
+ - agent-tool-abort.test.ts: 3 failures (timing issues)
139
+ - batch-completion-behavior.test.ts: 2 failures (tools not executing)
140
+ - tool-approval-race-conditions.test.ts: 1 failure (execution count = 0)
141
+
142
+ **Decision:** Independent domains - abort logic separate from batch completion separate from race conditions
143
+
144
+ **Dispatch:**
145
+ ```
146
+ Agent 1 → Fix agent-tool-abort.test.ts
147
+ Agent 2 → Fix batch-completion-behavior.test.ts
148
+ Agent 3 → Fix tool-approval-race-conditions.test.ts
149
+ ```
150
+
151
+ **Results:**
152
+ - Agent 1: Replaced timeouts with event-based waiting
153
+ - Agent 2: Fixed event structure bug (threadId in wrong place)
154
+ - Agent 3: Added wait for async tool execution to complete
155
+
156
+ **Integration:** All fixes independent, no conflicts, full suite green
157
+
158
+ **Time saved:** 3 problems solved in parallel vs sequentially
159
+
160
+ ## Key Benefits
161
+
162
+ 1. **Parallelization** - Multiple investigations happen simultaneously
163
+ 2. **Focus** - Each agent has narrow scope, less context to track
164
+ 3. **Independence** - Agents don't interfere with each other
165
+ 4. **Speed** - 3 problems solved in time of 1
166
+
167
+ ## Verification
168
+
169
+ After agents return:
170
+ 1. **Review each summary** - Understand what changed
171
+ 2. **Check for conflicts** - Did agents edit same code?
172
+ 3. **Run full suite** - Verify all fixes work together
173
+ 4. **Spot check** - Agents can make systematic errors
174
+
175
+ ## Real-World Impact
176
+
177
+ From debugging session (2025-10-03):
178
+ - 6 failures across 3 files
179
+ - 3 agents dispatched in parallel
180
+ - All investigations completed concurrently
181
+ - All fixes integrated successfully
182
+ - Zero conflicts between agent changes
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: gameskill
3
+ description: Use when finishing a game-development session and you want to capture what you just learned into Summer's canonical skill library so the next session and every Summer user start smarter. Trigger on "gameskill", "/gameskill", "capture learnings", "save to skills".
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: workflow
7
+ allowed-tools: Read Write Edit Glob Grep Bash
8
+ ---
9
+
10
+ # /gameskill — Capture Session Learnings into the Skill Library
11
+
12
+ You're being invoked at the end (or middle) of a game-development session. Your job is to turn what you just figured out into a durable skill update so future agents and Summer users get to start where you ended.
13
+
14
+ This is the meta-skill: the loop that turns ad-hoc fixes into reusable expertise.
15
+
16
+ ## What "Summer Engine" is, so you're grounded
17
+
18
+ Three repos, one ecosystem:
19
+
20
+ 1. **SummerEngine repo** — the desktop engine (Godot fork in C++) plus the canonical CLI. Engine source: `editor/`, `core/`, and the Summer-specific module at `modules/1summer_engine/`. CLI source: `tools/summer-cli/`. The CLI ships as `npm i -g summer-engine`. It does install/login/create/run for the engine, plus `summer skills install --agent claude-code` which writes a curated subset of skills into `~/.claude/skills/` for any agent to auto-discover.
21
+ 2. **PublicSummerEngine repo** — the web app at summerengine.com. Has its own AI skill stores at `src/lib/ai/skills/bundled/` and `public/knowledge/summer/skills/` for the in-browser chat agent. Also has its own consumers of the engine API in `src/lib/bridge/direct-executor.ts` and `src/lib/ai/tools/run-and-verify.ts` which call the same engine endpoints the CLI does.
22
+ 3. **The active game project** — usually `~/development/<game-name>` (Godot 4.6) or whatever game you were just working on. Real working code in this repo is the gold standard for examples.
23
+
24
+ The skill system is the value flywheel. Every game shipped teaches lessons. Lessons become skills. Next user starts smarter. Your job here is to close that loop for what you just did.
25
+
26
+ ## Cross-repo change awareness — read before any non-trivial fix
27
+
28
+ When the lesson is "the engine should expose more / behave differently," the change usually crosses repo boundaries. Map the layers before you edit:
29
+
30
+ ```
31
+ [active game] -> calls MCP / web app
32
+ v
33
+ [summer-cli MCP server (TypeScript)] -> calls /api/ops + /api/state/* on the engine
34
+ v
35
+ [Summer Engine binary (C++ in SummerEngine repo)] - source of truth for what the API returns
36
+
37
+ [PublicSummerEngine web app (TypeScript)] -> also calls the same engine endpoints via direct-executor or Redis bridge
38
+ ```
39
+
40
+ Implications:
41
+
42
+ - A C++ change in `SummerEngine/modules/1summer_engine/` or `SummerEngine/editor/` reaches everyone (CLI MCP, web app, future tools). Most powerful, also highest blast radius.
43
+ - A TypeScript change in `tools/summer-cli/src/mcp/` only changes what the CLI exposes. The web app has its own TypeScript layer at `PublicSummerEngine/src/lib/bridge/`. Same engine endpoints, different glue. Don't assume your CLI tool change is web-app-aware.
44
+ - A skill update in `tools/summer-cli/skills/` affects every agent that runs `summer skills install`. The web app's skill store is separate (`PublicSummerEngine/src/lib/ai/skills/bundled/`) and currently uses a different format (template wizards, not Markdown discipline guides). Don't try to mirror skills there blindly.
45
+
46
+ When you change an engine endpoint's response shape:
47
+
48
+ 1. Grep both `tools/summer-cli/src/` and `PublicSummerEngine/src/lib/` for consumers of that endpoint.
49
+ 2. Confirm the change is additive (new fields, no removed/renamed) so existing consumers still work without modification.
50
+ 3. If the change is breaking, update both consumers in the same logical commit set.
51
+ 4. Note in `tools/summer-cli/TOOLING-TODO.md` what's now possible that wasn't before.
52
+
53
+ Engine binary changes ship via a rebuild + new release. CLI/web TypeScript changes ship via npm publish or web deploy. State this delivery cost in your report so the user knows what they get today vs after a release.
54
+
55
+ ## The four skill stores (probe each before doing anything)
56
+
57
+ 1. **Canonical source** — `~/development/SummerEngine/tools/summer-cli/skills/`. Single source of truth. Domains: `ui-and-ux`, `gameplay-mechanics`, `character-controllers`, `scripting-patterns`, `visual-effects`, `debugging`, `rendering-and-lighting`, `scene-and-project`, `level-design`, `audio`, `ai-and-npcs`, `asset-pipeline`, `performance`, `deployment`, `multiplayer-and-networking`, plus `workflow` for process skills. The `skills:` array in `.claude-plugin/plugin.json` is the registry. Sibling references live at top-level `references/` and `tests/`.
58
+ 2. **Claude auto-discovery** — `~/.claude/skills/`. Where `summer skills install --agent claude-code` writes copies. Auto-discovered by Claude Code in any session.
59
+ 3. **Web-app stores** — `PublicSummerEngine/src/lib/ai/skills/bundled/` (template wizards, different format) and `PublicSummerEngine/public/knowledge/summer/skills/` (JSON knowledge files). Mirror only when the lesson genuinely fits their format. Most discipline-guide skills don't.
60
+ 4. **The active game** — read it as ground truth. Working code from the real project beats invented examples.
61
+
62
+ ## What to do, in order
63
+
64
+ 1. One short sentence to the user. "Capturing learnings from this session into the skill library." That's it. No plan dump.
65
+
66
+ 2. Probe the stores. Glob each path above. Note what exists and what's empty. Print a tight summary.
67
+
68
+ 3. Recap the session. Look back over the conversation. Pull out learnings that are non-obvious AND general — things a future agent or user would benefit from but couldn't derive from reading the codebase. Examples that count:
69
+ - A working shader (the actual code) -> `visual-effects`
70
+ - A GDScript idiom that beat the obvious approach -> `scripting-patterns`
71
+ - A UI layout that survived the design pass -> `ui-and-ux`
72
+ - A bug + root cause + fix that wasn't in any docs -> `debugging`
73
+ - A Godot 4.x quirk (type inference, signal gotchas, plugin layer config) -> `scripting-patterns`
74
+ - A spawning/AI/enemy pattern that worked -> `ai-and-npcs` or `gameplay-mechanics`
75
+ - A perf fix with measured before/after -> `performance`
76
+ - An asset workflow that beat alternatives -> `asset-pipeline`
77
+ - An MCP gap that needed an engine-side fix -> `tools/summer-cli/TOOLING-TODO.md` AND the relevant skill
78
+
79
+ Examples that DON'T count: one-off code with no general lesson, things already documented in CLAUDE.md or an existing skill, personal preferences without reasoning, anything you have to manufacture to fill space.
80
+
81
+ 4. Decide placement. For each learning:
82
+ - Update existing skill: name the file, quote the section, draft the addition.
83
+ - Create new skill: pick the domain, name the file, draft the full skill markdown.
84
+ Match the format of existing skills in the same domain exactly. Read one if you're unsure.
85
+
86
+ 5. One tight pause for the user. Five-to-ten lines max: what files you'll touch, what each one captures, what gets left out. Wait for OK or redirect. Don't ask multiple questions.
87
+
88
+ 6. Apply.
89
+ - Write/edit `.md` files under `tools/summer-cli/skills/<domain>/`.
90
+ - Register a new skill in `.claude-plugin/plugin.json` (and sibling `.codex-plugin/`, `.cursor-plugin/` manifests) AND in `src/lib/skills-registry.ts` `SKILL_REGISTRY` array. Both are required — `plugin-manifests.test.ts` fails the build if either is missing.
91
+ - If the skill belongs in the curated Claude set, also write it to `~/.claude/skills/<name>/` so it's live in the current session. Tell the user to consider adding it to the CLI's default install set.
92
+ - If the learning applies to the web chat agent, mirror to `PublicSummerEngine` skill stores too.
93
+ - Run `git status` in the SummerEngine repo (and `PublicSummerEngine` if touched) so the diff is visible.
94
+
95
+ 7. Report. One short message. Files changed, the future-agent payoff in one sentence per skill, and what (if anything) is still uncaptured.
96
+
97
+ ## Style rules
98
+
99
+ - Tight. No slop. No glazing.
100
+ - Capture the why, not just the what. "Use X" rots. "Use X because Y breaks under Z" survives. Always lead skill updates with the reason.
101
+ - Real working code from the active project beats invented examples. Lift from the active codebase.
102
+ - VFX is code. Shaders + GDScript + node setup. Never image-generation pipelines or Meshy prompts.
103
+ - No em dashes (—) in any user-facing copy you write into skills. Use periods or restructure.
104
+ - No date references inside skill bodies. Skills are timeless guidance. Dates belong in commit messages and changelogs, not in `.md` skill content.
105
+ - No specific game / project names inside skill bodies. Skills are universal. The same skill might be installed by a future user who never heard of your current project.
106
+ - `[SUMMER]` markers on core Godot engine file edits in C++ changes. Skill `.md` files don't need them.
107
+ - Verify before claiming. If a skill says "Summer Engine does X," verify in the actual code before writing it down.
108
+
109
+ ## When there's nothing worth capturing
110
+
111
+ It's totally fine to come back with "session was tactical, no durable learnings worth a skill update." Don't manufacture skills from thin air. Better to ship nothing than ship noise.