bmalph 2.7.7 → 2.8.0

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 (432) hide show
  1. package/bmad/bmm/agents/analyst.agent.yaml +6 -6
  2. package/bmad/bmm/agents/architect.agent.yaml +2 -2
  3. package/bmad/bmm/agents/bmad-skill-manifest.yaml +39 -0
  4. package/bmad/bmm/agents/dev.agent.yaml +2 -2
  5. package/bmad/bmm/agents/pm.agent.yaml +6 -6
  6. package/bmad/bmm/agents/qa.agent.yaml +1 -1
  7. package/bmad/bmm/agents/quick-flow-solo-dev.agent.yaml +7 -3
  8. package/bmad/bmm/agents/sm.agent.yaml +4 -4
  9. package/bmad/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
  10. package/bmad/bmm/agents/tech-writer/tech-writer.agent.yaml +1 -1
  11. package/bmad/bmm/agents/ux-designer.agent.yaml +1 -1
  12. package/bmad/bmm/module-help.csv +26 -25
  13. package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +6 -0
  14. package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +1 -0
  15. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/product-brief.template.md +2 -2
  16. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01-init.md +4 -11
  17. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01b-continue.md +0 -3
  18. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-02-vision.md +5 -11
  19. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-03-users.md +5 -11
  20. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-04-metrics.md +5 -11
  21. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-05-scope.md +5 -11
  22. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-06-complete.md +1 -4
  23. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/workflow.md +4 -6
  24. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/SKILL.md +88 -0
  25. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/artifact-analyzer.md +60 -0
  26. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/opportunity-reviewer.md +44 -0
  27. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/skeptic-reviewer.md +44 -0
  28. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/web-researcher.md +49 -0
  29. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-manifest.json +17 -0
  30. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +1 -0
  31. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/contextual-discovery.md +57 -0
  32. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/draft-and-review.md +86 -0
  33. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/finalize.md +75 -0
  34. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/guided-elicitation.md +70 -0
  35. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/resources/brief-template.md +60 -0
  36. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/SKILL.md +6 -0
  37. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +1 -0
  38. package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-06-research-synthesis.md +2 -1
  39. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/research.template.md +29 -0
  40. package/bmad/bmm/workflows/1-analysis/research/{workflow-domain-research.md → bmad-domain-research/workflow.md} +0 -5
  41. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/SKILL.md +6 -0
  42. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +1 -0
  43. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/research.template.md +29 -0
  44. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
  45. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
  46. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
  47. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
  48. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
  49. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +478 -0
  50. package/bmad/bmm/workflows/1-analysis/research/{workflow-market-research.md → bmad-market-research/workflow.md} +1 -6
  51. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/SKILL.md +6 -0
  52. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +1 -0
  53. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/research.template.md +29 -0
  54. package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-06-research-synthesis.md +2 -1
  55. package/bmad/bmm/workflows/1-analysis/research/{workflow-technical-research.md → bmad-technical-research/workflow.md} +0 -4
  56. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +2 -2
  57. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +2 -2
  58. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +2 -2
  59. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +2 -2
  60. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +2 -1
  61. package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/SKILL.md +6 -0
  62. package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +1 -0
  63. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01-init.md +2 -2
  64. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01b-continue.md +1 -1
  65. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-02-discovery.md +2 -2
  66. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-03-core-experience.md +5 -4
  67. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-04-emotional-response.md +5 -4
  68. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-05-inspiration.md +5 -4
  69. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-06-design-system.md +5 -4
  70. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-07-defining-experience.md +5 -4
  71. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-08-visual-foundation.md +5 -4
  72. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-09-design-directions.md +5 -4
  73. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-10-user-journeys.md +5 -4
  74. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-11-component-strategy.md +5 -4
  75. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-12-ux-patterns.md +5 -4
  76. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-13-responsive-accessibility.md +5 -4
  77. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-14-complete.md +3 -3
  78. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/workflow.md +2 -8
  79. package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/SKILL.md +6 -0
  80. package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +1 -0
  81. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01-discovery.md +3 -8
  82. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01b-legacy-conversion.md +1 -5
  83. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-02-review.md +5 -9
  84. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-03-edit.md +3 -6
  85. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-04-complete.md +2 -5
  86. package/bmad/bmm/workflows/2-plan-workflows/{create-prd/workflow-edit-prd.md → bmad-edit-prd/workflow.md} +2 -4
  87. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/SKILL.md +6 -0
  88. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +1 -0
  89. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/domain-complexity.csv +15 -0
  90. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/prd-purpose.md +197 -0
  91. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/project-types.csv +11 -0
  92. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
  93. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
  94. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
  95. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
  96. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
  97. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
  98. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
  99. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
  100. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
  101. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
  102. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
  103. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
  104. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
  105. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
  106. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/workflow.md +62 -0
  107. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +2 -4
  108. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +1 -1
  109. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +3 -3
  110. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +3 -2
  111. package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +3 -1
  112. package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/SKILL.md +6 -0
  113. package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +1 -0
  114. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-01-document-discovery.md +3 -8
  115. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -5
  116. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +1 -5
  117. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -5
  118. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -6
  119. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-06-final-assessment.md +1 -4
  120. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/workflow.md +1 -6
  121. package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/SKILL.md +6 -0
  122. package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +1 -0
  123. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01-init.md +4 -4
  124. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01b-continue.md +11 -2
  125. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-02-context.md +4 -4
  126. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-03-starter.md +5 -7
  127. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-04-decisions.md +4 -4
  128. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-05-patterns.md +4 -4
  129. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-06-structure.md +4 -4
  130. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-07-validation.md +4 -4
  131. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-08-complete.md +1 -1
  132. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/workflow.md +1 -12
  133. package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/SKILL.md +6 -0
  134. package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +1 -0
  135. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-01-validate-prerequisites.md +37 -41
  136. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-02-design-epics.md +7 -28
  137. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-03-create-stories.md +13 -30
  138. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-04-final-validation.md +3 -21
  139. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/templates/epics-template.md +4 -0
  140. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/workflow.md +1 -6
  141. package/bmad/bmm/workflows/4-implementation/bmad-code-review/SKILL.md +6 -0
  142. package/bmad/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +1 -0
  143. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-01-gather-context.md +61 -0
  144. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +41 -0
  145. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-03-triage.md +50 -0
  146. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +38 -0
  147. package/bmad/bmm/workflows/4-implementation/bmad-code-review/workflow.md +54 -0
  148. package/bmad/bmm/workflows/4-implementation/bmad-correct-course/SKILL.md +6 -0
  149. package/bmad/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +1 -0
  150. package/bmad/bmm/workflows/4-implementation/{correct-course → bmad-correct-course}/checklist.md +1 -1
  151. package/bmad/bmm/workflows/4-implementation/{correct-course/instructions.md → bmad-correct-course/workflow.md} +74 -14
  152. package/bmad/bmm/workflows/4-implementation/bmad-create-story/SKILL.md +6 -0
  153. package/bmad/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +1 -0
  154. package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/checklist.md +9 -10
  155. package/bmad/bmm/workflows/4-implementation/bmad-create-story/discover-inputs.md +88 -0
  156. package/bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md +380 -0
  157. package/bmad/bmm/workflows/4-implementation/bmad-dev-story/SKILL.md +6 -0
  158. package/bmad/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +1 -0
  159. package/bmad/bmm/workflows/4-implementation/{dev-story/instructions.xml → bmad-dev-story/workflow.md} +42 -2
  160. package/bmad/bmm/workflows/4-implementation/bmad-retrospective/SKILL.md +6 -0
  161. package/bmad/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +1 -0
  162. package/bmad/bmm/workflows/4-implementation/{retrospective/instructions.md → bmad-retrospective/workflow.md} +58 -23
  163. package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/SKILL.md +6 -0
  164. package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +1 -0
  165. package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/sprint-status-template.yaml +1 -0
  166. package/bmad/bmm/workflows/4-implementation/{sprint-planning/instructions.md → bmad-sprint-planning/workflow.md} +47 -10
  167. package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/SKILL.md +6 -0
  168. package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +1 -0
  169. package/bmad/bmm/workflows/4-implementation/{sprint-status/instructions.md → bmad-sprint-status/workflow.md} +39 -8
  170. package/bmad/bmm/workflows/bmad-document-project/SKILL.md +6 -0
  171. package/bmad/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +1 -0
  172. package/bmad/bmm/workflows/{document-project → bmad-document-project}/instructions.md +6 -8
  173. package/bmad/bmm/workflows/bmad-document-project/workflow.md +27 -0
  174. package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/deep-dive-instructions.md +3 -2
  175. package/bmad/bmm/workflows/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
  176. package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/full-scan-instructions.md +5 -4
  177. package/bmad/bmm/workflows/bmad-document-project/workflows/full-scan-workflow.md +34 -0
  178. package/bmad/bmm/workflows/bmad-generate-project-context/SKILL.md +6 -0
  179. package/bmad/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +1 -0
  180. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-01-discover.md +3 -1
  181. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-02-generate.md +7 -4
  182. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/workflow.md +2 -8
  183. package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
  184. package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +1 -0
  185. package/bmad/bmm/workflows/{qa/automate/instructions.md → bmad-qa-generate-e2e-tests/workflow.md} +33 -7
  186. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +6 -0
  187. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +1 -0
  188. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-01-mode-detection.md +9 -14
  189. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-02-context-gathering.md +1 -5
  190. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-03-execute.md +1 -5
  191. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-04-self-check.md +1 -5
  192. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-05-adversarial-review.md +8 -18
  193. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-06-resolve-findings.md +0 -2
  194. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/workflow.md +1 -13
  195. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
  196. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
  197. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +51 -0
  198. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +35 -0
  199. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +33 -0
  200. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +50 -0
  201. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +17 -0
  202. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
  203. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +79 -0
  204. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +6 -0
  205. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +1 -0
  206. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-01-understand.md +7 -13
  207. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-02-investigate.md +3 -7
  208. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-03-generate.md +1 -5
  209. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-04-review.md +9 -14
  210. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/workflow.md +1 -7
  211. package/bmad/core/module-help.csv +10 -8
  212. package/bmad/core/module.yaml +1 -1
  213. package/bmad/core/skills/bmad-advanced-elicitation/SKILL.md +6 -0
  214. package/bmad/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +1 -0
  215. package/bmad/core/skills/bmad-advanced-elicitation/workflow.md +135 -0
  216. package/bmad/core/skills/bmad-brainstorming/SKILL.md +6 -0
  217. package/bmad/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +1 -0
  218. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01-session-setup.md +35 -18
  219. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01b-continue.md +4 -2
  220. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02a-user-selected.md +5 -1
  221. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02b-ai-recommended.md +3 -1
  222. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02c-random-selection.md +3 -1
  223. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02d-progressive-flow.md +3 -1
  224. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-03-technique-execution.md +6 -4
  225. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-04-idea-organization.md +4 -2
  226. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/workflow.md +4 -9
  227. package/bmad/core/skills/bmad-distillator/SKILL.md +178 -0
  228. package/bmad/core/skills/bmad-distillator/agents/distillate-compressor.md +116 -0
  229. package/bmad/core/skills/bmad-distillator/agents/round-trip-reconstructor.md +68 -0
  230. package/bmad/core/skills/bmad-distillator/bmad-skill-manifest.yaml +15 -0
  231. package/bmad/core/skills/bmad-distillator/resources/compression-rules.md +51 -0
  232. package/bmad/core/skills/bmad-distillator/resources/distillate-format-reference.md +227 -0
  233. package/bmad/core/skills/bmad-distillator/resources/splitting-strategy.md +78 -0
  234. package/bmad/core/skills/bmad-distillator/scripts/analyze_sources.py +300 -0
  235. package/bmad/core/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +204 -0
  236. package/bmad/core/skills/bmad-editorial-review-prose/SKILL.md +6 -0
  237. package/bmad/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +1 -0
  238. package/bmad/core/skills/bmad-editorial-review-prose/workflow.md +81 -0
  239. package/bmad/core/skills/bmad-editorial-review-structure/SKILL.md +6 -0
  240. package/bmad/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +1 -0
  241. package/bmad/core/skills/bmad-editorial-review-structure/workflow.md +174 -0
  242. package/bmad/core/skills/bmad-help/SKILL.md +6 -0
  243. package/bmad/core/skills/bmad-help/bmad-skill-manifest.yaml +1 -0
  244. package/bmad/core/{tasks/help.md → skills/bmad-help/workflow.md} +11 -8
  245. package/bmad/core/skills/bmad-index-docs/SKILL.md +6 -0
  246. package/bmad/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +1 -0
  247. package/bmad/core/skills/bmad-index-docs/workflow.md +61 -0
  248. package/bmad/core/skills/bmad-party-mode/SKILL.md +6 -0
  249. package/bmad/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +1 -0
  250. package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-03-graceful-exit.md +0 -1
  251. package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/workflow.md +0 -4
  252. package/bmad/core/skills/bmad-review-adversarial-general/SKILL.md +6 -0
  253. package/bmad/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
  254. package/bmad/core/skills/bmad-review-adversarial-general/workflow.md +32 -0
  255. package/bmad/core/skills/bmad-review-edge-case-hunter/SKILL.md +6 -0
  256. package/bmad/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
  257. package/bmad/core/skills/bmad-review-edge-case-hunter/workflow.md +62 -0
  258. package/bmad/core/skills/bmad-shard-doc/SKILL.md +6 -0
  259. package/bmad/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +1 -0
  260. package/bmad/core/skills/bmad-shard-doc/workflow.md +100 -0
  261. package/bmad/core/tasks/bmad-create-prd/SKILL.md +6 -0
  262. package/bmad/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +1 -0
  263. package/bmad/core/tasks/bmad-create-prd/data/domain-complexity.csv +15 -0
  264. package/bmad/core/tasks/bmad-create-prd/data/prd-purpose.md +197 -0
  265. package/bmad/core/tasks/bmad-create-prd/data/project-types.csv +11 -0
  266. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01-init.md +7 -20
  267. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01b-continue.md +29 -21
  268. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02-discovery.md +7 -23
  269. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02b-vision.md +5 -17
  270. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02c-executive-summary.md +5 -17
  271. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-03-success.md +4 -16
  272. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-04-journeys.md +4 -16
  273. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-05-domain.md +7 -20
  274. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-06-innovation.md +8 -23
  275. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-07-project-type.md +6 -21
  276. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-08-scoping.md +5 -17
  277. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-09-functional.md +5 -17
  278. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-10-nonfunctional.md +5 -17
  279. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-11-polish.md +22 -18
  280. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-12-complete.md +4 -13
  281. package/bmad/{bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md → core/tasks/bmad-create-prd/workflow.md} +3 -4
  282. package/bundled-versions.json +1 -1
  283. package/dist/commands/doctor-checks.js +14 -5
  284. package/dist/commands/doctor-checks.js.map +1 -1
  285. package/dist/commands/doctor.js +13 -4
  286. package/dist/commands/doctor.js.map +1 -1
  287. package/dist/commands/init.js +12 -2
  288. package/dist/commands/init.js.map +1 -1
  289. package/dist/commands/status.js +3 -2
  290. package/dist/commands/status.js.map +1 -1
  291. package/dist/installer/commands.js +33 -15
  292. package/dist/installer/commands.js.map +1 -1
  293. package/dist/installer/install.js +1 -1
  294. package/dist/installer/install.js.map +1 -1
  295. package/dist/installer/project-files.js +4 -4
  296. package/dist/installer/project-files.js.map +1 -1
  297. package/dist/installer/template-files.js +64 -17
  298. package/dist/installer/template-files.js.map +1 -1
  299. package/dist/platform/codex.js +6 -1
  300. package/dist/platform/codex.js.map +1 -1
  301. package/dist/platform/detect.js +7 -3
  302. package/dist/platform/detect.js.map +1 -1
  303. package/dist/platform/doctor-checks.js +2 -2
  304. package/dist/platform/doctor-checks.js.map +1 -1
  305. package/dist/platform/guidance.js +66 -0
  306. package/dist/platform/guidance.js.map +1 -0
  307. package/dist/platform/instructions-snippet.js +15 -0
  308. package/dist/platform/instructions-snippet.js.map +1 -1
  309. package/dist/platform/opencode.js +20 -0
  310. package/dist/platform/opencode.js.map +1 -0
  311. package/dist/platform/registry.js +2 -0
  312. package/dist/platform/registry.js.map +1 -1
  313. package/dist/platform/types.js +1 -0
  314. package/dist/platform/types.js.map +1 -1
  315. package/dist/reset.js +3 -3
  316. package/dist/reset.js.map +1 -1
  317. package/dist/run/ralph-process.js +51 -7
  318. package/dist/run/ralph-process.js.map +1 -1
  319. package/dist/run/run-dashboard.js +5 -6
  320. package/dist/run/run-dashboard.js.map +1 -1
  321. package/dist/transition/artifact-scan.js +14 -5
  322. package/dist/transition/artifact-scan.js.map +1 -1
  323. package/dist/utils/constants.js +4 -2
  324. package/dist/utils/constants.js.map +1 -1
  325. package/dist/watch/dashboard.js +16 -5
  326. package/dist/watch/dashboard.js.map +1 -1
  327. package/dist/watch/renderer.js +8 -6
  328. package/dist/watch/renderer.js.map +1 -1
  329. package/package.json +1 -1
  330. package/ralph/drivers/opencode.sh +147 -0
  331. package/ralph/lib/response_analyzer.sh +227 -78
  332. package/ralph/lib/wizard_utils.sh +4 -4
  333. package/ralph/ralph_loop.sh +340 -4
  334. package/ralph/templates/ralphrc.template +28 -2
  335. package/slash-commands/advanced-elicitation.md +1 -1
  336. package/slash-commands/adversarial-review.md +1 -1
  337. package/slash-commands/bmad-help.md +1 -1
  338. package/slash-commands/bmalph.md +1 -1
  339. package/slash-commands/brainstorm-project.md +1 -1
  340. package/slash-commands/brainstorming.md +1 -1
  341. package/slash-commands/correct-course.md +1 -1
  342. package/slash-commands/create-architecture.md +1 -1
  343. package/slash-commands/create-brief.md +1 -1
  344. package/slash-commands/create-epics-stories.md +1 -1
  345. package/slash-commands/create-prd.md +1 -1
  346. package/slash-commands/create-story.md +1 -1
  347. package/slash-commands/create-ux.md +1 -1
  348. package/slash-commands/distillator.md +1 -0
  349. package/slash-commands/document-project.md +1 -1
  350. package/slash-commands/domain-research.md +1 -1
  351. package/slash-commands/edge-case-hunter.md +1 -0
  352. package/slash-commands/edit-prd.md +1 -0
  353. package/slash-commands/editorial-prose.md +1 -1
  354. package/slash-commands/editorial-structure.md +1 -1
  355. package/slash-commands/generate-project-context.md +1 -1
  356. package/slash-commands/implementation-readiness.md +1 -1
  357. package/slash-commands/index-docs.md +1 -1
  358. package/slash-commands/market-research.md +1 -1
  359. package/slash-commands/party-mode.md +1 -1
  360. package/slash-commands/qa-automate.md +1 -1
  361. package/slash-commands/quick-dev-new.md +1 -0
  362. package/slash-commands/quick-dev.md +1 -1
  363. package/slash-commands/retrospective.md +1 -1
  364. package/slash-commands/shard-doc.md +1 -1
  365. package/slash-commands/sprint-planning.md +1 -1
  366. package/slash-commands/sprint-status.md +1 -1
  367. package/slash-commands/tech-spec.md +1 -1
  368. package/slash-commands/technical-research.md +1 -1
  369. package/slash-commands/validate-architecture.md +1 -1
  370. package/slash-commands/validate-brief.md +1 -1
  371. package/slash-commands/validate-epics-stories.md +1 -1
  372. package/slash-commands/validate-prd.md +1 -1
  373. package/slash-commands/validate-story.md +1 -1
  374. package/slash-commands/validate-ux.md +1 -1
  375. package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -23
  376. package/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +0 -227
  377. package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -44
  378. package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -54
  379. package/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +0 -346
  380. package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -53
  381. package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -21
  382. package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -53
  383. package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -47
  384. package/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -25
  385. package/bmad/bmm/workflows/document-project/workflow.yaml +0 -22
  386. package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  387. package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  388. package/bmad/bmm/workflows/qa/automate/workflow.yaml +0 -44
  389. package/bmad/core/agents/bmad-master.agent.yaml +0 -30
  390. package/bmad/core/tasks/editorial-review-prose.xml +0 -102
  391. package/bmad/core/tasks/editorial-review-structure.xml +0 -209
  392. package/bmad/core/tasks/index-docs.xml +0 -65
  393. package/bmad/core/tasks/review-adversarial-general.xml +0 -48
  394. package/bmad/core/tasks/shard-doc.xml +0 -108
  395. package/bmad/core/tasks/workflow.xml +0 -235
  396. package/bmad/core/workflows/advanced-elicitation/workflow.xml +0 -117
  397. package/slash-commands/execute-workflow.md +0 -1
  398. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-01-init.md +0 -0
  399. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-02-domain-analysis.md +0 -0
  400. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-03-competitive-landscape.md +0 -0
  401. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-04-regulatory-focus.md +0 -0
  402. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-05-technical-trends.md +0 -0
  403. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-01-init.md +0 -0
  404. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-02-technical-overview.md +0 -0
  405. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-03-integration-patterns.md +0 -0
  406. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-04-architectural-patterns.md +0 -0
  407. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-05-implementation-research.md +0 -0
  408. /package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/ux-design-template.md +0 -0
  409. /package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/templates/readiness-report-template.md +0 -0
  410. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/architecture-decision-template.md +0 -0
  411. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/domain-complexity.csv +0 -0
  412. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/project-types.csv +0 -0
  413. /package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/template.md +0 -0
  414. /package/bmad/bmm/workflows/4-implementation/{dev-story → bmad-dev-story}/checklist.md +0 -0
  415. /package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/checklist.md +0 -0
  416. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/checklist.md +0 -0
  417. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/documentation-requirements.csv +0 -0
  418. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/deep-dive-template.md +0 -0
  419. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/index-template.md +0 -0
  420. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-overview-template.md +0 -0
  421. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-scan-report-schema.json +0 -0
  422. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/source-tree-template.md +0 -0
  423. /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/project-context-template.md +0 -0
  424. /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-03-complete.md +0 -0
  425. /package/bmad/bmm/workflows/{qa/automate → bmad-qa-generate-e2e-tests}/checklist.md +0 -0
  426. /package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/tech-spec-template.md +0 -0
  427. /package/bmad/core/{workflows/advanced-elicitation → skills/bmad-advanced-elicitation}/methods.csv +0 -0
  428. /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/brain-methods.csv +0 -0
  429. /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/template.md +0 -0
  430. /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-01-agent-loading.md +0 -0
  431. /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-02-discussion-orchestration.md +0 -0
  432. /package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/templates/prd-template.md +0 -0
