UNPKG

@debugmcp/mcp-debugger

Version:

Run-time step-through debugging for LLM agents.

225 lines (167 loc) 7.43 kB
# Task 19a: Cross-Platform Compatibility Audit ## 🔍 **Executive Summary** This audit identifies cross-platform compatibility issues in the test suite, focusing on path handling, platform-specific code, and file system assumptions. The primary issue is the lack of a proper path abstraction layer, leading to test failures when running on different operating systems. ## 🏗️ **Architectural Debt Identified** ### **1. Path Handling Issues** #### **Container Path Translation Test Failures** **File**: `tests/e2e/container-path-translation.test.ts` **Current Issue**: ``` Expected: "examples/python/fibonacci.py:15" Received: "Breakpoint set at C:\path\to\project\examples\python\fibonacci.py:15" ``` **Root Cause**: The test expects Unix-style paths but receives Windows-style paths with: - Backslashes instead of forward slashes - Absolute paths instead of relative paths - Full message strings instead of just path components **Architectural Debt**: No path abstraction layer exists to normalize paths across platforms. #### **Path Separator Hardcoding** **Found in multiple files via search patterns**: - Hardcoded `/` separators: ~50+ occurrences - Hardcoded `\\` separators: ~20+ occurrences - Mixed path construction without using `path.join()` ### **2. Platform Detection Logic** #### **Process.platform Usage** **Occurrences**: 70+ instances across the codebase **Common Patterns**: ```typescript // Direct platform checks if (process.platform === 'win32') { ... } // Platform-specific executable selection const pythonPath = process.platform === 'win32' ? 'python' : 'python3'; // Path construction differences const absolutePath = process.platform === 'win32' ? 'C:\\workspace' : '/workspace'; ``` **Issue**: Scattered platform logic without centralized abstraction. ### **3. File System Assumptions** #### **Permission and Access Patterns** - Uses of `fs.chmod` and `fs.access` that may behave differently across platforms - Assumptions about file permissions that don't translate to Windows #### **Temporary File Handling** - Different temp directory locations (`/tmp` vs `%TEMP%`) - File locking behavior differences ## 📊 **Impact Analysis** ### **Test Files Affected by Cross-Platform Issues** | Category | File Count | Examples | |----------|------------|----------| | Path Handling | 15+ | container-path-translation.test.ts, path-translator.test.ts | | Platform Detection | 20+ | python-real-discovery.test.ts, process-launcher tests | | Python Executable | 7+ | All Python adapter tests | | File System | 10+ | file-system-impl.test.ts, various integration tests | ### **Severity Assessment** 1. **🔴 High Severity**: - Container path translation tests completely fail on Windows - Python discovery tests have platform-specific logic issues 2. **🟡 Medium Severity**: - Inconsistent path separator usage causes intermittent failures - Platform-specific executable selection needs improvement 3. **🟢 Low Severity**: - File permission tests that gracefully degrade - Platform-specific features properly conditionally tested ## 🎯 **Recommended Solutions** ### **Short-Term Fixes** (For Task 19a) 1. **Skip Problematic Cross-Platform Tests**: ```typescript describe.skip('Cross-Platform Path Tests - Architectural Debt', () => { /** * ARCHITECTURAL DEBT: Cross-Platform Path Handling * These tests fail due to fundamental path handling differences. * See docs/architecture/task-19a-cross-platform-compatibility-audit.md */ it.skip('should handle path translation consistently', () => { // Test implementation }); }); ``` 2. **Improve Platform Detection**: ```typescript // Create a centralized platform utility export const Platform = { isWindows: process.platform === 'win32', isLinux: process.platform === 'linux', isMac: process.platform === 'darwin', getPythonExecutable(): string { return this.isWindows ? 'python' : 'python3'; }, normalizePath(path: string): string { return path.replace(/\\/g, '/'); } }; ``` ### **Long-Term Architecture** (Future Tasks) 1. **Path Abstraction Layer**: - Create internal path representation (always use forward slashes) - Convert to OS-specific paths only at system boundaries - Implement path comparison utilities that handle platform differences 2. **Platform Adapter Pattern**: - WindowsAdapter, LinuxAdapter, MacAdapter classes - Each implements platform-specific behavior - Factory pattern for adapter selection 3. **Test Infrastructure Improvements**: - Platform-aware test utilities - Automatic skip logic based on platform capabilities - Better mock support for cross-platform testing ## 📋 **Test Skip Recommendations** ### **Tests to Skip with Documentation** 1. **Container Path Translation Tests**: - Reason: Fundamental path representation differences - Files: `container-path-translation.test.ts` - Skip until path abstraction layer implemented 2. **Windows-Specific Python Discovery Test**: - Reason: Forces Windows platform on Linux environments - Files: `python-real-discovery.test.ts` (line 144) - Already skipped, keep as is 3. **Platform-Specific Process Tests**: - Reason: Different process management APIs - Files: Various process launcher tests - Use conditional skips based on platform ### **Tests Needing Conditional Logic** 1. **Python Executable Tests**: - Add proper Python detection before running - Skip if Python not available - Use platform-appropriate Python command 2. **File System Permission Tests**: - Skip chmod tests on Windows - Skip Windows-specific security tests on Unix ## 🔄 **Migration Strategy** ### **Phase 1: Document and Skip** (Current - Task 19a) - ✅ Document all cross-platform issues - ✅ Skip tests that can't be fixed immediately - ✅ Add detailed skip documentation ### **Phase 2: Quick Wins** (Task 19b) - Centralize platform detection logic - Fix simple path separator issues - Improve Python executable detection ### **Phase 3: Architecture** (Task 19c) - Implement path abstraction layer - Create platform adapters - Refactor tests to use new abstractions ## 📊 **Metrics and Tracking** ### **Current State**: - Cross-platform test failures: 10-15 - Platform-specific code locations: 70+ - Hardcoded path separators: 70+ ### **Target State**: - Cross-platform test failures: 0 - Platform logic centralized to adapters - No hardcoded path separators in tests ## 🚀 **Immediate Actions** 1. **Skip these test files with documentation**: - `tests/e2e/container-path-translation.test.ts` - Platform-specific tests in `python-real-discovery.test.ts` 2. **Add platform detection to test setup**: - Check Python availability - Check Docker availability - Set appropriate skip flags 3. **Document in test files**: - Add comments referencing this audit - Explain why tests are skipped - Link to future work items ## 📝 **Conclusion** The cross-platform compatibility issues are significant but well-understood. The primary problem is the lack of abstraction layers for: 1. Path handling 2. Platform-specific behavior 3. External dependency detection These issues should be addressed through proper architectural patterns rather than quick fixes. For now, documenting and skipping problematic tests is the appropriate approach, with a clear roadmap for future improvements.