Skip to content

Changelog

All notable changes to GodotIQ are documented here. Releases follow semantic versioning.


Analysis tools neither invent issues nor stay silent about gaps

Section titled “Analysis tools neither invent issues nor stay silent about gaps”

Driven by a second round of externally reported tool limitations, every claim re-verified against the code before fixing.

  • animation_info and animation_audit now see AnimationLibrary .tres files loaded via ExtResource. A scene whose AnimationPlayer loads its library from a .tres file used to report 0 animations (plus a bogus empty_player warning); both tools now follow the reference, and animations carry a source label (tres_library / external).
  • animation_audit no longer flags autoplay/current_animation animations as orphans — an animation the engine plays by itself was reported as “never referenced” (Pro).
  • placement honors constraints.marker_group, which was documented but never read. Marker-first mode without near/near_position uses the group’s free markers as candidates, and the no-reference error now says exactly what to provide (Pro).
  • New real .tres resource parser replaces the old placeholder — same text dialect as .tscn, and the piece that unlocks the external-AnimationLibrary fixes above.
  • build_scene grid auto-spacing is never silent: every grid response without explicit spacing carries an auto_spacing key reporting whether it applied, with value and source — or the specific reason it didn’t.
  • spatial_audit detects real geometric interpenetration (approximate world AABBs where the data exists) and declares its own coverage: a new coverage block says what each geometric check evaluated vs skipped, so “0 issues” with low coverage reads as “not verified” rather than “verified clean”. New optional floating_threshold parameter for ground-level scenes (Pro).

A mutation tool may never claim a change the editor doesn’t show

Section titled “A mutation tool may never claim a change the editor doesn’t show”

Hotfix for the externally reported node_ops false-success family, reproduced live on Godot 4.6.

  • node_ops can no longer be poisoned into permanent silent no-ops: one all-failed (or read-only) batch used to leave an orphaned UndoRedo action that swallowed every later batch — answering ok + scene_modified: true while changing nothing — until the editor restarted. The action is now created lazily and always committed.
  • Every mutating operation is read back against the live editor tree after commit — rename, delete, add_child, duplicate, reparent and set_anchors included. A failed read-back downgrades the op to the new "unverified" status, and the response carries a top-level all_verified.
  • Mutations on nodes inside instanced child scenes are refused with INSTANCE_INTERNAL_NODE — such edits used to apply live, report success, and silently revert on reload because the .tscn never serializes them. With Editable Children enabled, property ops and add_child/duplicate pass (those serialize as overrides); delete/rename/reparent stay blocked.
  • save_scene tells the truth: the editor’s return code is captured and the file is confirmed on disk, so silent write failures answer saved: false + error_code instead of saved: true. A new optional expected_scene parameter refuses with SCENE_MISMATCH when a different tab is active.
  • The Python wrapper now actually forwards scene to the editor (the preflight guard was vacuous before) and surfaces unverified results with a top-level warning; output truncation can never drop error or unverified entries from large batches.
  • New editor-headless contract test suite: a real --headless --editor Godot driven over the websocket bridge, no mocks — GDScript contracts are now exercised in CI on every push.

Project-wide analysis covers the whole project — and says what it saw

Section titled “Project-wide analysis covers the whole project — and says what it saw”

Driven by the verified Phase-5 dogfooding findings.

  • Project/graph-scoped tools (validate, signal_map, dependency_graph, impact_check, trace_flow) now see externally added files: project scope is reconciled before every dispatch, and every payload reports its own coverage (files_checked, project_files_discovered, files_skipped with reasons) — a partial scan can never read as full coverage again.
  • The .tscn parser reads Godot 4.6’s native unique_id node attribute; the field was silently always None on 4.6 files.
  • check_errors no longer crashes on — or blames the addon for — project scripts that declare their own reload(): shadowing scripts are genuinely compile-checked instead of breaking the checker. The same hardening covers reload_script and run’s pre-flight validation.
  • install-addon now injects a compact CORE rules block (~4.8k chars) into client convention files (CLAUDE.md, AGENTS.md, .cursorrules, .windsurfrules, copilot instructions) instead of the full 43k document, which overflowed client context budgets. The full text still ships as GODOTIQ_RULES.md, read on demand; re-running install-addon upgrades old blocks in place, and marker-less files get the block prepended so it can never land beyond a truncation point.

