Skip to content

Latest commit

 

History

History
1769 lines (1412 loc) · 83.3 KB

File metadata and controls

1769 lines (1412 loc) · 83.3 KB

Changelog

Unreleased

0.3.53

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

Changed

  • Released v0.3.53 package metadata, server metadata, package manifests, and Git UPM examples.

Added

  • 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.v1 receipt, before/after semantic state change, playmode_state=playing, and refusal without a minted receipt. The package self-test runner now includes the assembly when com.unity.ugui is available while retaining the dependency-free core PlayMode lane.

Fixed

  • 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 MeshFilter and proves both the add and remove transactions. Clean Unity 2022.3.62f3 and 6000.0.58f2 projects each pass EditMode 62/62 and the dependency-free PlayMode lane 5/5.

0.3.51

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.

Fixed — v0.3.50 package repair

  • The TMP EditMode test assembly introduced in v0.3.50 did not compile: XUUnityLightMcpUiTreePayload is internal and the new assembly had no InternalsVisibleTo grant, and the tests used Is.AnyOf, which the NUnit version Unity ships does not define. v0.3.50 therefore shipped a package whose tests could not build for any consumer that lists it in testables.
  • 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.ignoreFailingMessages to 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.45f2 and 6000.0.58f2 each 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.dll carries no UnityEngine.UI or 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.

Fixed

  • unity_prefab_mutate reports status: "no_op" for a value-setting operation whose serialized value did not change, and carries no_op_count on the transaction. It previously reported applied with before == after, no warning, and a passing post_validation — a false-positive receipt on the one surface where expectedSha256, atomic rollback, post_validation, and reversible_patch_json all 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 valid name=index pairs. SerializedProperty addresses 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_compare returns 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 overall reference_acceptance short of passed, 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.

