Skip to content

fix: Keep Go and C# complexity checks under fifteen#1403

Merged
hatayama merged 5 commits into
v3-betafrom
refactor/reduce-complexity
Jun 25, 2026
Merged

fix: Keep Go and C# complexity checks under fifteen#1403
hatayama merged 5 commits into
v3-betafrom
refactor/reduce-complexity

Conversation

@hatayama

@hatayama hatayama commented Jun 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • Keep Go and C# code complexity checks aligned at a stricter threshold of 15.
  • Reduce existing complexity hotspots so the new threshold passes cleanly across the branch.

User Impact

  • Contributors get earlier feedback when Go or C# code grows too complex to review safely.
  • The project now has a consistent complexity gate for CLI and Unity package code before review and CI.

Changes

  • Split high-complexity Go CLI flows into smaller dispatch, retry, launch option, metadata, and error classification helpers.
  • Split high-complexity Unity C# parsing, migration planning, input replay, mouse UI, and dynamic-code response paths into smaller helpers.
  • Update the complexity script, CI artifact generation, Go cyclop config, and C# CA1502 defaults to use 15.

Verification

  • CODE_COMPLEXITY_FAIL_ON_EXCEEDED=true scripts/check-code-complexity.sh
  • scripts/check-go-cli.sh
  • dotnet test tests/UnityCliLoop.CodeComplexity.Tests/UnityCliLoop.CodeComplexity.Tests.csproj --configuration Release
  • cli/dist/darwin-arm64/uloop compile --project-path "$(git rev-parse --show-toplevel)"
  • cli/dist/darwin-arm64/uloop run-tests --project-path "$(git rev-parse --show-toplevel)" --test-mode EditMode --filter-type regex --filter-value ".*(SourceShaperTests|PreUsingResolver.*Tests|DynamicCodeLiteralHoisterTests|ExecuteDynamicCodeUseCaseTests|ControlPlayModeUseCaseTests|ThirdPartyToolMigrationRulesTests|ThirdPartyToolMigrationFileServiceTests).*"
  • cli/dist/darwin-arm64/uloop run-tests --project-path "$(git rev-parse --show-toplevel)" --test-mode PlayMode --filter-type regex --filter-value ".*SimulateMouseUiTests.*"
  • /Users/a12115/dotfiles/.claude/skills/autoreview/scripts/autoreview --mode branch --base origin/v3-beta

Review in cubic

hatayama added 4 commits June 25, 2026 20:35
Split large dispatch, launch, retry, and IPC response flows into focused helpers so the advisory cyclomatic complexity check passes without changing command behavior.
Split large Unity-side migration and input simulation flows into focused helpers so the CA1502 complexity gate passes while preserving existing behavior.
Split CLI completion, error classification, skills dispatch, value conversion, and request metadata test helpers so the stricter cyclomatic complexity threshold can pass.
Refactor remaining Unity complexity hotspots into smaller parsing, planning, input, and response-building helpers so the stricter CA1502 limit can pass. Update the Go, C#, script, and CI complexity defaults to enforce the new threshold consistently.
@coderabbitai

coderabbitai Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR lowers the configured code-complexity limit to 15 and splits CLI, third-party migration, dynamic-code, and input/control flows into helper methods, state objects, and smaller dispatch paths. It also updates replay, simulation, play-mode, keyboard-symbol, and serialized-property helpers.

Changes

Code-complexity threshold update

Layer / File(s) Summary
Threshold update
.github/workflows/code-complexity.yml, cli/.golangci-complexity.yml, scripts/check-code-complexity.sh, tools/UnityCliLoop.CodeComplexity/CodeComplexityAnalyzerRunner.cs, tools/UnityCliLoop.CodeComplexity/CodeComplexityModels.cs, tools/UnityCliLoop.CodeComplexity/CommandLineOptions.cs
The threshold used by workflow, scripts, analyzer defaults, and help text is changed from 25 to 15.

CLI command routing and Unity connection plumbing

