crackerjack 0.31.18__tar.gz → 0.32.0__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.31.18 → crackerjack-0.32.0}/.gitignore +3 -0
- {crackerjack-0.31.18/crackerjack → crackerjack-0.32.0}/.pre-commit-config.yaml +1 -1
- {crackerjack-0.31.18 → crackerjack-0.32.0}/CHANGELOG.md +140 -0
- crackerjack-0.32.0/CLAUDE.md +207 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/PKG-INFO +1 -1
- crackerjack-0.32.0/REFACTORING_SUMMARY.md +123 -0
- crackerjack-0.32.0/SECURITY-AUDIT.md +162 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/.gitignore +3 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0/crackerjack}/.pre-commit-config.yaml +1 -1
- crackerjack-0.32.0/crackerjack/CLAUDE.md +207 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/__main__.py +1 -1
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/refactoring_agent.py +67 -46
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/cli/handlers.py +7 -7
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/config/hooks.py +36 -6
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/async_workflow_orchestrator.py +2 -2
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/phase_coordinator.py +28 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/workflow_orchestrator.py +348 -18
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/dynamic_config.py +1 -25
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/test_command_builder.py +15 -11
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/execution_tools.py +8 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/workflow_executor.py +130 -40
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/models/protocols.py +45 -0
- crackerjack-0.32.0/crackerjack/security/__init__.py +1 -0
- crackerjack-0.32.0/crackerjack/security/audit.py +212 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/git.py +88 -2
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/performance_benchmarks.py +2 -2
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/tools/validate_regex_patterns.py +14 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/uv.lock +4 -4
- {crackerjack-0.31.18/crackerjack → crackerjack-0.32.0}/pyproject.toml +1 -1
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/conftest.py +1 -1
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_ai_agent_workflow.py +1 -1
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_phase_coordinator_simple.py +52 -0
- crackerjack-0.32.0/tests/test_security_audit.py +137 -0
- crackerjack-0.32.0/tests/test_security_integration.py +206 -0
- crackerjack-0.32.0/tests/test_validate_regex_patterns_tool.py +286 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/uv.lock +4 -4
- crackerjack-0.31.18/CLAUDE.md +0 -588
- crackerjack-0.31.18/complexipy.csv +0 -3702
- crackerjack-0.31.18/crackerjack/CLAUDE.md +0 -588
- crackerjack-0.31.18/feature-implementation-optimization.md +0 -152
- crackerjack-0.31.18/feature-implementation-plan.md +0 -7927
- crackerjack-0.31.18/session_handoff_20250906_110220.md +0 -29
- crackerjack-0.31.18/test-implementation-plan.md +0 -643
- {crackerjack-0.31.18 → crackerjack-0.32.0}/.github/FUNDING.yml +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/AGENT-CAPABILITIES.json +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/AGENTS.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/AI-AGENT-RULES.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/AI-REFERENCE.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/ERROR-PATTERNS.yaml +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/LICENSE +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/PERFORMANCE_AGENT_ENHANCEMENTS.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/QWEN.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/README-AI-AGENT.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/README.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/REFACTORING_AGENT_ENHANCEMENTS.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/RULES.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/SECURITY.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/UVXUSAGE.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/RULES.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/architect_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/base.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/coordinator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/documentation_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/dry_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/formatting_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/import_optimization_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/performance_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/performance_helpers.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/proactive_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/refactoring_helpers.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/security_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/test_creation_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/test_specialist_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/agents/tracker.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/api.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/cli/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/cli/interactive.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/cli/options.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/cli/utils.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/code_cleaner.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/config/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/config/global_lock_config.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/autofix_coordinator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/container.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/enhanced_container.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/file_lifecycle.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/performance.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/performance_monitor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/proactive_workflow.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/resource_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/service_watchdog.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/session_coordinator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/timeout_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/core/websocket_lifecycle.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/errors.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/example.mcp.json +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/executors/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/executors/async_hook_executor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/executors/cached_hook_executor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/executors/hook_executor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/executors/hook_lock_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/executors/individual_hook_executor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/intelligence/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/intelligence/adaptive_learning.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/intelligence/agent_orchestrator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/intelligence/agent_registry.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/intelligence/agent_selector.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/intelligence/integration.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/interactive.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/async_hook_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/hook_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/publish_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/test_executor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/test_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/test_manager_backup.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/managers/test_progress.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/cache.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/client_runner.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/context.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/dashboard.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/enhanced_progress_monitor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/enhanced_progress_monitor.tcss +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/file_monitor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/progress_components.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/progress_monitor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/progress_monitor.tcss +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/rate_limiter.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/server.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/server_core.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/service_watchdog.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/state.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/task_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/core_tools.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/error_analyzer.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/execution_tools_backup.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/intelligence_tool_registry.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/intelligence_tools.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/monitoring_tools.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/monitoring_tools.py.backup +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/proactive_tools.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/progress_tools.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/tools/utility_tools.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/websocket/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/websocket/app.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/websocket/endpoints.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/websocket/jobs.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/websocket/server.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/websocket/websocket_handler.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/mcp/websocket_server.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/models/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/models/config.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/models/config_adapter.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/models/resource_protocols.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/models/task.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/monitoring/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/monitoring/ai_agent_watchdog.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/monitoring/regression_prevention.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/orchestration/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/orchestration/advanced_orchestrator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/orchestration/coverage_improvement.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/orchestration/execution_strategies.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/orchestration/test_progress_streamer.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/plugins/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/plugins/base.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/plugins/hooks.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/plugins/loader.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/plugins/managers.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/py313.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0/crackerjack}/pyproject.toml +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/backup_service.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/bounded_status_operations.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/cache.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/config.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/config_integrity.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/config_merge.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/contextual_ai_assistant.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/coverage_ratchet.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/debug.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/dependency_monitor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/enhanced_filesystem.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/file_hasher.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/filesystem.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/health_metrics.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/initialization.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/input_validator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/log_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/logging.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/metrics.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/pattern_cache.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/pattern_detector.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/regex_patterns.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/regex_utils.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/secure_path_utils.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/secure_status_formatter.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/secure_subprocess.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/security.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/security_logger.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/server_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/smart_scheduling.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/status_authentication.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/status_security_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/thread_safe_status_collector.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/tool_version_service.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/unified_config.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/validation_rate_limiter.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/version_checker.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/services/websocket_resource_limiter.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/slash_commands/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/slash_commands/init.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/slash_commands/run.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/slash_commands/status.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/tools/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/tools/fix_terminal.sh +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/crackerjack/tools/validate_input_validator_patterns.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/AI_AGENT_DEBUGGING.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/API_REFERENCE.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/ARCHITECTURE.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/BACKUP_SYSTEM.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/DASHBOARD_ARCHITECTURE.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/FUTURE-ENHANCEMENTS.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/MCP_INTEGRATION.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/MONITORING_INTEGRATION.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/RESOURCE_CLEANUP_IMPLEMENTATION.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/SUB_AGENT_MONITORING_DESIGN.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/VERIFICATION_WORKFLOW.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/WORKFLOW_KNOWLEDGE_BASE.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/security/INPUT_VALIDATOR_SECURITY_AUDIT.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/security/SECURITY_AUDIT_REPORT.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/security/SECURITY_AUDIT_STATUS_DISCLOSURE.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/security/SECURITY_HARDENING_REPORT.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/docs/security/SECURITY_SUBPROCESS_HARDENING_REPORT.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/example.mcp.json +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/excalidraw.log +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/requirements.txt +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/scripts/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/scripts/integrate_resource_management.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/scripts/performance_benchmark.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/.coverage +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/HEALTH_METRICS_TESTING_SUMMARY.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/TESTING.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/TEST_COVERAGE_PLAN.md +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/coverage.json +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/data/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/data/comments_sample.txt +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/data/docstrings_sample.txt +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/data/expected_comments_sample.txt +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/data/init.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/scripts/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/scripts/agent_audit_report.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/scripts/run_test_suite.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test___main__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_async_hook_executor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_cli/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_cli/test_global_lock_options.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_core_autofix_coordinator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_core_comprehensive.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_core_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_core_enhanced_container.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_core_modules.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_core_performance.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_documentation_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_documentation_agent_simple.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_dynamic_config.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_dynamic_config_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_enhanced_filesystem.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_enhanced_filesystem_comprehensive.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_enhanced_filesystem_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_executors/__init__.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_executors/test_lock_integration.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_filesystem_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_global_lock_config.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_hook_lock_manager.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_hook_manager_simple.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_import_coverage_consolidated.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_import_optimization_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_input_validation.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_intelligence_system.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_large_modules_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_main_entry_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_main_module.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_managers_consolidated.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_mcp_progress_monitor.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_mcp_server.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_models_comprehensive.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_models_config_adapter_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_models_focused.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_models_task_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_modernized_code.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_performance_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_performance_agent_enhanced.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_performance_agent_simple.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_performance_benchmarks_focused.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_plugins_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_proactive_agent_system.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_protocol_compliance.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_publish_manager_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_py313_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_pytest_features.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_refactoring_agent.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_regex_patterns.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_resource_cleanup_integration.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_secure_path_utils.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_secure_status_formatter.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_security_hardening.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_services_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_session_coordinator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_session_coordinator_coverage.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_simple_tool_version_service.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_stage_workflow_execution_order.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_structured_errors.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_structured_logging.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_terminal_restoration.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_terminal_state.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_timeout_system.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_unified_api.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_unified_config.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_websocket_endpoints.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_workflow_integration.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tests/test_workflow_orchestrator.py +0 -0
- {crackerjack-0.31.18 → crackerjack-0.32.0}/tools/validate_regex_patterns_standalone.py +0 -0
|
@@ -89,11 +89,14 @@ __pycache__/
|
|
|
89
89
|
/dist/
|
|
90
90
|
/error-context.json
|
|
91
91
|
/examples/
|
|
92
|
+
/feature-implementation-*.md
|
|
92
93
|
/hooks-analysis.json
|
|
93
94
|
/htmlcov/
|
|
94
95
|
/project-structure.json
|
|
95
96
|
/quality-metrics.json
|
|
96
97
|
/scratch/
|
|
98
|
+
/session_handoff_*.md
|
|
99
|
+
/test-implementation-*.md
|
|
97
100
|
/test-results.xml
|
|
98
101
|
/tests/.benchmarks/
|
|
99
102
|
/tests/htmlcov/
|
|
@@ -3,7 +3,7 @@ repos:
|
|
|
3
3
|
hooks:
|
|
4
4
|
- id: validate-regex-patterns
|
|
5
5
|
name: validate-regex-patterns
|
|
6
|
-
entry: uv run python
|
|
6
|
+
entry: uv run python -m crackerjack.tools.validate_regex_patterns
|
|
7
7
|
language: system
|
|
8
8
|
files: \.py$
|
|
9
9
|
exclude: ^\.venv/
|
|
@@ -105,6 +105,146 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
105
105
|
|
|
106
106
|
- fix: resolve bug in parser
|
|
107
107
|
|
|
108
|
+
## [Unreleased] - 2025-09-06
|
|
109
|
+
|
|
110
|
+
### Added
|
|
111
|
+
|
|
112
|
+
- feat: add new feature
|
|
113
|
+
|
|
114
|
+
### Fixed
|
|
115
|
+
|
|
116
|
+
- fix: resolve bug in parser
|
|
117
|
+
|
|
118
|
+
## [Unreleased] - 2025-09-06
|
|
119
|
+
|
|
120
|
+
### Added
|
|
121
|
+
|
|
122
|
+
- feat: add new feature
|
|
123
|
+
|
|
124
|
+
### Fixed
|
|
125
|
+
|
|
126
|
+
- fix: resolve bug in parser
|
|
127
|
+
|
|
128
|
+
## [Unreleased] - 2025-09-06
|
|
129
|
+
|
|
130
|
+
### Added
|
|
131
|
+
|
|
132
|
+
- feat: add new feature
|
|
133
|
+
|
|
134
|
+
### Fixed
|
|
135
|
+
|
|
136
|
+
- fix: resolve bug in parser
|
|
137
|
+
|
|
138
|
+
## [Unreleased] - 2025-09-06
|
|
139
|
+
|
|
140
|
+
### Added
|
|
141
|
+
|
|
142
|
+
- feat: add new feature
|
|
143
|
+
|
|
144
|
+
### Fixed
|
|
145
|
+
|
|
146
|
+
- fix: resolve bug in parser
|
|
147
|
+
|
|
148
|
+
## [Unreleased] - 2025-09-06
|
|
149
|
+
|
|
150
|
+
### Added
|
|
151
|
+
|
|
152
|
+
- feat: add new feature
|
|
153
|
+
|
|
154
|
+
### Fixed
|
|
155
|
+
|
|
156
|
+
- fix: resolve bug in parser
|
|
157
|
+
|
|
158
|
+
## [Unreleased] - 2025-09-06
|
|
159
|
+
|
|
160
|
+
### Added
|
|
161
|
+
|
|
162
|
+
- feat: add new feature
|
|
163
|
+
|
|
164
|
+
### Fixed
|
|
165
|
+
|
|
166
|
+
- fix: resolve bug in parser
|
|
167
|
+
|
|
168
|
+
## [Unreleased] - 2025-09-06
|
|
169
|
+
|
|
170
|
+
### Added
|
|
171
|
+
|
|
172
|
+
- feat: add new feature
|
|
173
|
+
|
|
174
|
+
### Fixed
|
|
175
|
+
|
|
176
|
+
- fix: resolve bug in parser
|
|
177
|
+
|
|
178
|
+
## [Unreleased] - 2025-09-06
|
|
179
|
+
|
|
180
|
+
### Added
|
|
181
|
+
|
|
182
|
+
- feat: add new feature
|
|
183
|
+
|
|
184
|
+
### Fixed
|
|
185
|
+
|
|
186
|
+
- fix: resolve bug in parser
|
|
187
|
+
|
|
188
|
+
## [Unreleased] - 2025-09-06
|
|
189
|
+
|
|
190
|
+
### Added
|
|
191
|
+
|
|
192
|
+
- feat: add new feature
|
|
193
|
+
|
|
194
|
+
### Fixed
|
|
195
|
+
|
|
196
|
+
- fix: resolve bug in parser
|
|
197
|
+
|
|
198
|
+
## [Unreleased] - 2025-09-06
|
|
199
|
+
|
|
200
|
+
### Added
|
|
201
|
+
|
|
202
|
+
- feat: add new feature
|
|
203
|
+
|
|
204
|
+
### Fixed
|
|
205
|
+
|
|
206
|
+
- fix: resolve bug in parser
|
|
207
|
+
|
|
208
|
+
## [Unreleased] - 2025-09-06
|
|
209
|
+
|
|
210
|
+
### Added
|
|
211
|
+
|
|
212
|
+
- feat: add new feature
|
|
213
|
+
|
|
214
|
+
### Fixed
|
|
215
|
+
|
|
216
|
+
- fix: resolve bug in parser
|
|
217
|
+
|
|
218
|
+
## [Unreleased] - 2025-09-06
|
|
219
|
+
|
|
220
|
+
### Added
|
|
221
|
+
|
|
222
|
+
- feat: add new feature
|
|
223
|
+
|
|
224
|
+
### Fixed
|
|
225
|
+
|
|
226
|
+
- fix: resolve bug in parser
|
|
227
|
+
|
|
228
|
+
## [Unreleased] - 2025-09-06
|
|
229
|
+
|
|
230
|
+
### Added
|
|
231
|
+
|
|
232
|
+
- feat: add new feature
|
|
233
|
+
|
|
234
|
+
### Fixed
|
|
235
|
+
|
|
236
|
+
- fix: resolve bug in parser
|
|
237
|
+
|
|
238
|
+
## [Unreleased] - 2025-09-06
|
|
239
|
+
|
|
240
|
+
### Added
|
|
241
|
+
|
|
242
|
+
- feat: add new feature
|
|
243
|
+
|
|
244
|
+
### Fixed
|
|
245
|
+
|
|
246
|
+
- fix: resolve bug in parser
|
|
247
|
+
|
|
108
248
|
## [Unreleased] - 2025-09-05
|
|
109
249
|
|
|
110
250
|
### Added
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
Crackerjack is an opinionated Python project management tool unifying UV, Ruff, pytest, and pre-commit into a single workflow with AI agent integration via MCP.
|
|
8
|
+
|
|
9
|
+
**Key Dependencies**: Python 3.13+, UV, pre-commit, pytest
|
|
10
|
+
|
|
11
|
+
**Clean Code Philosophy**: DRY/YAGNI/KISS - Every line is a liability. Optimize for readability with self-documenting code.
|
|
12
|
+
|
|
13
|
+
## AI Documentation References
|
|
14
|
+
|
|
15
|
+
- **[AI-REFERENCE.md](AI-REFERENCE.md)** - Command reference with decision trees
|
|
16
|
+
- **[AGENT-CAPABILITIES.json](AGENT-CAPABILITIES.json)** - Structured agent data
|
|
17
|
+
- **[ERROR-PATTERNS.yaml](ERROR-PATTERNS.yaml)** - Automated issue resolution patterns
|
|
18
|
+
|
|
19
|
+
## Essential Commands
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Daily workflow
|
|
23
|
+
python -m crackerjack # Quality checks
|
|
24
|
+
python -m crackerjack -t # With tests
|
|
25
|
+
python -m crackerjack --ai-agent -t # AI auto-fixing (recommended)
|
|
26
|
+
|
|
27
|
+
# Development
|
|
28
|
+
python -m crackerjack --ai-debug -t # Debug AI issues
|
|
29
|
+
python -m crackerjack --skip-hooks # Skip hooks during iteration
|
|
30
|
+
python -m crackerjack -x # Code cleaning mode
|
|
31
|
+
|
|
32
|
+
# Server management
|
|
33
|
+
python -m crackerjack --start-mcp-server # MCP server
|
|
34
|
+
python -m crackerjack --watchdog # Monitor/restart services
|
|
35
|
+
|
|
36
|
+
# Release
|
|
37
|
+
python -m crackerjack -a patch # Full release workflow
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## AI Agent System
|
|
41
|
+
|
|
42
|
+
**9 Specialized Agents** handle domain-specific issues:
|
|
43
|
+
|
|
44
|
+
- **RefactoringAgent** (0.9): Complexity ≤15, dead code removal
|
|
45
|
+
- **PerformanceAgent** (0.85): O(n²) detection, optimization
|
|
46
|
+
- **SecurityAgent** (0.8): Hardcoded paths, unsafe operations
|
|
47
|
+
- **DocumentationAgent** (0.8): Changelog, .md consistency
|
|
48
|
+
- **TestCreationAgent** (0.8): Test failures, fixtures
|
|
49
|
+
- **DRYAgent** (0.8): Code duplication patterns
|
|
50
|
+
- **FormattingAgent** (0.8): Style violations, imports
|
|
51
|
+
- **ImportOptimizationAgent**: Import cleanup, reorganization
|
|
52
|
+
- **TestSpecialistAgent** (0.8): Advanced testing scenarios
|
|
53
|
+
|
|
54
|
+
**Usage**: `--ai-agent` enables batch fixing; confidence ≥0.7 uses specific agents
|
|
55
|
+
|
|
56
|
+
## Architecture
|
|
57
|
+
|
|
58
|
+
**Modular DI Architecture**: `__main__.py` → `WorkflowOrchestrator` → Coordinators → Managers → Services
|
|
59
|
+
|
|
60
|
+
**Critical Pattern**: Always import protocols from `models/protocols.py`, never concrete classes
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
# ❌ Wrong
|
|
64
|
+
from ..managers.test_manager import TestManager
|
|
65
|
+
|
|
66
|
+
# ✅ Correct
|
|
67
|
+
from ..models.protocols import TestManagerProtocol
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Core Layers**:
|
|
71
|
+
|
|
72
|
+
- **Orchestration**: `WorkflowOrchestrator`, DI containers, lifecycle management
|
|
73
|
+
- **Coordinators**: Session/phase coordination, async workflows, parallel execution
|
|
74
|
+
- **Managers**: Hook execution (fast→comprehensive), test management, publishing
|
|
75
|
+
- **Services**: Filesystem, git, config, security, health monitoring
|
|
76
|
+
|
|
77
|
+
## Testing & Development
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Specific test
|
|
81
|
+
python -m pytest tests/test_file.py::TestClass::test_method -v
|
|
82
|
+
|
|
83
|
+
# Coverage
|
|
84
|
+
python -m pytest --cov=crackerjack --cov-report=html
|
|
85
|
+
|
|
86
|
+
# Custom workers
|
|
87
|
+
python -m crackerjack -t --test-workers 4
|
|
88
|
+
|
|
89
|
+
# Version bump
|
|
90
|
+
python -m crackerjack --bump patch
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Quality Process
|
|
94
|
+
|
|
95
|
+
**Workflow Order**:
|
|
96
|
+
|
|
97
|
+
1. **Fast Hooks** (~5s): formatting, basic checks → retry once if fail
|
|
98
|
+
1. **Full Test Suite**: collect ALL failures, don't stop on first
|
|
99
|
+
1. **Comprehensive Hooks** (~30s): type checking, security, complexity → collect ALL issues
|
|
100
|
+
1. **AI Batch Fixing**: process all collected failures together
|
|
101
|
+
|
|
102
|
+
**Testing**: pytest with asyncio, 300s timeout, auto-detected workers
|
|
103
|
+
**Coverage**: Ratchet system targeting 100%, never decrease
|
|
104
|
+
|
|
105
|
+
## Code Standards
|
|
106
|
+
|
|
107
|
+
**Quality Rules**:
|
|
108
|
+
|
|
109
|
+
- **Complexity ≤15** per function
|
|
110
|
+
- **No hardcoded paths** (use `tempfile`)
|
|
111
|
+
- **No shell=True** in subprocess
|
|
112
|
+
- **Type annotations required**
|
|
113
|
+
- **Protocol-based DI**
|
|
114
|
+
- **Python 3.13+**: `|` unions, protocols, pathlib
|
|
115
|
+
|
|
116
|
+
**Refactoring Pattern**: Break complex methods into helpers
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
def complex_method(self, data: dict) -> bool:
|
|
120
|
+
if not self._validate_input(data):
|
|
121
|
+
return self._handle_invalid_input()
|
|
122
|
+
processed = self._process_data(data)
|
|
123
|
+
return self._save_results(processed)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Critical Regex Safety**: NEVER write raw regex. Use centralized registry:
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
# ❌ DANGEROUS
|
|
130
|
+
text = re.sub(r"(\w+) - (\w+)", r"\g < 1 >-\g < 2 >", text)
|
|
131
|
+
|
|
132
|
+
# ✅ SAFE
|
|
133
|
+
from crackerjack.services.regex_patterns import SAFE_PATTERNS
|
|
134
|
+
|
|
135
|
+
text = SAFE_PATTERNS["fix_hyphenated_names"].apply(text)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Common Issues & Solutions
|
|
139
|
+
|
|
140
|
+
**Development**:
|
|
141
|
+
|
|
142
|
+
- **AI agent ineffective**: Use `--ai-debug -t` for analysis
|
|
143
|
+
- **Import errors**: Always import protocols from `models/protocols.py`
|
|
144
|
+
- **Test hangs**: Avoid complex async tests, use simple synchronous config tests
|
|
145
|
+
- **Coverage failing**: Never reduce below baseline, add tests incrementally
|
|
146
|
+
- **Complexity >15**: Break into helper methods using RefactoringAgent approach
|
|
147
|
+
|
|
148
|
+
**Server**:
|
|
149
|
+
|
|
150
|
+
- **MCP not starting**: `--restart-mcp-server` or `--watchdog`
|
|
151
|
+
- **Terminal stuck**: `stty sane; reset; exec $SHELL -l`
|
|
152
|
+
- **Slow tests**: Customize `--test-workers N` or use `--skip-hooks`
|
|
153
|
+
|
|
154
|
+
## MCP Server Integration
|
|
155
|
+
|
|
156
|
+
**Features**: Dual protocol (MCP + WebSocket), real-time progress, job tracking
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Start server
|
|
160
|
+
python -m crackerjack --start-mcp-server
|
|
161
|
+
|
|
162
|
+
# Monitor progress at http://localhost:8675/
|
|
163
|
+
python -m crackerjack.mcp.progress_monitor <job_id>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Available Tools**: `execute_crackerjack`, `get_job_progress`, `get_comprehensive_status`, `analyze_errors`
|
|
167
|
+
|
|
168
|
+
**Slash Commands**: `/crackerjack:run`, `/crackerjack:status`, `/crackerjack:init`
|
|
169
|
+
|
|
170
|
+
## Critical Reminders
|
|
171
|
+
|
|
172
|
+
**Core Instructions**:
|
|
173
|
+
|
|
174
|
+
- Do only what's asked, nothing more
|
|
175
|
+
- NEVER create files unless absolutely necessary
|
|
176
|
+
- ALWAYS prefer editing existing files
|
|
177
|
+
- MAINTAIN coverage ratchet
|
|
178
|
+
|
|
179
|
+
**Quality Standards**:
|
|
180
|
+
|
|
181
|
+
- **Test Quality**: Avoid async tests that hang, use synchronous config tests
|
|
182
|
+
- **Import Compliance**: Use protocols from `models/protocols.py`
|
|
183
|
+
- **Fix failures FIRST** before creating new tests
|
|
184
|
+
- Use IDE diagnostics after implementation
|
|
185
|
+
|
|
186
|
+
**Failure Patterns to Avoid**:
|
|
187
|
+
|
|
188
|
+
```python
|
|
189
|
+
# ❌ Async tests that hang
|
|
190
|
+
@pytest.mark.asyncio
|
|
191
|
+
async def test_batch_processing(self, batched_saver):
|
|
192
|
+
await batched_saver.start() # Can hang
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
# ✅ Simple synchronous tests
|
|
196
|
+
def test_batch_configuration(self, batched_saver):
|
|
197
|
+
assert batched_saver.max_batch_size == expected_size
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
# ❌ Import concrete classes
|
|
201
|
+
from ..managers.test_manager import TestManager
|
|
202
|
+
|
|
203
|
+
# ✅ Import protocols
|
|
204
|
+
from ..models.protocols import TestManagerProtocol
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Current Status**: 10.11% coverage baseline targeting 100% (ratchet system: 2% tolerance, never reduce)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crackerjack
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.32.0
|
|
4
4
|
Summary: Opinionated Python project management tool
|
|
5
5
|
Project-URL: documentation, https://github.com/lesleslie/crackerjack
|
|
6
6
|
Project-URL: homepage, https://github.com/lesleslie/crackerjack
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Workflow Orchestrator Refactoring Summary
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Successfully refactored the `WorkflowOrchestrator` class in `/crackerjack/core/workflow_orchestrator.py` to eliminate code duplication while preserving all security hardening implementations.
|
|
5
|
+
|
|
6
|
+
## Issues Addressed
|
|
7
|
+
|
|
8
|
+
### 1. Code Duplication Elimination
|
|
9
|
+
**Problem**: The `_handle_ai_agent_workflow` and `_handle_standard_workflow` methods contained ~40 lines of duplicated security checking logic.
|
|
10
|
+
|
|
11
|
+
**Solution**: Extracted shared logic into focused helper methods:
|
|
12
|
+
|
|
13
|
+
- `_check_security_gates_for_publishing()` - Centralized security gate checking
|
|
14
|
+
- `_handle_security_gate_failure()` - Unified security failure handling with optional AI fixing
|
|
15
|
+
- `_determine_ai_fixing_needed()` - Logic for when AI fixing should trigger
|
|
16
|
+
- `_determine_workflow_success()` - Success determination based on workflow type
|
|
17
|
+
- `_show_verbose_failure_details()` - Detailed failure reporting
|
|
18
|
+
|
|
19
|
+
### 2. Complexity Reduction
|
|
20
|
+
**Before**: Both main workflow methods had high complexity due to nested conditionals and duplicated logic.
|
|
21
|
+
|
|
22
|
+
**After**:
|
|
23
|
+
- Simplified main methods to orchestrate helper functions
|
|
24
|
+
- Each helper method focuses on a single responsibility
|
|
25
|
+
- Complexity ≤15 per function (verified via complexipy hook)
|
|
26
|
+
|
|
27
|
+
### 3. Maintainability Improvement
|
|
28
|
+
**Follows DRY/YAGNI/KISS Principles**:
|
|
29
|
+
- **DRY**: Eliminated 40+ lines of duplicated security logic
|
|
30
|
+
- **YAGNI**: Each helper method has a focused, single purpose
|
|
31
|
+
- **KISS**: Complex nested conditionals replaced with clear method calls
|
|
32
|
+
|
|
33
|
+
## Key Refactoring Changes
|
|
34
|
+
|
|
35
|
+
### Before (Duplicated Logic)
|
|
36
|
+
```python
|
|
37
|
+
# In _handle_ai_agent_workflow
|
|
38
|
+
if publishing_requested:
|
|
39
|
+
try:
|
|
40
|
+
security_blocks_publishing = self._check_security_critical_failures()
|
|
41
|
+
except Exception as e:
|
|
42
|
+
self.logger.warning(f"Security check failed: {e} - blocking publishing")
|
|
43
|
+
self.console.print("[red]🔒 SECURITY CHECK FAILED...")
|
|
44
|
+
return False
|
|
45
|
+
# ... 40+ more lines of similar logic
|
|
46
|
+
|
|
47
|
+
# In _handle_standard_workflow
|
|
48
|
+
if publishing_requested:
|
|
49
|
+
try:
|
|
50
|
+
security_blocks_publishing = self._check_security_critical_failures()
|
|
51
|
+
except Exception as e:
|
|
52
|
+
self.logger.warning(f"Security check failed: {e} - blocking publishing")
|
|
53
|
+
self.console.print("[red]🔒 SECURITY CHECK FAILED...")
|
|
54
|
+
return False
|
|
55
|
+
# ... 40+ more lines of duplicated logic
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### After (Clean Extraction)
|
|
59
|
+
```python
|
|
60
|
+
# In both methods
|
|
61
|
+
publishing_requested, security_blocks = self._check_security_gates_for_publishing(options)
|
|
62
|
+
|
|
63
|
+
if publishing_requested and security_blocks:
|
|
64
|
+
return await self._handle_security_gate_failure(options, allow_ai_fixing=True/False)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Security Preservation
|
|
68
|
+
**Critical**: All security hardening work by the security-auditor has been preserved:
|
|
69
|
+
|
|
70
|
+
- ✅ Security gate blocking logic intact
|
|
71
|
+
- ✅ AI fixing security re-validation preserved
|
|
72
|
+
- ✅ Fail-secure exception handling maintained
|
|
73
|
+
- ✅ Security audit reporting unchanged
|
|
74
|
+
- ✅ OWASP compliance patterns preserved
|
|
75
|
+
|
|
76
|
+
## Quality Improvements
|
|
77
|
+
|
|
78
|
+
### Code Quality Metrics
|
|
79
|
+
- **Lines Reduced**: ~40 lines of duplication eliminated
|
|
80
|
+
- **Complexity**: All methods now ≤15 complexity (meets project standards)
|
|
81
|
+
- **Maintainability**: Single points of change for security logic
|
|
82
|
+
- **Readability**: Clear method names describe intent
|
|
83
|
+
|
|
84
|
+
### Testing Results
|
|
85
|
+
- ✅ Fast hooks: 12/12 passing
|
|
86
|
+
- ✅ Complexity checks: All passing (complexipy)
|
|
87
|
+
- ✅ Basic workflow functionality: Working correctly
|
|
88
|
+
- ✅ Command-line interface: All features operational
|
|
89
|
+
|
|
90
|
+
## Method Responsibilities
|
|
91
|
+
|
|
92
|
+
### Core Workflow Methods (Simplified)
|
|
93
|
+
- `_handle_ai_agent_workflow()`: Orchestrates AI workflow with security checks
|
|
94
|
+
- `_handle_standard_workflow()`: Orchestrates standard workflow with security checks
|
|
95
|
+
|
|
96
|
+
### Helper Methods (New)
|
|
97
|
+
- `_check_security_gates_for_publishing()`: Security gate checking logic
|
|
98
|
+
- `_handle_security_gate_failure()`: Security failure handling (with/without AI)
|
|
99
|
+
- `_determine_ai_fixing_needed()`: AI fixing trigger logic
|
|
100
|
+
- `_determine_workflow_success()`: Success criteria determination
|
|
101
|
+
- `_show_verbose_failure_details()`: Failure detail reporting
|
|
102
|
+
|
|
103
|
+
## Benefits Achieved
|
|
104
|
+
|
|
105
|
+
1. **DRY Compliance**: No duplicated security logic
|
|
106
|
+
2. **Single Responsibility**: Each method has one clear purpose
|
|
107
|
+
3. **Easier Maintenance**: Security logic changes in one place
|
|
108
|
+
4. **Better Testability**: Helper methods can be tested independently
|
|
109
|
+
5. **Improved Readability**: Intent clear from method names
|
|
110
|
+
6. **Preserved Security**: All hardening work intact
|
|
111
|
+
|
|
112
|
+
## Verification
|
|
113
|
+
|
|
114
|
+
The refactoring has been verified through:
|
|
115
|
+
- ✅ Command-line functionality testing
|
|
116
|
+
- ✅ Hook execution testing (fast hooks 12/12 passing)
|
|
117
|
+
- ✅ Complexity analysis (all methods ≤15)
|
|
118
|
+
- ✅ Code structure verification
|
|
119
|
+
- ✅ Security logic preservation check
|
|
120
|
+
|
|
121
|
+
## Conclusion
|
|
122
|
+
|
|
123
|
+
This refactoring successfully eliminates code duplication while maintaining all security implementations, resulting in cleaner, more maintainable code that follows the project's clean code philosophy.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Security Audit Report: Critical Vulnerability Fixed
|
|
2
|
+
|
|
3
|
+
## Executive Summary
|
|
4
|
+
|
|
5
|
+
**RESOLVED**: Critical security vulnerability in publishing workflow that allowed vulnerable code to reach production systems.
|
|
6
|
+
|
|
7
|
+
**Fix**: Implemented mandatory security gates that cannot be bypassed, following OWASP secure SDLC principles.
|
|
8
|
+
|
|
9
|
+
## Vulnerability Details
|
|
10
|
+
|
|
11
|
+
### **Original Issue**
|
|
12
|
+
The workflow orchestrator was using `testing_passed OR comprehensive_passed` logic for publishing decisions, allowing security-critical checks to be bypassed if tests happened to pass.
|
|
13
|
+
|
|
14
|
+
```python
|
|
15
|
+
# VULNERABLE CODE (now fixed)
|
|
16
|
+
success = testing_passed or comprehensive_passed # Could bypass security scans
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### **Attack Scenarios Prevented**
|
|
20
|
+
1. **Secrets in Code**: `gitleaks` detects hardcoded API keys, but if tests pass, code could still be published
|
|
21
|
+
2. **SQL Injection**: `bandit` finds security vulnerabilities, but bypass logic allowed publishing
|
|
22
|
+
3. **Type Safety**: `pyright` prevents runtime security holes, but could be bypassed
|
|
23
|
+
|
|
24
|
+
## Security Implementation
|
|
25
|
+
|
|
26
|
+
### **1. Security Classification System**
|
|
27
|
+
Added `SecurityLevel` enum to classify all hooks by security impact:
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
class SecurityLevel(Enum):
|
|
31
|
+
CRITICAL = "critical" # Cannot be bypassed (bandit, pyright, gitleaks)
|
|
32
|
+
HIGH = "high" # Important with warnings (regex validation, deps)
|
|
33
|
+
MEDIUM = "medium" # Standard checks, bypassable
|
|
34
|
+
LOW = "low" # Formatting, always bypassable
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### **2. Mandatory Security Gates**
|
|
38
|
+
Implemented **defense-in-depth** security checking:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
# SECURE CODE (new implementation)
|
|
42
|
+
security_blocks_publishing = self._check_security_critical_failures()
|
|
43
|
+
|
|
44
|
+
if security_blocks_publishing:
|
|
45
|
+
# Security-critical failures CANNOT be bypassed
|
|
46
|
+
self.console.print(
|
|
47
|
+
"[red]🔒 SECURITY GATE: Critical security checks failed - publishing BLOCKED[/red]"
|
|
48
|
+
)
|
|
49
|
+
return False
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### **3. Security-Critical Hooks**
|
|
53
|
+
These hooks **CANNOT** be bypassed for publishing:
|
|
54
|
+
|
|
55
|
+
- **`bandit`**: Security vulnerability scanning (OWASP A09 - Security Logging)
|
|
56
|
+
- **`pyright`**: Type safety prevents runtime holes (OWASP A04 - Insecure Design)
|
|
57
|
+
- **`gitleaks`**: Secret/credential detection (OWASP A07 - Authentication Failures)
|
|
58
|
+
|
|
59
|
+
### **4. Fail-Safe Design**
|
|
60
|
+
Following security best practices:
|
|
61
|
+
|
|
62
|
+
- **Default to blocking** when security status is uncertain
|
|
63
|
+
- **Explicit security audit** for partial success scenarios
|
|
64
|
+
- **Detailed logging** for security decisions
|
|
65
|
+
- **OWASP references** in all security messaging
|
|
66
|
+
|
|
67
|
+
### **5. Security Audit Reports**
|
|
68
|
+
Comprehensive security reporting:
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
@dataclass
|
|
72
|
+
class SecurityAuditReport:
|
|
73
|
+
critical_failures: list[SecurityCheckResult]
|
|
74
|
+
allows_publishing: bool
|
|
75
|
+
security_warnings: list[str]
|
|
76
|
+
recommendations: list[str]
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Architecture Changes
|
|
80
|
+
|
|
81
|
+
### **New Files**
|
|
82
|
+
- `/crackerjack/security/__init__.py` - Security utilities package
|
|
83
|
+
- `/crackerjack/security/audit.py` - Security auditor with OWASP compliance
|
|
84
|
+
- `/SECURITY-AUDIT.md` - This documentation
|
|
85
|
+
|
|
86
|
+
### **Modified Files**
|
|
87
|
+
- `/crackerjack/config/hooks.py` - Added security levels to all hooks
|
|
88
|
+
- `/crackerjack/models/protocols.py` - Added `SecurityAwareHookManager` protocol
|
|
89
|
+
- `/crackerjack/core/workflow_orchestrator.py` - Implemented security gates
|
|
90
|
+
|
|
91
|
+
## Security Testing
|
|
92
|
+
|
|
93
|
+
### **Test Cases Added**
|
|
94
|
+
1. **Critical Security Failure**: Bandit fails → Publishing blocked
|
|
95
|
+
2. **Secret Detection**: Gitleaks fails → Publishing blocked
|
|
96
|
+
3. **Type Safety**: Pyright fails → Publishing blocked
|
|
97
|
+
4. **Partial Success**: Tests pass, non-critical hooks fail → Publishing allowed with audit
|
|
98
|
+
5. **All Pass**: All checks pass → Publishing allowed
|
|
99
|
+
6. **Fail-Safe**: Security status unknown → Publishing blocked
|
|
100
|
+
|
|
101
|
+
### **Verification Commands**
|
|
102
|
+
```bash
|
|
103
|
+
# Test security gates
|
|
104
|
+
python -m crackerjack --publish patch # Should block if security issues exist
|
|
105
|
+
|
|
106
|
+
# View security audit
|
|
107
|
+
python -m crackerjack -t --verbose # Shows detailed security status
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## OWASP Compliance
|
|
111
|
+
|
|
112
|
+
This implementation addresses multiple OWASP Top 10 categories:
|
|
113
|
+
|
|
114
|
+
- **A04:2021 - Insecure Design**: Mandatory security controls in SDLC
|
|
115
|
+
- **A07:2021 - Authentication Failures**: Mandatory secret detection
|
|
116
|
+
- **A09:2021 - Security Logging**: Comprehensive security audit trails
|
|
117
|
+
|
|
118
|
+
## Security Configuration
|
|
119
|
+
|
|
120
|
+
### **Security-Critical Hooks** (Cannot be bypassed)
|
|
121
|
+
```yaml
|
|
122
|
+
bandit: # Security vulnerability detection
|
|
123
|
+
security_level: CRITICAL
|
|
124
|
+
pyright: # Type safety for security
|
|
125
|
+
security_level: CRITICAL
|
|
126
|
+
gitleaks: # Secret detection
|
|
127
|
+
security_level: CRITICAL
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### **High-Security Hooks** (Bypassable with warnings)
|
|
131
|
+
```yaml
|
|
132
|
+
validate-regex-patterns: # Regex vulnerabilities
|
|
133
|
+
security_level: HIGH
|
|
134
|
+
creosote: # Dependency analysis
|
|
135
|
+
security_level: HIGH
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Monitoring & Alerting
|
|
139
|
+
|
|
140
|
+
### **Security Metrics**
|
|
141
|
+
- Count of security-critical failures
|
|
142
|
+
- Publishing blocks due to security
|
|
143
|
+
- Security bypass attempts (should be zero)
|
|
144
|
+
|
|
145
|
+
### **Audit Trail**
|
|
146
|
+
All security decisions are logged with:
|
|
147
|
+
- Hook names and security levels
|
|
148
|
+
- Publishing decisions and reasoning
|
|
149
|
+
- Failed security checks with details
|
|
150
|
+
- OWASP category references
|
|
151
|
+
|
|
152
|
+
## Conclusion
|
|
153
|
+
|
|
154
|
+
The security vulnerability has been **completely resolved** with a defense-in-depth approach:
|
|
155
|
+
|
|
156
|
+
✅ **Mandatory Security Gates**: Critical security checks cannot be bypassed
|
|
157
|
+
✅ **Fail-Safe Design**: Default to blocking when uncertain
|
|
158
|
+
✅ **OWASP Compliance**: Follows secure SDLC best practices
|
|
159
|
+
✅ **Comprehensive Audit**: Detailed security reporting
|
|
160
|
+
✅ **Production Ready**: Extensively tested security logic
|
|
161
|
+
|
|
162
|
+
The workflow now ensures that **no vulnerable code can reach production** while maintaining development workflow flexibility for non-security issues.
|
|
@@ -89,11 +89,14 @@ __pycache__/
|
|
|
89
89
|
/dist/
|
|
90
90
|
/error-context.json
|
|
91
91
|
/examples/
|
|
92
|
+
/feature-implementation-*.md
|
|
92
93
|
/hooks-analysis.json
|
|
93
94
|
/htmlcov/
|
|
94
95
|
/project-structure.json
|
|
95
96
|
/quality-metrics.json
|
|
96
97
|
/scratch/
|
|
98
|
+
/session_handoff_*.md
|
|
99
|
+
/test-implementation-*.md
|
|
97
100
|
/test-results.xml
|
|
98
101
|
/tests/.benchmarks/
|
|
99
102
|
/tests/htmlcov/
|
|
@@ -3,7 +3,7 @@ repos:
|
|
|
3
3
|
hooks:
|
|
4
4
|
- id: validate-regex-patterns
|
|
5
5
|
name: validate-regex-patterns
|
|
6
|
-
entry: uv run python
|
|
6
|
+
entry: uv run python -m crackerjack.tools.validate_regex_patterns
|
|
7
7
|
language: system
|
|
8
8
|
files: \.py$
|
|
9
9
|
exclude: ^\.venv/
|