# Reported issues for gdharness

Pod holds 22 of 66 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [gdharness](/mcp/gdharness).

## Most discussed

### script_diagnostics reports a method as missing after it is added to an existing class_name, until the editor restarts

## What was asked

A method was added to an existing `class_name` script (`scripts/game.gd`, `class_name Game`), and `script_diagnostics` was run over the files that call it.

## What came back

Every caller reported the same thing, as an error, because this project treats every GDScript warning as one:

```
The method "is_finished()" is not present on the inferred type "Game" (but may be present on a subtype). (Warning treated as error.)
```

Three files, three identical reports, against a…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/387) · 2026-09-19 · closed · 14 comments

### editor_output describes a different run after a reconnect, and carries no output from an editor-played one

**Version:** gdharness server 0.12.18, addon 0.12.4, Godot 4.7.2.stable, Windows 11.

## What happens

With an editor connected, `editor_run start` plays the scene **through the editor**: the answer
carries `"through": "editor"`, `pid: null`, and no `transcript`. That mode is fine in itself. Two
things go wrong around it.

### 1. After a server reconnect, `editor_output` describes a different run and does not say so

The editor-played run is held by the editor, so it survives a reconnect of the…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/358) · 2026-09-19 · closed · 7 comments

### The installed skill still says to change the declaring script, in the paragraph #415 did not reach

## What happened

The skill 0.13.36 installs still sends a caller to edit source that is already correct. In
`SKILL.md`, under *Editing*, the paragraph about `Could not find type` ends:

> `editor_rescan` asks it to scan and names any class it still cannot resolve under
> `unseenByEditor`: its walk skips a file a headless engine has already imported, so the
> declaration and the cache can both be right while the editor stays blind to it. **Change the
> declaring script, or restart the editor.**…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/483) · 2026-09-20 · closed · 4 comments

### playingInEditor answers null under a version gap, for a run the same server started and still reports as running

`#447` was left open for the mechanism behind `playingInEditor: null`, and closed before it was
established. This is a reading that separates the two candidates that comment says could not be
told apart from the reporting end.

**The reading**, 2026-09-20, Godot 4.7.2, Ostinato:

- Server **0.13.33**, editor addon **0.13.31**, so `addonIsStale: true` with the restart note.
- `ui/duel.tscn` played at 15:52:22Z. **This server started it**: `listeningSince` is 15:12:21Z,
  so the run began inside…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/462) · 2026-09-20 · closed · 4 comments

### An editor-played run advertises a transcript it never writes to

**Version:** gdharness server 0.13.10, addon 0.13.10, Godot 4.7.2.stable, Windows 11, in `ostinato`.

Follow-up to the second half of #358, which is closed. That half was *an editor-played run carries
no output*. It now carries a `transcript` path as well, and never writes to it, which is a worse
failure than the one it replaced.

## What happens

With an editor connected, `editor_run start` still plays the scene through the editor:

```
"through": "editor", "pid": null,
"transcript":…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/376) · 2026-09-19 · closed · 4 comments

### project_dependencies reverse counts a doc-comment link as a use, so a dead class reads as a live one

## What was asked

Whether `SweepTally` is still used by anything, which is what `CLAUDE.md` in the project using this sends a reverse walk to answer.

```
project_dependencies projectPath=C:\Users\Aurelio\fantasy-guild-manager
                     resourcePath=res://scripts/sim/sweep_tally.gd
                     direction=reverse
```

## What came back (gdharness 0.13.31, server and addon both)

```json
"summary": { "by_kind": { "class_name": 4 }, "files_with_usages": 2, "total": 4 }
```

Two…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/446) · 2026-09-20 · closed · 3 comments

### editor_rescan starts a second reimport over one the editor is already running

**What was asked.** `editor_rescan` on fantasy-guild-manager right after `setup.py assets` wrote 194 new files (36 PNGs) under `addons/`, with the editor open and focused elsewhere.

**What came back.** The call answered `{ok: true, stillWorking: false, waitedMs: 1283}`, and the editor's console (`editor_output op: editor`) then held three errors:

```
Task 'reimport' already exists.            at: add_task (editor/gui/progress_dialog.cpp:200)
Condition "!tasks.has(p_task)" is true. Returning:…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/689) · 2026-09-25 · closed · 2 comments

### editor_run stop cannot end a run the previous server started, after a reconnect

**Asked:** `editor_run stop` (no arguments) after an MCP reconnect from 1.0.29 to 1.0.30, to end a game the 1.0.29 server had started with `editor_run start` and `savesIn` (pid 22520; its runtime announced on port 55611).

