crackerjack 0.39.10__tar.gz → 0.39.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of crackerjack might be problematic. Click here for more details.
- crackerjack-0.39.11/AI-FIX-IMPLEMENTATION-AND-TEST-PLAN.md +838 -0
- crackerjack-0.39.11/AI-FIX-QUICK-SUMMARY.md +167 -0
- crackerjack-0.39.11/AI-FIX-TEST-RESULTS.md +195 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/CHANGELOG.md +42 -1
- {crackerjack-0.39.10 → crackerjack-0.39.11}/PKG-INFO +2 -2
- {crackerjack-0.39.10 → crackerjack-0.39.11}/README.md +1 -1
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/workflow_orchestrator.py +38 -3
- crackerjack-0.39.11/docs/investigation/ai-fix-flag-bug-fix.md +320 -0
- crackerjack-0.39.11/docs/investigation/workflow-routing-fix.md +318 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/pyproject.toml +1 -1
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_autofix_coordinator.py +13 -1
- crackerjack-0.39.11/tests/test_main.py +66 -0
- crackerjack-0.39.11/tests/test_phase_coordinator.py +47 -0
- crackerjack-0.39.11/tests/test_workflow_orchestrator_ai_routing.py +229 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/uv.lock +1 -1
- crackerjack-0.39.10/docs/investigation/ai-fix-flag-bug-fix.md +0 -198
- {crackerjack-0.39.10 → crackerjack-0.39.11}/.codespell-ignore +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/.codespellrc +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/.github/FUNDING.yml +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/.gitignore +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/.pre-commit-config.yaml +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/AGENTS.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/CLAUDE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/GEMINI.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/LICENSE +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/QWEN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/RULES.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/SECURITY.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/ai/AGENT-CAPABILITIES.json +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/ai/AGENT_SELECTION.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/ai/AI-REFERENCE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/ai/ERROR-PATTERNS.yaml +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/__main__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/adapters/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/adapters/lsp_client.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/adapters/rust_tool_adapter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/adapters/rust_tool_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/adapters/skylos_adapter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/adapters/zuban_adapter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/architect_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/base.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/claude_code_bridge.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/coordinator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/documentation_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/dry_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/enhanced_coordinator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/enhanced_proactive_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/formatting_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/import_optimization_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/performance_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/performance_helpers.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/proactive_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/refactoring_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/refactoring_helpers.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/security_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/semantic_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/semantic_helpers.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/test_creation_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/test_specialist_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/agents/tracker.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/api.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/cache_handlers.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/cache_handlers_enhanced.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/facade.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/handlers.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/interactive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/options.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/semantic_handlers.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/cli/utils.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/code_cleaner.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/config/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/config/global_lock_config.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/config/hooks.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/async_workflow_orchestrator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/autofix_coordinator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/container.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/enhanced_container.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/file_lifecycle.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/performance.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/performance_monitor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/phase_coordinator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/proactive_workflow.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/resource_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/service_watchdog.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/session_coordinator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/timeout_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/core/websocket_lifecycle.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/docs/INDEX.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/docs/generated/api/API_REFERENCE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/docs/generated/api/CLI_REFERENCE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/docs/generated/api/CROSS_REFERENCES.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/docs/generated/api/PROTOCOLS.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/docs/generated/api/SERVICES.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/documentation/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/documentation/ai_templates.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/documentation/dual_output_generator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/documentation/mkdocs_integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/documentation/reference_generator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/dynamic_config.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/errors.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/executors/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/executors/async_hook_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/executors/cached_hook_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/executors/hook_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/executors/hook_lock_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/executors/individual_hook_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/executors/lsp_aware_hook_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/executors/tool_proxy.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/hooks/lsp_hook.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/intelligence/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/intelligence/adaptive_learning.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/intelligence/agent_orchestrator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/intelligence/agent_registry.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/intelligence/agent_selector.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/intelligence/integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/interactive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/async_hook_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/hook_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/publish_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/test_command_builder.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/test_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/test_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/test_manager_backup.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/managers/test_progress.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/cache.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/client_runner.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/context.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/dashboard.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/enhanced_progress_monitor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/enhanced_progress_monitor.tcss +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/file_monitor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/progress_components.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/progress_monitor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/progress_monitor.tcss +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/rate_limiter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/server.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/server_core.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/service_watchdog.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/state.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/task_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/core_tools.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/error_analyzer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/execution_tools.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/execution_tools_backup.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/intelligence_tool_registry.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/intelligence_tools.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/monitoring_tools.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/monitoring_tools.py.backup +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/proactive_tools.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/progress_tools.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/semantic_tools.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/utility_tools.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/tools/workflow_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/websocket/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/websocket/app.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/websocket/endpoints.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/websocket/jobs.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/websocket/monitoring_endpoints.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/websocket/server.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/websocket/websocket_handler.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mcp/websocket_server.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mixins/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/mixins/error_handling.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/models/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/models/config.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/models/config_adapter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/models/protocols.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/models/resource_protocols.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/models/semantic_models.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/models/task.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/monitoring/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/monitoring/ai_agent_watchdog.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/monitoring/metrics_collector.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/monitoring/regression_prevention.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/monitoring/websocket_server.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/orchestration/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/orchestration/advanced_orchestrator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/orchestration/coverage_improvement.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/orchestration/execution_strategies.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/orchestration/test_progress_streamer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/plugins/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/plugins/base.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/plugins/hooks.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/plugins/loader.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/plugins/managers.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/py313.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/security/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/security/audit.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/anomaly_detector.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/api_extractor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/backup_service.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/bounded_status_operations.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/cache.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/changelog_automation.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/config.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/config_integrity.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/config_merge.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/config_template.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/contextual_ai_assistant.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/coverage_badge_service.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/coverage_ratchet.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/debug.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/dependency_analyzer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/dependency_monitor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/documentation_generator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/documentation_service.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/embeddings.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/enhanced_filesystem.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/enterprise_optimizer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/error_pattern_analyzer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/file_hasher.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/filesystem.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/git.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/health_metrics.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/heatmap_generator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/initialization.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/input_validator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/intelligent_commit.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/log_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/logging.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/lsp_client.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/memory_optimizer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/metrics.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/parallel_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/pattern_cache.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/pattern_detector.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/performance_benchmarks.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/performance_cache.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/performance_monitor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/predictive_analytics.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/quality_baseline.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/quality_baseline_enhanced.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/quality_intelligence.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/regex_patterns.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/regex_utils.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/secure_path_utils.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/secure_status_formatter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/secure_subprocess.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/security.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/security_logger.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/server_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/smart_scheduling.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/status_authentication.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/status_security_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/terminal_utils.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/thread_safe_status_collector.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/tool_version_service.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/unified_config.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/validation_rate_limiter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/vector_store.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/version_analyzer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/version_checker.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/websocket_resource_limiter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/services/zuban_lsp_service.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/slash_commands/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/slash_commands/init.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/slash_commands/run.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/slash_commands/status.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/tools/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/tools/fix_terminal.sh +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/tools/validate_input_validator_patterns.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/tools/validate_regex_patterns.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/ui/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/crackerjack/ui/server_panels.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/ADVANCED-FEATURES.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/DOCUMENTATION_AUDIT_2025-10-03.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/FUTURE-ENHANCEMENTS.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/PHASE2-COMPLETION-SUMMARY.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/PHASE2-CROSS-REFERENCE-ANALYSIS.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/PHASE3-COMPLETION-REPORT.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/PHASE3-OPTIMIZATION-PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/PYTORCH-COMPATIBILITY-FIX.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/SEMANTIC-SEARCH-IMPLEMENTATION.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/architecture/API_REFERENCE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/architecture/ARCHITECTURE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/archive/CONFIG_MANAGEMENT_REPLACEMENT_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/archive/CONFIG_MERGE_REMOVAL_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/archive/DOCUMENTATION_REORGANIZATION_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/complexipy-refactoring-summary.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/crackerjack-run-implementation-plan.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/crackerjack-run-workflow-audit.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/development/IDE-SETUP.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/development/RUST_TOOLING_FRAMEWORK.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/phase-1-completion-summary.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/phase-2-completion-summary.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/phase-3-completion-summary.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/phase-4-completion-summary.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/phase-5-completion-summary.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/phase-5-implementation-plan.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/phase-5-task-5.1-completion-summary.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/COMPLEXITY_REFACTORING_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/COVERAGE_BADGE_IMPLEMENTATION_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/CURRENT_IMPLEMENTATION_STATUS.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/DOCUMENTATION_SYSTEM_ARCHITECTURE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/EXPERIMENTAL-EVALUATION.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/FEATURE_IMPLEMENTATION_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/RESILIENT_HOOK_ARCHITECTURE_IMPLEMENTATION_SUMMARY.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/RESILIENT_HOOK_ARCHITECTURE_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/STAGE_HEADERS_IMPLEMENTATION_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/TIMEOUT_ARCHITECTURE_SOLUTION.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/TYPE_ANNOTATION_FIXING_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/UVXUSAGE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/ZUBAN_LSP_INTEGRATION_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/planning/ZUBAN_TOML_PARSING_BUG_ANALYSIS.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/precommit-handling/CLEANUP_SUMMARY.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/precommit-handling/CRACKERJACK_PRECOMMIT_HANDLING_IMPLEMENTATION_SUMMARY.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/precommit-handling/FINAL_PRECOMMIT_HANDLING_VERIFICATION.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/precommit-handling/PRECOMMIT_HANDLING_SUMMARY.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/precommit-handling/README.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/security/INPUT_VALIDATOR_SECURITY_AUDIT.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/security/SECURITY-AUDIT.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/security/SECURITY_AUDIT_REPORT.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/security/SECURITY_AUDIT_STATUS_DISCLOSURE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/security/SECURITY_HARDENING_REPORT.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/security/SECURITY_SUBPROCESS_HARDENING_REPORT.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/systems/BACKUP_SYSTEM.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/systems/CACHING_SYSTEM.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/systems/DASHBOARD_ARCHITECTURE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/systems/MCP_INTEGRATION.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/systems/MONITORING_INTEGRATION.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/docs/systems/UNIFIED_MONITORING_ARCHITECTURE.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/example.mcp.json +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/mypy.ini +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/scripts/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/scripts/integrate_resource_management.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/scripts/performance_benchmark.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/templates/api_reference.md.template +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/templates/changelog_entry.md.template +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/templates/user_guide.md.template +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/test_docs_site/site/docs/api-reference.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/test_docs_site/site/docs/getting-started.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/test_docs_site/site/docs/index.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/test_docs_site/site/docs/stylesheets/extra.css +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/test_docs_site/site/mkdocs.yml +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/base_test.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/conftest.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/coverage.json +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/data/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/data/comments_sample.txt +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/data/docstrings_sample.txt +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/data/expected_comments_sample.txt +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/data/init.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/docs/HEALTH_METRICS_TESTING_SUMMARY.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/docs/TEST_COVERAGE_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/docs/TEST_IMPLEMENTATION_PLAN.md +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/run_tests.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/scripts/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/scripts/agent_audit_report.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/scripts/run_test_suite.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test___main__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_ai_agent_workflow.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_ai_optimized_documentation.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_ai_templates.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_anomaly_detector_service.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_api.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_api_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_async_hook_executor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_async_hook_executor_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_async_workflow_orchestrator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_changelog_generation.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_cli/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_cli/test_global_lock_options.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_cli_semantic_naming.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_code_cleaner.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_code_cleaner_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_container.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_coordinator_performance.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_core_autofix_coordinator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_core_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_core_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_core_enhanced_container.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_core_modules.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_core_performance.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_documentation_agent (1).py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_documentation_agent_simple.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_dual_output_generator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_dynamic_config.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_dynamic_config_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_end_to_end_integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_enhanced_container.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_enhanced_filesystem.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_enhanced_filesystem_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_enhanced_filesystem_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_errors.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_execution_speed_optimization.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_executors/__init__.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_executors/test_lock_integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_fast_hooks_behavior.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_filesystem_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_final_validation.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_global_lock_config.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_hook_executor_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_hook_lock_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_hook_manager_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_hook_manager_simple.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_import_coverage_consolidated.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_initialization_precommit_integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_initialization_service.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_input_validation.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_intelligence_system.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_interactive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_large_modules_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_main_entry_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_main_module.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_managers_consolidated.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_mcp_progress_monitor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_mcp_server.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_mkdocs_integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_models_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_models_config_adapter_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_models_focused.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_models_task_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_modernized_code.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_performance_agent (1).py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_performance_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_performance_agent_enhanced.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_performance_agent_simple.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_performance_benchmarks_focused.py.bak +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_performance_helpers.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_performance_monitor.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_phase_coordinator_simple.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_plugins_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_proactive_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_proactive_agent_system.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_proactive_workflow.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_protocol_compliance.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_publish_manager_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_py313.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_pytest_features.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_refactoring_agent.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_reference_generator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_regex_patterns.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_resource_cleanup_integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_resource_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_secure_path_utils.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_secure_status_formatter.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_security_audit.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_security_hardening.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_security_integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_server_panels.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_service_watchdog.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_services_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_session_coordinator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_session_coordinator_comprehensive.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_session_coordinator_coverage.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_simple_tool_version_service.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_simple_workflow.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_skip_hooks_functionality.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_skip_hooks_simple.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_stage_workflow_execution_order.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_structured_errors.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_structured_logging.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_syntax_validation.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_terminal_restoration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_terminal_state.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_timeout_manager.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_timeout_system.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_unified_api.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_unified_config.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_unified_monitoring_dashboard.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_validate_input_validator_patterns.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_validate_regex_patterns.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_validate_regex_patterns_tool.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_version_analyzer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_version_bump_analyzer.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_websocket_endpoints.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_websocket_lifecycle.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_workflow_fast_hooks.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_workflow_integration.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_workflow_orchestrator.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tests/test_workflow_pipeline.py +0 -0
- {crackerjack-0.39.10 → crackerjack-0.39.11}/tools/validate_regex_patterns_standalone.py +0 -0
|
@@ -0,0 +1,838 @@
|
|
|
1
|
+
# Crackerjack AI Auto-Fix: Comprehensive Implementation & Test Plan
|
|
2
|
+
|
|
3
|
+
**Date:** 2025-10-03
|
|
4
|
+
**Status:** 🔧 Implementation Complete - Testing Required
|
|
5
|
+
**Priority:** CRITICAL
|
|
6
|
+
|
|
7
|
+
______________________________________________________________________
|
|
8
|
+
|
|
9
|
+
## Executive Summary
|
|
10
|
+
|
|
11
|
+
The `--ai-fix` flag was completely broken due to **TWO separate bugs**:
|
|
12
|
+
|
|
13
|
+
1. **Parameter Passing Bug**: `_setup_debug_and_verbose_flags()` in `__main__.py` wasn't accepting the `ai_fix` parameter
|
|
14
|
+
1. **Workflow Routing Bug**: THREE workflow functions in `workflow_orchestrator.py` weren't checking for AI agent
|
|
15
|
+
|
|
16
|
+
**Both bugs have been fixed.** This document provides a comprehensive testing plan to verify the fixes work correctly before publishing.
|
|
17
|
+
|
|
18
|
+
______________________________________________________________________
|
|
19
|
+
|
|
20
|
+
## Bugs Fixed (Implementation Complete ✅)
|
|
21
|
+
|
|
22
|
+
### Bug #1: Parameter Passing (FIXED)
|
|
23
|
+
|
|
24
|
+
**File:** `crackerjack/__main__.py`
|
|
25
|
+
**Function:** `_setup_debug_and_verbose_flags()` (lines 476-495)
|
|
26
|
+
|
|
27
|
+
**Issue:**
|
|
28
|
+
|
|
29
|
+
- Function didn't accept `ai_fix` as parameter
|
|
30
|
+
- Hardcoded `ai_fix = False` on every call
|
|
31
|
+
- Call site didn't pass user's `--ai-fix` value
|
|
32
|
+
|
|
33
|
+
**Fix Applied:**
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
# Before
|
|
37
|
+
def _setup_debug_and_verbose_flags(
|
|
38
|
+
ai_debug: bool, debug: bool, verbose: bool, options: t.Any
|
|
39
|
+
) -> tuple[bool, bool]:
|
|
40
|
+
ai_fix = False # BUG!
|
|
41
|
+
# ...
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# After
|
|
45
|
+
def _setup_debug_and_verbose_flags(
|
|
46
|
+
ai_fix: bool, ai_debug: bool, debug: bool, verbose: bool, options: t.Any
|
|
47
|
+
) -> tuple[bool, bool]:
|
|
48
|
+
# Preserve user's ai_fix flag
|
|
49
|
+
if ai_debug:
|
|
50
|
+
ai_fix = True # ai_debug implies ai_fix
|
|
51
|
+
# ...
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Call Site Fix (Line 1466):**
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
# Before
|
|
58
|
+
ai_fix, verbose = _setup_debug_and_verbose_flags(ai_debug, debug, verbose, options)
|
|
59
|
+
|
|
60
|
+
# After
|
|
61
|
+
ai_fix, verbose = _setup_debug_and_verbose_flags(
|
|
62
|
+
ai_fix, ai_debug, debug, verbose, options
|
|
63
|
+
)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
______________________________________________________________________
|
|
67
|
+
|
|
68
|
+
### Bug #2: Workflow Routing (FIXED)
|
|
69
|
+
|
|
70
|
+
**File:** `crackerjack/core/workflow_orchestrator.py`
|
|
71
|
+
|
|
72
|
+
**THREE functions weren't checking for AI agent:**
|
|
73
|
+
|
|
74
|
+
#### 2a. Default Workflow (FIXED)
|
|
75
|
+
|
|
76
|
+
**Function:** `_execute_standard_hooks_workflow_monitored()` (lines 1933-1967)
|
|
77
|
+
**Used when:** No flags specified (most common usage)
|
|
78
|
+
|
|
79
|
+
**Fix Applied:**
|
|
80
|
+
|
|
81
|
+
- Added `iteration = self._start_iteration_tracking(options)`
|
|
82
|
+
- Early AI agent check when fast hooks fail
|
|
83
|
+
- Always delegate to `_handle_ai_workflow_completion()` at the end
|
|
84
|
+
|
|
85
|
+
#### 2b. Fast Hooks Workflow (FIXED)
|
|
86
|
+
|
|
87
|
+
**Function:** `_run_fast_hooks_phase_monitored()` (lines 1860-1875)
|
|
88
|
+
**Used when:** `--fast` flag specified
|
|
89
|
+
|
|
90
|
+
**Fix Applied:**
|
|
91
|
+
|
|
92
|
+
- Added `iteration = self._start_iteration_tracking(options)`
|
|
93
|
+
- Check `options.ai_agent` and delegate to `_handle_ai_workflow_completion()` if True
|
|
94
|
+
|
|
95
|
+
#### 2c. Comprehensive Hooks Workflow (FIXED)
|
|
96
|
+
|
|
97
|
+
**Function:** `_run_comprehensive_hooks_phase_monitored()` (lines 1877-1892)
|
|
98
|
+
**Used when:** `--comp` flag specified
|
|
99
|
+
|
|
100
|
+
**Fix Applied:**
|
|
101
|
+
|
|
102
|
+
- Added `iteration = self._start_iteration_tracking(options)`
|
|
103
|
+
- Check `options.ai_agent` and delegate to `_handle_ai_workflow_completion()` if True
|
|
104
|
+
|
|
105
|
+
**Note:** `_execute_test_workflow()` already had proper AI agent checking ✅
|
|
106
|
+
|
|
107
|
+
______________________________________________________________________
|
|
108
|
+
|
|
109
|
+
## Testing Strategy
|
|
110
|
+
|
|
111
|
+
### Phase 1: Unit Tests (Isolated Function Behavior)
|
|
112
|
+
|
|
113
|
+
**Goal:** Verify each fixed function works correctly in isolation
|
|
114
|
+
|
|
115
|
+
#### Test 1.1: `_setup_debug_and_verbose_flags()` Unit Test
|
|
116
|
+
|
|
117
|
+
**File:** `tests/test_main.py` (create if doesn't exist)
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
import pytest
|
|
121
|
+
from crackerjack.__main__ import _setup_debug_and_verbose_flags
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class MockOptions:
|
|
125
|
+
verbose = False
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def test_setup_debug_flags_preserves_ai_fix_true():
|
|
129
|
+
"""Test that ai_fix=True is preserved when passed."""
|
|
130
|
+
options = MockOptions()
|
|
131
|
+
|
|
132
|
+
# ai_fix=True should be preserved
|
|
133
|
+
ai_fix, verbose = _setup_debug_and_verbose_flags(
|
|
134
|
+
ai_fix=True, ai_debug=False, debug=False, verbose=False, options=options
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
assert ai_fix is True, "ai_fix=True should be preserved"
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def test_setup_debug_flags_preserves_ai_fix_false():
|
|
141
|
+
"""Test that ai_fix=False is preserved when passed."""
|
|
142
|
+
options = MockOptions()
|
|
143
|
+
|
|
144
|
+
# ai_fix=False should be preserved
|
|
145
|
+
ai_fix, verbose = _setup_debug_and_verbose_flags(
|
|
146
|
+
ai_fix=False, ai_debug=False, debug=False, verbose=False, options=options
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
assert ai_fix is False, "ai_fix=False should be preserved"
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def test_setup_debug_flags_ai_debug_implies_ai_fix():
|
|
153
|
+
"""Test that ai_debug=True forces ai_fix=True."""
|
|
154
|
+
options = MockOptions()
|
|
155
|
+
|
|
156
|
+
# ai_debug=True should override ai_fix to True
|
|
157
|
+
ai_fix, verbose = _setup_debug_and_verbose_flags(
|
|
158
|
+
ai_fix=False, # Even if False
|
|
159
|
+
ai_debug=True, # This should force it to True
|
|
160
|
+
debug=False,
|
|
161
|
+
verbose=False,
|
|
162
|
+
options=options,
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
assert ai_fix is True, "ai_debug=True should force ai_fix=True"
|
|
166
|
+
assert verbose is True, "ai_debug=True should set verbose=True"
|
|
167
|
+
assert options.verbose is True, "ai_debug=True should set options.verbose=True"
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def test_setup_debug_flags_debug_sets_verbose():
|
|
171
|
+
"""Test that debug=True sets verbose=True."""
|
|
172
|
+
options = MockOptions()
|
|
173
|
+
|
|
174
|
+
ai_fix, verbose = _setup_debug_and_verbose_flags(
|
|
175
|
+
ai_fix=False, ai_debug=False, debug=True, verbose=False, options=options
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
assert verbose is True, "debug=True should set verbose=True"
|
|
179
|
+
assert options.verbose is True, "debug=True should set options.verbose=True"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### Test 1.2: Workflow Routing Unit Tests
|
|
183
|
+
|
|
184
|
+
**File:** `tests/test_workflow_orchestrator_ai_routing.py` (create new)
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
import pytest
|
|
188
|
+
from unittest.mock import Mock, AsyncMock, patch
|
|
189
|
+
from crackerjack.core.workflow_orchestrator import WorkflowOrchestrator
|
|
190
|
+
from crackerjack.cli.options import Options
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@pytest.fixture
|
|
194
|
+
def mock_options_with_ai_agent():
|
|
195
|
+
"""Options with AI agent enabled."""
|
|
196
|
+
options = Mock(spec=Options)
|
|
197
|
+
options.ai_agent = True
|
|
198
|
+
options.ai_fix = True
|
|
199
|
+
options.test = False
|
|
200
|
+
options.fast = False
|
|
201
|
+
options.comp = False
|
|
202
|
+
options.clean = False
|
|
203
|
+
return options
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
@pytest.fixture
|
|
207
|
+
def mock_options_without_ai_agent():
|
|
208
|
+
"""Options with AI agent disabled."""
|
|
209
|
+
options = Mock(spec=Options)
|
|
210
|
+
options.ai_agent = False
|
|
211
|
+
options.ai_fix = False
|
|
212
|
+
options.test = False
|
|
213
|
+
options.fast = False
|
|
214
|
+
options.comp = False
|
|
215
|
+
options.clean = False
|
|
216
|
+
return options
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
@pytest.fixture
|
|
220
|
+
def orchestrator():
|
|
221
|
+
"""Create WorkflowOrchestrator instance with minimal dependencies."""
|
|
222
|
+
with patch("crackerjack.core.workflow_orchestrator.Config"):
|
|
223
|
+
with patch("crackerjack.core.workflow_orchestrator.Console"):
|
|
224
|
+
orch = WorkflowOrchestrator()
|
|
225
|
+
orch.logger = Mock()
|
|
226
|
+
orch.console = Mock()
|
|
227
|
+
orch._quality_intelligence = None
|
|
228
|
+
return orch
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
class TestStandardWorkflowAIRouting:
|
|
232
|
+
"""Test that standard workflow checks for AI agent."""
|
|
233
|
+
|
|
234
|
+
@pytest.mark.asyncio
|
|
235
|
+
async def test_standard_workflow_calls_ai_completion_when_ai_agent_enabled(
|
|
236
|
+
self, orchestrator, mock_options_with_ai_agent
|
|
237
|
+
):
|
|
238
|
+
"""Standard workflow should delegate to AI completion handler when ai_agent=True."""
|
|
239
|
+
workflow_id = "test_workflow"
|
|
240
|
+
|
|
241
|
+
# Mock the workflow components
|
|
242
|
+
with patch.object(orchestrator, "_start_iteration_tracking", return_value=1):
|
|
243
|
+
with patch.object(orchestrator, "_update_hooks_status_running"):
|
|
244
|
+
with patch.object(
|
|
245
|
+
orchestrator,
|
|
246
|
+
"_execute_monitored_fast_hooks_phase",
|
|
247
|
+
return_value=False,
|
|
248
|
+
):
|
|
249
|
+
with patch.object(orchestrator, "_handle_hooks_completion"):
|
|
250
|
+
with patch.object(
|
|
251
|
+
orchestrator,
|
|
252
|
+
"_handle_ai_workflow_completion",
|
|
253
|
+
new_callable=AsyncMock,
|
|
254
|
+
) as mock_ai_completion:
|
|
255
|
+
mock_ai_completion.return_value = True
|
|
256
|
+
|
|
257
|
+
# Execute standard workflow
|
|
258
|
+
result = await orchestrator._execute_standard_hooks_workflow_monitored(
|
|
259
|
+
mock_options_with_ai_agent, workflow_id
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
# Verify AI completion handler was called
|
|
263
|
+
mock_ai_completion.assert_called_once()
|
|
264
|
+
call_args = mock_ai_completion.call_args
|
|
265
|
+
assert call_args[0][0] == mock_options_with_ai_agent
|
|
266
|
+
assert call_args[0][1] == 1 # iteration
|
|
267
|
+
assert result is True
|
|
268
|
+
|
|
269
|
+
@pytest.mark.asyncio
|
|
270
|
+
async def test_standard_workflow_returns_directly_when_ai_agent_disabled(
|
|
271
|
+
self, orchestrator, mock_options_without_ai_agent
|
|
272
|
+
):
|
|
273
|
+
"""Standard workflow should return directly when ai_agent=False and hooks fail."""
|
|
274
|
+
workflow_id = "test_workflow"
|
|
275
|
+
|
|
276
|
+
# Mock the workflow components
|
|
277
|
+
with patch.object(orchestrator, "_start_iteration_tracking", return_value=1):
|
|
278
|
+
with patch.object(orchestrator, "_update_hooks_status_running"):
|
|
279
|
+
with patch.object(
|
|
280
|
+
orchestrator,
|
|
281
|
+
"_execute_monitored_fast_hooks_phase",
|
|
282
|
+
return_value=False,
|
|
283
|
+
):
|
|
284
|
+
with patch.object(orchestrator, "_handle_hooks_completion"):
|
|
285
|
+
with patch.object(
|
|
286
|
+
orchestrator,
|
|
287
|
+
"_handle_ai_workflow_completion",
|
|
288
|
+
new_callable=AsyncMock,
|
|
289
|
+
) as mock_ai_completion:
|
|
290
|
+
# Execute standard workflow
|
|
291
|
+
result = await orchestrator._execute_standard_hooks_workflow_monitored(
|
|
292
|
+
mock_options_without_ai_agent, workflow_id
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
# Should return False without calling AI completion
|
|
296
|
+
# (because ai_agent=False and fast hooks failed)
|
|
297
|
+
assert result is False
|
|
298
|
+
mock_ai_completion.assert_not_called()
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
class TestFastWorkflowAIRouting:
|
|
302
|
+
"""Test that fast workflow checks for AI agent."""
|
|
303
|
+
|
|
304
|
+
@pytest.mark.asyncio
|
|
305
|
+
async def test_fast_workflow_delegates_to_ai_completion_when_enabled(
|
|
306
|
+
self, orchestrator, mock_options_with_ai_agent
|
|
307
|
+
):
|
|
308
|
+
"""Fast workflow should delegate to AI completion when ai_agent=True."""
|
|
309
|
+
workflow_id = "test_workflow"
|
|
310
|
+
|
|
311
|
+
with patch.object(orchestrator, "_start_iteration_tracking", return_value=1):
|
|
312
|
+
with patch.object(
|
|
313
|
+
orchestrator, "_run_fast_hooks_phase", return_value=False
|
|
314
|
+
):
|
|
315
|
+
with patch.object(
|
|
316
|
+
orchestrator,
|
|
317
|
+
"_handle_ai_workflow_completion",
|
|
318
|
+
new_callable=AsyncMock,
|
|
319
|
+
) as mock_ai_completion:
|
|
320
|
+
mock_ai_completion.return_value = True
|
|
321
|
+
|
|
322
|
+
result = await orchestrator._run_fast_hooks_phase_monitored(
|
|
323
|
+
mock_options_with_ai_agent, workflow_id
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
mock_ai_completion.assert_called_once()
|
|
327
|
+
call_args = mock_ai_completion.call_args
|
|
328
|
+
assert call_args[0][0] == mock_options_with_ai_agent
|
|
329
|
+
assert result is True
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
class TestComprehensiveWorkflowAIRouting:
|
|
333
|
+
"""Test that comprehensive workflow checks for AI agent."""
|
|
334
|
+
|
|
335
|
+
@pytest.mark.asyncio
|
|
336
|
+
async def test_comp_workflow_delegates_to_ai_completion_when_enabled(
|
|
337
|
+
self, orchestrator, mock_options_with_ai_agent
|
|
338
|
+
):
|
|
339
|
+
"""Comprehensive workflow should delegate to AI completion when ai_agent=True."""
|
|
340
|
+
workflow_id = "test_workflow"
|
|
341
|
+
|
|
342
|
+
with patch.object(orchestrator, "_start_iteration_tracking", return_value=1):
|
|
343
|
+
with patch.object(
|
|
344
|
+
orchestrator, "_run_comprehensive_hooks_phase", return_value=False
|
|
345
|
+
):
|
|
346
|
+
with patch.object(
|
|
347
|
+
orchestrator,
|
|
348
|
+
"_handle_ai_workflow_completion",
|
|
349
|
+
new_callable=AsyncMock,
|
|
350
|
+
) as mock_ai_completion:
|
|
351
|
+
mock_ai_completion.return_value = True
|
|
352
|
+
|
|
353
|
+
result = (
|
|
354
|
+
await orchestrator._run_comprehensive_hooks_phase_monitored(
|
|
355
|
+
mock_options_with_ai_agent, workflow_id
|
|
356
|
+
)
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
mock_ai_completion.assert_called_once()
|
|
360
|
+
call_args = mock_ai_completion.call_args
|
|
361
|
+
assert call_args[0][0] == mock_options_with_ai_agent
|
|
362
|
+
assert result is True
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
______________________________________________________________________
|
|
366
|
+
|
|
367
|
+
### Phase 2: Integration Tests (End-to-End Workflow)
|
|
368
|
+
|
|
369
|
+
**Goal:** Verify complete `--ai-fix` workflow works from CLI to AI fixing
|
|
370
|
+
|
|
371
|
+
#### Test 2.1: CLI Flag Parsing Integration Test
|
|
372
|
+
|
|
373
|
+
**File:** `tests/integration/test_ai_fix_flag_integration.py` (create new)
|
|
374
|
+
|
|
375
|
+
```python
|
|
376
|
+
import pytest
|
|
377
|
+
from typer.testing import CliRunner
|
|
378
|
+
from crackerjack.__main__ import app
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
runner = CliRunner()
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
def test_ai_fix_flag_is_parsed_correctly():
|
|
385
|
+
"""Test that --ai-fix flag is correctly parsed by Typer."""
|
|
386
|
+
# This test will fail initially if hooks actually run
|
|
387
|
+
# We need to mock the workflow to just capture options
|
|
388
|
+
|
|
389
|
+
# TODO: Add test implementation
|
|
390
|
+
# This requires mocking WorkflowOrchestrator.run_complete_workflow
|
|
391
|
+
# to capture the options object and verify ai_fix=True
|
|
392
|
+
pass
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
def test_ai_debug_flag_implies_ai_fix():
|
|
396
|
+
"""Test that --ai-debug flag sets both ai_debug and ai_fix."""
|
|
397
|
+
# TODO: Add test implementation
|
|
398
|
+
pass
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
def test_ai_fix_with_verbose_flag():
|
|
402
|
+
"""Test that --ai-fix -v works correctly."""
|
|
403
|
+
# TODO: Add test implementation
|
|
404
|
+
pass
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
#### Test 2.2: Environment Variable Integration Test
|
|
408
|
+
|
|
409
|
+
**File:** `tests/integration/test_ai_agent_env_setup.py` (create new)
|
|
410
|
+
|
|
411
|
+
```python
|
|
412
|
+
import os
|
|
413
|
+
import pytest
|
|
414
|
+
from crackerjack.cli.handlers import setup_ai_agent_env
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
def test_setup_ai_agent_env_sets_ai_agent_variable():
|
|
418
|
+
"""Test that setup_ai_agent_env sets AI_AGENT environment variable."""
|
|
419
|
+
# Clear environment
|
|
420
|
+
if "AI_AGENT" in os.environ:
|
|
421
|
+
del os.environ["AI_AGENT"]
|
|
422
|
+
|
|
423
|
+
# Setup with ai_agent=True
|
|
424
|
+
setup_ai_agent_env(ai_agent=True, debug_mode=False)
|
|
425
|
+
|
|
426
|
+
assert os.environ.get("AI_AGENT") == "1", "AI_AGENT should be set to '1'"
|
|
427
|
+
|
|
428
|
+
# Cleanup
|
|
429
|
+
del os.environ["AI_AGENT"]
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
def test_setup_ai_agent_env_with_debug():
|
|
433
|
+
"""Test that setup_ai_agent_env sets debug variables."""
|
|
434
|
+
# Clear environment
|
|
435
|
+
for var in ["AI_AGENT", "AI_AGENT_DEBUG", "AI_AGENT_VERBOSE", "CRACKERJACK_DEBUG"]:
|
|
436
|
+
if var in os.environ:
|
|
437
|
+
del os.environ[var]
|
|
438
|
+
|
|
439
|
+
# Setup with ai_agent=True and debug_mode=True
|
|
440
|
+
setup_ai_agent_env(ai_agent=True, debug_mode=True)
|
|
441
|
+
|
|
442
|
+
assert os.environ.get("AI_AGENT") == "1"
|
|
443
|
+
assert os.environ.get("AI_AGENT_DEBUG") == "1"
|
|
444
|
+
assert os.environ.get("AI_AGENT_VERBOSE") == "1"
|
|
445
|
+
assert os.environ.get("CRACKERJACK_DEBUG") == "1"
|
|
446
|
+
|
|
447
|
+
# Cleanup
|
|
448
|
+
for var in ["AI_AGENT", "AI_AGENT_DEBUG", "AI_AGENT_VERBOSE", "CRACKERJACK_DEBUG"]:
|
|
449
|
+
if var in os.environ:
|
|
450
|
+
del os.environ[var]
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
#### Test 2.3: Complete Workflow Integration Test
|
|
454
|
+
|
|
455
|
+
**File:** `tests/integration/test_ai_fix_complete_workflow.py` (create new)
|
|
456
|
+
|
|
457
|
+
```python
|
|
458
|
+
import pytest
|
|
459
|
+
from unittest.mock import Mock, AsyncMock, patch, MagicMock
|
|
460
|
+
from crackerjack.core.workflow_orchestrator import WorkflowOrchestrator
|
|
461
|
+
from crackerjack.cli.options import Options
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
@pytest.mark.asyncio
|
|
465
|
+
async def test_ai_fix_triggers_ai_agent_workflow_on_hook_failure():
|
|
466
|
+
"""
|
|
467
|
+
Integration test: When hooks fail and --ai-fix is enabled,
|
|
468
|
+
the workflow should trigger AI fixing iterations.
|
|
469
|
+
"""
|
|
470
|
+
# Create options with AI agent enabled
|
|
471
|
+
options = Mock(spec=Options)
|
|
472
|
+
options.ai_agent = True
|
|
473
|
+
options.ai_fix = True
|
|
474
|
+
options.test = False
|
|
475
|
+
options.fast = False
|
|
476
|
+
options.comp = False
|
|
477
|
+
options.clean = False
|
|
478
|
+
options.verbose = True
|
|
479
|
+
|
|
480
|
+
# Create orchestrator
|
|
481
|
+
with patch("crackerjack.core.workflow_orchestrator.Config"):
|
|
482
|
+
with patch("crackerjack.core.workflow_orchestrator.Console"):
|
|
483
|
+
orchestrator = WorkflowOrchestrator()
|
|
484
|
+
orchestrator.logger = Mock()
|
|
485
|
+
orchestrator.console = Mock()
|
|
486
|
+
orchestrator._quality_intelligence = None
|
|
487
|
+
|
|
488
|
+
# Mock hook execution to fail
|
|
489
|
+
orchestrator._run_fast_hooks_phase = Mock(return_value=False)
|
|
490
|
+
orchestrator._run_comprehensive_hooks_phase = Mock(return_value=False)
|
|
491
|
+
|
|
492
|
+
# Mock AI fixing workflow to succeed
|
|
493
|
+
orchestrator._handle_ai_agent_workflow = AsyncMock(return_value=True)
|
|
494
|
+
|
|
495
|
+
# Mock other required methods
|
|
496
|
+
orchestrator._start_iteration_tracking = Mock(return_value=1)
|
|
497
|
+
orchestrator._update_hooks_status_running = Mock()
|
|
498
|
+
orchestrator._handle_hooks_completion = Mock()
|
|
499
|
+
|
|
500
|
+
# Execute standard workflow with AI agent enabled
|
|
501
|
+
workflow_id = "test_workflow"
|
|
502
|
+
|
|
503
|
+
with patch("crackerjack.core.workflow_orchestrator.phase_monitor"):
|
|
504
|
+
result = await orchestrator._execute_standard_hooks_workflow_monitored(
|
|
505
|
+
options, workflow_id
|
|
506
|
+
)
|
|
507
|
+
|
|
508
|
+
# Verify AI agent workflow was triggered
|
|
509
|
+
orchestrator._handle_ai_agent_workflow.assert_called_once()
|
|
510
|
+
|
|
511
|
+
# Verify it was called with correct parameters
|
|
512
|
+
call_args = orchestrator._handle_ai_agent_workflow.call_args
|
|
513
|
+
assert call_args[0][0] == options
|
|
514
|
+
assert call_args[0][1] == 1 # iteration
|
|
515
|
+
assert call_args[0][2] is False # testing_passed (fast hooks failed)
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
@pytest.mark.asyncio
|
|
519
|
+
async def test_ai_fix_not_triggered_when_hooks_pass():
|
|
520
|
+
"""
|
|
521
|
+
Integration test: When hooks pass, AI fixing should not be triggered
|
|
522
|
+
even if --ai-fix is enabled.
|
|
523
|
+
"""
|
|
524
|
+
# Create options with AI agent enabled
|
|
525
|
+
options = Mock(spec=Options)
|
|
526
|
+
options.ai_agent = True
|
|
527
|
+
options.ai_fix = True
|
|
528
|
+
options.test = False
|
|
529
|
+
options.fast = False
|
|
530
|
+
options.comp = False
|
|
531
|
+
options.clean = False
|
|
532
|
+
options.verbose = True
|
|
533
|
+
|
|
534
|
+
# Create orchestrator
|
|
535
|
+
with patch("crackerjack.core.workflow_orchestrator.Config"):
|
|
536
|
+
with patch("crackerjack.core.workflow_orchestrator.Console"):
|
|
537
|
+
orchestrator = WorkflowOrchestrator()
|
|
538
|
+
orchestrator.logger = Mock()
|
|
539
|
+
orchestrator.console = Mock()
|
|
540
|
+
orchestrator._quality_intelligence = None
|
|
541
|
+
|
|
542
|
+
# Mock hook execution to SUCCEED
|
|
543
|
+
orchestrator._run_fast_hooks_phase = Mock(return_value=True)
|
|
544
|
+
orchestrator._run_comprehensive_hooks_phase = Mock(return_value=True)
|
|
545
|
+
orchestrator._execute_monitored_cleaning_phase = Mock(return_value=True)
|
|
546
|
+
|
|
547
|
+
# Mock standard workflow to succeed
|
|
548
|
+
orchestrator._handle_standard_workflow = AsyncMock(return_value=True)
|
|
549
|
+
|
|
550
|
+
# Mock other required methods
|
|
551
|
+
orchestrator._start_iteration_tracking = Mock(return_value=1)
|
|
552
|
+
orchestrator._update_hooks_status_running = Mock()
|
|
553
|
+
orchestrator._handle_hooks_completion = Mock()
|
|
554
|
+
orchestrator._execute_monitored_fast_hooks_phase = Mock(return_value=True)
|
|
555
|
+
orchestrator._execute_monitored_comprehensive_phase = Mock(
|
|
556
|
+
return_value=True
|
|
557
|
+
)
|
|
558
|
+
|
|
559
|
+
# Execute standard workflow
|
|
560
|
+
workflow_id = "test_workflow"
|
|
561
|
+
|
|
562
|
+
with patch("crackerjack.core.workflow_orchestrator.phase_monitor"):
|
|
563
|
+
result = await orchestrator._execute_standard_hooks_workflow_monitored(
|
|
564
|
+
options, workflow_id
|
|
565
|
+
)
|
|
566
|
+
|
|
567
|
+
# Since hooks passed, it should route to standard workflow, not AI workflow
|
|
568
|
+
# The _handle_ai_workflow_completion would still be called, but it would
|
|
569
|
+
# route to _handle_standard_workflow because hooks passed
|
|
570
|
+
|
|
571
|
+
# This is a complex integration test - we need to verify the complete flow
|
|
572
|
+
assert result is True or isinstance(result, bool)
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
______________________________________________________________________
|
|
576
|
+
|
|
577
|
+
### Phase 3: Manual Testing (Real-World Verification)
|
|
578
|
+
|
|
579
|
+
**Goal:** Verify fixes work in actual usage scenarios
|
|
580
|
+
|
|
581
|
+
#### Test 3.1: Default Workflow (`--ai-fix` only)
|
|
582
|
+
|
|
583
|
+
```bash
|
|
584
|
+
cd /Users/les/Projects/crackerjack
|
|
585
|
+
|
|
586
|
+
# Introduce a deliberate quality issue
|
|
587
|
+
echo "def bad_function():" >> crackerjack/test_ai_fix.py
|
|
588
|
+
echo " x = 1" >> crackerjack/test_ai_fix.py
|
|
589
|
+
echo " return x + y # Undefined variable" >> crackerjack/test_ai_fix.py
|
|
590
|
+
|
|
591
|
+
# Run with --ai-fix (should trigger AI fixing)
|
|
592
|
+
python -m crackerjack --ai-fix -v
|
|
593
|
+
|
|
594
|
+
# Expected behavior:
|
|
595
|
+
# ✅ Runs hooks
|
|
596
|
+
# ✅ Detects errors (refurb, complexity, undefined variable)
|
|
597
|
+
# ✅ Prints "🤖 AI Agent workflow activated"
|
|
598
|
+
# ✅ Attempts to fix issues
|
|
599
|
+
# ✅ Re-runs hooks
|
|
600
|
+
# ✅ Iterates up to max iterations
|
|
601
|
+
|
|
602
|
+
# Cleanup
|
|
603
|
+
rm crackerjack/test_ai_fix.py
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
#### Test 3.2: Fast Workflow (`--ai-fix --fast`)
|
|
607
|
+
|
|
608
|
+
```bash
|
|
609
|
+
cd /Users/les/Projects/crackerjack
|
|
610
|
+
|
|
611
|
+
# Introduce a formatting issue
|
|
612
|
+
echo "def badly_formatted():" >> crackerjack/test_ai_fix.py
|
|
613
|
+
echo " return 'too many spaces'" >> crackerjack/test_ai_fix.py
|
|
614
|
+
|
|
615
|
+
# Run with --ai-fix --fast
|
|
616
|
+
python -m crackerjack --ai-fix --fast -v
|
|
617
|
+
|
|
618
|
+
# Expected behavior:
|
|
619
|
+
# ✅ Runs fast hooks only
|
|
620
|
+
# ✅ Detects formatting issues
|
|
621
|
+
# ✅ Triggers AI fixing for fast hooks
|
|
622
|
+
# ✅ Fixes formatting
|
|
623
|
+
# ✅ Re-runs fast hooks
|
|
624
|
+
|
|
625
|
+
# Cleanup
|
|
626
|
+
rm crackerjack/test_ai_fix.py
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
#### Test 3.3: Comprehensive Workflow (`--ai-fix --comp`)
|
|
630
|
+
|
|
631
|
+
```bash
|
|
632
|
+
cd /Users/les/Projects/crackerjack
|
|
633
|
+
|
|
634
|
+
# Introduce a complexity issue
|
|
635
|
+
cat > crackerjack/test_ai_fix.py << 'EOF'
|
|
636
|
+
def complex_function(a, b, c, d, e):
|
|
637
|
+
if a:
|
|
638
|
+
if b:
|
|
639
|
+
if c:
|
|
640
|
+
if d:
|
|
641
|
+
if e:
|
|
642
|
+
return a + b + c + d + e
|
|
643
|
+
else:
|
|
644
|
+
return 0
|
|
645
|
+
else:
|
|
646
|
+
return 0
|
|
647
|
+
else:
|
|
648
|
+
return 0
|
|
649
|
+
else:
|
|
650
|
+
return 0
|
|
651
|
+
else:
|
|
652
|
+
return 0
|
|
653
|
+
EOF
|
|
654
|
+
|
|
655
|
+
# Run with --ai-fix --comp
|
|
656
|
+
python -m crackerjack --ai-fix --comp -v
|
|
657
|
+
|
|
658
|
+
# Expected behavior:
|
|
659
|
+
# ✅ Runs comprehensive hooks
|
|
660
|
+
# ✅ Detects complexity issues
|
|
661
|
+
# ✅ Triggers AI fixing
|
|
662
|
+
# ✅ Attempts to reduce complexity
|
|
663
|
+
|
|
664
|
+
# Cleanup
|
|
665
|
+
rm crackerjack/test_ai_fix.py
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
#### Test 3.4: MCP Integration Test
|
|
669
|
+
|
|
670
|
+
```bash
|
|
671
|
+
cd /Users/les/Projects/acb
|
|
672
|
+
|
|
673
|
+
# Test via MCP (from Claude Code conversation)
|
|
674
|
+
# User should invoke:
|
|
675
|
+
mcp__crackerjack__execute_crackerjack(
|
|
676
|
+
args="--verbose",
|
|
677
|
+
kwargs={"ai_fix": true, "execution_timeout": 1800}
|
|
678
|
+
)
|
|
679
|
+
|
|
680
|
+
# Expected behavior:
|
|
681
|
+
# ✅ MCP server receives request
|
|
682
|
+
# ✅ Runs hooks
|
|
683
|
+
# ✅ Detects issues
|
|
684
|
+
# ✅ Returns job_id
|
|
685
|
+
# ✅ AI fixing iterations execute
|
|
686
|
+
# ✅ Progress tracked via job_id
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
______________________________________________________________________
|
|
690
|
+
|
|
691
|
+
## Test Execution Checklist
|
|
692
|
+
|
|
693
|
+
### Pre-Testing Setup
|
|
694
|
+
|
|
695
|
+
- [ ] Ensure you're in crackerjack project directory: `cd /Users/les/Projects/crackerjack`
|
|
696
|
+
- [ ] Install test dependencies: `uv sync --group dev`
|
|
697
|
+
- [ ] Verify pytest is installed: `python -m pytest --version`
|
|
698
|
+
|
|
699
|
+
### Phase 1: Unit Tests
|
|
700
|
+
|
|
701
|
+
- [ ] Create `tests/test_main.py` with `_setup_debug_and_verbose_flags()` tests
|
|
702
|
+
- [ ] Create `tests/test_workflow_orchestrator_ai_routing.py` with workflow routing tests
|
|
703
|
+
- [ ] Run unit tests: `python -m pytest tests/test_main.py -v`
|
|
704
|
+
- [ ] Run workflow tests: `python -m pytest tests/test_workflow_orchestrator_ai_routing.py -v`
|
|
705
|
+
- [ ] Verify all unit tests pass
|
|
706
|
+
|
|
707
|
+
### Phase 2: Integration Tests
|
|
708
|
+
|
|
709
|
+
- [ ] Create `tests/integration/` directory
|
|
710
|
+
- [ ] Create `tests/integration/test_ai_fix_flag_integration.py`
|
|
711
|
+
- [ ] Create `tests/integration/test_ai_agent_env_setup.py`
|
|
712
|
+
- [ ] Create `tests/integration/test_ai_fix_complete_workflow.py`
|
|
713
|
+
- [ ] Run integration tests: `python -m pytest tests/integration/ -v`
|
|
714
|
+
- [ ] Verify all integration tests pass
|
|
715
|
+
|
|
716
|
+
### Phase 3: Manual Testing
|
|
717
|
+
|
|
718
|
+
- [ ] Test default workflow: `python -m crackerjack --ai-fix -v`
|
|
719
|
+
- [ ] Test fast workflow: `python -m crackerjack --ai-fix --fast -v`
|
|
720
|
+
- [ ] Test comprehensive workflow: `python -m crackerjack --ai-fix --comp -v`
|
|
721
|
+
- [ ] Test MCP integration from acb project
|
|
722
|
+
- [ ] Verify AI agent actually executes fixing iterations in all cases
|
|
723
|
+
- [ ] Verify progress tracking works
|
|
724
|
+
|
|
725
|
+
### Post-Testing
|
|
726
|
+
|
|
727
|
+
- [ ] Review test results and fix any failures
|
|
728
|
+
- [ ] Document any additional issues discovered
|
|
729
|
+
- [ ] Update CHANGELOG.md with fixes
|
|
730
|
+
- [ ] Bump version: `python -m crackerjack --bump patch`
|
|
731
|
+
- [ ] Commit all changes: `git add . && git commit -m "fix: AI auto-fix workflow routing and parameter passing"`
|
|
732
|
+
- [ ] Publish to PyPI: `python -m crackerjack --publish`
|
|
733
|
+
- [ ] Test in acb project with new version
|
|
734
|
+
|
|
735
|
+
______________________________________________________________________
|
|
736
|
+
|
|
737
|
+
## Success Criteria
|
|
738
|
+
|
|
739
|
+
**All tests must pass before publishing:**
|
|
740
|
+
|
|
741
|
+
1. ✅ All unit tests pass (100% coverage of fixed functions)
|
|
742
|
+
1. ✅ All integration tests pass
|
|
743
|
+
1. ✅ Manual testing confirms AI agent executes when `--ai-fix` is used
|
|
744
|
+
1. ✅ Manual testing confirms AI fixing works with all workflow paths:
|
|
745
|
+
- Default (no flags)
|
|
746
|
+
- `--fast`
|
|
747
|
+
- `--comp`
|
|
748
|
+
- `--test`
|
|
749
|
+
1. ✅ MCP integration test succeeds from acb project
|
|
750
|
+
1. ✅ No regressions in existing functionality
|
|
751
|
+
|
|
752
|
+
**If ANY test fails:**
|
|
753
|
+
|
|
754
|
+
- DO NOT publish to PyPI
|
|
755
|
+
- Document the failure
|
|
756
|
+
- Fix the issue
|
|
757
|
+
- Re-run all tests
|
|
758
|
+
|
|
759
|
+
______________________________________________________________________
|
|
760
|
+
|
|
761
|
+
## Known Limitations and Future Work
|
|
762
|
+
|
|
763
|
+
### Current Limitations
|
|
764
|
+
|
|
765
|
+
1. **ClaudeCodeBridge is a simulation**: The standalone CLI mode (`python -m crackerjack --ai-fix`) uses a simulated bridge that provides recommendations but doesn't actually invoke Claude Code agents via the Task tool.
|
|
766
|
+
|
|
767
|
+
1. **MCP Mode is Required for Full AI Fixing**: The complete AI fixing workflow requires MCP integration where Claude Code (the MCP client) applies the fixes.
|
|
768
|
+
|
|
769
|
+
### Future Enhancements
|
|
770
|
+
|
|
771
|
+
1. **Enhance ClaudeCodeBridge**: Update to actually invoke Task tool for standalone CLI mode
|
|
772
|
+
1. **Add More Test Coverage**: Test coverage improvements, especially for AI agent coordinator
|
|
773
|
+
1. **Integration Test for MCP**: Automated integration test for MCP workflow
|
|
774
|
+
1. **Performance Testing**: Measure AI fixing iteration performance
|
|
775
|
+
1. **Error Recovery Testing**: Test error handling in AI fixing workflow
|
|
776
|
+
|
|
777
|
+
______________________________________________________________________
|
|
778
|
+
|
|
779
|
+
## Documentation Updates Required
|
|
780
|
+
|
|
781
|
+
After testing completes successfully:
|
|
782
|
+
|
|
783
|
+
1. **Update investigation reports**:
|
|
784
|
+
|
|
785
|
+
- Mark both bugs as fixed and tested
|
|
786
|
+
- Add test results summary
|
|
787
|
+
|
|
788
|
+
1. **Update CHANGELOG.md**:
|
|
789
|
+
|
|
790
|
+
- Document both bug fixes
|
|
791
|
+
- List new tests added
|
|
792
|
+
- Mention improved AI auto-fix reliability
|
|
793
|
+
|
|
794
|
+
1. **Update README.md** (if needed):
|
|
795
|
+
|
|
796
|
+
- Document `--ai-fix` flag usage
|
|
797
|
+
- Add examples of AI auto-fix workflow
|
|
798
|
+
|
|
799
|
+
1. **Update user guide** (if exists):
|
|
800
|
+
|
|
801
|
+
- Explain AI agent workflow
|
|
802
|
+
- Document when to use `--ai-fix`
|
|
803
|
+
|
|
804
|
+
______________________________________________________________________
|
|
805
|
+
|
|
806
|
+
## Quick Test Commands
|
|
807
|
+
|
|
808
|
+
```bash
|
|
809
|
+
# Run all tests
|
|
810
|
+
python -m pytest tests/ -v
|
|
811
|
+
|
|
812
|
+
# Run only unit tests
|
|
813
|
+
python -m pytest tests/test_main.py tests/test_workflow_orchestrator_ai_routing.py -v
|
|
814
|
+
|
|
815
|
+
# Run only integration tests
|
|
816
|
+
python -m pytest tests/integration/ -v
|
|
817
|
+
|
|
818
|
+
# Run with coverage
|
|
819
|
+
python -m pytest tests/ --cov=crackerjack --cov-report=term -v
|
|
820
|
+
|
|
821
|
+
# Run specific test
|
|
822
|
+
python -m pytest tests/test_workflow_orchestrator_ai_routing.py::TestStandardWorkflowAIRouting::test_standard_workflow_calls_ai_completion_when_ai_agent_enabled -v
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
______________________________________________________________________
|
|
826
|
+
|
|
827
|
+
**Next Steps:**
|
|
828
|
+
|
|
829
|
+
1. Review this plan
|
|
830
|
+
1. Create test files as specified
|
|
831
|
+
1. Run tests and document results
|
|
832
|
+
1. Fix any failures
|
|
833
|
+
1. Publish new version only after all tests pass
|
|
834
|
+
1. Test in acb project with new version
|
|
835
|
+
|
|
836
|
+
**Questions? Issues?**
|
|
837
|
+
|
|
838
|
+
Document any problems encountered during testing in this file or in a new `AI-FIX-TEST-RESULTS.md` file.
|