claude-mpm 4.24.0__py3-none-any.whl → 5.0.9__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.

Files changed (502) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +721 -911
  5. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  6. claude_mpm/agents/WORKFLOW.md +4 -4
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +1 -1
  12. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +48 -0
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +38 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +959 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +2 -6
  30. claude_mpm/cli/commands/config.py +7 -4
  31. claude_mpm/cli/commands/configure.py +769 -45
  32. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  33. claude_mpm/cli/commands/configure_navigation.py +63 -46
  34. claude_mpm/cli/commands/debug.py +12 -12
  35. claude_mpm/cli/commands/doctor.py +10 -2
  36. claude_mpm/cli/commands/hook_errors.py +277 -0
  37. claude_mpm/cli/commands/local_deploy.py +1 -4
  38. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  39. claude_mpm/cli/commands/mpm_init/core.py +49 -1
  40. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  41. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  42. claude_mpm/cli/commands/postmortem.py +401 -0
  43. claude_mpm/cli/commands/run.py +123 -165
  44. claude_mpm/cli/commands/skill_source.py +694 -0
  45. claude_mpm/cli/commands/skills.py +757 -20
  46. claude_mpm/cli/executor.py +78 -3
  47. claude_mpm/cli/interactive/agent_wizard.py +955 -45
  48. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  49. claude_mpm/cli/parsers/agents_parser.py +256 -4
  50. claude_mpm/cli/parsers/base_parser.py +53 -0
  51. claude_mpm/cli/parsers/config_parser.py +96 -43
  52. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  53. claude_mpm/cli/parsers/skills_parser.py +145 -0
  54. claude_mpm/cli/parsers/source_parser.py +138 -0
  55. claude_mpm/cli/startup.py +538 -106
  56. claude_mpm/cli/startup_display.py +480 -0
  57. claude_mpm/cli/utils.py +1 -1
  58. claude_mpm/cli_module/commands.py +1 -1
  59. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  60. claude_mpm/commands/mpm-agents-detect.md +9 -0
  61. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  62. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  63. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  64. claude_mpm/commands/mpm-doctor.md +9 -0
  65. claude_mpm/commands/mpm-help.md +14 -2
  66. claude_mpm/commands/mpm-init.md +27 -2
  67. claude_mpm/commands/mpm-monitor.md +9 -0
  68. claude_mpm/commands/mpm-postmortem.md +123 -0
  69. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  70. claude_mpm/commands/mpm-status.md +9 -0
  71. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  72. claude_mpm/commands/mpm-ticket-view.md +552 -0
  73. claude_mpm/commands/mpm-version.md +9 -0
  74. claude_mpm/commands/mpm.md +10 -0
  75. claude_mpm/config/agent_presets.py +488 -0
  76. claude_mpm/config/agent_sources.py +325 -0
  77. claude_mpm/config/skill_presets.py +392 -0
  78. claude_mpm/config/skill_sources.py +590 -0
  79. claude_mpm/constants.py +13 -0
  80. claude_mpm/core/claude_runner.py +5 -34
  81. claude_mpm/core/config.py +16 -0
  82. claude_mpm/core/constants.py +1 -1
  83. claude_mpm/core/framework/__init__.py +3 -16
  84. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  85. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  86. claude_mpm/core/hook_error_memory.py +381 -0
  87. claude_mpm/core/hook_manager.py +41 -2
  88. claude_mpm/core/interactive_session.py +91 -10
  89. claude_mpm/core/logger.py +3 -1
  90. claude_mpm/core/oneshot_session.py +71 -8
  91. claude_mpm/core/protocols/__init__.py +23 -0
  92. claude_mpm/core/protocols/runner_protocol.py +103 -0
  93. claude_mpm/core/protocols/session_protocol.py +131 -0
  94. claude_mpm/core/shared/singleton_manager.py +11 -4
  95. claude_mpm/core/system_context.py +38 -0
  96. claude_mpm/dashboard/static/css/activity.css +69 -69
  97. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  98. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  99. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  100. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  101. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  102. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  103. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  104. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  105. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  106. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  107. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  108. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  109. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  110. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  111. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  112. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  113. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  114. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  115. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  116. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  117. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  118. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  119. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  120. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  121. claude_mpm/dashboard/templates/code_simple.html +23 -23
  122. claude_mpm/dashboard/templates/index.html +18 -18
  123. claude_mpm/experimental/cli_enhancements.py +1 -5
  124. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  125. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  126. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  127. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  128. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  129. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  130. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  131. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  132. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  133. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  134. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  135. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  136. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  137. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  138. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  139. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  140. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  141. claude_mpm/models/git_repository.py +198 -0
  142. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  143. claude_mpm/scripts/start_activity_logging.py +3 -1
  144. claude_mpm/services/agents/agent_builder.py +45 -9
  145. claude_mpm/services/agents/agent_preset_service.py +238 -0
  146. claude_mpm/services/agents/agent_selection_service.py +484 -0
  147. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  148. claude_mpm/services/agents/cache_git_manager.py +621 -0
  149. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  150. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  151. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  152. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  153. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  154. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  155. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  156. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  157. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  158. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  159. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  160. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  161. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  162. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  163. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  164. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  165. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  166. claude_mpm/services/agents/git_source_manager.py +629 -0
  167. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  168. claude_mpm/services/agents/local_template_manager.py +50 -10
  169. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  170. claude_mpm/services/agents/sources/__init__.py +13 -0
  171. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  172. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  173. claude_mpm/services/agents/startup_sync.py +239 -0
  174. claude_mpm/services/agents/toolchain_detector.py +474 -0
  175. claude_mpm/services/analysis/__init__.py +25 -0
  176. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  177. claude_mpm/services/analysis/postmortem_service.py +765 -0
  178. claude_mpm/services/cli/session_pause_manager.py +1 -1
  179. claude_mpm/services/command_deployment_service.py +200 -6
  180. claude_mpm/services/core/base.py +7 -2
  181. claude_mpm/services/core/interfaces/__init__.py +1 -3
  182. claude_mpm/services/core/interfaces/health.py +1 -4
  183. claude_mpm/services/core/models/__init__.py +2 -11
  184. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  185. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  186. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  187. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  188. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  189. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  190. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  191. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  192. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  193. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  194. claude_mpm/services/event_bus/direct_relay.py +3 -3
  195. claude_mpm/services/events/consumers/logging.py +1 -2
  196. claude_mpm/services/git/__init__.py +21 -0
  197. claude_mpm/services/git/git_operations_service.py +494 -0
  198. claude_mpm/services/github/__init__.py +21 -0
  199. claude_mpm/services/github/github_cli_service.py +397 -0
  200. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  201. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  202. claude_mpm/services/instructions/__init__.py +9 -0
  203. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  204. claude_mpm/services/local_ops/__init__.py +3 -13
  205. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  206. claude_mpm/services/local_ops/health_manager.py +1 -4
  207. claude_mpm/services/local_ops/resource_monitor.py +1 -1
  208. claude_mpm/services/mcp_config_manager.py +75 -145
  209. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  210. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  211. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  212. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  213. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  214. claude_mpm/services/mcp_service_verifier.py +6 -3
  215. claude_mpm/services/model/model_router.py +1 -2
  216. claude_mpm/services/monitor/daemon.py +29 -9
  217. claude_mpm/services/monitor/daemon_manager.py +96 -19
  218. claude_mpm/services/monitor/server.py +2 -2
  219. claude_mpm/services/port_manager.py +1 -1
  220. claude_mpm/services/pr/__init__.py +14 -0
  221. claude_mpm/services/pr/pr_template_service.py +329 -0
  222. claude_mpm/services/project/documentation_manager.py +2 -1
  223. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  224. claude_mpm/services/runner_configuration_service.py +16 -3
  225. claude_mpm/services/session_management_service.py +16 -4
  226. claude_mpm/services/skills/__init__.py +18 -0
  227. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  228. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  229. claude_mpm/services/skills_config.py +547 -0
  230. claude_mpm/services/skills_deployer.py +955 -0
  231. claude_mpm/services/socketio/handlers/connection.py +1 -1
  232. claude_mpm/services/socketio/handlers/git.py +1 -1
  233. claude_mpm/services/socketio/server/core.py +1 -4
  234. claude_mpm/services/socketio/server/main.py +1 -3
  235. claude_mpm/services/system_instructions_service.py +1 -3
  236. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  237. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  238. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  239. claude_mpm/services/unified/unified_deployment.py +1 -5
  240. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  241. claude_mpm/services/visualization/__init__.py +1 -5
  242. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  243. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  244. claude_mpm/skills/skills_registry.py +0 -1
  245. claude_mpm/templates/questions/__init__.py +38 -0
  246. claude_mpm/templates/questions/base.py +193 -0
  247. claude_mpm/templates/questions/pr_strategy.py +311 -0
  248. claude_mpm/templates/questions/project_init.py +385 -0
  249. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  250. claude_mpm/tools/__main__.py +8 -8
  251. claude_mpm/utils/agent_dependency_loader.py +77 -10
  252. claude_mpm/utils/agent_filters.py +288 -0
  253. claude_mpm/utils/dependency_cache.py +3 -1
  254. claude_mpm/utils/gitignore.py +241 -0
  255. claude_mpm/utils/migration.py +372 -0
  256. claude_mpm/utils/progress.py +387 -0
  257. claude_mpm/utils/robust_installer.py +2 -4
  258. claude_mpm/utils/structured_questions.py +619 -0
  259. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/METADATA +396 -43
  260. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/RECORD +268 -422
  261. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  262. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  263. claude_mpm/agents/templates/agent-manager.json +0 -273
  264. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  265. claude_mpm/agents/templates/api_qa.json +0 -183
  266. claude_mpm/agents/templates/clerk-ops.json +0 -235
  267. claude_mpm/agents/templates/code_analyzer.json +0 -101
  268. claude_mpm/agents/templates/content-agent.json +0 -358
  269. claude_mpm/agents/templates/dart_engineer.json +0 -307
  270. claude_mpm/agents/templates/data_engineer.json +0 -225
  271. claude_mpm/agents/templates/documentation.json +0 -238
  272. claude_mpm/agents/templates/engineer.json +0 -210
  273. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  274. claude_mpm/agents/templates/golang_engineer.json +0 -270
  275. claude_mpm/agents/templates/imagemagick.json +0 -264
  276. claude_mpm/agents/templates/java_engineer.json +0 -346
  277. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  278. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  279. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  280. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  281. claude_mpm/agents/templates/memory_manager.json +0 -158
  282. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  283. claude_mpm/agents/templates/ops.json +0 -185
  284. claude_mpm/agents/templates/php-engineer.json +0 -287
  285. claude_mpm/agents/templates/product_owner.json +0 -338
  286. claude_mpm/agents/templates/project_organizer.json +0 -144
  287. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  288. claude_mpm/agents/templates/python_engineer.json +0 -387
  289. claude_mpm/agents/templates/qa.json +0 -243
  290. claude_mpm/agents/templates/react_engineer.json +0 -239
  291. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  292. claude_mpm/agents/templates/research.json +0 -188
  293. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  294. claude_mpm/agents/templates/rust_engineer.json +0 -275
  295. claude_mpm/agents/templates/security.json +0 -202
  296. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  297. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  298. claude_mpm/agents/templates/ticketing.json +0 -178
  299. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  300. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  301. claude_mpm/agents/templates/version_control.json +0 -159
  302. claude_mpm/agents/templates/web_qa.json +0 -400
  303. claude_mpm/agents/templates/web_ui.json +0 -189
  304. claude_mpm/commands/mpm-tickets.md +0 -151
  305. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  306. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  307. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  308. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  309. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  310. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  311. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  312. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  313. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  314. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  315. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  316. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  317. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  318. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  319. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  320. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  321. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  322. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  323. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  324. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  325. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  326. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  327. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  328. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  329. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  330. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  331. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  332. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  333. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  334. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  335. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  336. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  337. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  338. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  339. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  340. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  341. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  342. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  343. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  344. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  345. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  346. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  347. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  348. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  349. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  350. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  351. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  352. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  353. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  354. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  355. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  356. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  357. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  358. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  359. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  360. claude_mpm/dashboard/static/built/react/events.js +0 -30
  361. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  362. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  363. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  364. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  365. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  366. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  367. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  368. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  369. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  370. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  371. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  372. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  373. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  374. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  375. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  376. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  377. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  378. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  379. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  380. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  381. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  382. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  383. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  384. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  385. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  386. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  387. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  388. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  389. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  390. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  391. claude_mpm/dashboard/static/events.html +0 -607
  392. claude_mpm/dashboard/static/index.html +0 -635
  393. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  394. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  395. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  396. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  397. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  398. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  399. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  400. claude_mpm/dashboard/static/legacy/files.html +0 -747
  401. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  402. claude_mpm/dashboard/static/monitors.html +0 -431
  403. claude_mpm/dashboard/static/production/events.html +0 -659
  404. claude_mpm/dashboard/static/production/main.html +0 -698
  405. claude_mpm/dashboard/static/production/monitors.html +0 -483
  406. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  407. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  408. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  409. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  410. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  411. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  412. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  413. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  414. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  415. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  416. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  417. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  418. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  419. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  420. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  421. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  422. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  423. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  424. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  425. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  426. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  427. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  428. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  429. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  430. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  431. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  432. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  433. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  434. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  435. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  436. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  437. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  438. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  439. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  440. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  441. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  442. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  443. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  444. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  445. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  446. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  447. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  448. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  449. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  450. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  451. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  452. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  453. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  454. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  455. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  456. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  457. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  458. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  459. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  460. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  461. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  462. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  463. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  464. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  465. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  466. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  467. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  468. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  469. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  470. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  471. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  472. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  473. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  474. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  475. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  476. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  477. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  478. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  479. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  480. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  481. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  482. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  483. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  489. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  490. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  491. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  492. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  493. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  494. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  495. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  496. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  497. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  498. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  499. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
  500. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +0 -0
  501. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
  502. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
