summer-engine 1.3.1 → 1.4.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 (49) hide show
  1. package/.claude-plugin/plugin.json +59 -0
  2. package/.codex-plugin/plugin.json +38 -0
  3. package/.cursor-plugin/plugin.json +42 -0
  4. package/.mcp.json +8 -0
  5. package/.opencode/plugins/summer.js +49 -0
  6. package/CHANGELOG.md +67 -0
  7. package/README.md +13 -0
  8. package/dist/lib/skills-registry.d.ts +80 -0
  9. package/dist/lib/skills-registry.js +172 -0
  10. package/gemini-extension.json +21 -0
  11. package/hooks/hooks-cursor.json +21 -0
  12. package/hooks/hooks.json +31 -0
  13. package/hooks/pre-commit-doctor.sh +123 -0
  14. package/hooks/run-hook.cmd +23 -0
  15. package/hooks/session-start.sh +120 -0
  16. package/marketplace.json +24 -0
  17. package/package.json +13 -3
  18. package/skills/_meta/skill-test/SKILL.md +1 -1
  19. package/skills/_shared/summer-folder.md +44 -0
  20. package/skills/_tests/specs/art-direction.md +115 -0
  21. package/skills/_tests/specs/audio-direction.md +123 -0
  22. package/skills/_tests/specs/brainstorm-game.md +99 -0
  23. package/skills/_tests/specs/design-level.md +113 -0
  24. package/skills/_tests/specs/design-mechanic.md +112 -0
  25. package/skills/_tests/specs/design-npc.md +112 -0
  26. package/skills/_tests/specs/export-and-ship.md +114 -0
  27. package/skills/_tests/specs/fps-controller.md +5 -5
  28. package/skills/_tests/specs/peer-to-peer-multiplayer.md +99 -0
  29. package/skills/_tests/specs/setup-multiplayer.md +106 -0
  30. package/skills/_tests/specs/tune-performance.md +104 -0
  31. package/skills/_tests/specs/vfx.md +98 -0
  32. package/skills/ai-and-npcs/design-npc/SKILL.md +343 -0
  33. package/skills/asset-pipeline/asset-strategy/SKILL.md +8 -0
  34. package/skills/audio/audio-direction/SKILL.md +258 -0
  35. package/skills/catalog.yaml +82 -0
  36. package/skills/character-controllers/fps-controller/SKILL.md +27 -0
  37. package/skills/deployment/export-and-ship/SKILL.md +300 -0
  38. package/skills/gameplay-mechanics/design-mechanic/SKILL.md +265 -0
  39. package/skills/level-design/design-level/SKILL.md +266 -0
  40. package/skills/multiplayer-and-networking/peer-to-peer-multiplayer/SKILL.md +378 -0
  41. package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +328 -0
  42. package/skills/performance/tune-performance/SKILL.md +219 -0
  43. package/skills/rendering-and-lighting/3d-lighting/SKILL.md +20 -0
  44. package/skills/rendering-and-lighting/art-direction/SKILL.md +284 -0
  45. package/skills/scene-and-project/brainstorm-game/SKILL.md +210 -0
  46. package/skills/scene-and-project/make-game/SKILL.md +10 -0
  47. package/skills/scene-and-project/scene-composition/SKILL.md +8 -0
  48. package/skills/ui-and-ux/ui-basics/SKILL.md +28 -0
  49. package/skills/visual-effects/vfx/SKILL.md +280 -0
@@ -48,6 +48,13 @@ skills:
48
48
  public: true
49
49
 
50
50
  # ── gameplay-mechanics ──
51
+ - name: design-mechanic
52
+ category: gameplay-mechanics
53
+ status: HAVE
54
+ public: true
55
+ recommended: true
56
+ user-invocable: true
57
+ last-tested: 2026-05-05
51
58
  - name: melee-combat
52
59
  category: gameplay-mechanics
53
60
  status: NEXT
@@ -132,6 +139,13 @@ skills:
132
139
  public: true
133
140
 
134
141
  # ── scene-and-project ──
