summer-engine 2.2.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +20 -5
- package/.codex-plugin/plugin.json +15 -5
- package/.cursor-plugin/plugin.json +15 -5
- package/.factory-plugin/plugin.json +2 -2
- package/.opencode/INSTALL.md +1 -1
- package/CHANGELOG.md +27 -6
- package/CLAUDE.md +2 -2
- package/GEMINI.md +2 -3
- package/README.md +82 -58
- package/_persona/summer/SKILL.md +5 -6
- package/commands/gameskill.md +103 -0
- package/dist/bin/summer.js +12 -4
- package/dist/commands/create.js +2 -0
- package/dist/commands/doctor.js +71 -1
- package/dist/commands/install.d.ts +17 -0
- package/dist/commands/install.js +63 -4
- package/dist/commands/memory.d.ts +14 -0
- package/dist/commands/memory.js +196 -0
- package/dist/commands/setup.js +12 -2
- package/dist/commands/skills.js +205 -8
- package/dist/commands/status.js +3 -0
- package/dist/lib/agent-config.d.ts +2 -2
- package/dist/lib/agent-config.js +298 -5
- package/dist/lib/api-client.d.ts +13 -0
- package/dist/lib/api-client.js +63 -26
- package/dist/lib/async-op-lifecycle.d.ts +60 -0
- package/dist/lib/async-op-lifecycle.js +83 -0
- package/dist/lib/project-memory.d.ts +33 -0
- package/dist/lib/project-memory.js +220 -0
- package/dist/lib/skills-registry.d.ts +134 -61
- package/dist/lib/skills-registry.js +106 -4
- package/dist/lib/version-check.d.ts +106 -0
- package/dist/lib/version-check.js +338 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.js +81 -0
- package/dist/mcp/tools/debug-tools.js +32 -2
- package/dist/mcp/tools/project-tools.js +18 -6
- package/dist/mcp/tools/with-engine.d.ts +14 -0
- package/dist/mcp/tools/with-engine.js +52 -7
- package/gemini-extension.json +2 -2
- package/hooks/pre-commit-doctor.sh +0 -0
- package/hooks/run-hook.cmd +0 -0
- package/hooks/session-start.sh +0 -0
- package/package.json +6 -4
- package/skills/2d-assets/character-portrait/SKILL.md +1 -1
- package/skills/2d-assets/concept-art/SKILL.md +1 -1
- package/skills/2d-assets/create-asset-sheet/SKILL.md +163 -0
- package/skills/2d-assets/instantiate-asset-pack/SKILL.md +245 -0
- package/skills/2d-assets/pixel-art/SKILL.md +1 -1
- package/skills/2d-assets/skybox-panorama/SKILL.md +1 -1
- package/skills/2d-assets/sprite-sheet/SKILL.md +1 -1
- package/skills/2d-assets/tileable-texture/SKILL.md +1 -1
- package/skills/2d-assets/ui-graphics/SKILL.md +1 -1
- package/skills/2d-assets/use-widget-asset/SKILL.md +217 -0
- package/skills/3d-assets/character-model/SKILL.md +1 -1
- package/skills/3d-assets/organic-model/SKILL.md +1 -1
- package/skills/3d-assets/prop-model/SKILL.md +1 -1
- package/skills/3d-assets/vehicle-model/SKILL.md +1 -1
- package/skills/README.md +37 -30
- package/skills/ai-and-npcs/design-npc/SKILL.md +6 -6
- package/skills/animation/animation-tree/SKILL.md +2 -2
- package/skills/animation/facial-and-lipsync/SKILL.md +1 -1
- package/skills/animation/generate-motion/SKILL.md +1 -1
- package/skills/animation/procedural-animation/SKILL.md +2 -2
- package/skills/audio/adaptive-music/SKILL.md +1 -1
- package/skills/audio/audio-direction/SKILL.md +5 -5
- package/skills/audio/sound-effect/SKILL.md +2 -2
- package/skills/audio/voice-line/SKILL.md +25 -3
- package/skills/character-controllers/fps-controller/SKILL.md +5 -5
- package/skills/debugging/debug/SKILL.md +39 -1
- package/skills/deployment/export-and-ship/SKILL.md +4 -4
- package/skills/gameplay-mechanics/auto-fire-targeting/SKILL.md +170 -0
- package/skills/gameplay-mechanics/design-mechanic/SKILL.md +8 -8
- package/skills/level-design/design-level/SKILL.md +5 -5
- package/skills/level-design/scene-to-level/SKILL.md +125 -0
- package/skills/multiplayer-and-networking/host-authoritative-state/SKILL.md +4 -4
- package/skills/multiplayer-and-networking/peer-to-peer-multiplayer/SKILL.md +4 -4
- package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +7 -7
- package/skills/performance/tune-performance/SKILL.md +5 -5
- package/skills/rendering-and-lighting/3d-lighting/SKILL.md +1 -1
- package/skills/rendering-and-lighting/art-direction/SKILL.md +5 -5
- package/skills/scene-and-project/brainstorm-game/SKILL.md +4 -4
- package/skills/scene-and-project/play/SKILL.md +1 -1
- package/skills/scene-and-project/scene-composition/SKILL.md +30 -1
- package/skills/scripting-patterns/gdscript-patterns/SKILL.md +53 -0
- package/skills/ui-and-ux/ui-basics/SKILL.md +1 -1
- package/skills/video/animated-loop/SKILL.md +1 -1
- package/skills/video/cinematic-cutscene/SKILL.md +1 -1
- package/skills/video/trailer-shot/SKILL.md +1 -1
- package/skills/visual-effects/game-feel/SKILL.md +6 -6
- package/skills/workflow/brainstorming/SKILL.md +164 -0
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -0
- package/skills/workflow/brainstorming/scripts/helper.js +88 -0
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -0
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -0
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -0
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/workflow/brainstorming/visual-companion.md +287 -0
- package/skills/workflow/debugging-game-feel/SKILL.md +174 -0
- package/skills/workflow/diagnosing-perf-regressions/SKILL.md +190 -0
- package/skills/workflow/dispatching-parallel-agents/SKILL.md +182 -0
- package/skills/workflow/gameskill/SKILL.md +111 -0
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +119 -0
- package/skills/workflow/investigating-bugs/SKILL.md +296 -0
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +158 -0
- package/skills/workflow/investigating-bugs/condition-based-waiting.md +115 -0
- package/skills/workflow/investigating-bugs/defense-in-depth.md +122 -0
- package/skills/workflow/investigating-bugs/find-polluter.sh +63 -0
- package/skills/workflow/investigating-bugs/root-cause-tracing.md +169 -0
- package/skills/workflow/investigating-bugs/test-academic.md +14 -0
- package/skills/workflow/investigating-bugs/test-pressure-1.md +58 -0
- package/skills/workflow/investigating-bugs/test-pressure-2.md +68 -0
- package/skills/workflow/investigating-bugs/test-pressure-3.md +69 -0
- package/skills/workflow/playtesting-a-feature/SKILL.md +173 -0
- package/skills/{_meta → workflow}/skill-create/SKILL.md +32 -22
- package/skills/{_meta → workflow}/skill-improve/SKILL.md +9 -10
- package/skills/{_meta → workflow}/skill-test/SKILL.md +12 -12
- package/skills/{_meta → workflow}/using-summer/SKILL.md +5 -2
- package/skills/workflow/verification-before-completion/SKILL.md +139 -0
- package/skills/workflow/writing-plans/SKILL.md +152 -0
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/skills/workflow/writing-skills/SKILL.md +655 -0
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -0
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/workflow/writing-skills/graphviz-conventions.dot +172 -0
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -0
- package/skills/workflow/writing-skills/render-graphs.js +168 -0
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -0
- package/dist/commands/assets.d.ts +0 -2
- package/dist/commands/assets.js +0 -189
- package/dist/commands/debug.d.ts +0 -2
- package/dist/commands/debug.js +0 -127
- package/dist/commands/doctor.test.d.ts +0 -1
- package/dist/commands/doctor.test.js +0 -29
- package/dist/commands/project.d.ts +0 -2
- package/dist/commands/project.js +0 -170
- package/dist/commands/scene.d.ts +0 -2
- package/dist/commands/scene.js +0 -290
- package/dist/lib/agent-config.test.d.ts +0 -1
- package/dist/lib/agent-config.test.js +0 -80
- package/dist/lib/format.test.d.ts +0 -1
- package/dist/lib/format.test.js +0 -36
- package/dist/lib/plugin-manifests.test.d.ts +0 -1
- package/dist/lib/plugin-manifests.test.js +0 -134
- package/dist/lib/with-engine.d.ts +0 -14
- package/dist/lib/with-engine.js +0 -109
- package/skills/_shared/collaborative-protocol.md +0 -50
- package/skills/_shared/gd-style.md +0 -121
- package/skills/_shared/godot-version.md +0 -32
- package/skills/_shared/mcp-tools-reference.md +0 -133
- package/skills/_shared/summer-folder.md +0 -44
- package/skills/_shared/template-registry.md +0 -40
- package/skills/_tests/runner.md +0 -90
- package/skills/_tests/specs/3d-lighting.md +0 -19
- package/skills/_tests/specs/art-direction.md +0 -115
- package/skills/_tests/specs/asset-strategy.md +0 -19
- package/skills/_tests/specs/audio-direction.md +0 -123
- package/skills/_tests/specs/brainstorm-game.md +0 -99
- package/skills/_tests/specs/debug.md +0 -94
- package/skills/_tests/specs/design-level.md +0 -113
- package/skills/_tests/specs/design-mechanic.md +0 -112
- package/skills/_tests/specs/design-npc.md +0 -143
- package/skills/_tests/specs/export-and-ship.md +0 -114
- package/skills/_tests/specs/fps-controller.md +0 -113
- package/skills/_tests/specs/gdscript-patterns.md +0 -19
- package/skills/_tests/specs/host-authoritative-state.md +0 -104
- package/skills/_tests/specs/make-game.md +0 -19
- package/skills/_tests/specs/peer-to-peer-multiplayer.md +0 -99
- package/skills/_tests/specs/play.md +0 -88
- package/skills/_tests/specs/scene-composition.md +0 -19
- package/skills/_tests/specs/setup-multiplayer.md +0 -106
- package/skills/_tests/specs/tune-performance.md +0 -104
- package/skills/_tests/specs/ui-basics.md +0 -19
- package/skills/_tests/specs/vfx.md +0 -116
- package/skills/catalog.yaml +0 -991
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# Collaborative Protocol — "May I write?"
|
|
2
|
-
|
|
3
|
-
> Every Summer skill must follow this. The agent works *with* the user, not around them.
|
|
4
|
-
|
|
5
|
-
## The rule
|
|
6
|
-
|
|
7
|
-
**Before any user-visible write step, the agent must explicitly state what it is about to do and ask permission to proceed.**
|
|
8
|
-
|
|
9
|
-
This applies to:
|
|
10
|
-
- Creating files (`.gd`, `.tscn`, `.tres`, JSON, configs)
|
|
11
|
-
- Modifying existing files (especially `.gd` and `.tscn`)
|
|
12
|
-
- Running irreversible operations (deletion, reset, force-overwrite)
|
|
13
|
-
- Setting up project-wide settings (`project.godot`)
|
|
14
|
-
- Installing tools, libraries, or templates
|
|
15
|
-
|
|
16
|
-
Reading is unconditional. Inspection, scene-tree walks, diagnostics — never need permission.
|
|
17
|
-
|
|
18
|
-
## Phrasing
|
|
19
|
-
|
|
20
|
-
Plain, short, action-first. Examples:
|
|
21
|
-
|
|
22
|
-
> May I create `scenes/player.tscn` and add a CharacterBody3D + Camera3D?
|
|
23
|
-
|
|
24
|
-
> I'm about to overwrite `levels/level_01.tscn`. The current version has 14 nodes — I'll preserve them and add the new lighting setup. Continue?
|
|
25
|
-
|
|
26
|
-
> May I attach `scripts/player_controller.gd` to `./World/Player`?
|
|
27
|
-
|
|
28
|
-
> I'm going to bind `move_forward`, `move_back`, `move_left`, `move_right`, `jump`. OK?
|
|
29
|
-
|
|
30
|
-
## What this prevents
|
|
31
|
-
|
|
32
|
-
1. **Silent overwrites.** The agent stomps the user's hand-edited script.
|
|
33
|
-
2. **Cascading scope creep.** A "small fix" turns into a 30-file refactor.
|
|
34
|
-
3. **Unclear state.** The user has no idea what changed when something breaks.
|
|
35
|
-
4. **Trust loss.** One unauthorized edit and the user stops trusting the agent.
|
|
36
|
-
|
|
37
|
-
## What this is NOT
|
|
38
|
-
|
|
39
|
-
- Not a confirmation dialog for every property change in a single skill execution. Group related writes into one ask: "I'm about to add the player root, attach the controller script, and bind 5 input actions. OK?"
|
|
40
|
-
- Not a request for design input. The skill should know what to do; the ask is for permission, not direction.
|
|
41
|
-
- Not a stop on simple read-only ops or single-property tweaks the user clearly directed.
|
|
42
|
-
|
|
43
|
-
## Linter check
|
|
44
|
-
|
|
45
|
-
The `_meta/skill-test/SKILL.md` static linter looks for the phrases:
|
|
46
|
-
- "May I" / "May I write" / "May I create" / "May I attach"
|
|
47
|
-
- "I'm about to"
|
|
48
|
-
- "Continue?" / "OK?" / "Proceed?"
|
|
49
|
-
|
|
50
|
-
A skill that mutates files but never says any of these fails the linter.
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
# GDScript Style — Summer Conventions
|
|
2
|
-
|
|
3
|
-
> The bar for GDScript in Summer. Skills should produce code that matches this. Where Godot's official style guide is silent, this is the tiebreaker.
|
|
4
|
-
|
|
5
|
-
## File structure
|
|
6
|
-
|
|
7
|
-
```gdscript
|
|
8
|
-
class_name PlayerController
|
|
9
|
-
extends CharacterBody3D
|
|
10
|
-
|
|
11
|
-
# 1. Constants
|
|
12
|
-
const SPEED := 5.0
|
|
13
|
-
const JUMP_VELOCITY := 4.5
|
|
14
|
-
const GRAVITY := 9.8
|
|
15
|
-
|
|
16
|
-
# 2. Exports (designer-tweakable in inspector)
|
|
17
|
-
@export var move_speed: float = 5.0
|
|
18
|
-
@export var jump_height: float = 1.0
|
|
19
|
-
@export_range(0.1, 10.0) var look_sensitivity: float = 1.0
|
|
20
|
-
|
|
21
|
-
# 3. Signals (events this node emits)
|
|
22
|
-
signal died
|
|
23
|
-
signal health_changed(new_value: int)
|
|
24
|
-
|
|
25
|
-
# 4. Onready references (cached node lookups)
|
|
26
|
-
@onready var camera: Camera3D = $Camera3D
|
|
27
|
-
@onready var collision: CollisionShape3D = $CollisionShape3D
|
|
28
|
-
|
|
29
|
-
# 5. Private state (snake_case, leading underscore optional)
|
|
30
|
-
var _is_grounded: bool = false
|
|
31
|
-
var _velocity := Vector3.ZERO
|
|
32
|
-
|
|
33
|
-
# 6. Lifecycle (in canonical order)
|
|
34
|
-
func _ready() -> void:
|
|
35
|
-
pass
|
|
36
|
-
|
|
37
|
-
func _process(delta: float) -> void:
|
|
38
|
-
pass
|
|
39
|
-
|
|
40
|
-
func _physics_process(delta: float) -> void:
|
|
41
|
-
pass
|
|
42
|
-
|
|
43
|
-
func _input(event: InputEvent) -> void:
|
|
44
|
-
pass
|
|
45
|
-
|
|
46
|
-
# 7. Public API (PascalCase or snake_case methods, snake_case for funcs)
|
|
47
|
-
func take_damage(amount: int) -> void:
|
|
48
|
-
pass
|
|
49
|
-
|
|
50
|
-
# 8. Private helpers (leading underscore)
|
|
51
|
-
func _calculate_movement(delta: float) -> Vector3:
|
|
52
|
-
return Vector3.ZERO
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Type hints
|
|
56
|
-
|
|
57
|
-
**Always type-hint.** No bare `var x = 5`. Use `:=` for inferred typing or `:` for explicit.
|
|
58
|
-
|
|
59
|
-
```gdscript
|
|
60
|
-
# RIGHT
|
|
61
|
-
var speed: float = 5.0
|
|
62
|
-
var name := "Player"
|
|
63
|
-
func attack(target: Node3D, amount: int) -> bool:
|
|
64
|
-
return true
|
|
65
|
-
|
|
66
|
-
# WRONG
|
|
67
|
-
var speed = 5.0
|
|
68
|
-
func attack(target, amount):
|
|
69
|
-
return true
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Naming
|
|
73
|
-
|
|
74
|
-
| Thing | Convention | Example |
|
|
75
|
-
|---|---|---|
|
|
76
|
-
| Class | PascalCase | `class_name PlayerController` |
|
|
77
|
-
| File | snake_case | `player_controller.gd` |
|
|
78
|
-
| Variable, function | snake_case | `move_speed`, `take_damage()` |
|
|
79
|
-
| Constant | SCREAMING_SNAKE_CASE | `const MAX_HEALTH := 100` |
|
|
80
|
-
| Signal | snake_case (past tense for events) | `died`, `health_changed` |
|
|
81
|
-
| Private | leading underscore | `_is_grounded`, `_calculate_movement` |
|
|
82
|
-
| Node in scene | PascalCase | `Player`, `Camera3D`, `CollisionShape3D` |
|
|
83
|
-
|
|
84
|
-
## Signals
|
|
85
|
-
|
|
86
|
-
Define with typed args. Connect in `_ready()` or in scene `.tscn` directly.
|
|
87
|
-
|
|
88
|
-
```gdscript
|
|
89
|
-
signal health_changed(new_value: int, max_value: int)
|
|
90
|
-
|
|
91
|
-
func _ready() -> void:
|
|
92
|
-
health_changed.connect(_on_health_changed)
|
|
93
|
-
|
|
94
|
-
func _on_health_changed(new_value: int, max_value: int) -> void:
|
|
95
|
-
pass
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## Tweens
|
|
99
|
-
|
|
100
|
-
Use `create_tween()` for animation. Don't manually lerp in `_process` unless you need fine control.
|
|
101
|
-
|
|
102
|
-
```gdscript
|
|
103
|
-
var tween := create_tween()
|
|
104
|
-
tween.tween_property(self, "modulate", Color.WHITE, 0.3)
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## What to avoid
|
|
108
|
-
|
|
109
|
-
- Bare `var x = something` (no type)
|
|
110
|
-
- `Object` typed parameters (use specific class)
|
|
111
|
-
- `match` for two-branch logic (use `if`)
|
|
112
|
-
- Recreating node lookups in `_process` (cache via `@onready`)
|
|
113
|
-
- Hard-coded strings for node paths in code (use `@onready` + scene-relative paths)
|
|
114
|
-
- Setting `position` in `_process` for physics objects (use `_physics_process` and `velocity`)
|
|
115
|
-
|
|
116
|
-
## See also
|
|
117
|
-
|
|
118
|
-
- [Official Godot GDScript style guide](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_styleguide.html)
|
|
119
|
-
- `scripting-patterns/gdscript-patterns/SKILL.md` — patterns and idioms
|
|
120
|
-
- `scripting-patterns/signal-patterns/SKILL.md` — signal usage
|
|
121
|
-
- `scripting-patterns/state-machine-patterns/SKILL.md` — state machine patterns
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Godot / Summer Engine Version Reference
|
|
2
|
-
|
|
3
|
-
> Read this **before** writing any code, especially shaders or rendering code. Godot's API is moving; the LLM cutoff date matters per domain.
|
|
4
|
-
|
|
5
|
-
## Engine fork base
|
|
6
|
-
|
|
7
|
-
Summer Engine is a fork of **Godot 4.5** (stable). All skills assume Godot 4.x APIs.
|
|
8
|
-
|
|
9
|
-
## LLM training cutoff vs. Godot release dates
|
|
10
|
-
|
|
11
|
-
| Domain | Godot 4.x churn | Action |
|
|
12
|
-
|---|---|---|
|
|
13
|
-
| Scripting (GDScript core) | low | Trust your training. Spot-check signatures only when something feels off. |
|
|
14
|
-
| Scene / node tree APIs | low | Trust your training. |
|
|
15
|
-
| Renderer (`RenderingServer`, `Compositor`) | high in 4.4 / 4.5 | Verify before writing. Check `MovieMaker`, `Compositor` effects, `RenderSceneBuffers` — these renamed/added recently. |
|
|
16
|
-
| Shaders (`canvas_item`, `spatial`, `compute`) | medium | Built-in functions stable, but `hint_*` flags shifted. Verify `hint_screen_texture` / `hint_depth_texture` syntax. |
|
|
17
|
-
| Animation (`AnimationTree`, `AnimationMixer`) | high (4.0 → 4.3 rename) | Use `AnimationMixer` for new code, not deprecated `AnimationPlayer`-as-mixer. |
|
|
18
|
-
| Multiplayer (`MultiplayerAPI`) | medium | High-level API stable. `SceneReplicationConfig` settled in 4.0+. |
|
|
19
|
-
| Editor / EditorPlugin | medium | Spot-check. |
|
|
20
|
-
| `Tween` / `SceneTreeTween` | low | Stable since 4.0. |
|
|
21
|
-
|
|
22
|
-
## Summer-specific deltas from vanilla Godot
|
|
23
|
-
|
|
24
|
-
- Local API server runs on `localhost:6550` (set per machine via `~/.summer/api-token`).
|
|
25
|
-
- Engine ships a webview module in `modules/1summer_engine/` — do not assume vanilla Godot for editor UI patches.
|
|
26
|
-
- Project root contains `.summer/` for project memory; do not delete it.
|
|
27
|
-
|
|
28
|
-
## When in doubt
|
|
29
|
-
|
|
30
|
-
1. Use Summer MCP tools (`summer_inspect_node`, `summer_inspect_resource`) to read live editor state instead of guessing.
|
|
31
|
-
2. Use `summer_get_diagnostics` after every scene change.
|
|
32
|
-
3. Check `_shared/mcp-tools-reference.md` for the canonical tool list.
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
# Summer MCP Tools — Canonical Reference
|
|
2
|
-
|
|
3
|
-
> Use this as the single source of truth for which Summer MCP tool to call. Skills should reference tool names exactly as written here.
|
|
4
|
-
|
|
5
|
-
## When to use Summer MCP vs. host file edits
|
|
6
|
-
|
|
7
|
-
**Use Summer MCP for** anything that needs the live editor or Godot's import pipeline:
|
|
8
|
-
- Scene graph mutation (`.tscn`)
|
|
9
|
-
- Node properties and resources (`.tres`)
|
|
10
|
-
- Project settings (`project.godot`) and InputMap
|
|
11
|
-
- Asset import (Godot's import pipeline must run)
|
|
12
|
-
- Play / stop / runtime state
|
|
13
|
-
- Diagnostics, console, debugger output, script errors
|
|
14
|
-
|
|
15
|
-
**Use the host agent's file tools for** plain text:
|
|
16
|
-
- `.gd` GDScript files
|
|
17
|
-
- `.cs` C# files
|
|
18
|
-
- `.json`, `.md`, `.txt`, `.yaml`
|
|
19
|
-
- Most simple `.tres` resources where the structure is well-known
|
|
20
|
-
|
|
21
|
-
**Rule of thumb:** if Godot's importer or the live editor needs to know about it, MCP. Otherwise, file edits.
|
|
22
|
-
|
|
23
|
-
## Tool surface (37 tools)
|
|
24
|
-
|
|
25
|
-
### Scene graph (10)
|
|
26
|
-
|
|
27
|
-
| Tool | Use |
|
|
28
|
-
|---|---|
|
|
29
|
-
| `summer_get_scene_tree` | Read current scene graph. Always do this before mutating. |
|
|
30
|
-
| `summer_open_main_scene` | Open the project's main scene. |
|
|
31
|
-
| `summer_open_scene` | Open a specific `.tscn`. |
|
|
32
|
-
| `summer_create_scene` | Create a new scene. |
|
|
33
|
-
| `summer_inspect_node` | Read a single node's properties. |
|
|
34
|
-
| `summer_add_node` | Add a node to the active scene. |
|
|
35
|
-
| `summer_remove_node` | Remove a node. |
|
|
36
|
-
| `summer_replace_node` | Swap a node's type, preserving children. |
|
|
37
|
-
| `summer_select_node` | Set editor selection (visual feedback for the user). |
|
|
38
|
-
| `summer_save_scene` | Persist changes. **Always save before play.** |
|
|
39
|
-
|
|
40
|
-
### Properties / resources (4)
|
|
41
|
-
|
|
42
|
-
| Tool | Use |
|
|
43
|
-
|---|---|
|
|
44
|
-
| `summer_set_prop` | Set a typed property (Vector3, Color, etc.) using Godot's `str_to_var()`. |
|
|
45
|
-
| `summer_set_resource_property` | Set a property on a nested resource (e.g., CollisionShape's `shape.radius`). |
|
|
46
|
-
| `summer_inspect_resource` | Read a resource's properties. |
|
|
47
|
-
| `summer_connect_signal` | Wire a signal between nodes. |
|
|
48
|
-
|
|
49
|
-
### Project & input (2)
|
|
50
|
-
|
|
51
|
-
| Tool | Use |
|
|
52
|
-
|---|---|
|
|
53
|
-
| `summer_project_setting` | Modify `project.godot` settings (rendering, physics). |
|
|
54
|
-
| `summer_input_map_bind` | Bind input actions in InputMap. Folds in the legacy `add_action` step. |
|
|
55
|
-
|
|
56
|
-
### Import pipeline (2)
|
|
57
|
-
|
|
58
|
-
| Tool | Use |
|
|
59
|
-
|---|---|
|
|
60
|
-
| `summer_import_from_url` | Download a `.glb`/`.png`/etc and run Godot's full import pipeline. |
|
|
61
|
-
| `summer_import_from_url_batch` | Same, batched (single filesystem scan). |
|
|
62
|
-
|
|
63
|
-
### Play / runtime (3)
|
|
64
|
-
|
|
65
|
-
| Tool | Use |
|
|
66
|
-
|---|---|
|
|
67
|
-
| `summer_play` | Run the game. |
|
|
68
|
-
| `summer_stop` | Stop the running game. |
|
|
69
|
-
| `summer_is_running` | Check play state before deciding to call `summer_stop`. |
|
|
70
|
-
|
|
71
|
-
### Diagnostics (5)
|
|
72
|
-
|
|
73
|
-
| Tool | Use |
|
|
74
|
-
|---|---|
|
|
75
|
-
| `summer_get_diagnostics` | Aggregate error/warning summary. Call after every change. |
|
|
76
|
-
| `summer_get_console` | Engine output panel. |
|
|
77
|
-
| `summer_clear_console` | Clear before a fresh play, so post-run output is clean. |
|
|
78
|
-
| `summer_get_debugger_errors` | Runtime errors with stack traces. |
|
|
79
|
-
| `summer_get_script_errors` | Script compilation errors. |
|
|
80
|
-
|
|
81
|
-
### Asset library (2)
|
|
82
|
-
|
|
83
|
-
| Tool | Use |
|
|
84
|
-
|---|---|
|
|
85
|
-
| `summer_search_assets` | Free public asset search (community library + user's own). Sources: `library`, `community`, `my_assets`, `all`. |
|
|
86
|
-
| `summer_import_asset` | Download a found asset and run import. |
|
|
87
|
-
|
|
88
|
-
### Asset generation (4 — metered)
|
|
89
|
-
|
|
90
|
-
| Tool | Use |
|
|
91
|
-
|---|---|
|
|
92
|
-
| `summer_generate_image` | AI image gen. |
|
|
93
|
-
| `summer_generate_3d` | Image-to-3D. |
|
|
94
|
-
| `summer_generate_audio` | SFX / music gen. |
|
|
95
|
-
| `summer_generate_video` | Video gen. |
|
|
96
|
-
|
|
97
|
-
### Job tracking (2)
|
|
98
|
-
|
|
99
|
-
| Tool | Use |
|
|
100
|
-
|---|---|
|
|
101
|
-
| `summer_check_job` | Poll a generation job. |
|
|
102
|
-
| `summer_batch` | Run multiple ops as a transaction. |
|
|
103
|
-
|
|
104
|
-
### Meta (2)
|
|
105
|
-
|
|
106
|
-
| Tool | Use |
|
|
107
|
-
|---|---|
|
|
108
|
-
| `summer_get_project_context` | Project structure summary — call at start of session. |
|
|
109
|
-
| `summer_get_agent_playbook` | Daily operating contract — call at start of session. |
|
|
110
|
-
|
|
111
|
-
## Common pattern
|
|
112
|
-
|
|
113
|
-
Every scene-touching skill should follow this loop:
|
|
114
|
-
|
|
115
|
-
1. `summer_get_project_context` — orient.
|
|
116
|
-
2. `summer_get_agent_playbook` — read the rules.
|
|
117
|
-
3. `summer_get_scene_tree` — see what's there.
|
|
118
|
-
4. (mutations: `summer_add_node`, `summer_set_prop`, `summer_connect_signal`, ...)
|
|
119
|
-
5. `summer_save_scene` — persist.
|
|
120
|
-
6. `summer_get_script_errors` — catch GDScript breakage.
|
|
121
|
-
7. `summer_play` → `summer_get_debugger_errors` → `summer_stop` if verifying runtime.
|
|
122
|
-
|
|
123
|
-
## Trap: silent-fail on inline sub-resource SetResourceProperty
|
|
124
|
-
|
|
125
|
-
`summer_set_resource_property` will silently fail if the target resource is an inline `sub_resource` rather than a standalone `.tres`. If you need to set nested properties (mesh size, shape radius, material color), make the resource standalone first:
|
|
126
|
-
|
|
127
|
-
```
|
|
128
|
-
summer_add_node(... mesh = "BoxMesh" ...) # creates inline sub_resource
|
|
129
|
-
# WRONG: summer_set_resource_property("./Box", "mesh.size", "Vector3(2,2,2)") ← silently fails
|
|
130
|
-
# RIGHT: save mesh as .tres, then SetResourceProperty
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
This is documented in `public/knowledge/asset_pipeline.json`.
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# `.summer/` Folder Convention
|
|
2
|
-
|
|
3
|
-
> The canonical layout for project-scoped Summer state. Read this if you're authoring a skill that writes durable design output (briefs, art bible, level docs).
|
|
4
|
-
|
|
5
|
-
## Files at the root of `.summer/`
|
|
6
|
-
|
|
7
|
-
- `GameSoul.md` — the project brief. Created by `/summer:brainstorm-game`. Contains: name, one-sentence pitch, core loop, 3 mechanics max, art direction summary, scope. Updated whenever the game's high-level direction changes.
|
|
8
|
-
- `art-bible.md` — visual style reference. Created by `/summer:art-direction`. Contains: palette (6–15 hex codes), mood adjectives, lighting plan, post-processing notes, do/don't list, references.
|
|
9
|
-
- `audio-bible.md` — sonic identity. Created by `/summer:audio-direction`. Contains: music style + tempo range, SFX vocabulary (8 classes), dynamic music FSM, bus layout reference.
|
|
10
|
-
|
|
11
|
-
## Subdirectories
|
|
12
|
-
|
|
13
|
-
- `mechanics/<mechanic-name>.md` — one file per designed mechanic (e.g., `double-jump.md`, `parry.md`). Created by `/summer:design-mechanic`. Contains: input → response → feedback → failure modes → tunable parameters.
|
|
14
|
-
- `levels/<level-name>.md` — one file per designed level. Created by `/summer:design-level`. Contains: teaching goal, pacing curve (5 beats), encounters, secrets, reward gating.
|
|
15
|
-
- `npcs/<npc-name>.md` — one file per designed NPC. Created by `/summer:design-npc`. Contains: archetype, perception model, decision tree, escalation, defeat sequence.
|
|
16
|
-
|
|
17
|
-
## Conventions
|
|
18
|
-
|
|
19
|
-
- All filenames are lowercase, hyphens not underscores.
|
|
20
|
-
- Skills MUST ask "May I write/update `.summer/<file>`?" before any write to this folder.
|
|
21
|
-
- Skills MAY read existing files in `.summer/` without permission to ground their output in prior decisions.
|
|
22
|
-
- The folder lives in the project root (sibling to `project.godot`).
|
|
23
|
-
- Add `.summer/` to `.gitignore` if the user prefers it private; default is to commit it (game design lives with the game).
|
|
24
|
-
|
|
25
|
-
## Skills that write here
|
|
26
|
-
|
|
27
|
-
| Skill | Writes |
|
|
28
|
-
|---|---|
|
|
29
|
-
| `/summer:brainstorm-game` | `.summer/GameSoul.md` |
|
|
30
|
-
| `/summer:art-direction` | `.summer/art-bible.md` |
|
|
31
|
-
| `/summer:audio-direction` | `.summer/audio-bible.md` |
|
|
32
|
-
| `/summer:design-mechanic` | `.summer/mechanics/<name>.md` |
|
|
33
|
-
| `/summer:design-level` | `.summer/levels/<name>.md` |
|
|
34
|
-
| `/summer:design-npc` | `.summer/npcs/<name>.md` |
|
|
35
|
-
| `/summer:debug` | does NOT write here |
|
|
36
|
-
| `/summer:play` | does NOT write here |
|
|
37
|
-
| `/summer:vfx` | does NOT write here (VFX edits scenes/scripts) |
|
|
38
|
-
| `/summer:tune-performance` | optionally writes `.summer/perf-notes.md` if user requests |
|
|
39
|
-
| `/summer:setup-multiplayer` | optionally writes `.summer/multiplayer-architecture.md` |
|
|
40
|
-
| `/summer:export-and-ship` | does NOT write here (writes export configs in `project.godot`) |
|
|
41
|
-
|
|
42
|
-
## Linter check (future)
|
|
43
|
-
|
|
44
|
-
Once `_meta/skill-test` gains an executable mode, it should validate that any skill writing to `.summer/` is documented in the table above.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# Template Registry
|
|
2
|
-
|
|
3
|
-
> Skills cross-link to template repos via the `template-id` frontmatter field. This file is the canonical mapping. When a template repo moves, update one entry here.
|
|
4
|
-
|
|
5
|
-
## Template IDs
|
|
6
|
-
|
|
7
|
-
| template-id | Description | Repo |
|
|
8
|
-
|---|---|---|
|
|
9
|
-
| `template-3d-fps` | First-person shooter starter (CharacterBody3D, Camera3D, input, sample level) | https://github.com/SummerEngine/FPS-template-Summer-Engine |
|
|
10
|
-
| `template-3d-tps` | Third-person shooter starter | https://github.com/SummerEngine/tps-template |
|
|
11
|
-
| `template-2d-platformer` | 2D platformer starter (TileMap, CharacterBody2D, parallax) | TBD |
|
|
12
|
-
| `template-3d-platformer` | 3D platformer starter (jump, double jump, simple level) | TBD |
|
|
13
|
-
| `template-top-down-rpg` | Top-down ARPG starter | TBD |
|
|
14
|
-
| `template-2d-deckbuilder` | Deck-builder starter (card, deck, draw, discard, energy) | TBD (prototype lives at `templates/template-2d-deckbuilder/`) |
|
|
15
|
-
| `template-tower-defense` | Tower defense starter | TBD |
|
|
16
|
-
| `template-walking-sim` | Walking sim starter | TBD |
|
|
17
|
-
|
|
18
|
-
## Convention
|
|
19
|
-
|
|
20
|
-
Each template is its own GitHub repo, MIT licensed, kept small (< 50 MB). Templates ship working code. Skills describe patterns. A skill links to the matching template via:
|
|
21
|
-
|
|
22
|
-
```markdown
|
|
23
|
-
## Want a working starter?
|
|
24
|
-
|
|
25
|
-
This skill describes the pattern. For a runnable project, use the template:
|
|
26
|
-
|
|
27
|
-
→ **template-id**: `template-3d-fps`
|
|
28
|
-
→ **Repo**: https://github.com/SummerEngine/FPS-template-Summer-Engine
|
|
29
|
-
→ **Bootstrap**: `summer template clone template-3d-fps my-fps`
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Linter check
|
|
33
|
-
|
|
34
|
-
The `_meta/skill-test/SKILL.md` static linter validates that any `template-id:` declared in a skill's frontmatter exists in the table above.
|
|
35
|
-
|
|
36
|
-
## Adding a template
|
|
37
|
-
|
|
38
|
-
1. Create a new GitHub repo under `SummerEngine` org, MIT license.
|
|
39
|
-
2. Add the `template-id`, description, and repo URL to the table above.
|
|
40
|
-
3. Reference the `template-id` from any relevant skill.
|
package/skills/_tests/runner.md
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Skill Test Runner
|
|
2
|
-
|
|
3
|
-
> How `/skill-test` and `/skill-improve` actually work in this repo. Read this if you're authoring a behavioral spec or trying to understand the test pipeline.
|
|
4
|
-
|
|
5
|
-
## Architecture
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
skills/
|
|
9
|
-
├── _meta/skill-test/SKILL.md # the linter + spec runner (3 modes)
|
|
10
|
-
├── _meta/skill-improve/SKILL.md # the eval harness for iteration
|
|
11
|
-
└── _tests/
|
|
12
|
-
├── runner.md # this file
|
|
13
|
-
├── specs/
|
|
14
|
-
│ └── <skill-name>.md # behavioral specs, one per non-_meta skill
|
|
15
|
-
└── runs/ # generated, gitignored
|
|
16
|
-
└── <skill-name>/
|
|
17
|
-
├── baseline/
|
|
18
|
-
└── proposed/
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## What a spec looks like
|
|
22
|
-
|
|
23
|
-
Every spec at `_tests/specs/<skill-name>.md` has:
|
|
24
|
-
|
|
25
|
-
- A `## Fixture` block describing the starting state and tool availability.
|
|
26
|
-
- One or more `## Case <N>: <Happy | Failure | Edge>` blocks.
|
|
27
|
-
- Each Case has `**Input:**`, `**Expected MCP tool sequence:**`, and `**Assertions:**` (markdown checkboxes).
|
|
28
|
-
|
|
29
|
-
Reference: `_tests/specs/fps-controller.md` (canonical example).
|
|
30
|
-
|
|
31
|
-
## Static linter (cheap, every commit)
|
|
32
|
-
|
|
33
|
-
Run by `/skill-test <name>` in `static` mode. Pure markdown reasoning — no subagents, no tool calls.
|
|
34
|
-
|
|
35
|
-
The 7 checks live in `_meta/skill-test/SKILL.md` § "Mode: static". Re-read that for the canonical list.
|
|
36
|
-
|
|
37
|
-
## Spec runner (medium, weekly)
|
|
38
|
-
|
|
39
|
-
Run by `/skill-test <name>` in `spec` mode. Reads SKILL.md and the matching spec, reasons over the assertions. No execution.
|
|
40
|
-
|
|
41
|
-
This catches drift between what the skill says and what its spec demands. It does not catch agent variation — for that, use `/skill-improve`.
|
|
42
|
-
|
|
43
|
-
## Eval harness (expensive, on-demand)
|
|
44
|
-
|
|
45
|
-
Run by `/skill-improve <name>`. Spawns parallel `Task` subagents with the current SKILL.md vs. proposed SKILL.md. Compares outputs against assertions. Decides which wins. Writes results to `_tests/runs/<name>/`.
|
|
46
|
-
|
|
47
|
-
Use this when:
|
|
48
|
-
- A skill consistently fails its spec but you can't tell why from reading it.
|
|
49
|
-
- You're rewriting a skill and want a regression baseline.
|
|
50
|
-
- A skill is critical (top of `catalog.yaml` recommended set) and overdue for an audit.
|
|
51
|
-
|
|
52
|
-
## Authoring a spec
|
|
53
|
-
|
|
54
|
-
Five-minute job per skill. Copy this template:
|
|
55
|
-
|
|
56
|
-
```markdown
|
|
57
|
-
# Skill Spec: /<skill-name>
|
|
58
|
-
|
|
59
|
-
## Fixture
|
|
60
|
-
- <starting state of the project / scene>
|
|
61
|
-
- Available tools: Summer MCP <yes|no>, host file edits <yes|no>
|
|
62
|
-
|
|
63
|
-
## Case 1: Happy Path
|
|
64
|
-
**Input:** "<the most common user prompt that should trigger this skill>"
|
|
65
|
-
|
|
66
|
-
**Expected MCP tool sequence (in order):**
|
|
67
|
-
1. summer_<tool>(...)
|
|
68
|
-
2. summer_<tool>(...)
|
|
69
|
-
|
|
70
|
-
**Assertions:**
|
|
71
|
-
- [ ] <observable outcome 1>
|
|
72
|
-
- [ ] <skill asks "May I" before any user-visible write>
|
|
73
|
-
- [ ] <skill never calls the silent-fail anti-pattern>
|
|
74
|
-
|
|
75
|
-
## Case 2: Failure Path
|
|
76
|
-
**Fixture:** <something missing or already present that should change behavior>
|
|
77
|
-
**Input:** "<edge prompt>"
|
|
78
|
-
**Expected:** <how the skill should adapt — clarify, defer, fail-safe>
|
|
79
|
-
|
|
80
|
-
## Case 3: Edge Case
|
|
81
|
-
**Fixture:** ...
|
|
82
|
-
**Input:** "<unusual prompt>"
|
|
83
|
-
**Expected:** ...
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
Aim for 2–4 cases per skill. More than 4 = the skill is doing too much and should be split.
|
|
87
|
-
|
|
88
|
-
## Catalog last-tested
|
|
89
|
-
|
|
90
|
-
Every successful run of `/skill-improve` (or a manual sign-off) should bump `last-tested:` in `catalog.yaml`. The audit mode of `/skill-test` flags skills with stale `last-tested:` fields.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Skill Spec: /3d-lighting
|
|
2
|
-
|
|
3
|
-
> Stub spec. Expand with Happy / Failure / Edge cases. See `fps-controller.md` for the canonical format.
|
|
4
|
-
|
|
5
|
-
## Fixture
|
|
6
|
-
|
|
7
|
-
- TBD
|
|
8
|
-
|
|
9
|
-
## Case 1: Happy Path
|
|
10
|
-
|
|
11
|
-
**Input:** "<typical user prompt>"
|
|
12
|
-
|
|
13
|
-
**Expected MCP tool sequence (in order):**
|
|
14
|
-
|
|
15
|
-
1. TBD
|
|
16
|
-
|
|
17
|
-
**Assertions:**
|
|
18
|
-
|
|
19
|
-
- [ ] TBD
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
# Skill Spec: /art-direction
|
|
2
|
-
|
|
3
|
-
## Fixture
|
|
4
|
-
|
|
5
|
-
- Godot 4.5 / Summer Engine project, main scene with `World/WorldEnvironment` and `World/Sun` (DirectionalLight3D) present.
|
|
6
|
-
- `.summer/GameSoul.md` exists; brief: "Cozy farming sim, vertical slice scope."
|
|
7
|
-
- No `.summer/art-bible.md` yet.
|
|
8
|
-
- Summer MCP available.
|
|
9
|
-
|
|
10
|
-
## Case 1: Happy Path — define art direction for cozy farming sim
|
|
11
|
-
|
|
12
|
-
**Input:** "Help me define the art direction. References: Stardew Valley and Sable."
|
|
13
|
-
|
|
14
|
-
**Expected MCP tool sequence (in order):**
|
|
15
|
-
|
|
16
|
-
1. `Read .summer/GameSoul.md` — anchor
|
|
17
|
-
2. (Skill notes: brief says "cozy", which forbids harsh contrast / saturated reds)
|
|
18
|
-
3. (Skill walks: technique pick → palette (6-15 hex codes) → mood adjectives → lighting plan → post-processing rules → do/don't list)
|
|
19
|
-
4. (Skill shows the bible inline)
|
|
20
|
-
5. (Skill asks: "May I update `project.godot`'s default clear color to the palette primary, and enable MSAA 2x?")
|
|
21
|
-
6. `summer_project_setting(key="rendering/environment/defaults/default_clear_color", value="Color(...)")`
|
|
22
|
-
7. `summer_project_setting(key="rendering/anti_aliasing/quality/msaa_3d", value="2")`
|
|
23
|
-
8. (Skill asks: "May I dial in the WorldEnvironment + Sun to the lighting plan?")
|
|
24
|
-
9. `summer_inspect_node(path="./World/WorldEnvironment")`
|
|
25
|
-
10. `summer_set_prop(...)` — adjustments + tonemap per the plan
|
|
26
|
-
11. `summer_set_prop(path="./World/Sun", key="light_color", value="Color(...)")`
|
|
27
|
-
12. (Skill asks: "May I create `.summer/art-bible.md` with this bible?")
|
|
28
|
-
13. `Write .summer/art-bible.md`
|
|
29
|
-
|
|
30
|
-
**Assertions:**
|
|
31
|
-
|
|
32
|
-
- [ ] Skill reads `.summer/GameSoul.md` to anchor.
|
|
33
|
-
- [ ] Skill enforces 2+ references — does not proceed with single reference.
|
|
34
|
-
- [ ] Skill picks ONE rendering technique (does not allow blending without naming the conflict).
|
|
35
|
-
- [ ] Palette has 6-15 hex codes; uses off-white (e.g., #f4ecdf) and off-black (e.g., #1f1a16) — flags pure #ffffff or #000000 if user pitches them.
|
|
36
|
-
- [ ] Mood adjectives are concrete (e.g., "soft, hand-warmed, golden-hour"), not vague ("cool, atmospheric").
|
|
37
|
-
- [ ] Lighting plan names DirectionalLight3D color, energy, angle; sky colors; ambient; never-rules.
|
|
38
|
-
- [ ] Post-processing has explicit ON/OFF/value calls per item (Glow, SDFGI, SSAO, SSR, Tonemap, Vignette, Chromatic aberration, Film grain) — NOT a list of options.
|
|
39
|
-
- [ ] DO and DON'T lists each have at least 5 specific, enforceable rules.
|
|
40
|
-
- [ ] DON'T list explicitly forbids chromatic aberration, motion blur, lens flare unless mood justifies them.
|
|
41
|
-
- [ ] Skill asks "May I ..." before any `summer_project_setting` or `summer_set_prop` call.
|
|
42
|
-
- [ ] Skill writes `.summer/art-bible.md` only after asking.
|
|
43
|
-
- [ ] Skill never calls `summer_set_resource_property` on an inline sub_resource (silent-fail trap).
|
|
44
|
-
- [ ] Skill ends with routing to `/summer:audio-direction` or similar.
|
|
45
|
-
|
|
46
|
-
## Case 2: Failure Path — mixed-technique pitch
|
|
47
|
-
|
|
48
|
-
**Fixture:** Same as Case 1.
|
|
49
|
-
|
|
50
|
-
**Input:** "I want PBR realistic characters in a toon-shaded world."
|
|
51
|
-
|
|
52
|
-
**Expected behavior:**
|
|
53
|
-
|
|
54
|
-
- Skill identifies the conflict explicitly: "Toon characters in a PBR world fight. The lighting that makes PBR read realistic crushes toon shading; the flat shading that makes toon read clean strips PBR's value."
|
|
55
|
-
- Skill offers a hierarchy: "(a) PBR with toon outlines (one technique), (b) full-toon with PBR-feeling fabric (one technique), (c) accept the conflict and pick which side wins on which assets."
|
|
56
|
-
- Skill does NOT silently pick or design two parallel pipelines.
|
|
57
|
-
|
|
58
|
-
**Assertions:**
|
|
59
|
-
|
|
60
|
-
- [ ] Skill names the technique conflict out loud.
|
|
61
|
-
- [ ] Skill explains *why* the techniques fight (lighting interaction).
|
|
62
|
-
- [ ] Skill forces the user to pick one primary technique.
|
|
63
|
-
- [ ] No bible written until the technique is locked.
|
|
64
|
-
|
|
65
|
-
## Case 3: Edge Case — user pitches pure white + pure black palette
|
|
66
|
-
|
|
67
|
-
**Fixture:** Same as Case 1.
|
|
68
|
-
|
|
69
|
-
**Input:** "Black-and-white only, super high contrast. Like Limbo."
|
|
70
|
-
|
|
71
|
-
**Expected behavior:**
|
|
72
|
-
|
|
73
|
-
- Skill recognizes the intent (high-contrast monochrome) but flags pure values: "Limbo isn't actually pure black — it's #0a0a0a to #f0f0f0 with subtle warm tint. Pure #000 + #fff makes UI text vibrate and reads as unintentional."
|
|
74
|
-
- Skill offers a near-monochrome palette: e.g., #0a0a0a, #2a2a2a, #6e6e6e, #c0c0c0, #f0f0f0 with one accent color (often warm) reserved for a single mechanic-tied use.
|
|
75
|
-
- Skill writes the bible with off-pure values and documents the single-accent rule in the DO list.
|
|
76
|
-
|
|
77
|
-
**Assertions:**
|
|
78
|
-
|
|
79
|
-
- [ ] Skill flags pure #000 / #fff as a red flag and corrects to off-pure values.
|
|
80
|
-
- [ ] Bible includes at least one accent color reserved for mechanic-tied use.
|
|
81
|
-
- [ ] Skill explains *why* (UI vibration, "looks unintentional") not just "use these values".
|
|
82
|
-
|
|
83
|
-
## Case 4: No Summer MCP — file-edit fallback
|
|
84
|
-
|
|
85
|
-
**Fixture:** Same as Case 1, but Summer MCP is unavailable.
|
|
86
|
-
|
|
87
|
-
**Input:** "Define the art direction for my farming sim."
|
|
88
|
-
|
|
89
|
-
**Expected behavior:**
|
|
90
|
-
|
|
91
|
-
- Skill detects no MCP.
|
|
92
|
-
- Walks the design beats normally.
|
|
93
|
-
- Instead of `summer_project_setting`, prints the `project.godot` snippet for the user to paste:
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
[rendering]
|
|
97
|
-
environment/defaults/default_clear_color=Color(0.227, 0.290, 0.227, 1)
|
|
98
|
-
anti_aliasing/quality/msaa_3d=2
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
- Instead of `summer_set_prop` on WorldEnvironment, prints the `.tscn` snippet for the user to paste into the main scene.
|
|
102
|
-
- Still writes `.summer/art-bible.md` via host `Write`.
|
|
103
|
-
- Asks "May I write ..." before each file write.
|
|
104
|
-
|
|
105
|
-
**Assertions:**
|
|
106
|
-
|
|
107
|
-
- [ ] Skill identifies that MCP is unavailable; does not blindly call `summer_*`.
|
|
108
|
-
- [ ] Generated `project.godot` snippet uses correct INI section format.
|
|
109
|
-
- [ ] Generated `.tscn` snippet for WorldEnvironment is parseable Godot 4.
|
|
110
|
-
- [ ] Skill still writes `.summer/art-bible.md`.
|
|
111
|
-
- [ ] Skill still asks "May I write ..." before each write.
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
This spec runs via `/skill-test art-direction spec` (see `_meta/skill-test/SKILL.md`).
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Skill Spec: /asset-strategy
|
|
2
|
-
|
|
3
|
-
> Stub spec. Expand with Happy / Failure / Edge cases. See `fps-controller.md` for the canonical format.
|
|
4
|
-
|
|
5
|
-
## Fixture
|
|
6
|
-
|
|
7
|
-
- TBD
|
|
8
|
-
|
|
9
|
-
## Case 1: Happy Path
|
|
10
|
-
|
|
11
|
-
**Input:** "<typical user prompt>"
|
|
12
|
-
|
|
13
|
-
**Expected MCP tool sequence (in order):**
|
|
14
|
-
|
|
15
|
-
1. TBD
|
|
16
|
-
|
|
17
|
-
**Assertions:**
|
|
18
|
-
|
|
19
|
-
- [ ] TBD
|