**Answer:**

> A game is running for C:/Users/Aurelio/fantasy-guild-manager and has announced its runtime on port 55611, pid 22520, but this server did not start it and cannot reach it through the editor, so editor_run and editor_output have nothing to answer about.…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/677) · 2026-09-24 · closed · 2 comments

## Most recent

### click on an OptionButton picks the item its popup opens under the pointer

## What was asked

`runtime_input click` on an OptionButton near the bottom of the window (fantasy-guild-manager, 1.1.11, window 1920x1080, canvas 1280x800). The button's canvas rect is y 744 to 778; its two-item popup (50 tall) cannot open below it inside 800, so the engine opens it at y 750, over the button.

## What came back

The click chose the popup's first item: the answer said `control_afterwards: "freed"`, because the game rebuilt the screen for the setting the item changed. Nothing…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/749) · 2026-09-27 · closed · 1 comment

### choose answers {} and errors when the pick frees the menu

## What was asked

`runtime_input choose` on a settings OptionButton (fantasy-guild-manager, 1.1.11), `index: 1`. The game answers `item_selected` by changing a setting, and the game redraws the whole screen for that setting, so the OptionButton and its PopupMenu are freed during the pick.

## What came back

```json
{}
```

and the run's output carried, once per pick:

```
Invalid type in function 'item_says' in base 'GDScript'. The Object-derived class of argument 1 (previously freed) is not…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/748) · 2026-09-27 · closed · 0 comments

### runtime_wait until reads a says glob as literal words and waits out the whole timeout, where find and click read it as a glob

**What happened.** On gdharness 1.1.11, driving a game whose cast line reads `you cast Parry, Parry, Twin, Goadlance, Parry  ·  hurts 10, wards 0, mends 0`:

- `runtime_wait op:until says:"you cast Parry*" timeoutMs:15000` answered `met: false` after 15000 ms and 2150 looks, with the label on screen the whole time.
- Again with the line certainly present: `met: false`, 3002 ms, 435 looks.
- `runtime_inspect op:find says:"you cast Parry*"` in the same minute found…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/744) · 2026-09-27 · closed · 0 comments

### runtime_input click says: a plain word matches every label containing it, pressable or not

**Asked:** on a game showing its Log page over the hall, press the page's Back button: `runtime_input click` with `says: "Back"` and no `nodePath`.

**Answer:** refused, 11 matches:

```
11 controls on screen say "Back", so which to click is not clear; pass index, counting from 0:
0 .../Tray/.../Reading/Line0 ("Calls it B+ work. “I need a quarter's rent in coin taken ...")
...
4 /root/Main/@Control@19/Log/.../Head/Back ("Back")
5 /root/Main/@Control@19/Log/.../Head/@Label@1432 ("Word back")
6…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/740) · 2026-09-27 · closed · 0 comments

### runtime_inspect find with a says glob that matches nothing gives no hint, where namePattern does

**Asked.** `runtime_inspect find` with `says: "Taken together*"` and `property: text`, to read a label whose text contains that sentence (fantasy-guild-manager, 2026-09-25).

**Answer.** `{"count": 0, "nodes": []}` and nothing else. The label existed: its text begins "Calls themselves E+. ..." and the words are in the middle, so the glob (anchored to the whole text) could not match. A bare `says: "travelled a good distance"` found it at once.

**Expected.** What `namePattern` already does on a…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/686) · 2026-09-25 · closed · 1 comment

### runtime_invoke: say how long the call took inside the engine

**Asked.** How long opening a drawer on a year-ten guild costs in the running game: one frame's work behind a click (fantasy-guild-manager, 2026-09-25, `Drawer.open("roster")`).

**Answer.** Nothing gdharness has can say. `runtime_invoke call` returns the result only, and the bridge round trip is 1 to 3.5 s, so timing the call from outside measures the bridge, not the call. `runtime_inspect metrics` reads the last frame's process time, which is whichever frame happens to be last when it is…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/685) · 2026-09-25 · closed · 0 comments

### runtime_inspect text leaves a titled separator out of an open menu

**Asked:** `runtime_inspect text` on an `OptionButton` whose popup is open, in Fantasy Guild Manager's log filter. The button holds 42 items: "Everything", then five titled separators (`add_separator("The work")` and so on) each over a run of items.

**Answer:** 38 lines: the button's own "Everything", then the 37 selectable items. None of the five separator titles appear, though the popup draws each one as a line of text.

**Expected:** the separators' titles in their places, since the tool…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/682) · 2026-09-25 · closed · 0 comments