Added

  • unity_prefab_render and unity_prefab_snapshot persist the ui.read.v1 snapshot beside the capture and return snapshot_path. The comparison surface consumes a snapshot by path, so while the snapshot was returned inline only, a reference declaring acceptance.semantic: "required" was structurally unsatisfiable outside Play mode and reported not_evaluated / no_ui_snapshot_supplied permanently.
  • unity_prefab_render accepts overrides, the same typed operation list as unity_prefab_mutate, applied to the preview-scene instance only and never written to the asset, reported back as applied_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_field writes asset-typed object references — Sprite, Material, TMP_FontAsset, meshes, ScriptableObjects — addressed by project-relative path or 32-character GUID, with assetSubAssetName (or a path#SubAsset suffix) for a sub-asset such as a sliced sprite, and valueKind: "null" to clear. Component and GameObject references 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_validate accepts unassignedReferenceScope (project_scripts | required | all), defaulting to project_scripts, and always reports unassigned_reference_suppressed_count. One call with reportUnassignedReferences previously 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. required reads the project's own convention — a field attribute whose type name starts with Required — and is empty for a project that uses no such convention.
  • unity_console_grep accepts excludePattern and suppresses build-pipeline progress lines (CopyFiles, [n/m ...]) by default on both the console-buffer and Editor.log lanes, reporting excluded_count and build_pipeline_suppressed_count. A grep for a feature keyword returned 159 matches that were all CopyFiles lines, because the compile job had been named after the feature. includeBuildPipelineNoise: true restores them. A cross-language test pins the two lanes to the same pattern.
  • unity_prefab_mutate reports drift_guard: precondition_matched, unguarded, or drifted. An Editor-API write goes through the editor's in-memory copy, so a serialized asset edited on disk without an intervening unity_project_refresh was silently overwritten, and nothing warned. Whether the editor's copy still matches the file is only decidable from the caller's own expectedSha256: 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.

Changed

  • A stale expectedSha256 now fails as prefab_mutation_asset_drifted rather than prefab_mutation_precondition_failed, and names unity_project_refresh as the remedy for a stale editor import. Callers matching the old code must update.
  • unity_prefab_render's includeSnapshot defaults to false. The inline snapshot is large and the comparison tool cannot consume it; snapshot_path is what closes the semantic lane. Pass includeSnapshot: true to restore the previous response shape.
  • An enum's before/after in the mutation change table name the enum member instead of its index, so the emitted reversible_patch_json carries a restoreValue that can be replayed through stringValue.

0.3.50

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.

Security

  • 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_path and cannot reach visual_determinism=proven. Previously a hand-written JSON file passed as fixtureResultPath earned reference_acceptance=passed and decision_ready=true across every lane, because the only thing separating a receipt from a caller assertion was which argument the JSON arrived through.
  • judges_required and allow_self_review are covered by packet_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 IHDR silently changed the decoded dimensions, and those dimensions are what the registry records as the reference viewport.

Changed

  • 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. fixtureResultPath and interactionResultPath outside 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_lanes filter matches failed_lanes: an optional lane that ran and could not decide now gates the verdict instead of being dropped from it.
  • device is 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_mismatch is severity error. Only error increments the failure count, so an unassignable serialized reference left prefab validation passing.

Added

  • 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_grid refusal for a capture smaller than the comparison grid, which previously raised IndexError mid-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; bridgeOperation coverage 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_restore and request-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.

Fixed

  • A rejected overwrite=true re-registration restores the previous expected.png instead 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_failed without jumping to cleanup, stranding the editor in Play mode.
  • unity_prefab_render builds 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: false rather than null, which read as a pass to any caller testing is 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_restore tests 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.

0.3.49

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.

Changed

  • Released v0.3.49 package metadata, server metadata, package manifests, and Git UPM examples.
  • An acceptance lane marked optional that was actually evaluated and failed now fails the comparison. optional means the lane may be skipped, not that its failures do not count; only not_required opts a lane out of the verdict. This previously let a failing optional semantic lane pass silently.

Added

  • Added the reference-driven UI acceptance surface: unity_ui_reference_register, unity_ui_reference_validate, unity_ui_reference_compare, and the matching ui-reference-register / ui-reference-validate / ui-reference-compare host commands. A supplied design PNG becomes a hash-pinned xuunity.ui-reference.v1 contract 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, and lenient profiles plus per-reference numeric overrides control how close counts as accepted. Orientation or aspect mismatch is refused as comparison_not_comparable with recommended same-aspect capture resolutions and no score.
  • Comparisons publish actual.png, overlay.png, diff.png, metrics.json, and verdict.json, and return reference_acceptance of passed, failed, blocked, pending_lanes, or pending_manual_style with a separate decision_ready flag. 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, and unity_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 reports proof_class, truncation, and ambiguity instead of hiding them, and no answer is ever derived from a screenshot or OCR.
  • unity_prefab_validate reports typed pre-PlayMode defects: missing_script_guid, serialized_reference_missing_component, serialized_reference_type_mismatch, missing_prefab_instance, and opt-in serialized_reference_unassigned. Lanes that need an unavailable backend are listed in lanes_not_evaluated rather 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 without com.unity.ugui still compiles — it simply reports the UI surface as semantic_ui_partial with the reason.
  • unity_ui_reference_compare accepts uiSnapshotPath and 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 gains explained_by (ranked candidate nodes, per-node suspicions, a likely_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 requiredUi selectors are checked against it and the lane reports passed/failed with 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.v1 readiness contract plus unity_ui_fixture_validate and the ui-fixture-validate host command. A project hook reports ui_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 derives visual_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-compare accept fixtureResultPath, so fixture evidence is read from the scenario result the editor wrote, with a hashed receipt naming the run, step, and hook. Caller-supplied fixtureEvidence is still accepted but is never receipt-backed and can no longer make a comparison decision_ready. project-hook-scaffold --ui-fixture generates 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 the ui.read.v1 snapshot it rendered, in render-pixel space, ready to feed straight back into unity_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, requires approve plus previewOnly=false to write, supports an expectedSha256 precondition, 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 explicit approve=true and action="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 a device descriptor recording model, OS, resolution, orientation, safe-area insets, and build revision. A Game View comparison reports the device lane as not_evaluated and 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-packet renders 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-submit records 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 as vision_packet_stale when either image changes, and judge.role records 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 the strict/balanced/lenient profile and can be overridden or have criteria waived per reference through visionPolicy; no profile requires the top score.
  • A comparison now reports lane_disagreement. Grid-passed with review-failed is vision_contradicts_similarity and 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 is similarity_may_be_over_strict and 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 new ui_click scenario step delivers a guarded click inside a Play-mode scenario and emits a xuunity.ui-interaction.v1 receipt; required_interactions on the reference declares what must be proven, and unity_ui_reference_compare reads the receipt from interactionResultPath, defaulting to fixtureResultPath so 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. Added unity_ui_interaction_validate / ui-interaction-validate for the evidence on its own.
  • unity_ui_reference_register / ui-reference-register accept requiredInteractions and visionPolicy, and acceptance gained a vision lane (default optional).

0.3.48

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

Changed

  • Released v0.3.48 package metadata, server metadata, package manifests, and Git UPM examples.

Added

  • Added capability-gated unity.sdk.android_resolve, unity_sdk_android_resolve, and request-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.v1 trust contract for mutating project actions. Hook summaries promote before/after/added/removed/changed counts, while unity_project_action_invoke distinguishes 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-guard to cover Git-untracked generated outputs with an explicit, fingerprint-bound Library/ 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_report artifacts 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.

Fixed

  • 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_resolve now fails closed with edm4u_android_target_not_active unless BuildTarget.Android is 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_until now treats a passive hook payload with status: not_started as keep-waiting instead of an immediate unmatched-status failure. Explicit passWhen and failWhen matches retain precedence, all other unmatched statuses fail closed, and the existing timeout remains the terminal bound.

Validation

  • Typed resolver coverage passes focused host protocol/parity/atomicity tests 77/77; current-source Unity 2022.3 package EditMode 24/24 and PlayMode 5/5; real EDM4U callback failure and local-Maven success routes; a development-system consumer 14/14 + 5/5; and a Unity 6000.0 consumer compile matrix 6/6, acceptance 10/10, contract/lifecycle, and project-action consistency route. The full host suite passes 476/476 with 13 expected platform skips.
  • Android-target precondition coverage passes focused host tests 61/61 and the full host suite 476/476 with 13 expected platform skips. Current-source package self-tests pass on Unity 2022.3: EditMode 20/20 and PlayMode 5/5. A Unity 6000.0 consumer passes compile matrix 6/6, acceptance scenario 10/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/80 and the full host suite 476/476 with 13 expected platform skips. A live Unity 6000.0 consumer 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 475 tests with 13 expected platform skips.
  • A Unity 2022.3 development-system consumer passes package EditMode 14/14 and PlayMode 5/5. A Unity 6000.0 consumer passes compile matrix 6/6, acceptance scenario 10/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 471 tests with 13 expected platform skips.
  • Current-source package self-tests pass on a Unity 2022.3 consumer: EditMode 18/18 and PlayMode 5/5, including passive not_started polling and explicit-failure precedence. A Unity 6000.0 consumer passes its compile preflight 6/6, acceptance scenario 10/10, refresh/compile contract, PlayMode lifecycle recovery, final-health, and project-action consistency routes.

0.3.47

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

Changed

  • Released v0.3.47 package 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_match verdict with the requested-filter summary, direct counts, and one-refresh recovery guidance; unfiltered zero-test runs remain no_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.

Fixed

  • 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.

Validation

  • Consumer-project Unity validation passed the package self-test lane: EditMode 16/16, PlayMode 5/5, and the cold-discovery targeted EditMode smoke selected and passed 1/1 fully qualified test after one refresh.
  • Host Python unittest suite passed: 466 tests with 13 expected platform skips.
  • Public site Playwright checks passed: 42/42.
  • Release metadata consistency, documentation freshness, and public-release safety checks passed for 0.3.47.

0.3.46

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

Changed

  • Released v0.3.46 package metadata, server metadata, package manifests, and Git UPM examples.
  • Hardened unity_sdk_generated_diff_guard / sdk-generated-diff-guard with 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 typed invalid_generated_files evidence, and per-path rows report the selected diff mode, semantic-change state, and marker proof.

Fixed

  • 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_diagnosis now records log_idle_seconds, and project-health classification reports startup_modal_dialog_block with a dismiss_editor_startup_dialog_or_quit_editor_then_retry recovery 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.

Validation

  • Host regression passed 461 tests with 13 expected 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.

0.3.45

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

Changed

  • Released v0.3.45 package 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.45 source and tagged README. Existing helpers are verified before use, native Windows Codex blocks migrate from bash/run.sh to cmd.exe/the refresh .cmd without replacing unrelated config, and client restart plus live-tool proof is required before tests.

Fixed

  • 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 taskkill no longer uses the descendant-tree /T flag.
  • Added a safety-epoch, hash-verified helper install manifest and published the legacy server.py version marker last, so interrupted or mixed-version helper rollouts are refreshed instead of executed.

Validation

  • Host Python unittest suite passed: 452 tests with 13 expected 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

  • Added unity_sdk_generated_diff_guard and sdk-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.

0.3.44

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

Fixed

  • 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, explicit PYTHON overrides keep priority, and a forwarded APPDATA variable alone no longer misclassifies a POSIX host as Windows.
  • Made tcp_loopback responses 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.

Validation

  • Release metadata, documentation freshness, public-release safety, and public site checks passed for 0.3.44.
  • Host Python unittest suite passed: 430 tests with 13 expected skips.
  • Live Unity validation in a representative host project passed the GUI-fallback compile matrix (6/6) and the selected GUI subset: EditMode 778/778, PlayMode 279/279.

0.3.43

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

Changed

  • 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_settle with an explicit source and trust class. When bridge identity changes during post-request settle, compact and full responses report stale_risk plus a confirm_via_unity_playmode_state next 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.

Validation

  • Release metadata, public documentation, release-safety, host regression, and public-site checks passed before tagging.

0.3.42

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

Changed

  • Released v0.3.42 package metadata, server metadata, package manifests, and Git UPM examples.
  • Changed templates/smoke/run_post_change_validation.sh to run a closed-project batch-build-config-compile-matrix preflight before ensure-ready --open-editor when the runner would otherwise open Unity, keeping post-C#-edit compile failures out of GUI Safe Mode startup.

Validation

  • 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: 310 tests with 1 expected skip.
  • Same-host Unity validation passed against two consumer projects: a Unity 2022 package self-test lane with EditMode 14/14 and PlayMode 5/5, and a Unity 6000 post-change route with compile preflight 6/6, acceptance scenario 10/10, and contract scenario passed.

0.3.41

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

Changed

  • Released v0.3.41 package metadata, server metadata, package manifests, and Git UPM examples.
  • Made transport_response_missing and editor_idle_timeout compact by default while preserving full-payload recovery commands and tool arguments.
  • Changed unity_console_tail / request-console-tail to use path-backed Editor.log by 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_diagnosis output 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.

Validation

  • Release version consistency, release-doc freshness, and public-release safety checks passed for 0.3.41.
  • Host Python unittest suite: 309 tests passed with 1 expected skip.
  • Public site Playwright checks passed: 39/39.

0.3.40

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

Changed

  • Released v0.3.40 package metadata, server metadata, package manifests, and Git UPM examples.
  • Tightened --output compact batch 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-editor auto-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.log and 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_apiupdate recovery guidance, and pass -accept-apiupdate through 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.

Validation

  • 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.log console 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: 300 tests passed with 1 expected skip.
  • Public site Playwright checks passed: 39/39.

0.3.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

Changed

  • Released v0.3.39 package metadata, server metadata, package manifests, and Git UPM examples.
  • Added --output compact|full to batch helper CLI commands, including batch-compile, batch-compile-matrix, batch-build-config-compile-matrix, batch-editmode-tests, and batch-build-player. The default remains full; compact output emits the decision summary and artifact pointers without the full command vector or nested batch payload.

Validation

  • Release version consistency, release-doc freshness, and public-release safety checks passed for 0.3.39.
  • Host Python unittest suite: 291 tests passed with 1 expected 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.

0.3.38

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

Changed

  • Released v0.3.38 package 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 scenario scene_open steps 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 unless allowDirtySceneDiscard=true is explicit.

Validation

  • Release version consistency, release-doc freshness, and public-release safety checks passed for 0.3.38.
  • Host Python unittest suite: 288 tests passed with 1 expected 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 reporting unity.scene.open in 24 supported operations.

0.3.37

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

Changed

  • Released v0.3.37 package metadata, server metadata, package manifests, and Git UPM examples.
  • Scenario playmode_set steps now preserve the direct unity.playmode.set payload outcome in compact summaries, so enter calls that resolve as already_playing are visible without full payload recovery.
  • unity_scenario_run_and_wait compact decision verdicts now include a playmode_guard_summary; a passed scenario whose PlayMode entry reused an already-playing editor is marked with trust_class=stale_risk and a rerun recommendation when a fresh PlayMode start is required.

Validation

  • Release version consistency and release-doc freshness checks passed for 0.3.37.
  • Host Python unittest suite: 282 tests passed with 1 expected skip.
  • A Unity 2022.3 consumer-project local package validation passed fast package self-tests: EditMode 12/12 and PlayMode 5/5, plus a focused already-playing scenario guard probe with trust_class=stale_risk.
  • A Unity 6000 consumer-project local package post-change validation passed readiness, compile matrix 6/6, acceptance scenario 10/10, contract scenario, PlayMode/lifecycle checks, and cleanup/restore.

0.3.36

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

Changed

  • Released v0.3.36 package metadata, server metadata, package manifests, and Git UPM examples.
  • transport_response_missing errors now embed a compact final-status projection instead of the full final-status/artifact payload, while preserving the request-final-status command for full evidence recovery.
  • Discovery-enriched stale-session transport failures now replace generic retry recovery commands with the actionable ensure-ready --open-editor command when host/session evidence proves recovery is needed before retrying.
  • ensure-ready now 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-payload for 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_grep and request-console-grep now support source=editor_log / --source editor_log for path-backed Editor.log grep, and docs call out Unity Console clear-on-play and ring-buffer eviction false negatives.
  • unity_scenario_run_and_wait full-payload mode now omits duplicated run_start.steps by default; pass includeStepPayloads=true or --include-step-payloads to preserve that launch-time step copy.
  • templates/smoke/run_post_change_validation.sh now emits durable phase lines, quiet-tail cleanup/auxiliary heartbeats, and classifies bridge churn as non_blocking_churn or actionable_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 raw unity_build_player.

Validation

  • 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: 279 tests passed with 1 expected 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.

0.3.35

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

Changed

  • Released v0.3.35 package metadata, server metadata, package manifests, Git UPM examples, public site version references, and package documentation.
  • unity_status_summary now defaults to a compact polling payload for MCP callers and omits nested discovery, transport, state-group, timing, and artifact details unless includeFullPayload=true is 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_summary markers so agents can tell whether nested diagnostics were intentionally omitted.
  • Added includeFullPayload to the unity_status_summary tool schema and preserved the full previous nested summary shape for deep lifecycle and transport debugging.
  • Kept the CLI request-status-summary helper 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.

Validation

  • 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: 267 tests passed with 1 expected skip.
  • Public site Playwright checks passed: 39/39.

0.3.34

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

Changed

  • Released v0.3.34 package 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, and unity_tests_run_playmode now default to a compact operation summary that preserves authoritative post-settle verdict fields while omitting full _xuunity_lifecycle snapshots. Pass includeFullPayload=true to 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.

Validation

  • Host Python unittest suite: 267 tests passed with 1 expected 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/12 and PlayMode 5/5.

0.3.33

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

Changed

  • Released v0.3.33 package 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_wait compact/full payload semantics: public smoke helpers that need step-level evidence now request includeFullPayload, 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

  • Fixed native Windows CI routing for HostPlatformAdapter(platform_kind="linux") so WSL-simulated PID checks do not accidentally use the host Windows OpenProcess path 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.

Validation

  • Host Python unittest suite: 264 tests passed with 1 expected 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/12 and PlayMode 5/5.

0.3.32

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

Changed

  • Released v0.3.32 package metadata, server metadata, package manifests, and Git UPM examples.
  • unity_scenario_run_and_wait now 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 with verbose or includeFullPayload.
  • 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, and cold_start_reason so 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.version stays aligned with package metadata.

0.3.31

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

Changed

  • Released v0.3.31 package metadata, server metadata, package manifests, and Git UPM examples.

Fixed

  • 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-utility finally (covers every PlayerBuildInterface.CompilePlayerScripts caller, including matrix and scenario steps) and to the request-pump completion path (covers AssetDatabase.Refresh / BuildPipeline.BuildPlayer). Unity 6 already auto-cleared the bar; this restores parity on 2022.3.

0.3.30

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

Changed

  • Released v0.3.30 package metadata, server metadata, package manifests, and Git UPM examples.
  • Native Windows Codex config generation now uses cmd.exe and run_installed_or_refresh_xuunity_mcp.cmd; an existing Windows bash block is reported as windows_codex_launcher_mismatch instead of duplicated.
  • Windows setup docs now prefer .cmd, quote project paths, and call out PowerShell ExecutionPolicy risk for .ps1.
  • validate-setup now reports offline readiness scope and package import-state evidence instead of presenting manifest/config validation as live Unity readiness.

Fixed

  • 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-ready success and error payloads. A declared-but-unresolved package with a live bridgeless editor now recommends reopen_project_for_clean_resolve instead 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.

Validation

  • Host Python suite: 243 tests passed on macOS, with one expected native Windows .cmd smoke skipped on this host.

0.3.29

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

  • 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 reaches passed, 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.

Changed

  • Released v0.3.29 package metadata, server metadata, package manifests, and Git UPM examples.
  • Scenario JSON now accepts operation as an alias for kind and accepts object-shaped startPayload / pollPayload inputs, which are normalized for both Python MCP tool callers and direct Unity bridge callers.

Validation

  • Validated package EditMode self-tests on a temporary Unity 2022.3.67f2 project with the local com.xuunity.light-mcp package: 12/12 passed.
  • Validated an end-to-end temporary project hook scenario: request-scenario-validate returned valid, request-scenario-run-and-wait returned passed with poll_count=3, and compact summary promoted selected_tab, user_path, before_value, after_value, and cleanup_result=passed.
  • Re-ran the host Python suite after live Unity validation: 237 tests passed with one expected native Windows .cmd smoke skipped on macOS.

0.3.28

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

Changed

  • Released v0.3.28 package metadata, server metadata, package manifests, and Git UPM examples.

Changed

  • Removed the legacy bash wrapper body (xuunity_light_unity_mcp_legacy.sh) and the XUUNITY_LIGHT_UNITY_MCP_LEGACY_WRAPPER escape hatch after the Python launcher core was proven by green Windows, macOS, and Linux CI legs on v0.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.

0.3.27

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

Changed

  • Released v0.3.27 package metadata, server metadata, package manifests, and Git UPM examples.

Added

  • Added xuunity_light_unity_mcp.cmd and xuunity_light_unity_mcp.ps1 wrapper siblings using the proven run.cmd/run.ps1 Python discovery chain and executing templates/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_SECONDS watchdog 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).

Changed

  • 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 to server_setup_wizard to remove duplicate bash/python logic.
  • Shrank xuunity_light_unity_mcp.sh to a thin 28-line launcher with legacy flag checking and Python discovery (PYTHON env, py -3, python3, python, py). Preserved the previous bash body as xuunity_light_unity_mcp_legacy.sh (callable via XUUNITY_LIGHT_UNITY_MCP_LEGACY_WRAPPER=1).
  • Ported both multi-project runners into scripts/testing/run_multi_project.py (subcommands batch-compile-matrix and gui-test-subset) using ThreadPoolExecutor workers, removing xargs -P and enabling identical parallelism overlap across macOS, Linux, and Windows.
  • Expanded offline CI checks to run on master pushes and pull requests (previously tags only), smoke-executing templates/run.cmd and templates/run.ps1 on the Windows leg.

Fixed

  • Fixed parity test path normalization for Windows path representations, resolving WSL/POSIX temp differences, 8.3 short names (RUNNER~1), and JSON-escaped backslashes.

0.3.26

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

Changed

  • Released v0.3.26 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.25

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

Changed

  • Added test-results-table for 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.25 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.24

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

Changed

  • Fixed Windows Git Bash wrapper delegation so setup and server commands use the resolved Python interpreter, including python, python3, and py -3 launcher 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.24 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.23

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

Changed

  • Added unity.console.grep, unity_console_grep, request-console-grep, and a reusable console_grep scenario template for compact Unity console inspection without raw log dumping.
  • Added request-loading-timing and unity_loading_timing on top of console grep so agents can collect compact scene/loading timing evidence.
  • Added project-hook-scaffold and 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.23 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.22

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

Changed

  • Added centralized neutral helper installation with Codex/Claude delegate launchers, isolated .venv discovery, 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.22 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.21

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

Changed

  • 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_batch from passed_via_gui_fallback.
  • Released v0.3.21 package metadata, server metadata, package manifests, and Git UPM examples.
  • Tightened the MCP release gate so sync_release_version.py and check_release_version_consistency.py now treat the GitHub Pages site and listing metadata as release-bound surfaces that must be updated before tagging.

0.3.20

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

  • Added uninstall-plan and uninstall-apply host helper commands plus xuunity_uninstall_plan and xuunity_uninstall_apply MCP 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.

Changed

  • Renamed the public repository slug from FoxsterDev/xuunity-light-unity-mcp to FoxsterDev/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_unity client config block, selected helper install, and explicit project-level MCP setup after approval.
  • Released v0.3.20 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.19

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

  • 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

  • Fixed package EditMode self-test compilation on Unity versions where Object.DestroyImmediate is ambiguous between UnityEngine.Object and object.
  • Fixed package self-test smoke accounting so an explicit package self-test request fails on no_tests or total=0 instead 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.

Changed

  • Released v0.3.19 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.18

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

  • Added catalog-backed project_action scenario steps as a Unity-native scenario contract. Unity now resolves project_actions.yaml, enforces explicit approval for mutating actions, and executes the declared project_defined_hook without requiring host-side scenario rewriting.
  • Added host-side project_action scenario 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, payloadJson support, artifact registry helpers, and Unity-side raw project_action normalization.

Changed

  • Updated scenario schemas and docs so project_action is documented as a Unity-side contract with host preflight, rather than a host-only authoring convenience.
  • Released v0.3.18 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.17

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

  • Added sync_release_version.py to 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.py and host-suite coverage so stale current-version references fail before release tagging.

Changed

  • Released v0.3.17 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.16

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

  • Added Unity bridge/status compiler diagnostics: script_compilation_failed, compiler_error_count, recent_compiler_diagnostics, and compiler_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, and wait_for_idle_after.
  • Added scenario DSL dependency and cleanup support through dependsOn, runIfStepPassed, and cleanupSteps.
  • 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_unity server.

Changed

  • Scenario stopOnFirstFailure now jumps to cleanup steps when configured, so project state can be restored even after the scenario body fails.
  • Released v0.3.16 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.15

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

Changed

  • Added license-aware batch lane selection: license-capabilities, unity_license_capabilities, --batch-fallback-mode auto|off|require-batch, GUI fallback summaries, and Unity-side unity.build_player for player-build fallback when real batchmode is blocked.
  • Added XUUNITY_LIGHT_UNITY_MCP_INSTALL_TARGET=codex|claude|auto for wrapper helper resolution so Codex contexts prefer .codex-tools without breaking Claude-side .claude-tools installs.
  • Documented optional Codex/Codex-style MCP client wiring for trusted local Unity projects.
  • Released v0.3.15 package metadata, server metadata, package manifests, and Git UPM examples.

0.3.14

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

Changed

  • Released v0.3.14 package metadata with Unity 2021.3 as the default minimum and removed the hard com.unity.test-framework dependency.
  • 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, and restore-editor-state --require-closed.
  • Hardened public source-root/package-mode selection so the wrapper resolves the operation package source before generic AIRoot/templates paths.
  • 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 prodmode to pin the published package release tag, such as #v0.3.14, instead of a raw source commit SHA.

0.3.13

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

Changed

  • Restored Git UPM as the default production package source for project setup. init_xuunity_light_unity_mcp.sh --enable-project now enables the bridge without rewriting Packages/manifest.json.
  • Kept local file: package wiring behind explicit wrapper mode switches only: devmode for local MCP package iteration and prodmode for 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-android MCP-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.

0.3.12

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

Changed

  • Moved the Unity package from templates/unity-package to the registry-native packages/com.xuunity.light-mcp path.
  • 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, wrapper devmode / 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.

Migration Notes

  • 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.11 can continue using templates/unity-package; that old path is now migration-only.
  • To migrate a Unity project, replace ?path=/templates/unity-package#v0.3.11 with ?path=/packages/com.xuunity.light-mcp#v0.3.12, remove the com.xuunity.light-mcp entry from Packages/packages-lock.json, and let Unity re-resolve packages.

Notes

  • 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 remains v0.3.12.

0.3.11

  • Added wrapper help and agent workflow guidance for MCP devmode and prodmode package-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.ps1 launchers.

  • Replaced the zsh-only Unix launcher with a bash-compatible launcher for Linux/macOS.

  • Expanded docs/reference/FEATURES.md with 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.md source confidence, maturity terminology, and validation caveats.

  • Added AndreySkyFoxSidorov/UnifiedUnityMCP to docs/reference/COMPARISON.md as a broad but young Unity automation reference.

  • Added docs/agents/AGENT_WORKFLOWS.md to 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.

0.3.10

  • 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.

0.3.9

  • 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.