@@ -33,6 +33,7 @@ LIVE_LOG_FILE="$RALPH_DIR/live.log" # Fixed file for live output monitoring
33
33
  CALL_COUNT_FILE="$RALPH_DIR/.call_count"
34
34
  TIMESTAMP_FILE="$RALPH_DIR/.last_reset"
35
35
  USE_TMUX=false
36
+ PENDING_EXIT_REASON=""
36
37
 
37
38
  # Save environment variable state BEFORE setting defaults
38
39
  # These are used by load_ralphrc() to determine which values came from environment
@@ -68,6 +69,11 @@ _cli_CLAUDE_SESSION_EXPIRY_HOURS="${CLAUDE_SESSION_EXPIRY_HOURS:-}"
68
69
  _cli_VERBOSE_PROGRESS="${VERBOSE_PROGRESS:-}"
69
70
  _env_CB_COOLDOWN_MINUTES="${CB_COOLDOWN_MINUTES:-}"
70
71
  _env_CB_AUTO_RESET="${CB_AUTO_RESET:-}"
72
+ _env_TEST_COMMAND="${TEST_COMMAND:-}"
73
+ _env_QUALITY_GATES="${QUALITY_GATES:-}"
74
+ _env_QUALITY_GATE_MODE="${QUALITY_GATE_MODE:-}"
75
+ _env_QUALITY_GATE_TIMEOUT="${QUALITY_GATE_TIMEOUT:-}"
76
+ _env_QUALITY_GATE_ON_COMPLETION_ONLY="${QUALITY_GATE_ON_COMPLETION_ONLY:-}"
71
77
 
