claude-mpm 4.20.3__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_PM.md +23 -6
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +1783 -34
- claude_mpm/agents/WORKFLOW.md +75 -2
- 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/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/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/security.json +4 -4
- 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/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 +522 -34
- claude_mpm/cli/executor.py +56 -0
- claude_mpm/cli/interactive/agent_wizard.py +5 -5
- claude_mpm/cli/parsers/base_parser.py +28 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
- claude_mpm/cli/parsers/skills_parser.py +138 -0
- claude_mpm/cli/startup.py +111 -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-help.md +3 -0
- claude_mpm/commands/mpm-init.md +19 -3
- claude_mpm/commands/mpm-resume.md +372 -0
- claude_mpm/commands/mpm-tickets.md +56 -7
- claude_mpm/commands/mpm.md +1 -0
- claude_mpm/config/agent_capabilities.yaml +658 -0
- claude_mpm/config/async_logging_config.yaml +145 -0
- claude_mpm/constants.py +12 -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 +8 -0
- claude_mpm/core/constants.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/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/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/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/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/deployment/agent_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- 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 +3 -1
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +36 -16
- 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/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/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_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/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/version_control/VERSION +1 -0
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +3 -3
- claude_mpm/skills/agent_skills_injector.py +42 -49
- claude_mpm/skills/bundled/.gitkeep +2 -0
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +4 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +108 -114
- 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 +46 -41
- 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 +36 -73
- 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/debugging/root-cause-tracing/SKILL.md +100 -125
- 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/verification-before-completion/SKILL.md +28 -72
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +11 -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 +272 -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/main/artifacts-builder/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +13 -1
- 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 +11 -0
- claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +109 -277
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
- 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 +135 -155
- 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 +13 -12
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
- claude_mpm/skills/bundled/performance-profiling.md +6 -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/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/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/testing/condition-based-waiting/SKILL.md +21 -25
- 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-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 +86 -250
- 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 +145 -57
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
- 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 +37 -15
- 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/skills_registry.py +44 -48
- claude_mpm/skills/skills_service.py +117 -108
- 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 +3 -3
- 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.20.3.dist-info → claude_mpm-4.25.10.dist-info}/METADATA +218 -31
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +409 -246
- 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 -2093
- 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/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
- claude_mpm/tools/code_tree_analyzer.py +0 -1825
- /claude_mpm/skills/bundled/collaboration/requesting-code-review/{code-reviewer.md → references/code-reviewer-template.md} +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
|
@@ -2,7 +2,17 @@
|
|
|
2
2
|
name: Testing Anti-Patterns
|
|
3
3
|
description: Never test mock behavior. Never add test-only methods to production classes. Understand dependencies before mocking.
|
|
4
4
|
when_to_use: when writing or changing tests, adding mocks, or tempted to add test-only methods to production code
|
|
5
|
-
version:
|
|
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
|
|
6
16
|
---
|
|
7
17
|
|
|
8
18
|
# Testing Anti-Patterns
|
|
@@ -13,7 +23,16 @@ Tests must verify real behavior, not mock behavior. Mocks are a means to isolate
|
|
|
13
23
|
|
|
14
24
|
**Core principle:** Test what the code does, not what the mocks do.
|
|
15
25
|
|
|
16
|
-
**Following strict TDD prevents these anti-patterns.**
|
|
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
|
|
17
36
|
|
|
18
37
|
## The Iron Laws
|
|
19
38
|
|
|
@@ -21,284 +40,101 @@ Tests must verify real behavior, not mock behavior. Mocks are a means to isolate
|
|
|
21
40
|
1. NEVER test mock behavior
|
|
22
41
|
2. NEVER add test-only methods to production classes
|
|
23
42
|
3. NEVER mock without understanding dependencies
|
|
43
|
+
4. NEVER create incomplete mocks
|
|
44
|
+
5. NEVER treat tests as afterthought
|
|
24
45
|
```
|
|
25
46
|
|
|
26
|
-
## Anti-Pattern
|
|
27
|
-
|
|
28
|
-
**The violation:**
|
|
29
|
-
```typescript
|
|
30
|
-
// ❌ BAD: Testing that the mock exists
|
|
31
|
-
test('renders sidebar', () => {
|
|
32
|
-
render(<Page />);
|
|
33
|
-
expect(screen.getByTestId('sidebar-mock')).toBeInTheDocument();
|
|
34
|
-
});
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
**Why this is wrong:**
|
|
38
|
-
- You're verifying the mock works, not that the component works
|
|
39
|
-
- Test passes when mock is present, fails when it's not
|
|
40
|
-
- Tells you nothing about real behavior
|
|
41
|
-
|
|
42
|
-
**your human partner's correction:** "Are we testing the behavior of a mock?"
|
|
43
|
-
|
|
44
|
-
**The fix:**
|
|
45
|
-
```typescript
|
|
46
|
-
// ✅ GOOD: Test real component or don't mock it
|
|
47
|
-
test('renders sidebar', () => {
|
|
48
|
-
render(<Page />); // Don't mock sidebar
|
|
49
|
-
expect(screen.getByRole('navigation')).toBeInTheDocument();
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
// OR if sidebar must be mocked for isolation:
|
|
53
|
-
// Don't assert on the mock - test Page's behavior with sidebar present
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Gate Function
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
BEFORE asserting on any mock element:
|
|
60
|
-
Ask: "Am I testing real component behavior or just mock existence?"
|
|
61
|
-
|
|
62
|
-
IF testing mock existence:
|
|
63
|
-
STOP - Delete the assertion or unmock the component
|
|
64
|
-
|
|
65
|
-
Test real behavior instead
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Anti-Pattern 2: Test-Only Methods in Production
|
|
47
|
+
## Core Anti-Pattern Categories
|
|
69
48
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
class Session {
|
|
74
|
-
async destroy() { // Looks like production API!
|
|
75
|
-
await this._workspaceManager?.destroyWorkspace(this.id);
|
|
76
|
-
// ... cleanup
|
|
77
|
-
}
|
|
78
|
-
}
|
|
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)
|
|
79
52
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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)
|
|
83
56
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
- Violates YAGNI and separation of concerns
|
|
88
|
-
- Confuses object lifecycle with entity lifecycle
|
|
89
|
-
|
|
90
|
-
**The fix:**
|
|
91
|
-
```typescript
|
|
92
|
-
// ✅ GOOD: Test utilities handle test cleanup
|
|
93
|
-
// Session has no destroy() - it's stateless in production
|
|
94
|
-
|
|
95
|
-
// In test-utils/
|
|
96
|
-
export async function cleanupSession(session: Session) {
|
|
97
|
-
const workspace = session.getWorkspaceInfo();
|
|
98
|
-
if (workspace) {
|
|
99
|
-
await workspaceManager.destroyWorkspace(workspace.id);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// In tests
|
|
104
|
-
afterEach(() => cleanupSession(session));
|
|
105
|
-
```
|
|
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)
|
|
106
60
|
|
|
107
|
-
###
|
|
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)
|
|
108
64
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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)
|
|
112
68
|
|
|
113
|
-
|
|
114
|
-
STOP - Don't add it
|
|
115
|
-
Put it in test utilities instead
|
|
69
|
+
## Quick Detection Checklist
|
|
116
70
|
|
|
117
|
-
|
|
71
|
+
Run this checklist before committing any test:
|
|
118
72
|
|
|
119
|
-
IF no:
|
|
120
|
-
STOP - Wrong class for this method
|
|
121
73
|
```
|
|
74
|
+
□ Am I asserting on mock elements? (testId='*-mock')
|
|
75
|
+
→ If yes: STOP - Test real component or unmock
|
|
122
76
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
**The violation:**
|
|
126
|
-
```typescript
|
|
127
|
-
// ❌ BAD: Mock breaks test logic
|
|
128
|
-
test('detects duplicate server', () => {
|
|
129
|
-
// Mock prevents config write that test depends on!
|
|
130
|
-
vi.mock('ToolCatalog', () => ({
|
|
131
|
-
discoverAndCacheTools: vi.fn().mockResolvedValue(undefined)
|
|
132
|
-
}));
|
|
77
|
+
□ Does this method only exist for tests?
|
|
78
|
+
→ If yes: STOP - Move to test utilities
|
|
133
79
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
});
|
|
137
|
-
```
|
|
80
|
+
□ Do I fully understand what I'm mocking?
|
|
81
|
+
→ If no: STOP - Run with real impl first, then mock minimally
|
|
138
82
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
- Over-mocking to "be safe" breaks actual behavior
|
|
142
|
-
- Test passes for wrong reason or fails mysteriously
|
|
143
|
-
|
|
144
|
-
**The fix:**
|
|
145
|
-
```typescript
|
|
146
|
-
// ✅ GOOD: Mock at correct level
|
|
147
|
-
test('detects duplicate server', () => {
|
|
148
|
-
// Mock the slow part, preserve behavior test needs
|
|
149
|
-
vi.mock('MCPServerManager'); // Just mock slow server startup
|
|
150
|
-
|
|
151
|
-
await addServer(config); // Config written
|
|
152
|
-
await addServer(config); // Duplicate detected ✓
|
|
153
|
-
});
|
|
154
|
-
```
|
|
83
|
+
□ Is my mock missing fields the real API has?
|
|
84
|
+
→ If yes: STOP - Mirror complete API structure
|
|
155
85
|
|
|
156
|
-
|
|
86
|
+
□ Did I write implementation before test?
|
|
87
|
+
→ If yes: STOP - Delete impl, write test first (TDD)
|
|
157
88
|
|
|
89
|
+
□ Is mock setup >50% of test code?
|
|
90
|
+
→ If yes: Consider integration test with real components
|
|
158
91
|
```
|
|
159
|
-
BEFORE mocking any method:
|
|
160
|
-
STOP - Don't mock yet
|
|
161
|
-
|
|
162
|
-
1. Ask: "What side effects does the real method have?"
|
|
163
|
-
2. Ask: "Does this test depend on any of those side effects?"
|
|
164
|
-
3. Ask: "Do I fully understand what this test needs?"
|
|
165
|
-
|
|
166
|
-
IF depends on side effects:
|
|
167
|
-
Mock at lower level (the actual slow/external operation)
|
|
168
|
-
OR use test doubles that preserve necessary behavior
|
|
169
|
-
NOT the high-level method the test depends on
|
|
170
|
-
|
|
171
|
-
IF unsure what test depends on:
|
|
172
|
-
Run test with real implementation FIRST
|
|
173
|
-
Observe what actually needs to happen
|
|
174
|
-
THEN add minimal mocking at the right level
|
|
175
|
-
|
|
176
|
-
Red flags:
|
|
177
|
-
- "I'll mock this to be safe"
|
|
178
|
-
- "This might be slow, better mock it"
|
|
179
|
-
- Mocking without understanding the dependency chain
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
## Anti-Pattern 4: Incomplete Mocks
|
|
183
92
|
|
|
184
|
-
**
|
|
185
|
-
```typescript
|
|
186
|
-
// ❌ BAD: Partial mock - only fields you think you need
|
|
187
|
-
const mockResponse = {
|
|
188
|
-
status: 'success',
|
|
189
|
-
data: { userId: '123', name: 'Alice' }
|
|
190
|
-
// Missing: metadata that downstream code uses
|
|
191
|
-
};
|
|
93
|
+
**See:** [detection-guide.md](references/detection-guide.md) for comprehensive red flags and warning signs.
|
|
192
94
|
|
|
193
|
-
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
**Why this is wrong:**
|
|
197
|
-
- **Partial mocks hide structural assumptions** - You only mocked fields you know about
|
|
198
|
-
- **Downstream code may depend on fields you didn't include** - Silent failures
|
|
199
|
-
- **Tests pass but integration fails** - Mock incomplete, real API complete
|
|
200
|
-
- **False confidence** - Test proves nothing about real behavior
|
|
201
|
-
|
|
202
|
-
**The Iron Rule:** Mock the COMPLETE data structure as it exists in reality, not just fields your immediate test uses.
|
|
203
|
-
|
|
204
|
-
**The fix:**
|
|
205
|
-
```typescript
|
|
206
|
-
// ✅ GOOD: Mirror real API completeness
|
|
207
|
-
const mockResponse = {
|
|
208
|
-
status: 'success',
|
|
209
|
-
data: { userId: '123', name: 'Alice' },
|
|
210
|
-
metadata: { requestId: 'req-789', timestamp: 1234567890 }
|
|
211
|
-
// All fields real API returns
|
|
212
|
-
};
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### Gate Function
|
|
216
|
-
|
|
217
|
-
```
|
|
218
|
-
BEFORE creating mock responses:
|
|
219
|
-
Check: "What fields does the real API response contain?"
|
|
220
|
-
|
|
221
|
-
Actions:
|
|
222
|
-
1. Examine actual API response from docs/examples
|
|
223
|
-
2. Include ALL fields system might consume downstream
|
|
224
|
-
3. Verify mock matches real response schema completely
|
|
225
|
-
|
|
226
|
-
Critical:
|
|
227
|
-
If you're creating a mock, you must understand the ENTIRE structure
|
|
228
|
-
Partial mocks fail silently when code depends on omitted fields
|
|
229
|
-
|
|
230
|
-
If uncertain: Include all documented fields
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
## Anti-Pattern 5: Integration Tests as Afterthought
|
|
234
|
-
|
|
235
|
-
**The violation:**
|
|
236
|
-
```
|
|
237
|
-
✅ Implementation complete
|
|
238
|
-
❌ No tests written
|
|
239
|
-
"Ready for testing"
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
**Why this is wrong:**
|
|
243
|
-
- Testing is part of implementation, not optional follow-up
|
|
244
|
-
- TDD would have caught this
|
|
245
|
-
- Can't claim complete without tests
|
|
246
|
-
|
|
247
|
-
**The fix:**
|
|
248
|
-
```
|
|
249
|
-
TDD cycle:
|
|
250
|
-
1. Write failing test
|
|
251
|
-
2. Implement to pass
|
|
252
|
-
3. Refactor
|
|
253
|
-
4. THEN claim complete
|
|
254
|
-
```
|
|
95
|
+
## The Bottom Line
|
|
255
96
|
|
|
256
|
-
|
|
97
|
+
**Mocks are tools to isolate, not things to test.**
|
|
257
98
|
|
|
258
|
-
|
|
259
|
-
- Mock setup longer than test logic
|
|
260
|
-
- Mocking everything to make test pass
|
|
261
|
-
- Mocks missing methods real components have
|
|
262
|
-
- Test breaks when mock changes
|
|
99
|
+
If you're testing mock behavior, you've gone wrong. Fix: Test real behavior or question why you're mocking at all.
|
|
263
100
|
|
|
264
|
-
**
|
|
101
|
+
**TDD prevents these patterns.** Write test first → Watch fail → Minimal implementation → Pass → Refactor.
|
|
265
102
|
|
|
266
|
-
|
|
103
|
+
## Navigation
|
|
267
104
|
|
|
268
|
-
|
|
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
|
|
269
108
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
3. **Minimal implementation** → No test-only methods creep in
|
|
274
|
-
4. **Real dependencies** → You see what the test actually needs before mocking
|
|
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
|
|
275
112
|
|
|
276
|
-
|
|
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"
|
|
277
116
|
|
|
278
|
-
##
|
|
117
|
+
## Key Reminders
|
|
279
118
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
| Incomplete mocks | Mirror real API completely |
|
|
286
|
-
| Tests as afterthought | TDD - tests first |
|
|
287
|
-
| Over-complex mocks | Consider integration tests |
|
|
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
|
|
288
124
|
|
|
289
|
-
## Red Flags
|
|
125
|
+
## Red Flags - STOP
|
|
290
126
|
|
|
291
|
-
|
|
292
|
-
-
|
|
293
|
-
-
|
|
294
|
-
-
|
|
295
|
-
-
|
|
296
|
-
-
|
|
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"
|
|
297
133
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
**Mocks are tools to isolate, not things to test.**
|
|
134
|
+
**When mocks become too complex:** Consider integration tests with real components. Often simpler and more valuable.
|
|
301
135
|
|
|
302
|
-
|
|
136
|
+
## Integration with Other Skills
|
|
303
137
|
|
|
304
|
-
|
|
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
|