142
+ - name: brainstorm-game
143
+ category: scene-and-project
144
+ status: HAVE
145
+ public: true
146
+ recommended: true
147
+ user-invocable: true
148
+ last-tested: 2026-05-05
135
149
  - name: scene-composition
136
150
  category: scene-and-project
137
151
  status: HAVE
@@ -177,6 +191,13 @@ skills:
177
191
  public: true
178
192
 
179
193
  # ── rendering-and-lighting ──
194
+ - name: art-direction
195
+ category: rendering-and-lighting
196
+ status: HAVE
197
+ public: true
198
+ recommended: true
199
+ user-invocable: true
200
+ last-tested: 2026-05-05
180
201
  - name: 3d-lighting
181
202
  category: rendering-and-lighting
182
203
  status: HAVE
@@ -255,6 +276,13 @@ skills:
255
276
  public: true
256
277
 
257
278
  # ── visual-effects ──
279
+ - name: vfx
280
+ category: visual-effects
281
+ status: HAVE
282
+ public: true
283
+ recommended: true
284
+ user-invocable: true
285
+ last-tested: 2026-05-05
258
286
  - name: gpuparticles-3d-basics
259
287
  category: visual-effects
260
288
  status: NEXT
@@ -333,6 +361,13 @@ skills:
333
361
  public: true
334
362
 
335
363
  # ── audio ──
364
+ - name: audio-direction
365
+ category: audio
366
+ status: HAVE
367
+ public: true
368
+ recommended: true
369
+ user-invocable: true
370
+ last-tested: 2026-05-05
336
371
  - name: audio-bus-setup
337
372
  category: audio
338
373
  status: NEXT
@@ -393,6 +428,25 @@ skills:
393
428
  public: true
394
429
 
395
430
  # ── multiplayer-and-networking ──
431
+ - name: setup-multiplayer
432
+ category: multiplayer-and-networking
433
+ status: HAVE
434
+ public: true
435
+ recommended: true
436
+ user-invocable: true
437
+ last-tested: 2026-05-05
438
+ - name: peer-to-peer-multiplayer
439
+ category: multiplayer-and-networking
440
+ status: NEXT
441
+ public: true
442
+ recommended: true
443
+ user-invocable: true
444
+ - name: host-authoritative-state
445
+ category: multiplayer-and-networking
446
+ status: NEXT
447
+ public: true
448
+ recommended: true
449
+ user-invocable: true
396
450
  - name: multiplayerapi-basics
397
451
  category: multiplayer-and-networking
398
452
  status: NEXT
@@ -423,6 +477,13 @@ skills:
423
477
  public: true
424
478
 
425
479
  # ── ai-and-npcs ──
480
+ - name: design-npc
481
+ category: ai-and-npcs
482
+ status: HAVE
483
+ public: true
484
+ recommended: true
485
+ user-invocable: true
486
+ last-tested: 2026-05-05
426
487
  - name: navmesh-pathfinding
427
488
  category: ai-and-npcs
428
489
  status: NEXT
@@ -453,6 +514,13 @@ skills:
453
514
  public: true
454
515
 
455
516
  # ── level-design ──
517
+ - name: design-level
518
+ category: level-design
519
+ status: HAVE
520
+ public: true
521
+ recommended: true
522
+ user-invocable: true
523
+ last-tested: 2026-05-05
456
524
  - name: gridmap-building
457
525
  category: level-design
458
526
  status: NEXT
@@ -479,6 +547,13 @@ skills:
479
547
  public: true
480
548
 
481
549
  # ── performance ──
550
+ - name: tune-performance
551
+ category: performance
552
+ status: HAVE
553
+ public: true
554
+ recommended: true
555
+ user-invocable: true
556
+ last-tested: 2026-05-05
482
557
  - name: profiling-godot
483
558
  category: performance
484
559
  status: NEXT
@@ -624,6 +699,13 @@ skills:
624
699
  public: true
625
700
 
626
701
  # ── deployment ──
702
+ - name: export-and-ship
703
+ category: deployment
704
+ status: HAVE
705
+ public: true
706
+ recommended: true
707
+ user-invocable: true
708
+ last-tested: 2026-05-05
627
709
  - name: export-presets