Reliability: tools tell you what they can’t see

Section titled “Reliability: tools tell you what they can’t see”

A hardening release driven by bugs found and verified while dogfooding the tools: they no longer silently misreport runtime or resource state. When the game runtime is not attached, an error line is unknown, or a UID answer comes from disk rather than the editor, the tools now say so explicitly instead of guessing.

  • run now reports runtime_attached and never claims bare success for a game the runtime tools can’t reach; game-side tools return RUNTIME_NOT_ATTACHED immediately instead of hanging until the timeout (measured ~10ms vs the old 5s wait on a real editor).
  • verify_project_runs is fixed (it previously errored on every call) and reports INCONCLUSIVE rather than a false PASS when the runtime never attached.
  • Signal analysis now sees emit_signal("name") emissions in every call form, ignores emissions quoted inside strings, records multiple emissions per line, and handles multiline calls.
  • New editor-open guard: direct-disk writes to .tscn/.scn while the editor is open are refused with BLOCKED_EDITOR_OPEN, with safe alternatives suggested. Bridge operations stay allowed; opt out via .godotiq.json.
  • UID diagnostics carry a resolution_source (editor vs disk), plus an opt-in divergence check (UID_CACHE_DIVERGENCE) that recommends an editor restart when the two disagree.
  • input now exercises the real input pipeline — parse_input_event with real InputEventActions, frame stepping, and delivery reporting — instead of state-only flags that _input handlers never saw. The previous state-only mode remains available by passing via: "state".
  • check_errors reports line: null with line_unavailable: true instead of a fabricated line 0 when the error line is unknown.
  • Project-wide analysis refreshes stale files before reading, so external edits are picked up without restarting the session.
  • Opt-in wait_for_import parameter on editor_context waits until the editor’s scan/import queue is idle.
  • Tool count unchanged: 38 total (24 Community + 14 Pro).

  • Fixed a Windows-only crash in godotiq install-addon (UnicodeDecodeError): the CLI now reads and writes every bundled text file as UTF-8 instead of the platform default code page, so installing the addon no longer aborts on Windows. The same UTF-8 hardening was applied to the .godotiq.json loader and the release-artifact writer.
  • Setup is now Windows-safe by default: every client snippet is the cross-platform config form (.mcp.json / config.toml with command: "uvx" and the variables in the env block), dropping the Unix-only env VAR=… uvx … shell shim that has no cmd/PowerShell equivalent.

  • godotiq_placement no longer crashes with 'WorldNode' object has no attribute 'name'; it now reads the real node contract, so placement works again on every resolved scene.
  • godotiq_placement no longer reports occupied Marker3D slots as empty — designer slots that already hold an object are correctly excluded.
  • godotiq_suggest_scale no longer fails with an import error; two related latent imports in the Pro explore/placement paths were hardened against the same failure mode.

  • godotiq auth reset --yes now preserves the local install_id by default, so support retries reuse the same activation seat (use --new-install-id only to intentionally rotate device identity).
  • Activation failures now distinguish an unknown signing key from a true signature mismatch, and deterministic failures are cached for the process so auth status can’t create duplicate activation seats.
  • auth status --json now includes a redacted license_key_fingerprint, helping support spot a stale or wrong GODOTIQ_LICENSE_KEY without exposing the key.

Lower token burn and a real Godot Debugger feedback loop

Section titled “Lower token burn and a real Godot Debugger feedback loop”
  • New godotiq_read_debug_console: text-only access to Godot Debugger and console errors, so agents can inspect runtime errors directly instead of asking you to paste them from the Debug window.
  • New godotiq_verify_project_runs: conservative PASS / FAIL / INCONCLUSIVE verification that checks scripts, starts Play, waits briefly, reads debug errors, and optionally stops the game. Verifies startup and captured errors, not full gameplay correctness.
  • Screenshot guidance tightened: screenshots are now positioned as visual-only fallbacks. Agents are steered to state_inspect, read_debug_console, check_errors, verify_motion, and verify_project_runs first.
  • Tool count: 38 total (24 Community + 14 Pro).

  • New /pro/, /manage/, /troubleshooting/, /how-licensing-works/, /support/ pages
  • Single metadata source (src/data/site.ts) replaces scattered hardcoded values
  • Shared ConfigSnippetTabs component unifies install snippets across homepage, install docs, and all client guides
  • /thank-you/ post-purchase page wired to Polar success_url
  • Legal pages (MVP): /privacy/, /terms/, /refund-policy/
  • Cookie consent banner for GA4 (EU GDPR/ePrivacy)
  • CI guards: route smoke, link crawl, placeholder lint, GitHub Actions
  • Product-side changes (package version bump, error-code fix) tracked separately at github.com/salvo10f/godotiq releases

  • Pro bundle distribution: public package now ships Community tools + Pro stubs, not full Pro implementation code
  • Pro activation via GODOTIQ_LICENSE_KEY: automatic Pro bundle download and local cache on first valid Pro run
  • Worker + R2 delivery path for Pro bundle distribution
  • platformdirs added as 4th runtime dependency for cross-platform license state and bundle cache paths
  • Offline support: after initial bundle download, Pro works from local cache without network access
  • Community/Pro messaging refresh across docs and site