### editor_run stop reports a run ended when another project's server overwrote the shared run.json, and signals nothing

**Asked:** `editor_run stop` on 1.0.30, for a kept headless run this same server had started 52 seconds earlier (`editor_run start`, `headless: true`, `savesIn`, project `C:\Users\Aurelio\ostinato`, pid 25264, started 2026-09-24T19:05:22Z). The server had been listening since 18:59:39Z, so no reconnect happened between the start and the stop; this is not #677's state.

**Answer:** `stopped: true`, `endedPid: 25264`, and the note *"The process named under endedPid was ended."* Beside it, the…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/678) · 2026-09-24 · closed · 1 comment

### An editor or run the server started dies when the harness ends the server

**What happens.** An editor opened with `editor_launch` and a run started with `editor_run start` (spawned, not editor-played) both die when the harness ends the server that started them. Claude Code ends a gdharness server by killing its process tree: its log says "Terminating MCP server process tree", dozens of times in fantasy-guild-manager's logs, once per reconnect, and at every session end. Both processes are spawned `detached`, which on Windows keeps them out of the server's own job…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/674) · 2026-09-24 · closed · 0 comments

### editor_run start can boot a game while the editor is rewriting the class cache

**What was asked.** `editor_run start` with `savesIn` on fantasy-guild-manager (server 1.0.26, addon 1.0.27), a few seconds after `gdformat` had rewritten a handful of `.gd` files on disk and the editor (with `auto_reload`) was scanning them.

**What came back.** `started: true`, runtime listening, and a game that could resolve no global class at all: 95 errors, beginning

```
SCRIPT ERROR: Parse Error: Could not find type "ModHost" in the current scope.
   at: GDScript::reload…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/669) · 2026-09-24 · closed · 0 comments

### runtime_inspect text reads a RichTextLabel's markup rather than its words

**What was asked.** `runtime_inspect` op `text` on a page holding a `RichTextLabel` with `bbcode_enabled`, to read what the page says (fantasy-guild-manager, the dossier page, gdharness 1.0.26 server).

**What came back.** The label's `text` property, markup and all:

```
"[b][color=#4fc2d4]Mollum Telken[/color], [/b][color=#c2ae92]a thief-taker[/color][b][/b]"
```

**What was expected.** What the player reads: `Mollum Telken, a thief-taker`, which is `RichTextLabel.get_parsed_text()`. The op's…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/667) · 2026-09-24 · closed · 0 comments

### runtime_inspect tree: depth 0 walks the whole subtree instead of answering the root alone

Seen from fantasy-guild-manager on server and runtime addon 1.0.26, 2026-09-24.

**Asked:** `runtime_inspect op tree nodePath /root/Main/@Control@16 depth 0`, meaning the router node alone, to read a few `properties` off it.

**Answered:** the entire subtree, 4,070,237 characters across 99,553 lines, which the harness could not take and wrote to a file. On `/root/Main/SoundBoard` with `depth 0` the answer lists its eight children. On `/root/Main` with `depth 0` and a `properties` list the day…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/661) · 2026-09-24 · closed · 0 comments

### runtime_invoke: advertised schema has no op result, requestId or timeoutMs, and requires nodePath

Seen from fantasy-guild-manager on server 1.0.26 (editor addon 1.0.26), 2026-09-24.

**Asked:** `runtime_invoke op call` on `_game:skip` with `[1400]`, a call that runs about 17.7 s.

**Answered (correctly):** `pending: true, requestId: 19, waitedMs: 10000`, with a note saying "runtime_invoke op result with requestId 19 answers with its reply once it comes, and timeoutMs waits longer next time". `runtime_invoke op result requestId 19` then answered `method_result`, `answeredAfterMs: 17728`. So…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/660) · 2026-09-24 · closed · 0 comments

### runtime_wait until with says slows the game it is watching: 11 fps against 60, and the game's clock loses three quarters of its time

**Asked.** `runtime_wait until` with `says` (no `nodePath`, so `/root`) on a running game, fantasy-guild-manager's hall: about 3,500 nodes (`object_node_count` 3510), 60 fps otherwise. The words were ones that never appear, so the wait ran its whole `timeoutMs` of 10000.

**Measured.**

| | frames (`get_tree():get_frame()` before and after) | game days elapsed (clock at 3x: 90 s a day at 1x) |
|---|---|---|
| `runtime_wait frames` 600 | 600 in 10.0 s (60 fps) | 0.337, as 3x should give over ~12…

[Read the thread](https://github.com/Aureliolo/gdharness/issues/655) · 2026-09-23 · closed · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/Aureliolo/gdharness/issues).