Layer / File(s) Summary
Global routing and completion
cli/internal/cli/run.go, cli/internal/cli/run_dispatch.go, cli/internal/cli/completion.go
RunProjectLocal delegates global-info and pre-connection handling, and completion requests split into list, command, and install helpers.
Launch parsing and orchestration
cli/internal/cli/launch.go, cli/internal/cli/launch_options.go, cli/internal/cli/launch_test.go
Launch argument parsing, recovery cleanup, running-process detection, readiness waiting, and validation tests are split into separate helpers.
Skills routing and value conversion
cli/internal/cli/skills.go, cli/internal/cli/skills_dispatch.go, cli/internal/cli/tools.go, cli/internal/cli/tools_test.go
Skills subcommands and per-skill install steps are routed through helper functions, and value conversion delegates boolean, array, and object parsing.
Retry and error handling
cli/internal/cli/connection_retry.go, cli/internal/cli/connection_retry_flow.go, cli/internal/cli/error_envelope.go, cli/internal/cli/error_envelope_classification.go, cli/internal/unityipc/client.go, cli/internal/unityipc/client_test.go
Connection retry decisions, error classification, accepted-response reads, and client metadata tests are split into helper functions.

Third-party tool migration scanning and planning

Layer / File(s) Summary
Migration candidate scanning
Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationArgumentRules.cs, Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationDetectionRules.cs, Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationTimingInvocationRules.cs
Attribute arguments, migration fragments, and member-target parsing are moved into literal-aware helper scanners.
Scan state and analyzers
Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationAssemblyUsageAnalyzer.cs, Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationAssemblyUsageAsyncAnalyzer.cs, Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationAssemblyUsageScanState.cs
Source facts and reference requirements are accumulated in ThirdPartyToolMigrationAssemblyUsageScanState and consumed by the sync and async analyzers.
Target scanning and requirement collection
Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationTargetScanner.cs, Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationFastAssemblyRequirementCollector.cs
The target scanner creates scan state, runs staged C# and asmdef checks, and the fast requirement collector returns structured screenshot and tool-contract requirements.
Migration context and plan building
Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationModels.cs, Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationCSharpRules.cs, Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationPlanBuilder.cs
Migration models use shared null guards, legacy C# rewrites run through a capability-driven context, and plan building accumulates file results.

Dynamic code and source scanning helpers

Layer / File(s) Summary
Literal hoisting
Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/DynamicCompilation/DynamicCodeLiteralHoister.cs
Regular-string escapes, interpolated-string advancement, and complex escape decoding are split into helper methods and result structs.
Source scanning
Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/DynamicCompilation/PreUsingResolver.cs, Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/DynamicCompilation/SourceShaper.cs
Using-directive extraction, type-identifier scanning, top-level source classification, and interpolation-hole skipping move into smaller helpers.
Execution response shaping
Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/ExecuteDynamicCodeUseCase.cs
Execution results are converted to responses through extracted failure, diagnostic, exception, and namespace-hint helpers.
Awaitable materialization
Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/Execution/AwaitableHelper.cs
Task, ValueTask, ValueTask, and custom-awaitable handling are split into dedicated await and read helpers.

Input replay, simulation, and control helpers

Layer / File(s) Summary
Replay frame and pointer activity
Packages/src/Editor/FirstPartyTools/Common/InputRecording/InputReplayer.cs
ApplyUiEvents builds a UiReplayFrame, applies pointer activity first, and moves release handling into a separate helper.
Mouse UI target resolution
Packages/src/Editor/FirstPartyTools/SimulateMouseUi/SimulateMouseUiUseCase.cs, Assets/Tests/PlayMode/SimulateMouseUiTests.cs
Mouse UI simulation now validates through helpers, resolves pressable targets through a shared result struct, and dispatches click and long-press pointer events through extracted helpers, with a regression test for bypass-raycast click-only targets.
Play mode action results
Packages/src/Editor/FirstPartyTools/ControlPlayMode/ControlPlayModeUseCase.cs
Play-mode actions return either a prebuilt response or state-only result through ControlPlayModeActionResult.
Keyboard symbol lookup
Packages/src/Runtime/SimulateKeyboard/KeySymbolMap.cs
Modifier and backspace/delete symbols are resolved from a platform-symbol lookup table before falling back to the existing symbol map.