72
78
  # Now set defaults (only if not already set by environment)
73
79
  MAX_CALLS_PER_HOUR="${MAX_CALLS_PER_HOUR:-100}"
@@ -93,6 +99,14 @@ RALPH_SESSION_HISTORY_FILE="$RALPH_DIR/.ralph_session_history" # Session transi
93
99
  # Too short = frequent context loss; Too long = stale context causes unpredictable behavior
94
100
  CLAUDE_SESSION_EXPIRY_HOURS=${CLAUDE_SESSION_EXPIRY_HOURS:-24}
95
101
 
102
+ # Quality gates configuration
103
+ TEST_COMMAND="${TEST_COMMAND:-}"
104
+ QUALITY_GATES="${QUALITY_GATES:-}"
105
+ QUALITY_GATE_MODE="${QUALITY_GATE_MODE:-warn}"
106
+ QUALITY_GATE_TIMEOUT="${QUALITY_GATE_TIMEOUT:-120}"
107
+ QUALITY_GATE_ON_COMPLETION_ONLY="${QUALITY_GATE_ON_COMPLETION_ONLY:-false}"
108
+ QUALITY_GATE_RESULTS_FILE="$RALPH_DIR/.quality_gate_results"
109
+
96
110
  # Valid tool patterns for --allowed-tools validation
