Skip to content

v2.35.5 — Unity error messages restored + fail-closed routing

Choose a tag to compare

@francoios francoios released this 24 Jul 23:07
· 100 commits to main since this release
cdbf899

Patch release from a 43-run audit of both repos (33 dimensions + 10 blind-spot dimensions, 168 agents, every CRITICAL/HIGH finding adversarially verified before it was acted on). Companion plugin: v2.39.4.

Recommended for all users.

🔍 Every Unity error message was being thrown away

The queue ticket carries the Unity-side exception in errorMessage, but the poller read statusData.error — a field that never exists on that shape. So every failure across all 337 routes collapsed to a generic "Queue processing failed". Agents got no diagnostic and typically retried the identical failing call — which, for a non-idempotent write, means doing it twice.

It was worse than it looked. Two other features detect older plugins by reading "Unknown API endpoint" out of that same error text:

  • advanced-tool did-you-mean suggestions
  • component_batch_wire graceful degrade

Both had been silently broken in production. All three are repaired by reading the right field.

Why the test suite never caught it: the mock bridge emitted the wrong field name too, so 59 passing tests were validating a fiction. The mock now mirrors the plugin's real wire shape exactly, and the assertion that accepted success:false as an acceptable substitute (letting the real message vanish unnoticed) now demands the verbatim text — and is proven to fail without the fix.

⚙️ Also fixed

  • A vanished project no longer redirects your writes to a different one. When an agent's selected Unity instance disappeared, the code cleared the selection and switched off the "you must select an instance" gate — so the same call fell through to the default port, which in any multi-project session is a different live Unity, reporting success the whole way. It now fails closed and asks you to re-select.
  • A transient hiccup no longer downgrades the whole session. Any lingering submit error (Unity not up yet, a domain reload longer than the retry window) permanently latched the connection into legacy mode — losing agent attribution, per-action undo grouping and read batching, with nothing to ever reset it. Only a definitive HTTP 404 now proves a plugin lacks queue mode.

➕ Added

Schema opt-ins for the plugin's new data-loss guards: unity_asset_delete → recursive / permanent; unity_scene_open and unity_scene_new → saveFirst / discardUnsavedChanges; unity_scene_save → path (required for a never-saved scene, and doubles as Save-As). Several of these previously dropped every parameter but path.

🧹 Changed

  • License declared correctly — package.json declared none and manifest.json said MIT, while the shipped LICENSE is the AnkleBreaker Open License v1.0.
  • manifest.json version was stale at 2.35.2 and is now synced.
  • A test that compared network arrival order for calls the code fires concurrently was replaced with one that checks the guarantee actually made (results[i] aligns with references[i]) — strictly stronger than what it replaced.

📦 Install

npx anklebreaker-unity-mcp@latest

Verification

60/60 tests, all four CI matrix jobs (ubuntu + windows × node 20 + 22) green, route registry 337 in sync, companion plugin compiles clean against a live Unity 6000.3.9f1 editor.

Full changelog: CHANGELOG.md