Skip to content

chore: bump version to 9.6.6#1047

Merged
github-actions[bot] merged 19 commits intomainfrom
release/v9.6.6
Apr 7, 2026
Merged

chore: bump version to 9.6.6#1047
github-actions[bot] merged 19 commits intomainfrom
release/v9.6.6

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions github-actions bot commented Apr 7, 2026

Automated version bump to 9.6.6.

Summary by Sourcery

Add index-based targeting and improved error reporting across components, physics, and VFX tools, harden reflection and script validation behaviors, and update tests, CI, and versioning.

New Features:

  • Allow selecting specific component, collider, joint, particle, line, and trail instances via a zero-based componentIndex parameter in Unity tools, CLI commands, and server APIs.
  • Support raw VFX actions and physics/material operations with componentIndex-aware routing to the correct Unity components.

Bug Fixes:

  • Fix duplicate-method detection to ignore constructor invocations and handle the new modifier correctly in script validation.
  • Prevent Unity crashes when reflecting on open generic types by returning minimal safe metadata instead of enumerating members.
  • Ensure physics raycast tests use isolated positions to avoid interference from unrelated scene objects.
  • Make prefabs CLI characterization test align with updated prefab save behavior.
  • Guard profiler category and frame timing fields behind Unity version checks to avoid API usage on older editors.

Enhancements:

  • Improve error messages across graphics, physics, VFX, components, and ProBuilder tools to consistently populate error fields and report out-of-range component indices with counts and type names.
  • Enable resolving object reference properties from bare asset GUID strings in ComponentOps.
  • Centralize VFX component lookup in shared helpers, including error construction, and consistently ensure renderer materials before operations.
  • Refine Unity reflection tests to use fully qualified type names for better robustness.

Build:

  • Bump MCP for Unity package, server, manifest, and README installation snippet to version 9.6.6.

CI:

  • Allow Unity test runner failures without hard-stopping the job, then parse the generated XML results to explicitly fail the workflow when tests fail or when no results are produced.

Tests:

  • Expand editor tests for script validation, graphics, physics, VFX, ProBuilder, scene hierarchy, Unity reflection, and UI management to cover new behaviors, error shapes, and componentIndex handling.

actions-user and others added 19 commits April 3, 2026 04:30
…933782887

chore: sync main (v9.6.5) into beta
1. Fix the bug mentioned in #956 and add index mentioned in #1014
…71343948

chore: update Unity package to beta version 9.6.6-beta.2
…14653622

chore: update Unity package to beta version 9.6.6-beta.3
SceneView.lastActiveSceneView is null in batch mode, so
stats_set_scene_debug correctly returns an error. Use Assume.That
to mark the test inconclusive rather than failing CI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…e count

- StatsSetSceneDebug_ValidMode test now asserts success when SceneView
  exists and correctly asserts failure when it doesn't (batch mode),
  instead of going inconclusive.
- Workflow now parses NUnit XML for failed=0 rather than trusting the
  runner exit code, which returns 2 for inconclusive tests (URP,
  ProBuilder, Volumes not installed in CI).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…#1045)

* Fix create_script validator false-positive on constructor invocations

The regex-based duplicate method signature check misidentified
`new Type(...)` constructor calls as method declarations, causing
valid C# like `new GameObject("A"); new GameObject("B");` to be
rejected. Capture the return-type token and skip when it is `new`.

Addresses #1044

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Address review: Ordinal comparison, add new-modifier + constructor test

Use string.Equals with StringComparison.Ordinal for the "new" check.
Add test combining `public new void Init()` with nearby constructor
invocations to guard against modifier vs return-type parsing regressions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…62948128

chore: update Unity package to beta version 9.6.6-beta.4
@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai bot commented Apr 7, 2026

Reviewer's Guide

Adds component-index aware selection across VFX, physics, and component management (CLI, server tools, and Unity editor), improves script and graphics handling robustness, adjusts tests and CI behavior, and bumps package/server versions to 9.6.6.

Sequence diagram for component_index-aware physics material assignment