Serialized property value dispatch

Layer / File(s) Summary
Property value dispatch
Packages/src/Editor/FirstPartyTools/FindGameObjects/GameObjectFinder/ComponentPropertySerializer.cs
Serialized property values are routed through primitive and Unity-struct helpers, and Quaternion becomes the default struct case.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 1.20% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed The description is detailed and directly matches the changeset, covering the threshold update and related refactors.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly matches the main change: tightening Go and C# complexity checks to a threshold of fifteen.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/reduce-complexity

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

2 issues found across 43 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="cli/internal/cli/launch_options.go">

<violation number="1" location="cli/internal/cli/launch_options.go:101">
P3: Launch option value parsing duplicates existing CLI flag parsing logic instead of reusing the shared path. This increases maintenance risk and can cause inconsistent argument handling across commands.</violation>
</file>

Note: This PR contains a large number of files. cubic only reviews up to 40 files per PR, so some files may not have been reviewed. cubic prioritizes the most important files to review.
On a pro plan you can use ultrareview for larger PRs.

Re-trigger cubic

Comment thread cli/internal/cli/launch_options.go Outdated
Comment thread cli/internal/cli/launch_options.go

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 8

🧹 Nitpick comments (1)
Packages/src/Editor/FirstPartyTools/FindGameObjects/GameObjectFinder/ComponentPropertySerializer.cs (1)

119-141: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Quaternion-as-default is acceptable but couples the predicate and switch.

GetUnityStructSerializedPropertyValue is only reachable when IsUnityStructSerializedPropertyType returns true, so the asserted Quaternion default is safe today. Note the latent coupling: adding a new struct type to the predicate without a matching case here would silently return quaternionValue in release builds (the assert is compiled out). Keeping these two members in sync is required. The Debug.Assert precondition use itself is appropriate.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@Packages/src/Editor/FirstPartyTools/FindGameObjects/GameObjectFinder/ComponentPropertySerializer.cs`
around lines 119 - 141, `GetUnityStructSerializedPropertyValue` currently relies
on a `Quaternion` default branch that is only safe because
`IsUnityStructSerializedPropertyType` filters the inputs, creating a hidden
coupling between the predicate and the switch. Keep these two members in sync by
updating `GetUnityStructSerializedPropertyValue` whenever
`IsUnityStructSerializedPropertyType` changes, and prefer making the default
branch explicitly match the supported `SerializedPropertyType.Quaternion` case
so any future struct type additions require an intentional new case rather than
silently falling through to `quaternionValue` in release builds. The existing
`Debug.Assert` precondition is fine; the fix is to ensure the switch remains
exhaustive for the predicate’s accepted types.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cli/internal/cli/launch_options.go`:
- Around line 68-78: The applyLaunchMaxDepthOption parser currently accepts any
negative integer for --max-depth, but only -1 should be allowed as the unlimited
sentinel. Update the validation in applyLaunchMaxDepthOption to reject values
below -1 before assigning options.maxDepth, returning invalidValueArgumentError
for out-of-range input while preserving the existing handling for valid integers
and the nextLaunchOptionIndex flow.

In `@cli/internal/cli/tools.go`:
- Around line 307-312: The convertObjectValue helper currently accepts JSON null
because json.Unmarshal into the parsed map returns a nil map without error, so
object-typed options can slip through as non-objects. Update convertObjectValue
to explicitly reject null before returning, and only accept values that
unmarshal to a non-nil map; keep the invalidValueArgumentError path for option
and value validation so callers still get a consistent error for
convertObjectValue in tools.go.