628
710
  category: deployment
629
711
  status: NEXT
@@ -131,3 +131,30 @@ For `summer_set_resource_property` on CapsuleShape3D:
131
131
  - **Falling through floor:** Ensure the floor has a StaticBody3D or similar with a CollisionShape3D
132
132
  - **Camera clipping:** If the camera goes inside geometry, enable `near` on the Camera3D or add collision exception
133
133
  - **Mouse capture:** For FPS, you typically need `Input.mouse_mode = Input.MOUSE_MODE_CAPTURED` in `_ready()` and a way to release (e.g., Escape)
134
+
135
+ ## Fallback (no MCP — edit `.tscn` directly)
136
+
137
+ If Summer MCP isn't connected, write the scene by hand. Save as `res://player.tscn`:
138
+
139
+ ```
140
+ [gd_scene load_steps=2 format=3]
141
+
142
+ [sub_resource type="CapsuleShape3D" id="1"]
143
+ radius = 0.4
144
+ height = 1.6
145
+
146
+ [node name="Player" type="CharacterBody3D"]
147
+ position = Vector3(0, 1, 0)
148
+
149
+ [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
150
+ shape = SubResource("1")
151
+
152
+ [node name="Camera3D" type="Camera3D" parent="."]
153
+ position = Vector3(0, 1.6, 0)
154
+ ```
155
+
156
+ Then attach `player.gd` (script body above) via the inspector.
157
+
158
+ ## Collaborative protocol
159
+
160
+ This skill writes scene nodes and a `.gd` script. Always ask before applying. Group writes per phase: "May I add the Player + CollisionShape3D + Camera3D, bind WASD/jump InputMap actions, and attach `player.gd`?" See `../../_shared/collaborative-protocol.md`.
@@ -0,0 +1,300 @@
1
+ ---
2
+ name: export-and-ship
3
+ description: Use when the user is ready to export a build for distribution to Steam, itch.io, web (HTML5), iOS, Android, or any combination. Validates icons, store banners, screenshots, build config, and runs a pre-flight checklist before producing a release build. Trigger on "export", "ship", "release", "build", "Steam", "itch", "HTML5", "iOS", "Android", "submit", "publish".
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: deployment
7
+ user-invocable: true
8
+ allowed-tools: Read Grep Glob Edit Write summer_get_scene_tree summer_inspect_node summer_project_setting summer_get_console summer_get_diagnostics
9
+ paths: ["**/*.gd", "**/*.tscn", "project.godot", "export_presets.cfg", "**/*.png", "**/*.svg", "**/*.icns", "**/*.ico"]
10
+ ---
11
+
12
+ # /export-and-ship — Export and Prep Distribution
13
+
14
+ ## Overview
15
+
16
+ Shipping is a checklist, not a creative act. This skill walks the platform-specific asset and config requirements, runs a pre-flight check against the project, and produces a release build only after every blocker is green. Better to fail at this step than fail submission.
17
+
18
+ **Core principle:** every platform has a list. Read the list, satisfy the list, ship.
19
+
20
+ ## Steps
21
+
22
+ ### 1. Pick the destination(s)
23
+
24
+ Open with the question. Multi-select.
25
+
26
+ > Where to? Pick all that apply: **Steam** / **itch.io** / **web (HTML5)** / **iOS App Store** / **Google Play** / **macOS DMG** / **Windows installer** / **other**.
27
+
28
+ Each destination has a different list. Multiple destinations = multiple lists. Don't shortcut — the iOS list does not satisfy the Steam list.
29
+
30
+ ### 2. Run the pre-flight checklist
31
+
32
+ Always do this first, regardless of destination.
33
+
34
+ **Preferred (Summer MCP):**
35
+
36
+ ```
37
+ summer_get_diagnostics # any errors? if yes, abort.
38
+ summer_get_console # any "import failed" warnings?
39
+ summer_get_scene_tree # is the main scene set?
40
+ ```
41
+
42
+ **Fallback (no MCP):** ask the user to confirm via the Godot editor: Project → Project Settings → Application → Run → Main Scene is set; no errors in Output panel.
43
+
44
+ #### Pre-flight blockers (any one = stop)
45
+
46
+ | Check | How | Blocker because |
47
+ |---|---|---|
48
+ | Main scene is set | `project.godot` has `application/run/main_scene` | Game launches to nothing without it |
49
+ | No script errors | `summer_get_script_errors` clean | Won't compile in export |
50
+ | No `print()` debug spam in hot loops | `Grep "print(" -- "**/*.gd"` | Spammy console for users |
51
+ | No hardcoded debug paths | `Grep "user://debug" or "/Users/" or "C:\\\\"` | Breaks on user machines |
52
+ | `.gitignore` excludes `.godot/`, `.import/`, `*.tmp` | Read `.gitignore` | Build artifacts in repo |
53
+ | LICENSE file present | Read `LICENSE` at repo root | Steam + itch require licensing clarity |
54
+ | `attribution.md` for community assets | Read `attribution.md` or equivalent | CC-BY assets need credit; missing = takedown risk |
55
+ | Version number set | `application/config/version` in `project.godot` | Required by Steam, useful everywhere |
56
+ | Game name set | `application/config/name` | Window title, build artifact name |
57
+
58
+ If any check fails, list them in one message and ask:
59
+
60
+ > Pre-flight failed on N items: <list>. Fix these before exporting? I can take them one by one.
61
+
62
+ ### 3. Per-platform asset requirements
63
+
64
+ Walk the list for each chosen destination. Each is non-negotiable.
65
+
66
+ #### a) Steam
67
+
68
+ | Asset | Resolution | Format | Path / use |
69
+ |---|---|---|---|
70
+ | Game icon | 256×256 | PNG, transparent | Used in Steam library, taskbar |
71
+ | Library capsule | 600×900 | PNG | "Box art" in library grid |
72
+ | Library hero | 3840×1240 | PNG | Wide banner at top of game's library page |
73
+ | Library logo | 1280×720, transparent BG | PNG | Title overlay on hero |
74
+ | Header capsule | 460×215 | PNG | Store search results, friend activity |
75
+ | Main capsule | 616×353 | PNG | Front-page features |
76
+ | Small capsule | 231×87 | PNG | Sidebar |
77
+ | Page background | 1438×810 | JPG | Behind store page content |
78
+ | Screenshots | ≥ 1280×720, 16:9 | PNG/JPG | At least 5 |
79
+ | Trailer | 1080p, MP4, ≤ 2 min | MP4 | Required for Coming Soon → Released |
80
+ | Steam page text | English required + any localized | Markdown / plaintext | Short description (300 chars), full description, controls |
81
+
82
+ Build config for Steam:
83
+
84
+ - Export preset: **Windows Desktop** (x86_64) + **Linux** (x86_64) + **macOS** (universal). Steam requires all three for max reach; 99% of Steam revenue is Windows but Linux/macOS doesn't hurt.
85
+ - Export options: `Embed PCK = true` for single-EXE distribution.
86
+ - Steam SDK integration: GodotSteam (`https://godotsteam.com`) is the standard. Add the GDExtension before exporting.
87
+ - App ID must be set in the Steam SDK init code.
88
+ - Build separately for each platform; Steam Pipe uploads handle distribution.
89
+
90
+ #### b) itch.io
91
+
92
+ Lower bar than Steam. itch is forgiving.
93
+
94
+ | Asset | Resolution | Required? |
95
+ |---|---|---|
96
+ | Cover image | 630×500 | Yes |
97
+ | Screenshots | Any 16:9 | At least 3 |
98
+ | Game title + tagline | text | Yes |
99
+ | Description | Markdown | Yes |
100
+ | Build files | ZIP per platform OR `butler` upload | Yes |
101
+
102
+ Build config:
103
+ - Export preset: Windows + macOS + Linux; package as ZIP.
104
+ - Or use `butler push` (itch's CLI) for atomic versioning and patches.
105
+ - Web build (HTML5) is free real estate on itch — also do it.
106
+
107
+ #### c) Web (HTML5)
108
+
109
+ Browser export. Constraints:
110
+
111
+ - No threading without `cross-origin-isolated` headers (most hosts don't set them).
112
+ - No ENet — use WebSocket / WebRTC if multiplayer.
113
+ - Long initial load — first-paint is critical. Add a loading screen.
114
+ - File size matters — strip unused features in export preset (no encryption, no debugging, no JavaScript eval if not needed).
115
+
116
+ Build config:
117
+ - Export preset: **Web**.
118
+ - Output `.html` + `.wasm` + `.pck` + `.js`.
119
+ - Disable: "Variant: Editor support", "Encryption". Keep: "GLES3 Fallback to GLES2" if targeting old browsers.
120
+
121
+ Known traps:
122
+ - Audio: Chrome blocks autoplay. First user click must trigger audio context resume.
123
+ - Local saves: use `user://` (maps to IndexedDB on web). Test that saves persist across reload.
124
+
125
+ #### d) iOS App Store
126
+
127
+ | Asset | Resolution / Format |
128
+ |---|---|
129
+ | App icon | 1024×1024 PNG (Apple generates the rest) |
130
+ | Launch screen | Storyboard (Godot generates) |
131
+ | Screenshots | 6.5" iPhone: 1242×2688 / 2688×1242 (≥ 3); 12.9" iPad if iPad-eligible |
132
+ | App Store description | text per locale, ≤ 4000 chars |
133
+ | Keywords | ≤ 100 chars, comma-separated |
134
+ | Support URL | required |
135
+ | Privacy policy URL | required (any data collection) |
136
+
137
+ Build config:
138
+ - Export preset: **iOS**.
139
+ - Bundle ID: `com.<your-org>.<game-name>`. Must match Apple Developer portal.
140
+ - Apple Developer account required ($99/year).
141
+ - Code signing: distribution certificate + provisioning profile.
142
+ - Build via macOS only (Xcode toolchain).
143
+ - TestFlight first (always). Don't go straight to App Store review.
144
+
145
+ #### e) Google Play (Android)
146
+
147
+ | Asset | Resolution / Format |
148
+ |---|---|
149
+ | App icon | 512×512 PNG (32-bit, transparent) |
150
+ | Feature graphic | 1024×500 PNG |
151
+ | Phone screenshots | 16:9 or 9:16, ≥ 1080p, ≥ 2 |
152
+ | Tablet screenshots | optional but boosts visibility |
153
+ | App description | text per locale, ≤ 4000 chars |
154
+ | Short description | ≤ 80 chars |
155
+
156
+ Build config:
157
+ - Export preset: **Android**.
158
+ - Build as **AAB** (Android App Bundle), NOT APK — Play Store requires AAB since 2021.
159
+ - Signing: Play App Signing (Google holds the key) + an upload key.
160
+ - Target API level: latest required by Play Store policy (typically the previous year's API level).
161
+ - Test on real device + emulator before submission.
162
+
163
+ #### f) macOS DMG (outside Steam)
164
+
165
+ - Export preset: **macOS** (universal binary).
166
+ - Codesign + notarize via Apple — unsigned builds get a Gatekeeper warning users can't easily bypass.
167
+ - Notarization requires Apple Developer account ($99/year).
168
+ - DMG packaging: `create-dmg` CLI or `hdiutil`.
169
+
170
+ #### g) Windows installer (outside Steam)
171
+
172
+ - Export preset: **Windows Desktop** (x86_64).
173
+ - Code-signing certificate ($75–$300/year from a CA) — without it, SmartScreen flags the EXE.
174
+ - Installer: NSIS or InnoSetup are the standards. Or just ship a ZIP.
175
+
176
+ ### 4. Build config consistency check
177
+
178
+ Before producing builds, verify `export_presets.cfg` for each target:
179
+
180
+ ```
181
+ Read export_presets.cfg
182
+ ```
183
+
184
+ For each preset:
185
+
186
+ | Field | Production value | Why |
187
+ |---|---|---|
188
+ | `binary_format/embed_pck` | `true` | Single EXE per platform |
189
+ | `debug` | `false` | Debug builds leak source paths and run slower |
190
+ | `texture_format/etc2_astc` | `true` for mobile | Smaller texture compression |
191
+ | `application/short_version` | matches `application/config/version` | Steam reads it |
192
+ | `script/encryption_key` | set if you don't want PCK extracted | Optional but recommended for paid games |
193
+ | `application/icon` | path to your `.ico` / `.icns` / `.png` | Otherwise generic Godot icon ships |
194
+
195
+ ### 5. Propose the build sequence
196
+
197
+ > Pre-flight: clean. Targets confirmed: Steam (Win + Mac + Linux) + itch (same builds) + web. Required assets: I see all icons + 5 screenshots in `marketing/`. Missing: trailer (Steam blocks Coming Soon → Released without one). May I produce the builds now and flag the trailer as a follow-up?
198
+
199
+ ### 6. Produce the builds
200
+
201
+ Godot's CLI export is the standard scripted path:
202
+
203
+ ```
204
+ godot --headless --export-release "Windows Desktop" build/win/MyGame.exe
205
+ godot --headless --export-release "Linux" build/linux/MyGame.x86_64
206
+ godot --headless --export-release "macOS" build/mac/MyGame.app
207
+ godot --headless --export-release "Web" build/web/index.html
208
+ godot --headless --export-release "Android" build/android/MyGame.aab
209
+ godot --headless --export-release "iOS" build/ios/MyGame.xcodeproj
210
+ ```
211
+
212
+ For Summer Engine: replace `godot` with `summer` (or the local binary path). Same flags.
213
+
214
+ If the user is on a CI system (GitHub Actions etc), this is the right place to point them at a cross-compile workflow — Godot can export Windows + Linux from a Linux runner.
215
+
216
+ ### 7. Verify each build
217
+
218
+ For each build:
219
+ - Launch it. Confirm the title screen renders.
220
+ - Run for 30 seconds. Confirm no console errors.
221
+ - Check the file size (anything over 500 MB needs justification — usually unstripped textures or unused assets).
222
+ - For mobile: install on a real device, not just the emulator.
223
+
224
+ ### 8. Submit / upload
225
+
226
+ Per platform, point the user at the correct upload path:
227
+
228
+ - **Steam:** `steamcmd` + Steam Pipe (`builder_app_xxx.vdf`). Set up depots first in Steamworks.
229
+ - **itch.io:** `butler push <path> <user>/<game>:<channel>` (e.g. `butler push build/win <user>/mygame:windows`).
230
+ - **Web (itch hosted):** zip + drop into itch upload UI as "playable in browser".
231
+ - **iOS:** Archive in Xcode → upload via Xcode Organizer → TestFlight → App Store.
232
+ - **Android:** Play Console → Internal testing → Closed → Open → Production.
233
+
234
+ Skill does NOT execute these uploads itself. It produces the builds and points at the right command.
235
+
236
+ ## Pre-flight checklist (master)
237
+
238
+ Use this as a one-shot grep before any export:
239
+
240
+ | Check | Pass condition |
241
+ |---|---|
242
+ | Main scene set | `project.godot` has `application/run/main_scene = "res://..."` |
243
+ | No script errors | `summer_get_script_errors` empty |
244
+ | No debug `print()` spam | Grep returns < 20 hits across project (or each is intentional) |
245
+ | No hardcoded user paths | Grep for `/Users/`, `C:\\`, `/home/` returns 0 hits |
246
+ | Version number set | `application/config/version = "1.0.0"` (or higher) |
247
+ | Game name set | `application/config/name = "<actual name>"` |
248
+ | Icon assets present | Per-platform icon files exist at the paths referenced in `export_presets.cfg` |
249
+ | LICENSE file | Exists at repo root |
250
+ | Attribution file | Exists if any community assets used |
251
+ | Export preset `debug = false` | For all release presets |
252
+ | Export preset `embed_pck = true` | For all desktop release presets |
253
+ | `.gitignore` excludes build artifacts | `build/`, `.godot/`, `.import/`, `*.tmp` listed |
254
+ | Screenshots ≥ minimum count for platform | 3 for itch, 5 for Steam, 2 for Play |
255
+ | No leftover dev assets in `res://` | No `_test_`, `_old_`, `_temp_` files in the export paths |
256
+
257
+ ## Common mistakes
258
+
259
+ | Don't | Do | Why |
260
+ |---|---|---|
261
+ | Ship debug builds to Steam | `debug = false` in release export preset | Slower, leaks paths, larger |
262
+ | Use 256×256 icon for iOS | 1024×1024 (Apple downscales) | iOS rejects undersized icons |
263
+ | Skip Steam trailer | Record at least 30 sec gameplay before launch | Steam blocks the release without it |
264
+ | Ship APK to Play Store | Build AAB | Play requires AAB since 2021 |
265
+ | Skip code-signing on macOS / Windows | Get a cert; without it, users can't run the build | Gatekeeper / SmartScreen blocks unsigned binaries |
266
+ | Skip notarization on macOS | Notarize after signing | Quarantined apps can't run on most modern macOS |
267
+ | Ship without `LICENSE` | Add MIT or commercial license to repo root | Steam + itch + most platforms require it |
268
+ | Forget attribution for CC-BY assets | `attribution.md` listing each asset's source + license | Otherwise = takedown notice + ban |
269
+ | Auto-upload via skill | Produce builds; user uploads | Uploads have side effects (versioning, refunds, metadata changes) |
270
+ | Push 1.0.0 first | Push 0.9.0 internal first, then 1.0.0 to public | Internal testing catches the embarrassing-launch-day bugs |
271
+ | Same build for all stores | Per-store metadata + separate upload | Steam wants `.exe`, Play wants `.aab`, web wants `.html` |
272
+
273
+ ## Anti-patterns
274
+
275
+ - **"Just enable all export options."** Encryption + JS eval + edit-time features bloat the binary. Disable what you don't use.
276
+ - **"I'll fix the icon later."** Apple and Google reject submissions with placeholder icons. They'll take a week to re-review.
277
+ - **Unsigned macOS builds outside Steam.** Apple Gatekeeper is strict. The user-facing workaround ("right-click → Open → confirm") is bad UX.
278
+ - **Embed PCK = false on desktop.** Splits the binary into multiple files; users delete the PCK by accident; bad first-run experience.
279
+ - **Trailer is a slideshow.** Steam's algorithm down-weights gameplay-less trailers. Show actual gameplay in the first 5 seconds.
280
+
281
+ ## Collaborative protocol
282
+
283
+ This skill produces release artifacts. Always ask before each build is invoked. Group platforms — "I'm about to build Windows + Mac + Linux release configs into `build/`. OK?". See `_shared/collaborative-protocol.md`.
284
+
285
+ ## Want a working starter?
286
+
287
+ No template — this is a workflow. Each project's export config and store assets are project-specific. For the Steam-specific GodotSteam GDExtension setup, see `deployment/steam-uploader/SKILL.md` (when shipped).
288
+
289
+ ## See also
290
+
291
+ - `_shared/mcp-tools-reference.md` — full MCP tool list
292
+ - `_shared/godot-version.md` — Godot 4.5 export-template versioning
293
+ - `_shared/collaborative-protocol.md` — "May I write" pattern
294
+ - `deployment/export-presets/SKILL.md` — preset config deep dive
295
+ - `deployment/web-html5-export/SKILL.md` — HTML5-specific traps
296
+ - `deployment/steam-uploader/SKILL.md` — `steamcmd` + GodotSteam (when shipped)
297
+ - `deployment/itch-uploader/SKILL.md` — `butler` workflow (when shipped)
298
+ - `deployment/mobile-export/SKILL.md` — iOS / Android specifics (when shipped)
299
+ - `asset-pipeline/attribution-and-licensing/SKILL.md` — community asset attribution
300
+ - `performance/tune-performance/SKILL.md` — pre-ship performance pass