Hotfix: click_at and click_at_world used device=-2 (DEVICE_ID_INTERNAL, reserved by Godot), so synthetic clicks never reached game nodes. Changed to device=0 (default device).


  • node_ops value parameter aliasing: accepts value as generic key alongside specific names (position, rotation, etc.)
  • Type coercion helpers: auto-converts dictionaries {"x": 1, "y": 2} to native Vector2/Vector3/Color
  • click_at and click_at_world input commands: simulate clicks at viewport or world coordinates
  • MCP prompt v0.4.0: selective rewrite with updated rules

  • In-editor update popup: new version triggers a dialog with update instructions (not just the dock label)
  • UndoRedo compatibility fix: MERGE_DISABLE replaced with numeric value 0 for cross-version Godot compatibility

  • GLB bounding box parser: reads real model dimensions from .glb files without opening Godot
  • node_ops persistence fix: modifications now persist correctly after save
  • Grid key normalization + bounds checking to prevent placement errors
  • Explore tour smart grouping
  • suggest_scale with GLB bounds: suggestions based on actual model dimensions
  • build_scene auto-spacing: automatic object spacing using GLB bounding boxes
  • exec_editor timeout increased and clamped
  • MCP prompt improvements

Same content as v0.3.4 with clean PyPI tag (re-tag).


5 critical bugs found and fixed from the “Crystal Keep” stress test:

  • Exec security hardening: tighter sandboxing for exec_editor
  • run no longer writes main_scene: eliminated side effect that modified project.godot
  • Session cache freshness: stale data was served after file changes
  • suggest_scale fallback: no longer crashes when reference model is missing
  • Z-fighting noise fix: spatial_audit no longer reports false positives on overlapping sibling nodes