sequenceDiagram
    actor Developer
    participant CLI_Physics as cli.physics.assign_material
    participant Server_Physics as manage_physics_service
    participant Unity_Tool as PhysicsMaterialOps

    Developer->>CLI_Physics: physics assign-material -t Player -m matPath -i 1
    CLI_Physics->>Server_Physics: manage_physics(action=assign_material, target, material_path, component_index=1)
    Server_Physics->>Unity_Tool: Assign(params{ target, materialPath, collider_type, componentIndex=1 })

    Unity_Tool->>Unity_Tool: GameObjectLookup.FindByTarget(target, searchMethod)
    alt material3D available
        Unity_Tool->>Unity_Tool: FindCollider3D(go, colliderType, index=1)
        alt valid index
            Unity_Tool-->>Server_Physics: SuccessResponse(collider3D updated)
        else invalid index
            Unity_Tool->>Unity_Tool: compute count3D = go.GetComponents(type3D).Length
            Unity_Tool-->>Server_Physics: ErrorResponse("component_index 1 out of range. Found count3D ...")
        end
    else material2D available
        Unity_Tool->>Unity_Tool: FindCollider2D(go, colliderType, index=1)
        alt valid index
            Unity_Tool-->>Server_Physics: SuccessResponse(collider2D updated)
        else invalid index
            Unity_Tool->>Unity_Tool: compute count2D = go.GetComponents(type2D).Length
            Unity_Tool-->>Server_Physics: ErrorResponse("component_index 1 out of range. Found count2D ...")
        end
    else
        Unity_Tool-->>Server_Physics: ErrorResponse("No suitable collider found ...")
    end

    Server_Physics-->>CLI_Physics: result (success or error)
    CLI_Physics-->>Developer: formatted output
Loading

Sequence diagram for component_index-aware VFX particle info

sequenceDiagram
    actor Developer
    participant CLI_Vfx as cli.vfx.particle_info
    participant Server_Vfx as manage_vfx_service
    participant Unity_Vfx as ParticleRead
    participant VfxCommon as ManageVfxCommon
    participant ParticleCommon as ParticleCommon

    Developer->>CLI_Vfx: vfx particle info "Effects" --component-index 1
    CLI_Vfx->>Server_Vfx: manage_vfx(action=particle_get_info, target, component_index=1)
    Server_Vfx->>Unity_Vfx: GetInfo(params{ target, componentIndex=1 })

    Unity_Vfx->>ParticleCommon: FindParticleSystem(params)
    ParticleCommon->>VfxCommon: FindComponent<ParticleSystem>(params)
    VfxCommon->>VfxCommon: FindTargetGameObject(params)
    VfxCommon->>VfxCommon: idx = CoerceIntNullable(componentIndex)
    alt idx within range
        VfxCommon-->>ParticleCommon: ParticleSystem at index
        ParticleCommon-->>Unity_Vfx: ParticleSystem
        Unity_Vfx->>ParticleCommon: FindParticleSystemRenderer(ps)
        Unity_Vfx-->>Server_Vfx: success payload with info
    else idx out of range
        VfxCommon-->>ParticleCommon: null
        ParticleCommon->>VfxCommon: FindComponentError<ParticleSystem>(params)
        VfxCommon-->>ParticleCommon: "component_index N out of range..."
        ParticleCommon-->>Unity_Vfx: error message
        Unity_Vfx-->>Server_Vfx: { success=false, message }
    end

    Server_Vfx-->>Developer: formatted result
Loading

Updated class diagram for VFX component discovery and error handling

