agentvibes 2.17.1 → 2.17.2

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 (340) hide show
  1. package/.claude/config/audio-effects.cfg +1 -1
  2. package/.claude/config/audio-effects.cfg.sample +1 -1
  3. package/.claude/hooks/play-tts-piper.sh +11 -6
  4. package/.claude/hooks/voice-manager.sh +8 -5
  5. package/README.md +2 -2
  6. package/package.json +1 -1
  7. package/src/cli/list-voices.js +1 -1
  8. package/src/installer.js +13 -9
  9. package/src/utils/dependency-checker.js +1 -1
  10. package/.bmad/_cfg/agent-manifest.csv +0 -11
  11. package/.bmad/_cfg/agent-voice-map.csv +0 -11
  12. package/.bmad/_cfg/agents/bmm-analyst.customize.yaml +0 -42
  13. package/.bmad/_cfg/agents/bmm-architect.customize.yaml +0 -42
  14. package/.bmad/_cfg/agents/bmm-dev.customize.yaml +0 -42
  15. package/.bmad/_cfg/agents/bmm-frame-expert.customize.yaml +0 -42
  16. package/.bmad/_cfg/agents/bmm-pm.customize.yaml +0 -42
  17. package/.bmad/_cfg/agents/bmm-sm.customize.yaml +0 -42
  18. package/.bmad/_cfg/agents/bmm-tea.customize.yaml +0 -42
  19. package/.bmad/_cfg/agents/bmm-tech-writer.customize.yaml +0 -42
  20. package/.bmad/_cfg/agents/bmm-ux-designer.customize.yaml +0 -42
  21. package/.bmad/_cfg/agents/core-bmad-master.customize.yaml +0 -42
  22. package/.bmad/_cfg/files-manifest.csv +0 -243
  23. package/.bmad/_cfg/ides/claude-code.yaml +0 -6
  24. package/.bmad/_cfg/manifest.yaml +0 -9
  25. package/.bmad/_cfg/task-manifest.csv +0 -5
  26. package/.bmad/_cfg/tool-manifest.csv +0 -2
  27. package/.bmad/_cfg/workflow-manifest.csv +0 -38
  28. package/.bmad/bmm/README.md +0 -128
  29. package/.bmad/bmm/agents/analyst.md +0 -79
  30. package/.bmad/bmm/agents/analyst.md.backup-pre-tts +0 -75
  31. package/.bmad/bmm/agents/architect.md +0 -80
  32. package/.bmad/bmm/agents/dev.md +0 -70
  33. package/.bmad/bmm/agents/frame-expert.md +0 -72
  34. package/.bmad/bmm/agents/pm.md +0 -84
  35. package/.bmad/bmm/agents/sm.md +0 -93
  36. package/.bmad/bmm/agents/tea.md +0 -80
  37. package/.bmad/bmm/agents/tech-writer.md +0 -84
  38. package/.bmad/bmm/agents/ux-designer.md +0 -79
  39. package/.bmad/bmm/config.yaml +0 -17
  40. package/.bmad/bmm/docs/README.md +0 -236
  41. package/.bmad/bmm/docs/agents-guide.md +0 -1058
  42. package/.bmad/bmm/docs/brownfield-guide.md +0 -762
  43. package/.bmad/bmm/docs/enterprise-agentic-development.md +0 -686
  44. package/.bmad/bmm/docs/faq.md +0 -588
  45. package/.bmad/bmm/docs/glossary.md +0 -320
  46. package/.bmad/bmm/docs/party-mode.md +0 -224
  47. package/.bmad/bmm/docs/quick-spec-flow.md +0 -652
  48. package/.bmad/bmm/docs/quick-start.md +0 -376
  49. package/.bmad/bmm/docs/scale-adaptive-system.md +0 -612
  50. package/.bmad/bmm/docs/test-architecture.md +0 -396
  51. package/.bmad/bmm/docs/workflow-architecture-reference.md +0 -366
  52. package/.bmad/bmm/docs/workflow-document-project-reference.md +0 -489
  53. package/.bmad/bmm/docs/workflows-analysis.md +0 -370
  54. package/.bmad/bmm/docs/workflows-implementation.md +0 -286
  55. package/.bmad/bmm/docs/workflows-planning.md +0 -612
  56. package/.bmad/bmm/docs/workflows-solutioning.md +0 -554
  57. package/.bmad/bmm/teams/default-party.csv +0 -20
  58. package/.bmad/bmm/teams/team-fullstack.yaml +0 -13
  59. package/.bmad/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  60. package/.bmad/bmm/testarch/knowledge/component-tdd.md +0 -486
  61. package/.bmad/bmm/testarch/knowledge/contract-testing.md +0 -957
  62. package/.bmad/bmm/testarch/knowledge/data-factories.md +0 -500
  63. package/.bmad/bmm/testarch/knowledge/email-auth.md +0 -721
  64. package/.bmad/bmm/testarch/knowledge/error-handling.md +0 -725
  65. package/.bmad/bmm/testarch/knowledge/feature-flags.md +0 -750
  66. package/.bmad/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  67. package/.bmad/bmm/testarch/knowledge/network-first.md +0 -486
  68. package/.bmad/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  69. package/.bmad/bmm/testarch/knowledge/playwright-config.md +0 -730
  70. package/.bmad/bmm/testarch/knowledge/probability-impact.md +0 -601
  71. package/.bmad/bmm/testarch/knowledge/risk-governance.md +0 -615
  72. package/.bmad/bmm/testarch/knowledge/selective-testing.md +0 -732
  73. package/.bmad/bmm/testarch/knowledge/selector-resilience.md +0 -527
  74. package/.bmad/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  75. package/.bmad/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  76. package/.bmad/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  77. package/.bmad/bmm/testarch/knowledge/test-quality.md +0 -664
  78. package/.bmad/bmm/testarch/knowledge/timing-debugging.md +0 -372
  79. package/.bmad/bmm/testarch/knowledge/visual-debugging.md +0 -524
  80. package/.bmad/bmm/testarch/tea-index.csv +0 -22
  81. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -112
  82. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  83. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -26
  84. package/.bmad/bmm/workflows/1-analysis/domain-research/instructions.md +0 -425
  85. package/.bmad/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  86. package/.bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -28
  87. package/.bmad/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  88. package/.bmad/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
  89. package/.bmad/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  90. package/.bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -45
  91. package/.bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  92. package/.bmad/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  93. package/.bmad/bmm/workflows/1-analysis/research/checklist.md +0 -299
  94. package/.bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  95. package/.bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -438
  96. package/.bmad/bmm/workflows/1-analysis/research/instructions-market.md +0 -675
  97. package/.bmad/bmm/workflows/1-analysis/research/instructions-router.md +0 -134
  98. package/.bmad/bmm/workflows/1-analysis/research/instructions-technical.md +0 -534
  99. package/.bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  100. package/.bmad/bmm/workflows/1-analysis/research/template-market.md +0 -347
  101. package/.bmad/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  102. package/.bmad/bmm/workflows/1-analysis/research/workflow.yaml +0 -44
  103. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/epics-template.md +0 -80
  104. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/instructions.md +0 -616
  105. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/workflow.yaml +0 -53
  106. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  107. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1308
  108. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
  109. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -61
  110. package/.bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
  111. package/.bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
  112. package/.bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -703
  113. package/.bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -204
  114. package/.bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
  115. package/.bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -52
  116. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
  117. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
  118. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -436
  119. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -980
  120. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  121. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
  122. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -58
  123. package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
  124. package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
  125. package/.bmad/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
  126. package/.bmad/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
  127. package/.bmad/bmm/workflows/3-solutioning/architecture/instructions.md +0 -768
  128. package/.bmad/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
  129. package/.bmad/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -55
  130. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
  131. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
  132. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
  133. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -62
  134. package/.bmad/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
  135. package/.bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -22
  136. package/.bmad/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
  137. package/.bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -60
  138. package/.bmad/bmm/workflows/4-implementation/correct-course/checklist.md +0 -279
  139. package/.bmad/bmm/workflows/4-implementation/correct-course/instructions.md +0 -206
  140. package/.bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -56
  141. package/.bmad/bmm/workflows/4-implementation/create-story/checklist.md +0 -240
  142. package/.bmad/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
  143. package/.bmad/bmm/workflows/4-implementation/create-story/template.md +0 -51
  144. package/.bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -71
  145. package/.bmad/bmm/workflows/4-implementation/dev-story/checklist.md +0 -38
  146. package/.bmad/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
  147. package/.bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -56
  148. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
  149. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
  150. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
  151. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -57
  152. package/.bmad/bmm/workflows/4-implementation/retrospective/instructions.md +0 -1443
  153. package/.bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -56
  154. package/.bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +0 -33
  155. package/.bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +0 -234
  156. package/.bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +0 -55
  157. package/.bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -49
  158. package/.bmad/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
  159. package/.bmad/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
  160. package/.bmad/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
  161. package/.bmad/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -61
  162. package/.bmad/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
  163. package/.bmad/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -26
  164. package/.bmad/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
  165. package/.bmad/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -23
  166. package/.bmad/bmm/workflows/document-project/checklist.md +0 -245
  167. package/.bmad/bmm/workflows/document-project/documentation-requirements.csv +0 -12
  168. package/.bmad/bmm/workflows/document-project/instructions.md +0 -222
  169. package/.bmad/bmm/workflows/document-project/templates/deep-dive-template.md +0 -345
  170. package/.bmad/bmm/workflows/document-project/templates/index-template.md +0 -169
  171. package/.bmad/bmm/workflows/document-project/templates/project-overview-template.md +0 -103
  172. package/.bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
  173. package/.bmad/bmm/workflows/document-project/templates/source-tree-template.md +0 -135
  174. package/.bmad/bmm/workflows/document-project/workflow.yaml +0 -29
  175. package/.bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
  176. package/.bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  177. package/.bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
  178. package/.bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  179. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-helpers.md +0 -127
  180. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-library.json +0 -90
  181. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-templates.yaml +0 -127
  182. package/.bmad/bmm/workflows/frame-expert/_shared/validate-json-instructions.md +0 -79
  183. package/.bmad/bmm/workflows/frame-expert/create-dataflow/checklist.md +0 -39
  184. package/.bmad/bmm/workflows/frame-expert/create-dataflow/instructions.md +0 -131
  185. package/.bmad/bmm/workflows/frame-expert/create-dataflow/workflow.yaml +0 -23
  186. package/.bmad/bmm/workflows/frame-expert/create-diagram/checklist.md +0 -43
  187. package/.bmad/bmm/workflows/frame-expert/create-diagram/instructions.md +0 -142
  188. package/.bmad/bmm/workflows/frame-expert/create-diagram/workflow.yaml +0 -24
  189. package/.bmad/bmm/workflows/frame-expert/create-flowchart/checklist.md +0 -49
  190. package/.bmad/bmm/workflows/frame-expert/create-flowchart/instructions.md +0 -242
  191. package/.bmad/bmm/workflows/frame-expert/create-flowchart/workflow.yaml +0 -27
  192. package/.bmad/bmm/workflows/frame-expert/create-wireframe/checklist.md +0 -38
  193. package/.bmad/bmm/workflows/frame-expert/create-wireframe/instructions.md +0 -133
  194. package/.bmad/bmm/workflows/frame-expert/create-wireframe/workflow.yaml +0 -23
  195. package/.bmad/bmm/workflows/techdoc/documentation-standards.md +0 -262
  196. package/.bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  197. package/.bmad/bmm/workflows/testarch/atdd/checklist.md +0 -373
  198. package/.bmad/bmm/workflows/testarch/atdd/instructions.md +0 -785
  199. package/.bmad/bmm/workflows/testarch/atdd/workflow.yaml +0 -45
  200. package/.bmad/bmm/workflows/testarch/automate/checklist.md +0 -580
  201. package/.bmad/bmm/workflows/testarch/automate/instructions.md +0 -1303
  202. package/.bmad/bmm/workflows/testarch/automate/workflow.yaml +0 -52
  203. package/.bmad/bmm/workflows/testarch/ci/checklist.md +0 -246
  204. package/.bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
  205. package/.bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
  206. package/.bmad/bmm/workflows/testarch/ci/instructions.md +0 -517
  207. package/.bmad/bmm/workflows/testarch/ci/workflow.yaml +0 -45
  208. package/.bmad/bmm/workflows/testarch/framework/checklist.md +0 -321
  209. package/.bmad/bmm/workflows/testarch/framework/instructions.md +0 -455
  210. package/.bmad/bmm/workflows/testarch/framework/workflow.yaml +0 -47
  211. package/.bmad/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
  212. package/.bmad/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
  213. package/.bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
  214. package/.bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -47
  215. package/.bmad/bmm/workflows/testarch/test-design/checklist.md +0 -234
  216. package/.bmad/bmm/workflows/testarch/test-design/instructions.md +0 -782
  217. package/.bmad/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
  218. package/.bmad/bmm/workflows/testarch/test-design/workflow.yaml +0 -48
  219. package/.bmad/bmm/workflows/testarch/test-review/checklist.md +0 -470
  220. package/.bmad/bmm/workflows/testarch/test-review/instructions.md +0 -608
  221. package/.bmad/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
  222. package/.bmad/bmm/workflows/testarch/test-review/workflow.yaml +0 -46
  223. package/.bmad/bmm/workflows/testarch/trace/checklist.md +0 -654
  224. package/.bmad/bmm/workflows/testarch/trace/instructions.md +0 -1045
  225. package/.bmad/bmm/workflows/testarch/trace/trace-template.md +0 -673
  226. package/.bmad/bmm/workflows/testarch/trace/workflow.yaml +0 -55
  227. package/.bmad/bmm/workflows/workflow-status/init/instructions.md +0 -334
  228. package/.bmad/bmm/workflows/workflow-status/init/workflow.yaml +0 -28
  229. package/.bmad/bmm/workflows/workflow-status/instructions.md +0 -388
  230. package/.bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -138
  231. package/.bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -126
  232. package/.bmad/bmm/workflows/workflow-status/paths/game-design.yaml +0 -52
  233. package/.bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -122
  234. package/.bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -113
  235. package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  236. package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  237. package/.bmad/bmm/workflows/workflow-status/project-levels.yaml +0 -59
  238. package/.bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -24
  239. package/.bmad/bmm/workflows/workflow-status/workflow.yaml +0 -28
  240. package/.bmad/core/agents/bmad-master.md +0 -72
  241. package/.bmad/core/agents/bmad-web-orchestrator.agent.xml +0 -113
  242. package/.bmad/core/config.yaml +0 -1
  243. package/.bmad/core/tasks/adv-elicit-methods.csv +0 -39
  244. package/.bmad/core/tasks/advanced-elicitation-methods.csv +0 -21
  245. package/.bmad/core/tasks/advanced-elicitation.xml +0 -106
  246. package/.bmad/core/tasks/index-docs.xml +0 -65
  247. package/.bmad/core/tasks/validate-workflow.xml +0 -89
  248. package/.bmad/core/tasks/workflow.xml +0 -270
  249. package/.bmad/core/tools/shard-doc.xml +0 -109
  250. package/.bmad/core/workflows/brainstorming/README.md +0 -261
  251. package/.bmad/core/workflows/brainstorming/brain-methods.csv +0 -36
  252. package/.bmad/core/workflows/brainstorming/instructions.md +0 -315
  253. package/.bmad/core/workflows/brainstorming/template.md +0 -106
  254. package/.bmad/core/workflows/brainstorming/workflow.yaml +0 -38
  255. package/.bmad/core/workflows/party-mode/instructions.md +0 -203
  256. package/.bmad/core/workflows/party-mode/workflow.yaml +0 -28
  257. package/.bmad/docs/claude-code-instructions.md +0 -25
  258. package/.claude/commands/BMad/analyst.md +0 -88
  259. package/.claude/commands/BMad/architect.md +0 -89
  260. package/.claude/commands/BMad/bmad-master.md +0 -114
  261. package/.claude/commands/BMad/bmad-orchestrator.md +0 -151
  262. package/.claude/commands/BMad/dev.md +0 -85
  263. package/.claude/commands/BMad/pm.md +0 -88
  264. package/.claude/commands/BMad/po.md +0 -83
  265. package/.claude/commands/BMad/qa.md +0 -91
  266. package/.claude/commands/BMad/sm.md +0 -69
  267. package/.claude/commands/BMad/tasks/advanced-elicitation.md +0 -123
  268. package/.claude/commands/BMad/tasks/apply-qa-fixes.md +0 -154
  269. package/.claude/commands/BMad/tasks/brownfield-create-epic.md +0 -166
  270. package/.claude/commands/BMad/tasks/brownfield-create-story.md +0 -153
  271. package/.claude/commands/BMad/tasks/correct-course.md +0 -76
  272. package/.claude/commands/BMad/tasks/create-brownfield-story.md +0 -318
  273. package/.claude/commands/BMad/tasks/create-deep-research-prompt.md +0 -284
  274. package/.claude/commands/BMad/tasks/create-doc.md +0 -107
  275. package/.claude/commands/BMad/tasks/create-next-story.md +0 -118
  276. package/.claude/commands/BMad/tasks/document-project.md +0 -349
  277. package/.claude/commands/BMad/tasks/execute-checklist.md +0 -92
  278. package/.claude/commands/BMad/tasks/facilitate-brainstorming-session.md +0 -142
  279. package/.claude/commands/BMad/tasks/generate-ai-frontend-prompt.md +0 -57
  280. package/.claude/commands/BMad/tasks/index-docs.md +0 -179
  281. package/.claude/commands/BMad/tasks/kb-mode-interaction.md +0 -81
  282. package/.claude/commands/BMad/tasks/nfr-assess.md +0 -349
  283. package/.claude/commands/BMad/tasks/qa-gate.md +0 -167
  284. package/.claude/commands/BMad/tasks/review-story.md +0 -320
  285. package/.claude/commands/BMad/tasks/risk-profile.md +0 -359
  286. package/.claude/commands/BMad/tasks/shard-doc.md +0 -191
  287. package/.claude/commands/BMad/tasks/test-design.md +0 -180
  288. package/.claude/commands/BMad/tasks/trace-requirements.md +0 -270
  289. package/.claude/commands/BMad/tasks/validate-next-story.md +0 -140
  290. package/.claude/commands/BMad/ux-expert.md +0 -73
  291. package/.claude/commands/bmad/bmm/agents/analyst.md +0 -14
  292. package/.claude/commands/bmad/bmm/agents/architect.md +0 -14
  293. package/.claude/commands/bmad/bmm/agents/dev.md +0 -14
  294. package/.claude/commands/bmad/bmm/agents/frame-expert.md +0 -14
  295. package/.claude/commands/bmad/bmm/agents/pm.md +0 -14
  296. package/.claude/commands/bmad/bmm/agents/sm.md +0 -14
  297. package/.claude/commands/bmad/bmm/agents/tea.md +0 -14
  298. package/.claude/commands/bmad/bmm/agents/tech-writer.md +0 -14
  299. package/.claude/commands/bmad/bmm/agents/ux-designer.md +0 -14
  300. package/.claude/commands/bmad/bmm/workflows/architecture.md +0 -13
  301. package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +0 -13
  302. package/.claude/commands/bmad/bmm/workflows/code-review.md +0 -13
  303. package/.claude/commands/bmad/bmm/workflows/correct-course.md +0 -13
  304. package/.claude/commands/bmad/bmm/workflows/create-dataflow.md +0 -13
  305. package/.claude/commands/bmad/bmm/workflows/create-diagram.md +0 -13
  306. package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +0 -13
  307. package/.claude/commands/bmad/bmm/workflows/create-flowchart.md +0 -13
  308. package/.claude/commands/bmad/bmm/workflows/create-story.md +0 -13
  309. package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +0 -13
  310. package/.claude/commands/bmad/bmm/workflows/create-wireframe.md +0 -13
  311. package/.claude/commands/bmad/bmm/workflows/dev-story.md +0 -13
  312. package/.claude/commands/bmad/bmm/workflows/document-project.md +0 -13
  313. package/.claude/commands/bmad/bmm/workflows/domain-research.md +0 -13
  314. package/.claude/commands/bmad/bmm/workflows/epic-tech-context.md +0 -13
  315. package/.claude/commands/bmad/bmm/workflows/implementation-readiness.md +0 -13
  316. package/.claude/commands/bmad/bmm/workflows/prd.md +0 -13
  317. package/.claude/commands/bmad/bmm/workflows/product-brief.md +0 -13
  318. package/.claude/commands/bmad/bmm/workflows/research.md +0 -13
  319. package/.claude/commands/bmad/bmm/workflows/retrospective.md +0 -13
  320. package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +0 -13
  321. package/.claude/commands/bmad/bmm/workflows/story-context.md +0 -13
  322. package/.claude/commands/bmad/bmm/workflows/story-done.md +0 -13
  323. package/.claude/commands/bmad/bmm/workflows/story-ready.md +0 -13
  324. package/.claude/commands/bmad/bmm/workflows/tech-spec.md +0 -13
  325. package/.claude/commands/bmad/bmm/workflows/workflow-init.md +0 -13
  326. package/.claude/commands/bmad/bmm/workflows/workflow-status.md +0 -13
  327. package/.claude/commands/bmad/core/agents/bmad-master.md +0 -14
  328. package/.claude/commands/bmad/core/tasks/advanced-elicitation.md +0 -9
  329. package/.claude/commands/bmad/core/tasks/index-docs.md +0 -9
  330. package/.claude/commands/bmad/core/tools/shard-doc.md +0 -9
  331. package/.claude/commands/bmad/core/workflows/brainstorming.md +0 -13
  332. package/.claude/commands/bmad/core/workflows/party-mode.md +0 -13
  333. package/.claude/config/background-music-position.txt +0 -25
  334. package/.claude/config/background-music-volume.txt +0 -1
  335. package/.claude/config/background-music.cfg +0 -1
  336. package/.claude/config/tts-verbosity.txt +0 -1
  337. package/.claude/github-star-reminder.txt +0 -1
  338. package/.claude/hooks/bmad-party-manager.sh +0 -225
  339. package/.claude/piper-voices-dir.txt +0 -1
  340. package/.mcp.json +0 -23
