Release tag: v0.3.53
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.53
- Released
v0.3.53package metadata, server metadata, package manifests, and Git UPM examples.
- Added a capability-gated uGUI PlayMode test assembly that exercises the real
guarded-click scenario-step path. The tests prove exactly-once delivery, a
decision-bearing
ui.interaction.v1receipt, before/after semantic state change,playmode_state=playing, and refusal without a minted receipt. The package self-test runner now includes the assembly whencom.unity.uguiis available while retaining the dependency-free core PlayMode lane.
- Fixed the clean-project EditMode gate by removing an accidental uGUI
dependency from the core prefab-mutation test. The allowlisted component test
now uses Unity's built-in
MeshFilterand proves both the add and remove transactions. Clean Unity2022.3.62f3and6000.0.58f2projects each pass EditMode62/62and the dependency-free PlayMode lane5/5.
Release tag: v0.3.51
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.51
Two things land together: the residuals from the first consumer run of the
reference-driven UI acceptance surface, and the repair of v0.3.50, whose TMP
test assembly did not compile. That defect is the reason the editor package is
now built and tested by a real editor before a tag is cut rather than after — the
first blocker in
XUUNITY_MCP_ENTERPRISE_READINESS_DESIGN_2026-07-31.md.
- The TMP EditMode test assembly introduced in
v0.3.50did not compile:XUUnityLightMcpUiTreePayloadis internal and the new assembly had noInternalsVisibleTogrant, and the tests usedIs.AnyOf, which the NUnit version Unity ships does not define.v0.3.50therefore shipped a package whose tests could not build for any consumer that lists it intestables. - The TMP and prefab-defect fixtures failed headless. Creating a TMP label logs
a graphics-device message on a 2021.3 runner, and the prefab-defect test
deliberately imports a broken prefab; the test framework fails a test on any
unhandled error log. Both now scope
LogAssert.ignoreFailingMessagesto the fixture that needs it and reset it in teardown. - A TMP reader test asserted that a label with no font assigned reports
unresolved. TMP substitutes its default font asset when one is available, so the assertion was wrong in a normal project and the corrected form was wrong in a bare one, where TMP Essential Resources are absent. It now asserts the invariant the explanation lane depends on — the status and the named font agree — which holds in both environments. - Validated by execution on both supported lines rather than asserted: Unity
2021.3.45f2and6000.0.58f2each report 99 EditMode tests, 98 passed, 0 failed, and the one graphics-device render test correctly self-skipping headless. The TMP reader tests and the prefab script-GUID defect test — retro section 9 case 4, previously uncovered — execute for the first time. The core assembly was checked for the constraint-gating claim directly against the built DLL:com.xuunity.light-mcp.Editor.dllcarries noUnityEngine.UIor TextMeshPro assembly reference while both satellites do.
Closes the four residuals from the first post-release consumer run of the
reference-driven UI acceptance surface, recorded in
docs/archive/retros/2026-07-31_shipped_ui_acceptance_toolchain_first_run_retro.md.
The protocol held end to end in that session; what it exposed was a mutation
receipt that could report success for a write that did nothing, a semantic
acceptance lane that could not be reached from the isolated-render lane, and two
surfaces whose default output was mostly noise.
unity_prefab_mutatereportsstatus: "no_op"for a value-setting operation whose serialized value did not change, and carriesno_op_counton the transaction. It previously reportedappliedwithbefore == after, no warning, and a passingpost_validation— a false-positive receipt on the one surface whereexpectedSha256, atomic rollback,post_validation, andreversible_patch_jsonall presume the change report is truthful. An operator who did not re-measure the render shipped the wrong value believing it.- Enum properties are refused rather than clamped when the supplied index is out
of range, as
prefab_mutation_enum_value_invalid, naming the validname=indexpairs.SerializedPropertyaddresses an enum by member index while a caller naturally supplies the enum's underlying value, so the natural call was silently discarded. unity_ui_reference_comparereturns a successful envelope whenever the comparison ran. A passing visual lane was previously delivered inside an<error>envelope whenever an optional interaction lane or a pending semantic lane left overallreference_acceptanceshort ofpassed, forcing the operator to re-read a large payload to confirm the tool had not malfunctioned. The error channel is now reserved for a comparison that could not compute a visual verdict at all.
unity_prefab_renderandunity_prefab_snapshotpersist theui.read.v1snapshot beside the capture and returnsnapshot_path. The comparison surface consumes a snapshot by path, so while the snapshot was returned inline only, a reference declaringacceptance.semantic: "required"was structurally unsatisfiable outside Play mode and reportednot_evaluated / no_ui_snapshot_suppliedpermanently.unity_prefab_renderacceptsoverrides, the same typed operation list asunity_prefab_mutate, applied to the preview-scene instance only and never written to the asset, reported back asapplied_overrides. Rendering a second runtime-driven UI state previously required mutate → render → inverse-mutate on a prefab shared by twelve projects; 54% of one session's mutation calls existed only to work around its absence. A failing override fails the render instead of capturing the un-overridden state.set_serialized_fieldwrites asset-typed object references —Sprite,Material,TMP_FontAsset, meshes, ScriptableObjects — addressed by project-relative path or 32-character GUID, withassetSubAssetName(or apath#SubAssetsuffix) for a sub-asset such as a sliced sprite, andvalueKind: "null"to clear. Component andGameObjectreferences stay refused, which is the guardrail that actually prevents swapping a component for another type. Refusing asset references was the only remaining reason to hand-edit prefab YAML.unity_prefab_validateacceptsunassignedReferenceScope(project_scripts|required|all), defaulting toproject_scripts, and always reportsunassigned_reference_suppressed_count. One call withreportUnassignedReferencespreviously returned ~57 findings that were all standard-empty uGUI/TMP optional fields, and the one genuinely interesting empty field in the prefab was indistinguishable from them.requiredreads the project's own convention — a field attribute whose type name starts withRequired— and is empty for a project that uses no such convention.unity_console_grepacceptsexcludePatternand suppresses build-pipeline progress lines (CopyFiles,[n/m ...]) by default on both the console-buffer and Editor.log lanes, reportingexcluded_countandbuild_pipeline_suppressed_count. A grep for a feature keyword returned 159 matches that were allCopyFileslines, because the compile job had been named after the feature.includeBuildPipelineNoise: truerestores them. A cross-language test pins the two lanes to the same pattern.unity_prefab_mutatereportsdrift_guard:precondition_matched,unguarded, ordrifted. An Editor-API write goes through the editor's in-memory copy, so a serialized asset edited on disk without an interveningunity_project_refreshwas silently overwritten, and nothing warned. Whether the editor's copy still matches the file is only decidable from the caller's ownexpectedSha256: from inside the editor, a file rewritten by an external tool and a file Unity itself reimported are indistinguishable, and an inferred check refuses legitimate writes. A transaction without a precondition therefore says so and carries the observed hash to pass next time, rather than implying the check ran.
- A stale
expectedSha256now fails asprefab_mutation_asset_driftedrather thanprefab_mutation_precondition_failed, and namesunity_project_refreshas the remedy for a stale editor import. Callers matching the old code must update. unity_prefab_render'sincludeSnapshotdefaults tofalse. The inline snapshot is large and the comparison tool cannot consume it;snapshot_pathis what closes the semantic lane. PassincludeSnapshot: trueto restore the previous response shape.- An enum's
before/afterin the mutation change table name the enum member instead of its index, so the emittedreversible_patch_jsoncarries arestoreValuethat can be replayed throughstringValue.
Release tag: v0.3.50
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.50
This release closes the findings of an independent external audit of the
reference-driven UI acceptance surface shipped in v0.3.49. Several of them were
false passes: evidence that had not been earned, a mask policy that measured a
different quantity than the comparison applied, and a similarity grid that failed
the identical design captured at another resolution. Each fix is re-checked by
scripts/testing/check_audit_regressions.py, which also asserts the opposite
direction — that captures which are legitimately the same screen still pass.
- A scenario result only counts as an editor receipt when it is read from the
editor's own results directory. A file the caller named anywhere else is
reported as
evidence_source=unverified_result_pathand cannot reachvisual_determinism=proven. Previously a hand-written JSON file passed asfixtureResultPathearnedreference_acceptance=passedanddecision_ready=trueacross every lane, because the only thing separating a receipt from a caller assertion was which argument the JSON arrived through. judges_requiredandallow_self_revieware covered bypacket_hash, so the independence half of the vision bar cannot be lowered after a judgement while stored reviews still read as valid.- PNG decompression is bounded by the size the declared image needs. A 782 KB
file declaring a 1x1 image drove peak RSS to 1.6 GB and decoded successfully;
it now costs 32 MB and a typed
ui_reference_image_too_large. - PNG chunk CRCs are verified. A tampered
IHDRsilently changed the decoded dimensions, and those dimensions are what the registry records as the reference viewport.
- Breaking. A reference that declares a single full-screen region is refused. One whole-screen average dilutes a missing element by the share of the screen it occupied, so a missing button or body paragraph scored above the floor and passed. Existing references with one full-screen region must be re-registered with a region per meaningful UI area.
- Breaking.
fixtureResultPathandinteractionResultPathoutside the editor's results directory no longer produce decision-ready evidence. - Comparison-grid cells are area weighted, so each source pixel contributes to the cells it overlaps in proportion. The identical design captured at 2x, 3x or 4x now scores as identical instead of failing on binning phase.
- Masks are charged the grid-cell footprint they actually suppress rather than their declared pixel area, and the per-region cap applies to every declared region rather than only required ones.
- The
blocked_lanesfilter matchesfailed_lanes: anoptionallane that ran and could not decide now gates the verdict instead of being dropped from it. deviceis a first-class acceptance lane with a pass/fail vocabulary and capture-resolution reconciliation. An acceptance key that a manifest does not declare takes its documented default, so references registered before a lane existed stay valid.serialized_reference_type_mismatchis severityerror. Onlyerrorincrements the failure count, so an unassignable serialized reference left prefab validation passing.
- Per-region content-coverage check, independent of region area, so a missing element inside a larger region fails even when cell similarity stays above the floor.
capture_below_comparison_gridrefusal for a capture smaller than the comparison grid, which previously raisedIndexErrormid-comparison.scripts/testing/check_audit_regressions.py: 25 executable checks that reproduce each audit finding and assert it stays closed, including a benign-variation sweep against false rejections.- Cross-language pins for
playmode_state,targetKind, clip/material/font states, bridge refusal codes and the file-IPC layout;bridgeOperationcoverage widened from the ui/prefab subset to every declared editor operation. - TMP EditMode test assembly and a prefab-defect test for an unresolvable script GUID, both previously uncovered.
- Added
unity_sdk_package_restoreandrequest-sdk-package-restore, a closed-project Unity batch lane that waits for Package Manager's registered graph to become idle-stable, then atomically records package ids/versions, direct dependencies, dependency-XML hashes, and manifest/lock hashes. The verdict is decision-ready only when Unity publishes a successful run-bound receipt and the same-project editor process is proven closed after exit.
- A rejected
overwrite=truere-registration restores the previousexpected.pnginstead of deleting it and leaving a manifest with no image, which permanently broke a working reference. - Nested scenario operations pass through the capability gate. A
constraint-gated operation threw out of the step handler and the scheduler
persisted
scenario_runner_failedwithout jumping to cleanup, stranding the editor in Play mode. unity_prefab_renderbuilds its snapshot before detaching the render target, so node screen rects are not scaled by the editor display size.- A vision review the normalizer rejects is refused rather than stored, a second submission by the same judge is refused rather than silently overwriting a previous verdict, and an unreadable review file blocks instead of being indistinguishable from no review.
- Duplicate or case-variant rubric criterion keys are an error instead of silently overwriting a low score; the vision score floor is 1, so a manifest cannot declare a bar no review can fail.
- A region that could not be compared reports
passed: falserather thannull, which read as a pass to any caller testingis not False. - The region background is the dominant colour that actually occurs in the region; an independent per-channel median invented a colour the image never contained.
- The
sdk_package_restoretests built a macOS-shaped Unity installation and failed on Windows and Linux, and an assembly-ownership assertion compared a native path separator against"Ugui/". Both predate this release.
Release tag: v0.3.49
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.49
This release adds reference-driven UI acceptance: a supplied design image becomes a hash-pinned contract, a Game View or prefab capture is compared against it on a resolution-independent similarity grid, and the verdict is decided across four lanes — visual, semantic, interaction, and AI vision. Pixel equality is never the bar.
- Released
v0.3.49package metadata, server metadata, package manifests, and Git UPM examples. - An acceptance lane marked
optionalthat was actually evaluated and failed now fails the comparison.optionalmeans the lane may be skipped, not that its failures do not count; onlynot_requiredopts a lane out of the verdict. This previously let a failing optional semantic lane pass silently.
- Added the reference-driven UI acceptance surface:
unity_ui_reference_register,unity_ui_reference_validate,unity_ui_reference_compare, and the matchingui-reference-register/ui-reference-validate/ui-reference-comparehost commands. A supplied design PNG becomes a hash-pinnedxuunity.ui-reference.v1contract with declared viewport, comparison regions, reviewable masks, tolerance profile, and per-lane acceptance requirements. - UI comparison is tolerance-based similarity on a resolution-independent cell grid
(exact box average, local contrast, and per-region layout bounding boxes) rather
than pixel equality, so a Game View capture whose resolution differs from the
reference is valid input.
strict,balanced, andlenientprofiles plus per-reference numeric overrides control how close counts as accepted. Orientation or aspect mismatch is refused ascomparison_not_comparablewith recommended same-aspect capture resolutions and no score. - Comparisons publish
actual.png,overlay.png,diff.png,metrics.json, andverdict.json, and returnreference_acceptanceofpassed,failed,blocked,pending_lanes, orpending_manual_stylewith a separatedecision_readyflag. A passing verdict requires proven capture stability, and required semantic or interaction lanes that no tool can yet evaluate keep the reference pending instead of reporting acceptance. - Added the read-only uGUI and prefab inspection surface (
xuunity.ui.read.v1):unity_prefab_snapshot,unity_prefab_validate,unity_ui_tree_snapshot,unity_ui_query,unity_ui_exists,unity_ui_get_text, andunity_ui_get_bounds. Nodes carry a stable-within-snapshot path, active state, components, effective CanvasGroup alpha, raycast blocking, canvas sort order, screen-space bounds, and — where a backend reader is present — text, resolved font/material, interactability, and clip state. Every response reportsproof_class, truncation, and ambiguity instead of hiding them, and no answer is ever derived from a screenshot or OCR. unity_prefab_validatereports typed pre-PlayMode defects:missing_script_guid,serialized_reference_missing_component,serialized_reference_type_mismatch,missing_prefab_instance, and opt-inserialized_reference_unassigned. Lanes that need an unavailable backend are listed inlanes_not_evaluatedrather than passing silently.- The uGUI and TextMeshPro readers ship as constraint-gated satellite assemblies
(
com.xuunity.light-mcp.Editor.Ugui/.Tmp), so the core editor assembly keeps zero package references and a project withoutcom.unity.uguistill compiles — it simply reports the UI surface assemantic_ui_partialwith the reason. unity_ui_reference_compareacceptsuiSnapshotPathand stitches every failed region to the UI nodes whose bounds cover it, converting Unity's bottom-left screen pixels to top-left reference pixels with the transform recorded in the payload. Each failed region gainsexplained_by(ranked candidate nodes, per-node suspicions, alikely_cause, and a plain-language summary), so "region body is 0.59 similar" becomes "'Canvas/Body' overlaps this region and its font asset did not resolve". A region no node covers is reported as its own finding.- The semantic acceptance lane is now real: when a snapshot is supplied, the
reference's declared
requiredUiselectors are checked against it and the lane reportspassed/failedwith typed failures (ui_node_not_found,selector_ambiguous,ui_text_mismatch,ui_node_not_interactable,ui_node_not_visible). A required-lane failure fails the reference even when the pixels match. - Added the
xuunity.ui-fixture.v1readiness contract plusunity_ui_fixture_validateand theui-fixture-validatehost command. A project hook reportsui_fixture(fixture and semantic state id, frozen clock, pinned locale, data source, resolved viewport/safe-area, and ready-predicate evidence) inside its payload; the host validates it, surfaces it in scenario hook summaries, and derivesvisual_determinism. Live or mixed data without a recorded immutable payload hash, an unfrozen clock, or an unpinned locale downgrade a comparison automatically instead of by convention. unity_ui_reference_compare/ui-reference-compareacceptfixtureResultPath, so fixture evidence is read from the scenario result the editor wrote, with a hashed receipt naming the run, step, and hook. Caller-suppliedfixtureEvidenceis still accepted but is never receipt-backed and can no longer make a comparisondecision_ready.project-hook-scaffold --ui-fixturegenerates a compliant hook that ships unsatisfied so it fails closed until the project fills it in.- Added
unity_prefab_render: renders a prefab in an isolated preview scene under a controlled Canvas at the declared viewport and safe area without booting the application, and returns both the PNG and theui.read.v1snapshot it rendered, in render-pixel space, ready to feed straight back intounity_ui_reference_compare. - Added
unity_prefab_mutate: a typed, atomic prefab transaction through the Editor API —set_serialized_field,set_rect_transform,set_canvas_group,set_active,delete_child,create_child_from_template,add_component,remove_component. It previews by default, requiresapprovepluspreviewOnly=falseto write, supports anexpectedSha256precondition, re-validates bindings after mutating and discards the batch if validation fails, emits a reversible inverse patch, refuses ambiguous selectors and non-allowlisted components, and excludes object-reference fields so a component can never be swapped for another type. - Added
unity_ui_click: one guarded semantic click delivered through the EventSystem to a unique selector, never a coordinate click. It requires explicitapprove=trueandaction="click", refuses ambiguous, hidden, non-interactable, raycast-transparent, and handler-less targets, and records the matched node, the delivery mechanism, and before/after snapshot signatures. - Added the device acceptance lane:
captureLane(game_view|device) plus adevicedescriptor recording model, OS, resolution, orientation, safe-area insets, and build revision. A Game View comparison reports the device lane asnot_evaluatedand is never presented as device parity; a device capture with an incomplete descriptor blocks that lane instead of passing it. - Added the AI-vision acceptance lane (
xuunity.ui-vision-review.v1):unity_ui_vision_packet/ui-vision-packetrenders one side-by-side review sheet (reference left, candidate right, scaled to a shared panel height, failed regions outlined on both panels) and ships the rubric with it;unity_ui_vision_submit/ui-vision-submitrecords a judgement and returns the lane. This answers what a cell-similarity score cannot: whether the candidate is recognisably the same screen in style, placement, and size. Every required criterion needs a score and a stated observation, the overall score is clamped to the worst required criterion plus one, the review is hash-bound to one exact image pair and expires asvision_packet_stalewhen either image changes, andjudge.rolerecords whether the judge was the agent that authored the UI. Numeric scores are withheld from the packet by default so the judgement is not anchored to the number the grid already produced. The bar moves with thestrict/balanced/lenientprofile and can be overridden or have criteria waived per reference throughvisionPolicy; no profile requires the top score. - A comparison now reports
lane_disagreement. Grid-passed with review-failed isvision_contradicts_similarityand fails the comparison, because cell similarity cannot see a wrong icon, a different type family at the same weight, or a mirrored arrangement. Grid-failed with review-passed issimilarity_may_be_over_strictand names the looser tolerance profile that matches the observed similarity, so an over-tight bar is a deliberate reference-level decision rather than a per-comparison override. - The interaction lane is real instead of a permanent
not_evaluated. A newui_clickscenario step delivers a guarded click inside a Play-mode scenario and emits axuunity.ui-interaction.v1receipt;required_interactionson the reference declares what must be proven, andunity_ui_reference_comparereads the receipt frominteractionResultPath, defaulting tofixtureResultPathso one Play-mode run can establish the fixture and prove the interactions. Delivery in Edit mode blocks the lane rather than passing it: it proves handler wiring, not a running user path. A refused, undelivered, or effect-free click fails the lane. Addedunity_ui_interaction_validate/ui-interaction-validatefor the evidence on its own. unity_ui_reference_register/ui-reference-registeracceptrequiredInteractionsandvisionPolicy, andacceptancegained avisionlane (defaultoptional).
Release tag: v0.3.48
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.48
- Released
v0.3.48package metadata, server metadata, package manifests, and Git UPM examples.
- Added capability-gated
unity.sdk.android_resolve,unity_sdk_android_resolve, andrequest-sdk-android-resolve. The typed lane uses EDM4U's completion callback, requires active Android plus Android Build Support, waits for declared generated outputs to be SHA-256 stable across consecutive idle ticks, and verifies explicit expected coordinates before returning a decision-grade rollout verdict. - Added a standardized
xuunity.mutation-delta.v1trust contract for mutating project actions. Hook summaries promote before/after/added/removed/changed counts, whileunity_project_action_invokedistinguishes successful Unity execution from decision readiness and warns on missing, invalid, or destructive-drop evidence. Mutating hook scaffolds now emit the contract. - Extended
unity_sdk_generated_diff_guard/sdk-generated-diff-guardto cover Git-untracked generated outputs with an explicit, fingerprint-boundLibrary/baseline. Capture refuses a dirty tree apart from the selected untracked outputs; comparison fails closed when the project path, Unity version, package-lock hash, configured SDK versions, or snapshot integrity no longer matches the captured provenance. - SDK generated-diff guard reports are now registered automatically as
sdk_generated_diff_reportartifacts after the JSON evidence is published. Passing and failed verdicts return the report hash plus the artifact-registry path, so rollout evidence stays durable and directly discoverable.
- Typed Android resolver callback failure/loss, missing or unstable generated output, missing expected coordinates, and inactive/unsupported Android target now produce explicit failed-closed classifications. Deferred completion state is atomically persisted, package-operation busy state is cleared after response handoff, and cached capability reports invalidate when EDM4U or Android support availability changes.
- Android
unity_edm4u_resolvenow fails closed withedm4u_android_target_not_activeunlessBuildTarget.Androidis active, and rejects a missing Android Build Support module. Successful requests report the confirmed target precondition while explicitly keeping resolver-output freshness unproven and the rollout verdict non-decision-ready. project_defined_hook_poll_untilnow treats a passive hook payload withstatus: not_startedas keep-waiting instead of an immediate unmatched-status failure. ExplicitpassWhenandfailWhenmatches retain precedence, all other unmatched statuses fail closed, and the existing timeout remains the terminal bound.
- Typed resolver coverage passes focused host protocol/parity/atomicity tests
77/77; current-source Unity2022.3package EditMode24/24and PlayMode5/5; real EDM4U callback failure and local-Maven success routes; a development-system consumer14/14+5/5; and a Unity6000.0consumer compile matrix6/6, acceptance10/10, contract/lifecycle, and project-action consistency route. The full host suite passes476/476with 13 expected platform skips. - Android-target precondition coverage passes focused host tests
61/61and the full host suite476/476with 13 expected platform skips. Current-source package self-tests pass on Unity2022.3: EditMode20/20and PlayMode5/5. A Unity6000.0consumer passes compile matrix6/6, acceptance scenario10/10, and the refresh/compile contract. Its PlayMode and focused EditMode test requests correctly fail closed on a pre-existing unsaved scene; that unrelated user state was preserved. Both consumer package manifests and locks were restored byte-identically. - SDK artifact-registration coverage passes focused guard/protocol/parity tests
80/80and the full host suite476/476with 13 expected platform skips. A live Unity6000.0consumer guard passes across five Git-tracked Android outputs with zero changes and returns a registered report hash/pointer. - Focused mutation-delta/protocol/parity tests pass, and the full host suite
passes all
475tests with13expected platform skips. - A Unity
2022.3development-system consumer passes package EditMode14/14and PlayMode5/5. A Unity6000.0consumer passes compile matrix6/6, acceptance scenario10/10, refresh/compile contract, PlayMode settled-state and lifecycle recovery, healthy final status, and project-action catalog consistency. Consumer package manifests and locks remain byte-identical. - Focused SDK guard, protocol/parity, launcher-flavor, and subprocess-contract tests pass for the Git-tracked and Git-untracked baseline lanes.
- Host regression passes all
471tests with13expected platform skips. - Current-source package self-tests pass on a Unity
2022.3consumer: EditMode18/18and PlayMode5/5, including passivenot_startedpolling and explicit-failure precedence. A Unity6000.0consumer passes its compile preflight6/6, acceptance scenario10/10, refresh/compile contract, PlayMode lifecycle recovery, final-health, and project-action consistency routes.
Release tag: v0.3.47
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.47
- Released
v0.3.47package metadata, server metadata, package manifests, and Git UPM examples. - Requested EditMode and PlayMode filters that select zero tests now report the
non-passing
test_filter_no_matchverdict with the requested-filter summary, direct counts, and one-refresh recovery guidance; unfiltered zero-test runs remainno_tests. - The EditMode resolver safely attempts to load an explicitly requested test assembly before cataloguing its test names, and the public cold-discovery smoke refreshes once before requiring its fully qualified target.
- Removed catastrophic regex backtracking from Unity-process classification on long non-Unity command lines.
- Kept package self-tests from overwriting an active bridge test-run state and removed their temporary generated scene root when the test created it.
- Consumer-project Unity validation passed the package self-test lane: EditMode
16/16, PlayMode5/5, and the cold-discovery targeted EditMode smoke selected and passed1/1fully qualified test after one refresh. - Host Python unittest suite passed:
466tests with13expected platform skips. - Public site Playwright checks passed:
42/42. - Release metadata consistency, documentation freshness, and public-release
safety checks passed for
0.3.47.
Release tag: v0.3.46
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.46
- Released
v0.3.46package metadata, server metadata, package manifests, and Git UPM examples. - Hardened
unity_sdk_generated_diff_guard/sdk-generated-diff-guardwith structure-aware defaults: XML comparison is order-insensitive, Gradle comparison ignores comments/formatting and normalizes adjacent generated block order, and other text uses conservative line normalization. Required markers are token-aware and comment-safe, so reformatted calls do not fail while markers that survive only in comments cannot pass. Malformed structured outputs now fail with typedinvalid_generated_filesevidence, and per-path rows report the selected diff mode, semantic-change state, and marker proof.
- Detect the "Enter Safe Mode?" startup dialog blocking the editor even when
Editor.log contains no "Safe Mode" marker (Unity does not log the marker while
the prompt is displayed).
build_editor_log_diagnosisnow recordslog_idle_seconds, and project-health classification reportsstartup_modal_dialog_blockwith adismiss_editor_startup_dialog_or_quit_editor_then_retryrecovery when a live editor has compile errors, no live bridge heartbeat, and a quiescent Editor.log. Previously this degraded to a generic compile-block signal whose batch-gate recovery cannot run while the modal holds the project Library.
- Host regression passed
461tests with13expected platform skips. - The guard passed against real Git-tracked XML/Gradle generated files in a Unity 6000 consumer and a tracked line-normalized file in a Unity 2022 consumer. The same projects passed the package EditMode/PlayMode self-test lane and the compile/scenario/lifecycle post-change lane respectively.
Release tag: v0.3.45
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.45
- Released
v0.3.45package metadata, server metadata, package manifests, and Git UPM examples. - Made setup fail closed on stale canonical Git UPM pins, helper versions, helper integrity manifests, and client launcher flavor mismatches. Setup plans now upgrade older pins after approval, refuse automatic downgrades or custom source rewrites, and reject apply when the reviewed manifest changed.
- Reworked the public one-prompt install contract around the canonical
v0.3.45source and tagged README. Existing helpers are verified before use, native Windows Codex blocks migrate frombash/run.shtocmd.exe/the refresh.cmdwithout replacing unrelated config, and client restart plus live-tool proof is required before tests.
- Prevented stale/reused bridge PIDs from being trusted as Unity process
identity. Automatic recovery no longer treats editor-open permission as
force-termination permission, revalidates exact project ownership before an
explicitly authorized termination, and Windows
taskkillno longer uses the descendant-tree/Tflag. - Added a safety-epoch, hash-verified helper install manifest and published the
legacy
server.pyversion marker last, so interrupted or mixed-version helper rollouts are refreshed instead of executed.
- Host Python unittest suite passed:
452tests with13expected skips. - Public site Playwright checks passed:
39/39, including the 320 px viewport and clipboard safety-contract assertion. - Release metadata consistency, documentation freshness, and public-release
safety checks passed for
0.3.45.
- Added
unity_sdk_generated_diff_guardandsdk-generated-diff-guard, a compact, host-side SDK rollout proof for Git-tracked generated files. It compares each requested path to a named Git baseline and fails closed when a required marker is absent, a tracked generated file disappears, an expected previous native version remains, or an unallowlisted generated-file change is present. The guard writes a JSON proof under the project's ignored MCP evidence directory by default.
Release tag: v0.3.44
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.44
- Restored macOS/Linux GUI-client startup after the Windows launcher work:
installed POSIX refresh launchers now prefer their sibling virtual
environment over
PATH, generated client configs persist an absolute Bash path and avoid login profiles, explicitPYTHONoverrides keep priority, and a forwardedAPPDATAvariable alone no longer misclassifies a POSIX host as Windows. - Made
tcp_loopbackresponses compact newline-delimited JSON frames and let the host return as soon as one complete JSON value is received, instead of waiting for socket close. TCP requests can also recover a completed file outbox fallback. - Added decision-grade accounting for Unity operations that completed but whose
original host delivery is unproven. Final status preserves confirmed Unity
success, reports
unity_completed_host_delivery_unproven, and explicitly prevents blind retry. MCP and CLI final/latest status surfaces are compact by default with an explicit full-payload opt-in. - Made post-change validation select and report its execution lane before batch preflight. A live same-project editor now stays on the interactive MCP lane, including direct bridge-state recovery when the status-summary probe fails; unknown editor liveness blocks instead of falling through to batch mode.
- Made multi-project compile evidence lane-agnostic: GUI fallback now preserves its matrix counters from the bridge payload, and both the aggregate and GUI subset selector use the same normalized evidence. Explicit batch-result selection emits coverage accounting and fails before worker launch when the selected set is malformed or incomplete. Compact batch rows also report license-cache provenance and probe age when available.
- Release metadata, documentation freshness, public-release safety, and public
site checks passed for
0.3.44. - Host Python unittest suite passed:
430tests with13expected skips. - Live Unity validation in a representative host project passed the GUI-fallback compile
matrix (
6/6) and the selected GUI subset: EditMode778/778, PlayMode279/279.
Release tag: v0.3.43
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.43
- Scenario decision verdicts now distinguish a project-hook mutation that was
confirmed as applied from an immediately following refresh-settle timeout.
Such runs remain inconclusive rather than passing, but expose
applied_mutation_settle_timeout,mutation_applied_unsettled, and a compact mutation/settle summary so the hook is not misread as failed. - Refresh responses now qualify
playmode_state_after_settlewith an explicit source and trust class. When bridge identity changes during post-request settle, compact and full responses reportstale_riskplus aconfirm_via_unity_playmode_statenext action instead of presenting the sampled PlayMode value as definitive. - Hardened native Windows installation and launch paths: self-hosted refresh launchers, safe paths with spaces, predictable non-zero error propagation, Python 3.10+ gating, UTF-8 process handling, and client configs that point to the resolved launcher path.
- Improved cross-platform Unity discovery and readiness recovery, including extra Unity Hub installation locations, host-native recovery commands, and faster failure when interactive readiness cannot be achieved.
- Made bridge file IPC and request artifacts safer under lifecycle churn with atomic writes, torn-read resistance, process identity checks, subprocess timeouts, and editor-main-thread-safe runtime paths.
- Added end-to-end host regressions for Windows launchers, PowerShell setup, MCP stdio, installed delegate recovery, hostile code pages, and simulated file-IPC bridge behavior.
- Added public issue templates, contribution and conduct guidance, and an explicit independent-project notice.
- Release metadata, public documentation, release-safety, host regression, and public-site checks passed before tagging.
Release tag: v0.3.42
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.42
- Released
v0.3.42package metadata, server metadata, package manifests, and Git UPM examples. - Changed
templates/smoke/run_post_change_validation.shto run a closed-projectbatch-build-config-compile-matrixpreflight beforeensure-ready --open-editorwhen the runner would otherwise open Unity, keeping post-C#-edit compile failures out of GUI Safe Mode startup.
- Release version consistency, release-doc freshness, and public-release safety
checks passed for
0.3.42. - Host Python unittest suite passed for
0.3.42:310tests with1expected skip. - Same-host Unity validation passed against two consumer projects: a Unity
2022 package self-test lane with EditMode
14/14and PlayMode5/5, and a Unity 6000 post-change route with compile preflight6/6, acceptance scenario10/10, and contract scenario passed.
Release tag: v0.3.41
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.41
- Released
v0.3.41package metadata, server metadata, package manifests, and Git UPM examples. - Made
transport_response_missingandeditor_idle_timeoutcompact by default while preserving full-payload recovery commands and tool arguments. - Changed
unity_console_tail/request-console-tailto use path-backedEditor.logby default, with explicit stale-buffer caveats when callers opt into the in-memory Unity Console buffer. - Added Safe Mode compile-dialog classification for first-open/GUI readiness failures, with observe-only recovery guidance through the batch compile gate or manual Safe Mode handling.
- Annotated offline or unverified
editor_log_diagnosisoutput with freshness fields so prior-session compile blockers are not mistaken for current working tree truth. - Documented the manual-manifest/manual-open bridge enablement boundary and the "compile-green is not editor-startup-clean" validation caveat.
- Release version consistency, release-doc freshness, and public-release safety
checks passed for
0.3.41. - Host Python unittest suite:
309tests passed with1expected skip. - Public site Playwright checks passed:
39/39.
Release tag: v0.3.40
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.40
- Released
v0.3.40package metadata, server metadata, package manifests, and Git UPM examples. - Tightened
--output compactbatch helper CLI output so compact mode whitelists decision fields, normalized lane/verdict fields, and artifact pointers instead of copying the full batch result summary. Full output remains unchanged for deep debugging. - Made
ensure-ready --open-editorauto-enable the project-scoped bridge configuration when it is missing or disabled, without mutating user-level MCP client configs. - Changed host-facing console grep defaults to path-backed
Editor.logand added stale-console-buffer warnings for explicit empty Console error searches. - Added first-open Unity upgrade/API-Updater modal-block diagnosis with
relaunch_noninteractive_accept_apiupdaterecovery guidance, and pass-accept-apiupdatethrough host-opened Unity launch and batch validation paths. - Clarified setup-plan review output so client config paths are separate wiring review targets, not planned setup mutations.
- Added regression coverage that keeps successful compact batch summaries under a 500-byte per-project budget and prevents raw log, probe-log, command, and workspace side-effect details from re-entering compact output.
- Added regression coverage for first-open project bridge auto-enable,
Editor.logconsole grep defaults, stale Console false-empty warnings, API-Updater modal-block health classification, and project-only setup-plan review output. - Release version consistency, release-doc freshness, and public-release safety
checks passed for
0.3.40. - Host Python unittest suite:
300tests passed with1expected skip. - Public site Playwright checks passed:
39/39.
Release tag: v0.3.39
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.39
- Released
v0.3.39package metadata, server metadata, package manifests, and Git UPM examples. - Added
--output compact|fullto batch helper CLI commands, includingbatch-compile,batch-compile-matrix,batch-build-config-compile-matrix,batch-editmode-tests, andbatch-build-player. The default remainsfull; compact output emits the decision summary and artifact pointers without the full command vector or nested batch payload.
- Release version consistency, release-doc freshness, and public-release safety
checks passed for
0.3.39. - Host Python unittest suite:
291tests passed with1expected skip. - Public site Playwright checks passed:
39/39. - Compact batch helper dry-run output was validated against two local consumer projects, and full dry-run output still preserved the legacy command vector.
Release tag: v0.3.38
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.38
- Released
v0.3.38package metadata, server metadata, package manifests, and Git UPM examples. - Added a release-facing public-safety guard that fails when public docs contain host-local paths or locally configured denylist tokens before release tagging.
- Added
unity_scene_open,request-scene-open, and scenarioscene_opensteps for deterministic Edit Mode scene setup before Play Mode and boot-flow validation. Scene opens fail closed during Play Mode, on missing scene paths, and on dirty open scenes unlessallowDirtySceneDiscard=trueis explicit.
- Release version consistency, release-doc freshness, and public-release safety
checks passed for
0.3.38. - Host Python unittest suite:
288tests passed with1expected skip. - Unity 2022.3 and Unity 6000 consumer-project local package validation passed package EditMode and PlayMode self-test lanes with the new scene-open tests.
- A Unity 6000 consumer-project project-local smoke suite passed readiness,
acceptance and contract scenarios, compile matrix
6/6, and a live health probe reportingunity.scene.openin24supported operations.
Release tag: v0.3.37
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.37
- Released
v0.3.37package metadata, server metadata, package manifests, and Git UPM examples. - Scenario
playmode_setsteps now preserve the directunity.playmode.setpayload outcome in compact summaries, soentercalls that resolve asalready_playingare visible without full payload recovery. unity_scenario_run_and_waitcompact decision verdicts now include aplaymode_guard_summary; a passed scenario whose PlayMode entry reused an already-playing editor is marked withtrust_class=stale_riskand a rerun recommendation when a fresh PlayMode start is required.
- Release version consistency and release-doc freshness checks passed for
0.3.37. - Host Python unittest suite:
282tests passed with1expected skip. - A Unity 2022.3 consumer-project local package validation passed fast package
self-tests: EditMode
12/12and PlayMode5/5, plus a focused already-playing scenario guard probe withtrust_class=stale_risk. - A Unity 6000 consumer-project local package post-change validation passed
readiness, compile matrix
6/6, acceptance scenario10/10, contract scenario, PlayMode/lifecycle checks, and cleanup/restore.
Release tag: v0.3.36
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.36
- Released
v0.3.36package metadata, server metadata, package manifests, and Git UPM examples. transport_response_missingerrors now embed a compact final-status projection instead of the full final-status/artifact payload, while preserving therequest-final-statuscommand for full evidence recovery.- Discovery-enriched stale-session transport failures now replace generic retry
recovery commands with the actionable
ensure-ready --open-editorcommand when host/session evidence proves recovery is needed before retrying. ensure-readynow defaults to a compact readiness envelope with verdict, health, bridge identity, package import summary, editor-log identity, recovery commands, and Play Mode exit hints. Use--include-full-payloadfor the previous nested discovery/package/import/lifecycle payload.unity.status, bridge heartbeat state, and compact status summaries now surface the active editor log path. Status summaries also flag newer project-matching foreign Editor.log candidates when practical.unity_console_grepandrequest-console-grepnow supportsource=editor_log/--source editor_logfor path-backed Editor.log grep, and docs call out Unity Console clear-on-play and ring-buffer eviction false negatives.unity_scenario_run_and_waitfull-payload mode now omits duplicatedrun_start.stepsby default; passincludeStepPayloads=trueor--include-step-payloadsto preserve that launch-time step copy.templates/smoke/run_post_change_validation.shnow emits durable phase lines, quiet-tail cleanup/auxiliary heartbeats, and classifies bridge churn asnon_blocking_churnoractionable_churn.- Added public-safe config-applying project-action build templates under
templates/project_actions/for projects whose representative build lane must call project-owned config/apply/build methods instead of rawunity_build_player.
- Release version consistency and release-doc freshness checks passed for
0.3.36. - Source checkout helper install refreshed neutral, Codex, and Claude tool
installs; all reported package metadata version
0.3.36. - Host Python unittest suite:
279tests passed with1expected skip. - Public site Playwright checks passed:
39/39. - Same-host Unity validation passed readiness, status-summary, and health-probe checks across two consumer projects, plus a project-local post-change route with compile matrix, acceptance scenario, contract scenario, lifecycle checks, and project-action catalog consistency.
Release tag: v0.3.35
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.35
- Released
v0.3.35package metadata, server metadata, package manifests, Git UPM examples, public site version references, and package documentation. unity_status_summarynow defaults to a compact polling payload for MCP callers and omits nested discovery, transport, state-group, timing, and artifact details unlessincludeFullPayload=trueis provided. The compact payload keeps the decision fields needed for readiness, recovery, compiler state, lifecycle stabilization, host health, reconciliation, and process visibility.- Added explicit
payload_mode=compact_status_summary/payload_mode=full_status_summarymarkers so agents can tell whether nested diagnostics were intentionally omitted. - Added
includeFullPayloadto theunity_status_summarytool schema and preserved the full previous nested summary shape for deep lifecycle and transport debugging. - Kept the CLI
request-status-summaryhelper on its existing full diagnostic default so shell smokes and local wrapper scripts continue to parse nested prerequisite fields without migration churn. - Updated the token-efficiency retro registry to mark status-summary slimming complete and leave only batch/multi-project compact ceilings, token ledger, and fast-path profiles as remaining response-envelope backlog.
- Release version consistency check passed for
0.3.35. - Source checkout helper install refreshed neutral, Codex, and Claude tool
installs; all reported package metadata version
0.3.35. - Host Python unittest suite:
267tests passed with1expected skip. - Public site Playwright checks passed:
39/39.
Release tag: v0.3.34
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.34
- Released
v0.3.34package metadata, server metadata, package manifests, and Git UPM examples. - MCP tool responses for
unity_project_refresh,unity_compile_player_scripts,unity_compile_matrix,unity_compile_build_config_matrix,unity_tests_run_editmode, andunity_tests_run_playmodenow default to a compact operation summary that preserves authoritative post-settle verdict fields while omitting full_xuunity_lifecyclesnapshots. PassincludeFullPayload=trueto recover the previous full bridge payload for lifecycle debugging or raw artifact inspection. - Compact operation summaries keep the authoritative post-settle verdict fields that agents need for closeout: status, error counts, first diagnostics, settle phase, completion basis, timing/artifact references, and full-payload recovery arguments.
- The compact/full bridge response conversion is centralized in
templates/server_bridge_payloads.py, reducing duplicated response shaping across refresh, compile, build-config compile, and direct EditMode/PlayMode test tools. - Public docs and retro registries were updated to record that normal MCP tool calls no longer dump lifecycle snapshots by default.
- Host Python unittest suite:
267tests passed with1expected skip. - Release version consistency check passed for
0.3.34. - Public site Playwright checks passed:
39/39. - Source checkout helper install refreshed neutral, Codex, and Claude tool
installs; all reported package metadata version
0.3.34. - Live MCP compact response validation passed on two local consumer projects, including post-settle compile truth without default lifecycle dumps.
- Unity 2022.3 consumer package self-test fast lane passed: EditMode
12/12and PlayMode5/5.
Release tag: v0.3.33
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.33
- Released
v0.3.33package metadata, server metadata, package manifests, and Git UPM examples. - Reduced monolithic ownership on the Unity package side while preserving public MCP operation names, JSON payload shapes, scenario timing semantics, and persisted bridge state contracts. The existing scenario runner, project-action normalizer, bridge runtime state, and model entrypoints remain compatibility facades over smaller DTO, runtime, compiler, scheduler, catalog, and handler units.
- Reduced monolithic ownership on the Python server side across batch orchestration, bridge runtime, CLI command routing, editor-host lifecycle, setup wizard, summaries, and tool specs while keeping public command and MCP tool contracts stable.
- Tightened
unity_scenario_run_and_waitcompact/full payload semantics: public smoke helpers that need step-level evidence now requestincludeFullPayload, while compact summaries remain the default contract for agent-facing verdicts. - Added regression coverage for the compact payload contract, scenario decision verdict parity, server parity baselines, and Windows/WSL process visibility routing.
- Fixed native Windows CI routing for
HostPlatformAdapter(platform_kind="linux")so WSL-simulated PID checks do not accidentally use the host WindowsOpenProcesspath and report unrelated live PIDs as Unity processes. - Hardened smoke validation docs and reusable smoke scripts so compact scenario results are not misread as missing per-step evidence.
- Host Python unittest suite:
264tests passed with1expected skip. - Project devmode MCP post-change smoke passed, including readiness, compile matrix, acceptance, contract, playmode settled-state regression, lifecycle retry, and project-action catalog consistency.
- Project devmode package self-tests passed: EditMode
12/12and PlayMode5/5.
Release tag: v0.3.32
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.32
- Released
v0.3.32package metadata, server metadata, package manifests, and Git UPM examples. unity_scenario_run_and_waitnow returns a compact decision verdict by default: verdict, trust class, failure class, recommended next action, terminal scenario status, short step summaries, UI smoke fields, and path coverage. Full raw scenario payloads remain available withverboseorincludeFullPayload.- Scenario lifecycle recovery now attributes editor cold starts and relaunches
with
editor_relaunched,previous_editor_pid,current_editor_pid,bridge_generation_before,bridge_generation_after, andcold_start_reasonso latency is explainable without weakening the verdict. - Scenario compile steps now prefer post-settle compile truth from
idle_wait_after, keeping request-time transport success separate from final Unity compiler state. - Infrastructure timeouts are classified as
infrastructure_timeout, while UI smoke summaries continue to distinguish product assertions, preconditions, blocking popups, cleanup, and unproven Unity completion. - Release version consistency now covers both MCP protocol metadata sources so
initialize.serverInfo.versionstays aligned with package metadata.
Release tag: v0.3.31
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.31
- Released
v0.3.31package metadata, server metadata, package manifests, and Git UPM examples.
- Cleared Unity's editor progress bar after MCP-triggered compile, refresh, and build so the "Importing assets"/"Compiling" dialog no longer stays stuck on Unity 2022.3. Added
EditorUtility.ClearProgressBar()to the compile-utilityfinally(covers everyPlayerBuildInterface.CompilePlayerScriptscaller, including matrix and scenario steps) and to the request-pump completion path (coversAssetDatabase.Refresh/BuildPipeline.BuildPlayer). Unity 6 already auto-cleared the bar; this restores parity on 2022.3.
Release tag: v0.3.30
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.30
- Released
v0.3.30package metadata, server metadata, package manifests, and Git UPM examples. - Native Windows Codex config generation now uses
cmd.exeandrun_installed_or_refresh_xuunity_mcp.cmd; an existing Windowsbashblock is reported aswindows_codex_launcher_mismatchinstead of duplicated. - Windows setup docs now prefer
.cmd, quote project paths, and call out PowerShell ExecutionPolicy risk for.ps1. validate-setupnow reports offline readiness scope and package import-state evidence instead of presenting manifest/config validation as live Unity readiness.
- Added raw/resolved project-root diagnostics and Windows launcher hints for
project_not_found, making path-with-spaces truncation diagnosable from one error payload. - Added package import-state evidence to
ensure-readysuccess and error payloads. A declared-but-unresolved package with a live bridgeless editor now recommendsreopen_project_for_clean_resolveinstead of generic editor recovery. - Added an already-closed editor closeout fast path that clears stale host session/bridge/test state without quit or terminate attempts when process visibility proves no same-project editor is live.
- Host Python suite:
243tests passed on macOS, with one expected native Windows.cmdsmoke skipped on this host.
Release tag: v0.3.29
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.29
- Added
project_defined_hook_poll_until, a first-class scenario operation for project-defined hook smokes that starts one hook action, polls another until a payload predicate reachespassed,failed, or timeout, and keeps the latest terminal payload in scenario results. - Added scenario summary promotion for poll-until hook name, terminal status, failure class, requested scalar payload fields, screenshot path, console-tail evidence count, and cleanup result.
- Released
v0.3.29package metadata, server metadata, package manifests, and Git UPM examples. - Scenario JSON now accepts
operationas an alias forkindand accepts object-shapedstartPayload/pollPayloadinputs, which are normalized for both Python MCP tool callers and direct Unity bridge callers.
- Validated package EditMode self-tests on a temporary Unity
2022.3.67f2project with the localcom.xuunity.light-mcppackage:12/12passed. - Validated an end-to-end temporary project hook scenario:
request-scenario-validatereturnedvalid,request-scenario-run-and-waitreturnedpassedwithpoll_count=3, and compact summary promotedselected_tab,user_path,before_value,after_value, andcleanup_result=passed. - Re-ran the host Python suite after live Unity validation:
237tests passed with one expected native Windows.cmdsmoke skipped on macOS.
Release tag: v0.3.28
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.28
- Released
v0.3.28package metadata, server metadata, package manifests, and Git UPM examples.
- Removed the legacy bash wrapper body (
xuunity_light_unity_mcp_legacy.sh) and theXUUNITY_LIGHT_UNITY_MCP_LEGACY_WRAPPERescape hatch after the Python launcher core was proven by green Windows, macOS, and Linux CI legs onv0.3.27. The golden dual-run parity suite retired with its subject; cross-flavor (.sh/.cmd/.ps1) parity, the bash-spawn canary, and the full contract suite remain as regression guards.
Release tag: v0.3.27
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.27
- Released
v0.3.27package metadata, server metadata, package manifests, and Git UPM examples.
- Added
xuunity_light_unity_mcp.cmdandxuunity_light_unity_mcp.ps1wrapper siblings using the provenrun.cmd/run.ps1Python discovery chain and executingtemplates/server_launcher.py, so Windows operators get the full wrapper surface without bash. - Promoted shared subprocess helpers (Git Bash resolution, process-tree kill, run-to-files) into
scripts/testing/process_support.py, consumed by both the orchestrator and the test suite. - Added an optional
XUUNITY_LIGHT_UNITY_MCP_WORKER_TIMEOUT_SECONDSwatchdog that kills stuck worker process trees with exit code 124. - Added cross-flavor launcher parity tests (
test_launcher_flavor_parity) and thread-pool parallelism tests (test_multi_project_parallelism).
- Ported the operator wrapper body from bash to
templates/server_launcher.py, which owns source/repo/install-dir resolution, helper sync, compact summary emission, devmode/prodmode, and server dispatch. Client-context and install-dir resolution delegate toserver_setup_wizardto remove duplicate bash/python logic. - Shrank
xuunity_light_unity_mcp.shto a thin 28-line launcher with legacy flag checking and Python discovery (PYTHONenv,py -3,python3,python,py). Preserved the previous bash body asxuunity_light_unity_mcp_legacy.sh(callable viaXUUNITY_LIGHT_UNITY_MCP_LEGACY_WRAPPER=1). - Ported both multi-project runners into
scripts/testing/run_multi_project.py(subcommandsbatch-compile-matrixandgui-test-subset) usingThreadPoolExecutorworkers, removingxargs -Pand enabling identical parallelism overlap across macOS, Linux, and Windows. - Expanded offline CI checks to run on
masterpushes and pull requests (previously tags only), smoke-executingtemplates/run.cmdandtemplates/run.ps1on the Windows leg.
- Fixed parity test path normalization for Windows path representations, resolving WSL/POSIX temp differences, 8.3 short names (
RUNNER~1), and JSON-escaped backslashes.
Release tag: v0.3.26
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.26
- Released
v0.3.26package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.25
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.25
- Added
test-results-tablefor reusable markdown, JSON, and TSV summaries from persisted Unity test-result JSON files. - Improved multi-project GUI test subset reporting with per-project request ids, result paths, count summaries, lifecycle churn flags, failure grouping, package-source closeout, and workspace side-effect accounting.
- Documented completed test-result JSON as the immutable source of truth for portfolio closeout and aggregate operator verdicts.
- Released
v0.3.25package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.24
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.24
- Fixed Windows Git Bash wrapper delegation so setup and server commands use
the resolved Python interpreter, including
python,python3, andpy -3launcher paths. - Hardened setup plan/apply JSON loading for UTF-8, UTF-8 BOM, and UTF-16 plan files produced by common PowerShell capture flows.
- Improved Windows and WSL editor discovery, PID liveness checks, and path conversion for Windows-installed Unity editors used from WSL helpers.
- Added cross-platform compatibility regression tests for Windows, WSL, macOS, Linux, and shell wrapper Python launcher handling.
- Released
v0.3.24package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.23
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.23
- Added
unity.console.grep,unity_console_grep,request-console-grep, and a reusableconsole_grepscenario template for compact Unity console inspection without raw log dumping. - Added
request-loading-timingandunity_loading_timingon top of console grep so agents can collect compact scene/loading timing evidence. - Added
project-hook-scaffoldand profile mutation summary helpers for reusable project action and scenario authoring flows. - Added public-safe completed retro archive entries and refreshed the public retro registry split between active backlog and completed history.
- Released
v0.3.23package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.22
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.22
- Added centralized neutral helper installation with Codex/Claude delegate
launchers, isolated
.venvdiscovery, and Antigravity IDE setup guidance. - Hardened full-reset uninstall planning so client-specific cleanup preserves the shared neutral helper unless explicitly requested.
- Updated wrapper auto-resolution, setup wizard tests, and release-facing validation coverage for neutral helper workflows.
- Released
v0.3.22package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.21
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.21
- Fixed license capability classification so recovered Unity licensing startup warnings, such as transient access-token or IPC-channel messages followed by successful entitlement resolution and a clean batchmode exit, no longer force GUI fallback.
- Added explicit portfolio batch fallback-mode forwarding and compact operator
verdicts so multi-project compile summaries distinguish
passed_via_batchfrompassed_via_gui_fallback. - Released
v0.3.21package metadata, server metadata, package manifests, and Git UPM examples. - Tightened the MCP release gate so
sync_release_version.pyandcheck_release_version_consistency.pynow treat the GitHub Pages site and listing metadata as release-bound surfaces that must be updated before tagging.
Release tag: v0.3.20
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.20
- Added
uninstall-plananduninstall-applyhost helper commands plusxuunity_uninstall_planandxuunity_uninstall_applyMCP tools for safe project cleanup and current-user reset flows. - Added uninstall guidance across install, agent, client, template, and reference docs, including project-only cleanup and full reset modes.
- Added a GitHub Pages-ready public site surface for
XUUnity MCP, including install, comparison, use-case, alternatives, and client-guide landing pages. - Added SEO/discovery operational docs, including listing metadata, publishing checklist, SERP tracking guidance, and a live execution backlog.
- Renamed the public repository slug from
FoxsterDev/xuunity-light-unity-mcptoFoxsterDev/xuunity-mcp. - Updated the canonical Git UPM install path to the new repository URL while
keeping the package directory at
packages/com.xuunity.light-mcp. - Updated release-facing docs, package metadata, MCP metadata, GitHub Pages canonicals, and helper/client examples to use the new repo/site path.
- Documented uninstall as a preflight-first flow that removes only the selected
xuunity_light_unityclient config block, selected helper install, and explicit project-level MCP setup after approval. - Released
v0.3.20package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.19
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.19
- Added compact lifecycle churn output to the post-change validation runner, including bridge generation/session transition, request abandoned and reclassification counts, final health, final Play Mode state, compiler errors, stale request count, and warning codes.
- Added package self-test discovery output to the package self-test smoke runner, including testables visibility, Test Framework version, package source/hash, test asmdef count, test counts, and discovered MCP categories.
- Fixed package EditMode self-test compilation on Unity versions where
Object.DestroyImmediateis ambiguous betweenUnityEngine.Objectandobject. - Fixed package self-test smoke accounting so an explicit package self-test
request fails on
no_testsortotal=0instead of reporting a top-level MCP success as a test pass. - Fixed package self-test discovery blind spots so a requested self-test lane fails before execution when the expected package test asmdefs, categories, or lane test counts are not visible.
- Released
v0.3.19package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.18
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.18
- Added catalog-backed
project_actionscenario steps as a Unity-native scenario contract. Unity now resolvesproject_actions.yaml, enforces explicit approval for mutating actions, and executes the declaredproject_defined_hookwithout requiring host-side scenario rewriting. - Added host-side
project_actionscenario preflight so MCP tools and wrapper commands can fail early with the same mutation and catalog diagnostics before dispatching to Unity. - Added host-side project action tools and commands for listing and invoking catalog-backed project actions.
- Added artifact registry/report helpers for project validation pipelines that
need stable report artifacts without importing them into Unity
Assets. - Added regression coverage for typed project action scenario expansion,
mutation approval guards,
payloadJsonsupport, artifact registry helpers, and Unity-side rawproject_actionnormalization.
- Updated scenario schemas and docs so
project_actionis documented as a Unity-side contract with host preflight, rather than a host-only authoring convenience. - Released
v0.3.18package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.17
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.17
- Added
sync_release_version.pyto synchronize package metadata, server metadata, package manifest templates, and current release-facing docs from the package version source of truth. - Added
check_release_version_consistency.pyand host-suite coverage so stale current-version references fail before release tagging.
- Released
v0.3.17package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.16
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.16
- Added Unity bridge/status compiler diagnostics:
script_compilation_failed,compiler_error_count,recent_compiler_diagnostics, andcompiler_diagnostics_source. - Added host-side compile-red fail-fast for EditMode tests, PlayMode tests, Play Mode transitions, and scenario runs before long editor-idle waits.
- Added operator-visible pre-dispatch progress phases:
activation,wait_for_idle_before,dispatching,waiting_for_response, andwait_for_idle_after. - Added scenario DSL dependency and cleanup support through
dependsOn,runIfStepPassed, andcleanupSteps. - Added compact scenario wait heartbeat output that reports active step, first failed step, wait deadline, remaining seconds, and editor health context.
- Added a visual Codex Desktop custom MCP setup guide with sanitized screenshots
and guidance for natural Unity requests through the
xuunity_light_unityserver.
- Scenario
stopOnFirstFailurenow jumps to cleanup steps when configured, so project state can be restored even after the scenario body fails. - Released
v0.3.16package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.15
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.15
- Added license-aware batch lane selection:
license-capabilities,unity_license_capabilities,--batch-fallback-mode auto|off|require-batch, GUI fallback summaries, and Unity-sideunity.build_playerfor player-build fallback when real batchmode is blocked. - Added
XUUNITY_LIGHT_UNITY_MCP_INSTALL_TARGET=codex|claude|autofor wrapper helper resolution so Codex contexts prefer.codex-toolswithout breaking Claude-side.claude-toolsinstalls. - Documented optional Codex/Codex-style MCP client wiring for trusted local Unity projects.
- Released
v0.3.15package metadata, server metadata, package manifests, and Git UPM examples.
Release tag: v0.3.14
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.14
- Released
v0.3.14package metadata with Unity2021.3as the default minimum and removed the hardcom.unity.test-frameworkdependency. - Added optional Test Framework capability wiring through asmdef Version
Defines and
XUUNITY_LIGHT_MCP_TESTS_CAPABILITY. - Added setup wizard commands and MCP tools for per-project setup planning, approved setup application, setup validation, and approved Test Framework installation.
- Added capability statuses for optional test support, including missing and too-old dependency states that do not make core MCP health fail.
- Added closed-editor batch lifecycle hardening: explicit editor-close
verification, process visibility diagnostics,
request-editor-quit --wait-for-exit, andrestore-editor-state --require-closed. - Hardened public source-root/package-mode selection so the wrapper resolves the
operation package source before generic
AIRoot/templatespaths. - Fixed installed-helper setup planning so the default Git UPM dependency uses
the package metadata version instead of falling back to
v0.0.0. - Added a README install simulation audit covering single-project, hub, mixed-version, nested-repo, and optional Test Framework setup paths.
- Added README guidance for collecting a sanitized chat retro before opening a GitHub issue about MCP setup or automation failures.
- Added an install-specific retro prompt for collecting structured MCP setup evidence before opening a GitHub issue.
- Changed
prodmodeto pin the published package release tag, such as#v0.3.14, instead of a raw source commit SHA.
Release tag: v0.3.13
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.13
- Restored Git UPM as the default production package source for project setup.
init_xuunity_light_unity_mcp.sh --enable-projectnow enables the bridge without rewritingPackages/manifest.json. - Kept local
file:package wiring behind explicit wrapper mode switches only:devmodefor local MCP package iteration andprodmodefor returning to the published Git-backed source. - Updated project-package alignment checks so a Git-pinned dependency is treated as the default healthy production state instead of warning about local-source expectations.
- Added a reusable clean-project Android APK smoke runner that creates a Unity project, installs the package from Git UPM, proves MCP readiness, restores the editor session, and runs a regular Unity batch APK build.
- Added Android Build Support preflight reporting for the clean-project smoke
runner, including a structured fail-fast summary and an explicit
--allow-no-androidMCP-only readiness mode. - Updated installer docs, client docs, AI integration docs, smoke contracts, and package examples to document the Git-default / devmode-only package source model consistently.
Release tag: v0.3.12
Current Git UPM install URL:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.12
- Moved the Unity package from
templates/unity-packageto the registry-nativepackages/com.xuunity.light-mcppath. - Updated package metadata so Unity Package Manager and future package registries
can identify the canonical package directory as
packages/com.xuunity.light-mcp. - Updated Git UPM install examples, local
file:package examples, package discovery, installer wiring, wrapperdevmode/prodmode, workflow templates, package manifests, and tests to use the new package path. - Added the README preview banner asset and refreshed top-level install messaging around the new package path.
- New installs should use:
https://github.com/FoxsterDev/xuunity-mcp.git?path=/packages/com.xuunity.light-mcp#v0.3.12 - Local MCP development should use:
file:/absolute/path/to/xuunity-mcp/packages/com.xuunity.light-mcp - Projects pinned to
v0.3.11can continue usingtemplates/unity-package; that old path is now migration-only. - To migrate a Unity project, replace
?path=/templates/unity-package#v0.3.11with?path=/packages/com.xuunity.light-mcp#v0.3.12, remove thecom.xuunity.light-mcpentry fromPackages/packages-lock.json, and let Unity re-resolve packages.
- OpenUPM publication is still pending; Git UPM is the supported install route for this release.
- The package remains editor-only and disabled by default, with no player-build footprint by default.
- Post-tag documentation refinements may exist on
master; the package release tag for Unity consumers remainsv0.3.12.
-
Added wrapper help and agent workflow guidance for MCP
devmodeandprodmodepackage-source switching. -
Added client-specific MCP payload examples, structured evidence schema, and machine-readable workflow templates for agent validation workflows.
-
Replaced placeholder client docs with production-ready MCP configs for Claude Code, Claude Desktop, Cursor, Windsurf, Codex-style agents, and generic stdio MCP clients.
-
Added reusable client config templates under
templates/clients/. -
Added native Windows client config templates and
run.cmd/run.ps1launchers. -
Replaced the zsh-only Unix launcher with a bash-compatible launcher for Linux/macOS.
-
Expanded
docs/reference/FEATURES.mdwith competitive differentiators and the full MCP/host helper surface. -
Clarified feature maturity levels, implementation evidence, and compatibility validation status in
docs/reference/FEATURES.md. -
Clarified
docs/reference/COMPARISON.mdsource confidence, maturity terminology, and validation caveats. -
Added
AndreySkyFoxSidorov/UnifiedUnityMCPtodocs/reference/COMPARISON.mdas a broad but young Unity automation reference. -
Added
docs/agents/AGENT_WORKFLOWS.mdto close Priority 15 with production-grade example agent workflows for Unity validation, triage, scenario replay, SDK checks, batch lanes, recovery, and release closeout. -
Updated installer wording and Claude Code user-scope config generation for the production stdio path.
- Extracted XUUnity Light Unity MCP into a standalone public repository.
- Added landing README,
llms.txt, discovery metadata, install guide, feature table, security model, glossary, and client setup docs. - Updated package metadata to point at
FoxsterDev/xuunity-mcp. - Preserved detailed legacy implementation notes in
docs/reference/STATUS.md.
- Added Claude MCP wiring and robust batch matrix parsing in the source package.
- Preserved the working host-side server, Unity editor package, smoke runners, and package self-tests from the previous public-core layout.