classDiagram
    class ManageVfxCommon {
        +GameObject FindTargetGameObject(JObject @params)
        +Material FindMaterialByPath(string path)
        +T FindComponent~T~(JObject @params)
        +string FindComponentError~T~(JObject @params)
    }

    class ParticleCommon {
        +ParticleSystem FindParticleSystem(JObject @params)
        +string FindParticleSystemError(JObject @params)
        +ParticleSystemRenderer FindParticleSystemRenderer(ParticleSystem ps)
        +ParticleSystem.MinMaxCurve ParseMinMaxCurve(JToken token, float defaultValue)
    }

    class LineRead {
        +LineRenderer FindLineRenderer(JObject @params)
        +string FindLineRendererError(JObject @params)
        +object GetInfo(JObject @params)
    }

    class TrailRead {
        +TrailRenderer FindTrailRenderer(JObject @params)
        +string FindTrailRendererError(JObject @params)
        +object GetInfo(JObject @params)
    }

    ManageVfxCommon ..> ParticleCommon : used by
    ManageVfxCommon ..> LineRead : used by
    ManageVfxCommon ..> TrailRead : used by

    ParticleCommon ..> ManageVfxCommon : calls FindComponent
    LineRead ..> ManageVfxCommon : calls FindComponent
    TrailRead ..> ManageVfxCommon : calls FindComponent

    class ParticleWrite {
        +object SetMain(JObject @params)
        +object SetEmission(JObject @params)
        +object SetShape(JObject @params)
        +object SetColorOverLifetime(JObject @params)
        +object SetSizeOverLifetime(JObject @params)
        +object SetVelocityOverLifetime(JObject @params)
        +object SetNoise(JObject @params)
        +object SetRenderer(JObject @params)
        -void EnsureParticleRendererMaterial(ParticleSystemRenderer renderer)
    }

    class ParticleRead {
        +object GetInfo(JObject @params)
    }

    class ParticleControl {
        +object EnableModule(JObject @params)
        +object Control(JObject @params, string action)
        +object AddBurst(JObject @params)
        +object ClearBursts(JObject @params)
    }

    class LineWrite {
        +object SetPositions(JObject @params)
        +object AddPosition(JObject @params)
        +object SetPosition(JObject @params)
        +object SetWidth(JObject @params)
        +object SetColor(JObject @params)
        +object SetMaterial(JObject @params)
        +object SetProperties(JObject @params)
        +object Clear(JObject @params)
    }

    class LineCreate {
        +object CreateLine(JObject @params)
        +object CreateCircle(JObject @params)
        +object CreateArc(JObject @params)
        +object CreateBezier(JObject @params)
    }

    class TrailWrite {
        +object SetTime(JObject @params)
        +object SetWidth(JObject @params)
        +object SetColor(JObject @params)
        +object SetMaterial(JObject @params)
        +object SetProperties(JObject @params)
    }

    class TrailControl {
        +object Clear(JObject @params)
        +object Emit(JObject @params)
    }

    ParticleWrite ..> ParticleCommon : uses
    ParticleRead ..> ParticleCommon : uses
    ParticleControl ..> ParticleCommon : uses

    LineWrite ..> LineRead : uses
    LineCreate ..> LineRead : uses

    TrailWrite ..> TrailRead : uses
    TrailControl ..> TrailRead : uses
Loading

Updated class diagram for component_index handling in editor physics and components

classDiagram
    class PhysicsMaterialOps {
        +object Assign(JObject @params)
        -Collider FindCollider3D(GameObject go, string colliderType, int? index)
        -Collider2D FindCollider2D(GameObject go, string colliderType, int? index)
    }

    class JointOps {
        +object ConfigureJoint(JObject @params)
        +object RemoveJoint(JObject @params)
        -Component ResolveJoint(GameObject go, string jointTypeStr, int? index, out int foundCount)
    }

    class ManageComponents {
        -object RemoveComponent(JObject @params, JToken targetToken, string searchMethod)
        -object SetProperty(JObject @params, JToken targetToken, string searchMethod)
    }

    class ComponentOps {
        +bool RemoveComponent(GameObject targetGo, System.Type type, out string error)
        +bool SetObjectReference(SerializedProperty prop, JToken value, object context, out string error)
        -bool IsHexString(string str)
    }

    PhysicsMaterialOps ..> GameObject : operates on
    JointOps ..> GameObject : operates on
    ManageComponents ..> ComponentOps : uses

    class UnityReflect {
        -object GetTypeInfo(ToolParams p)
        -object GetMemberInfo(ToolParams p)
    }

    UnityReflect ..> System.Type : reflection

    class FrameTimingOps {
        +object GetFrameTiming(JObject @params)
    }

    class CounterOps {
        -string[] ValidCategories
        -ProfilerCategory GetCategory(string category)
    }

    FrameTimingOps ..> UnityEngine.FrameTimingManager : uses
    CounterOps ..> UnityEngine.Profiling.ProfilerCategory : maps

    class ManageScript {
        -bool TryComputeMethodSpan(...)
        -void CheckDuplicateMethodSignatures(string contents, System.Collections.Generic.List~string~ errors)
    }

    ManageScript ..> System.Text.RegularExpressions.Regex : uses
Loading

File-Level Changes

Change Details Files
Support targeting specific component instances via componentIndex across VFX, physics, and general component operations (CLI, server tools, and Unity editor).
  • Extend CLI commands for VFX, physics, and components with a --component-index/-i option and propagate this field into tool request payloads.
  • Update server-side manage_components, manage_physics, and manage_vfx tools to accept optional component_index parameters and forward them as componentIndex to Unity.
  • Update Unity editor-side tools (ManageComponents, PhysicsMaterialOps, JointOps, ManageVfxCommon, ParticleCommon, LineRead/Write/Create, TrailRead/Write/Control) to honor componentIndex/component_index when selecting colliders, joints, components, and renderers, including range and error handling.