97
111
  # Default: Claude Code tools. Platform driver overwrites via driver_valid_tools() in main().
98
112
  # Validation runs in main() after load_platform_driver so the correct patterns are in effect.
@@ -237,6 +251,11 @@ load_ralphrc() {
237
251
  [[ "$_CLI_VERBOSE_PROGRESS" == "true" ]] && VERBOSE_PROGRESS="$_cli_VERBOSE_PROGRESS"
238
252
  [[ -n "$_env_CB_COOLDOWN_MINUTES" ]] && CB_COOLDOWN_MINUTES="$_env_CB_COOLDOWN_MINUTES"
239
253
  [[ -n "$_env_CB_AUTO_RESET" ]] && CB_AUTO_RESET="$_env_CB_AUTO_RESET"
254
+ [[ -n "$_env_TEST_COMMAND" ]] && TEST_COMMAND="$_env_TEST_COMMAND"
255
+ [[ -n "$_env_QUALITY_GATES" ]] && QUALITY_GATES="$_env_QUALITY_GATES"
256
+ [[ -n "$_env_QUALITY_GATE_MODE" ]] && QUALITY_GATE_MODE="$_env_QUALITY_GATE_MODE"
257
+ [[ -n "$_env_QUALITY_GATE_TIMEOUT" ]] && QUALITY_GATE_TIMEOUT="$_env_QUALITY_GATE_TIMEOUT"
258
+ [[ -n "$_env_QUALITY_GATE_ON_COMPLETION_ONLY" ]] && QUALITY_GATE_ON_COMPLETION_ONLY="$_env_QUALITY_GATE_ON_COMPLETION_ONLY"
240
259
 
241
260
  normalize_claude_permission_mode
242
261
  RALPHRC_FILE="$config_file"
@@ -513,6 +532,17 @@ update_status() {
513
532
  exit_reason: $exit_reason,
514
533
  next_reset: $next_reset
515
534
  }' > "$STATUS_FILE"
535
+
536
+ # Merge quality gate status if results exist
537
+ if [[ -f "$QUALITY_GATE_RESULTS_FILE" ]]; then
538
+ local qg_tmp="$STATUS_FILE.qg_tmp"
539
+ if jq -s '.[0] * {quality_gates: {overall_status: .[1].overall_status, mode: .[1].mode}}' \
540
+ "$STATUS_FILE" "$QUALITY_GATE_RESULTS_FILE" > "$qg_tmp" 2>/dev/null; then
541
+ mv "$qg_tmp" "$STATUS_FILE"
542
+ else
543
+ rm -f "$qg_tmp" 2>/dev/null
544
+ fi
545
+ fi
516
546
  }