In
`@Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/DynamicCompilation/SourceShaper.cs`:
- Around line 166-207: The attributed type detection in
TryAnalyzeAttributedTypeDeclaration is missing support for access modifiers
between the attribute block and the type keyword, so cases like attributed
public classes are misclassified. After SkipAttributeBlock and SkipWhitespace,
add the same access-modifier skipping logic used by
TryAnalyzeModifiedTypeDeclaration (for example via SkipAccessModifiers and then
checking IsTypeDeclarationKeyword on the returned position) before setting
result.HasTypeDeclaration and calling SkipTopLevelBlock.

In
`@Packages/src/Editor/FirstPartyTools/FindGameObjects/GameObjectFinder/ComponentPropertySerializer.cs`:
- Around line 112-116: The `ComponentPropertySerializer` code uses an
unqualified `Debug.Assert` in the primitive string branch, while the rest of the
class already uses `UnityEngine.Debug.Assert` consistently. Update the assertion
in the `SerializeProperty` flow to use the fully qualified
`UnityEngine.Debug.Assert` reference so the style matches the other assertions
in this file.

In
`@Packages/src/Editor/FirstPartyTools/SimulateMouseUi/SimulateMouseUiUseCase.cs`:
- Around line 485-495: The click simulation in SimulateMouseUiUseCase should
always send pointerUp for click-only targets, even when PressTarget is null.
Update the pointer handling around the resolvedTargets block so the pointerUp
dispatch uses the stored click/press target from pointerData (set by
CreateResolvedPressablePointerTargets) rather than being gated only on
PressTarget; keep the existing pointerDown behavior tied to
PressTarget/RawTarget, but ensure IPointerUpHandler and IPointerClickHandler
targets still receive pointerUp.

In
`@Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationArgumentRules.cs`:
- Around line 103-133: The comma handling in ConsumeCharacter currently ignores
comments, so top-level splitting can break on commas inside block or single-line
comments. Update ThirdPartyToolMigrationArgumentRules to recognize and skip
comment regions before treating a comma as an argument separator, either by
adding comment scan modes alongside the existing literal/nesting handling or by
reusing the same code-text masking used elsewhere. Make sure the fix keeps
TryMigrateLegacyToolAttributeList receiving intact argument segments from
ThirdPartyToolMigrationAttributeRules.

In
`@Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationFastAssemblyRequirementCollector.cs`:
- Around line 530-583: The assembly-scoped legacy screenshot/capture/timeout
checks in ThirdPartyToolMigrationFastAssemblyRequirementCollector are ignoring
legacy aliases because they pass Array.Empty<string>() into the
ThirdPartyToolMigrationRules methods. Update
CollectFastFirstPartyScreenshotRequirementsAsync to thread
scanState.AssemblyScopedLegacyAliasesByDirectory through and use
GetAssemblyScopedNames(..., assemblyDirectory) when calling
HasLegacyEditorWindowCaptureUtilitySourceTarget,
HasLegacyScreenshotSourceTarget, and
HasLegacyEditorWindowCaptureUtilityTimeoutMigration so alias-qualified usages
are detected consistently with the scan-state paths.
- Around line 518-527: The FirstPartyScreenshotRequirementScan result currently
treats timeout migrations as affecting source requirements but not the target
flag, so a timeout-only case can be missed. Update the return in
ThirdPartyToolMigrationFastAssemblyRequirementCollector to include
hasTimeoutMigration in the HasMigrationTarget calculation alongside the existing
source-target checks, using the FirstPartyScreenshotRequirementScan construction
as the place to fix it.

---

Nitpick comments:
In
`@Packages/src/Editor/FirstPartyTools/FindGameObjects/GameObjectFinder/ComponentPropertySerializer.cs`:
- Around line 119-141: `GetUnityStructSerializedPropertyValue` currently relies
on a `Quaternion` default branch that is only safe because
`IsUnityStructSerializedPropertyType` filters the inputs, creating a hidden
coupling between the predicate and the switch. Keep these two members in sync by
updating `GetUnityStructSerializedPropertyValue` whenever
`IsUnityStructSerializedPropertyType` changes, and prefer making the default
branch explicitly match the supported `SerializedPropertyType.Quaternion` case
so any future struct type additions require an intentional new case rather than
silently falling through to `quaternionValue` in release builds. The existing
`Debug.Assert` precondition is fine; the fix is to ensure the switch remains
exhaustive for the predicate’s accepted types.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e8134537-6940-4cdd-bc17-8884af28f6bf

