claude-mpm 4.14.6__py3-none-any.whl → 4.21.0__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.
Files changed (353) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +272 -23
  4. claude_mpm/agents/OUTPUT_STYLE.md +48 -3
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +49 -0
  6. claude_mpm/agents/agent_loader.py +17 -5
  7. claude_mpm/agents/frontmatter_validator.py +284 -253
  8. claude_mpm/agents/templates/agentic-coder-optimizer.json +9 -2
  9. claude_mpm/agents/templates/api_qa.json +7 -1
  10. claude_mpm/agents/templates/clerk-ops.json +8 -1
  11. claude_mpm/agents/templates/code_analyzer.json +4 -1
  12. claude_mpm/agents/templates/dart_engineer.json +11 -1
  13. claude_mpm/agents/templates/data_engineer.json +11 -1
  14. claude_mpm/agents/templates/documentation.json +6 -1
  15. claude_mpm/agents/templates/engineer.json +18 -1
  16. claude_mpm/agents/templates/gcp_ops_agent.json +8 -1
  17. claude_mpm/agents/templates/golang_engineer.json +11 -1
  18. claude_mpm/agents/templates/java_engineer.json +12 -2
  19. claude_mpm/agents/templates/local_ops_agent.json +216 -37
  20. claude_mpm/agents/templates/nextjs_engineer.json +11 -1
  21. claude_mpm/agents/templates/ops.json +8 -1
  22. claude_mpm/agents/templates/php-engineer.json +20 -4
  23. claude_mpm/agents/templates/project_organizer.json +10 -3
  24. claude_mpm/agents/templates/prompt-engineer.json +5 -1
  25. claude_mpm/agents/templates/python_engineer.json +19 -4
  26. claude_mpm/agents/templates/qa.json +7 -1
  27. claude_mpm/agents/templates/react_engineer.json +11 -1
  28. claude_mpm/agents/templates/refactoring_engineer.json +8 -1
  29. claude_mpm/agents/templates/research.json +4 -1
  30. claude_mpm/agents/templates/ruby-engineer.json +11 -1
  31. claude_mpm/agents/templates/rust_engineer.json +23 -8
  32. claude_mpm/agents/templates/security.json +6 -1
  33. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  34. claude_mpm/agents/templates/ticketing.json +6 -1
  35. claude_mpm/agents/templates/typescript_engineer.json +11 -1
  36. claude_mpm/agents/templates/vercel_ops_agent.json +8 -1
  37. claude_mpm/agents/templates/version_control.json +8 -1
  38. claude_mpm/agents/templates/web_qa.json +7 -1
  39. claude_mpm/agents/templates/web_ui.json +11 -1
  40. claude_mpm/cli/__init__.py +34 -740
  41. claude_mpm/cli/commands/__init__.py +2 -0
  42. claude_mpm/cli/commands/agent_manager.py +25 -12
  43. claude_mpm/cli/commands/agent_state_manager.py +186 -0
  44. claude_mpm/cli/commands/agents.py +204 -148
  45. claude_mpm/cli/commands/aggregate.py +7 -3
  46. claude_mpm/cli/commands/analyze.py +9 -4
  47. claude_mpm/cli/commands/analyze_code.py +7 -2
  48. claude_mpm/cli/commands/auto_configure.py +7 -9
  49. claude_mpm/cli/commands/config.py +47 -13
  50. claude_mpm/cli/commands/configure.py +294 -1788
  51. claude_mpm/cli/commands/configure_agent_display.py +261 -0
  52. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  53. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  54. claude_mpm/cli/commands/configure_models.py +18 -0
  55. claude_mpm/cli/commands/configure_navigation.py +167 -0
  56. claude_mpm/cli/commands/configure_paths.py +104 -0
  57. claude_mpm/cli/commands/configure_persistence.py +254 -0
  58. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  59. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  60. claude_mpm/cli/commands/configure_validators.py +73 -0
  61. claude_mpm/cli/commands/local_deploy.py +3 -2
  62. claude_mpm/cli/commands/memory.py +54 -20
  63. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  64. claude_mpm/cli/commands/mpm_init/core.py +525 -0
  65. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  66. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  67. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  68. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  69. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  70. claude_mpm/cli/commands/mpm_init_handler.py +75 -4
  71. claude_mpm/cli/commands/skills.py +488 -0
  72. claude_mpm/cli/executor.py +204 -0
  73. claude_mpm/cli/helpers.py +105 -0
  74. claude_mpm/cli/interactive/__init__.py +3 -0
  75. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  76. claude_mpm/cli/parsers/base_parser.py +7 -0
  77. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  78. claude_mpm/cli/parsers/skills_parser.py +137 -0
  79. claude_mpm/cli/shared/output_formatters.py +28 -19
  80. claude_mpm/cli/startup.py +538 -0
  81. claude_mpm/commands/mpm-auto-configure.md +52 -0
  82. claude_mpm/commands/mpm-help.md +3 -0
  83. claude_mpm/commands/mpm-init.md +112 -6
  84. claude_mpm/commands/mpm-version.md +113 -0
  85. claude_mpm/commands/mpm.md +1 -0
  86. claude_mpm/config/agent_config.py +2 -2
  87. claude_mpm/constants.py +12 -0
  88. claude_mpm/core/base_service.py +13 -12
  89. claude_mpm/core/config.py +42 -0
  90. claude_mpm/core/enums.py +452 -0
  91. claude_mpm/core/factories.py +1 -1
  92. claude_mpm/core/instruction_reinforcement_hook.py +2 -1
  93. claude_mpm/core/interactive_session.py +6 -3
  94. claude_mpm/core/interfaces.py +56 -1
  95. claude_mpm/core/logging_config.py +6 -2
  96. claude_mpm/core/oneshot_session.py +8 -4
  97. claude_mpm/core/optimized_agent_loader.py +3 -3
  98. claude_mpm/core/output_style_manager.py +12 -192
  99. claude_mpm/core/service_registry.py +5 -1
  100. claude_mpm/core/types.py +2 -9
  101. claude_mpm/core/typing_utils.py +7 -6
  102. claude_mpm/dashboard/static/js/dashboard.js +0 -14
  103. claude_mpm/dashboard/templates/index.html +3 -41
  104. claude_mpm/hooks/__init__.py +8 -0
  105. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  106. claude_mpm/hooks/instruction_reinforcement.py +7 -2
  107. claude_mpm/hooks/session_resume_hook.py +121 -0
  108. claude_mpm/models/resume_log.py +340 -0
  109. claude_mpm/services/agents/auto_config_manager.py +10 -11
  110. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  111. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  112. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  113. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  114. claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
  115. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  116. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +7 -6
  117. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
  118. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
  119. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +5 -3
  120. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
  121. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
  122. claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
  123. claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
  124. claude_mpm/services/agents/local_template_manager.py +1 -1
  125. claude_mpm/services/agents/memory/agent_memory_manager.py +5 -2
  126. claude_mpm/services/agents/recommender.py +47 -0
  127. claude_mpm/services/agents/registry/modification_tracker.py +5 -2
  128. claude_mpm/services/cli/resume_service.py +617 -0
  129. claude_mpm/services/cli/session_manager.py +87 -0
  130. claude_mpm/services/cli/session_pause_manager.py +504 -0
  131. claude_mpm/services/cli/session_resume_helper.py +372 -0
  132. claude_mpm/services/command_handler_service.py +11 -5
  133. claude_mpm/services/core/interfaces/process.py +6 -6
  134. claude_mpm/services/core/interfaces.py +56 -1
  135. claude_mpm/services/core/models/__init__.py +0 -2
  136. claude_mpm/services/core/models/agent_config.py +15 -28
  137. claude_mpm/services/core/models/health.py +1 -28
  138. claude_mpm/services/core/models/process.py +22 -41
  139. claude_mpm/services/core/path_resolver.py +1 -1
  140. claude_mpm/services/diagnostics/__init__.py +2 -2
  141. claude_mpm/services/diagnostics/checks/agent_check.py +25 -24
  142. claude_mpm/services/diagnostics/checks/claude_code_check.py +24 -23
  143. claude_mpm/services/diagnostics/checks/common_issues_check.py +25 -24
  144. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -23
  145. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  146. claude_mpm/services/diagnostics/checks/installation_check.py +30 -29
  147. claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
  148. claude_mpm/services/diagnostics/checks/mcp_check.py +50 -36
  149. claude_mpm/services/diagnostics/checks/mcp_services_check.py +36 -31
  150. claude_mpm/services/diagnostics/checks/monitor_check.py +23 -22
  151. claude_mpm/services/diagnostics/checks/startup_log_check.py +9 -8
  152. claude_mpm/services/diagnostics/diagnostic_runner.py +6 -5
  153. claude_mpm/services/diagnostics/doctor_reporter.py +28 -25
  154. claude_mpm/services/diagnostics/models.py +37 -21
  155. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -1
  156. claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
  157. claude_mpm/services/infrastructure/monitoring/base.py +5 -13
  158. claude_mpm/services/infrastructure/monitoring/network.py +7 -6
  159. claude_mpm/services/infrastructure/monitoring/process.py +13 -12
  160. claude_mpm/services/infrastructure/monitoring/resources.py +7 -6
  161. claude_mpm/services/infrastructure/monitoring/service.py +16 -15
  162. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  163. claude_mpm/services/local_ops/__init__.py +5 -3
  164. claude_mpm/services/local_ops/crash_detector.py +1 -1
  165. claude_mpm/services/local_ops/health_checks/http_check.py +2 -1
  166. claude_mpm/services/local_ops/health_checks/process_check.py +2 -1
  167. claude_mpm/services/local_ops/health_checks/resource_check.py +2 -1
  168. claude_mpm/services/local_ops/health_manager.py +1 -1
  169. claude_mpm/services/local_ops/process_manager.py +12 -12
  170. claude_mpm/services/local_ops/restart_manager.py +1 -1
  171. claude_mpm/services/local_ops/state_manager.py +6 -5
  172. claude_mpm/services/local_ops/unified_manager.py +2 -2
  173. claude_mpm/services/mcp_config_manager.py +7 -126
  174. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  175. claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
  176. claude_mpm/services/mcp_gateway/core/base.py +18 -31
  177. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  178. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +97 -45
  179. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +30 -28
  180. claude_mpm/services/memory_hook_service.py +4 -1
  181. claude_mpm/services/monitor/daemon_manager.py +3 -2
  182. claude_mpm/services/monitor/handlers/dashboard.py +2 -1
  183. claude_mpm/services/monitor/handlers/hooks.py +2 -1
  184. claude_mpm/services/monitor/management/lifecycle.py +3 -2
  185. claude_mpm/services/monitor/server.py +2 -1
  186. claude_mpm/services/session_management_service.py +3 -2
  187. claude_mpm/services/session_manager.py +205 -1
  188. claude_mpm/services/shared/async_service_base.py +16 -27
  189. claude_mpm/services/shared/lifecycle_service_base.py +1 -14
  190. claude_mpm/services/socketio/handlers/__init__.py +5 -2
  191. claude_mpm/services/socketio/handlers/hook.py +13 -2
  192. claude_mpm/services/socketio/handlers/registry.py +4 -2
  193. claude_mpm/services/socketio/server/main.py +10 -8
  194. claude_mpm/services/subprocess_launcher_service.py +14 -5
  195. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +8 -7
  196. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +6 -5
  197. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +8 -7
  198. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +7 -6
  199. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +5 -4
  200. claude_mpm/services/unified/config_strategies/validation_strategy.py +13 -9
  201. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +10 -3
  202. claude_mpm/services/unified/deployment_strategies/local.py +6 -5
  203. claude_mpm/services/unified/deployment_strategies/utils.py +6 -5
  204. claude_mpm/services/unified/deployment_strategies/vercel.py +7 -6
  205. claude_mpm/services/unified/interfaces.py +3 -1
  206. claude_mpm/services/unified/unified_analyzer.py +14 -10
  207. claude_mpm/services/unified/unified_config.py +2 -1
  208. claude_mpm/services/unified/unified_deployment.py +9 -4
  209. claude_mpm/services/version_service.py +104 -1
  210. claude_mpm/skills/__init__.py +42 -0
  211. claude_mpm/skills/agent_skills_injector.py +324 -0
  212. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  213. claude_mpm/skills/bundled/__init__.py +6 -0
  214. claude_mpm/skills/bundled/api-documentation.md +393 -0
  215. claude_mpm/skills/bundled/async-testing.md +571 -0
  216. claude_mpm/skills/bundled/code-review.md +143 -0
  217. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  218. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  219. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  220. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  221. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  222. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  223. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  224. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  225. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  226. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  227. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  228. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  229. claude_mpm/skills/bundled/database-migration.md +199 -0
  230. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  231. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  232. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  233. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  234. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  235. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  236. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  237. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  238. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  239. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  240. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  241. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  242. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  243. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  244. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  245. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  246. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  247. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  248. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  249. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  250. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  251. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  252. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  253. claude_mpm/skills/bundled/git-workflow.md +414 -0
  254. claude_mpm/skills/bundled/imagemagick.md +204 -0
  255. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  256. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  257. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  258. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  259. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  260. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  261. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  262. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  263. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  264. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  265. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  266. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  267. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  268. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  269. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  270. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  271. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  272. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  273. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  274. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  275. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  276. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  277. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  278. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  279. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  280. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  281. claude_mpm/skills/bundled/pdf.md +141 -0
  282. claude_mpm/skills/bundled/performance-profiling.md +567 -0
  283. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  284. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  285. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  286. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  287. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  288. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  289. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  290. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  291. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  292. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  293. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  294. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  295. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  296. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  297. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  298. claude_mpm/skills/bundled/security-scanning.md +327 -0
  299. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  300. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  301. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  302. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  303. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  304. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  305. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  306. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  307. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  308. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  309. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  310. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  311. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  312. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  313. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  314. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  315. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  316. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  317. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  318. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  319. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  320. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  321. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  322. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  323. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  324. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  325. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  326. claude_mpm/skills/bundled/xlsx.md +157 -0
  327. claude_mpm/skills/registry.py +286 -0
  328. claude_mpm/skills/skill_manager.py +310 -0
  329. claude_mpm/skills/skills_registry.py +348 -0
  330. claude_mpm/skills/skills_service.py +739 -0
  331. claude_mpm/tools/code_tree_analyzer.py +177 -141
  332. claude_mpm/tools/code_tree_events.py +4 -2
  333. claude_mpm/utils/agent_dependency_loader.py +2 -2
  334. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/METADATA +211 -33
  335. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/RECORD +339 -199
  336. claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
  337. claude_mpm/cli/commands/mpm_init.py +0 -1994
  338. claude_mpm/dashboard/static/css/code-tree.css +0 -1639
  339. claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +0 -353
  340. claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +0 -235
  341. claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +0 -409
  342. claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +0 -435
  343. claude_mpm/dashboard/static/js/components/code-tree.js +0 -5869
  344. claude_mpm/dashboard/static/js/components/code-viewer.js +0 -1386
  345. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
  346. claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1041
  347. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
  348. claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
  349. claude_mpm/services/project/analyzer_refactored.py +0 -450
  350. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/WHEEL +0 -0
  351. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/entry_points.txt +0 -0
  352. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/licenses/LICENSE +0 -0
  353. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,695 @@