517
547
 
518
548
  validate_permission_denial_mode() {
@@ -530,6 +560,31 @@ validate_permission_denial_mode() {
530
560
  esac
531
561
  }
532
562
 
563
+ validate_quality_gate_mode() {
564
+ local mode=$1
565
+
566
+ case "$mode" in
567
+ warn|block|circuit-breaker)
568
+ return 0
569
+ ;;
570
+ *)
571
+ echo "Error: Invalid QUALITY_GATE_MODE: '$mode'"
572
+ echo "Valid modes: warn block circuit-breaker"
573
+ return 1
574
+ ;;
575
+ esac
576
+ }
577
+
578
+ validate_quality_gate_timeout() {
579
+ local timeout=$1
580
+
581
+ if [[ ! "$timeout" =~ ^[0-9]+$ ]] || [[ "$timeout" -eq 0 ]]; then
582
+ echo "Error: QUALITY_GATE_TIMEOUT must be a positive integer, got: '$timeout'"
583
+ return 1
584
+ fi
585
+ return 0
586
+ }
587
+
533
588
  normalize_claude_permission_mode() {
534
589
  if [[ -z "${CLAUDE_PERMISSION_MODE:-}" ]]; then
535
590
  CLAUDE_PERMISSION_MODE="bypassPermissions"
@@ -796,9 +851,207 @@ enforce_fix_plan_progress_tracking() {
796
851
  return 0
797
852
  }
798
853
 
854
+ # Run the built-in test gate
855
+ # Reads tests_status from .response_analysis. If FAILING and TEST_COMMAND is set,
856
+ # runs the command to verify. Returns JSON with status/verified/output on stdout.
857
+ run_test_gate() {
858
+ local analysis_file=$1
859
+
860
+ if [[ ! -f "$analysis_file" ]]; then
861
+ echo '{"status":"skip","tests_status_reported":"","verified":false,"output":""}'
862
+ return 0
863
+ fi
864
+
865
+ local tests_status
866
+ tests_status=$(jq -r '.analysis.tests_status // "UNKNOWN"' "$analysis_file" 2>/dev/null || echo "UNKNOWN")
867
+
868
+ if [[ "$tests_status" == "UNKNOWN" && -z "$TEST_COMMAND" ]]; then
869
+ echo '{"status":"skip","tests_status_reported":"UNKNOWN","verified":false,"output":""}'
870
+ return 0
871
+ fi
872
+
873
+ if [[ "$tests_status" == "PASSING" && -z "$TEST_COMMAND" ]]; then
874
+ jq -n --arg ts "$tests_status" '{"status":"pass","tests_status_reported":$ts,"verified":false,"output":""}'
875
+ return 0
876
+ fi
877
+
878
+ if [[ -n "$TEST_COMMAND" ]]; then
879
+ local cmd_output=""
880
+ local cmd_exit=0
881
+ cmd_output=$(portable_timeout "${QUALITY_GATE_TIMEOUT}s" bash -c "$TEST_COMMAND" 2>&1) || cmd_exit=$?
882
+ cmd_output="${cmd_output:0:500}"
883
+
884
+ local verified_status="pass"
885
+ if [[ $cmd_exit -ne 0 ]]; then
886
+ verified_status="fail"
887
+ fi
888
+
889
+ jq -n \
890
+ --arg status "$verified_status" \
891
+ --arg ts "$tests_status" \
892
+ --arg out "$cmd_output" \
893
+ '{"status":$status,"tests_status_reported":$ts,"verified":true,"output":$out}'
894
+ return 0
895
+ fi
896
+
897
+ # No TEST_COMMAND, trust the reported status
898
+ local gate_status="pass"
899
+ if [[ "$tests_status" == "FAILING" ]]; then
900
+ gate_status="fail"
901
+ fi
902
+
903
+ jq -n \
904
+ --arg status "$gate_status" \
905
+ --arg ts "$tests_status" \
906
+ '{"status":$status,"tests_status_reported":$ts,"verified":false,"output":""}'
907
+ }
908
+
909
+ # Run user-defined quality gate commands
910
+ # Splits QUALITY_GATES on semicolons, runs each with portable_timeout.
911
+ # Returns JSON array of results on stdout.
912
+ run_custom_gates() {
913
+ if [[ -z "$QUALITY_GATES" ]]; then
914
+ echo "[]"
915
+ return 0
916
+ fi
917
+
918
+ local results="[]"
919
+ local gates
920
+ IFS=";" read -ra gates <<< "$QUALITY_GATES"
921
+
922
+ for gate_cmd in "${gates[@]}"; do
923
+ gate_cmd=$(echo "$gate_cmd" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
924
+ [[ -z "$gate_cmd" ]] && continue
925
+
926
+ local cmd_output=""
927
+ local cmd_exit=0
928
+ local start_time
929
+ start_time=$(date +%s)
930
+ local timed_out="false"
931
+
932
+ cmd_output=$(portable_timeout "${QUALITY_GATE_TIMEOUT}s" bash -c "$gate_cmd" 2>&1) || cmd_exit=$?
933
+
934
+ local end_time
935
+ end_time=$(date +%s)
936
+ local duration=$((end_time - start_time))
937
+
938
+ # portable_timeout returns 124 on timeout
939
+ if [[ $cmd_exit -eq 124 ]]; then
940
+ timed_out="true"
941
+ fi
942
+
943
+ cmd_output="${cmd_output:0:500}"
944
+
945
+ local gate_status="pass"
946
+ if [[ $cmd_exit -ne 0 ]]; then
947
+ gate_status="fail"
948
+ fi
949
+
950
+ results=$(echo "$results" | jq \
951
+ --arg cmd "$gate_cmd" \
952
+ --arg status "$gate_status" \
953
+ --argjson exit_code "$cmd_exit" \
954
+ --arg out "$cmd_output" \
955
+ --argjson dur "$duration" \
956
+ --argjson timed_out "$timed_out" \
957
+ '. += [{"command":$cmd,"status":$status,"exit_code":$exit_code,"output":$out,"duration_seconds":$dur,"timed_out":$timed_out}]'
958
+ )
959
+ done
960
+
961
+ echo "$results"
962
+ }
963
+
964
+ # Orchestrator: run all quality gates and write results file
965
+ # Args: loop_number exit_signal_active
966
+ # Returns (on stdout): 0=pass/warn, 1=block failure, 2=circuit-breaker failure
967
+ run_quality_gates() {
968
+ local loop_number=$1
969
+ local exit_signal_active=${2:-"false"}
970
+
971
+ # Skip if no gates configured
972
+ if [[ -z "$TEST_COMMAND" && -z "$QUALITY_GATES" ]]; then
973
+ echo "0"
974
+ return 0
975
+ fi
976
+
977
+ # Skip if completion-only mode and not completing
978
+ if [[ "$QUALITY_GATE_ON_COMPLETION_ONLY" == "true" && "$exit_signal_active" != "true" ]]; then
979
+ echo "0"
980
+ return 0
981
+ fi
982
+
983
+ local test_gate_json
984
+ test_gate_json=$(run_test_gate "$RESPONSE_ANALYSIS_FILE")
985
+
986
+ local custom_gates_json
987
+ custom_gates_json=$(run_custom_gates)
988
+
989
+ # Determine overall status
990
+ local overall_status="pass"
991
+ local test_gate_status
992
+ test_gate_status=$(echo "$test_gate_json" | jq -r '.status' 2>/dev/null || echo "skip")
993
+ if [[ "$test_gate_status" == "fail" ]]; then
994
+ overall_status="fail"
995
+ fi
996
+
997
+ local custom_fail_count
998
+ custom_fail_count=$(echo "$custom_gates_json" | jq '[.[] | select(.status == "fail")] | length' 2>/dev/null || echo "0")
999
+ if [[ $custom_fail_count -gt 0 ]]; then
1000
+ overall_status="fail"
1001
+ fi
1002
+
1003
+ # Write results file atomically (tmp+mv to avoid truncation on jq failure)
1004
+ local qg_tmp="$QUALITY_GATE_RESULTS_FILE.tmp"
1005
+ if jq -n \
1006
+ --arg timestamp "$(get_iso_timestamp)" \
1007
+ --argjson loop_number "$loop_number" \
1008
+ --argjson test_gate "$test_gate_json" \
1009
+ --argjson custom_gates "$custom_gates_json" \
1010
+ --arg overall_status "$overall_status" \
1011
+ --arg mode "$QUALITY_GATE_MODE" \
1012
+ '{
1013
+ timestamp: $timestamp,
1014
+ loop_number: $loop_number,
1015
+ test_gate: $test_gate,
1016
+ custom_gates: $custom_gates,
1017
+ overall_status: $overall_status,
1018
+ mode: $mode
1019
+ }' > "$qg_tmp" 2>/dev/null; then
1020
+ mv "$qg_tmp" "$QUALITY_GATE_RESULTS_FILE"
1021
+ else
1022
+ rm -f "$qg_tmp" 2>/dev/null
1023
+ fi
1024
+
1025
+ if [[ "$overall_status" == "fail" ]]; then
1026
+ log_status "WARN" "Quality gate failure (mode=$QUALITY_GATE_MODE): test_gate=$test_gate_status, custom_failures=$custom_fail_count"
1027
+ fi
1028
+
1029
+ # Return code based on mode
1030
+ if [[ "$overall_status" == "pass" ]]; then
1031
+ echo "0"
1032
+ return 0
1033
+ fi
1034
+
1035
+ case "$QUALITY_GATE_MODE" in
1036
+ block)
1037
+ echo "1"
1038
+ return 0
1039
+ ;;
1040
+ circuit-breaker)
1041
+ echo "2"
1042
+ return 0
1043
+ ;;
1044
+ *)
1045
+ # warn mode: return 0 even on failure
1046
+ echo "0"
1047
+ return 0
1048
+ ;;
1049
+ esac
1050
+ }
1051
+
799
1052
  # Check if we should gracefully exit