First stable release. Includes all work from the initial sprints:

  • Complete TSCN/TRES/GD parser with state machine
  • Scene resolver + project index with cross-reference maps
  • World transforms and spatial queries
  • Session layer: unified project state for all tools
  • 9 MCP tools: project_summary, file_context, dependency_graph, scene_map, animation_info, animation_audit, signal_map, suggest_scale, explore
  • WebSocket bridge with Godot addon: bidirectional editor-Python protocol
  • Runtime tools: node_ops, scene_tree, script_ops, file_ops, build_scene, check_errors, run, exec_editor, screenshot, input
  • Placement tool with constraint solving
  • UI map for runtime UI elements
  • Trace flow: recursive signal tracing across the project
  • Spatial validation on node_ops with batch blocking
  • MCP prompt for AI agent guidance
  • CLI: install-addon, --version, PyPI packaging
  • Dev key hashing SHA-256, security audit
  • 1,000+ tests

  • godotiq install-addon now auto-injects development rules for all major AI clients
  • Supported: Claude Code (CLAUDE.md), OpenAI Codex (AGENTS.md), Cursor (.cursorrules), Windsurf (.windsurfrules), GitHub Copilot (.github/copilot-instructions.md)
  • Uses marker-based injection: safe to re-run, updates without duplicating
  • 1,311 tests passing

  • godotiq_explore tool for autonomous visual inspection via drone camera (tour + inspect modes)
  • Agent prompt improvements and workflow refinements
  • Tool count: 36 total (22 free, 14 PRO)

  • CLI --version warning suppression
  • Version sync script across pyproject.toml, plugin.cfg, godotiq_server.gd
  • node_ops rename and get_property operations
  • input mouse motion command
  • screenshot crop region support
  • save_scene feedback fields
  • scene_map disk warning note
  • asset_registry fuzzy match suggestions
  • exec await/timeout warning and error detail extraction
  • check_errors confidence annotation
  • build_scene parent path stripping, scene-derived node names, offset parameter

  • README with PyPI installation instructions
  • Build verification tests and wheel validation
  • install-addon subcommand with file copying
  • CLI module with argparse and lazy imports
  • Dynamic __version__ from package metadata
  • Packaging configuration for PyPI distribution (Hatchling)

  • Fresh MCP development prompt
  • verify_motion tool for proving movement/animation
  • Adaptive timeout based on GLB asset count
  • node_names field added to build_scene response
  • Script reload handler + script_ops integration
  • Reliable scene launch rewrite (_handle_run)
  • set_main_scene GDScript handler

  • Edge case tests for check_errors
  • Prompt updates for error checking and gameplay testing
  • Python check_errors bridge tool and MCP registration
  • Pre-run script check gate in _handle_run
  • check_errors GDScript handler with script validation
  • Logger + error buffer for script error capture
  • QA checklist and efficiency rules added to MCP prompt
  • Grid connectivity validation for build_scene
  • Pre-flight scene checks for node_ops and build_scene
  • _editor_state added to every bridge response for ambient context

  • build_scene creation workflow prompt
  • GDScript build_scene handler
  • Python-side build_scene tool with registration and timeout tests

  • Token budget integration tests
  • detail parameter added to all tools (brief/normal/full)
  • detail added to placement, suggest_scale, bridge tools
  • impact_check detail renamed to change_description
  • Enhanced output_limit.py

  • Directive agent guidance rewrite for all 35 tool docstrings
  • detail parameter system + config system enhancement

  • UID conversion, anchor presets, script rename with reference updates
  • placement tool: smart object placement with constraint solving
  • ui_map: runtime UI element mapping

  • Spatial validator module for node_ops validation
  • Editor screenshot with synchronous handler + WS buffer auto-downscale
  • Editor screenshot and camera control
  • Editor exec + save scene
  • MCP prompt overhaul

  • file_ops filesystem tool
  • script_ops filesystem tool
  • node_ops Python bridge tool + GDScript handler
  • scene_tree Python bridge tool + GDScript handler
  • Protocol and plugin wiring
  • WebSocket server with request dispatch
  • Godot addon plugin configuration and lifecycle
  • Bridge tool test suite + session manager + tool registration

  • trace_flow tool: recursive tracing, failure detection, trigger finding, signal listener map
  • Spatial audit severity filtering + sibling z-fighting downgrade
  • suggest_scale reference mode without model
  • scene_map detail-dependent caps and compact output
  • project_summary architectural enrichment
  • signal_map false positive fixes from event bus pattern
  • animation_audit tool + animation_info tool with test suites
  • Animation extraction helpers and test fixtures
  • scene_map tool with spatial intelligence
  • dependency_graph tool with signal cross-referencing
  • file_context tool for deep file analysis
  • project_summary tool with 3 detail levels
  • Server integration with FastMCP lifespan
  • Session layer for unified project state
  • GDScript parser: body patterns, state machine core, dataclasses

  • Project index with cross-reference maps
  • World transforms and spatial queries
  • Scene resolver core
  • Value parser raw key addition

  • Sprint 0 + Sprint 1A: initial project structure, parsers, test fixtures

  • Website: fixed all placeholder links, added real GitHub/PyPI/checkout URLs
  • Website: removed Discord references
  • Website: corrected license activation limit (3 machines)
  • Website: added “Activate Pro” section to installation docs
  • Website: added free tool examples to quickstart
  • Website: fixed mobile overflow issues

  • 36 tools across 11 categories
  • 1,245 automated tests
  • 22 free tools: raw operations (read, write, execute, query), scene editing, visual debugging, runtime monitoring, editor integration, I/O, animation data, health check
  • 13 PRO tools: intelligence layer (analyze, reason, predict, suggest), spatial analysis, code understanding, flow tracing, project memory, asset management, animation auditing
  • .godotiq.json configuration system
  • Token optimization with brief/normal/full detail levels
  • Pure GDScript addon (~500 lines, no compilation needed)
  • Local-first Community package (MIT-licensed, no analytics in the library itself; website analytics wiring lands in a later website release: see /privacy/)
  • MIT license