Repository navigation
UnityLeanMcp v0.8.0-preview.10
Pre-releasefix(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