800
1053
  should_exit_gracefully() {
801
-
1054
+
802
1055
  if [[ ! -f "$EXIT_SIGNALS_FILE" ]]; then
803
1056
  return 1 # Don't exit, file doesn't exist
804
1057
  fi
@@ -989,7 +1242,28 @@ build_loop_context() {
989
1242
  if [[ -f "$RESPONSE_ANALYSIS_FILE" ]]; then
990
1243
  local prev_summary=$(jq -r '.analysis.work_summary // ""' "$RESPONSE_ANALYSIS_FILE" 2>/dev/null | head -c 200)
991
1244
  if [[ -n "$prev_summary" && "$prev_summary" != "null" ]]; then
992
- context+="Previous: ${prev_summary}"
1245
+ context+="Previous: ${prev_summary}. "
1246
+ fi
1247
+ fi
1248
+
1249
+ # Add quality gate failure feedback (block and circuit-breaker modes only)
1250
+ if [[ -f "$QUALITY_GATE_RESULTS_FILE" ]]; then
1251
+ local qg_status qg_mode
1252
+ qg_status=$(jq -r '.overall_status // "pass"' "$QUALITY_GATE_RESULTS_FILE" 2>/dev/null)
1253
+ qg_mode=$(jq -r '.mode // "warn"' "$QUALITY_GATE_RESULTS_FILE" 2>/dev/null)
1254
+
1255
+ if [[ "$qg_status" == "fail" && "$qg_mode" != "warn" ]]; then
1256
+ local test_gate_status
1257
+ test_gate_status=$(jq -r '.test_gate.status // "skip"' "$QUALITY_GATE_RESULTS_FILE" 2>/dev/null)
1258
+ if [[ "$test_gate_status" == "fail" ]]; then
1259
+ context+="TESTS FAILING. "
1260
+ fi
1261
+
1262
+ local failed_gates
1263
+ failed_gates=$(jq -r '[.custom_gates[] | select(.status == "fail") | .command | split(" ")[0:2] | join(" ")] | join(", ")' "$QUALITY_GATE_RESULTS_FILE" 2>/dev/null)
1264
+ if [[ -n "$failed_gates" ]]; then
1265
+ context+="QG fail: ${failed_gates}. "
1266
+ fi
993
1267
  fi
994
1268
  fi
995
1269
 
@@ -1102,7 +1376,15 @@ save_claude_session() {
1102
1376
  # Try to extract session ID from structured output
1103
1377
  if [[ -f "$output_file" ]]; then
1104
1378
  local session_id
1105
- session_id=$(extract_session_id_from_output "$output_file" 2>/dev/null || echo "")
1379
+ if declare -F driver_extract_session_id_from_output >/dev/null; then
1380
+ session_id=$(driver_extract_session_id_from_output "$output_file" 2>/dev/null || echo "")
1381
+ fi
1382
+ if [[ -z "$session_id" || "$session_id" == "null" ]]; then
1383
+ session_id=$(extract_session_id_from_output "$output_file" 2>/dev/null || echo "")
1384
+ fi
1385
+ if [[ -z "$session_id" || "$session_id" == "null" ]] && declare -F driver_fallback_session_id >/dev/null; then
1386
+ session_id=$(driver_fallback_session_id "$output_file" 2>/dev/null || echo "")
1387
+ fi
1106
1388
  if [[ -n "$session_id" && "$session_id" != "null" ]]; then
1107
1389
  echo "$session_id" > "$CLAUDE_SESSION_FILE"
1108
1390
  sync_ralph_session_with_driver "$session_id"
@@ -1741,12 +2023,32 @@ EOF
1741
2023
  read -r fix_plan_completed_after _ _ < <(count_fix_plan_checkboxes "$RALPH_DIR/@fix_plan.md")
1742
2024
  enforce_fix_plan_progress_tracking "$RESPONSE_ANALYSIS_FILE" "$fix_plan_completed_before" "$fix_plan_completed_after"
1743
2025
 
2026
+ # Run quality gates
2027
+ local exit_signal_for_gates
2028
+ exit_signal_for_gates=$(jq -r '.analysis.exit_signal // false' "$RESPONSE_ANALYSIS_FILE" 2>/dev/null || echo "false")
2029
+ local qg_result
2030
+ qg_result=$(run_quality_gates "$loop_count" "$exit_signal_for_gates")
2031
+
2032
+ # Block mode: suppress exit signals so the loop keeps running
2033
+ if [[ "$qg_result" == "1" ]]; then
2034
+ log_status "WARN" "Quality gate block: suppressing completion signals"
2035
+ local qg_tmp="$RESPONSE_ANALYSIS_FILE.qg_tmp"
2036
+ if jq '.analysis.has_completion_signal = false | .analysis.exit_signal = false' \
2037
+ "$RESPONSE_ANALYSIS_FILE" > "$qg_tmp" 2>/dev/null; then
2038
+ mv "$qg_tmp" "$RESPONSE_ANALYSIS_FILE"
2039
+ else
2040
+ rm -f "$qg_tmp" 2>/dev/null
2041
+ fi
2042
+ fi
2043
+
1744
2044
  # Update exit signals based on analysis
1745
2045
  update_exit_signals
1746
2046
 
1747
2047
  # Log analysis summary
1748
2048
  log_analysis_summary
1749
2049
 
2050
+ PENDING_EXIT_REASON=$(should_exit_gracefully)
2051
+
1750
2052
  # Get file change count for circuit breaker
1751
2053
  # Fix #141: Detect both uncommitted changes AND committed changes
1752
2054
  local files_changed=0
@@ -1807,6 +2109,13 @@ EOF
1807
2109
  fi
1808
2110
  local output_length=$(wc -c < "$output_file" 2>/dev/null || echo 0)
1809
2111
 
2112
+ # Circuit-breaker mode: override progress signals so circuit breaker sees no-progress
2113
+ if [[ "$qg_result" == "2" ]]; then
2114
+ log_status "WARN" "Quality gate circuit-breaker: overriding progress signals"
2115
+ files_changed=0
2116
+ has_errors="true"
2117
+ fi
2118
+
1810
2119
  # Record result in circuit breaker
1811
2120
  record_loop_result "$loop_count" "$files_changed" "$has_errors" "$output_length"
1812
2121
  local circuit_result=$?
@@ -1854,6 +2163,18 @@ main() {
1854
2163
  exit 1
1855
2164
  fi
1856
2165
 
2166
+ if [[ -n "$QUALITY_GATES" || -n "$TEST_COMMAND" ]]; then
2167
+ if ! validate_quality_gate_mode "$QUALITY_GATE_MODE"; then
2168
+ exit 1
2169
+ fi
2170
+ if ! validate_quality_gate_timeout "$QUALITY_GATE_TIMEOUT"; then
2171
+ exit 1
2172
+ fi
2173
+ if ! has_timeout_command; then
2174
+ log_status "WARN" "No timeout command available. Quality gate and test commands will fail. Install coreutils to enable timeout support."
2175
+ fi
2176
+ fi
2177
+
1857
2178
  if [[ "$(driver_name)" == "claude-code" ]]; then
1858
2179
  normalize_claude_permission_mode
1859
2180
 
@@ -1998,6 +2319,21 @@ main() {
1998
2319
  continue
1999
2320
  fi
2000
2321
 
2322
+ if [[ -n "$PENDING_EXIT_REASON" ]]; then
2323
+ local exit_reason="$PENDING_EXIT_REASON"
2324
+ PENDING_EXIT_REASON=""
2325
+
2326
+ log_status "SUCCESS" "🏁 Graceful exit triggered: $exit_reason"
2327
+ reset_session "project_complete"
2328
+ update_status "$loop_count" "$(cat "$CALL_COUNT_FILE")" "graceful_exit" "completed" "$exit_reason"
2329
+
2330
+ log_status "SUCCESS" "🎉 Ralph has completed the project! Final stats:"
2331
+ log_status "INFO" " - Total loops: $loop_count"
2332
+ log_status "INFO" " - API calls used: $(cat "$CALL_COUNT_FILE")"
2333
+ log_status "INFO" " - Exit reason: $exit_reason"
2334
+ break
2335
+ fi
2336
+
2001
2337
  update_status "$loop_count" "$(cat "$CALL_COUNT_FILE")" "completed" "success"
2002
2338
 
2003
2339
  # Brief pause between successful executions
@@ -2083,7 +2419,7 @@ Options:
2083
2419
  Modern CLI Options (Phase 1.1):
2084
2420
  --output-format FORMAT Set driver output format: json or text (default: $CLAUDE_OUTPUT_FORMAT)
2085
2421
  Note: --live mode requires JSON and will auto-switch
2086
- --allowed-tools TOOLS Claude Code only. Ignored by codex, cursor, and copilot
2422
+ --allowed-tools TOOLS Claude Code only. Ignored by codex, opencode, cursor, and copilot
2087
2423
  --no-continue Disable session continuity across loops
2088
2424
  --session-expiry HOURS Set session expiration time in hours (default: $CLAUDE_SESSION_EXPIRY_HOURS)
2089
2425
 
@@ -10,7 +10,7 @@
10
10
  # PLATFORM DRIVER
11
11
  # =============================================================================
12
12
 
13
- # Platform driver for Ralph loop (claude-code, codex, copilot, or cursor)
13
+ # Platform driver for Ralph loop (claude-code, codex, opencode, copilot, or cursor)
14
14
  PLATFORM_DRIVER="${PLATFORM_DRIVER:-claude-code}"
15
15
 
16
16
  # =============================================================================
@@ -41,7 +41,7 @@ CLAUDE_OUTPUT_FORMAT="json"
41
41
  # =============================================================================
42
42
 
43
43
  # Comma-separated list of allowed tools for Claude Code only.
44
- # Ignored by the codex, cursor, and copilot drivers.
44
+ # Ignored by the codex, opencode, cursor, and copilot drivers.
45
45
  # Opt in to interactive pauses by adding AskUserQuestion manually.
46
46
  ALLOWED_TOOLS="Write,Read,Edit,MultiEdit,Glob,Grep,Task,TodoWrite,WebFetch,WebSearch,EnterPlanMode,ExitPlanMode,NotebookEdit,Bash"
47
47
 
@@ -99,6 +99,32 @@ CB_COOLDOWN_MINUTES=30
99
99
  # WARNING: Reduces circuit breaker safety for unattended operation
100
100
  CB_AUTO_RESET=false
101
101
 
102
+ # =============================================================================
103
+ # QUALITY GATES
104
+ # =============================================================================
105
+
106
+ # Test command to verify TESTS_STATUS claims (e.g. "npm test", "pytest")
107
+ # When set, runs after each loop to confirm the agent's test status report.
108
+ # Leave empty to trust the agent's TESTS_STATUS without verification.
109
+ TEST_COMMAND="${TEST_COMMAND:-}"
110
+
111
+ # Semicolon-separated quality gate commands (e.g. "npm run lint;npm run type-check")
112
+ # Each command runs after the loop iteration completes.
113
+ # Commands must not contain literal semicolons; use wrapper scripts if needed.
114
+ QUALITY_GATES="${QUALITY_GATES:-}"
115
+
116
+ # Failure mode: warn | block | circuit-breaker
117
+ # warn - log failures, continue normally (default)
118
+ # block - suppress exit signal so the loop keeps running
119
+ # circuit-breaker - feed no-progress to circuit breaker
120
+ QUALITY_GATE_MODE="${QUALITY_GATE_MODE:-warn}"
121
+
122
+ # Timeout in seconds for each gate command
123
+ QUALITY_GATE_TIMEOUT="${QUALITY_GATE_TIMEOUT:-120}"
124
+
125
+ # Only run gates when the agent signals completion (EXIT_SIGNAL=true)
126
+ QUALITY_GATE_ON_COMPLETION_ONLY="${QUALITY_GATE_ON_COMPLETION_ONLY:-false}"
127
+
102
128
  # =============================================================================
103
129
  # ADVANCED SETTINGS
104
130
  # =============================================================================
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/workflows/advanced-elicitation/workflow.xml`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-advanced-elicitation/workflow.md`.
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/tasks/review-adversarial-general.xml`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-review-adversarial-general/workflow.md`.
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/tasks/bmad-help.md`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-help/workflow.md`.
@@ -1 +1 @@
1
- Read and follow the agent defined in `_bmad/core/agents/bmad-master.agent.yaml`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-help/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/core/workflows/brainstorming/workflow.md` using `_bmad/bmm/data/project-context-template.md` as context data.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/core/skills/bmad-brainstorming/workflow.md` using `_bmad/bmm/data/project-context-template.md` as context data.
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/workflows/brainstorming/workflow.md`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-brainstorming/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/bmad-correct-course/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/architect.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/3-solutioning/create-architecture/workflow.md` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/architect.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/3-solutioning/bmad-create-architecture/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/1-analysis/create-product-brief/workflow.md` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/1-analysis/bmad-create-product-brief/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/pm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/pm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/pm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md`.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/pm.agent.yaml`, then read and execute the workflow at `_bmad/core/tasks/bmad-create-prd/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/create-story/workflow.yaml` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/ux-designer.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/ux-designer.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/workflow.md` in Create mode.
@@ -0,0 +1 @@
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-distillator/SKILL.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/document-project/workflow.yaml` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/bmad-document-project/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/1-analysis/research/workflow-domain-research.md`.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/1-analysis/research/bmad-domain-research/workflow.md`.
@@ -0,0 +1 @@
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-review-edge-case-hunter/workflow.md`.
@@ -0,0 +1 @@
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/pm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/workflow.md`.
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/tasks/editorial-review-prose.xml`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-editorial-review-prose/workflow.md`.
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/tasks/editorial-review-structure.xml`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-editorial-review-structure/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/generate-project-context/workflow.md`.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/bmad-generate-project-context/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/architect.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md` in Validate mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/architect.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/workflow.md` in Validate mode.
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/tasks/index-docs.xml`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-index-docs/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/1-analysis/research/workflow-market-research.md`.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/analyst.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/1-analysis/research/bmad-market-research/workflow.md`.
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/workflows/party-mode/workflow.md`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-party-mode/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/qa.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/qa/automate/workflow.yaml`.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/qa.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/bmad-qa-generate-e2e-tests/workflow.md`.
@@ -0,0 +1 @@
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/quick-flow-solo-dev.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/quick-flow-solo-dev.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/quick-flow-solo-dev.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml`.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/bmad-retrospective/workflow.md`.
@@ -1 +1 @@
1
- Read and execute the workflow/task at `_bmad/core/tasks/shard-doc.xml`.
1
+ Read and execute the workflow/task at `_bmad/core/skills/bmad-shard-doc/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/bmad-sprint-planning/workflow.md` in Create mode.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml`.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/sm.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/4-implementation/bmad-sprint-status/workflow.md`.
@@ -1 +1 @@
1
- Adopt the role of the agent defined in `_bmad/bmm/agents/quick-flow-solo-dev.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md` in Create mode.
1
+ Adopt the role of the agent defined in `_bmad/bmm/agents/quick-flow-solo-dev.agent.yaml`, then read and execute the workflow at `_bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/workflow.md` in Create mode.