claude-mpm 4.16.0__py3-none-any.whl → 4.25.10__py3-none-any.whl
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 claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_ENGINEER.md +286 -0
- claude_mpm/agents/BASE_PM.md +272 -23
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +1821 -32
- claude_mpm/agents/WORKFLOW.md +75 -2
- claude_mpm/agents/agent_loader.py +4 -4
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/frontmatter_validator.py +1 -1
- claude_mpm/agents/templates/api_qa.json +5 -2
- claude_mpm/agents/templates/circuit_breakers.md +108 -2
- claude_mpm/agents/templates/documentation.json +33 -6
- claude_mpm/agents/templates/engineer.json +5 -1
- claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
- claude_mpm/agents/templates/php-engineer.json +10 -4
- claude_mpm/agents/templates/pm_red_flags.md +89 -19
- claude_mpm/agents/templates/project_organizer.json +7 -3
- claude_mpm/agents/templates/python_engineer.json +8 -3
- claude_mpm/agents/templates/qa.json +2 -1
- claude_mpm/agents/templates/react_engineer.json +1 -0
- claude_mpm/agents/templates/research.json +82 -12
- claude_mpm/agents/templates/rust_engineer.json +12 -7
- claude_mpm/agents/templates/security.json +4 -4
- claude_mpm/agents/templates/svelte-engineer.json +225 -0
- claude_mpm/agents/templates/tauri_engineer.json +274 -0
- claude_mpm/agents/templates/ticketing.json +10 -6
- claude_mpm/agents/templates/version_control.json +4 -2
- claude_mpm/agents/templates/web_qa.json +2 -1
- claude_mpm/cli/README.md +253 -0
- claude_mpm/cli/__init__.py +11 -1
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/aggregate.py +1 -1
- claude_mpm/cli/commands/analyze.py +3 -3
- claude_mpm/cli/commands/cleanup.py +1 -1
- claude_mpm/cli/commands/configure_agent_display.py +4 -4
- claude_mpm/cli/commands/debug.py +12 -12
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/mcp_install_commands.py +1 -1
- claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
- claude_mpm/cli/commands/mpm_init/README.md +365 -0
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +573 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +67 -1
- claude_mpm/cli/commands/run.py +124 -128
- claude_mpm/cli/commands/skills.py +922 -0
- claude_mpm/cli/executor.py +58 -0
- claude_mpm/cli/interactive/agent_wizard.py +5 -5
- claude_mpm/cli/parsers/base_parser.py +35 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
- claude_mpm/cli/parsers/skills_parser.py +275 -0
- claude_mpm/cli/startup.py +168 -8
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/utils.py +1 -1
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/cli_module/refactoring_guide.md +253 -0
- claude_mpm/commands/mpm-auto-configure.md +52 -0
- claude_mpm/commands/mpm-help.md +6 -0
- claude_mpm/commands/mpm-init.md +130 -8
- claude_mpm/commands/mpm-resume.md +372 -0
- claude_mpm/commands/mpm-tickets.md +56 -7
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +2 -0
- claude_mpm/config/agent_capabilities.yaml +658 -0
- claude_mpm/config/agent_config.py +2 -2
- claude_mpm/config/async_logging_config.yaml +145 -0
- claude_mpm/constants.py +24 -0
- claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +14 -1
- claude_mpm/core/config.py +50 -0
- claude_mpm/core/constants.py +1 -1
- claude_mpm/core/factories.py +1 -1
- claude_mpm/core/framework/processors/metadata_processor.py +1 -1
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +41 -2
- claude_mpm/core/interactive_session.py +48 -3
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +39 -0
- claude_mpm/core/optimized_agent_loader.py +3 -3
- claude_mpm/d2/.gitignore +22 -0
- claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
- claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
- claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
- claude_mpm/d2/QUICKSTART.md +186 -0
- claude_mpm/d2/README.md +232 -0
- claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
- claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
- claude_mpm/d2/TESTING.md +288 -0
- claude_mpm/d2/index.html +118 -0
- claude_mpm/d2/package.json +19 -0
- claude_mpm/d2/src/App.svelte +110 -0
- claude_mpm/d2/src/components/Header.svelte +153 -0
- claude_mpm/d2/src/components/MainContent.svelte +74 -0
- claude_mpm/d2/src/components/Sidebar.svelte +85 -0
- claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
- claude_mpm/d2/src/lib/socketio.js +144 -0
- claude_mpm/d2/src/main.js +7 -0
- claude_mpm/d2/src/stores/events.js +114 -0
- claude_mpm/d2/src/stores/socket.js +108 -0
- claude_mpm/d2/src/stores/theme.js +65 -0
- claude_mpm/d2/svelte.config.js +12 -0
- claude_mpm/d2/vite.config.js +15 -0
- claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
- claude_mpm/dashboard/BUILD_NUMBER +1 -0
- claude_mpm/dashboard/README.md +121 -0
- claude_mpm/dashboard/VERSION +1 -0
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
- claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
- claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
- claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
- claude_mpm/dashboard/react/entries/events.tsx +165 -0
- claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
- claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
- claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
- claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
- claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
- claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
- claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
- claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
- claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
- claude_mpm/dashboard/static/built/connection-manager.js +76 -76
- claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
- claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/built/react/events.js.map +1 -0
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
- claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
- claude_mpm/dashboard/static/built/shared/logger.js +16 -16
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
- claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
- claude_mpm/dashboard/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +15 -15
- claude_mpm/dashboard/static/index.html +22 -22
- claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
- claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
- claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
- claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
- claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
- claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +76 -58
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
- claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
- claude_mpm/dashboard/static/js/shared/logger.js +16 -16
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
- claude_mpm/dashboard/static/js/socket-client.js +138 -121
- claude_mpm/dashboard/static/navigation-test-results.md +118 -0
- claude_mpm/dashboard/static/production/main.html +21 -21
- claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
- claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
- claude_mpm/dashboard/templates/code_simple.html +23 -23
- claude_mpm/dashboard/templates/index.html +18 -18
- claude_mpm/hooks/README.md +143 -0
- claude_mpm/hooks/__init__.py +8 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
- claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
- claude_mpm/hooks/claude_hooks/installer.py +45 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
- claude_mpm/hooks/session_resume_hook.py +121 -0
- claude_mpm/hooks/templates/README.md +180 -0
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/hooks/templates/settings.json.example +147 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/schemas/agent_schema.json +596 -0
- claude_mpm/schemas/frontmatter_schema.json +165 -0
- claude_mpm/scripts/claude-hook-handler.sh +3 -3
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/agents/auto_config_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
- claude_mpm/services/agents/deployment/agent_validator.py +17 -1
- claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
- claude_mpm/services/agents/local_template_manager.py +4 -2
- claude_mpm/services/agents/recommender.py +47 -0
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +87 -0
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +372 -0
- claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
- claude_mpm/services/core/base.py +26 -11
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/models/agent_config.py +3 -0
- claude_mpm/services/core/models/process.py +4 -0
- claude_mpm/services/core/path_resolver.py +1 -1
- claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
- claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
- claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
- claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
- claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
- claude_mpm/services/diagnostics/models.py +21 -0
- claude_mpm/services/event_bus/README.md +244 -0
- claude_mpm/services/event_bus/direct_relay.py +3 -3
- claude_mpm/services/event_bus/event_bus.py +36 -3
- claude_mpm/services/event_bus/relay.py +23 -7
- claude_mpm/services/events/README.md +303 -0
- claude_mpm/services/events/consumers/logging.py +1 -2
- claude_mpm/services/framework_claude_md_generator/README.md +119 -0
- claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/local_ops/__init__.py +2 -0
- claude_mpm/services/local_ops/process_manager.py +1 -1
- claude_mpm/services/local_ops/resource_monitor.py +2 -2
- claude_mpm/services/mcp_config_manager.py +7 -131
- claude_mpm/services/mcp_gateway/README.md +185 -0
- claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
- claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
- claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
- claude_mpm/services/memory/failure_tracker.py +19 -4
- claude_mpm/services/memory/optimizer.py +1 -1
- claude_mpm/services/model/model_router.py +8 -9
- claude_mpm/services/monitor/daemon.py +1 -1
- claude_mpm/services/monitor/server.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/port_manager.py +1 -1
- claude_mpm/services/project/documentation_manager.py +2 -1
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +1 -0
- claude_mpm/services/self_upgrade_service.py +165 -7
- claude_mpm/services/session_manager.py +205 -1
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- claude_mpm/services/socketio/handlers/connection.py +1 -1
- claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
- claude_mpm/services/socketio/handlers/git.py +2 -2
- claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
- claude_mpm/services/static/.gitkeep +2 -0
- claude_mpm/services/system_instructions_service.py +1 -3
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
- claude_mpm/services/unified/deployment_strategies/local.py +1 -1
- claude_mpm/services/version_control/VERSION +1 -0
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +21 -0
- claude_mpm/skills/agent_skills_injector.py +324 -0
- claude_mpm/skills/bundled/.gitkeep +2 -0
- claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
- claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +573 -0
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +97 -9
- claude_mpm/skills/skills_registry.py +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/templates/questions/EXAMPLES.md +501 -0
- claude_mpm/templates/questions/__init__.py +43 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +314 -0
- claude_mpm/templates/questions/project_init.py +388 -0
- claude_mpm/templates/questions/ticket_mgmt.py +397 -0
- claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
- claude_mpm/tools/__main__.py +8 -8
- claude_mpm/tools/code_tree_analyzer/README.md +64 -0
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/utils/agent_dependency_loader.py +5 -5
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- claude_mpm/utils/robust_installer.py +3 -5
- claude_mpm/utils/structured_questions.py +619 -0
- claude_mpm-4.25.10.dist-info/METADATA +789 -0
- {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +485 -240
- claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
- claude_mpm/cli/commands/mpm_init.py +0 -2008
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
- claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
- claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
- claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
- claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
- claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
- claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/react/events.js +0 -30
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
- claude_mpm/tools/code_tree_analyzer.py +0 -1825
- claude_mpm-4.16.0.dist-info/METADATA +0 -453
- {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
- {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
# Test Quality Red Flags
|
|
2
|
+
|
|
3
|
+
## Immediate Red Flags (Block Merge)
|
|
4
|
+
|
|
5
|
+
### 🚩 Category 1: Worthless Assertions
|
|
6
|
+
|
|
7
|
+
#### Red Flag: "assert result"
|
|
8
|
+
```python
|
|
9
|
+
def test_get_user():
|
|
10
|
+
result = get_user(1)
|
|
11
|
+
assert result # Passes unless None/False!
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
**Why Bad:** Passes with ANY truthy value, including garbage data.
|
|
15
|
+
|
|
16
|
+
**Impact:** Won't catch most bugs.
|
|
17
|
+
|
|
18
|
+
**Action:** Require specific value assertions.
|
|
19
|
+
|
|
20
|
+
#### Red Flag: "assert not None"
|
|
21
|
+
```python
|
|
22
|
+
def test_create_user():
|
|
23
|
+
user = create_user("test@example.com")
|
|
24
|
+
assert user is not None # Only checks existence!
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Why Bad:** Verifies object exists, not that it's correct.
|
|
28
|
+
|
|
29
|
+
**Impact:** Corrupt data still passes.
|
|
30
|
+
|
|
31
|
+
**Action:** Verify actual properties.
|
|
32
|
+
|
|
33
|
+
### 🚩 Category 2: Testing Mocks
|
|
34
|
+
|
|
35
|
+
#### Red Flag: Mocking System Under Test
|
|
36
|
+
```python
|
|
37
|
+
def test_user_service():
|
|
38
|
+
mock_service = Mock(UserService)
|
|
39
|
+
mock_service.create.return_value = User()
|
|
40
|
+
result = mock_service.create("test") # Testing mock!
|
|
41
|
+
assert result
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Why Bad:** Tests mock behavior, not real service.
|
|
45
|
+
|
|
46
|
+
**Impact:** Real service could be broken.
|
|
47
|
+
|
|
48
|
+
**Action:** Test real service with test dependencies.
|
|
49
|
+
|
|
50
|
+
#### Red Flag: Asserting on Mocks
|
|
51
|
+
```python
|
|
52
|
+
def test_send_notification():
|
|
53
|
+
mock_mailer = Mock()
|
|
54
|
+
send_notification(mock_mailer, "Hello")
|
|
55
|
+
assert mock_mailer.send.called # Asserting mock!
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Why Bad:** Mock always does what you tell it.
|
|
59
|
+
|
|
60
|
+
**Impact:** Real mailer might not work.
|
|
61
|
+
|
|
62
|
+
**Action:** Use test SMTP or capture real emails.
|
|
63
|
+
|
|
64
|
+
### 🚩 Category 3: Missing Negative Tests
|
|
65
|
+
|
|
66
|
+
#### Red Flag: Only Happy Path
|
|
67
|
+
```python
|
|
68
|
+
# Only this test exists:
|
|
69
|
+
def test_login_succeeds():
|
|
70
|
+
result = login("user", "pass")
|
|
71
|
+
assert result.success
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Missing:**
|
|
75
|
+
- Wrong password test
|
|
76
|
+
- Locked account test
|
|
77
|
+
- Non-existent user test
|
|
78
|
+
- Empty password test
|
|
79
|
+
|
|
80
|
+
**Impact:** Failures not caught until production.
|
|
81
|
+
|
|
82
|
+
**Action:** Require failure test for each success test.
|
|
83
|
+
|
|
84
|
+
### 🚩 Category 4: Vague Test Names
|
|
85
|
+
|
|
86
|
+
#### Red Flag: Method Names as Test Names
|
|
87
|
+
```python
|
|
88
|
+
def test_create_user(): # Too vague!
|
|
89
|
+
def test_login(): # What about login?
|
|
90
|
+
def test_validate(): # Validate what?
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Why Bad:** Doesn't describe expected behavior.
|
|
94
|
+
|
|
95
|
+
**Impact:** Hard to know what failed.
|
|
96
|
+
|
|
97
|
+
**Action:** Names must describe behavior:
|
|
98
|
+
- `test_create_user_with_valid_email_persists_to_database`
|
|
99
|
+
- `test_login_with_wrong_password_raises_authentication_error`
|
|
100
|
+
|
|
101
|
+
### 🚩 Category 5: False Positives
|
|
102
|
+
|
|
103
|
+
#### Red Flag: Test Passes with Broken Code
|
|
104
|
+
```python
|
|
105
|
+
def test_data_processing():
|
|
106
|
+
process_data([1, 2, 3])
|
|
107
|
+
assert True # Always passes!
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Mental Debug:** Comment out `process_data` - test still passes!
|
|
111
|
+
|
|
112
|
+
**Why Bad:** Provides zero protection.
|
|
113
|
+
|
|
114
|
+
**Impact:** Bugs slip through.
|
|
115
|
+
|
|
116
|
+
**Action:** Remove test or fix assertions.
|
|
117
|
+
|
|
118
|
+
## Warning Red Flags (Request Changes)
|
|
119
|
+
|
|
120
|
+
### ⚠️ Missing Edge Cases
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
def test_divide():
|
|
124
|
+
assert divide(10, 2) == 5
|
|
125
|
+
# Missing: divide by zero, negative numbers, floats
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Action:** Add boundary condition tests.
|
|
129
|
+
|
|
130
|
+
### ⚠️ Incomplete Mocks
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
mock_db = Mock()
|
|
134
|
+
mock_db.query.return_value = [User()]
|
|
135
|
+
# Missing: error cases, empty results, timeouts
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Action:** Mock all realistic scenarios.
|
|
139
|
+
|
|
140
|
+
### ⚠️ Weak Error Assertions
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
try:
|
|
144
|
+
dangerous_operation()
|
|
145
|
+
except Exception: # Too broad!
|
|
146
|
+
pass
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Action:** Assert specific exception type and message.
|
|
150
|
+
|
|
151
|
+
### ⚠️ No Teardown/Cleanup
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
def test_file_creation():
|
|
155
|
+
create_file("/tmp/test.txt")
|
|
156
|
+
# File left behind!
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Action:** Add cleanup or use fixtures.
|
|
160
|
+
|
|
161
|
+
### ⚠️ Test Interdependence
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
def test_a():
|
|
165
|
+
global state
|
|
166
|
+
state = "configured"
|
|
167
|
+
|
|
168
|
+
def test_b():
|
|
169
|
+
# Depends on test_a running first!
|
|
170
|
+
assert state == "configured"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Action:** Make tests independent.
|
|
174
|
+
|
|
175
|
+
## Red Flag Detection Checklist
|
|
176
|
+
|
|
177
|
+
### Quick Scan (30 seconds)
|
|
178
|
+
```
|
|
179
|
+
[ ] Assertions are specific (not just "assert x")
|
|
180
|
+
[ ] Test name describes behavior
|
|
181
|
+
[ ] No mocking of system under test
|
|
182
|
+
[ ] Negative test cases exist
|
|
183
|
+
[ ] Would fail if feature removed
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Deep Inspection (2 minutes)
|
|
187
|
+
```
|
|
188
|
+
[ ] Edge cases covered
|
|
189
|
+
[ ] Error messages meaningful
|
|
190
|
+
[ ] Setup is realistic
|
|
191
|
+
[ ] Teardown present
|
|
192
|
+
[ ] Tests are independent
|
|
193
|
+
[ ] Mocks are justified
|
|
194
|
+
[ ] All paths tested
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Red Flag Severity Matrix
|
|
198
|
+
|
|
199
|
+
### 🔴 CRITICAL (Block immediately)
|
|
200
|
+
- Testing mock behavior
|
|
201
|
+
- Always-passing tests
|
|
202
|
+
- No assertions at all
|
|
203
|
+
- Mocking system under test
|
|
204
|
+
|
|
205
|
+
### 🟠 HIGH (Strong recommend blocking)
|
|
206
|
+
- Only "assert not None"
|
|
207
|
+
- No negative tests
|
|
208
|
+
- Vague test names
|
|
209
|
+
- Would pass with broken code
|
|
210
|
+
|
|
211
|
+
### 🟡 MEDIUM (Request improvements)
|
|
212
|
+
- Missing edge cases
|
|
213
|
+
- Weak error handling tests
|
|
214
|
+
- Incomplete scenarios
|
|
215
|
+
- Poor test organization
|
|
216
|
+
|
|
217
|
+
### 🟢 LOW (Notes for improvement)
|
|
218
|
+
- Could be more descriptive
|
|
219
|
+
- Additional tests would help
|
|
220
|
+
- Minor refactoring suggestions
|
|
221
|
+
- Documentation improvements
|
|
222
|
+
|
|
223
|
+
## Common Patterns of Problematic Tests
|
|
224
|
+
|
|
225
|
+
### Pattern 1: The Optimist
|
|
226
|
+
```python
|
|
227
|
+
# Only tests that things work
|
|
228
|
+
def test_happy_path_1(): ...
|
|
229
|
+
def test_happy_path_2(): ...
|
|
230
|
+
# No sad path tests!
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**Red Flag:** No tests for failures, errors, or edge cases.
|
|
234
|
+
|
|
235
|
+
### Pattern 2: The Mock Enthusiast
|
|
236
|
+
```python
|
|
237
|
+
# Everything is mocked
|
|
238
|
+
mock_service = Mock()
|
|
239
|
+
mock_repo = Mock()
|
|
240
|
+
mock_validator = Mock()
|
|
241
|
+
# Nothing real is tested!
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Red Flag:** Over-mocking hides real integration issues.
|
|
245
|
+
|
|
246
|
+
### Pattern 3: The Existence Checker
|
|
247
|
+
```python
|
|
248
|
+
# Just checks things exist
|
|
249
|
+
assert user
|
|
250
|
+
assert response
|
|
251
|
+
assert result is not None
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Red Flag:** Verifies existence, not correctness.
|
|
255
|
+
|
|
256
|
+
### Pattern 4: The False Friend
|
|
257
|
+
```python
|
|
258
|
+
# Test that can't fail
|
|
259
|
+
def test_always_passes():
|
|
260
|
+
do_something()
|
|
261
|
+
assert True # Will never fail!
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Red Flag:** Gives false confidence.
|
|
265
|
+
|
|
266
|
+
### Pattern 5: The Mysterious Failure
|
|
267
|
+
```python
|
|
268
|
+
# Unhelpful when it fails
|
|
269
|
+
assert process_data(input) == process_data(expected)
|
|
270
|
+
# Which step failed? No idea!
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Red Flag:** Can't debug from failure message.
|
|
274
|
+
|
|
275
|
+
## Detection Techniques
|
|
276
|
+
|
|
277
|
+
### Technique 1: Mental Debugging
|
|
278
|
+
```
|
|
279
|
+
For each test, mentally:
|
|
280
|
+
1. Comment out core functionality
|
|
281
|
+
2. Would test fail?
|
|
282
|
+
3. If NO: Test is broken
|
|
283
|
+
|
|
284
|
+
Example:
|
|
285
|
+
def test_save_user():
|
|
286
|
+
user = User("test")
|
|
287
|
+
# save_user(user) # Commented out
|
|
288
|
+
assert user # Still passes! RED FLAG
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Technique 2: Garbage Data Test
|
|
292
|
+
```
|
|
293
|
+
For each test, mentally:
|
|
294
|
+
1. Return garbage data
|
|
295
|
+
2. Would assertions catch it?
|
|
296
|
+
3. If NO: Assertions are weak
|
|
297
|
+
|
|
298
|
+
Example:
|
|
299
|
+
def test_get_user():
|
|
300
|
+
user = get_user(1) # Returns {"garbage": true}
|
|
301
|
+
assert user # Passes with garbage! RED FLAG
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Technique 3: Wrong Type Test
|
|
305
|
+
```
|
|
306
|
+
For each test, mentally:
|
|
307
|
+
1. Return wrong type
|
|
308
|
+
2. Would test fail?
|
|
309
|
+
3. If NO: Type checking missing
|
|
310
|
+
|
|
311
|
+
Example:
|
|
312
|
+
def test_calculate():
|
|
313
|
+
result = calculate(5, 3) # Returns "8" (string!)
|
|
314
|
+
assert result # Passes with wrong type! RED FLAG
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Technique 4: Empty Result Test
|
|
318
|
+
```
|
|
319
|
+
For each test, mentally:
|
|
320
|
+
1. Return empty/zero/None
|
|
321
|
+
2. Should this be valid?
|
|
322
|
+
3. Is there a test for it?
|
|
323
|
+
|
|
324
|
+
Example:
|
|
325
|
+
def test_get_users():
|
|
326
|
+
users = get_all_users() # Returns []
|
|
327
|
+
assert users # Fails! But is empty valid? UNCLEAR
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Automated Red Flag Checkers
|
|
331
|
+
|
|
332
|
+
### Check 1: Weak Assertion Detector
|
|
333
|
+
```python
|
|
334
|
+
# Scan test file for:
|
|
335
|
+
grep -r "assert result$" tests/
|
|
336
|
+
grep -r "assert.*is not None" tests/
|
|
337
|
+
grep -r "assert True" tests/
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Check 2: Mock Overuse Detector
|
|
341
|
+
```python
|
|
342
|
+
# Count mocks per test:
|
|
343
|
+
if mock_count > real_object_count:
|
|
344
|
+
FLAG as "Over-mocking"
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Check 3: Missing Negative Test Detector
|
|
348
|
+
```python
|
|
349
|
+
# For each "test_*_succeeds":
|
|
350
|
+
if not exists("test_*_fails"):
|
|
351
|
+
FLAG as "Missing negative test"
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Check 4: Vague Name Detector
|
|
355
|
+
```python
|
|
356
|
+
# Flag patterns:
|
|
357
|
+
- test_method_name
|
|
358
|
+
- test_class
|
|
359
|
+
- test_works
|
|
360
|
+
- test_user (without verb)
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Response Templates
|
|
364
|
+
|
|
365
|
+
### Template 1: Weak Assertions
|
|
366
|
+
```markdown
|
|
367
|
+
**Issue:** Weak Assertions
|
|
368
|
+
|
|
369
|
+
This test uses weak assertions that would pass even with broken functionality:
|
|
370
|
+
- Line X: `assert user` - Only checks if truthy
|
|
371
|
+
- Line Y: `assert result is not None` - Only checks existence
|
|
372
|
+
|
|
373
|
+
**Impact:** High - Won't catch data corruption or logic errors
|
|
374
|
+
|
|
375
|
+
**Recommendation:**
|
|
376
|
+
Replace with specific assertions:
|
|
377
|
+
```python
|
|
378
|
+
assert user.email == "expected@example.com"
|
|
379
|
+
assert user.is_active is True
|
|
380
|
+
assert user.role == "user"
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
**Action Required:** Block until improved
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Template 2: Testing Mocks
|
|
387
|
+
```markdown
|
|
388
|
+
**Issue:** Testing Mock Behavior
|
|
389
|
+
|
|
390
|
+
This test verifies mock behavior instead of real functionality:
|
|
391
|
+
- Line X: Mocking the system under test
|
|
392
|
+
- Line Y: Asserting that mock was called
|
|
393
|
+
|
|
394
|
+
**Impact:** Critical - Real code could be completely broken
|
|
395
|
+
|
|
396
|
+
**Recommendation:**
|
|
397
|
+
Test real objects with test dependencies:
|
|
398
|
+
```python
|
|
399
|
+
# Use test database, not mocks
|
|
400
|
+
with test_database():
|
|
401
|
+
user = service.create_user("test@example.com")
|
|
402
|
+
assert user.id is not None
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
**Action Required:** Block merge - Must be rewritten
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Template 3: Missing Negative Tests
|
|
409
|
+
```markdown
|
|
410
|
+
**Issue:** Missing Failure Cases
|
|
411
|
+
|
|
412
|
+
Only happy path is tested. Missing tests for:
|
|
413
|
+
- Invalid input
|
|
414
|
+
- Error conditions
|
|
415
|
+
- Edge cases
|
|
416
|
+
- Boundary conditions
|
|
417
|
+
|
|
418
|
+
**Impact:** Medium-High - Failures won't be caught
|
|
419
|
+
|
|
420
|
+
**Recommendation:**
|
|
421
|
+
Add negative tests:
|
|
422
|
+
- `test_create_user_with_invalid_email_raises_error`
|
|
423
|
+
- `test_create_user_with_duplicate_email_raises_error`
|
|
424
|
+
- `test_create_user_with_missing_password_raises_error`
|
|
425
|
+
|
|
426
|
+
**Action Required:** Request changes before merge
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
## Remember
|
|
430
|
+
|
|
431
|
+
🚩 **If you see a red flag, stop and inspect closely.**
|
|
432
|
+
🚨 **Multiple red flags = immediate block.**
|
|
433
|
+
✅ **No red flags ≠ good test (but it's a start).**
|
|
434
|
+
🔍 **When in doubt, perform mental debugging.**
|
|
435
|
+
|
|
436
|
+
> "A red flag ignored today is a production bug tomorrow."
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Testing Anti-Patterns
|
|
3
|
+
description: Never test mock behavior. Never add test-only methods to production classes. Understand dependencies before mocking.
|
|
4
|
+
when_to_use: when writing or changing tests, adding mocks, or tempted to add test-only methods to production code
|
|
5
|
+
version: 2.0.0
|
|
6
|
+
progressive_disclosure:
|
|
7
|
+
entry_point:
|
|
8
|
+
summary: "Avoid testing mocks, test-only production methods, and incomplete mocking. Test real behavior, not mock behavior."
|
|
9
|
+
when_to_use: "When writing tests, adding mocks, reviewing test failures, or tempted to add test-only methods to production code."
|
|
10
|
+
quick_start: "1. Ask: 'Am I testing real behavior?' 2. Check: 'Is this method only for tests?' 3. Verify: 'Do I understand what I'm mocking?' 4. Confirm: 'Is my mock complete?' 5. Apply: TDD prevents these patterns"
|
|
11
|
+
references:
|
|
12
|
+
- core-anti-patterns.md
|
|
13
|
+
- completeness-anti-patterns.md
|
|
14
|
+
- detection-guide.md
|
|
15
|
+
- tdd-connection.md
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Testing Anti-Patterns
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
Tests must verify real behavior, not mock behavior. Mocks are a means to isolate, not the thing being tested.
|
|
23
|
+
|
|
24
|
+
**Core principle:** Test what the code does, not what the mocks do.
|
|
25
|
+
|
|
26
|
+
**Following strict TDD prevents these anti-patterns.** See [test-driven-development skill](../test-driven-development/) for the complete TDD workflow.
|
|
27
|
+
|
|
28
|
+
## When to Use This Skill
|
|
29
|
+
|
|
30
|
+
Activate this skill when you're:
|
|
31
|
+
- **Writing or changing tests** - Verify you're testing real behavior
|
|
32
|
+
- **Adding mocks** - Ensure mocking is necessary and correct
|
|
33
|
+
- **Reviewing test failures** - Check if mock behavior is the issue
|
|
34
|
+
- **Tempted to add test-only methods** - STOP and reconsider
|
|
35
|
+
- **Tests feel overly complex** - Sign of over-mocking
|
|
36
|
+
|
|
37
|
+
## The Iron Laws
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
1. NEVER test mock behavior
|
|
41
|
+
2. NEVER add test-only methods to production classes
|
|
42
|
+
3. NEVER mock without understanding dependencies
|
|
43
|
+
4. NEVER create incomplete mocks
|
|
44
|
+
5. NEVER treat tests as afterthought
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Core Anti-Pattern Categories
|
|
48
|
+
|
|
49
|
+
### 1. Testing Mock Behavior
|
|
50
|
+
Asserting on mock elements instead of real behavior. **Fix:** Test real component or don't mock it.
|
|
51
|
+
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-1-testing-mock-behavior)
|
|
52
|
+
|
|
53
|
+
### 2. Test-Only Methods in Production
|
|
54
|
+
Methods in production classes only used by tests. **Fix:** Move to test utilities.
|
|
55
|
+
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-2-test-only-methods-in-production)
|
|
56
|
+
|
|
57
|
+
### 3. Mocking Without Understanding
|
|
58
|
+
Mocking without understanding dependencies/side effects. **Fix:** Understand first, mock minimally.
|
|
59
|
+
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-3-mocking-without-understanding)
|
|
60
|
+
|
|
61
|
+
### 4. Incomplete Mocks
|
|
62
|
+
Partial mocks missing fields downstream code needs. **Fix:** Mirror complete API structure.
|
|
63
|
+
**→** [completeness-anti-patterns.md](references/completeness-anti-patterns.md#anti-pattern-4-incomplete-mocks)
|
|
64
|
+
|
|
65
|
+
### 5. Tests as Afterthought
|
|
66
|
+
Implementation "complete" without tests. **Fix:** TDD - write test first.
|
|
67
|
+
**→** [completeness-anti-patterns.md](references/completeness-anti-patterns.md#anti-pattern-5-integration-tests-as-afterthought)
|
|
68
|
+
|
|
69
|
+
## Quick Detection Checklist
|
|
70
|
+
|
|
71
|
+
Run this checklist before committing any test:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
□ Am I asserting on mock elements? (testId='*-mock')
|
|
75
|
+
→ If yes: STOP - Test real component or unmock
|
|
76
|
+
|
|
77
|
+
□ Does this method only exist for tests?
|
|
78
|
+
→ If yes: STOP - Move to test utilities
|
|
79
|
+
|
|
80
|
+
□ Do I fully understand what I'm mocking?
|
|
81
|
+
→ If no: STOP - Run with real impl first, then mock minimally
|
|
82
|
+
|
|
83
|
+
□ Is my mock missing fields the real API has?
|
|
84
|
+
→ If yes: STOP - Mirror complete API structure
|
|
85
|
+
|
|
86
|
+
□ Did I write implementation before test?
|
|
87
|
+
→ If yes: STOP - Delete impl, write test first (TDD)
|
|
88
|
+
|
|
89
|
+
□ Is mock setup >50% of test code?
|
|
90
|
+
→ If yes: Consider integration test with real components
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**See:** [detection-guide.md](references/detection-guide.md) for comprehensive red flags and warning signs.
|
|
94
|
+
|
|
95
|
+
## The Bottom Line
|
|
96
|
+
|
|
97
|
+
**Mocks are tools to isolate, not things to test.**
|
|
98
|
+
|
|
99
|
+
If you're testing mock behavior, you've gone wrong. Fix: Test real behavior or question why you're mocking at all.
|
|
100
|
+
|
|
101
|
+
**TDD prevents these patterns.** Write test first → Watch fail → Minimal implementation → Pass → Refactor.
|
|
102
|
+
|
|
103
|
+
## Navigation
|
|
104
|
+
|
|
105
|
+
### Detailed Anti-Pattern Analysis
|
|
106
|
+
- **[Core Anti-Patterns](references/core-anti-patterns.md)** - Patterns 1-3: Mock behavior, test-only methods, uninformed mocking
|
|
107
|
+
- **[Completeness Anti-Patterns](references/completeness-anti-patterns.md)** - Patterns 4-5: Incomplete mocks, tests as afterthought
|
|
108
|
+
|
|
109
|
+
### Detection & Prevention
|
|
110
|
+
- **[Detection Guide](references/detection-guide.md)** - Red flags, warning signs, gate functions
|
|
111
|
+
- **[TDD Connection](references/tdd-connection.md)** - How test-driven development prevents these patterns
|
|
112
|
+
|
|
113
|
+
### Related Skills
|
|
114
|
+
- **[test-driven-development](../test-driven-development/)** - Complete TDD workflow (prevents these patterns)
|
|
115
|
+
- **[verification-before-completion](../../../productivity/verification-before-completion/)** - Testing is part of "done"
|
|
116
|
+
|
|
117
|
+
## Key Reminders
|
|
118
|
+
|
|
119
|
+
1. **Mocks isolate, don't prove** - Test real code, not mocks
|
|
120
|
+
2. **Production ignores tests** - No test-only methods
|
|
121
|
+
3. **Understand before mocking** - Know dependencies and side effects
|
|
122
|
+
4. **Complete mocks only** - Mirror full API structure
|
|
123
|
+
5. **Tests ARE implementation** - Not optional afterthought
|
|
124
|
+
|
|
125
|
+
## Red Flags - STOP
|
|
126
|
+
|
|
127
|
+
**STOP immediately if you find yourself:**
|
|
128
|
+
- Asserting on `*-mock` test IDs
|
|
129
|
+
- Adding methods only called in test files
|
|
130
|
+
- Mocking "just to be safe" without understanding
|
|
131
|
+
- Creating mocks from memory instead of API docs
|
|
132
|
+
- Saying "tests can wait" or "ready for testing"
|
|
133
|
+
|
|
134
|
+
**When mocks become too complex:** Consider integration tests with real components. Often simpler and more valuable.
|
|
135
|
+
|
|
136
|
+
## Integration with Other Skills
|
|
137
|
+
|
|
138
|
+
**Prerequisite:** [test-driven-development](../test-driven-development/) - TDD prevents anti-patterns
|
|
139
|
+
**Complementary:** [verification-before-completion](../../../productivity/verification-before-completion/) - Tests = done
|
|
140
|
+
**Domain-specific:** webapp-testing, backend-testing for framework patterns
|