Server/src/cli/commands/vfx.py
Server/src/cli/commands/component.py
Server/src/cli/commands/physics.py
Server/src/services/tools/manage_components.py
Server/src/services/tools/manage_physics.py
Server/src/services/tools/manage_vfx.py
MCPForUnity/Editor/Tools/Physics/PhysicsMaterialOps.cs
MCPForUnity/Editor/Tools/Physics/JointOps.cs
MCPForUnity/Editor/Tools/ManageComponents.cs
MCPForUnity/Editor/Tools/Vfx/ManageVfxCommon.cs
MCPForUnity/Editor/Tools/Vfx/ParticleCommon.cs
MCPForUnity/Editor/Tools/Vfx/ParticleControl.cs
MCPForUnity/Editor/Tools/Vfx/ParticleRead.cs
MCPForUnity/Editor/Tools/Vfx/ParticleWrite.cs
MCPForUnity/Editor/Tools/Vfx/LineRead.cs
MCPForUnity/Editor/Tools/Vfx/LineWrite.cs
MCPForUnity/Editor/Tools/Vfx/LineCreate.cs
MCPForUnity/Editor/Tools/Vfx/TrailRead.cs
MCPForUnity/Editor/Tools/Vfx/TrailWrite.cs
MCPForUnity/Editor/Tools/Vfx/TrailControl.cs
Improve error messages, edge-case handling, and test robustness in graphics, script validation, physics, ProBuilder, scene hierarchy, and reflection tools.
  • Switch many Unity tool responses/tests from using a 'message' field to 'error' and update expectations accordingly.
  • Harden graphics pipeline, stats, and probe tests to account for missing SceneView, URP/HDRP, or wrong components, and adjust ManageGraphics error assertions.
  • Refine physics raycast test setup to avoid hitting unintended scene objects and adjust other tests to assert on updated error behavior.
  • Add new script validation tests and update duplicate-method detection to properly ignore constructor invocations and handle 'new' modifiers; fix method span computation around attributes.
  • Tolerate ProBuilder not being installed in tests and improve ManageScene multi-scene screenshot error expectations.
  • Update UnityReflect tests to pass fully qualified type names and add guards for open generic types to avoid Mono crashes when reflecting types/members.
  • Make profiler counters and frame timing operations conditional on Unity version symbols to avoid unsupported API usage.
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/ManageGraphicsTests.cs
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/ManagePhysicsTests.cs
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/ManageProBuilderTests.cs
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/ManageSceneHierarchyPagingTests.cs
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/ManageSceneMultiSceneTests.cs
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/UnityReflectTests.cs
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/ManageScriptValidationTests.cs
MCPForUnity/Editor/Tools/ManageScript.cs
MCPForUnity/Editor/Tools/UnityReflect.cs
MCPForUnity/Editor/Tools/Profiler/Operations/CounterOps.cs
MCPForUnity/Editor/Tools/Profiler/Operations/FrameTimingOps.cs
Adjust UXML and scene-related tests to be more tolerant of Unity editor behaviors and logging.
  • Relax UXML content equality assertions to check for key elements/attributes rather than exact string matches, due to EnsureEditorExtensionMode injecting attributes.
  • Ensure tests that create invalid UXML structures ignore Unity importer error logs so they can still assert on MCP validation warnings.
  • Update ManageUITests and ManageScene tests to look for errors in the correct response field and to better handle editor log output.
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/ManageUITests.cs
TestProjects/UnityMCPTests/Assets/Tests/EditMode/Tools/ManageSceneHierarchyPagingTests.cs
Improve object-reference resolution for GUID strings and adjust prefab CLI characterization tests.
  • Extend ComponentOps.SetObjectReference to treat 32-character hex strings as asset GUIDs (via AssetDatabase.GUIDToAssetPath) before falling back to scene lookup.
  • Update CLI characterization test for prefabs to call prefab save without the --force flag, matching current CLI behavior.
MCPForUnity/Editor/Helpers/ComponentOps.cs
Server/tests/test_cli_commands_characterization.py
Tighten CI behavior for Unity tests and bump package/server versions to 9.6.6.
  • Allow the Unity test runner GitHub Action step to continue-on-error but add a follow-up shell step that parses the XML results, reports a clear summary, and fails the job when tests fail or when no results are produced.
  • Bump package, server, manifest, and README uvx pin versions from 9.6.5 to 9.6.6.
  • Extend VFX CLI top-level keys whitelist to include componentIndex.