@@ -1,732 +0,0 @@
1
- # Selective and Targeted Test Execution
2
-
3
- ## Principle
4
-
5
- Run only the tests you need, when you need them. Use tags/grep to slice suites by risk priority (not directory structure), filter by spec patterns or git diff to focus on impacted areas, and combine priority metadata (P0-P3) with change detection to optimize pre-commit vs. CI execution. Document the selection strategy clearly so teams understand when full regression is mandatory.
6
-
7
- ## Rationale
8
-
9
- Running the entire test suite on every commit wastes time and resources. Smart test selection provides fast feedback (smoke tests in minutes, full regression in hours) while maintaining confidence. The "32+ ways of selective testing" philosophy balances speed with coverage: quick loops for developers, comprehensive validation before deployment. Poorly documented selection leads to confusion about when tests run and why.
10
-
11
- ## Pattern Examples
12
-
13
- ### Example 1: Tag-Based Execution with Priority Levels
14
-
15
- **Context**: Organize tests by risk priority and execution stage using grep/tag patterns.
16
-
17
- **Implementation**:
18
-
19
- ```typescript
20
- // tests/e2e/checkout.spec.ts
21
- import { test, expect } from '@playwright/test';
22
-
23
- /**
24
- * Tag-based test organization
25
- * - @smoke: Critical path tests (run on every commit, < 5 min)
26
- * - @regression: Full test suite (run pre-merge, < 30 min)
27
- * - @p0: Critical business functions (payment, auth, data integrity)
28
- * - @p1: Core features (primary user journeys)
29
- * - @p2: Secondary features (supporting functionality)
30
- * - @p3: Nice-to-have (cosmetic, non-critical)
31
- */
32
-
33
- test.describe('Checkout Flow', () => {
34
- // P0 + Smoke: Must run on every commit
35
- test('@smoke @p0 should complete purchase with valid payment', async ({ page }) => {
36
- await page.goto('/checkout');
37
- await page.getByTestId('card-number').fill('4242424242424242');
38
- await page.getByTestId('submit-payment').click();
39
-
40
- await expect(page.getByTestId('order-confirmation')).toBeVisible();
41
- });
42
-
43
- // P0 but not smoke: Run pre-merge
44
- test('@regression @p0 should handle payment decline gracefully', async ({ page }) => {
45
- await page.goto('/checkout');
46
- await page.getByTestId('card-number').fill('4000000000000002'); // Decline card
47
- await page.getByTestId('submit-payment').click();
48
-
49
- await expect(page.getByTestId('payment-error')).toBeVisible();
50
- await expect(page.getByTestId('payment-error')).toContainText('declined');
51
- });
52
-
53
- // P1 + Smoke: Important but not critical
54
- test('@smoke @p1 should apply discount code', async ({ page }) => {
55
- await page.goto('/checkout');
56
- await page.getByTestId('promo-code').fill('SAVE10');
57
- await page.getByTestId('apply-promo').click();
58
-
59
- await expect(page.getByTestId('discount-applied')).toBeVisible();
60
- });
61
-
62
- // P2: Run in full regression only
63
- test('@regression @p2 should remember saved payment methods', async ({ page }) => {
64
- await page.goto('/checkout');
65
- await expect(page.getByTestId('saved-cards')).toBeVisible();
66
- });
67
-
68
- // P3: Low priority, run nightly or weekly
69
- test('@nightly @p3 should display checkout page analytics', async ({ page }) => {
70
- await page.goto('/checkout');
71
- const analyticsEvents = await page.evaluate(() => (window as any).__ANALYTICS__);
72
- expect(analyticsEvents).toBeDefined();
73
- });
74
- });
75
- ```
76
-
77
- **package.json scripts**:
78
-
79
- ```json
80
- {
81
- "scripts": {
82
- "test": "playwright test",
83
- "test:smoke": "playwright test --grep '@smoke'",
84
- "test:p0": "playwright test --grep '@p0'",
85
- "test:p0-p1": "playwright test --grep '@p0|@p1'",
86
- "test:regression": "playwright test --grep '@regression'",
87
- "test:nightly": "playwright test --grep '@nightly'",
88
- "test:not-slow": "playwright test --grep-invert '@slow'",
89
- "test:critical-smoke": "playwright test --grep '@smoke.*@p0'"
90
- }
91
- }
92
- ```
93
-
94
- **Cypress equivalent**:
95
-
96
- ```javascript
97
- // cypress/e2e/checkout.cy.ts
98
- describe('Checkout Flow', { tags: ['@checkout'] }, () => {
99
- it('should complete purchase', { tags: ['@smoke', '@p0'] }, () => {
100
- cy.visit('/checkout');
101
- cy.get('[data-cy="card-number"]').type('4242424242424242');
102
- cy.get('[data-cy="submit-payment"]').click();
103
- cy.get('[data-cy="order-confirmation"]').should('be.visible');
104
- });
105
-
106
- it('should handle decline', { tags: ['@regression', '@p0'] }, () => {
107
- cy.visit('/checkout');
108
- cy.get('[data-cy="card-number"]').type('4000000000000002');
109
- cy.get('[data-cy="submit-payment"]').click();
110
- cy.get('[data-cy="payment-error"]').should('be.visible');
111
- });
112
- });
113
-
114
- // cypress.config.ts
115
- export default defineConfig({
116
- e2e: {
117
- env: {
118
- grepTags: process.env.GREP_TAGS || '',
119
- grepFilterSpecs: true,
120
- },
121
- setupNodeEvents(on, config) {
122
- require('@cypress/grep/src/plugin')(config);
123
- return config;
124
- },
125
- },
126
- });
127
- ```
128
-
129
- **Usage**:
130
-
131
- ```bash
132
- # Playwright
133
- npm run test:smoke # Run all @smoke tests
134
- npm run test:p0 # Run all P0 tests
135
- npm run test -- --grep "@smoke.*@p0" # Run tests with BOTH tags
136
-
137
- # Cypress (with @cypress/grep plugin)
138
- npx cypress run --env grepTags="@smoke"
139
- npx cypress run --env grepTags="@p0+@smoke" # AND logic
140
- npx cypress run --env grepTags="@p0 @p1" # OR logic
141
- ```
142
-
143
- **Key Points**:
144
-
145
- - **Multiple tags per test**: Combine priority (@p0) with stage (@smoke)
146
- - **AND/OR logic**: Grep supports complex filtering
147
- - **Clear naming**: Tags document test importance
148
- - **Fast feedback**: @smoke runs < 5 min, full suite < 30 min
149
- - **CI integration**: Different jobs run different tag combinations
150
-
151
- ---
152
-
153
- ### Example 2: Spec Filter Pattern (File-Based Selection)
154
-
155
- **Context**: Run tests by file path pattern or directory for targeted execution.
156
-
157
- **Implementation**:
158
-
159
- ```bash
160
- #!/bin/bash
161
- # scripts/selective-spec-runner.sh
162
- # Run tests based on spec file patterns
163
-
164
- set -e
165
-
166
- PATTERN=${1:-"**/*.spec.ts"}
167
- TEST_ENV=${TEST_ENV:-local}
168
-
169
- echo "🎯 Selective Spec Runner"
170
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
171
- echo "Pattern: $PATTERN"
172
- echo "Environment: $TEST_ENV"
173
- echo ""
174
-
175
- # Pattern examples and their use cases
176
- case "$PATTERN" in
177
- "**/checkout*")
178
- echo "📦 Running checkout-related tests"
179
- npx playwright test --grep-files="**/checkout*"
180
- ;;
181
- "**/auth*"|"**/login*"|"**/signup*")
182
- echo "🔐 Running authentication tests"
183
- npx playwright test --grep-files="**/auth*|**/login*|**/signup*"
184
- ;;
185
- "tests/e2e/**")
186
- echo "🌐 Running all E2E tests"
187
- npx playwright test tests/e2e/
188
- ;;
189
- "tests/integration/**")
190
- echo "🔌 Running all integration tests"
191
- npx playwright test tests/integration/
192
- ;;
193
- "tests/component/**")
194
- echo "🧩 Running all component tests"
195
- npx playwright test tests/component/
196
- ;;
197
- *)
198
- echo "🔍 Running tests matching pattern: $PATTERN"
199
- npx playwright test "$PATTERN"
200
- ;;
201
- esac
202
- ```
203
-
204
- **Playwright config for file filtering**:
205
-
206
- ```typescript
207
- // playwright.config.ts
208
- import { defineConfig, devices } from '@playwright/test';
209
-
210
- export default defineConfig({
211
- // ... other config
212
-
213
- // Project-based organization
214
- projects: [
215
- {
216
- name: 'smoke',
217
- testMatch: /.*smoke.*\.spec\.ts/,
218
- retries: 0,
219
- },
220
- {
221
- name: 'e2e',
222
- testMatch: /tests\/e2e\/.*\.spec\.ts/,
223
- retries: 2,
224
- },
225
- {
226
- name: 'integration',
227
- testMatch: /tests\/integration\/.*\.spec\.ts/,
228
- retries: 1,
229
- },
230
- {
231
- name: 'component',
232
- testMatch: /tests\/component\/.*\.spec\.ts/,
233
- use: { ...devices['Desktop Chrome'] },
234
- },
235
- ],
236
- });
237
- ```
238
-
239
- **Advanced pattern matching**:
240
-
241
- ```typescript
242
- // scripts/run-by-component.ts
243
- /**
244
- * Run tests related to specific component(s)
245
- * Usage: npm run test:component UserProfile,Settings
246
- */
247
-
248
- import { execSync } from 'child_process';
249
-
250
- const components = process.argv[2]?.split(',') || [];
251
-
252
- if (components.length === 0) {
253
- console.error('❌ No components specified');
254
- console.log('Usage: npm run test:component UserProfile,Settings');
255
- process.exit(1);
256
- }
257
-
258
- // Convert component names to glob patterns
259
- const patterns = components.map((comp) => `**/*${comp}*.spec.ts`).join(' ');
260
-
261
- console.log(`🧩 Running tests for components: ${components.join(', ')}`);
262
- console.log(`Patterns: ${patterns}`);
263
-
264
- try {
265
- execSync(`npx playwright test ${patterns}`, {
266
- stdio: 'inherit',
267
- env: { ...process.env, CI: 'false' },
268
- });
269
- } catch (error) {
270
- process.exit(1);
271
- }
272
- ```
273
-
274
- **package.json scripts**:
275
-
276
- ```json
277
- {
278
- "scripts": {
279
- "test:checkout": "playwright test **/checkout*.spec.ts",
280
- "test:auth": "playwright test **/auth*.spec.ts **/login*.spec.ts",
281
- "test:e2e": "playwright test tests/e2e/",
282
- "test:integration": "playwright test tests/integration/",
283
- "test:component": "ts-node scripts/run-by-component.ts",
284
- "test:project": "playwright test --project",
285
- "test:smoke-project": "playwright test --project smoke"
286
- }
287
- }
288
- ```
289
-
290
- **Key Points**:
291
-
292
- - **Glob patterns**: Wildcards match file paths flexibly
293
- - **Project isolation**: Separate projects have different configs
294
- - **Component targeting**: Run tests for specific features
295
- - **Directory-based**: Organize tests by type (e2e, integration, component)
296
- - **CI optimization**: Run subsets in parallel CI jobs
297
-
298
- ---
299
-
300
- ### Example 3: Diff-Based Test Selection (Changed Files Only)
301
-
302
- **Context**: Run only tests affected by code changes for maximum speed.
303
-
304
- **Implementation**:
305
-
306
- ```bash
307
- #!/bin/bash
308
- # scripts/test-changed-files.sh
309
- # Intelligent test selection based on git diff
310
-
311
- set -e
312
-
313
- BASE_BRANCH=${BASE_BRANCH:-main}
314
- TEST_ENV=${TEST_ENV:-local}
315
-
316
- echo "🔍 Changed File Test Selector"
317
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
318
- echo "Base branch: $BASE_BRANCH"
319
- echo "Environment: $TEST_ENV"
320
- echo ""
321
-
322
- # Get changed files
323
- CHANGED_FILES=$(git diff --name-only $BASE_BRANCH...HEAD)
324
-
325
- if [ -z "$CHANGED_FILES" ]; then
326
- echo "✅ No files changed. Skipping tests."
327
- exit 0
328
- fi
329
-
330
- echo "Changed files:"
331
- echo "$CHANGED_FILES" | sed 's/^/ - /'
332
- echo ""
333
-
334
- # Arrays to collect test specs
335
- DIRECT_TEST_FILES=()
336
- RELATED_TEST_FILES=()
337
- RUN_ALL_TESTS=false
338
-
339
- # Process each changed file
340
- while IFS= read -r file; do
341
- case "$file" in
342
- # Changed test files: run them directly
343
- *.spec.ts|*.spec.js|*.test.ts|*.test.js|*.cy.ts|*.cy.js)
344
- DIRECT_TEST_FILES+=("$file")
345
- ;;
346
-
347
- # Critical config changes: run ALL tests
348
- package.json|package-lock.json|playwright.config.ts|cypress.config.ts|tsconfig.json|.github/workflows/*)
349
- echo "⚠️ Critical file changed: $file"
350
- RUN_ALL_TESTS=true
351
- break
352
- ;;
353
-
354
- # Component changes: find related tests
355
- src/components/*.tsx|src/components/*.jsx)
356
- COMPONENT_NAME=$(basename "$file" | sed 's/\.[^.]*$//')
357
- echo "🧩 Component changed: $COMPONENT_NAME"
358
-
359
- # Find tests matching component name
360
- FOUND_TESTS=$(find tests -name "*${COMPONENT_NAME}*.spec.ts" -o -name "*${COMPONENT_NAME}*.cy.ts" 2>/dev/null || true)
361
- if [ -n "$FOUND_TESTS" ]; then
362
- while IFS= read -r test_file; do
363
- RELATED_TEST_FILES+=("$test_file")
364
- done <<< "$FOUND_TESTS"
365
- fi
366
- ;;
367
-
368
- # Utility/lib changes: run integration + unit tests
369
- src/utils/*|src/lib/*|src/helpers/*)
370
- echo "⚙️ Utility file changed: $file"
371
- RELATED_TEST_FILES+=($(find tests/unit tests/integration -name "*.spec.ts" 2>/dev/null || true))
372
- ;;
373
-
374
- # API changes: run integration + e2e tests
375
- src/api/*|src/services/*|src/controllers/*)
376
- echo "🔌 API file changed: $file"
377
- RELATED_TEST_FILES+=($(find tests/integration tests/e2e -name "*.spec.ts" 2>/dev/null || true))
378
- ;;
379
-
380
- # Type changes: run all TypeScript tests
381
- *.d.ts|src/types/*)
382
- echo "📝 Type definition changed: $file"
383
- RUN_ALL_TESTS=true
384
- break
385
- ;;
386
-
387
- # Documentation only: skip tests
388
- *.md|docs/*|README*)
389
- echo "📄 Documentation changed: $file (no tests needed)"
390
- ;;
391
-
392
- *)
393
- echo "❓ Unclassified change: $file (running smoke tests)"
394
- RELATED_TEST_FILES+=($(find tests -name "*smoke*.spec.ts" 2>/dev/null || true))
395
- ;;
396
- esac
397
- done <<< "$CHANGED_FILES"
398
-
399
- # Execute tests based on analysis
400
- if [ "$RUN_ALL_TESTS" = true ]; then
401
- echo ""
402
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
403
- echo "🚨 Running FULL test suite (critical changes detected)"
404
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
405
- npm run test
406
- exit $?
407
- fi
408
-
409
- # Combine and deduplicate test files
410
- ALL_TEST_FILES=(${DIRECT_TEST_FILES[@]} ${RELATED_TEST_FILES[@]})
411
- UNIQUE_TEST_FILES=($(echo "${ALL_TEST_FILES[@]}" | tr ' ' '\n' | sort -u))
412
-
413
- if [ ${#UNIQUE_TEST_FILES[@]} -eq 0 ]; then
414
- echo ""
415
- echo "✅ No tests found for changed files. Running smoke tests."
416
- npm run test:smoke
417
- exit $?
418
- fi
419
-
420
- echo ""
421
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
422
- echo "🎯 Running ${#UNIQUE_TEST_FILES[@]} test file(s)"
423
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
424
-
425
- for test_file in "${UNIQUE_TEST_FILES[@]}"; do
426
- echo " - $test_file"
427
- done
428
-
429
- echo ""
430
- npm run test -- "${UNIQUE_TEST_FILES[@]}"
431
- ```
432
-
433
- **GitHub Actions integration**:
434
-
435
- ```yaml
436
- # .github/workflows/test-changed.yml
437
- name: Test Changed Files
438
- on:
439
- pull_request:
440
- types: [opened, synchronize, reopened]
441
-
442
- jobs:
443
- detect-and-test:
444
- runs-on: ubuntu-latest
445
- steps:
446
- - uses: actions/checkout@v4
447
- with:
448
- fetch-depth: 0 # Full history for accurate diff
449
-
450
- - name: Get changed files
451
- id: changed-files
452
- uses: tj-actions/changed-files@v40
453
- with:
454
- files: |
455
- src/**
456
- tests/**
457
- *.config.ts
458
- files_ignore: |
459
- **/*.md
460
- docs/**
461
-
462
- - name: Run tests for changed files
463
- if: steps.changed-files.outputs.any_changed == 'true'
464
- run: |
465
- echo "Changed files: ${{ steps.changed-files.outputs.all_changed_files }}"
466
- bash scripts/test-changed-files.sh
467
- env:
468
- BASE_BRANCH: ${{ github.base_ref }}
469
- TEST_ENV: staging
470
- ```
471
-
472
- **Key Points**:
473
-
474
- - **Intelligent mapping**: Code changes → related tests
475
- - **Critical file detection**: Config changes = full suite
476
- - **Component mapping**: UI changes → component + E2E tests
477
- - **Fast feedback**: Run only what's needed (< 2 min typical)
478
- - **Safety net**: Unrecognized changes run smoke tests
479
-
480
- ---
481
-
482
- ### Example 4: Promotion Rules (Pre-Commit → CI → Staging → Production)
483
-
484
- **Context**: Progressive test execution strategy across deployment stages.
485
-
486
- **Implementation**:
487
-
488
- ```typescript
489
- // scripts/test-promotion-strategy.ts
490
- /**
491
- * Test Promotion Strategy
492
- * Defines which tests run at each stage of the development lifecycle
493
- */
494
-
495
- export type TestStage = 'pre-commit' | 'ci-pr' | 'ci-merge' | 'staging' | 'production';
496
-
497
- export type TestPromotion = {
498
- stage: TestStage;
499
- description: string;
500
- testCommand: string;
501
- timebudget: string; // minutes
502
- required: boolean;
503
- failureAction: 'block' | 'warn' | 'alert';
504
- };
505
-
506
- export const TEST_PROMOTION_RULES: Record<TestStage, TestPromotion> = {
507
- 'pre-commit': {
508
- stage: 'pre-commit',
509
- description: 'Local developer checks before git commit',
510
- testCommand: 'npm run test:smoke',
511
- timebudget: '2',
512
- required: true,
513
- failureAction: 'block',
514
- },
515
- 'ci-pr': {
516
- stage: 'ci-pr',
517
- description: 'CI checks on pull request creation/update',
518
- testCommand: 'npm run test:changed && npm run test:p0-p1',
519
- timebudget: '10',
520
- required: true,
521
- failureAction: 'block',
522
- },
523
- 'ci-merge': {
524
- stage: 'ci-merge',
525
- description: 'Full regression before merge to main',
526
- testCommand: 'npm run test:regression',
527
- timebudget: '30',
528
- required: true,
529
- failureAction: 'block',
530
- },
531
- staging: {
532
- stage: 'staging',
533
- description: 'Post-deployment validation in staging environment',
534
- testCommand: 'npm run test:e2e -- --grep "@smoke"',
535
- timebudget: '15',
536
- required: true,
537
- failureAction: 'block',
538
- },
539
- production: {
540
- stage: 'production',
541
- description: 'Production smoke tests post-deployment',
542
- testCommand: 'npm run test:e2e:prod -- --grep "@smoke.*@p0"',
543
- timebudget: '5',
544
- required: false,
545
- failureAction: 'alert',
546
- },
547
- };
548
-
549
- /**
550
- * Get tests to run for a specific stage
551
- */
552
- export function getTestsForStage(stage: TestStage): TestPromotion {
553
- return TEST_PROMOTION_RULES[stage];
554
- }
555
-
556
- /**
557
- * Validate if tests can be promoted to next stage
558
- */
559
- export function canPromote(currentStage: TestStage, testsPassed: boolean): boolean {
560
- const promotion = TEST_PROMOTION_RULES[currentStage];
561
-
562
- if (!promotion.required) {
563
- return true; // Non-required tests don't block promotion
564
- }
565
-
566
- return testsPassed;
567
- }
568
- ```
569
-
570
- **Husky pre-commit hook**:
571
-
572
- ```bash
573
- #!/bin/bash
574
- # .husky/pre-commit
575
- # Run smoke tests before allowing commit
576
-
577
- echo "🔍 Running pre-commit tests..."
578
-
579
- npm run test:smoke
580
-
581
- if [ $? -ne 0 ]; then
582
- echo ""
583
- echo "❌ Pre-commit tests failed!"
584
- echo "Please fix failures before committing."
585
- echo ""
586
- echo "To skip (NOT recommended): git commit --no-verify"
587
- exit 1
588
- fi
589
-
590
- echo "✅ Pre-commit tests passed"
591
- ```
592
-
593
- **GitHub Actions workflow**:
594
-
595
- ```yaml
596
- # .github/workflows/test-promotion.yml
597
- name: Test Promotion Strategy
598
- on:
599
- pull_request:
600
- push:
601
- branches: [main]
602
- workflow_dispatch:
603
-
604
- jobs:
605
- # Stage 1: PR tests (changed + P0-P1)
606
- pr-tests:
607
- if: github.event_name == 'pull_request'
608
- runs-on: ubuntu-latest
609
- timeout-minutes: 10
610
- steps:
611
- - uses: actions/checkout@v4
612
- - name: Run PR-level tests
613
- run: |
614
- npm run test:changed
615
- npm run test:p0-p1
616
-
617
- # Stage 2: Full regression (pre-merge)
618
- regression-tests:
619
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
620
- runs-on: ubuntu-latest
621
- timeout-minutes: 30
622
- steps:
623
- - uses: actions/checkout@v4
624
- - name: Run full regression
625
- run: npm run test:regression
626
-
627
- # Stage 3: Staging validation (post-deploy)
628
- staging-smoke:
629
- if: github.event_name == 'workflow_dispatch'
630
- runs-on: ubuntu-latest
631
- timeout-minutes: 15
632
- steps:
633
- - uses: actions/checkout@v4
634
- - name: Run staging smoke tests
635
- run: npm run test:e2e -- --grep "@smoke"
636
- env:
637
- TEST_ENV: staging
638
-
639
- # Stage 4: Production smoke (post-deploy, non-blocking)
640
- production-smoke:
641
- if: github.event_name == 'workflow_dispatch'
642
- runs-on: ubuntu-latest
643
- timeout-minutes: 5
644
- continue-on-error: true # Don't fail deployment if smoke tests fail
645
- steps:
646
- - uses: actions/checkout@v4
647
- - name: Run production smoke tests
648
- run: npm run test:e2e:prod -- --grep "@smoke.*@p0"
649
- env:
650
- TEST_ENV: production
651
-
652
- - name: Alert on failure
653
- if: failure()
654
- uses: 8398a7/action-slack@v3
655
- with:
656
- status: ${{ job.status }}
657
- text: '🚨 Production smoke tests failed!'
658
- webhook_url: ${{ secrets.SLACK_WEBHOOK }}
659
- ```
660
-
661
- **Selection strategy documentation**:
662
-
663
- ````markdown
664
- # Test Selection Strategy
665
-
666
- ## Test Promotion Stages
667
-
668
- | Stage | Tests Run | Time Budget | Blocks Deploy | Failure Action |
669
- | ---------- | ------------------- | ----------- | ------------- | -------------- |
670
- | Pre-Commit | Smoke (@smoke) | 2 min | ✅ Yes | Block commit |
671
- | CI PR | Changed + P0-P1 | 10 min | ✅ Yes | Block merge |
672
- | CI Merge | Full regression | 30 min | ✅ Yes | Block deploy |
673
- | Staging | E2E smoke | 15 min | ✅ Yes | Rollback |
674
- | Production | Critical smoke only | 5 min | ❌ No | Alert team |
675
-
676
- ## When Full Regression Runs
677
-
678
- Full regression suite (`npm run test:regression`) runs in these scenarios:
679
-
680
- - ✅ Before merging to `main` (CI Merge stage)
681
- - ✅ Nightly builds (scheduled workflow)
682
- - ✅ Manual trigger (workflow_dispatch)
683
- - ✅ Release candidate testing
684
-
685
- Full regression does NOT run on:
686
-
687
- - ❌ Every PR commit (too slow)
688
- - ❌ Pre-commit hooks (too slow)
689
- - ❌ Production deployments (deploy-blocking)
690
-
691
- ## Override Scenarios
692
-
693
- Skip tests (emergency only):
694
-
695
- ```bash
696
- git commit --no-verify # Skip pre-commit hook
697
- gh pr merge --admin # Force merge (requires admin)
698
- ```
699
- ````
700
-
701
- ```
702
-
703
- **Key Points**:
704
- - **Progressive validation**: More tests at each stage
705
- - **Time budgets**: Clear expectations per stage
706
- - **Blocking vs. alerting**: Production tests don't block deploy
707
- - **Documentation**: Team knows when full regression runs
708
- - **Emergency overrides**: Documented but discouraged
709
-
710
- ---
711
-
712
- ## Test Selection Strategy Checklist
713
-
714
- Before implementing selective testing, verify:
715
-
716
- - [ ] **Tag strategy defined**: @smoke, @p0-p3, @regression documented
717
- - [ ] **Time budgets set**: Each stage has clear timeout (smoke < 5 min, full < 30 min)
718
- - [ ] **Changed file mapping**: Code changes → test selection logic implemented
719
- - [ ] **Promotion rules documented**: README explains when full regression runs
720
- - [ ] **CI integration**: GitHub Actions uses selective strategy
721
- - [ ] **Local parity**: Developers can run same selections locally
722
- - [ ] **Emergency overrides**: Skip mechanisms documented (--no-verify, admin merge)
723
- - [ ] **Metrics tracked**: Monitor test execution time and selection accuracy
724
-
725
- ## Integration Points
726
-
727
- - Used in workflows: `*ci` (CI/CD setup), `*automate` (test generation with tags)
728
- - Related fragments: `ci-burn-in.md`, `test-priorities-matrix.md`, `test-quality.md`
729
- - Selection tools: Playwright --grep, Cypress @cypress/grep, git diff
730
-
731
- _Source: 32+ selective testing strategies blog, Murat testing philosophy, SEON CI optimization_
732
- ```