Skip to content

UnityLeanMcp v0.8.0-preview.10

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Sep 22:47
· 58 commits to main since this release

fix(mcp): resolve CI test failures in containerized and Linux environments

feat: Bump version to 0.8.0-preview.10

feat: strengthen process isolation, thread safety, operation lifecycle, and output bounding

  • Implement durable PID identity store, OS command-line readers, and cross-process startup lock
  • Protect Unity main-thread affinity with worker diagnostics logging and managed snapshots
  • Decouple lifecycle cancellation handlers and support pre-acknowledgement dispatch cancellation
  • Bound result formatting across depth, cycle, item count, and UTF-8 byte budgets
  • Add test mode and filter validation with whitespace-retaining SingleOrArray deserialization
  • Restore C# 9.0 compatibility for Unity 2021.3 and portable relative MCP configurations

fix: resolve correctness and SOLID issues across operation store, poller, client, and tools

  • Catch UnauthorizedAccessException in UnityLeanMcpOperationStore.Read retry loop
  • Return cached in-memory snapshot in ReadThreadSafeSnapshot under cache lock
  • Dispose native OS process handles in UnityProcessManager.StopUnityAsync and FindProjectUnityPid
  • Route ProjectRoot in UnityTools through injected IUnityPathResolver
  • Strip status prefixes and unescape payloads in UnityClient.RunTestsAsync and OperationPoller
  • Synchronize Success=false on compilation errors in EnrichRefreshResultWithDiagnostics
  • Protect shared static result files (unity_refresh_result.json) across poll completions in OperationPoller
  • Blank matched using directive characters with spaces in RoslynCompilerHelper.ExtractUsingDirectivesFallback
  • Encapsulate IReadOnlyList in SingleOrArray with collection builder support
  • Update DESIGN.md and LEARNINGS.md with newly discovered patterns and edge cases

refactor: resolve priority 2 SOLID and architectural improvements

  • refactor(server): open UnityLeanMcpServer to extension via public ICommandHandler and RegisterHandler (OCP)
  • refactor(formatter): decompose UnityResultFormatter into modular IUnityTypeFormatter priority registry (OCP)
  • refactor(paths): streamline IUnityPathResolver with type-safe UnityOperationKind enum and eliminate redundant forwarding in UnityProcessManager (ISP)
  • test: update path resolution and process manager tests for streamlined interfaces
  • docs: document architectural decisions and learnings in DESIGN.md and LEARNINGS.md

fix: resolve priority 1 correctness and resilience issues

  • fix(transport): restrict SO_REUSEADDR to non-Windows platforms to prevent socket hijacking on Winsock
  • fix(unity): scope log capture disposal to active operation and tear down CTS outside locks
  • fix(models): restore property symmetry on UnityTestRunResult.Interrupted setter
  • fix(process): catch UnauthorizedAccessException in ReadFileWithRetry for transient NTFS file contention
  • test: add unit tests for Interrupted symmetry and ReadFileWithRetry retry semantics
  • docs: record architectural decisions and OS/threading quirks in DESIGN.md and LEARNINGS.md

fix(mcp): enhance SingleOrArray equality and optimize test failure diagnostics

  • Implement operator == and operator != on SingleOrArray for value equality per CA2231.
  • Make SingleOrArray constructors null-safe against null arrays or collections.
  • Map empty and whitespace-only JSON strings to null in SingleOrArrayJsonConverter.
  • Cap StructuredTestFailure allocations strictly to detailedCount in UnityTools.
  • Read summary test failures directly from results without intermediate allocations.
  • Replace bang operators with pattern matching in test runner filter formatting.
  • Safeguard short maxLineLength handling in ExtractOneLineSummaryMessage.
  • Update DESIGN.md and LEARNINGS.md with design decisions and edge cases.

feat(mcp): consolidate test filter parameters and cap failure stack traces

  • Expose only canonical plural filter parameters (testNames, groupNames, categoryNames, assemblyNames) in unity_run_tests tool schema.
  • Implement SingleOrArray parameter type with custom JsonConverter to polymorphically accept both raw strings and string arrays from AI agents without schema ambiguity.
  • Clarify .NET Regular Expression requirements in groupNames parameter documentation.
  • Cap detailed test failure diagnostics (full stack traces, location links, multi-line messages) to first 5 failures.
  • Render failures 6 through 25 as concise single-line summaries and cap total failure listing to 25.
  • Update DESIGN.md and LEARNINGS.md with design decisions and edge cases.

docs: split FINDINGS.md into DESIGN.md and LEARNINGS.md

docs(mcp): clarify unity_eval top-level script model and namespace requirements (#95)

fix(test-runner): strip internal framework plumbing from test failure stack traces (#93)

fix(test-runner): accept string/array test filters and fix error masking (#91)

  • Expose verbatim testNames, groupNames, categoryNames, and assemblyNames to Unity Test Runner Filter API.
  • Support both single string aliases (testName, group, category, assembly) and string arrays with clean de-duplication.
  • Prioritize surfacing test runner failures over zero-count filter messages to prevent test execution exceptions from being masked.
  • Align parameter docstrings to document exact Unity Test Framework filter semantics (.NET regex vs exact name matching).
  • Document learnings in FINDINGS.md and add unit/protocol tests.

Closes #91

fix(mcp): format synthetic eval locations and isolate process detection in tests (#92)

  • Disambiguate dynamic snippet compilation from pre-refresh script failures in unity_eval

  • Format synthetic eval locations directly without hallucinating file:/// URIs

  • Split pipe-delimited compiler diagnostics in DiagnosticFormatter

  • Prevent ambient Unity processes from leaking into isolated test directories in UnityProcessManager

  • Document learnings and edge cases in FINDINGS.md

fix(client): strip protocol status prefix on initial error responses (#94)

refactor(mcp): extract UnityExecutableLocator from UnityProcessManager (#96)
Extract Unity executable discovery, editor version parsing, Unity Hub path generation, and PATH resolution from UnityProcessManager into a dedicated UnityExecutableLocator service to satisfy Single Responsibility Principle.

Closes #96