Fix release for 1.1.1: the minimal path end to end, engine commands that run on Godot, Unity and Unreal, hook warnings you can see, and verdicts that say when they could not check. Details in CHANGELOG.md; upgrade steps in UPGRADING.md (v1.1.1 → v1.1.2). Fixes #67 Fixes #131 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
4.8 KiB
Agent Test Spec: godot-gdscript-specialist
Agent Summary
Domain: GDScript static typing, design patterns in GDScript, signal architecture, coroutine/await patterns, and GDScript performance. Does NOT own: shader code (godot-shader-specialist), GDExtension bindings (godot-gdextension-specialist). No gate IDs assigned.
Static Assertions (Structural)
description:field is present and domain-specific (references GDScript / static typing / signals / coroutines)tools:list includes Read, Write, Edit, Bash, Glob, Grep- Model tier is
sonnet— frontmattermodel:reads exactlysonnet(tiers:.claude/docs/model-tiers.md) - Agent definition does not claim authority over shader code or GDExtension
Test Cases
Case 1: In-domain request — appropriate output
Input: "Review this GDScript file for type annotation coverage." Expected behavior:
- Reads the provided GDScript file
- Flags every variable, parameter, and return type that is missing a static type annotation
- Produces a list of specific line-by-line findings:
var speed = 5.0→var speed: float = 5.0 - Notes the performance and tooling benefits of static typing in Godot 4
- Does NOT rewrite the entire file unprompted — produces a findings list for the developer to apply
Case 2: Out-of-domain request — redirects correctly
Input: "Write a vertex shader to distort the mesh in world space." Expected behavior:
- Does NOT produce shader code in GDScript or in Godot's shading language
- Explicitly states that shader authoring belongs to
godot-shader-specialist - Redirects the request to
godot-shader-specialist - Any help it offers stays on the script side its redirect line says it owns (
set_shader_parameter(), material assignment) — it writes no shader code
Case 3: Async loading with coroutines
Input: "Load a scene asynchronously and wait for it to finish before spawning it." Expected behavior:
- Produces an
await+ResourceLoader.load_threaded_requestpattern for Godot 4 - Uses static typing throughout (
var scene: PackedScene) - Handles the completion check with
ResourceLoader.load_threaded_get_status(), awaiting between polls rather than blocking the frame - Checks
is_instance_valid(self)after the await before spawning — the node may have been freed while the scene loaded - Notes error handling for failed loads
- Does NOT use deprecated Godot 3
yield()syntax
Case 4: Performance issue — typed array recommendation
Input: "The entity update loop is slow; it iterates an untyped Array of 1,000 nodes every frame." Expected behavior:
- Identifies that an untyped
Arrayforegoes GDScript compiler optimizations - Recommends converting to a typed array (
Array[Node]or the specific type) so the compiler can use typed code paths - Produces the typed array refactor as the immediate fix
- Notes that if profiling still shows the loop as a bottleneck, the next step is moving the hot path to GDExtension (C++/Rust) with godot-gdextension-specialist, per its GDScript/GDExtension boundary
- Does NOT recommend moving the loop, or the codebase, out of GDScript without profiler evidence
Case 5: Context pass — Godot 4.6 with post-cutoff features
Input: Engine version context provided: Godot 4.6. Request: "Create an abstract base class for all enemy types using @abstract." Expected behavior:
- Identifies
@abstractas a Godot 4.5+ feature (post-cutoff) - Notes this in the output: feature introduced in 4.5, confirmed against
docs/engine-reference/godot/breaking-changes.md(4.4 → 4.5 table) - Produces the GDScript class using
@abstracton the class and its abstract methods, following the reference docs (current-best-practices.md) rather than training data - Flags that
VERSION.mdrecordsInstalled at pin timeas NOT DETERMINED — the installed editor must be 4.5 or later for@abstractto parse - Uses static typing for all method signatures in the abstract class
Protocol Compliance
- Stays within declared domain (GDScript — typing, patterns, signals, coroutines, performance)
- Redirects shader requests to godot-shader-specialist
- Redirects GDExtension requests to godot-gdextension-specialist
- Returns structured GDScript output with full static typing
- Uses Godot 4 API only — no deprecated Godot 3 patterns (yield, connect with strings, etc.)
- Flags post-cutoff features (4.4, 4.5, 4.6) and marks them as requiring doc verification
- Asks "May I write this to [filepath]?" naming the file before writing
Coverage Notes
- Type annotation review (Case 1) output is suitable as a code review checklist
- Async loading (Case 3) should produce testable code verifiable with a unit test in
tests/unit/ - Post-cutoff @abstract (Case 5) confirms the agent flags version uncertainty rather than silently using unverified APIs