Skip to content

Launch parse errors that break into the debugger are invisible to every MCP surface #645

Description

@dsarno

Symptom

Follow-up to #641 / #642, found during the live smoke of #642 (Godot 4.6.3-stable, macOS).

When an editor-launched game hits a GDScript parse error during boot — a broken script attached to a scene node, a broken autoload, root or non-root — the game process calls GDScriptLanguage::debug_break_parse and freezes in a remote-debugger break before the game helper goes live (confirmed by sampling the hung process: parked in RemoteDebugger::debug under GDScript::reload).

In that state there is no record anywhere for the #642 machinery to surface:

  • no Debugger Errors-tab row (the break happens before the error message is flushed to the editor),
  • no editor Logger entry,
  • no game-log line (helper logger never attached),
  • project_run resolves not_live with the generic "may still be booting or may have failed silently" message (it names a parse error only if retained pre-run errors happen to correlate, labeled may_predate_run).

The error is visible only in the Debugger's Stack Trace panel — which matches the original #641 report wording ("parse errors appear in the stack trace") and is scraped by nothing. The #642 mechanisms (live-message errors, game-log hint, timer-driven watermark) all work, but only when an error record exists; this path produces none.

Repro

  1. Attach a script containing func f(: to any node in the main scene (or register it as an autoload).
  2. project_run via MCP.
  3. Game hangs pre-live in the debugger break; every MCP surface reads clean. sample <game-pid> shows the debug_break_parse stack.

Proposed direction

Capture the break editor-side in McpDebuggerPlugin: a debug_enter/breaked notification arriving while the run is not yet live is almost certainly a boot-time script failure — record it (message + stack when available) into the surfaced-error tracker so project_run's liveness decision can report a run-scoped parse failure instead of the generic not-responding message, and consider auto-continuing or flagging the frozen-at-break state explicitly in game_status (e.g. status: "break"), since agents currently can't distinguish it from a slow boot.

Full smoke evidence: PR #642 discussion / smoke report (2026-07-05).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions