claude-mpm 4.21.0__py3-none-any.whl → 5.0.2__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 (497) 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 +632 -334
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  11. claude_mpm/agents/templates/context-management-examples.md +544 -0
  12. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  13. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  14. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  15. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  16. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  17. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  18. claude_mpm/cli/__init__.py +38 -2
  19. claude_mpm/cli/commands/agent_source.py +774 -0
  20. claude_mpm/cli/commands/agent_state_manager.py +125 -20
  21. claude_mpm/cli/commands/agents.py +684 -13
  22. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  23. claude_mpm/cli/commands/agents_discover.py +338 -0
  24. claude_mpm/cli/commands/aggregate.py +1 -1
  25. claude_mpm/cli/commands/analyze.py +3 -3
  26. claude_mpm/cli/commands/auto_configure.py +2 -6
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/config.py +7 -4
  29. claude_mpm/cli/commands/configure.py +478 -44
  30. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  31. claude_mpm/cli/commands/configure_navigation.py +63 -46
  32. claude_mpm/cli/commands/debug.py +12 -12
  33. claude_mpm/cli/commands/doctor.py +10 -2
  34. claude_mpm/cli/commands/hook_errors.py +277 -0
  35. claude_mpm/cli/commands/local_deploy.py +1 -4
  36. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  37. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  38. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  39. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  40. claude_mpm/cli/commands/run.py +124 -128
  41. claude_mpm/cli/commands/skill_source.py +694 -0
  42. claude_mpm/cli/commands/skills.py +435 -1
  43. claude_mpm/cli/executor.py +78 -3
  44. claude_mpm/cli/interactive/agent_wizard.py +919 -41
  45. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  46. claude_mpm/cli/parsers/agents_parser.py +173 -4
  47. claude_mpm/cli/parsers/base_parser.py +49 -0
  48. claude_mpm/cli/parsers/config_parser.py +96 -43
  49. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  50. claude_mpm/cli/parsers/skills_parser.py +138 -0
  51. claude_mpm/cli/parsers/source_parser.py +138 -0
  52. claude_mpm/cli/startup.py +499 -84
  53. claude_mpm/cli/startup_display.py +480 -0
  54. claude_mpm/cli/utils.py +1 -1
  55. claude_mpm/cli_module/commands.py +1 -1
  56. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  57. claude_mpm/commands/mpm-agents-detect.md +9 -0
  58. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  59. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  60. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  61. claude_mpm/commands/mpm-doctor.md +9 -0
  62. claude_mpm/commands/mpm-help.md +14 -2
  63. claude_mpm/commands/mpm-init.md +27 -2
  64. claude_mpm/commands/mpm-monitor.md +9 -0
  65. claude_mpm/commands/mpm-session-resume.md +381 -0
  66. claude_mpm/commands/mpm-status.md +9 -0
  67. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  68. claude_mpm/commands/mpm-ticket-view.md +552 -0
  69. claude_mpm/commands/mpm-version.md +9 -0
  70. claude_mpm/commands/mpm.md +11 -0
  71. claude_mpm/config/agent_presets.py +258 -0
  72. claude_mpm/config/agent_sources.py +325 -0
  73. claude_mpm/config/skill_sources.py +590 -0
  74. claude_mpm/constants.py +12 -0
  75. claude_mpm/core/api_validator.py +1 -1
  76. claude_mpm/core/claude_runner.py +17 -10
  77. claude_mpm/core/config.py +24 -0
  78. claude_mpm/core/constants.py +1 -1
  79. claude_mpm/core/framework/__init__.py +3 -16
  80. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  81. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  82. claude_mpm/core/hook_error_memory.py +381 -0
  83. claude_mpm/core/hook_manager.py +41 -2
  84. claude_mpm/core/interactive_session.py +112 -5
  85. claude_mpm/core/logger.py +3 -1
  86. claude_mpm/core/oneshot_session.py +94 -4
  87. claude_mpm/dashboard/static/css/activity.css +69 -69
  88. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  89. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  90. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  91. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  92. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  93. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  94. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  95. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  96. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  97. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  98. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  99. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  100. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  101. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  102. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  103. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  104. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  105. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  106. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  107. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  108. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  109. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  110. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  111. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  112. claude_mpm/dashboard/templates/code_simple.html +23 -23
  113. claude_mpm/dashboard/templates/index.html +18 -18
  114. claude_mpm/experimental/cli_enhancements.py +1 -5
  115. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  116. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  117. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  118. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  119. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  120. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  121. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  122. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  123. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  124. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  125. claude_mpm/models/git_repository.py +198 -0
  126. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  127. claude_mpm/scripts/start_activity_logging.py +3 -1
  128. claude_mpm/services/agents/agent_builder.py +45 -9
  129. claude_mpm/services/agents/agent_preset_service.py +238 -0
  130. claude_mpm/services/agents/agent_selection_service.py +484 -0
  131. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  132. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  133. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  134. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  135. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  136. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  137. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  138. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  139. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  140. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  141. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  142. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  143. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  144. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  145. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  146. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  147. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  148. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  149. claude_mpm/services/agents/git_source_manager.py +629 -0
  150. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  151. claude_mpm/services/agents/local_template_manager.py +50 -10
  152. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  153. claude_mpm/services/agents/sources/__init__.py +13 -0
  154. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  155. claude_mpm/services/agents/sources/git_source_sync_service.py +1055 -0
  156. claude_mpm/services/agents/startup_sync.py +239 -0
  157. claude_mpm/services/agents/toolchain_detector.py +474 -0
  158. claude_mpm/services/cli/session_pause_manager.py +1 -1
  159. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  160. claude_mpm/services/command_deployment_service.py +92 -1
  161. claude_mpm/services/core/base.py +26 -11
  162. claude_mpm/services/core/interfaces/__init__.py +1 -3
  163. claude_mpm/services/core/interfaces/health.py +1 -4
  164. claude_mpm/services/core/models/__init__.py +2 -11
  165. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  166. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  167. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  168. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  169. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  170. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  171. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  172. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  173. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  174. claude_mpm/services/event_bus/direct_relay.py +3 -3
  175. claude_mpm/services/event_bus/event_bus.py +36 -3
  176. claude_mpm/services/event_bus/relay.py +23 -7
  177. claude_mpm/services/events/consumers/logging.py +1 -2
  178. claude_mpm/services/git/__init__.py +21 -0
  179. claude_mpm/services/git/git_operations_service.py +494 -0
  180. claude_mpm/services/github/__init__.py +21 -0
  181. claude_mpm/services/github/github_cli_service.py +397 -0
  182. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  183. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  184. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  185. claude_mpm/services/instructions/__init__.py +9 -0
  186. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  187. claude_mpm/services/local_ops/__init__.py +3 -13
  188. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  189. claude_mpm/services/local_ops/health_manager.py +1 -4
  190. claude_mpm/services/local_ops/process_manager.py +1 -1
  191. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  192. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  193. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  194. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  195. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  196. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  197. claude_mpm/services/memory/failure_tracker.py +19 -4
  198. claude_mpm/services/memory/optimizer.py +1 -1
  199. claude_mpm/services/model/model_router.py +8 -9
  200. claude_mpm/services/monitor/daemon.py +1 -1
  201. claude_mpm/services/monitor/server.py +2 -2
  202. claude_mpm/services/native_agent_converter.py +356 -0
  203. claude_mpm/services/port_manager.py +1 -1
  204. claude_mpm/services/pr/__init__.py +14 -0
  205. claude_mpm/services/pr/pr_template_service.py +329 -0
  206. claude_mpm/services/project/documentation_manager.py +2 -1
  207. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  208. claude_mpm/services/runner_configuration_service.py +1 -0
  209. claude_mpm/services/self_upgrade_service.py +165 -7
  210. claude_mpm/services/skills/__init__.py +18 -0
  211. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  212. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  213. claude_mpm/services/skills_config.py +547 -0
  214. claude_mpm/services/skills_deployer.py +955 -0
  215. claude_mpm/services/socketio/handlers/connection.py +1 -1
  216. claude_mpm/services/socketio/handlers/git.py +2 -2
  217. claude_mpm/services/socketio/server/core.py +1 -4
  218. claude_mpm/services/socketio/server/main.py +1 -3
  219. claude_mpm/services/system_instructions_service.py +1 -3
  220. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  221. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  222. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  223. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  224. claude_mpm/services/unified/unified_deployment.py +1 -5
  225. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  226. claude_mpm/services/visualization/__init__.py +1 -5
  227. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  228. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  229. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  230. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  231. claude_mpm/skills/skills_registry.py +0 -1
  232. claude_mpm/templates/questions/__init__.py +38 -0
  233. claude_mpm/templates/questions/base.py +193 -0
  234. claude_mpm/templates/questions/pr_strategy.py +311 -0
  235. claude_mpm/templates/questions/project_init.py +385 -0
  236. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  237. claude_mpm/tools/__main__.py +8 -8
  238. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  239. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  240. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  241. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  242. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  243. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  244. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  245. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  246. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  247. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  248. claude_mpm/utils/agent_dependency_loader.py +80 -13
  249. claude_mpm/utils/dependency_cache.py +3 -1
  250. claude_mpm/utils/gitignore.py +241 -0
  251. claude_mpm/utils/log_cleanup.py +3 -3
  252. claude_mpm/utils/progress.py +383 -0
  253. claude_mpm/utils/robust_installer.py +3 -5
  254. claude_mpm/utils/structured_questions.py +619 -0
  255. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/METADATA +429 -59
  256. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/RECORD +264 -427
  257. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  258. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  259. claude_mpm/agents/templates/agent-manager.json +0 -273
  260. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  261. claude_mpm/agents/templates/api_qa.json +0 -180
  262. claude_mpm/agents/templates/clerk-ops.json +0 -235
  263. claude_mpm/agents/templates/code_analyzer.json +0 -101
  264. claude_mpm/agents/templates/content-agent.json +0 -358
  265. claude_mpm/agents/templates/dart_engineer.json +0 -307
  266. claude_mpm/agents/templates/data_engineer.json +0 -225
  267. claude_mpm/agents/templates/documentation.json +0 -211
  268. claude_mpm/agents/templates/engineer.json +0 -210
  269. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  270. claude_mpm/agents/templates/golang_engineer.json +0 -270
  271. claude_mpm/agents/templates/imagemagick.json +0 -264
  272. claude_mpm/agents/templates/java_engineer.json +0 -346
  273. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  274. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  275. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  276. claude_mpm/agents/templates/memory_manager.json +0 -158
  277. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  278. claude_mpm/agents/templates/ops.json +0 -185
  279. claude_mpm/agents/templates/php-engineer.json +0 -287
  280. claude_mpm/agents/templates/product_owner.json +0 -338
  281. claude_mpm/agents/templates/project_organizer.json +0 -140
  282. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  283. claude_mpm/agents/templates/python_engineer.json +0 -387
  284. claude_mpm/agents/templates/qa.json +0 -242
  285. claude_mpm/agents/templates/react_engineer.json +0 -238
  286. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  287. claude_mpm/agents/templates/research.json +0 -188
  288. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  289. claude_mpm/agents/templates/rust_engineer.json +0 -275
  290. claude_mpm/agents/templates/security.json +0 -202
  291. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  292. claude_mpm/agents/templates/ticketing.json +0 -177
  293. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  294. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  295. claude_mpm/agents/templates/version_control.json +0 -157
  296. claude_mpm/agents/templates/web_qa.json +0 -399
  297. claude_mpm/agents/templates/web_ui.json +0 -189
  298. claude_mpm/commands/mpm-tickets.md +0 -102
  299. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  300. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  301. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  302. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  303. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  304. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  305. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  306. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  307. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  308. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  309. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  310. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  311. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  312. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  313. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  314. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  315. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  316. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  317. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  318. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  319. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  320. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  321. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  322. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  323. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  324. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  325. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  326. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  327. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  328. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  329. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  330. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  331. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  332. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  333. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  334. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  335. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  336. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  337. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  338. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  339. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  340. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  341. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  342. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  343. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  344. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  345. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  346. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  347. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  348. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  349. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  350. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  351. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  352. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  353. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  354. claude_mpm/dashboard/static/built/react/events.js +0 -30
  355. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  356. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  357. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  358. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  359. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  360. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  361. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  362. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  363. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  364. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  365. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  366. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  367. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  368. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  369. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  370. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  371. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  372. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  373. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  374. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  375. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  376. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  377. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  378. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  379. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  380. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  381. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  382. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  383. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  384. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  385. claude_mpm/dashboard/static/events.html +0 -607
  386. claude_mpm/dashboard/static/index.html +0 -635
  387. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  388. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  389. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  390. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  391. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  392. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  393. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  394. claude_mpm/dashboard/static/legacy/files.html +0 -747
  395. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  396. claude_mpm/dashboard/static/monitors.html +0 -431
  397. claude_mpm/dashboard/static/production/events.html +0 -659
  398. claude_mpm/dashboard/static/production/main.html +0 -698
  399. claude_mpm/dashboard/static/production/monitors.html +0 -483
  400. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  401. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  402. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  403. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  404. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  405. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  406. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  407. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  408. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  409. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  410. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  411. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  412. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  413. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  414. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  415. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  416. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  417. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  418. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  419. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  420. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  421. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  422. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  423. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  424. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  425. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  426. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  427. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  428. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  429. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  430. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  431. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  432. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  433. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  434. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  435. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  436. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  437. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  438. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  439. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  440. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  441. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  442. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  443. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  444. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  445. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  446. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  447. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  448. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  449. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  450. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  451. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  452. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  453. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  454. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  455. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  456. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  457. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  458. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  459. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  460. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  461. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  462. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  463. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  464. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  465. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  466. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  467. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  468. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  469. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  470. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  472. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  473. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  478. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  479. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  480. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  481. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  482. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  483. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  484. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  485. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  486. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  487. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  488. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  489. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  490. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  491. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  492. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  493. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  494. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/WHEEL +0 -0
  495. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/entry_points.txt +0 -0
  496. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/licenses/LICENSE +0 -0
  497. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/top_level.txt +0 -0
@@ -1,569 +0,0 @@
1
- # Detection Guide: Identifying Testing Anti-Patterns
2
-
3
- Comprehensive guide for detecting testing anti-patterns before they cause problems. Includes red flags, warning signs, gate functions, and diagnostic checklists.
4
-
5
- ## Overview
6
-
7
- Prevention is easier than cure. This guide helps you identify anti-patterns during code review, test writing, or debugging test failures.
8
-
9
- ## Universal Detection Checklist
10
-
11
- Run before committing any test:
12
-
13
- ```
14
- □ Am I asserting on mock elements? (testId='*-mock')
15
- → If yes: STOP - Test real component or unmock
16
-
17
- □ Does this method only exist for tests?
18
- → If yes: STOP - Move to test utilities
19
-
20
- □ Do I fully understand what I'm mocking?
21
- → If no: STOP - Run with real impl first, then mock minimally
22
-
23
- □ Is my mock missing fields the real API has?
24
- → If yes: STOP - Mirror complete API structure
25
-
26
- □ Did I write implementation before test?
27
- → If yes: STOP - Delete impl, write test first (TDD)
28
-
29
- □ Is mock setup >50% of test code?
30
- → If yes: Consider integration test with real components
31
-
32
- □ Can I explain what real behavior this test verifies?
33
- → If no: STOP - Clarify what you're testing
34
-
35
- □ Would this test fail if I removed mocks?
36
- → If no: You're testing mock behavior
37
- ```
38
-
39
- ## Anti-Pattern 1: Testing Mock Behavior
40
-
41
- ### Red Flags
42
-
43
- **Code indicators:**
44
- ```typescript
45
- // 🚩 Test ID contains "mock"
46
- expect(screen.getByTestId('sidebar-mock')).toBeInTheDocument();
47
-
48
- // 🚩 Asserting mock was called
49
- expect(mockFunction).toHaveBeenCalled();
50
-
51
- // 🚩 Checking mock return values
52
- expect(result).toBe(mockReturnValue);
53
-
54
- // 🚩 Test fails when mock removed
55
- // Remove mock → test fails → you're testing mock
56
- ```
57
-
58
- **Language patterns:**
59
- - "Make sure the mock..."
60
- - "Test that component renders mock"
61
- - "Verify mock is present"
62
- - "Check if mock function called"
63
-
64
- **Diagnostic questions:**
65
- 1. **"If I remove this mock, does test still make sense?"**
66
- - No → You're testing mock behavior
67
- - Yes → Good, test tests real behavior
68
-
69
- 2. **"What production behavior does this verify?"**
70
- - Can't answer → Testing mock behavior
71
- - Clear answer → Good
72
-
73
- 3. **"Would this test catch real bugs?"**
74
- - No → Testing mock behavior
75
- - Yes → Good
76
-
77
- ### Detection Script
78
-
79
- ```typescript
80
- // Run this check on your tests
81
- function detectsMockTesting(testFile: string): string[] {
82
- const warnings: string[] = [];
83
-
84
- // Pattern: testId with 'mock'
85
- if (testFile.includes("getByTestId('") && testFile.includes('-mock')) {
86
- warnings.push('Testing mock element by test ID');
87
- }
88
-
89
- // Pattern: expecting on mock objects
90
- if (testFile.includes('expect(mock') && testFile.includes('toBe')) {
91
- warnings.push('Asserting on mock values');
92
- }
93
-
94
- // Pattern: mock call assertions without behavior check
95
- if (testFile.includes('toHaveBeenCalled') &&
96
- !testFile.includes('expect(result)')) {
97
- warnings.push('Only checking mock calls, not results');
98
- }
99
-
100
- return warnings;
101
- }
102
- ```
103
-
104
- ## Anti-Pattern 2: Test-Only Methods in Production
105
-
106
- ### Red Flags
107
-
108
- **Code indicators:**
109
- ```typescript
110
- // 🚩 Method only called in test files
111
- // Search: "destroy(" → Only in *.test.ts files
112
-
113
- // 🚩 Method names suggesting test use
114
- class Session {
115
- reset() // 🚩
116
- destroy() // 🚩
117
- clear() // 🚩
118
- mock() // 🚩
119
- }
120
-
121
- // 🚩 Comments acknowledging test-only use
122
- // "For testing only"
123
- // "Used by test cleanup"
124
- ```
125
-
126
- **File analysis:**
127
- ```bash
128
- # Find methods only called in tests
129
- grep -r "\.destroy\(" --include="*.ts" | grep -v ".test.ts"
130
- # If empty → method only in tests → move to test utils
131
- ```
132
-
133
- **Diagnostic questions:**
134
- 1. **"Is this method called outside test files?"**
135
- - No → Test-only method, move to utilities
136
- - Yes → Keep in production
137
-
138
- 2. **"Would production code ever need this?"**
139
- - No → Move to test utilities
140
- - Yes → Keep in production
141
-
142
- 3. **"Does this class own this resource's lifecycle?"**
143
- - No → Wrong place for this method
144
- - Yes → Consider if needed in production
145
-
146
- ### Detection Script
147
-
148
- ```typescript
149
- // Analyze method usage
150
- function findTestOnlyMethods(codebase: string[]): Report {
151
- const methods = extractMethods(codebase);
152
-
153
- return methods.filter(method => {
154
- const usages = findUsages(method);
155
- const testUsages = usages.filter(u => u.file.includes('.test.'));
156
- const prodUsages = usages.filter(u => !u.file.includes('.test.'));
157
-
158
- return testUsages.length > 0 && prodUsages.length === 0;
159
- });
160
- }
161
- ```
162
-
163
- ## Anti-Pattern 3: Mocking Without Understanding
164
-
165
- ### Red Flags
166
-
167
- **Code indicators:**
168
- ```typescript
169
- // 🚩 Mocking without reading implementation
170
- vi.mock('SomeModule'); // What does it do? Unknown.
171
-
172
- // 🚩 "Just to be safe" mocking
173
- // Mock everything, understand nothing
174
-
175
- // 🚩 Test mysteriously fails/passes
176
- // You can't explain why
177
-
178
- // 🚩 Mock prevents test logic from working
179
- vi.mock('UserService'); // Breaks user creation test needs
180
- ```
181
-
182
- **Language patterns:**
183
- - "I'll mock this to be safe"
184
- - "This might be slow"
185
- - "Let's mock everything"
186
- - "Not sure why test fails"
187
-
188
- **Diagnostic questions:**
189
- 1. **"What side effects does the real method have?"**
190
- - Can't answer → Don't mock yet
191
- - Know all effects → Can mock safely
192
-
193
- 2. **"Does my test depend on any of those side effects?"**
194
- - Yes → Don't mock at this level
195
- - No → Safe to mock
196
-
197
- 3. **"Where is the actual slow/external operation?"**
198
- - Unclear → Study code first
199
- - Clear → Mock at that level
200
-
201
- ### Detection Strategy
202
-
203
- **Before mocking:**
204
- ```
205
- 1. Read the implementation
206
- - What does it do?
207
- - What are side effects?
208
- - What does it return?
209
-
210
- 2. Run test with real implementation
211
- - How slow is it? (measure!)
212
- - What behavior occurs?
213
- - What's actually needed?
214
-
215
- 3. Identify minimal mock point
216
- - Where is the slow/external operation?
217
- - Can I mock below this level?
218
- - What behavior must be preserved?
219
-
220
- 4. Mock at correct level
221
- - Mock boundary of slow operation
222
- - Preserve logic test depends on
223
- - Verify test still tests intended behavior
224
- ```
225
-
226
- ### Speed Measurement
227
-
228
- ```typescript
229
- // Measure before mocking
230
- test('user registration', async () => {
231
- const start = performance.now();
232
- await registerUser(userData);
233
- const duration = performance.now() - start;
234
-
235
- console.log(`Test took ${duration}ms`);
236
- // If <100ms → Don't mock
237
- // If >1000ms → Identify slow part
238
- });
239
- ```
240
-
241
- ## Anti-Pattern 4: Incomplete Mocks
242
-
243
- ### Red Flags
244
-
245
- **Code indicators:**
246
- ```typescript
247
- // 🚩 Mock created from memory
248
- const mock = { id: '123' }; // What other fields exist?
249
-
250
- // 🚩 Partial type annotation
251
- const mock: Partial<User> = { id: '123' };
252
-
253
- // 🚩 Different tests, different mock shapes
254
- // test1.ts: { id, name }
255
- // test2.ts: { id, name, email, profile }
256
-
257
- // 🚩 Comment acknowledging incompleteness
258
- // "TODO: add more fields"
259
- // "Add fields as needed"
260
- ```
261
-
262
- **Missing documentation:**
263
- - No reference to API docs
264
- - No TypeScript interface
265
- - No factory function
266
- - Copy-pasted mock variations
267
-
268
- **Diagnostic questions:**
269
- 1. **"What does the real API return?"**
270
- - Can't answer → Check docs before mocking
271
- - Know structure → Use it in mock
272
-
273
- 2. **"Am I using TypeScript types?"**
274
- - No → Add types to enforce completeness
275
- - Yes → Good
276
-
277
- 3. **"Do other tests mock this differently?"**
278
- - Yes → Inconsistent mocks, need factory
279
- - No → Good
280
-
281
- ### Detection Script
282
-
283
- ```typescript
284
- // Find incomplete mocks
285
- function detectIncompleteMocks(testFile: string): Warning[] {
286
- const warnings: Warning[] = [];
287
-
288
- // Pattern: Partial<T> in test
289
- if (testFile.includes('Partial<') && testFile.includes('mock')) {
290
- warnings.push('Using Partial type for mock - likely incomplete');
291
- }
292
-
293
- // Pattern: Object literals without types
294
- const mockPattern = /const mock\w+ = \{[^}]+\};/g;
295
- const mocks = testFile.match(mockPattern);
296
-
297
- if (mocks) {
298
- mocks.forEach(mock => {
299
- if (!mock.includes(': ')) { // No type annotation
300
- warnings.push('Mock without type annotation');
301
- }
302
- });
303
- }
304
-
305
- return warnings;
306
- }
307
- ```
308
-
309
- ### Completeness Checklist
310
-
311
- ```
312
- □ Referenced API documentation
313
- □ Used TypeScript interface/type
314
- □ Included all required fields
315
- □ Included optional fields (as null/undefined)
316
- □ Nested objects complete
317
- □ Arrays have realistic length/content
318
- □ Metadata fields included
319
- □ Timestamps/IDs present
320
- ```
321
-
322
- ## Anti-Pattern 5: Tests as Afterthought
323
-
324
- ### Red Flags
325
-
326
- **Process indicators:**
327
- ```
328
- 🚩 PR has implementation commits, then "add tests" commit
329
- 🚩 "Ready for testing" status on untested feature
330
- 🚩 Test coverage added after code review
331
- 🚩 Tests written to pass, not fail first
332
- 🚩 Implementation complete, tests pending
333
- ```
334
-
335
- **Language patterns:**
336
- - "I'll add tests next"
337
- - "Implementation done, needs tests"
338
- - "Ready for testing phase"
339
- - "Tests coming soon"
340
-
341
- **Code indicators:**
342
- ```typescript
343
- // 🚩 Tests that can't fail
344
- test('feature works', () => {
345
- const result = newFeature();
346
- expect(result).toBe(result); // Always passes
347
- });
348
-
349
- // 🚩 Tests with no assertions
350
- test('feature runs', () => {
351
- newFeature(); // No expect()
352
- });
353
- ```
354
-
355
- **Diagnostic questions:**
356
- 1. **"Did I write test before implementation?"**
357
- - No → Not following TDD
358
- - Yes → Good
359
-
360
- 2. **"Did I watch test fail first?"**
361
- - No → Can't verify test works
362
- - Yes → Good
363
-
364
- 3. **"Are there commits without tests?"**
365
- - Yes → Tests afterthought
366
- - No → Good
367
-
368
- ### Git History Analysis
369
-
370
- ```bash
371
- # Check if tests come after implementation
372
- git log --oneline --name-only | grep -A5 "feature"
373
-
374
- # Red flag pattern:
375
- # abc123 Add feature X
376
- # src/feature.ts
377
- # def456 Add tests for feature X ← Tests after
378
- # src/feature.test.ts
379
-
380
- # Good pattern:
381
- # abc123 Add feature X with tests
382
- # src/feature.test.ts ← Test file in same commit
383
- # src/feature.ts
384
- ```
385
-
386
- ## Warning Signs: When Mocks Become Too Complex
387
-
388
- ### Complexity Indicators
389
-
390
- ```typescript
391
- // 🚩 Mock setup longer than test
392
- const setup = 50 lines;
393
- const test = 10 lines;
394
- // Ratio > 3:1 → Too complex
395
-
396
- // 🚩 Mocking everything
397
- vi.mock('ModuleA');
398
- vi.mock('ModuleB');
399
- vi.mock('ModuleC');
400
- vi.mock('ModuleD');
401
- // 4+ mocks → Consider integration test
402
-
403
- // 🚩 Nested mock setup
404
- const mockA = { mock: mockB };
405
- const mockB = { mock: mockC };
406
- const mockC = { /* ... */ };
407
-
408
- // 🚩 Mock setup in beforeEach for single test
409
- beforeEach(() => {
410
- // 30 lines of setup
411
- });
412
-
413
- test('one thing', () => {
414
- // 5 lines
415
- });
416
- ```
417
-
418
- **Your human partner's question:** "Do we need to be using a mock here?"
419
-
420
- **Consider:** Integration tests with real components often simpler than complex mocks.
421
-
422
- ### Complexity Metrics
423
-
424
- ```typescript
425
- function calculateMockComplexity(test: TestFile): ComplexityScore {
426
- return {
427
- mockCount: countMocks(test), // >4 is high
428
- setupLines: countSetupLines(test), // >30 is high
429
- setupToTestRatio: setupLines / testLines, // >3 is high
430
- mockNestingDepth: calculateNesting(test), // >2 is high
431
-
432
- recommendation: score > 10 ? 'Use integration test' : 'OK'
433
- };
434
- }
435
- ```
436
-
437
- ## Comprehensive Code Review Checklist
438
-
439
- Use this when reviewing tests (yours or others'):
440
-
441
- ### Structure
442
- ```
443
- □ Test files exist for new code
444
- □ Tests in same commit as implementation
445
- □ Tests follow TDD pattern (fail first)
446
- □ Clear test names describe behavior
447
- ```
448
-
449
- ### Mock Usage
450
- ```
451
- □ Mocks used sparingly (only when needed)
452
- □ Mock setup is simple (<20 lines)
453
- □ Mocks at correct level (I/O boundaries)
454
- □ No assertions on mock elements
455
- □ Complete mock structures (all fields)
456
- ```
457
-
458
- ### Production Code
459
- ```
460
- □ No test-only methods in production classes
461
- □ No test-specific logic in production
462
- □ Clean separation of concerns
463
- □ No test imports in production code
464
- ```
465
-
466
- ### Test Quality
467
- ```
468
- □ Tests verify real behavior
469
- □ Assertions on meaningful results
470
- □ Edge cases covered
471
- □ Error conditions tested
472
- □ Integration tests for critical paths
473
- ```
474
-
475
- ### Red Flags
476
- ```
477
- □ No 'testId="*-mock"' assertions
478
- □ No Partial<T> for mocks
479
- □ No "for testing" comments in production
480
- □ No untested implementation commits
481
- ```
482
-
483
- ## Automated Detection Tools
484
-
485
- ### ESLint Rules
486
-
487
- ```javascript
488
- // .eslintrc.js
489
- module.exports = {
490
- rules: {
491
- // Prevent test-only methods
492
- 'no-restricted-syntax': [
493
- 'error',
494
- {
495
- selector: 'MethodDefinition[key.name=/^(reset|destroy|clear|mock)$/]',
496
- message: 'Potential test-only method in production code'
497
- }
498
- ],
499
-
500
- // Prevent mock test IDs
501
- 'testing-library/prefer-screen-queries': 'error',
502
- 'testing-library/no-node-access': 'error',
503
- }
504
- };
505
- ```
506
-
507
- ### Pre-commit Hook
508
-
509
- ```bash
510
- #!/bin/bash
511
- # .git/hooks/pre-commit
512
-
513
- # Check for mock test IDs
514
- if git diff --cached | grep -q "testId=.*-mock"; then
515
- echo "Error: Found mock test ID in tests"
516
- echo "Are you testing mock behavior?"
517
- exit 1
518
- fi
519
-
520
- # Check for test-only methods
521
- if git diff --cached -- "*.ts" "*.js" | \
522
- grep -v ".test." | \
523
- grep -q "destroy()\|reset()\|clear()"; then
524
- echo "Warning: Potential test-only method in production code"
525
- fi
526
-
527
- # Check test coverage
528
- npm test -- --coverage --coverageThreshold='{"global":{"lines":80}}'
529
- ```
530
-
531
- ## Quick Reference: Detection Summary
532
-
533
- | Anti-Pattern | Key Indicator | Quick Check |
534
- |--------------|---------------|-------------|
535
- | Testing Mock Behavior | testId='*-mock' | Remove mock - test still valid? |
536
- | Test-Only Methods | Method only in .test. files | grep production files |
537
- | Mocking Without Understanding | Can't explain why mocking | Read implementation first |
538
- | Incomplete Mocks | Partial<T> or no types | Check against API docs |
539
- | Tests as Afterthought | Implementation before tests | Check git history |
540
-
541
- ## When to Seek Help
542
-
543
- **STOP and ask your human partner if:**
544
- - Mock setup exceeds 50 lines
545
- - You've mocked >5 modules in one test
546
- - Test mysteriously passes/fails
547
- - You can't explain what test verifies
548
- - Same test needs different mocks in different runs
549
- - Integration test seems simpler than mocks
550
-
551
- **Questions to ask:**
552
- - "Do we need to be using a mock here?"
553
- - "Should this be an integration test?"
554
- - "Am I testing the right thing?"
555
- - "Is this test-only method necessary?"
556
-
557
- ## Prevention Mindset
558
-
559
- **Before writing any test:**
560
- 1. Understand what you're testing (real behavior)
561
- 2. Write test first (TDD)
562
- 3. Watch it fail
563
- 4. Minimal implementation
564
- 5. Watch it pass
565
- 6. Refactor
566
-
567
- **This workflow prevents all five anti-patterns naturally.**
568
-
569
- See [test-driven-development skill](../../test-driven-development/) for complete TDD workflow.