summer-engine 3.4.0 → 3.4.1

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 (259) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.cursor-plugin/plugin.json +1 -1
  5. package/.factory-plugin/plugin.json +1 -1
  6. package/.opencode/INSTALL.md +8 -8
  7. package/.opencode/plugins/summer.js +2 -2
  8. package/AGENTS.md +7 -7
  9. package/CHANGELOG.md +14 -0
  10. package/GEMINI.md +1 -1
  11. package/NOTICE +1 -1
  12. package/README.md +30 -34
  13. package/assets/autopilot/run.sh +2 -2
  14. package/assets/navigation/web-routes.json +1 -1
  15. package/commands/gameskill.md +2 -2
  16. package/commands/summer.md +25 -25
  17. package/dist/cli/commands/open.d.ts +1 -1
  18. package/dist/cli/commands/run.d.ts +1 -1
  19. package/dist/cli/commands/run.js +1 -1
  20. package/dist/cli/commands/skills.js +2 -2
  21. package/dist/core/api-client.d.ts +5 -6
  22. package/dist/core/api-client.js +12 -15
  23. package/dist/core/auth.js +2 -2
  24. package/dist/core/capabilities/asset-import.d.ts +0 -1
  25. package/dist/core/capabilities/camera-view.d.ts +1 -1
  26. package/dist/core/capabilities/camera-view.js +2 -2
  27. package/dist/core/capabilities/connect-signal.d.ts +1 -2
  28. package/dist/core/capabilities/connect-signal.js +1 -2
  29. package/dist/core/capabilities/console-read.d.ts +2 -2
  30. package/dist/core/capabilities/console-read.js +2 -2
  31. package/dist/core/capabilities/engine-receipt.d.ts +5 -7
  32. package/dist/core/capabilities/engine-receipt.js +7 -9
  33. package/dist/core/capabilities/export-game.js +3 -3
  34. package/dist/core/capabilities/export-presets.d.ts +1 -1
  35. package/dist/core/capabilities/export-presets.js +1 -1
  36. package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
  37. package/dist/core/capabilities/fabricate-mesh.js +2 -3
  38. package/dist/core/capabilities/frame-quality.d.ts +4 -4
  39. package/dist/core/capabilities/frame-quality.js +4 -4
  40. package/dist/core/capabilities/grep.d.ts +1 -1
  41. package/dist/core/capabilities/grep.js +1 -1
  42. package/dist/core/capabilities/navigation/open.d.ts +1 -1
  43. package/dist/core/capabilities/navigation/open.js +1 -1
  44. package/dist/core/capabilities/navigation/render-product-map.js +1 -1
  45. package/dist/core/capabilities/navigation/targets.js +2 -2
  46. package/dist/core/capabilities/placement-batch.d.ts +1 -1
  47. package/dist/core/capabilities/placement-batch.js +2 -2
  48. package/dist/core/capabilities/play-determinism.d.ts +1 -1
  49. package/dist/core/capabilities/play-determinism.js +1 -1
  50. package/dist/core/capabilities/publish-build.d.ts +1 -1
  51. package/dist/core/capabilities/publish-build.js +4 -6
  52. package/dist/core/capabilities/publish-download.d.ts +1 -2
  53. package/dist/core/capabilities/publish-download.js +2 -3
  54. package/dist/core/capabilities/replace-node.d.ts +1 -3
  55. package/dist/core/capabilities/replace-node.js +1 -3
  56. package/dist/core/capabilities/runtime-control.d.ts +5 -7
  57. package/dist/core/capabilities/runtime-control.js +7 -9
  58. package/dist/core/capabilities/scene-batch.d.ts +1 -1
  59. package/dist/core/capabilities/scene-batch.js +1 -1
  60. package/dist/core/capabilities/scene-kind.js +1 -1
  61. package/dist/core/capabilities/scene-readback.d.ts +3 -4
  62. package/dist/core/capabilities/scene-readback.js +3 -4
  63. package/dist/core/capabilities/scene-script.d.ts +2 -2
  64. package/dist/core/capabilities/scene-script.js +2 -2
  65. package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
  66. package/dist/core/capabilities/seeing/shot-store.js +1 -1
  67. package/dist/core/capabilities/summer-bundle.d.ts +2 -3
  68. package/dist/core/capabilities/summer-bundle.js +2 -3
  69. package/dist/core/capabilities/surface-snap.d.ts +1 -1
  70. package/dist/core/capabilities/surface-snap.js +1 -1
  71. package/dist/core/capabilities/tool-dispatch.js +1 -1
  72. package/dist/core/capabilities/ui-control.d.ts +1 -2
  73. package/dist/core/capabilities/ui-control.js +1 -2
  74. package/dist/core/capabilities/world-snapshot.d.ts +1 -1
  75. package/dist/core/capabilities/world-snapshot.js +1 -1
  76. package/dist/core/capability-skew.d.ts +2 -3
  77. package/dist/core/capability-skew.js +4 -5
  78. package/dist/core/feedback/client.js +1 -1
  79. package/dist/core/launch-posture.d.ts +3 -3
  80. package/dist/core/launch-posture.js +3 -3
  81. package/dist/core/library-read.js +1 -2
  82. package/dist/core/templates.d.ts +1 -2
  83. package/dist/core/templates.js +1 -2
  84. package/dist/mcp/server.d.ts +2 -2
  85. package/dist/mcp/server.js +2 -2
  86. package/dist/mcp/tools/creator-tools.js +1 -1
  87. package/dist/mcp/tools/debug-tools.js +1 -1
  88. package/dist/mcp/tools/generate-tools.js +7 -7
  89. package/dist/mcp/tools/navigation-tools.d.ts +1 -1
  90. package/dist/mcp/tools/navigation-tools.js +1 -1
  91. package/dist/mcp/tools/spatial-tools.js +1 -1
  92. package/dist/mcp/tools/visual-tools.js +2 -2
  93. package/dist/mcp/tools/with-engine.d.ts +1 -2
  94. package/dist/mcp/tools/with-engine.js +1 -2
  95. package/gemini-extension.json +1 -1
  96. package/hooks/session-start.sh +2 -2
  97. package/integrations/README.md +70 -76
  98. package/integrations/claude/README.md +0 -3
  99. package/integrations/codex/README.md +1 -2
  100. package/integrations/copilot-jetbrains/README.md +1 -1
  101. package/integrations/cursor/README.md +1 -2
  102. package/integrations/factory/README.md +15 -11
  103. package/integrations/mistral-vibe/README.md +1 -1
  104. package/integrations/opencode/README.md +1 -1
  105. package/integrations/roo-code/README.md +1 -1
  106. package/integrations/rovo-dev/README.md +1 -1
  107. package/integrations/trae/README.md +1 -1
  108. package/integrations/windsurf/README.md +3 -3
  109. package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
  110. package/library/references/gd-style/gd-style.md +4 -6
  111. package/library/references/godot-version/godot-version.md +3 -3
  112. package/library/references/headless-routing/headless-routing.md +2 -2
  113. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
  114. package/library/references/mcp-tools-reference/mcp-tools-reference.md +15 -14
  115. package/library/references/product-map/product-map.md +1 -1
  116. package/library/references/public-surface-language/public-surface-language.md +1 -1
  117. package/library/references/summer-folder/summer-folder.md +1 -1
  118. package/library/skills/3d-lighting/SKILL.md +4 -4
  119. package/library/skills/README.md +5 -5
  120. package/library/skills/adaptive-music/SKILL.md +7 -7
  121. package/library/skills/ai-characters-in-games/SKILL.md +1 -1
  122. package/library/skills/ambient-bed/SKILL.md +12 -14
  123. package/library/skills/animated-loop/SKILL.md +42 -42
  124. package/library/skills/animation-tree/SKILL.md +6 -6
  125. package/library/skills/art-direction/SKILL.md +8 -11
  126. package/library/skills/asset-strategy/SKILL.md +3 -3
  127. package/library/skills/audio-direction/SKILL.md +8 -10
  128. package/library/skills/auto-fire-targeting/SKILL.md +4 -3
  129. package/library/skills/bounded-engine-runs/SKILL.md +6 -7
  130. package/library/skills/brainstorm-game/SKILL.md +5 -5
  131. package/library/skills/brainstorming/SKILL.md +9 -15
  132. package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
  133. package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
  134. package/library/skills/character-animation-wiring/SKILL.md +2 -2
  135. package/library/skills/character-model/SKILL.md +15 -26
  136. package/library/skills/character-movement/SKILL.md +1 -1
  137. package/library/skills/character-movement/references/movement-3d.md +1 -1
  138. package/library/skills/character-portrait/SKILL.md +4 -4
  139. package/library/skills/cinematic-cutscene/SKILL.md +38 -38
  140. package/library/skills/combat-basics/SKILL.md +1 -1
  141. package/library/skills/compatibility-renderer-traps/SKILL.md +2 -2
  142. package/library/skills/concept-art/SKILL.md +3 -3
  143. package/library/skills/create-asset-sheet/SKILL.md +12 -31
  144. package/library/skills/debug/SKILL.md +5 -4
  145. package/library/skills/debugging-game-feel/SKILL.md +1 -4
  146. package/library/skills/debugging-game-feel/resource.yaml +1 -1
  147. package/library/skills/design-level/SKILL.md +5 -5
  148. package/library/skills/design-mechanic/SKILL.md +6 -6
  149. package/library/skills/design-npc/SKILL.md +8 -15
  150. package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
  151. package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
  152. package/library/skills/environment-kit/SKILL.md +5 -5
  153. package/library/skills/export-and-ship/SKILL.md +23 -24
  154. package/library/skills/fabricating-assets/SKILL.md +1 -1
  155. package/library/skills/facial-and-lipsync/SKILL.md +5 -5
  156. package/library/skills/fps-controller/SKILL.md +17 -16
  157. package/library/skills/fps-controller/resource.yaml +0 -2
  158. package/library/skills/game-feel/SKILL.md +6 -7
  159. package/library/skills/gameskill/SKILL.md +3 -3
  160. package/library/skills/gdscript-patterns/SKILL.md +3 -3
  161. package/library/skills/generate-motion/SKILL.md +5 -22
  162. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
  163. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
  164. package/library/skills/headless-scripting/SKILL.md +8 -8
  165. package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
  166. package/library/skills/investigating-bugs/SKILL.md +3 -11
  167. package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
  168. package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
  169. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
  170. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
  171. package/library/skills/make-game/SKILL.md +3 -5
  172. package/library/skills/make-game/references/2d-platformer.md +1 -1
  173. package/library/skills/multiplayer-project/SKILL.md +1 -1
  174. package/library/skills/multiplayer-testing/SKILL.md +4 -4
  175. package/library/skills/music-track/SKILL.md +40 -38
  176. package/library/skills/new-project/SKILL.md +4 -6
  177. package/library/skills/organic-model/SKILL.md +9 -9
  178. package/library/skills/pixel-art/SKILL.md +6 -6
  179. package/library/skills/play/SKILL.md +3 -4
  180. package/library/skills/playtesting-a-feature/SKILL.md +4 -6
  181. package/library/skills/procedural-animation/SKILL.md +10 -11
  182. package/library/skills/prop-model/SKILL.md +4 -4
  183. package/library/skills/psx-retro-rendering/SKILL.md +20 -20
  184. package/library/skills/psx-retro-rendering/resource.yaml +2 -3
  185. package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
  186. package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
  187. package/library/skills/remote-deploy/SKILL.md +20 -21
  188. package/library/skills/retarget/SKILL.md +19 -23
  189. package/library/skills/running-in-the-cloud/SKILL.md +5 -5
  190. package/library/skills/scene-composition/SKILL.md +5 -5
  191. package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
  192. package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
  193. package/library/skills/scene-scripting/SKILL.md +3 -3
  194. package/library/skills/scene-to-level/SKILL.md +28 -31
  195. package/library/skills/skill-create/SKILL.md +1 -1
  196. package/library/skills/skill-improve/SKILL.md +9 -9
  197. package/library/skills/skill-test/SKILL.md +10 -10
  198. package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
  199. package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
  200. package/library/skills/skybox-panorama/SKILL.md +8 -9
  201. package/library/skills/sound-effect/SKILL.md +19 -19
  202. package/library/skills/spatial-placement/SKILL.md +2 -2
  203. package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
  204. package/library/skills/sprite-sheet/SKILL.md +10 -10
  205. package/library/skills/summer-analytics/SKILL.md +3 -3
  206. package/library/skills/summer-friends/SKILL.md +10 -10
  207. package/library/skills/summer-leaderboards/SKILL.md +6 -6
  208. package/library/skills/summer-match-results/SKILL.md +13 -13
  209. package/library/skills/summer-matchmaking/SKILL.md +11 -11
  210. package/library/skills/summer-parties/SKILL.md +9 -9
  211. package/library/skills/summer-player-data/SKILL.md +12 -12
  212. package/library/skills/summer-store/SKILL.md +6 -6
  213. package/library/skills/summer-world-chat/SKILL.md +9 -9
  214. package/library/skills/summer-world-saves/SKILL.md +7 -7
  215. package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
  216. package/library/skills/tileable-texture/SKILL.md +1 -1
  217. package/library/skills/trailer-shot/SKILL.md +36 -36
  218. package/library/skills/tune-performance/SKILL.md +13 -13
  219. package/library/skills/tune-performance/resource.yaml +1 -1
  220. package/library/skills/ui-graphics/SKILL.md +7 -7
  221. package/library/skills/use-widget-asset/SKILL.md +7 -7
  222. package/library/skills/using-summer/SKILL.md +5 -7
  223. package/library/skills/vehicle-model/SKILL.md +6 -7
  224. package/library/skills/vehicle-model/resource.yaml +2 -2
  225. package/library/skills/verification-before-completion/SKILL.md +5 -6
  226. package/library/skills/vfx-dissolve/SKILL.md +4 -4
  227. package/library/skills/vfx-fire/SKILL.md +6 -6
  228. package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
  229. package/library/skills/vfx-hit-spark/SKILL.md +4 -4
  230. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
  231. package/library/skills/vfx-lightning/SKILL.md +5 -5
  232. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
  233. package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
  234. package/library/skills/vfx-magic-glow/SKILL.md +4 -4
  235. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
  236. package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
  237. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
  238. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
  239. package/library/skills/vfx-smoke/SKILL.md +5 -5
  240. package/library/skills/vfx-water-ripple/SKILL.md +2 -2
  241. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
  242. package/library/skills/voice-line/SKILL.md +9 -9
  243. package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
  244. package/library/skills/writing-plans/SKILL.md +4 -4
  245. package/library/skills/writing-skills/SKILL.md +8 -8
  246. package/library/tools/creator-publish/resource.yaml +4 -4
  247. package/library/tools/creator-releases/resource.yaml +5 -5
  248. package/library/tools/publish-build/resource.yaml +5 -1
  249. package/package.json +1 -1
  250. package/registry/generated/gemini-extension.json +1 -1
  251. package/registry/generated/index.json +130 -130
  252. package/registry/generated/marketplace.claude.json +1 -1
  253. package/registry/generated/plugin.claude.json +1 -1
  254. package/registry/generated/plugin.codex.json +1 -1
  255. package/registry/generated/plugin.cursor.json +1 -1
  256. package/registry/generated/plugin.factory.json +1 -1
  257. package/registry/generated/skills-index.md +5 -5
  258. package/registry/generated/skills-registry.json +5 -5
  259. package/registry/schemas/domains.json +1 -1