@@ -1,140 +0,0 @@
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
@@ -1,572 +0,0 @@
1
- # Completeness Anti-Patterns
2
-
3
- Anti-patterns related to incomplete testing practices: partial mocks that hide structural dependencies, and treating tests as optional afterthoughts instead of integral parts of implementation.
4
-
5
- ## Anti-Pattern 4: Incomplete Mocks
6
-
7
- **The violation:**
8
- ```typescript
9
- // ❌ BAD: Partial mock - only fields you think you need
10
- const mockResponse = {
11
- status: 'success',
12
- data: { userId: '123', name: 'Alice' }
13
- // Missing: metadata that downstream code uses
14
- };
15
-
16
- // Later: breaks when code accesses response.metadata.requestId
17
- ```
18
-
19
- **Why this is wrong:**
20
- - **Partial mocks hide structural assumptions** - You only mocked fields you know about
21
- - **Downstream code may depend on fields you didn't include** - Silent failures
22
- - **Tests pass but integration fails** - Mock incomplete, real API complete
23
- - **False confidence** - Test proves nothing about real behavior
24
- - **Breaking changes go undetected** - API changes don't fail tests
25
-
26
- **The Iron Rule:** Mock the COMPLETE data structure as it exists in reality, not just fields your immediate test uses.
27
-
28
- **Real-world impact:**
29
- ```typescript
30
- // Your test (incomplete mock)
31
- const mockUser = { id: '123', name: 'Alice' };
32
- // Passes ✅
33
-
34
- // Production code elsewhere
35
- function getUserTimezone(user) {
36
- return user.profile.timezone; // undefined - breaks in production!
37
- }
38
- ```
39
-
40
- ### Complete Mock Strategy
41
-
42
- **The fix:**
43
- ```typescript
44
- // ✅ GOOD: Mirror real API completeness
45
- const mockResponse = {
46
- status: 'success',
47
- data: {
48
- userId: '123',
49
- name: 'Alice',
50
- email: 'alice@example.com',
51
- profile: {
52
- timezone: 'America/New_York',
53
- locale: 'en-US',
54
- avatar: 'https://...'
55
- }
56
- },
57
- metadata: {
58
- requestId: 'req-789',
59
- timestamp: 1234567890,
60
- version: 'v2'
61
- }
62
- // All fields real API returns
63
- };
64
- ```
65
-
66
- ### How to Create Complete Mocks
67
-
68
- **Step 1: Reference real API documentation**
69
- ```typescript
70
- // ❌ BAD - mocking from memory
71
- const mock = { id: 1, name: 'test' };
72
-
73
- // ✅ GOOD - reference API docs
74
- // From API docs: GET /api/users/:id returns:
75
- // {
76
- // id: number,
77
- // name: string,
78
- // email: string,
79
- // createdAt: ISO8601,
80
- // profile: { ... },
81
- // permissions: string[]
82
- // }
83
-
84
- const mock = {
85
- id: 1,
86
- name: 'test',
87
- email: 'test@example.com',
88
- createdAt: '2024-01-01T00:00:00Z',
89
- profile: { /* complete profile */ },
90
- permissions: ['read', 'write']
91
- };
92
- ```
93
-
94
- **Step 2: Use TypeScript types**
95
- ```typescript
96
- // ✅ TypeScript ensures completeness
97
- interface User {
98
- id: string;
99
- name: string;
100
- email: string;
101
- profile: UserProfile;
102
- metadata: UserMetadata;
103
- }
104
-
105
- // TypeScript error if incomplete
106
- const mockUser: User = {
107
- id: '123',
108
- name: 'Alice'
109
- // Error: Missing email, profile, metadata
110
- };
111
-
112
- // Must be complete
113
- const mockUser: User = {
114
- id: '123',
115
- name: 'Alice',
116
- email: 'alice@example.com',
117
- profile: { timezone: 'UTC', locale: 'en' },
118
- metadata: { createdAt: '2024-01-01T00:00:00Z' }
119
- };
120
- ```
121
-
122
- **Step 3: Extract mock factories**
123
- ```typescript
124
- // ✅ Reusable complete mocks
125
- // test-utils/factories/user.ts
126
- export function createMockUser(overrides?: Partial<User>): User {
127
- return {
128
- id: '123',
129
- name: 'Test User',
130
- email: 'test@example.com',
131
- profile: {
132
- timezone: 'UTC',
133
- locale: 'en-US',
134
- avatar: null
135
- },
136
- metadata: {
137
- createdAt: '2024-01-01T00:00:00Z',
138
- updatedAt: '2024-01-01T00:00:00Z',
139
- version: 1
140
- },
141
- permissions: ['read'],
142
- ...overrides // Allow customization
143
- };
144
- }
145
-
146
- // Usage
147
- const user = createMockUser({ name: 'Alice' });
148
- // All fields present, name overridden
149
- ```
150
-
151
- ### Detecting Incomplete Mocks
152
-
153
- **Red flags:**
154
- - Creating mocks without referencing API docs
155
- - TypeScript `any` or `Partial<T>` for mocks
156
- - Different tests have different mock shapes for same type
157
- - Mock has fewer fields than real API
158
- - Comments like "add fields as needed"
159
-
160
- **Gate Function:**
161
-
162
- ```
163
- BEFORE creating mock responses:
164
- Check: "What fields does the real API response contain?"
165
-
166
- Actions:
167
- 1. Open API documentation or OpenAPI spec
168
- 2. List ALL fields in response
169
- 3. Include ALL fields in mock (use TypeScript types)
170
- 4. Verify mock matches real response schema completely
171
-
172
- Critical:
173
- If you're creating a mock, you must understand the ENTIRE structure
174
- Partial mocks fail silently when code depends on omitted fields
175
-
176
- If uncertain:
177
- - Include all documented fields
178
- - Use TypeScript interfaces to enforce completeness
179
- - Create factory functions for reusable complete mocks
180
-
181
- Red flags:
182
- - "I'll add more fields later"
183
- - "Just mocking what I need"
184
- - Creating mock from memory
185
- - Different mock shapes for same entity
186
- ```
187
-
188
- ### Common Incomplete Mock Scenarios
189
-
190
- **Scenario 1: Nested objects**
191
- ```typescript
192
- // ❌ BAD - incomplete nesting
193
- const mockUser = {
194
- id: '123',
195
- profile: { name: 'Alice' } // Missing profile.timezone, profile.locale
196
- };
197
-
198
- // ✅ GOOD - complete nesting
199
- const mockUser = {
200
- id: '123',
201
- profile: {
202
- name: 'Alice',
203
- timezone: 'UTC',
204
- locale: 'en-US',
205
- avatar: null,
206
- bio: null
207
- }
208
- };
209
- ```
210
-
211
- **Scenario 2: Arrays**
212
- ```typescript
213
- // ❌ BAD - empty array when real data has items
214
- const mockResponse = {
215
- users: [] // Real API always has pagination metadata
216
- };
217
-
218
- // ✅ GOOD - realistic array with metadata
219
- const mockResponse = {
220
- users: [
221
- { id: '1', name: 'Alice', /* complete user */ },
222
- { id: '2', name: 'Bob', /* complete user */ }
223
- ],
224
- pagination: {
225
- total: 2,
226
- page: 1,
227
- perPage: 10,
228
- hasNext: false
229
- }
230
- };
231
- ```
232
-
233
- **Scenario 3: Optional fields**
234
- ```typescript
235
- // ❌ BAD - omitting optional fields
236
- const mockUser = {
237
- id: '123',
238
- name: 'Alice'
239
- // Omitted optional fields - downstream code may check them
240
- };
241
-
242
- // ✅ GOOD - include optional fields (as null/undefined)
243
- const mockUser = {
244
- id: '123',
245
- name: 'Alice',
246
- bio: null, // Optional field explicitly null
247
- website: undefined, // Optional field explicitly undefined
248
- avatar: null
249
- };
250
- ```
251
-
252
- ### Mock Completeness Levels
253
-
254
- **Level 1: Minimal (AVOID)**
255
- ```typescript
256
- // Only immediate test needs
257
- const mock = { id: '123' };
258
- // Risk: High - downstream code breaks
259
- ```
260
-
261
- **Level 2: Partial (RISKY)**
262
- ```typescript
263
- // Common fields included
264
- const mock = { id: '123', name: 'Alice', email: 'alice@example.com' };
265
- // Risk: Medium - missing nested/optional fields
266
- ```
267
-
268
- **Level 3: Complete (REQUIRED)**
269
- ```typescript
270
- // All fields from API spec
271
- const mock = {
272
- id: '123',
273
- name: 'Alice',
274
- email: 'alice@example.com',
275
- profile: { /* complete */ },
276
- metadata: { /* complete */ },
277
- permissions: ['read']
278
- };
279
- // Risk: Low - matches real API
280
- ```
281
-
282
- **Level 4: Factory-based (BEST)**
283
- ```typescript
284
- // Reusable factory with defaults
285
- const mock = createMockUser({ name: 'Alice' });
286
- // Risk: Minimal - centralized, typed, complete
287
- ```
288
-
289
- ## Anti-Pattern 5: Integration Tests as Afterthought
290
-
291
- **The violation:**
292
- ```
293
- ✅ Implementation complete
294
- ❌ No tests written
295
- "Ready for testing"
296
- ```
297
-
298
- **Why this is wrong:**
299
- - Testing is part of implementation, not optional follow-up
300
- - TDD would have caught this
301
- - Can't claim complete without tests
302
- - Tests written after code are biased toward existing implementation
303
- - Missing tests = incomplete feature
304
- - Technical debt from day one
305
-
306
- **The fix:**
307
- ```
308
- TDD cycle:
309
- 1. Write failing test
310
- 2. Watch it fail (verify)
311
- 3. Write minimal code to pass
312
- 4. Watch it pass (verify)
313
- 5. Refactor
314
- 6. THEN claim complete
315
- ```
316
-
317
- ### Why Tests Must Come First
318
-
319
- **Tests-after problems:**
320
-
321
- 1. **Implementation bias**
322
- - Tests confirm what code does, not what it should do
323
- - Bugs baked into tests
324
- - Missing edge cases
325
-
326
- 2. **Design issues**
327
- - Code hard to test (not designed for testability)
328
- - Tight coupling discovered too late
329
- - Refactoring required to make testable
330
-
331
- 3. **Coverage gaps**
332
- - Temptation to skip "hard to test" paths
333
- - Error handling overlooked
334
- - Edge cases ignored
335
-
336
- 4. **False completion**
337
- - Feature seems done but untested
338
- - Integration issues discovered late
339
- - Delayed feedback loop
340
-
341
- **Tests-first benefits:**
342
-
343
- 1. **Design driver**
344
- - Forces testable design upfront
345
- - Identifies coupling before writing code
346
- - API designed from consumer perspective
347
-
348
- 2. **Verification**
349
- - Confirms implementation matches requirements
350
- - Catches bugs immediately
351
- - Documents expected behavior
352
-
353
- 3. **Confidence**
354
- - Safe refactoring
355
- - Regression prevention
356
- - Living documentation
357
-
358
- ### Integration Testing Strategy
359
-
360
- **When to write integration tests:**
361
-
362
- - **Before implementation** (TDD approach)
363
- ```typescript
364
- // 1. Write failing integration test
365
- test('user registration flow', async () => {
366
- const response = await api.post('/register', userData);
367
- expect(response.status).toBe(201);
368
- expect(response.body.user).toMatchObject(userData);
369
- });
370
- // Test fails - endpoint doesn't exist
371
-
372
- // 2. Implement endpoint
373
- // 3. Test passes
374
- ```
375
-
376
- - **Alongside unit tests** (test pyramid)
377
- - Unit tests: Fast, isolated, many
378
- - Integration tests: Realistic, end-to-end, fewer
379
- - Both written before/during implementation
380
-
381
- **Types of integration tests:**
382
-
383
- 1. **API integration tests**
384
- ```typescript
385
- test('POST /api/users creates user', async () => {
386
- const response = await request(app)
387
- .post('/api/users')
388
- .send({ name: 'Alice', email: 'alice@example.com' });
389
-
390
- expect(response.status).toBe(201);
391
- expect(response.body).toMatchObject({
392
- id: expect.any(String),
393
- name: 'Alice',
394
- email: 'alice@example.com'
395
- });
396
-
397
- // Verify database
398
- const user = await db.users.findById(response.body.id);
399
- expect(user).toBeDefined();
400
- });
401
- ```
402
-
403
- 2. **Database integration tests**
404
- ```typescript
405
- test('user repository saves and retrieves users', async () => {
406
- const user = await userRepo.create({
407
- name: 'Alice',
408
- email: 'alice@example.com'
409
- });
410
-
411
- const retrieved = await userRepo.findById(user.id);
412
- expect(retrieved).toEqual(user);
413
- });
414
- ```
415
-
416
- 3. **Component integration tests**
417
- ```typescript
418
- test('UserForm submits to API', async () => {
419
- render(<UserForm />);
420
-
421
- fireEvent.change(screen.getByLabelText('Name'), {
422
- target: { value: 'Alice' }
423
- });
424
- fireEvent.click(screen.getByText('Submit'));
425
-
426
- await waitFor(() => {
427
- expect(mockApi.post).toHaveBeenCalledWith('/users', {
428
- name: 'Alice'
429
- });
430
- });
431
- });
432
- ```
433
-
434
- ### Test Completeness Checklist
435
-
436
- **Before claiming implementation complete:**
437
-
438
- ```
439
- □ Unit tests written and passing
440
- - All public functions tested
441
- - Edge cases covered
442
- - Error conditions tested
443
-
444
- □ Integration tests written and passing
445
- - End-to-end flows tested
446
- - External dependencies tested
447
- - Error handling tested
448
-
449
- □ Test coverage meets threshold (e.g., 80%)
450
- - Line coverage
451
- - Branch coverage
452
- - Critical paths covered
453
-
454
- □ Tests run in CI/CD pipeline
455
- - Automated on commits
456
- - Blocks merge if failing
457
-
458
- □ Tests document behavior
459
- - Clear test names
460
- - Meaningful assertions
461
- - Edge cases explained
462
- ```
463
-
464
- ### Gate Function
465
-
466
- ```
467
- BEFORE claiming implementation complete:
468
- Ask: "Are tests written?"
469
-
470
- IF no:
471
- STOP - Not complete
472
- Write tests before continuing
473
-
474
- Ask: "Do tests cover all requirements?"
475
-
476
- IF no:
477
- STOP - Incomplete testing
478
- Add missing test cases
479
-
480
- Ask: "Did I follow TDD (test-first)?"
481
-
482
- IF no:
483
- WARNING - Consider rewriting with TDD
484
- Tests may be implementation-biased
485
-
486
- Ask: "Do integration tests pass?"
487
-
488
- IF no:
489
- STOP - Not ready for integration
490
- Fix integration issues
491
-
492
- Definition of "complete":
493
- ✅ Unit tests written and passing
494
- ✅ Integration tests written and passing
495
- ✅ Coverage meets threshold
496
- ✅ Tests run in CI/CD
497
- ✅ All requirements verified
498
- ```
499
-
500
- ### Recovery: Adding Tests After Implementation
501
-
502
- **If tests weren't written first (damage control):**
503
-
504
- 1. **Stop adding features** - Don't dig deeper hole
505
- 2. **Write tests for existing code** - Start with critical paths
506
- 3. **Refactor for testability** - Decouple as needed
507
- 4. **Adopt TDD going forward** - Prevent future occurrence
508
-
509
- **Prioritization:**
510
- - **High priority:** Critical business logic, security, data integrity
511
- - **Medium priority:** Common user flows, API endpoints
512
- - **Low priority:** UI styling, configuration, one-off scripts
513
-
514
- **Approach:**
515
- ```typescript
516
- // 1. Write characterization tests (document current behavior)
517
- test('current behavior: user registration', async () => {
518
- const result = await registerUser(userData);
519
- // Document what currently happens
520
- expect(result).toMatchSnapshot();
521
- });
522
-
523
- // 2. Add specific behavior tests
524
- test('user registration validates email', async () => {
525
- await expect(registerUser({ email: 'invalid' }))
526
- .rejects.toThrow('Invalid email');
527
- });
528
-
529
- // 3. Refactor safely with test coverage
530
- // Now can refactor with confidence
531
- ```
532
-
533
- ## Prevention Through TDD
534
-
535
- **How TDD prevents completeness anti-patterns:**
536
-
537
- 1. **Incomplete mocks**
538
- - Writing test first forces understanding of data structures
539
- - Failing test shows what fields are needed
540
- - Implementation reveals missing mock fields immediately
541
-
542
- 2. **Tests as afterthought**
543
- - TDD makes tests part of implementation process
544
- - Can't write implementation without test
545
- - Test-first is the workflow, not optional step
546
-
547
- **TDD workflow enforces:**
548
- - Complete understanding of requirements (to write test)
549
- - Complete data structures (test fails if incomplete)
550
- - Complete coverage (tests drive implementation)
551
-
552
- See [test-driven-development skill](../../test-driven-development/) for complete TDD workflow.
553
-
554
- ## Real-World Impact
555
-
556
- **Incomplete mocks:**
557
- - Tests pass, production breaks
558
- - Integration issues discovered late
559
- - False confidence in test suite
560
- - Difficult debugging (mock ≠ reality)
561
-
562
- **Tests as afterthought:**
563
- - Bugs escape to production
564
- - Implementation hard to test (design issues)
565
- - Coverage gaps
566
- - Technical debt from day one
567
-
568
- **With complete approach:**
569
- - Tests catch integration issues early
570
- - High confidence in test suite
571
- - Testable design from start
572
- - Complete feature = tested feature