1
+ # How TDD Prevents Testing Anti-Patterns
2
+
3
+ Test-Driven Development (TDD) is not just a testing methodology - it's a design methodology that naturally prevents all five testing anti-patterns. This guide explains the deep connection between TDD and anti-pattern prevention.
4
+
5
+ ## Overview
6
+
7
+ **Core insight:** If you follow strict TDD, testing anti-patterns become nearly impossible to create.
8
+
9
+ **Why:** TDD forces you to think about real behavior before implementation, making mock-testing and test-only methods unnatural.
10
+
11
+ ## TDD Fundamentals
12
+
13
+ ### The RED/GREEN/REFACTOR Cycle
14
+
15
+ ```
16
+ 1. RED: Write failing test
17
+ - Test doesn't compile or fails
18
+ - Verify failure reason is correct
19
+ - No implementation exists yet
20
+
21
+ 2. GREEN: Write minimal code to pass
22
+ - Simplest implementation
23
+ - Just enough to pass test
24
+ - No gold plating
25
+
26
+ 3. REFACTOR: Improve code
27
+ - Clean up duplication
28
+ - Improve names
29
+ - Tests still pass
30
+
31
+ 4. REPEAT: Next test
32
+ ```
33
+
34
+ **Critical rule:** Never write implementation without failing test first.
35
+
36
+ See [test-driven-development skill](../../test-driven-development/) for complete workflow.
37
+
38
+ ## How TDD Prevents Each Anti-Pattern
39
+
40
+ ### Anti-Pattern 1: Testing Mock Behavior
41
+
42
+ **How TDD prevents it:**
43
+
44
+ ```
45
+ TDD Step 1: Write test for real behavior
46
+
47
+ Test fails because feature doesn't exist
48
+
49
+ TDD Step 2: Implement minimal code
50
+
51
+ Test passes - you tested real code, not mock
52
+
53
+ If you tested mock:
54
+
55
+ Test would pass immediately (mock exists)
56
+
57
+ Violation of TDD - didn't see failure
58
+ ```
59
+
60
+ **Example workflow:**
61
+
62
+ ```typescript
63
+ // TDD Step 1: Write failing test
64
+ test('renders sidebar with navigation', () => {
65
+ render(<Page />);
66
+ expect(screen.getByRole('navigation')).toBeInTheDocument();
67
+ });
68
+ // ❌ Fails - Page doesn't render sidebar yet
69
+
70
+ // TDD Step 2: Implement
71
+ function Page() {
72
+ return <div><Sidebar role="navigation" /></div>;
73
+ }
74
+ // ✅ Passes - tested real component
75
+
76
+ // WRONG way (not TDD):
77
+ test('renders sidebar mock', () => {
78
+ render(<Page />);
79
+ expect(screen.getByTestId('sidebar-mock')).toBeInTheDocument();
80
+ });
81
+ // ✅ Passes immediately - you never saw it fail!
82
+ // This violates TDD - test must fail first
83
+ ```
84
+
85
+ **TDD guarantee:** If test passes immediately, you're testing mock behavior.
86
+
87
+ ### Anti-Pattern 2: Test-Only Methods in Production
88
+
89
+ **How TDD prevents it:**
90
+
91
+ ```
92
+ TDD Step 1: Write test for needed behavior
93
+
94
+ Test describes what production needs
95
+
96
+ TDD Step 2: Minimal implementation
97
+
98
+ Only code test needs is written
99
+
100
+ If method only for tests:
101
+
102
+ No production test would need it
103
+
104
+ TDD wouldn't add it
105
+ ```
106
+
107
+ **Example workflow:**
108
+
109
+ ```typescript
110
+ // TDD Step 1: Write test for production behavior
111
+ test('session expires after timeout', async () => {
112
+ const session = new Session();
113
+ await advanceTime(SESSION_TIMEOUT);
114
+ expect(session.isActive()).toBe(false);
115
+ });
116
+ // ❌ Fails - Session doesn't handle expiry
117
+
118
+ // TDD Step 2: Implement expiry (production feature)
119
+ class Session {
120
+ isActive() {
121
+ return Date.now() < this.expiresAt;
122
+ }
123
+ }
124
+ // ✅ Passes - implemented real behavior
125
+
126
+ // WRONG way (not TDD):
127
+ // "I need to cleanup in tests"
128
+ class Session {
129
+ destroy() { /* for tests */ } // ❌ Not driven by test!
130
+ }
131
+ ```
132
+
133
+ **TDD guarantee:** Minimal implementation doesn't add untested code.
134
+
135
+ **Test cleanup belongs in test utilities:**
136
+ ```typescript
137
+ // test-utils/session.ts
138
+ export async function cleanupSession(session: Session) {
139
+ // Use public API for cleanup
140
+ session.logout();
141
+ // Clear any test-specific state
142
+ }
143
+ ```
144
+
145
+ ### Anti-Pattern 3: Mocking Without Understanding
146
+
147
+ **How TDD prevents it:**
148
+
149
+ ```
150
+ TDD Step 1: Write test with real implementation
151
+
152
+ Test runs - you see what it does
153
+
154
+ Identify what's slow/external
155
+
156
+ TDD Step 2: Mock at correct level
157
+
158
+ Mock only slow part, preserve behavior
159
+
160
+ If you mock first:
161
+
162
+ Never saw real behavior
163
+
164
+ Don't understand dependencies
165
+
166
+ Mock breaks test logic
167
+ ```
168
+
169
+ **Example workflow:**
170
+
171
+ ```typescript
172
+ // TDD Step 1: Write test with real implementation
173
+ test('detects duplicate server', async () => {
174
+ await addServer(config);
175
+ await expect(addServer(config))
176
+ .rejects.toThrow('already exists');
177
+ });
178
+ // Run test - takes 2 seconds (server startup slow)
179
+ // Observe: Config written, duplicate detected
180
+ // Understand: Test depends on config persistence
181
+
182
+ // TDD Step 2: Mock at correct level
183
+ test('detects duplicate server', async () => {
184
+ vi.mock('MCPServerManager'); // Mock slow startup only
185
+ // Config writing preserved - test logic intact
186
+
187
+ await addServer(config);
188
+ await expect(addServer(config))
189
+ .rejects.toThrow('already exists');
190
+ });
191
+ // ✅ Fast test, correct behavior
192
+
193
+ // WRONG way (not TDD):
194
+ // "Let me mock this upfront"
195
+ vi.mock('ToolCatalog', () => ({
196
+ discoverAndCacheTools: vi.fn() // Breaks test logic!
197
+ }));
198
+ // Never saw real behavior - don't know what test needs
199
+ ```
200
+
201
+ **TDD guarantee:** You understand dependencies before mocking them.
202
+
203
+ ### Anti-Pattern 4: Incomplete Mocks
204
+
205
+ **How TDD prevents it:**
206
+
207
+ ```
208
+ TDD Step 1: Write test with real API
209
+
210
+ See complete response structure
211
+
212
+ TDD Step 2: Mock with complete structure
213
+
214
+ Test still passes - mock is complete
215
+
216
+ If mock incomplete:
217
+
218
+ Test fails - mock missing fields
219
+
220
+ TDD forces you to complete mock
221
+ ```
222
+
223
+ **Example workflow:**
224
+
225
+ ```typescript
226
+ // TDD Step 1: Test with real API (or type)
227
+ test('displays user profile', async () => {
228
+ const user = await api.getUser('123');
229
+ // TypeScript shows complete User type
230
+ render(<Profile user={user} />);
231
+ expect(screen.getByText(user.name)).toBeInTheDocument();
232
+ expect(screen.getByText(user.profile.timezone)).toBeInTheDocument();
233
+ });
234
+ // Observe complete structure
235
+
236
+ // TDD Step 2: Mock with complete structure
237
+ test('displays user profile', async () => {
238
+ const mockUser: User = { // TypeScript enforces completeness
239
+ id: '123',
240
+ name: 'Alice',
241
+ email: 'alice@example.com',
242
+ profile: {
243
+ timezone: 'UTC',
244
+ locale: 'en-US',
245
+ avatar: null
246
+ },
247
+ metadata: { /* complete */ }
248
+ };
249
+
250
+ render(<Profile user={mockUser} />);
251
+ expect(screen.getByText('Alice')).toBeInTheDocument();
252
+ });
253
+ // ✅ Complete mock, test passes
254
+
255
+ // WRONG way (not TDD):
256
+ const mockUser = { id: '123', name: 'Alice' }; // Incomplete
257
+ // Later breaks when profile.timezone accessed
258
+ ```
259
+
260
+ **TDD guarantee:** Test with real data first reveals complete structure.
261
+
262
+ **Use TypeScript to enforce completeness:**
263
+ ```typescript
264
+ // Define complete type from API
265
+ interface User {
266
+ id: string;
267
+ name: string;
268
+ email: string;
269
+ profile: UserProfile;
270
+ metadata: UserMetadata;
271
+ }
272
+
273
+ // TypeScript errors if incomplete
274
+ const mock: User = {
275
+ id: '123',
276
+ name: 'Alice'
277
+ // ❌ TypeScript error - missing fields
278
+ };
279
+ ```
280
+
281
+ ### Anti-Pattern 5: Tests as Afterthought
282
+
283
+ **How TDD prevents it:**
284
+
285
+ ```
286
+ TDD Step 1: MUST write test first
287
+
288
+ No implementation without test
289
+
290
+ Test IS implementation process
291
+
292
+ If implementation first:
293
+
294
+ Violated TDD - broke the cycle
295
+ ```
296
+
297
+ **TDD makes tests as afterthought impossible:**
298
+
299
+ ```typescript
300
+ // TDD Way - tests ARE implementation
301
+ // 1. RED
302
+ test('user registration validates email', async () => {
303
+ await expect(registerUser('invalid'))
304
+ .rejects.toThrow('Invalid email');
305
+ });
306
+ // ❌ Fails - registerUser doesn't exist
307
+
308
+ // 2. GREEN
309
+ async function registerUser(email: string) {
310
+ if (!isValidEmail(email)) {
311
+ throw new Error('Invalid email');
312
+ }
313
+ // ... registration
314
+ }
315
+ // ✅ Passes
316
+
317
+ // 3. REFACTOR
318
+ // Improve validation logic, tests still pass
319
+
320
+ // NOT TDD (anti-pattern):
321
+ // 1. Implement registerUser
322
+ // 2. "Feature complete, need to add tests" ← Afterthought
323
+ ```
324
+
325
+ **TDD workflow:**
326
+ - Tests first = tests are implementation
327
+ - No "testing phase" - tests are development
328
+ - Feature complete = tests passing
329
+ - Can't forget tests - can't write code without them
330
+
331
+ ## TDD Workflow Prevents Anti-Patterns
332
+
333
+ ### Complete TDD Cycle
334
+
335
+ ```typescript
336
+ // Feature: User registration with email validation
337
+
338
+ // ========================================
339
+ // CYCLE 1: Email validation
340
+ // ========================================
341
+
342
+ // RED: Write failing test
343
+ test('rejects invalid email', async () => {
344
+ await expect(registerUser('invalid'))
345
+ .rejects.toThrow('Invalid email');
346
+ });
347
+ // ❌ Fails - registerUser doesn't exist
348
+
349
+ // GREEN: Minimal implementation
350
+ async function registerUser(email: string) {
351
+ if (!email.includes('@')) {
352
+ throw new Error('Invalid email');
353
+ }
354
+ }
355
+ // ✅ Passes
356
+
357
+ // REFACTOR: Improve validation
358
+ async function registerUser(email: string) {
359
+ if (!isValidEmail(email)) { // Better validator
360
+ throw new Error('Invalid email');
361
+ }
362
+ }
363
+ // ✅ Still passes
364
+
365
+ // ========================================
366
+ // CYCLE 2: Database integration
367
+ // ========================================
368
+
369
+ // RED: Write failing test
370
+ test('saves user to database', async () => {
371
+ const user = await registerUser('alice@example.com');
372
+ const saved = await db.users.findById(user.id);
373
+ expect(saved.email).toBe('alice@example.com');
374
+ });
375
+ // ❌ Fails - no database integration
376
+
377
+ // GREEN: Add database
378
+ async function registerUser(email: string) {
379
+ if (!isValidEmail(email)) {
380
+ throw new Error('Invalid email');
381
+ }
382
+ const user = await db.users.create({ email }); // Added
383
+ return user;
384
+ }
385
+ // ✅ Passes
386
+
387
+ // REFACTOR: Extract repository pattern
388
+ // Tests still pass
389
+
390
+ // ========================================
391
+ // CYCLE 3: Duplicate prevention
392
+ // ========================================
393
+
394
+ // RED: Write failing test
395
+ test('prevents duplicate email', async () => {
396
+ await registerUser('alice@example.com');
397
+ await expect(registerUser('alice@example.com'))
398
+ .rejects.toThrow('Email already exists');
399
+ });
400
+ // ❌ Fails - no duplicate check
401
+
402
+ // GREEN: Add check
403
+ async function registerUser(email: string) {
404
+ if (!isValidEmail(email)) {
405
+ throw new Error('Invalid email');
406
+ }
407
+ const existing = await db.users.findByEmail(email);
408
+ if (existing) {
409
+ throw new Error('Email already exists'); // Added
410
+ }
411
+ return await db.users.create({ email });
412
+ }
413
+ // ✅ Passes
414
+
415
+ // REFACTOR: Improve error handling
416
+ // Tests still pass
417
+ ```
418
+
419
+ **Notice:**
420
+ - ✅ No mock behavior testing - real code tested
421
+ - ✅ No test-only methods - only what tests needed
422
+ - ✅ No uninformed mocking - saw real behavior first
423
+ - ✅ No incomplete mocks - used real structures
424
+ - ✅ No afterthought tests - tests first always
425
+
426
+ ## TDD Mindset: Test-First Thinking
427
+
428
+ ### Mental Model
429
+
430
+ **NOT TDD thinking:**
431
+ ```
432
+ "How do I implement this feature?"
433
+
434
+ Implement code
435
+
436
+ "How do I test this?"
437
+
438
+ Write tests
439
+
440
+ Anti-patterns emerge
441
+ ```
442
+
443
+ **TDD thinking:**
444
+ ```
445
+ "How will I verify this works?"
446
+
447
+ Write test
448
+
449
+ "What's minimal code to pass?"
450
+
451
+ Implement
452
+
453
+ Anti-patterns prevented
454
+ ```
455
+
456
+ ### Test-First Benefits
457
+
458
+ **Design benefits:**
459
+ - API designed from consumer perspective
460
+ - Testable code (loose coupling)
461
+ - Clear interfaces
462
+ - Minimal implementation
463
+
464
+ **Quality benefits:**
465
+ - Verified behavior
466
+ - Edge cases caught early
467
+ - Regression prevention
468
+ - Living documentation
469
+
470
+ **Anti-pattern prevention:**
471
+ - Can't test mocks (test fails first against real code)
472
+ - No test-only methods (minimal implementation)
473
+ - Must understand dependencies (see real behavior)
474
+ - Complete structures (test with real data first)
475
+ - Tests ARE implementation (not afterthought)
476
+
477
+ ## When TDD is Violated
478
+
479
+ **Signs you're not following TDD:**
480
+
481
+ ```
482
+ 🚩 Writing implementation before test
483
+ 🚩 Test passes immediately
484
+ 🚩 Skipping "watch it fail" step
485
+ 🚩 Mocking before running test
486
+ 🚩 "Implementation done, adding tests"
487
+ ```
488
+
489
+ **Consequences:**
490
+ - All five anti-patterns become possible
491
+ - Test quality degrades
492
+ - False confidence
493
+ - Design issues
494
+
495
+ **Recovery:**
496
+ 1. Stop adding features
497
+ 2. Return to TDD workflow
498
+ 3. Write test first for next feature
499
+ 4. Watch it fail
500
+ 5. Minimal implementation
501
+ 6. Maintain discipline
502
+
503
+ ## TDD and Mocking Strategy
504
+
505
+ ### TDD-Compliant Mocking
506
+
507
+ **The right way:**
508
+
509
+ ```typescript
510
+ // 1. Write test with real implementation
511
+ test('user registration sends welcome email', async () => {
512
+ await registerUser('alice@example.com');
513
+ // Observe: Email sending is slow (2 seconds)
514
+ });
515
+
516
+ // 2. Identify slow operation
517
+ // emailService.send() is slow (network call)
518
+
519
+ // 3. Mock at correct level
520
+ test('user registration sends welcome email', async () => {
521
+ vi.spyOn(emailService, 'send').mockResolvedValue();
522
+
523
+ await registerUser('alice@example.com');
524
+
525
+ expect(emailService.send).toHaveBeenCalledWith({
526
+ to: 'alice@example.com',
527
+ subject: 'Welcome'
528
+ });
529
+ });
530
+ // Test runs fast, verifies email logic
531
+ ```
532
+
533
+ **TDD mocking principles:**
534
+
535
+ 1. **Run with real implementation first** - See actual behavior
536
+ 2. **Measure performance** - Mock only if slow
537
+ 3. **Mock at boundaries** - I/O, network, filesystem
538
+ 4. **Preserve business logic** - Don't mock what you're testing
539
+ 5. **Verify behavior, not mocks** - Test results, not mock calls
540
+
541
+ ### Mocking Levels in TDD
542
+
543
+ ```
544
+ Layer 1: Business Logic
545
+ → NEVER mock (this is what you're testing)
546
+
547
+ Layer 2: Application Services
548
+ → RARELY mock (needed for assertions)
549
+
550
+ Layer 3: Adapters
551
+ → SOMETIMES mock (if slow)
552
+
553
+ Layer 4: External I/O
554
+ → USUALLY mock (network, DB, filesystem)
555
+
556
+ Layer 5: Infrastructure
557
+ → ALWAYS mock in unit tests (servers, APIs)
558
+ ```
559
+
560
+ ## Common TDD Mistakes
561
+
562
+ ### Mistake 1: Not Watching Test Fail
563
+
564
+ ```typescript
565
+ // ❌ WRONG
566
+ test('feature works', () => {
567
+ expect(true).toBe(true); // Passes immediately
568
+ });
569
+ // Didn't verify test tests right thing
570
+
571
+ // ✅ RIGHT
572
+ test('validates email', async () => {
573
+ await expect(register('invalid'))
574
+ .rejects.toThrow('Invalid email');
575
+ });
576
+ // ❌ Fails first - register doesn't exist
577
+ // Then implement
578
+ // ✅ Passes - verified test works
579
+ ```
580
+
581
+ ### Mistake 2: Overly Complex Implementation
582
+
583
+ ```typescript
584
+ // ❌ WRONG (not minimal)
585
+ test('adds numbers', () => {
586
+ expect(add(2, 3)).toBe(5);
587
+ });
588
+
589
+ function add(a: number, b: number): number {
590
+ // Not minimal - over-engineered
591
+ return Array(b).fill(a).reduce((sum, n) => sum + n, 0);
592
+ }
593
+
594
+ // ✅ RIGHT (minimal)
595
+ function add(a: number, b: number): number {
596
+ return a + b; // Simplest solution
597
+ }
598
+ ```
599
+
600
+ ### Mistake 3: Testing Implementation Details
601
+
602
+ ```typescript
603
+ // ❌ WRONG
604
+ test('uses cache', () => {
605
+ const cache = new Cache();
606
+ service.setCache(cache); // Testing how it works
607
+ expect(service.cache).toBe(cache);
608
+ });
609
+
610
+ // ✅ RIGHT
611
+ test('returns cached result', () => {
612
+ service.get('key');
613
+ service.get('key');
614
+ expect(slowOperation).toHaveBeenCalledOnce(); // Testing behavior
615
+ });
616
+ ```
617
+
618
+ ## TDD Discipline
619
+
620
+ ### Maintaining TDD Practice
621
+
622
+ **Commit to:**
623
+ - Test first, always
624
+ - Watch it fail, every time
625
+ - Minimal implementation, no gold plating
626
+ - Refactor with confidence
627
+
628
+ **When tempted to skip TDD:**
629
+ - "Just a small change" → Write test first
630
+ - "I know it works" → Write test to prove it
631
+ - "This is hard to test" → Design issue, fix it
632
+ - "Tests can wait" → No, they can't
633
+
634
+ **TDD is not optional:**
635
+ - Not a suggestion
636
+ - Not for later
637
+ - Not just for new features
638
+ - Not "when I have time"
639
+
640
+ **TDD is how you write code.**
641
+
642
+ ## Integration with Other Skills
643
+
644
+ **Prerequisite skills:**
645
+ - [test-driven-development](../../test-driven-development/) - Complete TDD workflow
646
+
647
+ **Complementary skills:**
648
+ - [verification-before-completion](../../../productivity/verification-before-completion/) - Definition of "done"
649
+
650
+ **Anti-pattern prevention:**
651
+ - This skill - What TDD prevents
652
+
653
+ ## Summary: TDD as Anti-Pattern Prevention
654
+
655
+ | Anti-Pattern | TDD Prevention Mechanism |
656
+ |--------------|---------------------------|
657
+ | Testing Mock Behavior | Must watch test fail against real code first |
658
+ | Test-Only Methods | Minimal implementation doesn't add them |
659
+ | Mocking Without Understanding | Run with real impl first, understand dependencies |
660
+ | Incomplete Mocks | Test with real data first, see complete structure |
661
+ | Tests as Afterthought | Tests first is the workflow, impossible to skip |
662
+
663
+ **The bottom line:** Strict TDD adherence makes testing anti-patterns nearly impossible to create.
664
+
665
+ If you find yourself with these anti-patterns, you've violated TDD. Return to the RED/GREEN/REFACTOR cycle.
666
+
667
+ ## Quick Reference
668
+
669
+ **TDD Cycle:**
670
+ ```
671
+ RED → Write failing test
672
+ GREEN → Minimal implementation
673
+ REFACTOR → Improve code
674
+ REPEAT → Next test
675
+ ```
676
+
677
+ **Anti-pattern prevention:**
678
+ ```
679
+ Test first → Prevents afterthought
680
+ Watch fail → Prevents mock testing
681
+ Minimal code → Prevents test-only methods
682
+ Real impl first → Prevents uninformed mocking
683
+ Real data first → Prevents incomplete mocks
684
+ ```
685
+
686
+ **TDD discipline:**
687
+ ```
688
+ Always test first
689
+ Always watch fail
690
+ Always minimal implementation
691
+ Always refactor
692
+ Never skip the cycle
693
+ ```
694
+
695
+ See [test-driven-development skill](../../test-driven-development/) for complete TDD workflow and examples.