.github/workflows/unity-tests.yml
MCPForUnity/package.json
Server/pyproject.toml
Server/README.md
manifest.json
Server/src/cli/commands/vfx.py
Server/uv.lock

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 1 issue

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="MCPForUnity/Editor/Tools/Vfx/ManageVfxCommon.cs" line_range="35-39" />
<code_context>
+            return go.GetComponent<T>();
+        }
+
+        public static string FindComponentError<T>(JObject @params) where T : Component
+        {
+            string typeName = typeof(T).Name;
+            GameObject go = FindTargetGameObject(@params);
+            if (go == null) return $"{typeName} not found";
+            int? idx = ParamCoercion.CoerceIntNullable(@params["componentIndex"] ?? @params["component_index"]);
+            if (idx.HasValue)
</code_context>
<issue_to_address>
**suggestion:** Differentiate between missing GameObject and missing component in error messages.

When `FindTargetGameObject(@params)` returns null, the method currently returns `"{typeName} not found"`, which is the same message used when the GameObject exists but the component is missing. This makes it hard to tell whether the issue is the search target or the component. Consider a distinct message for the null GameObject case (e.g. including the target token), and reserve something like `"{typeName} not found on '<name>'"` for when the GameObject is found but lacks the component. This will make CLI errors more actionable and consistent with other tools.

Suggested implementation:

```csharp
            GameObject go = FindTargetGameObject(@params);
            if (go == null)
            {
                // Try to surface the original target identifier for better diagnostics
                var targetToken = @params["target"]
                                  ?? @params["gameObject"]
                                  ?? @params["game_object"];
                var targetDescription = targetToken != null
                    ? targetToken.ToString()
                    : "<unknown>";

                return $"Target GameObject '{targetDescription}' not found for component type '{typeName}'";
            }

```

To fully align with your comment about reserving messages like `"{typeName} not found on '<name>'"` for the case where the GameObject exists but the component is missing, you should also:
1. Update the branch in `FindComponentError<T>` that handles "component not found" to return a message similar to `return $"{typeName} not found on '{go.name}'";`.
2. If you have an index-based component lookup in this method, consider providing a specific message for out-of-range indices, e.g. `return $"{typeName} at index {idx.Value} not found on '{go.name}'";`.

These additional changes should be made inside the same `FindComponentError<T>` method, in the branches that currently return the generic `"{typeName} not found"` string when the GameObject is non-null but the component lookup fails.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +35 to +39
public static string FindComponentError<T>(JObject @params) where T : Component
{
string typeName = typeof(T).Name;
GameObject go = FindTargetGameObject(@params);
if (go == null) return $"{typeName} not found";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Differentiate between missing GameObject and missing component in error messages.

When FindTargetGameObject(@params) returns null, the method currently returns "{typeName} not found", which is the same message used when the GameObject exists but the component is missing. This makes it hard to tell whether the issue is the search target or the component. Consider a distinct message for the null GameObject case (e.g. including the target token), and reserve something like "{typeName} not found on '<name>'" for when the GameObject is found but lacks the component. This will make CLI errors more actionable and consistent with other tools.

Suggested implementation:

            GameObject go = FindTargetGameObject(@params);
            if (go == null)
            {
                // Try to surface the original target identifier for better diagnostics
                var targetToken = @params["target"]
                                  ?? @params["gameObject"]
                                  ?? @params["game_object"];
                var targetDescription = targetToken != null
                    ? targetToken.ToString()
                    : "<unknown>";

                return $"Target GameObject '{targetDescription}' not found for component type '{typeName}'";
            }

To fully align with your comment about reserving messages like "{typeName} not found on '<name>'" for the case where the GameObject exists but the component is missing, you should also:

  1. Update the branch in FindComponentError<T> that handles "component not found" to return a message similar to return $"{typeName} not found on '{go.name}'";.
  2. If you have an index-based component lookup in this method, consider providing a specific message for out-of-range indices, e.g. return $"{typeName} at index {idx.Value} not found on '{go.name}'";.

These additional changes should be made inside the same FindComponentError<T> method, in the branches that currently return the generic "{typeName} not found" string when the GameObject is non-null but the component lookup fails.

@github-actions github-actions bot merged commit 73eb27a into main Apr 7, 2026
1 check passed
@github-actions github-actions bot deleted the release/v9.6.6 branch April 7, 2026 03:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants