# Testing & Debugging SuperClaude Framework This guide provides comprehensive testing and debugging strategies for SuperClaude Framework development. Whether you're contributing components, fixing bugs, or optimizing performance, these techniques will help you build robust, reliable code. **Developer-Focused Approach**: Testing and debugging strategies specifically designed for the meta-framework architecture, component system, and intelligent orchestration patterns unique to SuperClaude. ## Table of Contents **For Screen Readers**: This document contains 10 main sections covering comprehensive testing and debugging procedures. Use heading navigation to jump between sections. Code examples include detailed comments and error handling. 1. [Quick Start Testing Tutorial](#quick-start-testing-tutorial) - Get started with basic testing 2. [Testing Environment Setup](#testing-environment-setup) - Comprehensive test configuration 3. [Testing Framework](#testing-framework) - Development testing procedures and standards 4. [Debugging SuperClaude Components](#debugging-superclaude-components) - Component-specific debugging 5. [Performance Testing & Optimization](#performance-testing--optimization) - Benchmarking and profiling 6. [Security Testing](#security-testing) - Security validation and vulnerability testing 7. [Integration Testing](#integration-testing) - End-to-end workflow validation 8. [Quality Validation](#quality-validation) - Quality gates and validation frameworks 9. [Troubleshooting Guide](#troubleshooting-guide) - Common issues and solutions 10. [Testing Glossary](#testing-glossary) - Testing terminology and concepts **Cross-Reference Links**: - [Contributing Code Guide](contributing-code.md) - Development workflows and standards - [Technical Architecture Guide](technical-architecture.md) - System architecture and component specifications **Key Testing Concepts**: - **Component Testing**: Individual component validation and functionality testing - **Agent System Testing**: Agent activation, coordination, and behavioral validation - **MCP Integration Testing**: External tool coordination and protocol validation - **Performance Profiling**: Memory usage, execution speed, and resource optimization ## Quick Start Testing Tutorial ### 1. Set Up Your Testing Environment First, create a proper testing environment with all necessary dependencies: ```bash # Create and activate virtual environment python -m venv superclaude-testing source superclaude-testing/bin/activate # Linux/Mac # or superclaude-testing\Scripts\activate # Windows # Install testing dependencies pip install pytest pytest-cov pytest-mock pytest-benchmark pip install memory-profiler coverage[toml] psutil ``` ### 2. Create Your First Test ```python # tests/test_basic.py import pytest import tempfile import shutil import json import os from pathlib import Path from unittest.mock import Mock, patch # Import SuperClaude components from setup.components.base import BaseComponent from setup.core.registry import ComponentRegistry from setup.services.session_manager import SessionManager class TestBasicSetup: """Basic SuperClaude component testing example""" def setup_method(self): """Set up test environment before each test""" self.test_dir = Path(tempfile.mkdtemp(prefix="superclaude_test_")) self.registry = ComponentRegistry() def teardown_method(self): """Clean up after each test""" if self.test_dir.exists(): shutil.rmtree(self.test_dir) def test_component_installation(self): """Test basic component installation process""" # Test setup from setup.components.core import CoreComponent component = CoreComponent() # Execute test result = component.install(self.test_dir) # Assertions with clear validation assert result.success, f"Installation failed: {result.error}" assert (self.test_dir / 'CLAUDE.md').exists(), "CLAUDE.md not created" # Verify content structure claude_content = (self.test_dir / 'CLAUDE.md').read_text() assert '@FLAGS.md' in claude_content, "FLAGS.md not referenced" assert '@RULES.md' in claude_content, "RULES.md not referenced" ``` ### 3. Run Your Tests ```bash # Run basic test python -m pytest tests/test_basic.py -v # Run with coverage python -m pytest tests/test_basic.py --cov=setup --cov-report=html # Generate coverage report open htmlcov/index.html # View coverage in browser ``` ## Testing Environment Setup ### Complete Development Environment Configuration **Required Dependencies:** ```bash # Core testing framework pip install pytest>=7.0.0 pip install pytest-cov>=4.0.0 pip install pytest-mock>=3.10.0 pip install pytest-benchmark>=4.0.0 # Performance monitoring pip install memory-profiler>=0.60.0 pip install psutil>=5.9.0 pip install py-spy>=0.3.14 # Code quality tools pip install coverage[toml]>=7.0.0 pip install pytest-html>=3.1.0 # Mocking and fixtures pip install responses>=0.23.0 pip install freezegun>=1.2.0 ``` **Environment Variables:** ```bash # Create test configuration file cat > .env.testing << EOF # Testing configuration SUPERCLAUDE_TEST_MODE=true SUPERCLAUDE_DEBUG=true SUPERCLAUDE_LOG_LEVEL=debug # Test directories SUPERCLAUDE_TEST_DIR=/tmp/superclaude_test SUPERCLAUDE_CONFIG_DIR=/tmp/superclaude_test_config # MCP server testing SUPERCLAUDE_MCP_TIMEOUT=30 SUPERCLAUDE_MCP_RETRY_COUNT=3 # Performance testing SUPERCLAUDE_BENCHMARK_ITERATIONS=10 SUPERCLAUDE_MEMORY_LIMIT_MB=512 EOF # Load testing environment export $(cat .env.testing | xargs) ``` **Test Configuration Setup:** ```python # conftest.py - Pytest configuration import pytest import tempfile import shutil import os import sys from pathlib import Path from unittest.mock import Mock, patch # Add project root to Python path project_root = Path(__file__).parent sys.path.insert(0, str(project_root)) @pytest.fixture(scope="session") def test_environment(): """Set up isolated test environment""" test_dir = Path(tempfile.mkdtemp(prefix="superclaude_test_")) config_dir = test_dir / "config" config_dir.mkdir(parents=True) # Set environment variables original_env = os.environ.copy() os.environ.update({ 'SUPERCLAUDE_TEST_MODE': 'true', 'SUPERCLAUDE_CONFIG_DIR': str(config_dir), 'SUPERCLAUDE_TEST_DIR': str(test_dir), 'SUPERCLAUDE_DEBUG': 'true' }) yield { 'test_dir': test_dir, 'config_dir': config_dir } # Cleanup if test_dir.exists(): shutil.rmtree(test_dir) os.environ.clear() os.environ.update(original_env) @pytest.fixture def mock_registry(): """Provide mock component registry""" from setup.core.registry import ComponentRegistry with patch('setup.core.registry.ComponentRegistry') as mock: instance = Mock(spec=ComponentRegistry) instance.components = {} instance.list_installed.return_value = [] mock.return_value = instance yield instance @pytest.fixture def mock_mcp_servers(): """Mock MCP servers for testing""" servers = { 'context7': Mock(), 'sequential': Mock(), 'magic': Mock(), 'morphllm': Mock(), 'serena': Mock(), 'playwright': Mock() } # Configure standard responses for server in servers.values(): server.connect.return_value = True server.ping.return_value = {'status': 'ok'} server.disconnect.return_value = True # Specific server behaviors servers['context7'].query.return_value = {'docs': 'sample documentation'} servers['sequential'].analyze.return_value = {'steps': ['step1', 'step2']} servers['magic'].generate.return_value = {'ui': '
component
'} yield servers @pytest.fixture def sample_task_context(): """Provide sample task context for testing""" from setup.core.task_context import TaskContext return TaskContext( input_text="implement authentication system", file_count=5, complexity_score=0.7, domain='security', session_id='test-session' ) ``` ### Test Data Management **Test Data Structure:** ``` tests/ ├── fixtures/ │ ├── components/ # Sample component configurations │ │ ├── agent_samples.json │ │ ├── mode_samples.json │ │ └── mcp_configs.json │ ├── sessions/ # Sample session data │ │ ├── basic_session.json │ │ └── complex_session.json │ ├── files/ # Sample project structures │ │ ├── minimal_project/ │ │ └── complex_project/ │ └── responses/ # Mock API responses │ ├── mcp_responses.json │ └── agent_responses.json ``` **Test Data Factory:** ```python # tests/factories.py import json from pathlib import Path from dataclasses import dataclass from typing import Dict, List, Any @dataclass class TestDataFactory: """Factory for creating test data""" @staticmethod def create_test_component(component_type: str = "agent") -> Dict[str, Any]: """Create test component configuration""" if component_type == "agent": return { "name": "test-agent", "type": "agent", "triggers": ["test", "example"], "description": "Test agent for development", "dependencies": ["core"], "config": { "activation_threshold": 0.7, "coordination_level": "moderate" } } elif component_type == "mode": return { "name": "test-mode", "type": "mode", "activation_conditions": { "complexity_threshold": 0.5, "keywords": ["test", "debug"] }, "behavior_modifications": { "verbosity": "high", "error_tolerance": "low" } } else: raise ValueError(f"Unknown component type: {component_type}") @staticmethod def create_test_session(session_type: str = "basic") -> Dict[str, Any]: """Create test session data""" base_session = { "id": "test-session-123", "created_at": "2024-01-01T00:00:00Z", "last_active": "2024-01-01T01:00:00Z", "context_size": 1024, "active_components": ["core"] } if session_type == "complex": base_session.update({ "active_components": ["core", "agents", "modes", "mcp"], "context_size": 4096, "memory_items": [ {"key": "project_type", "value": "web_application"}, {"key": "tech_stack", "value": ["python", "react", "postgresql"]} ] }) return base_session @staticmethod def create_test_project(project_type: str = "minimal") -> Dict[str, List[str]]: """Create test project structure""" if project_type == "minimal": return { "files": [ "main.py", "requirements.txt", "README.md" ], "directories": [ "src/", "tests/" ] } elif project_type == "complex": return { "files": [ "main.py", "config.py", "models.py", "views.py", "requirements.txt", "setup.py", "README.md", "tests/test_main.py", "tests/test_models.py", "src/auth/login.py", "src/api/endpoints.py" ], "directories": [ "src/", "src/auth/", "src/api/", "src/utils/", "tests/", "tests/unit/", "tests/integration/", "docs/", "config/" ] } else: raise ValueError(f"Unknown project type: {project_type}") @staticmethod def load_fixture(fixture_name: str) -> Any: """Load test fixture from JSON file""" fixture_path = Path(__file__).parent / "fixtures" / f"{fixture_name}.json" if not fixture_path.exists(): raise FileNotFoundError(f"Fixture not found: {fixture_path}") with open(fixture_path, 'r') as f: return json.load(f) @staticmethod def create_temp_project(test_dir: Path, project_type: str = "minimal") -> Path: """Create temporary project structure for testing""" project_structure = TestDataFactory.create_test_project(project_type) project_dir = test_dir / "test_project" project_dir.mkdir(parents=True) # Create directories for directory in project_structure["directories"]: (project_dir / directory).mkdir(parents=True, exist_ok=True) # Create files for file_path in project_structure["files"]: file_full_path = project_dir / file_path file_full_path.parent.mkdir(parents=True, exist_ok=True) # Add sample content based on file type if file_path.endswith('.py'): content = f'# {file_path}\n"""Sample Python file for testing"""\n\ndef main():\n pass\n' elif file_path.endswith('.md'): content = f'# {file_path}\n\nSample documentation for testing.\n' elif file_path.endswith('.txt'): content = 'pytest>=7.0.0\ncoverage>=7.0.0\n' else: content = f'# {file_path} - Sample content\n' file_full_path.write_text(content) return project_dir ``` ## Testing Framework ### Development Testing Procedures **Test Structure:** ``` tests/ ├── unit/ # Component unit tests │ ├── test_components.py # Component system tests │ ├── test_agents.py # Agent system tests │ └── test_mcp.py # MCP integration tests ├── integration/ # Integration tests │ ├── test_installation.py # Installation process tests │ ├── test_workflows.py # End-to-end workflow tests │ └── test_coordination.py # Multi-component coordination ├── performance/ # Performance benchmarks │ ├── test_memory.py # Memory usage tests │ └── test_speed.py # Execution speed tests └── fixtures/ # Test data and configurations ``` **Running Tests:** ```bash # Run all tests python -m pytest tests/ # Run specific test categories python -m pytest tests/unit/ python -m pytest tests/integration/ python -m pytest tests/performance/ # Run with coverage python -m pytest --cov=setup --cov-report=html tests/ # Run with verbose output python -m pytest -v tests/ # Run specific test file python -m pytest tests/unit/test_components.py -v ``` **Test Coverage Requirements:** - **Unit Tests**: >90% coverage for core components - **Integration Tests**: All major workflows covered - **Performance Tests**: Memory and speed benchmarks - **Installation Tests**: All component installation scenarios **Testing Standards:** ```python # Example test structure with complete imports import pytest import tempfile import shutil import os from pathlib import Path from unittest.mock import Mock, patch # SuperClaude imports from setup.components.base import BaseComponent from setup.components.core import CoreComponent from setup.core.registry import ComponentRegistry from setup.core.installation import InstallationOrchestrator, InstallOptions class TestComponentSystem: def setup_method(self): """Set up test environment before each test""" self.test_dir = Path(tempfile.mkdtemp(prefix='superclaude_test_')) self.registry = ComponentRegistry() # Ensure clean state if hasattr(self.registry, 'clear'): self.registry.clear() def teardown_method(self): """Clean up after each test""" if self.test_dir.exists(): shutil.rmtree(self.test_dir) # Reset registry state if hasattr(self.registry, 'reset'): self.registry.reset() def test_component_installation(self): """Test component installation process""" # Test setup component = CoreComponent() install_options = InstallOptions( install_dir=self.test_dir, force=False, dry_run=False ) # Execute test result = component.install(install_options) # Comprehensive assertions assert result.success, f"Installation failed: {getattr(result, 'error', 'Unknown error')}" assert (self.test_dir / 'CLAUDE.md').exists(), "CLAUDE.md not created" # Verify registry state installed_components = self.registry.list_installed() assert 'core' in installed_components, f"Core not in registry: {installed_components}" # Verify file contents claude_content = (self.test_dir / 'CLAUDE.md').read_text() assert '@FLAGS.md' in claude_content, "FLAGS.md reference missing" assert '@RULES.md' in claude_content, "RULES.md reference missing" def test_component_validation(self): """Test component validation before installation""" component = CoreComponent() # Validate component structure validation_result = component.validate() assert validation_result.is_valid, f"Component validation failed: {validation_result.errors}" # Check required attributes assert hasattr(component, 'name'), "Component missing name attribute" assert hasattr(component, 'dependencies'), "Component missing dependencies" assert hasattr(component, 'install'), "Component missing install method" ``` ## Debugging SuperClaude Components > **🏗️ Architecture Context**: Understanding component architecture is essential for effective debugging. Review [Technical Architecture Guide](technical-architecture.md) for system architecture details. ### Agent System Debugging **Agent Activation Debugging:** ```python # Debug agent selection and activation with complete imports import re import logging from typing import List, Dict, Any from setup.agents.base import BaseAgent from setup.agents.manager import AgentManager from setup.core.task_context import TaskContext from setup.core.coordination import CoordinationPattern class AgentDebugger: def __init__(self): self.agent_manager = AgentManager() self.logger = logging.getLogger(__name__) def debug_agent_selection(self, task_context: TaskContext) -> tuple: """Debug agent selection process with detailed output""" print("🔍 Agent Selection Debug:") print(f" Input text: '{task_context.input_text}'") print(f" File count: {task_context.file_count}") print(f" Complexity: {task_context.complexity_score}") # Show detected triggers triggers = self._extract_triggers(task_context) print(f" Detected triggers: {triggers}") # Show available agents available_agents = self.agent_manager.get_available_agents() print(f" Available agents: {[agent.name for agent in available_agents]}") # Show selected agents with scoring selected_agents = self._select_agents_with_scores(task_context, triggers) print(f" Selected agents: {selected_agents}") # Show coordination pattern pattern = self._determine_coordination(selected_agents, task_context) print(f" Coordination pattern: {pattern}") return [agent['name'] for agent in selected_agents], pattern def _extract_triggers(self, task_context: TaskContext) -> List[str]: """Extract trigger keywords from task context""" text = task_context.input_text.lower() # Define trigger patterns trigger_patterns = { 'security': ['security', 'auth', 'login', 'vulnerability', 'encrypt'], 'frontend': ['ui', 'react', 'vue', 'angular', 'component'], 'backend': ['api', 'server', 'database', 'endpoint'], 'devops': ['deploy', 'docker', 'kubernetes', 'ci/cd'], 'data': ['dataset', 'analytics', 'machine learning', 'pandas'] } detected_triggers = [] for category, keywords in trigger_patterns.items(): for keyword in keywords: if keyword in text: detected_triggers.append(f"{category}:{keyword}") return detected_triggers def _select_agents_with_scores(self, task_context: TaskContext, triggers: List[str]) -> List[Dict[str, Any]]: """Select agents with confidence scores""" agent_scores = [] for agent in self.agent_manager.get_available_agents(): score = self._calculate_agent_score(agent, task_context, triggers) if score > 0.3: # Threshold for activation agent_scores.append({ 'name': agent.name, 'score': score, 'reason': self._get_activation_reason(agent, triggers) }) # Sort by score descending return sorted(agent_scores, key=lambda x: x['score'], reverse=True) def _calculate_agent_score(self, agent: BaseAgent, task_context: TaskContext, triggers: List[str]) -> float: """Calculate agent activation score""" score = 0.0 # Check trigger keywords for trigger in triggers: if any(keyword in trigger for keyword in agent.trigger_keywords): score += 0.3 # Check complexity requirements if hasattr(agent, 'min_complexity') and task_context.complexity_score >= agent.min_complexity: score += 0.2 # Check file type preferences if hasattr(task_context, 'file_types') and hasattr(agent, 'preferred_file_types'): if any(ft in agent.preferred_file_types for ft in task_context.file_types): score += 0.1 return min(score, 1.0) # Cap at 1.0 def _get_activation_reason(self, agent: BaseAgent, triggers: List[str]) -> str: """Get human-readable reason for agent activation""" matching_triggers = [t for t in triggers if any(kw in t for kw in agent.trigger_keywords)] if matching_triggers: return f"Matched triggers: {matching_triggers}" return "General activation" def _determine_coordination(self, selected_agents: List[Dict[str, Any]], task_context: TaskContext) -> str: """Determine coordination pattern based on selected agents""" agent_count = len(selected_agents) complexity = task_context.complexity_score if agent_count == 1: return "single_agent" elif agent_count == 2 and complexity < 0.7: return "collaborative" elif agent_count > 2 or complexity >= 0.7: return "hierarchical" else: return "parallel" # Usage in development def debug_agent_activation_example(): """Example usage of agent debugging""" # Create test context task_context = TaskContext( input_text="implement secure authentication with React components", file_count=8, complexity_score=0.8, domain="fullstack" ) # Debug agent selection debugger = AgentDebugger() selected_agents, coordination_pattern = debugger.debug_agent_selection(task_context) print(f"\nResult: {len(selected_agents)} agents selected") print(f"Coordination: {coordination_pattern}") return selected_agents, coordination_pattern # Run example if __name__ == "__main__": debug_agent_activation_example() ``` **Agent Coordination Debugging:** ```bash # Enable comprehensive agent debugging export SUPERCLAUDE_DEBUG_AGENTS=true export SUPERCLAUDE_DEBUG_COORDINATION=true export SUPERCLAUDE_LOG_LEVEL=debug # Create log directory if it doesn't exist mkdir -p ~/.claude/logs # Run with agent tracing (corrected command) python -m setup.main install --debug-agents --dry-run --verbose # Alternative: Use SuperClaude CLI if installed SuperClaude install core --debug --trace-agents --dry-run # Monitor agent activation in real-time tail -f ~/.claude/logs/superclaude-debug.log | grep -E "(AGENT|COORDINATION)" # Check specific agent logs ls ~/.claude/logs/agent-*.log tail -f ~/.claude/logs/agent-activation.log # Debug agent selection with Python python -c " import os os.environ['SUPERCLAUDE_DEBUG_AGENTS'] = 'true' from setup.agents.manager import AgentManager from setup.core.task_context import TaskContext manager = AgentManager() context = TaskContext(input_text='implement secure login system') agents = manager.select_agents(context) print(f'Selected agents: {[a.name for a in agents]}') " ``` **Common Agent Issues:** - **Agent Not Activating**: Check trigger patterns and keyword matching - **Wrong Agent Selected**: Verify trigger priority and specificity - **Coordination Conflicts**: Debug agent hierarchy and decision authority ### Mode System Debugging **Mode Activation Debugging:** ```python # Mode debugging with complete imports from typing import Dict, List, Any from setup.modes.base import BaseMode from setup.modes.manager import ModeManager from setup.core.task_context import TaskContext from setup.core.analysis import TaskAnalysis class ModeDebugger: def __init__(self): self.mode_manager = ModeManager() self.available_modes = { 'brainstorming': { 'triggers': ['explore', 'discuss', 'think about', 'maybe'], 'complexity_threshold': 0.1, 'keywords': ['brainstorm', 'idea', 'concept'] }, 'task_management': { 'triggers': ['implement', 'build', 'create', 'develop'], 'complexity_threshold': 0.6, 'file_threshold': 3 }, 'orchestration': { 'triggers': ['coordinate', 'manage', 'optimize'], 'complexity_threshold': 0.8, 'parallel_ops': True }, 'introspection': { 'triggers': ['analyze', 'debug', 'understand', 'why'], 'complexity_threshold': 0.5, 'error_context': True } } def debug_mode_selection(self, task_context: TaskContext) -> Dict[str, Any]: """Debug mode selection process with detailed analysis""" print("🧠 Mode Selection Debug:") print(f" Input: '{task_context.input_text}'") # Complexity analysis complexity = self._calculate_complexity(task_context) print(f" Complexity score: {complexity:.2f}") # Trigger analysis mode_triggers = self._analyze_mode_triggers(task_context) print(" Mode trigger analysis:") for mode, trigger_data in mode_triggers.items(): print(f" {mode}: {trigger_data}") # Context factors context_factors = self._analyze_context_factors(task_context) print(f" Context factors: {context_factors}") # Final mode selection selected_modes = self._select_modes(task_context, complexity, mode_triggers) print(f" Selected modes: {selected_modes}") return { 'selected_modes': selected_modes, 'complexity': complexity, 'triggers': mode_triggers, 'context_factors': context_factors } def _calculate_complexity(self, task_context: TaskContext) -> float: """Calculate task complexity score""" complexity = 0.0 # File count factor if hasattr(task_context, 'file_count'): complexity += min(task_context.file_count / 10, 0.3) # Text complexity text = task_context.input_text.lower() complexity_keywords = ['complex', 'advanced', 'integrate', 'coordinate'] for keyword in complexity_keywords: if keyword in text: complexity += 0.1 # Multiple requirements requirement_markers = ['and', 'also', 'plus', 'additionally'] for marker in requirement_markers: if marker in text: complexity += 0.05 return min(complexity, 1.0) def _analyze_mode_triggers(self, task_context: TaskContext) -> Dict[str, Dict[str, Any]]: """Analyze which mode triggers are activated""" text = task_context.input_text.lower() mode_analysis = {} for mode_name, mode_config in self.available_modes.items(): triggered_keywords = [] trigger_score = 0.0 # Check keyword triggers for trigger in mode_config['triggers']: if trigger in text: triggered_keywords.append(trigger) trigger_score += 0.2 # Check additional keywords if defined if 'keywords' in mode_config: for keyword in mode_config['keywords']: if keyword in text: triggered_keywords.append(keyword) trigger_score += 0.1 mode_analysis[mode_name] = { 'triggered_keywords': triggered_keywords, 'trigger_score': trigger_score, 'meets_threshold': trigger_score >= 0.1 } return mode_analysis def _analyze_context_factors(self, task_context: TaskContext) -> Dict[str, Any]: """Analyze contextual factors affecting mode selection""" factors = {} # File count if hasattr(task_context, 'file_count'): factors['file_count'] = task_context.file_count factors['multi_file'] = task_context.file_count > 3 # Domain specificity if hasattr(task_context, 'domain'): factors['domain'] = task_context.domain # Error presence error_indicators = ['error', 'bug', 'issue', 'problem', 'broken'] factors['has_error'] = any(indicator in task_context.input_text.lower() for indicator in error_indicators) # Uncertainty indicators uncertainty_words = ['maybe', 'perhaps', 'not sure', 'thinking'] factors['has_uncertainty'] = any(word in task_context.input_text.lower() for word in uncertainty_words) return factors def _select_modes(self, task_context: TaskContext, complexity: float, mode_triggers: Dict[str, Dict[str, Any]]) -> List[str]: """Select appropriate modes based on analysis""" selected = [] # Priority-based selection if mode_triggers['brainstorming']['meets_threshold']: selected.append('brainstorming') elif complexity >= 0.8: selected.append('orchestration') elif complexity >= 0.6: selected.append('task_management') # Add introspection if error context context_factors = self._analyze_context_factors(task_context) if context_factors.get('has_error', False): selected.append('introspection') # Default to brainstorming if no clear mode if not selected: selected.append('brainstorming') return selected # Usage example def debug_mode_selection_example(): """Example usage of mode debugging""" # Test cases test_cases = [ "I'm thinking about building a web application", "Implement authentication system with React and Node.js", "Debug this complex microservices architecture issue", "Coordinate deployment across multiple environments" ] debugger = ModeDebugger() for test_input in test_cases: print(f"\n{'='*50}") print(f"Testing: '{test_input}'") print('='*50) task_context = TaskContext( input_text=test_input, file_count=5, domain='general' ) result = debugger.debug_mode_selection(task_context) print(f"Final result: {result['selected_modes']}") if __name__ == "__main__": debug_mode_selection_example() ``` **Mode State Inspection:** ```bash # Enable comprehensive mode debugging export SUPERCLAUDE_DEBUG_MODES=true export SUPERCLAUDE_DEBUG_MODE_TRANSITIONS=true export SUPERCLAUDE_LOG_LEVEL=debug # Create debugging environment mkdir -p ~/.claude/logs mkdir -p ~/.claude/debug # Inspect current mode state python -c " import os import json from setup.modes.manager import ModeManager from setup.core.task_context import TaskContext # Enable debug logging os.environ['SUPERCLAUDE_DEBUG_MODES'] = 'true' # Initialize mode manager manager = ModeManager() # Check active modes active_modes = manager.get_active_modes() print(f'Active modes: {active_modes}') # Check mode history mode_history = manager.get_mode_history() print(f'Mode history: {mode_history}') # Test mode transitions test_context = TaskContext( input_text='debug complex authentication error', complexity_score=0.8 ) # Trigger mode selection selected_modes = manager.select_modes(test_context) print(f'Selected modes for test: {selected_modes}') # Save debug state debug_state = { 'active_modes': active_modes, 'history': mode_history, 'test_selection': selected_modes } with open(os.path.expanduser('~/.claude/debug/mode_state.json'), 'w') as f: json.dump(debug_state, f, indent=2) print('Debug state saved to ~/.claude/debug/mode_state.json') " # Monitor mode transitions in real-time tail -f ~/.claude/logs/superclaude-debug.log | grep -E "(MODE|TRANSITION)" # Check mode-specific logs ls ~/.claude/logs/mode-*.log # Debug mode configuration python -c " from setup.modes.manager import ModeManager manager = ModeManager() print('Available modes:') for mode_name in manager.get_available_modes(): mode = manager.get_mode(mode_name) print(f' {mode_name}: {mode.get_config()}') " ``` ### MCP Server Debugging **MCP Connection Debugging:** ```python # MCP server debugging with complete imports import json import time import subprocess import socket from typing import Dict, Any, Optional from pathlib import Path from setup.mcp.manager import MCPManager from setup.mcp.connection import MCPConnection from setup.core.config import ConfigManager class MCPDebugger: def __init__(self): self.mcp_manager = MCPManager() self.config_manager = ConfigManager() self.server_configs = { 'context7': { 'command': 'npx', 'args': ['@context7/mcp-server'], 'port': 3001, 'timeout': 30 }, 'sequential': { 'command': 'npx', 'args': ['@sequential-thinking/mcp-server'], 'port': 3002, 'timeout': 30 }, 'magic': { 'command': 'npx', 'args': ['@magic-ui/mcp-server'], 'port': 3003, 'timeout': 30 }, 'morphllm': { 'command': 'python', 'args': ['-m', 'morphllm.mcp_server'], 'port': 3004, 'timeout': 30 }, 'serena': { 'command': 'python', 'args': ['-m', 'serena.mcp_server'], 'port': 3005, 'timeout': 30 }, 'playwright': { 'command': 'npx', 'args': ['@playwright/mcp-server'], 'port': 3006, 'timeout': 30 } } def debug_server_connection(self, server_name: str) -> Dict[str, Any]: """Comprehensive MCP server debugging""" print(f"🔌 MCP Server Debug: {server_name}") debug_results = { 'server_name': server_name, 'timestamp': time.time(), 'checks': {} } # Check server configuration config = self._get_server_config(server_name) print(f" Configuration: {config}") debug_results['checks']['configuration'] = config # Check prerequisites prereq_check = self._check_prerequisites(server_name) print(f" Prerequisites: {prereq_check}") debug_results['checks']['prerequisites'] = prereq_check # Test connection try: connection_result = self._test_connection(server_name) print(f" Connection: ✅ Success") debug_results['checks']['connection'] = connection_result # Test basic functionality if connection_result.get('connected', False): ping_result = self._test_ping(server_name) print(f" Ping response: {ping_result}") debug_results['checks']['ping'] = ping_result except Exception as e: print(f" Connection: ❌ Failed - {e}") debug_results['checks']['connection'] = { 'connected': False, 'error': str(e), 'error_type': type(e).__name__ } # Check server health health = self._check_server_health(server_name) print(f" Health status: {health}") debug_results['checks']['health'] = health # Check port availability port_status = self._check_port_availability(server_name) print(f" Port status: {port_status}") debug_results['checks']['port'] = port_status return debug_results def _get_server_config(self, server_name: str) -> Dict[str, Any]: """Get server configuration from multiple sources""" # Check default configs default_config = self.server_configs.get(server_name, {}) # Check user configuration claude_config_path = Path.home() / '.claude.json' user_config = {} if claude_config_path.exists(): try: with open(claude_config_path, 'r') as f: full_config = json.load(f) mcp_servers = full_config.get('mcpServers', {}) user_config = mcp_servers.get(server_name, {}) except Exception as e: user_config = {'config_error': str(e)} return { 'default': default_config, 'user': user_config, 'merged': {**default_config, **user_config} } def _check_prerequisites(self, server_name: str) -> Dict[str, Any]: """Check if server prerequisites are met""" config = self.server_configs.get(server_name, {}) command = config.get('command', '') prereq_results = { 'command_available': False, 'node_version': None, 'python_version': None, 'package_installed': False } # Check command availability try: result = subprocess.run(['which', command], capture_output=True, text=True, timeout=5) prereq_results['command_available'] = result.returncode == 0 except Exception: prereq_results['command_available'] = False # Check Node.js version for npm packages if command in ['npx', 'npm', 'node']: try: result = subprocess.run(['node', '--version'], capture_output=True, text=True, timeout=5) if result.returncode == 0: prereq_results['node_version'] = result.stdout.strip() except Exception: pass # Check Python version for Python packages if command == 'python': try: result = subprocess.run(['python', '--version'], capture_output=True, text=True, timeout=5) if result.returncode == 0: prereq_results['python_version'] = result.stdout.strip() except Exception: pass return prereq_results def _test_connection(self, server_name: str) -> Dict[str, Any]: """Test actual connection to MCP server""" try: # Try to connect through MCP manager connection = self.mcp_manager.connect_server(server_name) if connection and hasattr(connection, 'is_connected'): return { 'connected': connection.is_connected(), 'connection_time': time.time(), 'server_info': getattr(connection, 'server_info', None) } else: return { 'connected': False, 'error': 'Failed to create connection object' } except Exception as e: return { 'connected': False, 'error': str(e), 'error_type': type(e).__name__ } def _test_ping(self, server_name: str) -> Dict[str, Any]: """Test server responsiveness with ping""" try: connection = self.mcp_manager.get_connection(server_name) if connection: start_time = time.time() response = connection.ping() end_time = time.time() return { 'success': True, 'response_time': end_time - start_time, 'response': response } else: return { 'success': False, 'error': 'No active connection' } except Exception as e: return { 'success': False, 'error': str(e), 'error_type': type(e).__name__ } def _check_server_health(self, server_name: str) -> Dict[str, Any]: """Check overall server health""" health_status = { 'overall': 'unknown', 'issues': [], 'recommendations': [] } # Check if server is in active connections active_servers = self.mcp_manager.get_active_servers() if server_name in active_servers: health_status['overall'] = 'healthy' else: health_status['overall'] = 'inactive' health_status['issues'].append('Server not in active connections') health_status['recommendations'].append(f'Try: SuperClaude install {server_name}') return health_status def _check_port_availability(self, server_name: str) -> Dict[str, Any]: """Check if server port is available or in use""" config = self.server_configs.get(server_name, {}) port = config.get('port') if not port: return {'available': None, 'message': 'No port configured'} try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) result = sock.connect_ex(('localhost', port)) sock.close() if result == 0: return { 'available': False, 'port': port, 'message': f'Port {port} is in use (server may be running)' } else: return { 'available': True, 'port': port, 'message': f'Port {port} is available' } except Exception as e: return { 'available': None, 'port': port, 'error': str(e) } # Usage examples def debug_all_mcp_servers(): """Debug all configured MCP servers""" debugger = MCPDebugger() for server_name in debugger.server_configs.keys(): print(f"\n{'='*60}") result = debugger.debug_server_connection(server_name) # Save debug results debug_file = Path.home() / '.claude' / 'debug' / f'mcp_{server_name}_debug.json' debug_file.parent.mkdir(parents=True, exist_ok=True) with open(debug_file, 'w') as f: json.dump(result, f, indent=2, default=str) print(f"Debug results saved to: {debug_file}") # Usage if __name__ == "__main__": debugger = MCPDebugger() # Debug specific server result = debugger.debug_server_connection('context7') # Or debug all servers # debug_all_mcp_servers() ``` **MCP Communication Tracing:** ```bash # Enable comprehensive MCP communication logging export SUPERCLAUDE_DEBUG_MCP=true export SUPERCLAUDE_TRACE_MCP=true export SUPERCLAUDE_MCP_LOG_LEVEL=debug # Create MCP log directory mkdir -p ~/.claude/logs/mcp # Trace MCP requests and responses (fixed commands) python -m setup.main debug --mcp-trace --verbose # Alternative: Use direct debugging python -c " import os import logging os.environ['SUPERCLAUDE_DEBUG_MCP'] = 'true' from setup.mcp.manager import MCPManager # Enable debug logging logging.basicConfig(level=logging.DEBUG) manager = MCPManager() print('Available servers:', manager.get_available_servers()) print('Active servers:', manager.get_active_servers()) # Test connection to specific server try: connection = manager.connect_server('context7') print(f'Context7 connection: {connection}') except Exception as e: print(f'Connection failed: {e}') " # Monitor MCP communication in real-time tail -f ~/.claude/logs/superclaude-debug.log | grep -E "(MCP|REQUEST|RESPONSE)" # Check individual MCP server logs ls ~/.claude/logs/mcp-*.log tail -f ~/.claude/logs/mcp-context7.log # Debug specific MCP server issues python -c " from setup.mcp.debugging import MCPDebugger debugger = MCPDebugger() debugger.debug_all_mcp_servers() " ``` ## Common Issues Troubleshooting ### Installation and Setup Issues **Issue: Component Installation Fails** ```bash # Problem: Permission denied or file conflicts ERROR: Permission denied: '/home/user/.claude/CLAUDE.md' # Diagnosis ls -la ~/.claude/ whoami groups # Solution sudo chown -R $USER:$USER ~/.claude chmod 755 ~/.claude chmod 644 ~/.claude/*.md # Verification python -c " from setup.components.core import CoreComponent from setup.core.installation import InstallOptions from pathlib import Path component = CoreComponent() install_dir = Path.home() / '.claude' options = InstallOptions(install_dir=install_dir, force=True) result = component.install(options) print(f'Installation result: {result.success}') if not result.success: print(f'Error: {result.error}') " ``` **Issue: MCP Server Connection Failures** ```bash # Problem: Context7 server fails to start ERROR: MCP server 'context7' failed to connect # Comprehensive diagnosis python -c " from setup.mcp.debugging import MCPDebugger debugger = MCPDebugger() result = debugger.debug_server_connection('context7') print('Debug complete. Check ~/.claude/debug/mcp_context7_debug.json') " # Common fixes # 1. Check Node.js version node --version # Should be 16+ npm --version # 2. Reinstall MCP packages npm install -g @context7/mcp-server npm install -g @sequential-thinking/mcp-server npm install -g @magic-ui/mcp-server # 3. Verify PATH echo $PATH | grep npm which npx # 4. Check port conflicts netstat -tlnp | grep :300[1-6] # 5. Reset MCP configuration SuperClaude install mcp --force --reset ``` **Issue: Agent System Not Activating** ```bash # Problem: Expected agents not selected for tasks # Diagnosis script python -c " from setup.agents.debugging import AgentDebugger from setup.core.task_context import TaskContext debugger = AgentDebugger() context = TaskContext( input_text='implement secure authentication system', file_count=5, complexity_score=0.7 ) agents, pattern = debugger.debug_agent_selection(context) print(f'Expected: security-engineer') print(f'Actually selected: {agents}') print(f'Coordination: {pattern}') " # Common solutions # 1. Check trigger keywords cat ~/.claude/AGENT_SecurityEngineer.md | grep -i "trigger" # 2. Update agent triggers # Edit ~/.claude/AGENT_SecurityEngineer.md # Add keywords: auth, authentication, secure, login # 3. Clear agent cache rm -f ~/.claude/cache/agent_*.cache # 4. Verify agent installation python -c " from setup.agents.manager import AgentManager manager = AgentManager() agents = manager.get_available_agents() print([agent.name for agent in agents]) " ``` ### Development and Testing Issues **Issue: Tests Failing Due to Environment** ```bash # Problem: Tests fail with import errors or missing dependencies # Solution: Set up proper test environment # 1. Create isolated test environment python -m venv test_env source test_env/bin/activate # 2. Install all dependencies pip install -e .[dev,test] pip install pytest pytest-cov pytest-mock # 3. Set test environment variables export SUPERCLAUDE_TEST_MODE=true export SUPERCLAUDE_CONFIG_DIR=/tmp/superclaude_test export PYTHONPATH=$PWD:$PYTHONPATH # 4. Verify test setup python -c " import sys print('Python path:', sys.path) try: from setup.components.base import BaseComponent print('✅ Components import successful') except ImportError as e: print('❌ Components import failed:', e) try: from setup.core.registry import ComponentRegistry print('✅ Registry import successful') except ImportError as e: print('❌ Registry import failed:', e) " # 5. Run basic connectivity test pytest tests/test_basic.py -v --tb=short ``` **Issue: Session Management Problems** ```bash # Problem: Sessions not loading or saving properly # Diagnosis python -c " from setup.services.session_manager import SessionManager import json manager = SessionManager() # Check session directory session_dir = manager.get_session_directory() print(f'Session directory: {session_dir}') print(f'Directory exists: {session_dir.exists()}') if session_dir.exists(): sessions = list(session_dir.glob('*.json')) print(f'Existing sessions: {len(sessions)}') for session in sessions: print(f' {session.name}') # Test session creation try: test_session = manager.create_session('test-debug') print(f'✅ Session creation successful: {test_session.id}') # Test session save/load manager.save_session(test_session.id) loaded = manager.load_session(test_session.id) print(f'✅ Session save/load successful') except Exception as e: print(f'❌ Session operation failed: {e}') " # Common fixes # 1. Check permissions chmod 755 ~/.claude/sessions/ chmod 644 ~/.claude/sessions/*.json # 2. Clear corrupted sessions rm ~/.claude/sessions/corrupted_session_*.json # 3. Reset session storage mv ~/.claude/sessions ~/.claude/sessions_backup mkdir -p ~/.claude/sessions ``` ### Performance and Memory Issues **Issue: High Memory Usage** ```python # Diagnosis script import psutil import gc from setup.services.session_manager import SessionManager from setup.core.registry import ComponentRegistry def diagnose_memory_issues(): """Comprehensive memory diagnosis""" print("🧠 Memory Diagnosis Report") print("=" * 40) # System memory memory = psutil.virtual_memory() print(f"System Memory: {memory.percent}% used ({memory.used // 1024**2} MB)") # Process memory process = psutil.Process() process_memory = process.memory_info() print(f"Process Memory: {process_memory.rss // 1024**2} MB") # Python object counts gc.collect() object_counts = {} for obj in gc.get_objects(): obj_type = type(obj).__name__ object_counts[obj_type] = object_counts.get(obj_type, 0) + 1 # Show top memory consumers top_objects = sorted(object_counts.items(), key=lambda x: x[1], reverse=True)[:10] print("\nTop Object Types:") for obj_type, count in top_objects: print(f" {obj_type}: {count}") # Check SuperClaude specific memory usage try: session_manager = SessionManager() active_sessions = session_manager.get_active_sessions() print(f"\nActive Sessions: {len(active_sessions)}") registry = ComponentRegistry() loaded_components = registry.get_loaded_components() print(f"Loaded Components: {len(loaded_components)}") except Exception as e: print(f"SuperClaude memory check failed: {e}") # Memory leak detection gc.set_debug(gc.DEBUG_LEAK) gc.collect() leaked_objects = gc.garbage if leaked_objects: print(f"\n⚠️ Potential memory leaks: {len(leaked_objects)} objects") else: print("\n✅ No obvious memory leaks detected") if __name__ == "__main__": diagnose_memory_issues() ``` ### Debugging Workflow Integration **Debugging Workflow for Complex Issues:** ```python # Complete debugging workflow script import json import time from pathlib import Path from setup.agents.debugging import AgentDebugger from setup.modes.debugging import ModeDebugger from setup.mcp.debugging import MCPDebugger class ComprehensiveDebugger: def __init__(self): self.debug_dir = Path.home() / '.claude' / 'debug' self.debug_dir.mkdir(parents=True, exist_ok=True) self.agent_debugger = AgentDebugger() self.mode_debugger = ModeDebugger() self.mcp_debugger = MCPDebugger() def run_full_diagnosis(self, issue_description: str) -> Dict[str, Any]: """Run comprehensive diagnosis for any issue""" print(f"🔍 Starting comprehensive diagnosis for: {issue_description}") diagnosis_results = { 'issue_description': issue_description, 'timestamp': time.time(), 'components': {} } # Test agent system print("\n1. Testing Agent System...") agent_results = self._test_agent_system() diagnosis_results['components']['agents'] = agent_results # Test mode system print("\n2. Testing Mode System...") mode_results = self._test_mode_system() diagnosis_results['components']['modes'] = mode_results # Test MCP servers print("\n3. Testing MCP Servers...") mcp_results = self._test_mcp_system() diagnosis_results['components']['mcp'] = mcp_results # Generate recommendations print("\n4. Generating Recommendations...") recommendations = self._generate_recommendations(diagnosis_results) diagnosis_results['recommendations'] = recommendations # Save results results_file = self.debug_dir / f'diagnosis_{int(time.time())}.json' with open(results_file, 'w') as f: json.dump(diagnosis_results, f, indent=2, default=str) print(f"\n📊 Diagnosis complete. Results saved to: {results_file}") return diagnosis_results def _test_agent_system(self) -> Dict[str, Any]: """Test agent system functionality""" from setup.core.task_context import TaskContext test_contexts = [ TaskContext(input_text="implement authentication", complexity_score=0.5), TaskContext(input_text="debug security issue", complexity_score=0.8), TaskContext(input_text="create UI components", complexity_score=0.6) ] results = {'tests': [], 'overall_health': 'unknown'} for i, context in enumerate(test_contexts): try: agents, pattern = self.agent_debugger.debug_agent_selection(context) results['tests'].append({ 'test_id': i, 'input': context.input_text, 'selected_agents': agents, 'coordination_pattern': pattern, 'success': True }) except Exception as e: results['tests'].append({ 'test_id': i, 'input': context.input_text, 'error': str(e), 'success': False }) # Determine overall health successful_tests = sum(1 for test in results['tests'] if test.get('success', False)) if successful_tests == len(test_contexts): results['overall_health'] = 'healthy' elif successful_tests > 0: results['overall_health'] = 'partial' else: results['overall_health'] = 'failed' return results def _test_mode_system(self) -> Dict[str, Any]: """Test mode system functionality""" # Similar implementation for mode testing return {'overall_health': 'healthy', 'tests': []} def _test_mcp_system(self) -> Dict[str, Any]: """Test MCP server system""" mcp_servers = ['context7', 'sequential', 'magic'] results = {'servers': {}, 'overall_health': 'unknown'} healthy_servers = 0 for server in mcp_servers: try: server_result = self.mcp_debugger.debug_server_connection(server) results['servers'][server] = server_result if server_result['checks'].get('connection', {}).get('connected', False): healthy_servers += 1 except Exception as e: results['servers'][server] = {'error': str(e), 'healthy': False} # Determine overall health if healthy_servers == len(mcp_servers): results['overall_health'] = 'healthy' elif healthy_servers > 0: results['overall_health'] = 'partial' else: results['overall_health'] = 'failed' return results def _generate_recommendations(self, diagnosis_results: Dict[str, Any]) -> List[str]: """Generate specific recommendations based on diagnosis""" recommendations = [] # Agent system recommendations agent_health = diagnosis_results['components']['agents']['overall_health'] if agent_health != 'healthy': recommendations.append("Reinstall agent components: SuperClaude install agents --force") recommendations.append("Check agent trigger keywords in ~/.claude/AGENT_*.md files") # MCP system recommendations mcp_health = diagnosis_results['components']['mcp']['overall_health'] if mcp_health != 'healthy': recommendations.append("Check Node.js version: node --version (requires 16+)") recommendations.append("Reinstall MCP servers: SuperClaude install mcp --force") recommendations.append("Check MCP server logs: ~/.claude/logs/mcp-*.log") # General recommendations if not recommendations: recommendations.append("✅ All systems appear healthy") else: recommendations.insert(0, "🔧 Recommended fixes:") return recommendations # Usage if __name__ == "__main__": debugger = ComprehensiveDebugger() # Example usage issue = "Agents not activating for security tasks" results = debugger.run_full_diagnosis(issue) print("\n📋 Summary:") for rec in results['recommendations']: print(f" {rec}") ``` ### Session Management Debugging **Session Context Inspection:** ```python # Session debugging with complete imports import json import time from datetime import datetime from typing import Dict, List, Any, Optional from pathlib import Path from setup.services.session_manager import SessionManager from setup.core.session import Session from setup.core.memory import MemoryManager class SessionDebugger: def __init__(self): self.session_manager = SessionManager() self.memory_manager = MemoryManager() def debug_session_state(self, session_id: str) -> Dict[str, Any]: """Comprehensive session state debugging""" print(f"💾 Session Debug: {session_id}") debug_results = { 'session_id': session_id, 'timestamp': time.time(), 'checks': {} } try: # Load session context session = self._load_session_context(session_id) if session: context_info = self._analyze_session_context(session) print(f" Context size: {context_info['size']} items") debug_results['checks']['context'] = context_info # Analyze memory usage memory_usage = self._analyze_memory_usage(session) print(f" Memory usage: {memory_usage['total_mb']} MB") debug_results['checks']['memory'] = memory_usage # Check context health health = self._check_context_health(session) print(f" Context health: {health['status']}") debug_results['checks']['health'] = health # Show recent activities activities = self._get_recent_activities(session, limit=10) print(f" Recent activities: {len(activities)} items") debug_results['checks']['activities'] = activities for activity in activities[:5]: # Show first 5 print(f" {activity['timestamp']}: {activity['action']}") else: error_msg = f"Session {session_id} not found or failed to load" print(f" Error: {error_msg}") debug_results['checks']['error'] = error_msg except Exception as e: error_msg = f"Session debugging failed: {str(e)}" print(f" Error: {error_msg}") debug_results['checks']['error'] = error_msg return debug_results def _load_session_context(self, session_id: str) -> Optional[Session]: """Load session with error handling""" try: return self.session_manager.load_session(session_id) except Exception as e: print(f"Failed to load session {session_id}: {e}") return None def _analyze_session_context(self, session: Session) -> Dict[str, Any]: """Analyze session context structure and content""" context_info = { 'size': 0, 'components': [], 'memory_items': 0, 'last_activity': None } try: # Get context size if hasattr(session, 'context'): context_info['size'] = len(session.context) # Get active components if hasattr(session, 'active_components'): context_info['components'] = session.active_components # Get memory items count if hasattr(session, 'memory_items'): context_info['memory_items'] = len(session.memory_items) # Get last activity if hasattr(session, 'last_activity'): context_info['last_activity'] = session.last_activity except Exception as e: context_info['error'] = str(e) return context_info def _analyze_memory_usage(self, session: Session) -> Dict[str, Any]: """Analyze session memory usage""" memory_info = { 'total_mb': 0, 'context_mb': 0, 'memory_items_mb': 0, 'breakdown': {} } try: import sys # Calculate context memory if hasattr(session, 'context'): context_size = sys.getsizeof(session.context) memory_info['context_mb'] = context_size / (1024 * 1024) # Calculate memory items size if hasattr(session, 'memory_items'): memory_items_size = sys.getsizeof(session.memory_items) memory_info['memory_items_mb'] = memory_items_size / (1024 * 1024) # Total memory memory_info['total_mb'] = memory_info['context_mb'] + memory_info['memory_items_mb'] # Memory breakdown by type if hasattr(session, 'memory_items'): type_counts = {} for item in session.memory_items: item_type = type(item).__name__ type_counts[item_type] = type_counts.get(item_type, 0) + 1 memory_info['breakdown'] = type_counts except Exception as e: memory_info['error'] = str(e) return memory_info def _check_context_health(self, session: Session) -> Dict[str, Any]: """Check session context health and consistency""" health_info = { 'status': 'unknown', 'issues': [], 'warnings': [] } try: # Check if session is valid if not hasattr(session, 'id'): health_info['issues'].append('Session missing ID') # Check context consistency if hasattr(session, 'context') and session.context is None: health_info['warnings'].append('Context is None') # Check memory item validity if hasattr(session, 'memory_items'): invalid_items = 0 for item in session.memory_items: if not hasattr(item, 'key') or not hasattr(item, 'value'): invalid_items += 1 if invalid_items > 0: health_info['warnings'].append(f'{invalid_items} invalid memory items') # Determine overall status if health_info['issues']: health_info['status'] = 'unhealthy' elif health_info['warnings']: health_info['status'] = 'warning' else: health_info['status'] = 'healthy' except Exception as e: health_info['status'] = 'error' health_info['issues'].append(f'Health check failed: {str(e)}') return health_info def _get_recent_activities(self, session: Session, limit: int = 10) -> List[Dict[str, Any]]: """Get recent session activities""" activities = [] try: if hasattr(session, 'activity_log'): # Get from activity log for activity in session.activity_log[-limit:]: activities.append({ 'timestamp': activity.get('timestamp', 'unknown'), 'action': activity.get('action', 'unknown'), 'details': activity.get('details', {}) }) else: # Generate synthetic activity info activities.append({ 'timestamp': datetime.now().isoformat(), 'action': 'session_loaded', 'details': {'session_id': session.id} }) except Exception as e: activities.append({ 'timestamp': datetime.now().isoformat(), 'action': 'error', 'details': {'error': str(e)} }) return activities def debug_all_sessions(self) -> Dict[str, Any]: """Debug all available sessions""" print("🔍 Debugging All Sessions") print("=" * 40) all_results = { 'session_count': 0, 'healthy_sessions': 0, 'sessions': {} } try: available_sessions = self.session_manager.list_sessions() all_results['session_count'] = len(available_sessions) for session_id in available_sessions: print(f"\nDebugging session: {session_id}") session_result = self.debug_session_state(session_id) all_results['sessions'][session_id] = session_result # Count healthy sessions if session_result['checks'].get('health', {}).get('status') == 'healthy': all_results['healthy_sessions'] += 1 except Exception as e: all_results['error'] = str(e) print(f"\n📊 Summary: {all_results['healthy_sessions']}/{all_results['session_count']} sessions healthy") return all_results # Usage examples def debug_session_example(): """Example session debugging usage""" debugger = SessionDebugger() # Debug specific session result = debugger.debug_session_state('current-session') # Save debug results debug_file = Path.home() / '.claude' / 'debug' / 'session_debug.json' debug_file.parent.mkdir(parents=True, exist_ok=True) with open(debug_file, 'w') as f: json.dump(result, f, indent=2, default=str) print(f"Debug results saved to: {debug_file}") return result # Usage if __name__ == "__main__": debug_session_example() ``` **Session Lifecycle Tracing:** ```bash # Enable comprehensive session debugging export SUPERCLAUDE_DEBUG_SESSIONS=true export SUPERCLAUDE_DEBUG_SESSION_LIFECYCLE=true export SUPERCLAUDE_LOG_LEVEL=debug # Create session debug environment mkdir -p ~/.claude/debug/sessions mkdir -p ~/.claude/logs # Trace session operations with enhanced debugging python -c " import os import json from pathlib import Path from setup.services.session_manager import SessionManager from setup.core.session import Session # Enable debug mode os.environ['SUPERCLAUDE_DEBUG_SESSIONS'] = 'true' # Initialize session manager with debugging manager = SessionManager() # Enable debug mode if available if hasattr(manager, 'enable_debug_mode'): manager.enable_debug_mode() print('✅ Debug mode enabled') # Check existing sessions print('\\n📁 Existing Sessions:') try: sessions = manager.list_sessions() print(f'Found {len(sessions)} sessions:') for session_id in sessions: print(f' - {session_id}') except Exception as e: print(f'Failed to list sessions: {e}') # Create test session with tracing print('\\n🔄 Creating Test Session:') try: test_session = manager.create_session('debug-test-session') print(f'✅ Created session: {test_session.id}') # Add some test data test_session.add_memory('test_key', 'test_value') test_session.add_context('test_context', {'type': 'debug'}) # Save session manager.save_session(test_session.id) print('✅ Session saved') # Load session with tracing print('\\n📥 Loading Session:') loaded_session = manager.load_session(test_session.id) if loaded_session: print(f'✅ Session loaded: {loaded_session.id}') # Debug info if hasattr(loaded_session, 'debug_info'): debug_info = loaded_session.debug_info() print(f'Debug info: {debug_info}') else: print('Session structure:') print(f' ID: {getattr(loaded_session, \"id\", \"N/A\")}') print(f' Memory items: {len(getattr(loaded_session, \"memory_items\", []))}') print(f' Context size: {len(getattr(loaded_session, \"context\", {}))}') else: print('❌ Failed to load session') except Exception as e: print(f'❌ Session operation failed: {e}') import traceback traceback.print_exc() " # Check session storage and metadata echo -e "\n📂 Session Storage Analysis:" ls -la ~/.claude/sessions/ 2>/dev/null || echo "Session directory not found" # Check for session metadata if [ -f ~/.claude/sessions/session-metadata.json ]; then echo -e "\n📄 Session Metadata:" cat ~/.claude/sessions/session-metadata.json | python -m json.tool else echo "No session metadata file found" fi # Check session logs echo -e "\n📋 Session Logs:" ls -la ~/.claude/logs/*session*.log 2>/dev/null || echo "No session logs found" # Monitor session activity in real-time echo -e "\n🔍 Monitoring Session Activity:" echo "Run this in a separate terminal:" echo "tail -f ~/.claude/logs/superclaude-debug.log | grep -E '(SESSION|MEMORY|CONTEXT)'" ``` **Memory Debugging:** ```python # Memory debugging with complete imports import gc import sys import time import psutil import tracemalloc from typing import Dict, List, Any, Optional from setup.services.session_manager import SessionManager from setup.core.registry import ComponentRegistry from setup.mcp.manager import MCPManager class MemoryDebugger: def __init__(self): self.session_manager = SessionManager() self.component_registry = ComponentRegistry() self.mcp_manager = MCPManager() def debug_memory_usage(self) -> Dict[str, Any]: """Comprehensive memory usage debugging""" print("🧠 Memory Usage Debug:") memory_report = { 'timestamp': time.time(), 'system': {}, 'process': {}, 'superclaude': {}, 'sessions': {}, 'components': {}, 'leaks': [] } # System memory system_memory = self._debug_system_memory() print(f" System memory: {system_memory['percent']}% used ({system_memory['used_gb']:.1f} GB)") memory_report['system'] = system_memory # Process memory process_memory = self._debug_process_memory() print(f" Process memory: {process_memory['rss_mb']:.1f} MB RSS, {process_memory['vms_mb']:.1f} MB VMS") memory_report['process'] = process_memory # SuperClaude specific memory sc_memory = self._get_superclaude_memory() print(f" SuperClaude components: {sc_memory['total_mb']:.1f} MB") memory_report['superclaude'] = sc_memory # Session memory breakdown session_memory = self._debug_session_memory() print(f" Active sessions: {len(session_memory)} sessions, {session_memory.get('total_mb', 0):.1f} MB") memory_report['sessions'] = session_memory # Component memory component_memory = self._debug_component_memory() print(f" Loaded components: {len(component_memory)} components") memory_report['components'] = component_memory # Memory leak detection leaks = self._detect_memory_leaks() if leaks: print(f" 🚨 Potential leaks: {len(leaks)} objects") memory_report['leaks'] = leaks else: print(" ✅ No obvious memory leaks detected") return memory_report def _debug_system_memory(self) -> Dict[str, Any]: """Debug system-wide memory usage""" try: memory = psutil.virtual_memory() return { 'total_gb': memory.total / (1024**3), 'used_gb': memory.used / (1024**3), 'available_gb': memory.available / (1024**3), 'percent': memory.percent } except Exception as e: return {'error': str(e)} def _debug_process_memory(self) -> Dict[str, Any]: """Debug current process memory usage""" try: process = psutil.Process() memory_info = process.memory_info() memory_percent = process.memory_percent() return { 'rss_mb': memory_info.rss / (1024**2), 'vms_mb': memory_info.vms / (1024**2), 'percent': memory_percent, 'num_threads': process.num_threads() } except Exception as e: return {'error': str(e)} def _get_superclaude_memory(self) -> Dict[str, Any]: """Get SuperClaude specific memory usage""" try: total_size = 0 component_sizes = {} # Measure component registry if hasattr(self.component_registry, 'components'): registry_size = sys.getsizeof(self.component_registry.components) component_sizes['registry'] = registry_size / (1024**2) total_size += registry_size # Measure MCP manager if hasattr(self.mcp_manager, 'connections'): mcp_size = sys.getsizeof(self.mcp_manager.connections) component_sizes['mcp_manager'] = mcp_size / (1024**2) total_size += mcp_size # Measure session manager if hasattr(self.session_manager, 'sessions'): session_mgr_size = sys.getsizeof(self.session_manager.sessions) component_sizes['session_manager'] = session_mgr_size / (1024**2) total_size += session_mgr_size return { 'total_mb': total_size / (1024**2), 'breakdown': component_sizes } except Exception as e: return {'error': str(e)} def _debug_session_memory(self) -> Dict[str, Any]: """Debug session memory usage""" try: sessions = self._get_active_sessions() session_memory = {} total_memory = 0 for session_id, session in sessions.items(): size = self._get_session_memory_size(session) session_memory[session_id] = size total_memory += size return { 'sessions': session_memory, 'total_mb': total_memory / (1024**2), 'count': len(sessions) } except Exception as e: return {'error': str(e)} def _debug_component_memory(self) -> Dict[str, Any]: """Debug component memory usage""" try: components = {} # Get loaded components if hasattr(self.component_registry, 'get_loaded_components'): loaded = self.component_registry.get_loaded_components() for component_name, component in loaded.items(): size = sys.getsizeof(component) / (1024**2) components[component_name] = { 'size_mb': size, 'type': type(component).__name__ } return components except Exception as e: return {'error': str(e)} def _get_active_sessions(self) -> Dict[str, Any]: """Get active sessions safely""" try: if hasattr(self.session_manager, 'get_active_sessions'): return self.session_manager.get_active_sessions() elif hasattr(self.session_manager, 'sessions'): return self.session_manager.sessions else: return {} except Exception: return {} def _get_session_memory_size(self, session) -> int: """Get memory size of a session object""" try: if hasattr(session, 'get_memory_size'): return session.get_memory_size() else: # Calculate manually size = sys.getsizeof(session) if hasattr(session, 'context'): size += sys.getsizeof(session.context) if hasattr(session, 'memory_items'): size += sys.getsizeof(session.memory_items) return size except Exception: return 0 def _detect_memory_leaks(self) -> List[Dict[str, Any]]: """Detect potential memory leaks""" try: # Force garbage collection gc.collect() # Check for unreachable objects unreachable = gc.garbage leaks = [] for obj in unreachable[:10]: # Limit to first 10 leaks.append({ 'type': type(obj).__name__, 'size': sys.getsizeof(obj), 'id': id(obj) }) # Check for circular references referrers = {} for obj in gc.get_objects(): obj_type = type(obj).__name__ referrers[obj_type] = referrers.get(obj_type, 0) + 1 # Look for suspicious patterns suspicious_types = ['function', 'method', 'traceback'] for obj_type in suspicious_types: if referrers.get(obj_type, 0) > 1000: leaks.append({ 'type': f'excessive_{obj_type}', 'count': referrers[obj_type], 'warning': f'High number of {obj_type} objects' }) return leaks except Exception as e: return [{'error': str(e)}] def start_memory_monitoring(self, output_file: Optional[str] = None): """Start continuous memory monitoring""" try: # Start tracemalloc for detailed tracking tracemalloc.start() print("🔍 Memory monitoring started") print("Call stop_memory_monitoring() to get detailed report") if output_file: print(f"Results will be saved to: {output_file}") except Exception as e: print(f"Failed to start memory monitoring: {e}") def stop_memory_monitoring(self, output_file: Optional[str] = None) -> Dict[str, Any]: """Stop memory monitoring and generate report""" try: if not tracemalloc.is_tracing(): print("Memory monitoring not active") return {} # Get current trace current, peak = tracemalloc.get_traced_memory() # Get top stats snapshot = tracemalloc.take_snapshot() top_stats = snapshot.statistics('lineno') # Stop tracing tracemalloc.stop() report = { 'current_mb': current / (1024**2), 'peak_mb': peak / (1024**2), 'top_memory_locations': [] } # Add top memory consuming locations for index, stat in enumerate(top_stats[:10]): report['top_memory_locations'].append({ 'rank': index + 1, 'size_mb': stat.size / (1024**2), 'count': stat.count, 'filename': stat.traceback.format()[0] if stat.traceback else 'unknown' }) print(f"📊 Memory Monitoring Report:") print(f" Current usage: {report['current_mb']:.1f} MB") print(f" Peak usage: {report['peak_mb']:.1f} MB") if output_file: import json with open(output_file, 'w') as f: json.dump(report, f, indent=2, default=str) print(f" Report saved to: {output_file}") return report except Exception as e: print(f"Failed to stop memory monitoring: {e}") return {'error': str(e)} # Usage examples def memory_debugging_example(): """Example memory debugging workflow""" debugger = MemoryDebugger() # Basic memory check print("=== Basic Memory Analysis ===") memory_report = debugger.debug_memory_usage() # Start detailed monitoring print("\n=== Starting Detailed Monitoring ===") debugger.start_memory_monitoring() # Simulate some work try: from setup.core.task_context import TaskContext contexts = [] for i in range(100): context = TaskContext( input_text=f"test task {i}", complexity_score=0.5 ) contexts.append(context) print(f"Created {len(contexts)} task contexts") except Exception as e: print(f"Test work failed: {e}") # Stop monitoring and get report print("\n=== Monitoring Report ===") monitoring_report = debugger.stop_memory_monitoring('/tmp/memory_report.json') return memory_report, monitoring_report if __name__ == "__main__": memory_debugging_example() ``` ## Development Testing Patterns ### Unit Testing Patterns **Component Testing Pattern:** ```python class TestComponentBase: """Base class for component testing""" @pytest.fixture def temp_install_dir(self): """Provide temporary installation directory""" temp_dir = Path(tempfile.mkdtemp()) yield temp_dir shutil.rmtree(temp_dir) @pytest.fixture def mock_registry(self): """Provide mock component registry""" registry = ComponentRegistry() registry.components = {} # Clean state return registry class TestAgentComponent(TestComponentBase): def test_agent_installation(self, temp_install_dir, mock_registry): """Test agent component installation""" # Setup agent_component = AgentComponent() # Execute result = agent_component.install(temp_install_dir) # Verify assert result.success assert (temp_install_dir / 'AGENT_SecurityEngineer.md').exists() # Verify content content = (temp_install_dir / 'AGENT_SecurityEngineer.md').read_text() assert 'security' in content assert 'vulnerability' in content ``` **Integration Testing Pattern:** ```python class TestComponentIntegration: def test_full_installation_workflow(self): """Test complete installation workflow""" # Setup clean environment test_config = self._create_test_config() # Install core components installer = InstallationOrchestrator() result = installer.install_components(['core'], test_config) assert result.success assert test_config.install_dir.exists() # Verify core functionality claude_md = test_config.install_dir / 'CLAUDE.md' assert claude_md.exists() content = claude_md.read_text() assert '@FLAGS.md' in content assert '@RULES.md' in content def test_mcp_integration(self): """Test MCP server integration""" # Install MCP component mcp_component = MCPComponent() result = mcp_component.install(self.test_dir) # Verify MCP configuration mcp_config = self.test_dir / '.claude.json' assert mcp_config.exists() config_data = json.loads(mcp_config.read_text()) assert 'mcpServers' in config_data assert 'context7' in config_data['mcpServers'] ``` **Test-Driven Development Pattern:** ```python # 1. Write test first (Red) def test_new_agent_activation(): """Test new data science agent activation""" agent_system = AgentSystem() # Should activate on data science keywords task_context = TaskContext( input_text="analyze this dataset with pandas", file_types=['.csv', '.ipynb'] ) selected_agents = agent_system.select_agents(task_context) assert 'data-scientist' in selected_agents # 2. Implement minimal code (Green) class AgentSystem: def select_agents(self, task_context): if 'dataset' in task_context.input_text: return ['data-scientist'] return [] # 3. Refactor (Refactor) class AgentSystem: def select_agents(self, task_context): selected = [] # Data science triggers data_triggers = ['dataset', 'pandas', 'numpy', 'analytics'] if any(trigger in task_context.input_text for trigger in data_triggers): selected.append('data-scientist') return selected ``` ## Chaos Engineering & Fault Injection ⏱️ **45-60 minutes setup** **🎯 Skill Level: Advanced** Systematic chaos engineering framework for testing SuperClaude Framework resilience and fault tolerance: ### Chaos Engineering Framework **Chaos Testing Philosophy:** SuperClaude Framework operates in complex environments with multiple failure modes. Chaos engineering proactively tests system resilience by intentionally introducing controlled failures. ```python # chaos/framework/chaos_engine.py import random import time import threading import subprocess from typing import List, Dict, Any, Callable from dataclasses import dataclass from enum import Enum class FailureType(Enum): """Types of failures that can be injected""" NETWORK_LATENCY = "network_latency" NETWORK_PARTITION = "network_partition" MEMORY_PRESSURE = "memory_pressure" CPU_SPIKE = "cpu_spike" DISK_IO_FAILURE = "disk_io_failure" PROCESS_KILL = "process_kill" MCP_SERVER_CRASH = "mcp_server_crash" AGENT_COORDINATION_FAILURE = "agent_coordination_failure" CONFIG_CORRUPTION = "config_corruption" @dataclass class ChaosExperiment: """Definition of a chaos engineering experiment""" name: str description: str failure_type: FailureType target_components: List[str] duration_seconds: int intensity: float # 0.0 to 1.0 recovery_time: int success_criteria: Dict[str, Any] rollback_strategy: str class ChaosEngine: """Core chaos engineering orchestration engine""" def __init__(self): self.active_experiments = {} self.failure_injectors = { FailureType.NETWORK_LATENCY: NetworkLatencyInjector(), FailureType.MEMORY_PRESSURE: MemoryPressureInjector(), FailureType.PROCESS_KILL: ProcessKillInjector(), FailureType.MCP_SERVER_CRASH: MCPServerCrashInjector(), FailureType.AGENT_COORDINATION_FAILURE: AgentFailureInjector(), FailureType.CONFIG_CORRUPTION: ConfigCorruptionInjector() } def execute_experiment(self, experiment: ChaosExperiment) -> Dict[str, Any]: """Execute a chaos engineering experiment with monitoring""" experiment_id = f"{experiment.name}_{int(time.time())}" print(f"🔥 Starting chaos experiment: {experiment.name}") # Pre-experiment baseline measurement baseline_metrics = self._measure_baseline_performance() # Start monitoring monitor = self._start_experiment_monitoring(experiment_id) try: # Inject failure injector = self.failure_injectors[experiment.failure_type] failure_context = injector.inject_failure(experiment) print(f"💥 Failure injected: {experiment.failure_type.value}") self.active_experiments[experiment_id] = { 'experiment': experiment, 'failure_context': failure_context, 'start_time': time.time() } # Monitor system behavior during failure failure_metrics = self._monitor_during_failure( experiment, experiment.duration_seconds ) # Stop failure injection injector.stop_failure(failure_context) print(f"🛑 Failure injection stopped") # Monitor recovery recovery_metrics = self._monitor_recovery( experiment, experiment.recovery_time ) # Analyze results results = self._analyze_experiment_results( experiment, baseline_metrics, failure_metrics, recovery_metrics ) return results except Exception as e: print(f"❌ Chaos experiment failed: {e}") # Emergency cleanup self._emergency_cleanup(experiment_id) raise finally: # Stop monitoring monitor.stop() # Clean up experiment tracking if experiment_id in self.active_experiments: del self.active_experiments[experiment_id] ``` **Fault Injection Framework:** ```python # chaos/fault_injection/targeted_faults.py import pytest import asyncio from chaos.framework.chaos_engine import ChaosEngine, ChaosExperiment, FailureType class TestFaultInjection: """Targeted fault injection tests for specific components""" @pytest.fixture def chaos_engine(self): return ChaosEngine() def test_mcp_server_connection_failure(self, chaos_engine): """Test MCP server connection failure handling""" experiment = ChaosExperiment( name="MCP Connection Failure Test", description="Test framework behavior when MCP servers become unavailable", failure_type=FailureType.MCP_SERVER_CRASH, target_components=["context7"], duration_seconds=30, intensity=1.0, # Complete failure recovery_time=15, success_criteria={ "fallback_activated": True, "error_handling": True, "recovery_time": 20 }, rollback_strategy="automatic" ) # Execute fault injection results = chaos_engine.execute_experiment(experiment) # Verify graceful degradation assert results['fallback_activated'], "Fallback mechanisms should activate" assert results['error_handling'], "Errors should be handled gracefully" assert results['recovery_time'] <= 20, "Recovery should complete within 20 seconds" def test_concurrent_failure_scenarios(self, chaos_engine): """Test system behavior under multiple concurrent failures""" # Test concurrent network and memory failures network_experiment = ChaosExperiment( name="Network Latency", failure_type=FailureType.NETWORK_LATENCY, target_components=["context7", "sequential"], duration_seconds=45, intensity=0.6, recovery_time=20, success_criteria={"max_latency": 2.0}, rollback_strategy="automatic" ) memory_experiment = ChaosExperiment( name="Memory Pressure", failure_type=FailureType.MEMORY_PRESSURE, target_components=["framework"], duration_seconds=45, intensity=0.5, recovery_time=20, success_criteria={"memory_leak_check": True}, rollback_strategy="automatic" ) # Execute both experiments and verify system stability network_result = chaos_engine.execute_experiment(network_experiment) memory_result = chaos_engine.execute_experiment(memory_experiment) assert network_result['system_stability'], "Network failure should not break system" assert memory_result['system_stability'], "Memory pressure should be handled gracefully" ``` ### Property-Based Testing with Hypothesis **Property-Based Testing Framework:** ```python # tests/property_based/test_framework_properties.py from hypothesis import given, strategies as st, settings, example from hypothesis.stateful import RuleBasedStateMachine, rule, invariant import pytest class SuperClaudePropertyTests: """Property-based tests for SuperClaude Framework invariants""" @given(component_ids=st.lists( st.sampled_from(['core', 'mcp', 'agents', 'modes']), min_size=1, max_size=4, unique=True )) @settings(max_examples=50) def test_component_installation_idempotency(self, component_ids): """Property: Installing the same component multiple times should be idempotent""" from setup.core.component_manager import ComponentManager from setup.core.installation import InstallOptions from pathlib import Path import tempfile # Create temporary installation directory with tempfile.TemporaryDirectory() as temp_dir: install_dir = Path(temp_dir) manager = ComponentManager() options = InstallOptions(install_dir=install_dir, backup_existing=True) # Install components first time results1 = [] for component_id in component_ids: result = manager.install_component(component_id, options) results1.append(result) # Get state after first installation state1 = self._get_installation_state(install_dir) # Install same components again results2 = [] for component_id in component_ids: result = manager.install_component(component_id, options) results2.append(result) # Get state after second installation state2 = self._get_installation_state(install_dir) # Property: Second installation should be idempotent assert state1 == state2, "Repeated installation should be idempotent" # Property: All installations should succeed for result in results1 + results2: assert result.success, f"Installation should succeed: {result.error}" @given(agent_combinations=st.lists( st.sampled_from([ 'system-architect', 'security-engineer', 'backend-architect', 'frontend-architect', 'performance-engineer' ]), min_size=1, max_size=3, unique=True )) def test_agent_coordination_consistency(self, agent_combinations): """Property: Agent coordination should be consistent regardless of activation order""" from setup.services.agent_manager import AgentManager from setup.services.task_context import TaskContext manager = AgentManager() # Create consistent task context context = TaskContext( description="Test task for property testing", complexity=0.5, domains=['testing'], requirements={} ) # Test different activation orders import itertools for permutation in itertools.permutations(agent_combinations): result = manager.activate_agents(list(permutation), context) # Property: Activation should always succeed with valid agents assert result.success, f"Agent activation should succeed: {result.error}" # Property: Same agents should be activated regardless of order activated_agents = set(result.activated_agents) expected_agents = set(agent_combinations) assert activated_agents == expected_agents, "Same agents should be activated" class MCPServerStateMachine(RuleBasedStateMachine): """Stateful property testing for MCP server lifecycle""" def __init__(self): super().__init__() self.server_states = {} self.connection_pool = {} @rule(server_name=st.sampled_from(['context7', 'sequential', 'magic', 'morphllm'])) def connect_server(self, server_name): """Rule: Connect to an MCP server""" from setup.services.mcp_manager import MCPManager manager = MCPManager() try: connection = manager.connect_server(server_name) self.server_states[server_name] = 'connected' self.connection_pool[server_name] = connection except Exception as e: self.server_states[server_name] = 'error' @rule(server_name=st.sampled_from(['context7', 'sequential', 'magic', 'morphllm'])) def disconnect_server(self, server_name): """Rule: Disconnect from an MCP server""" if server_name in self.connection_pool: connection = self.connection_pool[server_name] connection.disconnect() self.server_states[server_name] = 'disconnected' del self.connection_pool[server_name] @invariant() def connected_servers_have_connections(self): """Invariant: All servers marked as connected should have active connections""" for server_name, state in self.server_states.items(): if state == 'connected': assert server_name in self.connection_pool, f"Connected server {server_name} should have connection object" # Run property-based tests class TestMCPServerProperties(MCPServerStateMachine.TestCase): """Property-based test runner for MCP server state machine""" pass ``` ### Test Data Management and Fixtures **Comprehensive Test Data Framework:** ```python # tests/fixtures/test_data_manager.py import json import yaml import pytest from pathlib import Path from typing import Dict, Any, List from dataclasses import dataclass, asdict @dataclass class TestScenario: """Structured test scenario definition""" name: str description: str input_data: Dict[str, Any] expected_output: Dict[str, Any] test_configuration: Dict[str, Any] tags: List[str] class TestDataManager: """Centralized test data management system""" def __init__(self, data_directory: Path = None): self.data_dir = data_directory or Path(__file__).parent / "data" self.data_dir.mkdir(exist_ok=True) self.scenarios_cache = {} def create_agent_test_scenario(self, agent_name: str, complexity: float = 0.5) -> TestScenario: """Create standardized test scenario for agent testing""" scenario = TestScenario( name=f"agent_{agent_name}_test", description=f"Standard test scenario for {agent_name} agent", input_data={ "task_description": f"Test task for {agent_name}", "complexity": complexity, "domains": [agent_name.replace('-', '_')], "requirements": self._get_agent_requirements(agent_name) }, expected_output={ "success": True, "agent_activated": agent_name, "response_time": {"max": 5.0, "typical": 2.0}, "quality_score": {"min": 0.8} }, test_configuration={ "timeout": 30, "retry_count": 3, "mock_external_services": True }, tags=["agent_test", agent_name, f"complexity_{complexity}"] ) return scenario def create_mcp_integration_scenario(self, server_name: str, operation: str) -> TestScenario: """Create test scenario for MCP server integration""" scenario = TestScenario( name=f"mcp_{server_name}_{operation}", description=f"Integration test for {server_name} MCP server {operation} operation", input_data={ "server_name": server_name, "operation": operation, "parameters": self._get_operation_parameters(server_name, operation), "connection_config": { "timeout": 30, "max_retries": 3 } }, expected_output={ "connection_success": True, "operation_success": True, "response_format": "valid", "performance": { "response_time": {"max": 10.0}, "memory_usage": {"max": "100MB"} } }, test_configuration={ "mock_server": False, "health_check": True, "cleanup_after": True }, tags=["mcp_test", server_name, operation] ) return scenario def save_scenario(self, scenario: TestScenario): """Save test scenario to persistent storage""" scenario_file = self.data_dir / f"{scenario.name}.json" with open(scenario_file, 'w') as f: json.dump(asdict(scenario), f, indent=2) # Update cache self.scenarios_cache[scenario.name] = scenario def load_scenario(self, scenario_name: str) -> TestScenario: """Load test scenario from storage""" # Check cache first if scenario_name in self.scenarios_cache: return self.scenarios_cache[scenario_name] scenario_file = self.data_dir / f"{scenario_name}.json" if not scenario_file.exists(): raise FileNotFoundError(f"Test scenario not found: {scenario_name}") with open(scenario_file, 'r') as f: scenario_data = json.load(f) scenario = TestScenario(**scenario_data) self.scenarios_cache[scenario_name] = scenario return scenario def get_scenarios_by_tag(self, tag: str) -> List[TestScenario]: """Get all scenarios with specific tag""" matching_scenarios = [] # Load all scenario files for scenario_file in self.data_dir.glob("*.json"): try: scenario = self.load_scenario(scenario_file.stem) if tag in scenario.tags: matching_scenarios.append(scenario) except Exception as e: print(f"Error loading scenario {scenario_file}: {e}") return matching_scenarios # Pytest fixtures for test data management @pytest.fixture def test_data_manager(): """Fixture providing test data manager""" return TestDataManager() @pytest.fixture def agent_test_scenarios(test_data_manager): """Fixture providing agent test scenarios""" agents = ['system-architect', 'security-engineer', 'backend-architect'] scenarios = {} for agent in agents: scenarios[agent] = test_data_manager.create_agent_test_scenario(agent) test_data_manager.save_scenario(scenarios[agent]) return scenarios @pytest.fixture def mcp_test_scenarios(test_data_manager): """Fixture providing MCP server test scenarios""" mcp_servers = [ ('context7', 'documentation_lookup'), ('sequential', 'multi_step_analysis'), ('magic', 'ui_generation'), ('morphllm', 'code_transformation') ] scenarios = {} for server, operation in mcp_servers: scenario = test_data_manager.create_mcp_integration_scenario(server, operation) scenarios[f"{server}_{operation}"] = scenario test_data_manager.save_scenario(scenario) return scenarios # Usage in tests def test_agent_coordination_with_scenarios(agent_test_scenarios): """Test agent coordination using pre-defined scenarios""" for agent_name, scenario in agent_test_scenarios.items(): print(f"Testing agent: {agent_name}") # Use scenario data for test execution input_data = scenario.input_data expected_output = scenario.expected_output # Execute test using scenario parameters from setup.services.agent_manager import AgentManager manager = AgentManager() result = manager.activate_agents([agent_name], input_data) # Validate against expected output assert result.success == expected_output['success'] assert result.response_time <= expected_output['response_time']['max'] def test_mcp_integration_with_scenarios(mcp_test_scenarios): """Test MCP server integration using pre-defined scenarios""" for scenario_name, scenario in mcp_test_scenarios.items(): print(f"Testing MCP scenario: {scenario_name}") input_data = scenario.input_data expected_output = scenario.expected_output # Execute MCP test using scenario from setup.services.mcp_manager import MCPManager manager = MCPManager() connection = manager.connect_server(input_data['server_name']) assert connection.is_connected() == expected_output['connection_success'] # Test operation response = connection.execute_operation(input_data['operation'], input_data['parameters']) assert response.success == expected_output['operation_success'] ``` ## Performance Testing ### Performance Testing Methodologies **Memory Performance Testing:** ```python class MemoryPerformanceTest: def test_memory_usage_limits(self): """Test memory usage stays within limits""" import psutil import gc # Baseline memory gc.collect() baseline = psutil.Process().memory_info().rss # Load large session session_manager = SessionManager() large_session = session_manager.create_large_test_session() # Measure memory increase current = psutil.Process().memory_info().rss memory_increase = current - baseline # Assert reasonable memory usage (< 500MB increase) assert memory_increase < 500 * 1024 * 1024 def test_session_loading_speed(self): """Test session loading performance""" import time session_manager = SessionManager() # Create test session with known size test_session = session_manager.create_test_session(size='large') # Measure loading time start_time = time.time() loaded_session = session_manager.load_session(test_session.id) load_time = time.time() - start_time # Assert reasonable load time (< 5 seconds) assert load_time < 5.0 assert loaded_session.is_valid() ``` **Component Performance Benchmarks:** ```python class ComponentPerformanceBenchmark: def benchmark_component_installation(self): """Benchmark component installation speed""" import timeit def install_core(): installer = InstallationOrchestrator() temp_dir = Path(tempfile.mkdtemp()) installer.install_components(['core'], InstallOptions(install_dir=temp_dir)) shutil.rmtree(temp_dir) # Run benchmark execution_time = timeit.timeit(install_core, number=10) avg_time = execution_time / 10 # Assert reasonable installation time (< 2 seconds average) assert avg_time < 2.0 def benchmark_agent_selection(self): """Benchmark agent selection performance""" agent_system = AgentSystem() # Create complex task context complex_context = TaskContext( input_text="complex microservices security performance analysis", file_count=100, complexity_score=0.9 ) # Measure selection time start_time = time.time() selected_agents = agent_system.select_agents(complex_context) selection_time = time.time() - start_time # Assert fast selection (< 100ms) assert selection_time < 0.1 assert len(selected_agents) > 0 ``` **Load Testing:** ```python class LoadTest: def test_concurrent_installations(self): """Test concurrent component installations""" import threading import concurrent.futures def install_component(component_name): installer = InstallationOrchestrator() temp_dir = Path(tempfile.mkdtemp()) try: result = installer.install_components([component_name], InstallOptions(install_dir=temp_dir)) return result.success finally: shutil.rmtree(temp_dir) # Test concurrent installations components = ['core', 'agents', 'modes', 'mcp'] with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor: futures = [executor.submit(install_component, comp) for comp in components] results = [future.result() for future in futures] # All installations should succeed assert all(results) ``` ## Integration Testing ### Component Integration Testing **Multi-Component Workflow Testing:** ```python class TestComponentIntegration: def test_full_workflow_integration(self): """Test complete workflow with multiple components""" # Install all components installer = InstallationOrchestrator() components = ['core', 'agents', 'modes', 'mcp'] result = installer.install_components(components, self.test_config) assert result.success # Test agent-mode integration agent_system = AgentSystem() mode_system = ModeSystem() # Complex task requiring multiple agents and modes task_context = TaskContext( input_text="analyze security vulnerabilities in microservices architecture", complexity_score=0.8, file_count=50 ) # Should activate security-engineer + system-architect + introspection mode selected_agents = agent_system.select_agents(task_context) selected_modes = mode_system.select_modes(task_context) assert 'security-engineer' in selected_agents assert 'system-architect' in selected_agents assert 'introspection' in selected_modes def test_mcp_agent_coordination(self): """Test MCP server and agent coordination""" # Setup MCP servers mcp_manager = MCPManager() mcp_manager.connect_server('context7') mcp_manager.connect_server('sequential') # Setup agents agent_system = AgentSystem() # Task requiring both MCP and agents task_context = TaskContext( input_text="implement React authentication with best practices", domain='frontend' ) # Should coordinate frontend-architect + security-engineer + context7 + magic coordination_plan = agent_system.create_coordination_plan(task_context) assert 'frontend-architect' in coordination_plan.agents assert 'security-engineer' in coordination_plan.agents assert 'context7' in coordination_plan.mcp_servers assert 'magic' in coordination_plan.mcp_servers ``` **End-to-End Workflow Testing:** ```python class TestEndToEndWorkflows: def test_complete_development_workflow(self): """Test complete development workflow simulation""" # 1. Project initialization session_manager = SessionManager() session = session_manager.create_session('test-project') # 2. Requirements discovery (brainstorming mode) brainstorm_task = TaskContext( input_text="build e-commerce platform", session_id=session.id ) result = self._execute_task(brainstorm_task) assert result.mode == 'brainstorming' assert result.agents == ['system-architect', 'requirements-analyst'] # 3. Implementation planning (task management mode) planning_task = TaskContext( input_text="implement user authentication system", session_id=session.id, complexity_score=0.7 ) result = self._execute_task(planning_task) assert result.mode == 'task-management' assert 'security-engineer' in result.agents # 4. Code implementation (orchestration mode) implementation_task = TaskContext( input_text="create React login components with JWT", session_id=session.id, file_count=15 ) result = self._execute_task(implementation_task) assert result.mode == 'orchestration' assert 'context7' in result.mcp_servers assert 'magic' in result.mcp_servers # 5. Session persistence session_manager.save_session(session.id) # 6. Session restoration restored_session = session_manager.load_session(session.id) assert restored_session.context_size > 0 assert restored_session.has_memory('authentication-implementation') ``` **Cross-Platform Integration Testing:** ```python class TestCrossPlatformIntegration: @pytest.mark.parametrize("platform", ["linux", "macos", "windows"]) def test_installation_cross_platform(self, platform): """Test installation across different platforms""" if platform == "windows": expected_executable = "SuperClaude.exe" path_separator = "\" else: expected_executable = "SuperClaude" path_separator = "/" # Platform-specific installation installer = InstallationOrchestrator() config = PlatformConfig(platform=platform) result = installer.install_components(['core'], config) assert result.success # Verify platform-specific behavior install_path = config.install_dir assert install_path.exists() # Test executable permissions (Unix-like systems) if platform != "windows": executable_path = install_path / "bin" / expected_executable assert executable_path.exists() assert os.access(executable_path, os.X_OK) ``` ## Debugging Tools & Utilities ### Built-in Debugging Tools **SuperClaude Debug Command:** ```bash # Comprehensive system diagnostics SuperClaude debug --comprehensive # Component-specific debugging SuperClaude debug --components agents,mcp # Performance debugging SuperClaude debug --performance --memory # Session debugging SuperClaude debug --sessions --verbose # MCP server debugging SuperClaude debug --mcp-servers --trace ``` **Debug Environment Variables:** ```bash # Enable debug logging export SUPERCLAUDE_DEBUG=true export SUPERCLAUDE_LOG_LEVEL=debug # Component-specific debugging export SUPERCLAUDE_DEBUG_AGENTS=true export SUPERCLAUDE_DEBUG_MODES=true export SUPERCLAUDE_DEBUG_MCP=true export SUPERCLAUDE_DEBUG_SESSIONS=true # Performance debugging export SUPERCLAUDE_DEBUG_PERFORMANCE=true export SUPERCLAUDE_DEBUG_MEMORY=true # MCP communication tracing export SUPERCLAUDE_TRACE_MCP=true ``` **Development Debugging Utilities:** ```python # setup/utils/debug.py class DebugUtils: @staticmethod def enable_comprehensive_debugging(): """Enable all debugging features""" logging.basicConfig(level=logging.DEBUG) os.environ.update({ 'SUPERCLAUDE_DEBUG': 'true', 'SUPERCLAUDE_DEBUG_AGENTS': 'true', 'SUPERCLAUDE_DEBUG_MODES': 'true', 'SUPERCLAUDE_DEBUG_MCP': 'true' }) @staticmethod def create_debug_session(): """Create session with debug instrumentation""" session = DebugSession() session.enable_tracing() session.enable_memory_monitoring() return session @staticmethod def dump_system_state(): """Dump complete system state for analysis""" state = { 'components': ComponentRegistry().get_status(), 'agents': AgentSystem().get_status(), 'mcp_servers': MCPManager().get_status(), 'sessions': SessionManager().get_status(), 'memory': MemoryManager().get_usage() } with open('debug-system-state.json', 'w') as f: json.dump(state, f, indent=2) return state # Usage in development if __name__ == "__main__": DebugUtils.enable_comprehensive_debugging() state = DebugUtils.dump_system_state() print(f"System state dumped: {len(state)} components") ``` **Custom Debugging Tools:** ```python class ComponentDebugger: """Advanced component debugging and analysis""" def __init__(self): self.trace_buffer = [] self.performance_metrics = {} def trace_component_lifecycle(self, component): """Trace complete component lifecycle""" tracer = ComponentTracer(component) # Hook into lifecycle events tracer.on_install = self._trace_install tracer.on_activate = self._trace_activate tracer.on_execute = self._trace_execute tracer.on_deactivate = self._trace_deactivate return tracer def analyze_performance_bottlenecks(self): """Analyze performance bottlenecks in traces""" bottlenecks = [] for trace in self.trace_buffer: if trace.duration > 1.0: # > 1 second bottlenecks.append({ 'component': trace.component, 'operation': trace.operation, 'duration': trace.duration, 'stack_trace': trace.stack_trace }) return bottlenecks def generate_debug_report(self): """Generate comprehensive debug report""" report = { 'execution_traces': self.trace_buffer, 'performance_metrics': self.performance_metrics, 'bottlenecks': self.analyze_performance_bottlenecks(), 'memory_usage': self._get_memory_analysis(), 'recommendations': self._generate_recommendations() } return report # Usage debugger = ComponentDebugger() tracer = debugger.trace_component_lifecycle(agent_component) # Execute component operations agent_component.install(test_dir) # Generate debug report report = debugger.generate_debug_report() ``` **Log Analysis Tools:** ```python class LogAnalyzer: """Analyze SuperClaude logs for issues and patterns""" def analyze_installation_logs(self, log_file): """Analyze installation logs for failures""" issues = [] with open(log_file, 'r') as f: for line_num, line in enumerate(f, 1): # Check for error patterns if 'ERROR' in line: issues.append({ 'line': line_num, 'type': 'error', 'message': line.strip() }) elif 'TIMEOUT' in line: issues.append({ 'line': line_num, 'type': 'timeout', 'message': line.strip() }) elif 'FAILED' in line: issues.append({ 'line': line_num, 'type': 'failure', 'message': line.strip() }) return issues def extract_performance_metrics(self, log_file): """Extract performance metrics from logs""" metrics = { 'component_install_times': {}, 'agent_activation_times': {}, 'mcp_response_times': {} } # Parse log patterns for timing information # Implementation details... return metrics # Usage analyzer = LogAnalyzer() issues = analyzer.analyze_installation_logs('~/.claude/logs/installation.log') metrics = analyzer.extract_performance_metrics('~/.claude/logs/performance.log') ``` ## Common Development Issues ### Installation & Configuration Issues **Component Installation Failures:** ```bash # Issue: Component dependencies not resolved ERROR: Component 'mcp' requires 'core' but it's not installed # Solution: Install in dependency order SuperClaude install --components core mcp --resolve-dependencies # Issue: Permission denied during installation ERROR: Permission denied: '/home/user/.claude/CLAUDE.md' # Solution: Fix permissions sudo chown -R $USER ~/.claude chmod 755 ~/.claude ``` **MCP Server Connection Issues:** ```bash # Issue: Context7 server fails to start ERROR: MCP server 'context7' failed to connect # Debug: Check Node.js and server path node --version # Should be 16+ which context7 # Verify installation path # Solution: Reinstall MCP servers SuperClaude install --components mcp --force npm install -g @context7/mcp-server ``` **Configuration Conflicts:** ```python # Issue: CLAUDE.md import conflicts ERROR: Circular import detected: CLAUDE.md -> FLAGS.md -> CLAUDE.md # Debug: Check import structure def debug_import_structure(): with open('~/.claude/CLAUDE.md', 'r') as f: content = f.read() imports = re.findall(r'@(\w+\.md)', content) print(f"Imports detected: {imports}") # Check for circular references for import_file in imports: import_path = Path('~/.claude') / import_file if import_path.exists(): with open(import_path, 'r') as f: nested_imports = re.findall(r'@(\w+\.md)', f.read()) if 'CLAUDE.md' in nested_imports: print(f"Warning: Circular import: {import_file} -> CLAUDE.md") # Solution: Remove circular imports # Edit problematic files to remove @CLAUDE.md references ``` ### Component Development Issues **Agent System Issues:** ```python # Issue: Agent not activating for expected keywords class AgentActivationDebugger: def debug_activation_failure(self, input_text, expected_agent): print(f"Debugging agent activation failure:") print(f" Input: '{input_text}'") print(f" Expected: {expected_agent}") # Check trigger patterns agent_config = self._get_agent_config(expected_agent) triggers = agent_config.get('triggers', []) print(f" Agent triggers: {triggers}") # Check keyword matching matches = [] for trigger in triggers: if trigger.lower() in input_text.lower(): matches.append(trigger) print(f" Matched triggers: {matches}") if not matches: print(" No triggers matched - consider adding new keywords") # Suggest new triggers suggestions = self._suggest_triggers(input_text) print(f" Suggested triggers: {suggestions}") return matches # Usage debugger = AgentActivationDebugger() debugger.debug_activation_failure("implement secure login", "security-engineer") ``` **Mode Selection Issues:** ```python # Issue: Wrong behavioral mode activated class ModeSelectionDebugger: def debug_mode_selection(self, task_context): print("Mode selection debug:") # Analyze complexity score complexity = self._calculate_complexity(task_context) print(f" Complexity score: {complexity}") # Check mode thresholds mode_thresholds = { 'brainstorming': 0.2, 'task_management': 0.6, 'orchestration': 0.8, 'introspection': 0.5 # Special conditions } for mode, threshold in mode_thresholds.items(): if complexity >= threshold: print(f" {mode}: {complexity} >= {threshold}") else: print(f" {mode}: {complexity} < {threshold}") # Check special conditions special_triggers = self._check_special_triggers(task_context) print(f" Special triggers: {special_triggers}") return self._select_final_mode(complexity, special_triggers) # Usage context = TaskContext( input_text="fix authentication bug", file_count=5, error_present=True ) debugger = ModeSelectionDebugger() selected_mode = debugger.debug_mode_selection(context) ``` ### Issue Escalation & Resolution Process **Development Issue Classification:** ```python class IssueClassifier: SEVERITY_LEVELS = { 'critical': { 'description': 'System unusable, data loss risk', 'examples': ['Installation completely fails', 'Session data corruption'], 'response_time': '2 hours', 'escalation': 'immediate' }, 'high': { 'description': 'Major functionality broken', 'examples': ['MCP servers not connecting', 'Agent system not activating'], 'response_time': '24 hours', 'escalation': 'next business day' }, 'medium': { 'description': 'Feature partially working', 'examples': ['Some agents not activating', 'Performance degradation'], 'response_time': '1 week', 'escalation': 'weekly review' }, 'low': { 'description': 'Minor issues or enhancements', 'examples': ['Documentation improvements', 'Edge case handling'], 'response_time': '1 month', 'escalation': 'monthly review' } } def classify_issue(self, issue_description): """Classify issue severity based on description""" description_lower = issue_description.lower() # Critical indicators critical_keywords = ['data loss', 'corruption', 'completely broken', 'system unusable'] if any(keyword in description_lower for keyword in critical_keywords): return 'critical' # High severity indicators high_keywords = ['not working', 'major failure', 'broken functionality'] if any(keyword in description_lower for keyword in high_keywords): return 'high' # Medium severity indicators medium_keywords = ['performance', 'slow', 'partially working'] if any(keyword in description_lower for keyword in medium_keywords): return 'medium' return 'low' # Usage classifier = IssueClassifier() severity = classifier.classify_issue("MCP servers not connecting after installation") print(f"Issue severity: {severity}") print(f"Response expectation: {classifier.SEVERITY_LEVELS[severity]['response_time']}") ``` **Development Support Workflow:** ```bash # Step 1: Self-diagnosis SuperClaude debug --comprehensive > debug-report.txt # Step 2: Check common issues python -c " from setup.utils.troubleshooter import AutoTroubleshooter troubleshooter = AutoTroubleshooter() solutions = troubleshooter.suggest_solutions('mcp server connection failed') for solution in solutions: print(f'Solution: {solution}') " # Step 3: Community support # Search existing issues: https://github.com/SuperClaude-Org/SuperClaude_Framework/issues # Join discussions: https://github.com/SuperClaude-Org/SuperClaude_Framework/discussions # Step 4: Create detailed issue report # Include: # - SuperClaude version: SuperClaude --version # - System info: uname -a # - Python version: python --version # - Debug report: debug-report.txt # - Steps to reproduce # - Expected vs actual behavior ``` ## Performance Testing & Optimization > **⚡ Performance Context**: Performance optimization strategies are detailed in [Technical Architecture Guide](technical-architecture.md#performance-system). ### Performance Benchmarking **Memory Performance Testing:** ```python import psutil import memory_profiler from pytest import benchmark class TestPerformance: """Performance testing suite for SuperClaude components""" @memory_profiler.profile def test_memory_usage_component_installation(self): """Profile memory usage during component installation""" initial_memory = psutil.Process().memory_info().rss # Install large component set installer = InstallationOrchestrator() installer.install_components(['core', 'agents', 'modes', 'mcp']) final_memory = psutil.Process().memory_info().rss memory_increase = final_memory - initial_memory # Assert memory usage is within acceptable limits assert memory_increase < 100 * 1024 * 1024, f"Memory usage too high: {memory_increase} bytes" def test_agent_activation_speed(self, benchmark): """Benchmark agent activation performance""" agent_manager = AgentManager() task_context = TaskContext( input_text="implement secure authentication system", complexity_score=0.8 ) # Benchmark agent selection and activation result = benchmark(agent_manager.activate_agents, task_context) # Performance targets assert benchmark.stats['mean'] < 0.5, "Agent activation too slow" assert len(result) > 0, "No agents activated" ``` **Load Testing:** ```python def test_concurrent_installations(): """Test system under concurrent installation load""" import concurrent.futures import threading def install_component(component_id): installer = InstallationOrchestrator() return installer.install_component(component_id) # Test concurrent installations components = ['agent1', 'agent2', 'mode1', 'mode2'] with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor: futures = [executor.submit(install_component, comp) for comp in components] results = [future.result() for future in concurrent.futures.as_completed(futures)] # Verify all installations succeeded assert all(result.success for result in results) ``` ## Security Testing > **🔒 Security Integration**: Security testing is integrated with development workflows outlined in [Contributing Code Guide](contributing-code.md#security-guidelines). ### Security Testing Framework **Security Test Categories:** ```python class SecurityTestSuite: """Comprehensive security testing for SuperClaude components""" def test_input_validation(self): """Test input sanitization and validation""" malicious_inputs = [ "../../../etc/passwd", # Path traversal "", # XSS "'; DROP TABLE users; --", # SQL injection "$(rm -rf /)", # Command injection ] for malicious_input in malicious_inputs: with pytest.raises(ValidationError): self.component.process_input(malicious_input) def test_file_path_validation(self): """Test safe file path handling""" from setup.core.security import PathValidator validator = PathValidator(base_dir="/safe/base/dir") # Test safe paths assert validator.is_safe("subdir/file.txt") assert validator.is_safe("./relative/path.py") # Test dangerous paths assert not validator.is_safe("../../../etc/passwd") assert not validator.is_safe("/absolute/path/outside") ``` ### Vulnerability Testing **Security Validation Tools:** ```bash # Install security testing tools pip install bandit safety pip-audit # Run security scans python -m bandit -r setup/ SuperClaude/ python -m safety check python -m pip-audit # Test for hardcoded secrets grep -r "password\|api_key\|secret" --exclude-dir=tests setup/ ``` ## Integration Testing > **🔗 Integration Context**: Integration patterns are detailed in [Technical Architecture Guide](technical-architecture.md#integration-patterns). ### End-to-End Integration Testing **Full System Integration Tests:** ```python class TestSystemIntegration: """End-to-end system integration testing""" def test_complete_development_workflow(self): """Test complete development workflow end-to-end""" # 1. Initialize system system = SuperClaudeFramework() system.initialize() # 2. Install components installer = system.get_installer() result = installer.install(['core', 'agents', 'mcp']) assert result.success # 3. Activate agents for task task_context = TaskContext( input_text="build secure web application with React", file_count=15, complexity_score=0.9 ) agents = system.activate_agents(task_context) assert 'security-engineer' in [a.name for a in agents] assert 'frontend-architect' in [a.name for a in agents] # 4. Coordinate agent collaboration coordinator = system.get_coordinator() plan = coordinator.create_collaboration_plan(agents, task_context) assert plan.coordination_pattern in ['hierarchical', 'collaborative'] # 5. Execute with MCP integration mcp_manager = system.get_mcp_manager() mcp_servers = mcp_manager.activate_servers(['context7', 'magic', 'sequential']) assert all(server.is_connected() for server in mcp_servers) # 6. Validate final output execution_result = system.execute_task(task_context, agents, mcp_servers) assert execution_result.success assert execution_result.quality_score >= 0.8 ``` ## Quality Validation > **📊 Metrics Integration**: Quality metrics are integrated with development processes in [Contributing Code Guide](contributing-code.md#code-review). ### Quality Validation Framework **Multi-Dimensional Quality Assessment:** ```python class QualityValidator: """Comprehensive quality validation system""" def __init__(self): self.quality_gates = [ CodeQualityGate(), SecurityQualityGate(), PerformanceQualityGate(), DocumentationQualityGate() ] def validate_component(self, component): """Run complete quality validation""" results = {} overall_score = 0.0 for gate in self.quality_gates: result = gate.validate(component) results[gate.name] = result overall_score += result.score * gate.weight return QualityReport( overall_score=overall_score, gate_results=results, passed=overall_score >= 0.8 ) ``` ### Automated Quality Checks **Quality Pipeline:** ```bash # Quality validation pipeline python -m pytest tests/ --cov=setup --cov-fail-under=90 python -m pylint setup/ --fail-under=8.0 python -m mypy setup/ --strict python -m black --check setup/ python -m isort --check-only setup/ # Performance benchmarks python -m pytest tests/performance/ --benchmark-only python -m memory_profiler tests/test_memory_usage.py # Security validation python -m bandit -r setup/ --severity-level medium python -m safety check --json ``` ## Troubleshooting Guide > **🔧 Development Support**: For development-specific troubleshooting, see [Contributing Code Guide](contributing-code.md#error-handling-and-troubleshooting). ### Common Testing Issues **Test Environment Issues:** ```bash # Issue: Tests failing with import errors # Solution: Ensure proper PYTHONPATH and virtual environment export PYTHONPATH=$PWD:$PYTHONPATH source venv/bin/activate python -m pytest tests/ -v # Issue: Mock objects not working correctly # Solution: Use proper mock configuration python -c " from unittest.mock import Mock, patch with patch('setup.core.registry.ComponentRegistry') as mock_registry: mock_registry.return_value.list_installed.return_value = ['core'] # Run test code here " # Issue: Test data cleanup failing # Solution: Ensure proper teardown methods python -c " import tempfile import shutil from pathlib import Path test_dir = Path(tempfile.mkdtemp()) try: # Test code here pass finally: if test_dir.exists(): shutil.rmtree(test_dir) " ``` ## Quality Assurance ### Quality Assurance Processes **Pre-Development Quality Gates:** ```python class PreDevelopmentQA: def validate_requirements(self, requirements): """Validate requirements before development starts""" validations = { 'completeness': self._check_completeness(requirements), 'testability': self._check_testability(requirements), 'consistency': self._check_consistency(requirements), 'feasibility': self._check_feasibility(requirements) } return all(validations.values()), validations def _check_completeness(self, requirements): """Check if requirements are complete""" required_sections = ['purpose', 'acceptance_criteria', 'dependencies'] return all(section in requirements for section in required_sections) def _check_testability(self, requirements): """Check if requirements are testable""" # Requirements should have measurable outcomes return 'acceptance_criteria' in requirements and len(requirements['acceptance_criteria']) > 0 # Usage qa = PreDevelopmentQA() requirements = { 'purpose': 'Add new security agent', 'acceptance_criteria': ['Agent activates on security keywords', 'Integrates with MCP servers'], 'dependencies': ['core', 'agents'] } is_valid, details = qa.validate_requirements(requirements) ``` **Development Quality Gates:** ```python class DevelopmentQA: def validate_component(self, component_path): """Comprehensive component validation""" validations = { 'code_quality': self._check_code_quality(component_path), 'test_coverage': self._check_test_coverage(component_path), 'documentation': self._check_documentation(component_path), 'integration': self._check_integration(component_path), 'performance': self._check_performance(component_path) } score = sum(validations.values()) / len(validations) return score >= 0.8, validations, score def _check_code_quality(self, component_path): """Check code quality metrics""" # Run linting and complexity analysis lint_score = self._run_linter(component_path) complexity_score = self._check_complexity(component_path) return (lint_score + complexity_score) / 2 def _check_test_coverage(self, component_path): """Check test coverage percentage""" coverage_report = self._run_coverage_analysis(component_path) return coverage_report.percentage / 100 def _check_documentation(self, component_path): """Check documentation completeness""" # Verify docstrings, README, examples has_docstrings = self._check_docstrings(component_path) has_readme = self._check_readme(component_path) has_examples = self._check_examples(component_path) return (has_docstrings + has_readme + has_examples) / 3 # Usage qa = DevelopmentQA() passes_qa, details, score = qa.validate_component('setup/components/new_agent.py') print(f"QA Score: {score:.2f}") ``` **Integration Quality Gates:** ```python class IntegrationQA: def validate_integration(self, component_name): """Validate component integration with framework""" integration_tests = { 'installation': self._test_installation(component_name), 'activation': self._test_activation(component_name), 'coordination': self._test_coordination(component_name), 'compatibility': self._test_compatibility(component_name), 'rollback': self._test_rollback(component_name) } passing_tests = sum(integration_tests.values()) total_tests = len(integration_tests) return passing_tests == total_tests, integration_tests def _test_installation(self, component_name): """Test component installs correctly""" try: installer = TestInstaller() result = installer.install_component(component_name, dry_run=True) return result.success except Exception: return False def _test_activation(self, component_name): """Test component activates correctly""" try: registry = ComponentRegistry() component = registry.get_component(component_name) return component.can_activate() except Exception: return False # Usage qa = IntegrationQA() passes_integration, test_results = qa.validate_integration('security_agent') ``` ### Code Review Criteria **Automated Code Review Checklist:** ```python class CodeReviewBot: def __init__(self): self.review_criteria = { 'style': { 'weight': 0.2, 'checks': ['pep8_compliance', 'naming_conventions', 'imports_organized'] }, 'functionality': { 'weight': 0.3, 'checks': ['methods_work', 'error_handling', 'edge_cases'] }, 'testing': { 'weight': 0.25, 'checks': ['unit_tests', 'integration_tests', 'coverage_80_plus'] }, 'documentation': { 'weight': 0.15, 'checks': ['docstrings', 'type_hints', 'examples'] }, 'integration': { 'weight': 0.1, 'checks': ['framework_compatibility', 'backwards_compatible'] } } def review_pull_request(self, pr_path): """Automated pull request review""" results = {} total_score = 0 for category, config in self.review_criteria.items(): category_score = 0 category_results = {} for check in config['checks']: check_result = self._run_check(check, pr_path) category_results[check] = check_result category_score += check_result category_score = category_score / len(config['checks']) results[category] = { 'score': category_score, 'details': category_results } total_score += category_score * config['weight'] return total_score, results def _run_check(self, check_name, pr_path): """Run individual code review check""" check_methods = { 'pep8_compliance': self._check_pep8, 'naming_conventions': self._check_naming, 'unit_tests': self._check_unit_tests, 'coverage_80_plus': self._check_coverage, 'docstrings': self._check_docstrings, 'framework_compatibility': self._check_framework_compat } check_method = check_methods.get(check_name, lambda x: 0.5) return check_method(pr_path) # Usage reviewer = CodeReviewBot() score, details = reviewer.review_pull_request('pull_requests/add-data-scientist-agent') print(f"Review Score: {score:.2f}") if score >= 0.8: print("✅ Pull request meets quality standards") else: print("❌ Pull request needs improvement") for category, result in details.items(): if result['score'] < 0.7: print(f" Improve {category}: {result['score']:.2f}") ``` **Human Code Review Guidelines:** ```python class HumanReviewGuidelines: REVIEW_CHECKLIST = { 'architecture': [ 'Does the component follow SuperClaude patterns?', 'Is the component properly integrated with the registry?', 'Are dependencies clearly defined and minimal?', 'Does it follow the single responsibility principle?' ], 'security': [ 'Are user inputs validated and sanitized?', 'Is sensitive information properly handled?', 'Are file operations secure (no path traversal)?', 'Are external commands properly escaped?' ], 'performance': [ 'Are there any obvious performance bottlenecks?', 'Is memory usage reasonable?', 'Are there unnecessary loops or operations?', 'Is caching used appropriately?' ], 'maintainability': [ 'Is the code readable and well-organized?', 'Are complex operations properly documented?', 'Are magic numbers and strings avoided?', 'Is error handling comprehensive?' ], 'testing': [ 'Are all public methods tested?', 'Are edge cases covered?', 'Are integration points tested?', 'Is test data realistic and comprehensive?' ] } def generate_review_template(self, component_type): """Generate review template based on component type""" base_template = "## Code Review Checklist " for category, questions in self.REVIEW_CHECKLIST.items(): base_template += f"### {category.title()} " for question in questions: base_template += f"- [ ] {question} " base_template += " " # Add component-specific considerations if component_type == 'agent': base_template += "### Agent-Specific " base_template += "- [ ] Trigger patterns are comprehensive " base_template += "- [ ] Agent coordination is properly implemented " base_template += "- [ ] MCP server integration works correctly " elif component_type == 'mode': base_template += "### Mode-Specific " base_template += "- [ ] Activation conditions are clear and correct " base_template += "- [ ] Mode behavior is well-defined " base_template += "- [ ] Interaction with other modes is handled " base_template += "## Overall Assessment " base_template += "- [ ] Ready to merge " base_template += "- [ ] Needs minor changes " base_template += "- [ ] Needs major changes " base_template += "- [ ] Needs redesign " return base_template # Usage guidelines = HumanReviewGuidelines() review_template = guidelines.generate_review_template('agent') print(review_template) ``` ### Quality Standards & Metrics **Quality Metrics Dashboard:** ```python class QualityMetrics: def __init__(self): self.metrics = { 'code_coverage': {'target': 90, 'current': 0}, 'complexity_score': {'target': 7, 'current': 0}, # Cyclomatic complexity 'documentation_coverage': {'target': 95, 'current': 0}, 'integration_test_pass': {'target': 100, 'current': 0}, 'performance_benchmark': {'target': 100, 'current': 0} # % of baseline } def collect_metrics(self, component_path): """Collect all quality metrics for a component""" self.metrics['code_coverage']['current'] = self._measure_coverage(component_path) self.metrics['complexity_score']['current'] = self._measure_complexity(component_path) self.metrics['documentation_coverage']['current'] = self._measure_docs(component_path) self.metrics['integration_test_pass']['current'] = self._measure_integration(component_path) self.metrics['performance_benchmark']['current'] = self._measure_performance(component_path) return self.metrics def generate_quality_report(self): """Generate comprehensive quality report""" report = "# Quality Metrics Report " overall_score = 0 total_weight = 0 for metric_name, metric_data in self.metrics.items(): target = metric_data['target'] current = metric_data['current'] # Calculate score (0-100) if metric_name == 'complexity_score': # Lower is better for complexity score = max(0, 100 - (current - target) * 10) if current > target else 100 else: # Higher is better for other metrics score = min(100, (current / target) * 100) status = "✅" if score >= 80 else "⚠️" if score >= 60 else "❌" report += f"## {metric_name.replace('_', ' ').title()} " report += f"{status} **Score: {score:.1f}/100** " report += f"- Target: {target} " report += f"- Current: {current} " overall_score += score total_weight += 1 overall_score = overall_score / total_weight overall_status = "✅" if overall_score >= 80 else "⚠️" if overall_score >= 60 else "❌" report += f"## Overall Quality Score " report += f"{overall_status} **{overall_score:.1f}/100** " return report, overall_score # Usage metrics = QualityMetrics() component_metrics = metrics.collect_metrics('setup/components/agents.py') report, score = metrics.generate_quality_report() print(report) ``` **Continuous Quality Monitoring:** ```python class QualityMonitor: def __init__(self): self.quality_history = [] self.alerts = [] def monitor_quality_trends(self, component_path): """Monitor quality trends over time""" current_metrics = QualityMetrics().collect_metrics(component_path) # Add timestamp current_metrics['timestamp'] = datetime.now() self.quality_history.append(current_metrics) # Check for quality degradation if len(self.quality_history) >= 2: self._check_degradation_alerts() return current_metrics def _check_degradation_alerts(self): """Check for quality degradation and generate alerts""" current = self.quality_history[-1] previous = self.quality_history[-2] for metric_name in current.keys(): if metric_name == 'timestamp': continue current_value = current[metric_name]['current'] previous_value = previous[metric_name]['current'] # Check for significant degradation (>10% drop) if current_value < previous_value * 0.9: alert = { 'type': 'quality_degradation', 'metric': metric_name, 'previous': previous_value, 'current': current_value, 'degradation': ((previous_value - current_value) / previous_value) * 100, 'timestamp': current['timestamp'] } self.alerts.append(alert) def generate_quality_dashboard(self): """Generate quality dashboard HTML""" # Implementation would generate interactive dashboard # showing quality trends, alerts, and recommendations pass # Usage monitor = QualityMonitor() current_quality = monitor.monitor_quality_trends('setup/components/core.py') if monitor.alerts: print("🚨 Quality Alerts:") for alert in monitor.alerts: print(f" {alert['metric']}: {alert['degradation']:.1f}% degradation") ``` --- ## Related Resources ### Essential Development Resources **Core Documentation:** - [Technical Architecture](technical-architecture.md) - Framework design and patterns - [Contributing Code](contributing-code.md) - Development setup and guidelines - [Best Practices](../Reference/quick-start-practices.md) - Optimization and quality standards **Testing Resources:** - [Examples Cookbook](../Reference/examples-cookbook.md) - Practical testing examples - [Troubleshooting Guide](../Reference/troubleshooting.md) - Common issues and solutions **Component Development:** - [Agents Guide](../User-Guide/agents.md) - Agent system development - [Modes Guide](../User-Guide/modes.md) - Behavioral mode development - [MCP Servers](../User-Guide/mcp-servers.md) - MCP integration development ### External Testing Tools **Python Testing Ecosystem:** ```bash # Core testing tools pip install pytest pytest-cov pytest-mock pytest-benchmark # Performance testing pip install memory-profiler py-spy # Code quality pip install flake8 black isort mypy # Coverage visualization pip install coverage[toml] pytest-html ``` **Testing Frameworks Integration:** ```python # pytest configuration (conftest.py) import pytest import tempfile import shutil from pathlib import Path @pytest.fixture(scope="session") def test_environment(): """Set up test environment for SuperClaude testing""" test_dir = Path(tempfile.mkdtemp(prefix="superclaude_test_")) # Setup test configuration os.environ['SUPERCLAUDE_TEST_MODE'] = 'true' os.environ['SUPERCLAUDE_CONFIG_DIR'] = str(test_dir) yield test_dir # Cleanup shutil.rmtree(test_dir) os.environ.pop('SUPERCLAUDE_TEST_MODE', None) os.environ.pop('SUPERCLAUDE_CONFIG_DIR', None) @pytest.fixture def mock_mcp_servers(): """Mock MCP servers for testing""" from unittest.mock import Mock mock_servers = { 'context7': Mock(), 'sequential': Mock(), 'magic': Mock() } # Configure mock responses mock_servers['context7'].query.return_value = {'status': 'success'} mock_servers['sequential'].analyze.return_value = {'complexity': 0.7} return mock_servers ``` **CI/CD Integration:** ```yaml # .github/workflows/test.yml name: SuperClaude Tests on: [push, pull_request] jobs: test: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: [3.8, 3.9, 3.10, 3.11] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install -e ".[dev]" - name: Run tests run: | pytest tests/ --cov=setup --cov-report=xml - name: Upload coverage uses: codecov/codecov-action@v3 with: file: ./coverage.xml ``` ### Community Resources **Development Community:** - [GitHub Discussions](https://github.com/SuperClaude-Org/SuperClaude_Framework/discussions) - Technical discussions - [GitHub Issues](https://github.com/SuperClaude-Org/SuperClaude_Framework/issues) - Bug reports and feature requests - [Contributing Guidelines](../CONTRIBUTING.md) - Contribution process **Learning Resources:** - [Quick Start Guide](../Getting-Started/quick-start.md) - Framework overview - [Installation Guide](../Getting-Started/installation.md) - Setup instructions - [Commands Reference](../User-Guide/commands.md) - Usage examples **Advanced Topics:** - [Session Management](../User-Guide/session-management.md) - Persistent workflows - [Flags Guide](../User-Guide/flags.md) - Behavioral control - [Technical Roadmap](https://github.com/SuperClaude-Org/SuperClaude_Framework/projects) - Future development --- **Development Support:** For testing and debugging assistance, join our community discussions or create an issue with detailed reproduction steps and system information. --- ## Testing Glossary **For Screen Readers**: This glossary contains alphabetically ordered testing and debugging terms specific to SuperClaude Framework development. Each term includes practical definitions and framework-specific context. ### A **Agent Testing**: Specialized testing procedures for validating AI agent behavior, activation triggers, coordination patterns, and collaborative synthesis within the SuperClaude orchestration system. **Automated Quality Gates**: Continuous validation checkpoints that automatically verify code quality, security compliance, performance standards, and architectural consistency throughout development workflows. **Accessibility Testing**: Validation procedures that ensure documentation and interfaces are usable by developers with disabilities, including screen reader compatibility and inclusive design patterns. ### B **Behavioral Testing**: Testing methodology for validating AI behavioral modifications through configuration files, including mode activation, instruction injection, and dynamic behavior changes. **Benchmark Testing**: Performance measurement procedures that establish baseline metrics for component installation, agent coordination, MCP server startup, and system resource utilization. ### C **Component Integration Testing**: Testing methodology that validates the interaction between SuperClaude components including agents, MCP servers, behavioral modes, and core framework elements. **Configuration Testing**: Validation procedures for testing configuration file loading, instruction injection, and behavioral programming patterns unique to SuperClaude's meta-framework approach. **Coverage Analysis**: Measurement of test completeness including code coverage, feature coverage, and integration scenario coverage for comprehensive quality validation. ### D **Debug Profiling**: Systematic debugging approach using memory profilers, performance monitors, and execution tracers to identify bottlenecks and optimization opportunities in framework components. **Development Testing**: Testing procedures specifically designed for framework contributors, including component validation, installation testing, and development environment verification. ### E **End-to-End Testing**: Comprehensive testing that validates complete user workflows from input through detection, routing, orchestration, and execution within SuperClaude Framework. **Error Recovery Testing**: Validation procedures for testing fault tolerance, graceful degradation, and recovery mechanisms when components fail or connections are lost. ### F **Framework Testing**: Specialized testing methodologies for meta-framework components including instruction injection, behavioral programming, and configuration-driven behavior modification. **Functional Testing**: Testing approach that validates component functionality, feature implementation, and user workflow completion within the SuperClaude ecosystem. ### I **Integration Testing**: Testing methodology that validates the interaction between SuperClaude components and external systems including Claude Code, MCP servers, and development tools. **Installation Testing**: Verification procedures for testing component installation, dependency resolution, configuration setup, and environment validation across different platforms. ### M **MCP Server Testing**: Specialized testing procedures for validating Model Context Protocol server integration, communication protocols, health monitoring, and error recovery mechanisms. **Memory Profiling**: Performance testing methodology that monitors memory usage, leak detection, and resource optimization for framework components and agent coordination. ### P **Performance Testing**: Comprehensive testing approach that measures execution speed, resource utilization, memory efficiency, and scalability for framework components and orchestration patterns. **Plugin Testing**: Testing methodology for validating custom extensions, agent development, MCP server integration, and behavioral mode creation within the plugin architecture. ### Q **Quality Validation**: Multi-dimensional testing approach that evaluates functionality, security, performance, maintainability, and architectural consistency throughout development workflows. ### R **Regression Testing**: Testing methodology that ensures new changes don't break existing functionality, particularly important for configuration-driven behavioral programming systems. **Resource Testing**: Performance validation that monitors system resource usage including memory, CPU, disk space, and network utilization during framework operations. ### S **Security Testing**: Comprehensive security validation including vulnerability testing, sandboxing verification, input validation testing, and threat modeling for framework components. **System Testing**: End-to-end validation of complete SuperClaude Framework functionality including detection engines, orchestration layers, and execution frameworks. ### U **Unit Testing**: Testing methodology that validates individual components, functions, and modules in isolation, essential for framework component development and maintenance. **User Workflow Testing**: Testing approach that validates complete user scenarios from task input through framework orchestration to result delivery and quality validation. ### V **Validation Framework**: Comprehensive system for ensuring framework reliability through automated testing, continuous integration, performance monitoring, and quality assurance. **Vulnerability Testing**: Security testing methodology that identifies and validates protection against potential security threats, input injection, and system exploitation attempts. ### Testing Skill Level Guidance **Beginner Testing Path**: 1. **Start Here**: [Quick Start Testing Tutorial](#quick-start-testing-tutorial) for basic testing concepts 2. **Environment Setup**: [Testing Environment Setup](#testing-environment-setup) for proper configuration 3. **Basic Testing**: Simple unit tests and component validation 4. **Practice**: Work through provided code examples and test cases **Intermediate Testing Skills**: 1. **Component Testing**: [Debugging SuperClaude Components](#debugging-superclaude-components) for component-specific testing 2. **Integration Testing**: [Integration Testing](#integration-testing) for workflow validation 3. **Quality Gates**: [Quality Validation](#quality-validation) for comprehensive testing frameworks 4. **Performance**: Basic [Performance Testing & Optimization](#performance-testing--optimization) **Advanced Testing Expertise**: 1. **Security Testing**: [Security Testing](#security-testing) for vulnerability assessment 2. **Performance Optimization**: Advanced performance profiling and optimization 3. **Custom Testing**: Framework extension testing and custom agent validation 4. **Test Framework Development**: Contributing to testing infrastructure **Testing Support Resources**: - **Documentation**: Cross-references to [Contributing Code Guide](contributing-code.md) and [Technical Architecture Guide](technical-architecture.md) - **Community**: GitHub Discussions for testing questions and best practices - **Examples**: Comprehensive code examples with detailed comments throughout this guide - **Troubleshooting**: [Troubleshooting Guide](#troubleshooting-guide) for common testing issues **Quality Assurance Standards**: - **Test Coverage**: Minimum 95% code coverage for framework components - **Performance Benchmarks**: Specific metrics for memory usage, execution time, and resource efficiency - **Security Validation**: Comprehensive security testing for all framework components - **Cross-Platform Testing**: Validation across Linux, macOS, and Windows development environments