📥 Commits

Reviewing files that changed from the base of the PR and between 7107fa3 and 02375b5.

⛔ Files ignored due to path filters (2)
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationAssemblyUsageScanState.cs.meta is excluded by none and included by none
  • tools/UnityCliLoop.CodeComplexity/CodeMetricsConfig.txt is excluded by none and included by none
📒 Files selected for processing (41)
  • .github/workflows/code-complexity.yml
  • Packages/src/Editor/FirstPartyTools/Common/InputRecording/InputReplayer.cs
  • Packages/src/Editor/FirstPartyTools/ControlPlayMode/ControlPlayModeUseCase.cs
  • Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/DynamicCompilation/DynamicCodeLiteralHoister.cs
  • Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/DynamicCompilation/PreUsingResolver.cs
  • Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/DynamicCompilation/SourceShaper.cs
  • Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/ExecuteDynamicCodeUseCase.cs
  • Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/Execution/AwaitableHelper.cs
  • Packages/src/Editor/FirstPartyTools/FindGameObjects/GameObjectFinder/ComponentPropertySerializer.cs
  • Packages/src/Editor/FirstPartyTools/SimulateMouseUi/SimulateMouseUiUseCase.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationArgumentRules.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationAssemblyUsageAnalyzer.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationAssemblyUsageAsyncAnalyzer.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationAssemblyUsageScanState.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationCSharpRules.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationDetectionRules.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationFastAssemblyRequirementCollector.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationModels.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationPlanBuilder.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationTargetScanner.cs
  • Packages/src/Editor/Infrastructure/ThirdPartyToolMigration/ThirdPartyToolMigrationTimingInvocationRules.cs
  • Packages/src/Runtime/SimulateKeyboard/KeySymbolMap.cs
  • cli/.golangci-complexity.yml
  • cli/internal/cli/completion.go
  • cli/internal/cli/connection_retry.go
  • cli/internal/cli/connection_retry_flow.go
  • cli/internal/cli/error_envelope.go
  • cli/internal/cli/error_envelope_classification.go
  • cli/internal/cli/launch.go
  • cli/internal/cli/launch_options.go
  • cli/internal/cli/run.go
  • cli/internal/cli/run_dispatch.go
  • cli/internal/cli/skills.go
  • cli/internal/cli/skills_dispatch.go
  • cli/internal/cli/tools.go
  • cli/internal/unityipc/client.go
  • cli/internal/unityipc/client_test.go
  • scripts/check-code-complexity.sh
  • tools/UnityCliLoop.CodeComplexity/CodeComplexityAnalyzerRunner.cs
  • tools/UnityCliLoop.CodeComplexity/CodeComplexityModels.cs
  • tools/UnityCliLoop.CodeComplexity/CommandLineOptions.cs
💤 Files with no reviewable changes (1)
  • cli/internal/cli/error_envelope.go

Comment thread cli/internal/cli/launch_options.go
Comment thread cli/internal/cli/tools.go
Tighten CLI argument validation and cover review-reported parser edge cases.
Preserve C# migration and UI dispatch behavior for attributed types, comments, aliases, and click-only targets.
@hatayama hatayama changed the title chore: Keep Go and C# complexity checks under fifteen fix: Keep Go and C# complexity checks under fifteen Jun 25, 2026
@hatayama
hatayama merged commit e77d893 into v3-beta Jun 25, 2026
10 checks passed
@hatayama
hatayama deleted the refactor/reduce-complexity branch June 25, 2026 13:31
@github-actions github-actions Bot mentioned this pull request Jun 25, 2026
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.

1 participant