@@ -13,68 +13,61 @@ tags:
13
13
  confidence: extracted
14
14
  ---
15
15
 
16
- # Godogen-Style Autonomous Game Generation + Visual Proof QC in SummerEngine
17
16
 
18
- ## Outcome
17
+ # Godogen-Style Game Generation with Visual Proof QC in Summer Engine
19
18
 
20
- Give SummerEngine an agent workflow that takes a **short game description** and produces a **runnable, visually verified game**, using Godogen's core insight: *judge the result from the running game, never from a clean compile*. The visible output of every iteration is a screenshot or short proof clip from the actual engine, and the host coding agent itself reviews those frames against the brief — no separate verifier model.
19
+ ## Outcome
21
20
 
22
- This directly targets a known studio pain point: Summer Engine already has a "validation of the game" step, but it does not yet verify the running game. Godogen's visual QC loop is the reference design to rebuild it.
21
+ Take a **short game description** and produce a **runnable, visually verified game**. The method comes from the open-source Godogen project: *judge the result from the running game, never from a clean compile*. Every iteration ends with a screenshot or short proof clip from the running game, and the host coding agent reviews those frames against the brief itself. There is no separate verifier model.
23
22
 
24
23
  ## When to Use
25
24
 
26
- - Building complete small games or prototypes from a natural-language brief (mechanics + art style + camera + HUD in one prompt, like Godogen's demo prompts).
27
- - Fixing SummerEngine's broken game-validation step: you need an agent that can *see* the running game and report concrete visual defects.
28
- - Unattended generation runs where the deliverable must include proof (15–20s recording) instead of "it compiled, trust me."
25
+ - Building a complete small game or prototype from a natural-language brief (mechanics, art style, camera and HUD in one prompt).
26
+ - The agent says the game works but never looked at it running. You need an agent that *sees* the running game and reports concrete visual defects.
27
+ - Unattended generation runs where the deliverable must include proof (a 15–20s recording) instead of "it compiled, trust me."
29
28
  - Asset generation for the game (references, textures, 3D models, animated sprites) as part of the same pipeline.
30
29
 
31
30
  ## When NOT to Use
32
31
 
33
- - Hand-authored, large-scope production work — this is a generator loop, not a replacement for deliberate design iteration.
34
- - When no headless/GPU capture environment exists — the QC loop is worthless if frames come from a software renderer (see Failure Modes).
35
- - Quick code fixes with no visual component — running the engine and capturing is overhead if the change is purely logic.
36
-
37
- ## Core Principles (extracted)
38
-
39
- 1. **godogen → game repo → game.** The generator itself is not a game. You publish a thin scaffold into a fresh game repo; the agent then builds the actual game *inside* that repo from a short engine guide.
40
-
41
- 2. **Thin runtime, smart agent.** The published repo is intentionally minimal: one engine-agnostic runtime manifest (`prompts/runtime.md`), a one-page per-engine guide (`engines/godot.md`), and a single cross-engine asset-generation skill (`asset-gen/`). The model plans, scaffolds, and decomposes the work itself — there are no planner/decomposer/architecture skill files anymore (dropped 2026-07-02).
42
-
43
- 3. **Proof over claims.** "The agent judges results from the running game (a live URL or a recorded clip), not from a clean compile, so visible defects drive the next iteration."
32
+ - Hand-authored, large-scope production work. This is a generator loop, not a replacement for deliberate design iteration.
33
+ - No GPU capture path. The QC loop is worthless if frames come from a software renderer (see Failure Modes).
34
+ - Quick logic fixes with no visual component. Running and capturing is overhead there.
44
35
 
45
- 4. **Host agent self-verifies from captured frames.** Godogen dropped a separate Gemini verification pass on 2026-04-26: "Opus 4.7 / GPT 5.5 self-verify from captured frames; external pass added no signal." One strong coding agent looking at real screenshots is enough.
36
+ ## Core Principles (from Godogen)
46
37
 
47
- 5. **Two involvement modes, chosen by how the task is framed.** Watch the live game and steer at decision points, or run unattended and receive a 15–20s proof recording at the end, "watched back before done."
38
+ 1. **Generator repo → game repo → game.** The generator itself is not a game. It publishes a thin scaffold into a fresh game repo; the agent then builds the actual game *inside* that repo from a short engine guide.
39
+ 2. **Thin runtime, smart agent.** The published repo is minimal: one runtime manifest (`prompts/runtime.md`), a one-page engine guide, and one asset-generation skill (`asset-gen/`). The model plans, scaffolds and decomposes the work itself; there are no planner or architecture skill files.
40
+ 3. **Proof over claims.** The agent judges results from the running game (a live build or a recorded clip), not from a clean compile, so visible defects drive the next iteration.
41
+ 4. **The host agent verifies from captured frames.** Godogen dropped a separate verification model because it added no signal. One strong coding agent looking at real screenshots is enough.
42
+ 5. **Two involvement modes, chosen by how the task is framed.** Watch the live game and steer at decision points, or run unattended and receive a 15–20s proof recording at the end, watched back before done.
43
+ 6. **Engine-specific runtime traps live in the engine guide.** Defects that survive a compile but fail at runtime are written down where the agent reads them during the run.
48
44
 
49
- 6. **Engine-specific runtime traps live in the engine guide** — the defects that "survive a compile but fail at runtime" are documented where the agent will read them during the run.
45
+ ## Mapping to Summer Engine
50
46
 
51
- ## SummerEngine Architecture Mapping
52
-
53
- | Godogen concept | SummerEngine adaptation |
47
+ | Godogen concept | Summer Engine equivalent |
54
48
  |---|---|
55
- | `publish.sh --engine godot --agent codex` | A SummerEngine publish step that renders `AGENTS.md` + skills into the target game repo |
56
- | `prompts/runtime.md` manifest | One SummerEngine runtime manifest describing delivery contract + involvement modes |
57
- | `engines/godot.md` one-page guide | SummerEngine engine guide: capture recipes, runtime traps, scene conventions |
58
- | `asset-gen/` skill | SummerEngine asset-generation skill (Gemini/Grok/Tripo3D stack below) |
59
- | Proof recording (ffmpeg + xvfb) | Godot viewport screenshot capture + optional ffmpeg clip |
60
- | C#/.NET + `dotnet build` as compile gate | See note below — Godogen migrated to C# specifically so `dotnet build` replaces per-file validation loops |
61
-
62
- **Language note:** Godogen generates Godot games in **C#/.NET** (migrated from GDScript on 2026-04-06) because `dotnet build` gives a cheap, reliable compile gate. If SummerEngine stays GDScript, you need an equivalent cheap gate — e.g. `godot --headless --check-only` script parsing — before the visual stage, since the whole point is: compile gate first, *then* visual proof, never one instead of the other.
49
+ | Publish step that renders the agent files into a game repo | `summer create <template>` plus the installed Summer skills; `.summer/` holds the brief (`GameSoul.md`) and build plan |
50
+ | `prompts/runtime.md` manifest | `.summer/build-plan.md`: delivery contract and involvement mode |
51
+ | One-page engine guide | A project skill with capture recipes, runtime traps and scene conventions (`gameskill` captures new traps) |
52
+ | `asset-gen/` skill | `asset-strategy` and the Summer generation tools |
53
+ | Compile gate (`dotnet build` for C#) | `summer_get_script_errors` per file, then `summer_get_diagnostics` |
54
+ | Proof recording (ffmpeg + xvfb) | `summer_play`, `summer_screenshot target:"game"`, `summer_game_probe`; frame sequences from a `RunVerification` probe's `save_frame`; optional ffmpeg clip |
63
55
 
64
- ## Scene / Repo Shape (SummerEngine target)
56
+ **Language note:** Godogen generates C# games because `dotnet build` is a cheap, reliable compile gate. Summer games use GDScript, so the gate is `summer_get_script_errors` on each changed file. The order is the point: compile gate first, *then* visual proof, never one instead of the other.
65
57
 
66
- Published game repo (thin, everything else recreated by the agent):
58
+ ## Repo Shape
67
59
 
68
60
  ```
69
61
  my-summer-game/
70
- ├── AGENTS.md # host-agent entry (Codex flavor)
71
- ├── prompts/runtime.md # delivery manifest + involvement modes
72
- ├── engines/summerengine.md # one-page guide: capture, traps, conventions
62
+ ├── AGENTS.md # host-agent entry
63
+ ├── .summer/
64
+ │ ├── GameSoul.md # the brief
65
+ │ └── build-plan.md # delivery contract + involvement mode
73
66
  └── .agents/skills/
74
- └── asset-gen/ # sole published skill (asset generation)
67
+ └── <project-guide>/ # capture recipes, runtime traps, conventions
75
68
  ```
76
69
 
77
- In-engine capture harness (Godot 4 node shape):
70
+ In-game capture harness, for runs outside the editor:
78
71
 
79
72
  ```
80
73
  Main (Node)
@@ -85,9 +78,9 @@ Main (Node)
85
78
  # saves PNGs to user://proof/ on trigger
86
79
  ```
87
80
 
88
- ## Capture Harness (GDScript, adaptation)
81
+ ## Capture Harness (GDScript)
89
82
 
90
- The source says *that* Godogen captures (xvfb + engine screenshots + ffmpeg proof video) but the repo internals were not retrievable. Below is a SummerEngine-facing adaptation, not extracted code:
83
+ Godogen's own capture code is not public; this is an adaptation. Inside a Summer session, prefer `summer_screenshot target:"game"` and `RunVerification` frames, and use this autoload for unattended runs outside the editor.
91
84
 
92
85
  ```gdscript
93
86
  extends Node
@@ -135,89 +128,78 @@ func _on_frame_post_draw() -> void:
135
128
  pass # hook if you need exact-frame capture timing
136
129
  ```
137
130
 
138
- The ffmpeg step (from setup.md, `ffmpeg — MP4 encoding of proof videos`):
131
+ Encode the PNG sequence (resolve `user://` to its absolute path first):
139
132
 
140
133
  ```bash
141
- ffmpeg -framerate 2 -i user://proof/%03d_rec.png -c:v libx264 -pix_fmt yuv420p proof.mp4
134
+ ffmpeg -framerate 2 -i <user_dir>/proof/%03d_rec.png -c:v libx264 -pix_fmt yuv420p proof.mp4
142
135
  ```
143
136
 
144
- Headless run on Linux uses xvfb so rendering is real: `xvfb-run -a godot --headless ...` (setup.md: xvfb is explicitly for "headless Godot/Bevy runs and capture").
145
-
146
- ## The Visual QC Loop (the core deliverable)
137
+ Unattended Linux runs need a real display for real rendering: run the engine under `xvfb-run -a`.
147
138
 
148
- This is the piece SummerEngine's validation should adopt:
139
+ ## The Visual QC Loop
149
140
 
150
141
  ```
151
142
  1. BUILD/EDIT agent applies a change to the game
152
- 2. COMPILE GATE cheap syntax/build check (dotnet build OR godot script check)
153
- 3. RUN + CAPTURE launch game under xvfb, capture screenshots at defined triggers
143
+ 2. COMPILE GATE summer_get_script_errors on changed files, then summer_get_diagnostics
144
+ 3. RUN + CAPTURE summer_play, then capture frames at defined triggers
154
145
  4. SELF-REVIEW host agent inspects captured frames against the brief
155
146
  5. DEFECT LIST structured findings: {location, expected, observed, severity}
156
147
  6. DECIDE no blocking defects → go to 7; else → back to 1 with the list
157
- 7. PROOF 15–20s recording, "watched back before done"
148
+ 7. PROOF 15–20s recording, watched back before done
158
149
  ```
159
150
 
160
151
  Rules that make it work:
161
152
 
162
- - **Bounded.** Hard cap on rounds (see Tunables). Godogen's delivery manifest frames this as closing with a proof recording, not iterating forever.
163
- - **Same agent verifies.** Do not add a separate verifier model — Godogen tested that (Gemini verification) and dropped it: no extra signal.
164
- - **Defects must be visible.** The review prompt asks for concrete visual observations tied to the brief ("character sprite missing against brief's 'chunky iconic sprites'", not "looks wrong").
165
- - **Engine traps belong in the guide.** Recurring "survives compile, fails at runtime" defects get written into `engines/summerengine.md` so the agent reads them before they happen again.
153
+ - **Bounded.** Hard cap on rounds (see Tunables). The run closes with a proof recording; it does not iterate forever.
154
+ - **Same agent verifies.** Do not add a separate verifier model. Godogen tried it and dropped it.
155
+ - **Defects must be visible.** The review asks for concrete visual observations tied to the brief ("character sprite missing; brief asks for chunky iconic sprites"), not "looks wrong".
156
+ - **Engine traps belong in the guide.** Recurring "survives compile, fails at runtime" defects go into the project guide so the agent reads them before they happen again.
166
157
 
167
- ## Asset Generation Pipeline (extracted)
168
-
169
- | Need | Tool | Notes |
170
- |---|---|---|
171
- | Precise references & characters | Gemini (`GOOGLE_API_KEY`, google-genai) | high-fidelity image generation |
172
- | Textures & simple objects | xAI Grok (`XAI_API_KEY`) | image/video generation |
173
- | Image-to-3D, rigged biped animation | Tripo3D (`TRIPO3D_API_KEY`) | 3D conversion |
174
- | Animated sprites | Grok video → frame extraction (ffmpeg) → loop detection → background removal | BiRefNet multi-signal matting (since 2026-03-25); imagemagick for resize/flip/crop |
158
+ ## Asset Generation
175
159
 
176
- asset-gen is the **sole published skill** in a godogen game repo — everything else the agent recreates from the engine guide.
160
+ Godogen calls external image, video and image-to-3D providers with their own API keys, then cuts animated sprites from generated video (frame extraction, loop detection, background removal, imagemagick for resize and crop). In Summer, route asset work through `asset-strategy` and the Summer generation tools (`summer_generate_image`, `summer_generate_3d`, `summer_generate_video`) instead of wiring provider keys into the project.
177
161
 
178
162
  ## Implementation Steps
179
163
 
180
- 1. **Write the thin runtime for SummerEngine**: `prompts/runtime.md` (delivery manifest + the two involvement modes), `engines/summerengine.md` (one page: how to run, how to capture, known runtime traps), and the asset-gen skill. Engine guide content comes from actual SummerEngine run failures — start it now, grow it every time a defect "survives compile."
181
- 2. **Set up headless capture**: Godot 4 (.NET build if following Godogen's C# choice) on PATH, xvfb, ffmpeg, imagemagick, vulkan-tools. Verify GPU path with `vulkaninfo --summary`; a software-renderer fallback on a GPU host is a misconfiguration to fix before trusting any QC frame.
182
- 3. **Implement `ProofCapture`** (GDScript above) as an autoload; wire capture triggers to scene-loaded, state-changed, and recording mode.
183
- 4. **Define the compile gate**: `dotnet build` (C#) or `godot --headless --check-only` (GDScript). Gate must run before every capture round.
184
- 5. **Implement the QC loop protocol**: capture → self-review → structured defect list → fix → re-capture, capped at `max_qc_rounds`. The reviewing prompt receives the original brief + latest frames and must output findings in a fixed JSON shape.
185
- 6. **Add the proof-recording close**: after the loop passes, record 15–20s, encode with ffmpeg, and have the agent watch the clip back before declaring done.
186
- 7. **Support both involvement modes**: if the task is framed open-ended, surface the live game early and checkpoint at taste/scope/cost decisions; if it's a finished brief, run unattended and close with proof.
187
- 8. **Optionally move runs to a server**: tmux/screen for long sessions, GPU instance for faster render+capture, remote-control interface to steer mid-run.
164
+ 1. **Write the thin runtime**: the brief in `.summer/GameSoul.md`, the delivery contract and involvement mode in `.summer/build-plan.md`, and a one-page project guide (how to run, how to capture, known runtime traps). Grow the guide every time a defect survives the compile gate.
165
+ 2. **Set up capture**: inside a Summer session, `summer_play` plus `summer_screenshot target:"game"`. For unattended Linux runs, add xvfb, ffmpeg and vulkan-tools, and check the GPU path with `vulkaninfo --summary`. A software-renderer fallback on a GPU host is a misconfiguration to fix before trusting any QC frame.
166
+ 3. **Add `ProofCapture`** (GDScript above) as an autoload when capturing outside the editor; wire triggers to scene-loaded, state-changed and recording mode.
167
+ 4. **Run the compile gate** before every capture round.
168
+ 5. **Run the QC loop**: capture → self-review → structured defect list → fix → re-capture, capped at `max_qc_rounds`. The review receives the original brief plus the latest frames and outputs findings in a fixed JSON shape.
169
+ 6. **Close with proof**: after the loop passes, record 15–20s, encode with ffmpeg, and have the agent watch the clip back before declaring done.
170
+ 7. **Support both involvement modes**: for an open-ended task, show the live game early and checkpoint at taste, scope and cost decisions; for a finished brief, run unattended and close with proof.
188
171
 
189
172
  ## Tunables
190
173
 
191
- | Parameter | Meaning | Godogen reference |
174
+ | Parameter | Meaning | Reference value |
192
175
  |---|---|---|
193
- | `max_qc_rounds` | hard cap on capture→fix iterations | bounded delivery, not infinite |
176
+ | `max_qc_rounds` | hard cap on capture→fix iterations | bounded, never open-ended |
194
177
  | Proof clip length | recording at the end of a run | 15–20 s |
195
- | Capture triggers | when screenshots fire (scene load / state change / timer) | engine-guide defined |
196
- | Record fps | frame rate of the QC strip | 2 fps is enough for review; ffmpeg re-encodes |
197
- | Verification model | which agent reviews frames | host agent itself (Claude Code / Codex); no separate verifier |
178
+ | Capture triggers | when screenshots fire (scene load / state change / timer) | defined in the project guide |
179
+ | Record fps | frame rate of the QC strip | 2 fps is enough for review |
180
+ | Verification model | which agent reviews frames | the host agent itself; no separate verifier |
198
181
  | Involvement mode | live-steered vs unattended | chosen by task framing |
199
182
 
200
183
  ## Failure Modes & Gotchas
201
184
 
202
- - **Trusting a clean compile.** The whole anti-pattern Godogen exists to kill. Compile gate is necessary, never sufficient.
203
- - **Software-renderer frames.** SwiftShader/llvmpipe/lavapipe output looks wrong and misleads the QC loop; on a GPU host it means the capture path is misconfigured (setup.md warns explicitly).
204
- - **Unbounded verification loops.** Without `max_qc_rounds` the agent iterates forever on taste-level nitpicks. Close with proof, don't chase perfection.
205
- - **Adding a separate verifier model.** Godogen tried Gemini verification and dropped it — "external pass added no signal." Don't repeat the experiment.
206
- - **Capturing before the frame settles.** Grab the viewport after `frame_post_draw`/a short delay, or screenshots show half-rendered scenes and generate false defects.
207
- - **Harmless headless noise.** `godot --headless --quit` may show RID warnings (setup.md calls them harmless) — don't let the QC loop treat engine noise as defects.
208
- - **GDScript vs C# trade-off.** Godogen's C# migration was driven by `dotnet build` replacing per-file validation loops. Staying GDScript is fine, but you must provide an equally cheap compile gate or the loop loses its fast first stage.
209
- - **Stale claims.** The X post mentions "850+ GDScript classes" language reference, but the project migrated to C# in April 2026 — verify current repo state before copying specifics.
185
+ - **Trusting a clean compile.** The compile gate is necessary, never sufficient.
186
+ - **Software-renderer frames.** SwiftShader, llvmpipe and lavapipe output looks wrong and misleads the QC loop. On a GPU host it means the capture path is misconfigured.
187
+ - **Unbounded verification loops.** Without `max_qc_rounds` the agent iterates forever on taste-level nitpicks. Close with proof.
188
+ - **Adding a separate verifier model.** Godogen tried it and found no extra signal.
189
+ - **Capturing before the frame settles.** Grab the viewport after `frame_post_draw` or a short delay, or screenshots show half-rendered scenes and produce false defects.
190
+ - **Headless noise.** Headless runs can print harmless RID warnings on quit. Do not let the QC loop treat engine noise as defects.
191
+ - **An all-black screenshot** usually means the viewport had not redrawn. Recapture before calling it a defect.
210
192
 
211
193
  ## Verification
212
194
 
213
- Not summerengine-verified. To validate an implementation:
195
+ Not yet verified in Summer Engine. To validate an implementation:
214
196
 
215
- 1. Publish a thin SummerEngine game repo from the runtime manifest; confirm the agent scaffolds a runnable project from the one-page guide alone.
216
- 2. Run a small game brief end-to-end; confirm the pipeline produces a running build, not just code.
217
- 3. Intentionally introduce a visible defect (e.g., broken sprite, missing material); confirm the QC loop's self-review detects it from captured frames and fixes it within the round cap.
197
+ 1. Scaffold a project and confirm the agent builds a runnable game from the brief and the one-page guide alone.
198
+ 2. Run a small brief end to end; confirm the pipeline produces a running build, not just code.
199
+ 3. Introduce a visible defect (a broken sprite, a missing material); confirm the self-review finds it from captured frames and fixes it within the round cap.
218
200
  4. Confirm the run closes with a 15–20s proof clip that the agent reviews before marking done.
219
- 5. Confirm the compile gate runs before every capture round and that frames come from hardware rendering (check with vulkaninfo).
201
+ 5. Confirm the compile gate runs before every capture round and that frames come from hardware rendering.
220
202
 
221
203
  ## Confidence
222
204
 
223
- `extracted` — Architecture (thin runtime, manifest + engine guide + asset-gen), the proof-over-claims principle, self-verification from captured frames, the dropped Gemini verification, C# migration rationale, capture tooling (xvfb/ffmpeg/imagemagick/vulkan-tools), asset-generation stack, and the two involvement modes are drawn directly from the GitHub README, CHANGELOG.md, and setup.md. The `ProofCapture` GDScript, the QC-loop JSON protocol, and the SummerEngine repo mapping are librarian adaptations — the repository's internal files (`prompts/runtime.md`, `engines/godot.md`, `asset-gen/` contents) could not be retrieved and are referenced only by their README-described roles.
205
+ `extracted`. The architecture (thin runtime, manifest, engine guide, asset-gen), proof over claims, self-verification from captured frames, the dropped verifier model, the C# rationale, the capture tooling and the two involvement modes come from Godogen's public README, CHANGELOG and setup notes. The `ProofCapture` script, the QC-loop JSON protocol and the Summer mapping are adaptations; Godogen's internal prompt and guide files are not public.
@@ -9,7 +9,6 @@ use_when:
9
9
  - "set up headless capture so an unattended generation run ends with a 15-20 second proof clip"
10
10
  do_not_use_when:
11
11
  - "large hand-authored production work, purely logical code fixes with no visual component, or hosts with no GPU or headless capture path"
12
- - "intake from the gamedev-knowledge pipeline (source-cited, pipeline-validated, not yet exercised in-engine by the Summer team) — verify results in the engine as you would any technique"
13
12
  facets:
14
13
  lifecycle:
15
14
  - build
@@ -21,7 +21,7 @@ This is the widest capability surface you have, and it is the one you are least
21
21
  <engine-binary> --headless --disable-crash-handler --path <project-dir> -s res://<script>.gd
22
22
  ```
23
23
 
24
- **Always pass `--disable-crash-handler` on an agent-driven run.** Summer's handler shells out to `atos` from inside a signal handler; when anything does go wrong it turns a clean failure into a hang or a cascade. Three agent-triggered crashes in eight minutes were traced to this on 2026-07-25.
24
+ **Always pass `--disable-crash-handler` on an agent-driven run.** Summer's handler shells out to `atos` from inside a signal handler; when anything does go wrong it turns a clean failure into a hang or a cascade of crashes.
25
25
 
26
26
  ### Lint before you boot
27
27
 
@@ -53,7 +53,7 @@ Exit codes lie in both directions here.
53
53
  <EXTREMELY-IMPORTANT>
54
54
  **Every engine launch you make is `--headless`.** The user did not ask you to open anything. A window that appears unasked steals focus, interrupts whatever they were doing, and is indistinguishable from a crash or a bug from their side. This is a product rule, not a convenience.
55
55
 
56
- The one exception is the verify instance, and it is safe precisely because it is not visible: `--summer-verify` opens a real rendering window that is **hidden, `NO_FOCUS`, and positioned at `(-32000,-32000)`** (`main/main.cpp:2363` and following). That is why it can produce real pixels without ever appearing. Never reproduce the "I need a renderer" reasoning by launching a plain windowed editor — use `--summer-verify`.
56
+ The one exception is the verify instance, and it is safe precisely because it is not visible: `--summer-verify` opens a real rendering window that is **hidden, `NO_FOCUS`, and positioned at `(-32000,-32000)`**. That is why it can produce real pixels without ever appearing. Never reproduce the "I need a renderer" reasoning by launching a plain windowed editor — use `--summer-verify`.
57
57
 
58
58
  If you genuinely believe the user needs to see the editor, ask them first.
59
59
  </EXTREMELY-IMPORTANT>
@@ -73,12 +73,12 @@ If neither is available (an older engine build that predates `engineBinaryPath`,
73
73
  | Linux | `~/.summer/engine/summer-linux-x86_64`, or `$SUMMER_ENGINE_BINARY` (see `running-in-the-cloud`) |
74
74
 
75
75
  <EXTREMELY-IMPORTANT>
76
- There is no `godot` binary on a Summer user's machine. `godot --headless`, `godot4`, `/usr/local/bin/godot` — none of these exist. A command built on that name fails with "command not found" on every single user, and no amount of retrying changes it. This skill exists partly because that exact instruction shipped in our own docs for months.
76
+ There is no `godot` binary on a Summer user's machine. `godot --headless`, `godot4`, `/usr/local/bin/godot` — none of these exist. A command built on that name fails with "command not found" for every user, and no amount of retrying changes it.
77
77
  </EXTREMELY-IMPORTANT>
78
78
 
79
79
  ### The script must extend `SceneTree` or `MainLoop`
80
80
 
81
- `-s` does not load an arbitrary script. `main/main.cpp` instantiates it as the process's main loop, and rejects anything that is not one.
81
+ `-s` does not load an arbitrary script. The engine instantiates it as the process's main loop, and rejects anything that is not one.
82
82
 
83
83
  ```gdscript
84
84
  extends SceneTree
@@ -92,7 +92,7 @@ func _initialize():
92
92
 
93
93
  Always call `quit()`. There is no other exit.
94
94
 
95
- **The trap:** a script extending `Node` (the reflex, since almost all GDScript does) is a wedge, not an error. The engine's rejection path calls `OS.alert()`, and on macOS that is an `NSAlert` `runModal` with **no headless guard** (`platform/macos/os_macos.mm:352-369`). The process blocks forever on a modal dialog that has no window to appear in. You get **no output at all** and a hung process that must be killed. Measured: five orphaned processes accumulated in one session before the cause was found.
95
+ **The trap:** a script extending `Node` (the reflex, since almost all GDScript does) is a wedge, not an error. The engine's rejection path calls `OS.alert()`, and on macOS that is an `NSAlert` `runModal` with **no headless guard**. The process blocks forever on a modal dialog that has no window to appear in. You get **no output at all** and a hung process that must be killed. Measured: five orphaned processes accumulated in one session before the cause was found.
96
96
 
97
97
  If a headless run produces zero output and never returns, check the first line of your script before you check anything else.
98
98
 
@@ -262,13 +262,13 @@ Measured on 0.5.55: `port 6550 -> 6551`, new token, editor still alive on 6550 a
262
262
 
263
263
  So on a shipped build: run `--import` against a throwaway copy where you can, warn the user before running it against their open project, and tell them to restart the editor afterwards if their agent connection drops.
264
264
 
265
- **Fixed on `main` but not yet in any shipped binary** (`_should_publish_discovery`, commit `420222554e`; tracked as SUM-161): batch-mode invocations — `--import`, `--summer-verify`, `--export-*`, `-s`, `--headless`, `--quit-after` — no longer publish. Once that ships, this warning applies only to older builds. Plain `--headless -s` never started the server on any build, so everything else in this skill is unaffected.
265
+ A later engine fix stops batch-mode invocations (`--import`, `--summer-verify`, `--export-*`, `-s`, `--headless`, `--quit-after`) from publishing. On a build with that fix this warning does not apply; if you cannot tell which build is installed, follow the precautions above. Plain `--headless -s` never started the server on any build, so everything else in this skill is unaffected.
266
266
  </EXTREMELY-IMPORTANT>
267
267
 
268
268
  Two lifecycle facts that decide the shape of every headless run:
269
269
 
270
270
  - **There is a hard work-completion floor between 3 and 5 seconds.** Fresh project, 8 small PNGs, editor killed at N seconds: at **3s, 0/8 imports landed in 10/10 cycles** — it boots, gets killed mid-scan, and accomplishes nothing. At **5s, 8/8 landed every cycle.** Never give an import a 3-second budget.
271
- - **`--headless --editor` is not a filesystem watcher.** It never notices files created after boot — 6 assets added 12s in, 45s wait, 0 imported. The rescan is driven by `NOTIFICATION_APPLICATION_FOCUS_IN` (`editor_node.cpp:1096`) and headless never fires a focus event. A long-lived headless editor serves a boot-time snapshot forever.
271
+ - **`--headless --editor` is not a filesystem watcher.** It never notices files created after boot — 6 assets added 12s in, 45s wait, 0 imported. The rescan is driven by `NOTIFICATION_APPLICATION_FOCUS_IN`, and headless never fires a focus event. A long-lived headless editor serves a boot-time snapshot forever.
272
272
 
273
273
  Both ends of the lifecycle are broken, differently: short runs do no work, long ones go stale. **Boot → act → exit is the only shape that works today.**
274
274
 
@@ -379,7 +379,7 @@ Four measured instances of the same shape:
379
379
 
380
380
  1. Write the script with `summer_write_file` (or your own shell) into the project.
381
381
  2. Get the binary from `summer_get_project_context` → `engineBinaryPath`.
382
- 3. Run it. **Read stdout** — GDScript errors go there, and a script that failed to parse still exits cleanly-looking.
382
+ 3. Run it. **Read stdout and stderr**: your `print()` output is on stdout, script errors are on stderr, and a script that failed to parse still exits 0.
383
383
  4. Verify the artifact exists on disk and check the `ResourceSaver.save()` return value. "The script ran" is not "the resource was written".
384
384
  5. If you wrote raw asset files, run `--import`.
385
385
  6. Delete throwaway scripts. Do not leave `probe_temp_3.gd` in a user's project.
@@ -27,7 +27,7 @@ For wiring individual widget slices (9-slice panels, progress bars, toggles), th
27
27
 
28
28
  - User wants a single slice → import it directly as a `Sprite2D` (or `use-widget-asset` if it's a UI widget).
29
29
  - User wants to **generate** a new pack → `create-asset-sheet`.
30
- - User wants to apply a slice as a material/texture on a 3D mesh → not the pack flow; see `asset_pipeline.json`.
30
+ - User wants to apply a slice as a material/texture on a 3D mesh → not the pack flow; see `asset-strategy`.
31
31
 
32
32
  ## Pack JSON shape
33
33
 
@@ -98,12 +98,15 @@ Delegate the actual wiring (percentage-to-pixel conversion, node-specific props)
98
98
 
99
99
  ## Examples
100
100
 
101
+ Both examples are `summer_batch` arguments; `scenePath` names the scene that receives the nodes.
102
+
101
103
  ### Example 1 — Standalone slice import
102
104
 
103
105
  Pack has one non-composite slice, `crate_wooden`, no widget metadata. Place it at scene origin:
104
106
 
105
107
  ```json
106
108
  {
109
+ "scenePath": "res://scenes/level.tscn",
107
110
  "ops": [
108
111
  {
109
112
  "op": "AddNode",
@@ -138,6 +141,7 @@ Pack has a composite parent `settings_panel` (filtered out) plus three children:
138
141
 
139
142
  ```json
140
143
  {
144
+ "scenePath": "res://ui/settings.tscn",
141
145
  "ops": [
142
146
  {
143
147
  "op": "AddNode",
@@ -224,7 +228,7 @@ Pack has a composite parent `settings_panel` (filtered out) plus three children:
224
228
 
225
229
  After this, hand `panel_bg` and `apply_button` to `use-widget-asset` to set `patch_margin_*` from their `widget.frameMargins`.
226
230
 
227
- Note the ops format: `position` is the **Godot string** `"Vector2(0, 0)"`, not a JSON object. `z_index` is a bare integer. This is the format Summer Engine expects — see `../../references/mcp-tools-reference/mcp-tools-reference.md`.
231
+ Note the ops format: `position` is the **engine variant string** `"Vector2(0, 0)"`, not a JSON object. `z_index` is a bare integer. This is the format Summer Engine expects — see `../../references/mcp-tools-reference/mcp-tools-reference.md`.
228
232
 
229
233
  ## Failure modes
230
234
 
@@ -240,4 +244,4 @@ Note the ops format: `position` is the **Godot string** `"Vector2(0, 0)"`, not a
240
244
 
241
245
  - `create-asset-sheet` — production side; how the pack was made.
242
246
  - `use-widget-asset` — wiring an individual widget slice (NinePatchRect, TextureProgressBar geometry).
243
- - `asset_pipeline.json` — broader find-or-generate -> import -> apply flow.
247
+ - `asset-strategy` — broader find-or-generate -> import -> apply flow.
@@ -230,9 +230,9 @@ If you catch yourself thinking:
230
230
 
231
231
  **ALL of these mean: STOP. Return to Phase 1.**
232
232
 
233
- **If 3+ fixes failed:** Question the architecture (see Phase 4.5)
233
+ **If 3+ fixes failed:** Question the architecture (Phase 4, step 5)
234
234
 
235
- ## the user's Signals You're Doing It Wrong
235
+ ## Signals From the User That You're Doing It Wrong
236
236
 
237
237
  **Watch for these redirections:**
238
238
  - "Is that not happening?" - You assumed without verifying
@@ -274,7 +274,7 @@ If systematic investigation reveals issue is truly environmental, timing-depende
274
274
  3. Implement appropriate handling (retry, timeout, error message)
275
275
  4. Add monitoring/logging for future investigation
276
276
 
277
- **But:** 95% of "no root cause" cases are incomplete investigation.
277
+ **But:** most "no root cause" cases are incomplete investigation.
278
278
 
279
279
  ## Supporting Techniques
280
280
 
@@ -288,11 +288,3 @@ These techniques are part of systematic debugging and available in this director
288
288
  - **verification-before-completion** - Verify fix worked before claiming success
289
289
  - **debug** - The Summer-specific triage loop (script errors → console → debugger → probe)
290
290
  - **playtesting-a-feature** - When the fix is a gameplay behaviour that has to be walked
291
-
292
- ## Real-World Impact
293
-
294
- From debugging sessions:
295
- - Systematic approach: 15-30 minutes to fix
296
- - Random fixes approach: 2-3 hours of thrashing
297
- - First-time fix rate: 95% vs 40%
298
- - New bugs introduced: Near zero vs common
@@ -79,8 +79,6 @@ async function waitFor<T>(
79
79
  }
80
80
  ```
81
81
 
82
- See `condition-based-waiting-example.ts` in this directory for complete implementation with domain-specific helpers (`waitForEvent`, `waitForEventCount`, `waitForEventMatch`) from actual debugging session.
83
-
84
82
  ## Common Mistakes
85
83
 
86
84
  **Bad: Polling too fast:** `setTimeout(check, 1)` - wastes CPU
@@ -105,11 +103,3 @@ await new Promise(r => setTimeout(r, 200)); // Then: wait for timed behavior
105
103
  1. First wait for triggering condition
106
104
  2. Based on known timing (not guessing)
107
105
  3. Comment explaining WHY
108
-
109
- ## Real-World Impact
110
-
111
- From debugging session (2025-10-03):
112
- - Fixed 15 flaky tests across 3 files
113
- - Pass rate: 60% → 100%
114
- - Execution time: 40% faster
115
- - No more race conditions
@@ -153,11 +153,3 @@ digraph principle {
153
153
  **Before operation:** Log before the dangerous operation, not after it fails
154
154
  **Include context:** Directory, cwd, environment variables, timestamps
155
155
  **Capture stack:** `new Error().stack` shows complete call chain
156
-
157
- ## Real-World Impact
158
-
159
- From debugging session (2025-10-03):
160
- - Found root cause through 5-level trace
161
- - Fixed at source (getter validation)
162
- - Added 4 layers of defense
163
- - 1847 tests passed, zero pollution
@@ -13,13 +13,13 @@ tags:
13
13
  confidence: extracted
14
14
  ---
15
15
 
16
- # Single-Image → Editable Scene Reconstruction (Lumera-style) in SummerEngine
16
+ # Single-Image → Editable Scene Reconstruction (Lumera-style) in Summer Engine
17
17
 
18
18
  ## Outcome
19
19
 
20
- Turn one reference image into an **editable, engine-native scene** in SummerEngine: individual `MeshInstance3D` objects with transforms, countable parametric light nodes, and an HDR environment probe — not a fused point cloud, Gaussian splat, or baked texture. This is the adaptation of the Lumera pipeline (arXiv:2607.20889, Tsinghua AIRSUN lab) from UE5 to SummerEngine.
20
+ Turn one reference image into an **editable, engine-native scene** in Summer Engine: individual `MeshInstance3D` objects with transforms, countable parametric light nodes, and an HDR environment probe — not a fused point cloud, Gaussian splat, or baked texture. This adapts the Lumera pipeline (arXiv:2607.20889, Tsinghua AIRSUN lab), which was built on another engine, to Summer Engine.
21
21
 
22
- **Honesty caveat:** Lumera itself is UE5-only with no public code as of retrieval (2026-08-30); the paper explicitly lists Godot/engine-portable extraction as future work. This skill documents the architecture and the parts an agent can build in SummerEngine today (assembly, scene representation, refinement loop, evaluation), and flags the parts that require external model components (VLM box/light parsers, per-object mesh generator, HDR estimator).
22
+ **Caveat:** Lumera has no public code, and the paper lists engine-portable extraction as future work. This skill documents the architecture and the parts an agent can build in Summer Engine today (assembly, scene representation, refinement loop, evaluation), and flags the parts that require external model components (VLM box/light parsers, per-object mesh generator, HDR estimator).
23
23
 
24
24
  ## When to Use
25
25
 
@@ -44,11 +44,11 @@ Lumera's stages (from paper abstract + appendices):
44
44
  3. **Per-object mesh reconstruction** — a mesh per parsed box.
45
45
  4. **HDR environment estimation** — environment probe (IntrinsicHDR partially compensates for SkyLight/unseen near-camera lights).
46
46
  5. **Bounded agentic refinement loop** — dual-agent (geometry stage, then light stage) edits + verifies against the reference image.
47
- 6. **Assembly** — emit engine-native scene (Blender/UE5 in the paper; `.tscn` in SummerEngine).
47
+ 6. **Assembly** — emit an engine-native scene (`.tscn` in Summer Engine).
48
48
 
49
- Dataset backing it: Lumera-2K, 2,513 UE5 projects → 3.73M components, 63M object instances, 102.6K parametric lights, 95.1K camera views.
49
+ Dataset backing it: Lumera-2K, 2,513 game-engine projects → 3.73M components, 63M object instances, 102.6K parametric lights, 95.1K camera views.
50
50
 
51
- ## Scene / Node Shape (SummerEngine target)
51
+ ## Scene / Node Shape (Summer Engine target)
52
52
 
53
53
  The assembly stage should emit this node tree so output stays inspectable/editable:
54
54
 
@@ -65,10 +65,10 @@ ReconstructedScene (Node3D)
65
65
  ├── OmniLight3D / SpotLight3D / DirectionalLight3D × M
66
66
  │ # position/rotation from (x,y,z); color from (r,g,b);
67
67
  │ # light_energy from I (mind log-scale calibration, see Tunables)
68
- └── (SkyLight-equivalent is carried by WorldEnvironment in Godot)
68
+ └── (the sky-light equivalent is carried by WorldEnvironment)
69
69
  ```
70
70
 
71
- Keep objects and lights as **separate siblings under named containers** — this mirrors UE5's component structure and is what makes the scene "editable" rather than "looks 3D".
71
+ Keep objects and lights as **separate siblings under named containers**. That separation is what makes the scene editable rather than just looking 3D.
72
72
 
73
73
  ## Implementation Steps
74
74
 
@@ -97,15 +97,15 @@ Add a **repair layer** on ingest: drop/fix invalid labels, non-positive sizes, d
97
97
 
98
98
  ### 2. Box + light parsing (external VLM components)
99
99
 
100
- Lumera-Box/Lumera-Light are VLMs SFT'd on Lumera-2K; there is no public checkpoint. Options: use a hosted VLM prompted to emit the JSON tuples above, or fine-tune an open VLM on your own engine-exported scenes (Godot scenes are text `.tscn` and trivially exportable — this is the "build Lumera-2K for your engine" step the paper identifies as missing for non-UE5 engines).
100
+ Lumera-Box/Lumera-Light are VLMs SFT'd on Lumera-2K; there is no public checkpoint. Options: use a hosted VLM prompted to emit the JSON tuples above, or fine-tune an open VLM on your own engine-exported scenes (`.tscn` scenes are text and easy to export; this is the "build Lumera-2K for your engine" step the paper identifies as missing for other engines).
101
101
 
102
102
  ### 3. Per-object mesh generation + HDR environment estimation
103
103
 
104
- Also external model components in Lumera (per-object mesh reconstruction; IntrinsicHDR-style environment estimation). For a SummerEngine blockout you can substitute: box mesh (`BoxMesh` sized to the parsed box) per object and a generated/estimated panorama `Sky`. Swap in real reconstructed meshes later without changing the schema.
104
+ Also external model components in Lumera (per-object mesh reconstruction; IntrinsicHDR-style environment estimation). For a Summer Engine blockout you can substitute: box mesh (`BoxMesh` sized to the parsed box) per object and a generated/estimated panorama `Sky`. Swap in real reconstructed meshes later without changing the schema.
105
105
 
106
106
  ### 4. Assembly: write a `.tscn`
107
107
 
108
- Deterministic GDScript/tool script: instantiate the node shape above from the repaired records. Godot's `.tscn` is text — generating it directly keeps the output diffable and versionable. Save with `PackedScene.pack()` / `ResourceSaver.save()` from an editor tool.
108
+ Deterministic GDScript/tool script: instantiate the node shape above from the repaired records. A `.tscn` is text, so generating it directly keeps the output diffable and versionable. Save with `PackedScene.pack()` / `ResourceSaver.save()` from an editor tool.
109
109
 
110
110
  ### 5. Bounded dual-agent refinement loop
111
111
 
@@ -148,17 +148,17 @@ Reproduce the paper's metrics on held-out scenes so improvements are measurable:
148
148
  - **Per-light localization is weak** (F1 0.209 @ 0.5 m) while scene-level light *count* recall is strong (0.998). Frame the output as "right number of lights, roughly right places."
149
149
  - **SkyLight / near-camera lights whose source is off-screen** are not supervised; the environment probe (IntrinsicHDR) only partially compensates.
150
150
  - **Large outdoor scenes drift geometrically** (~17 m Chamfer-L2); consider joint camera+geometry calibration if you need metric outdoor consistency.
151
- - **Engine conventions don't transfer for free** — the dataset and light conventions are UE5's; Godot's light units/probes differ, so recalibrate intensity and validate the representation on Godot-native scenes.
151
+ - **Engine conventions don't transfer for free.** The dataset's light conventions come from another engine; Summer Engine's light units and probes differ, so recalibrate intensity and validate the representation on Summer-native scenes.
152
152
 
153
153
  ## Verification
154
154
 
155
- Not summerengine-verified. To validate an implementation in SummerEngine:
155
+ Not yet verified in Summer Engine. To validate an implementation:
156
156
 
157
157
  1. Assemble a scene from a test image; confirm the `.tscn` contains separate, selectable `MeshInstance3D`s and light nodes (editability check).
158
158
  2. Move/replace one mesh and re-tune one light in the editor without breaking the scene.
159
- 3. Run the evaluation harness (§6) against a held-out set of known Godot scenes and compare to the reference numbers above.
159
+ 3. Run the evaluation harness (§6) against a held-out set of known scenes and compare to the reference numbers above.
160
160
  4. Confirm the refinement loop terminates within `T_g`/`T_l` and the history window never exceeds the VLM context budget.
161
161
 
162
162
  ## Confidence
163
163
 
164
- `extracted` — Architecture, metrics, refinement-loop design, and limitations are drawn directly from the arXiv paper (abstract, intro, appendices H.7–I as retrieved; middle method sections were truncated and are not documented here) and the author's announcement post. The SummerEngine node mapping and GDScript schema are adaptations, not from the sources; no public Lumera code exists to reference.
164
+ `extracted` — Architecture, metrics, refinement-loop design, and limitations are drawn directly from the arXiv paper (abstract, intro, appendices H.7–I as retrieved; middle method sections were truncated and are not documented here) and the author's announcement post. The Summer Engine node mapping and GDScript schema are adaptations, not from the sources; no public Lumera code exists to reference.
@@ -10,7 +10,6 @@ use_when:
10
10
  do_not_use_when:
11
11
  - "you only need a visual backdrop (a splat or depth-mesh bake is cheaper), large unbounded outdoor scenes, or exact light positions and intensities"
12
12
  - "Lumera itself has no public code; the VLM box/light parsers, per-object mesh generator, and HDR estimator are external components you must supply"
13
- - "intake from the gamedev-knowledge pipeline (source-cited, pipeline-validated, not yet exercised in-engine by the Summer team) — verify results in the engine as you would any technique"
14
13
  facets:
15
14
  lifecycle:
16
15
  - build
@@ -40,9 +40,9 @@ Distilled blueprints for common genres live in this skill's `references/` folder
40
40
  | Third-person action / 3D platformer | `references/3d-third-person.md` | `references/3d-third-person-systems.md` | Node3D / CharacterBody3D / SpringArm3D |
41
41
  | First-person horror | `references/3d-horror.md` | `references/3d-horror-systems.md` | Node3D / CharacterBody3D / Camera3D on Head |
42
42
 
43
- No playbook (racing, sandbox, sim): build fresh through the phases below. The playbooks lean on these system skills — load one when its mechanic comes up: `character-movement`, `camera-rigs`, `combat-basics`, `save-load`, `ui-basics`, `setup-multiplayer`.
43
+ No playbook (racing, sandbox, sim): build fresh through the phases below. The playbooks lean on these system skills — load one when its mechanic comes up: `character-movement`, `camera-rigs`, `combat-basics`, `save-load`, `ui-basics`, `multiplayer-project`.
44
44
 
45
- Two rules from the playbooks apply to every genre:
45
+ These rules from the playbooks apply to every genre:
46
46
 
47
47
  - **2D scales to the viewport.** Set `display/window/stretch/mode = canvas_items` and `stretch/aspect = expand`; UI uses Control anchors; code-positioned nodes compute from `get_viewport_rect().size`. Never hardcode 1920x1080.
48
48
  - **Playable slice, not tech demo.** Name the core loop in one sentence; every input gets feedback (tween, sound, particle, flash, shake); progression is visible; a restart exists. The bar is "feels good for 30 seconds".
@@ -198,7 +198,7 @@ Repeat until every mechanic in the plan is implemented OR the user calls cut.
198
198
  Skill: art-direction
199
199
  ```
200
200
 
201
- That writes `.summer/art-bible.md` if it doesn't exist, then guides the lighting / material / palette pass. Use `3d-lighting` for the actual scene work. If the game plays in the browser or is exported for the web, it runs the Compatibility renderer only: follow `web-compatibility-look` instead of Forward+-only features (SDFGI, SSAO, SSR, volumetric fog), and keep `rendering/renderer/rendering_method` on `gl_compatibility`.
201
+ That writes `.summer/art-bible.md` if it doesn't exist, then guides the lighting / material / palette pass. Use `3d-lighting` for the actual scene work. For the web, check the target first. A summer.games web build (`summer_export_game` with `targets:["web"]`) runs on Summer's WebGPU template, which needs the Forward+ or Mobile renderer. A WebGL 2 target runs the Compatibility renderer only: follow `web-compatibility-look` there, avoid Forward+-only features (SDFGI, SSAO, SSR, volumetric fog), and keep `rendering/renderer/rendering_method` on `gl_compatibility`.
202
202
 
203
203
  ```
204
204
  Skill: audio-direction
@@ -277,8 +277,6 @@ By the end of a successful run, the user has:
277
277
  - `summer_get_diagnostics` returns clean
278
278
  - `summer_play` runs end-to-end and the win condition is reachable
279
279
 
280
- That's a real game. Not a half-finished prototype.
281
-
282
280
  ## Closing line
283
281
 
284
282
  When all phases are done:
@@ -56,7 +56,7 @@ separate Area under the player masking only the Enemies layer.
56
56
 
57
57
  ## Building the level with a TileMap
58
58
 
59
- Use a `TileMapLayer` (Godot 4.3+) for the solid world. Create a `TileSet`, paint
59
+ Use a `TileMapLayer` for the solid world. Create a `TileSet`, paint
60
60
  the collision polygon on the solid tiles, put the layer on the World collision
61
61
  layer. The player collides with it for free - no per-tile StaticBody.
62
62