bmalph 2.7.6 → 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 (448) hide show
  1. package/README.md +4 -4
  2. package/bmad/bmm/agents/analyst.agent.yaml +6 -6
  3. package/bmad/bmm/agents/architect.agent.yaml +2 -2
  4. package/bmad/bmm/agents/bmad-skill-manifest.yaml +39 -0
  5. package/bmad/bmm/agents/dev.agent.yaml +2 -2
  6. package/bmad/bmm/agents/pm.agent.yaml +6 -6
  7. package/bmad/bmm/agents/qa.agent.yaml +1 -1
  8. package/bmad/bmm/agents/quick-flow-solo-dev.agent.yaml +7 -3
  9. package/bmad/bmm/agents/sm.agent.yaml +4 -4
  10. package/bmad/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
  11. package/bmad/bmm/agents/tech-writer/tech-writer.agent.yaml +1 -1
  12. package/bmad/bmm/agents/ux-designer.agent.yaml +1 -1
  13. package/bmad/bmm/module-help.csv +26 -25
  14. package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +6 -0
  15. package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +1 -0
  16. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/product-brief.template.md +2 -2
  17. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01-init.md +4 -11
  18. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01b-continue.md +0 -3
  19. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-02-vision.md +5 -11
  20. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-03-users.md +5 -11
  21. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-04-metrics.md +5 -11
  22. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-05-scope.md +5 -11
  23. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-06-complete.md +1 -4
  24. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/workflow.md +4 -6
  25. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/SKILL.md +88 -0
  26. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/artifact-analyzer.md +60 -0
  27. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/opportunity-reviewer.md +44 -0
  28. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/skeptic-reviewer.md +44 -0
  29. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/web-researcher.md +49 -0
  30. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-manifest.json +17 -0
  31. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +1 -0
  32. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/contextual-discovery.md +57 -0
  33. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/draft-and-review.md +86 -0
  34. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/finalize.md +75 -0
  35. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/guided-elicitation.md +70 -0
  36. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/resources/brief-template.md +60 -0
  37. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/SKILL.md +6 -0
  38. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +1 -0
  39. package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-06-research-synthesis.md +2 -1
  40. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/research.template.md +29 -0
  41. package/bmad/bmm/workflows/1-analysis/research/{workflow-domain-research.md → bmad-domain-research/workflow.md} +0 -5
  42. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/SKILL.md +6 -0
  43. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +1 -0
  44. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/research.template.md +29 -0
  45. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
  46. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
  47. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
  48. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
  49. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
  50. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +478 -0
  51. package/bmad/bmm/workflows/1-analysis/research/{workflow-market-research.md → bmad-market-research/workflow.md} +1 -6
  52. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/SKILL.md +6 -0
  53. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +1 -0
  54. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/research.template.md +29 -0
  55. package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-06-research-synthesis.md +2 -1
  56. package/bmad/bmm/workflows/1-analysis/research/{workflow-technical-research.md → bmad-technical-research/workflow.md} +0 -4
  57. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +2 -2
  58. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +2 -2
  59. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +2 -2
  60. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +2 -2
  61. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +2 -1
  62. package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/SKILL.md +6 -0
  63. package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +1 -0
  64. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01-init.md +2 -2
  65. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01b-continue.md +1 -1
  66. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-02-discovery.md +2 -2
  67. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-03-core-experience.md +5 -4
  68. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-04-emotional-response.md +5 -4
  69. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-05-inspiration.md +5 -4
  70. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-06-design-system.md +5 -4
  71. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-07-defining-experience.md +5 -4
  72. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-08-visual-foundation.md +5 -4
  73. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-09-design-directions.md +5 -4
  74. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-10-user-journeys.md +5 -4
  75. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-11-component-strategy.md +5 -4
  76. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-12-ux-patterns.md +5 -4
  77. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-13-responsive-accessibility.md +5 -4
  78. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-14-complete.md +3 -3
  79. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/workflow.md +2 -8
  80. package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/SKILL.md +6 -0
  81. package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +1 -0
  82. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01-discovery.md +3 -8
  83. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01b-legacy-conversion.md +1 -5
  84. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-02-review.md +5 -9
  85. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-03-edit.md +3 -6
  86. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-04-complete.md +2 -5
  87. package/bmad/bmm/workflows/2-plan-workflows/{create-prd/workflow-edit-prd.md → bmad-edit-prd/workflow.md} +2 -4
  88. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/SKILL.md +6 -0
  89. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +1 -0
  90. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/domain-complexity.csv +15 -0
  91. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/prd-purpose.md +197 -0
  92. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/project-types.csv +11 -0
  93. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
  94. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
  95. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
  96. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
  97. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
  98. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
  99. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
  100. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
  101. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
  102. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
  103. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
  104. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
  105. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
  106. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
  107. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/workflow.md +62 -0
  108. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +2 -4
  109. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +1 -1
  110. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +3 -3
  111. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +3 -2
  112. package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +3 -1
  113. package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/SKILL.md +6 -0
  114. package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +1 -0
  115. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-01-document-discovery.md +3 -8
  116. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -5
  117. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +1 -5
  118. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -5
  119. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -6
  120. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-06-final-assessment.md +1 -4
  121. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/workflow.md +1 -6
  122. package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/SKILL.md +6 -0
  123. package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +1 -0
  124. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01-init.md +4 -4
  125. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01b-continue.md +11 -2
  126. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-02-context.md +4 -4
  127. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-03-starter.md +5 -7
  128. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-04-decisions.md +4 -4
  129. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-05-patterns.md +4 -4
  130. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-06-structure.md +4 -4
  131. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-07-validation.md +4 -4
  132. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-08-complete.md +1 -1
  133. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/workflow.md +1 -12
  134. package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/SKILL.md +6 -0
  135. package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +1 -0
  136. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-01-validate-prerequisites.md +37 -41
  137. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-02-design-epics.md +7 -28
  138. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-03-create-stories.md +13 -30
  139. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-04-final-validation.md +3 -21
  140. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/templates/epics-template.md +4 -0
  141. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/workflow.md +1 -6
  142. package/bmad/bmm/workflows/4-implementation/bmad-code-review/SKILL.md +6 -0
  143. package/bmad/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +1 -0
  144. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-01-gather-context.md +61 -0
  145. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +41 -0
  146. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-03-triage.md +50 -0
  147. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +38 -0
  148. package/bmad/bmm/workflows/4-implementation/bmad-code-review/workflow.md +54 -0
  149. package/bmad/bmm/workflows/4-implementation/bmad-correct-course/SKILL.md +6 -0
  150. package/bmad/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +1 -0
  151. package/bmad/bmm/workflows/4-implementation/{correct-course → bmad-correct-course}/checklist.md +1 -1
  152. package/bmad/bmm/workflows/4-implementation/{correct-course/instructions.md → bmad-correct-course/workflow.md} +74 -14
  153. package/bmad/bmm/workflows/4-implementation/bmad-create-story/SKILL.md +6 -0
  154. package/bmad/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +1 -0
  155. package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/checklist.md +9 -10
  156. package/bmad/bmm/workflows/4-implementation/bmad-create-story/discover-inputs.md +88 -0
  157. package/bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md +380 -0
  158. package/bmad/bmm/workflows/4-implementation/bmad-dev-story/SKILL.md +6 -0
  159. package/bmad/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +1 -0
  160. package/bmad/bmm/workflows/4-implementation/{dev-story/instructions.xml → bmad-dev-story/workflow.md} +42 -2
  161. package/bmad/bmm/workflows/4-implementation/bmad-retrospective/SKILL.md +6 -0
  162. package/bmad/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +1 -0
  163. package/bmad/bmm/workflows/4-implementation/{retrospective/instructions.md → bmad-retrospective/workflow.md} +58 -23
  164. package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/SKILL.md +6 -0
  165. package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +1 -0
  166. package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/sprint-status-template.yaml +1 -0
  167. package/bmad/bmm/workflows/4-implementation/{sprint-planning/instructions.md → bmad-sprint-planning/workflow.md} +47 -10
  168. package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/SKILL.md +6 -0
  169. package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +1 -0
  170. package/bmad/bmm/workflows/4-implementation/{sprint-status/instructions.md → bmad-sprint-status/workflow.md} +39 -8
  171. package/bmad/bmm/workflows/bmad-document-project/SKILL.md +6 -0
  172. package/bmad/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +1 -0
  173. package/bmad/bmm/workflows/{document-project → bmad-document-project}/instructions.md +6 -8
  174. package/bmad/bmm/workflows/bmad-document-project/workflow.md +27 -0
  175. package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/deep-dive-instructions.md +3 -2
  176. package/bmad/bmm/workflows/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
  177. package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/full-scan-instructions.md +5 -4
  178. package/bmad/bmm/workflows/bmad-document-project/workflows/full-scan-workflow.md +34 -0
  179. package/bmad/bmm/workflows/bmad-generate-project-context/SKILL.md +6 -0
  180. package/bmad/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +1 -0
  181. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-01-discover.md +3 -1
  182. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-02-generate.md +7 -4
  183. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/workflow.md +2 -8
  184. package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
  185. package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +1 -0
  186. package/bmad/bmm/workflows/{qa/automate/instructions.md → bmad-qa-generate-e2e-tests/workflow.md} +33 -7
  187. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +6 -0
  188. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +1 -0
  189. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-01-mode-detection.md +9 -14
  190. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-02-context-gathering.md +1 -5
  191. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-03-execute.md +1 -5
  192. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-04-self-check.md +1 -5
  193. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-05-adversarial-review.md +8 -18
  194. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-06-resolve-findings.md +0 -2
  195. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/workflow.md +1 -13
  196. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
  197. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
  198. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +51 -0
  199. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +35 -0
  200. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +33 -0
  201. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +50 -0
  202. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +17 -0
  203. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
  204. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +79 -0
  205. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +6 -0
  206. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +1 -0
  207. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-01-understand.md +7 -13
  208. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-02-investigate.md +3 -7
  209. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-03-generate.md +1 -5
  210. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-04-review.md +9 -14
  211. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/workflow.md +1 -7
  212. package/bmad/core/module-help.csv +10 -8
  213. package/bmad/core/module.yaml +1 -1
  214. package/bmad/core/skills/bmad-advanced-elicitation/SKILL.md +6 -0
  215. package/bmad/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +1 -0
  216. package/bmad/core/skills/bmad-advanced-elicitation/workflow.md +135 -0
  217. package/bmad/core/skills/bmad-brainstorming/SKILL.md +6 -0
  218. package/bmad/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +1 -0
  219. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01-session-setup.md +35 -18
  220. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01b-continue.md +4 -2
  221. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02a-user-selected.md +5 -1
  222. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02b-ai-recommended.md +3 -1
  223. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02c-random-selection.md +3 -1
  224. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02d-progressive-flow.md +3 -1
  225. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-03-technique-execution.md +6 -4
  226. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-04-idea-organization.md +4 -2
  227. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/workflow.md +4 -9
  228. package/bmad/core/skills/bmad-distillator/SKILL.md +178 -0
  229. package/bmad/core/skills/bmad-distillator/agents/distillate-compressor.md +116 -0
  230. package/bmad/core/skills/bmad-distillator/agents/round-trip-reconstructor.md +68 -0
  231. package/bmad/core/skills/bmad-distillator/bmad-skill-manifest.yaml +15 -0
  232. package/bmad/core/skills/bmad-distillator/resources/compression-rules.md +51 -0
  233. package/bmad/core/skills/bmad-distillator/resources/distillate-format-reference.md +227 -0
  234. package/bmad/core/skills/bmad-distillator/resources/splitting-strategy.md +78 -0
  235. package/bmad/core/skills/bmad-distillator/scripts/analyze_sources.py +300 -0
  236. package/bmad/core/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +204 -0
  237. package/bmad/core/skills/bmad-editorial-review-prose/SKILL.md +6 -0
  238. package/bmad/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +1 -0
  239. package/bmad/core/skills/bmad-editorial-review-prose/workflow.md +81 -0
  240. package/bmad/core/skills/bmad-editorial-review-structure/SKILL.md +6 -0
  241. package/bmad/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +1 -0
  242. package/bmad/core/skills/bmad-editorial-review-structure/workflow.md +174 -0
  243. package/bmad/core/skills/bmad-help/SKILL.md +6 -0
  244. package/bmad/core/skills/bmad-help/bmad-skill-manifest.yaml +1 -0
  245. package/bmad/core/{tasks/help.md → skills/bmad-help/workflow.md} +11 -8
  246. package/bmad/core/skills/bmad-index-docs/SKILL.md +6 -0
  247. package/bmad/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +1 -0
  248. package/bmad/core/skills/bmad-index-docs/workflow.md +61 -0
  249. package/bmad/core/skills/bmad-party-mode/SKILL.md +6 -0
  250. package/bmad/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +1 -0
  251. package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-03-graceful-exit.md +0 -1
  252. package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/workflow.md +0 -4
  253. package/bmad/core/skills/bmad-review-adversarial-general/SKILL.md +6 -0
  254. package/bmad/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
  255. package/bmad/core/skills/bmad-review-adversarial-general/workflow.md +32 -0
  256. package/bmad/core/skills/bmad-review-edge-case-hunter/SKILL.md +6 -0
  257. package/bmad/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
  258. package/bmad/core/skills/bmad-review-edge-case-hunter/workflow.md +62 -0
  259. package/bmad/core/skills/bmad-shard-doc/SKILL.md +6 -0
  260. package/bmad/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +1 -0
  261. package/bmad/core/skills/bmad-shard-doc/workflow.md +100 -0
  262. package/bmad/core/tasks/bmad-create-prd/SKILL.md +6 -0
  263. package/bmad/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +1 -0
  264. package/bmad/core/tasks/bmad-create-prd/data/domain-complexity.csv +15 -0
  265. package/bmad/core/tasks/bmad-create-prd/data/prd-purpose.md +197 -0
  266. package/bmad/core/tasks/bmad-create-prd/data/project-types.csv +11 -0
  267. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01-init.md +7 -20
  268. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01b-continue.md +29 -21
  269. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02-discovery.md +7 -23
  270. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02b-vision.md +5 -17
  271. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02c-executive-summary.md +5 -17
  272. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-03-success.md +4 -16
  273. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-04-journeys.md +4 -16
  274. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-05-domain.md +7 -20
  275. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-06-innovation.md +8 -23
  276. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-07-project-type.md +6 -21
  277. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-08-scoping.md +5 -17
  278. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-09-functional.md +5 -17
  279. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-10-nonfunctional.md +5 -17
  280. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-11-polish.md +22 -18
  281. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-12-complete.md +4 -13
  282. package/bmad/{bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md → core/tasks/bmad-create-prd/workflow.md} +3 -4
  283. package/bundled-versions.json +1 -1
  284. package/dist/commands/doctor-checks.js +14 -5
  285. package/dist/commands/doctor-checks.js.map +1 -1
  286. package/dist/commands/doctor.js +13 -4
  287. package/dist/commands/doctor.js.map +1 -1
  288. package/dist/commands/init.js +12 -2
  289. package/dist/commands/init.js.map +1 -1
  290. package/dist/commands/run.js +11 -2
  291. package/dist/commands/run.js.map +1 -1
  292. package/dist/commands/status.js +3 -2
  293. package/dist/commands/status.js.map +1 -1
  294. package/dist/commands/watch.js +5 -0
  295. package/dist/commands/watch.js.map +1 -1
  296. package/dist/installer/commands.js +33 -15
  297. package/dist/installer/commands.js.map +1 -1
  298. package/dist/installer/install.js +1 -1
  299. package/dist/installer/install.js.map +1 -1
  300. package/dist/installer/project-files.js +4 -4
  301. package/dist/installer/project-files.js.map +1 -1
  302. package/dist/installer/template-files.js +72 -6
  303. package/dist/installer/template-files.js.map +1 -1
  304. package/dist/platform/codex.js +6 -1
  305. package/dist/platform/codex.js.map +1 -1
  306. package/dist/platform/detect.js +7 -3
  307. package/dist/platform/detect.js.map +1 -1
  308. package/dist/platform/doctor-checks.js +2 -2
  309. package/dist/platform/doctor-checks.js.map +1 -1
  310. package/dist/platform/guidance.js +66 -0
  311. package/dist/platform/guidance.js.map +1 -0
  312. package/dist/platform/instructions-snippet.js +15 -0
  313. package/dist/platform/instructions-snippet.js.map +1 -1
  314. package/dist/platform/opencode.js +20 -0
  315. package/dist/platform/opencode.js.map +1 -0
  316. package/dist/platform/registry.js +2 -0
  317. package/dist/platform/registry.js.map +1 -1
  318. package/dist/platform/types.js +1 -0
  319. package/dist/platform/types.js.map +1 -1
  320. package/dist/reset.js +3 -3
  321. package/dist/reset.js.map +1 -1
  322. package/dist/run/ralph-process.js +51 -7
  323. package/dist/run/ralph-process.js.map +1 -1
  324. package/dist/run/run-dashboard.js +22 -9
  325. package/dist/run/run-dashboard.js.map +1 -1
  326. package/dist/transition/artifact-scan.js +14 -5
  327. package/dist/transition/artifact-scan.js.map +1 -1
  328. package/dist/transition/context.js +11 -3
  329. package/dist/transition/context.js.map +1 -1
  330. package/dist/utils/constants.js +4 -2
  331. package/dist/utils/constants.js.map +1 -1
  332. package/dist/watch/dashboard.js +36 -21
  333. package/dist/watch/dashboard.js.map +1 -1
  334. package/dist/watch/frame-writer.js +83 -0
  335. package/dist/watch/frame-writer.js.map +1 -0
  336. package/dist/watch/renderer.js +179 -54
  337. package/dist/watch/renderer.js.map +1 -1
  338. package/dist/watch/state-reader.js +8 -0
  339. package/dist/watch/state-reader.js.map +1 -1
  340. package/package.json +1 -1
  341. package/ralph/RALPH-REFERENCE.md +4 -4
  342. package/ralph/drivers/claude-code.sh +4 -2
  343. package/ralph/drivers/opencode.sh +147 -0
  344. package/ralph/lib/enable_core.sh +10 -2
  345. package/ralph/lib/response_analyzer.sh +337 -96
  346. package/ralph/lib/wizard_utils.sh +4 -4
  347. package/ralph/ralph_import.sh +9 -1
  348. package/ralph/ralph_loop.sh +428 -15
  349. package/ralph/templates/PROMPT.md +15 -5
  350. package/ralph/templates/ralphrc.template +31 -5
  351. package/slash-commands/advanced-elicitation.md +1 -1
  352. package/slash-commands/adversarial-review.md +1 -1
  353. package/slash-commands/bmad-help.md +1 -1
  354. package/slash-commands/bmalph.md +1 -1
  355. package/slash-commands/brainstorm-project.md +1 -1
  356. package/slash-commands/brainstorming.md +1 -1
  357. package/slash-commands/correct-course.md +1 -1
  358. package/slash-commands/create-architecture.md +1 -1
  359. package/slash-commands/create-brief.md +1 -1
  360. package/slash-commands/create-epics-stories.md +1 -1
  361. package/slash-commands/create-prd.md +1 -1
  362. package/slash-commands/create-story.md +1 -1
  363. package/slash-commands/create-ux.md +1 -1
  364. package/slash-commands/distillator.md +1 -0
  365. package/slash-commands/document-project.md +1 -1
  366. package/slash-commands/domain-research.md +1 -1
  367. package/slash-commands/edge-case-hunter.md +1 -0
  368. package/slash-commands/edit-prd.md +1 -0
  369. package/slash-commands/editorial-prose.md +1 -1
  370. package/slash-commands/editorial-structure.md +1 -1
  371. package/slash-commands/generate-project-context.md +1 -1
  372. package/slash-commands/implementation-readiness.md +1 -1
  373. package/slash-commands/index-docs.md +1 -1
  374. package/slash-commands/market-research.md +1 -1
  375. package/slash-commands/party-mode.md +1 -1
  376. package/slash-commands/qa-automate.md +1 -1
  377. package/slash-commands/quick-dev-new.md +1 -0
  378. package/slash-commands/quick-dev.md +1 -1
  379. package/slash-commands/retrospective.md +1 -1
  380. package/slash-commands/shard-doc.md +1 -1
  381. package/slash-commands/sprint-planning.md +1 -1
  382. package/slash-commands/sprint-status.md +1 -1
  383. package/slash-commands/tech-spec.md +1 -1
  384. package/slash-commands/technical-research.md +1 -1
  385. package/slash-commands/validate-architecture.md +1 -1
  386. package/slash-commands/validate-brief.md +1 -1
  387. package/slash-commands/validate-epics-stories.md +1 -1
  388. package/slash-commands/validate-prd.md +1 -1
  389. package/slash-commands/validate-story.md +1 -1
  390. package/slash-commands/validate-ux.md +1 -1
  391. package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -23
  392. package/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +0 -227
  393. package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -44
  394. package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -54
  395. package/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +0 -346
  396. package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -53
  397. package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -21
  398. package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -53
  399. package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -47
  400. package/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -25
  401. package/bmad/bmm/workflows/document-project/workflow.yaml +0 -22
  402. package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  403. package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  404. package/bmad/bmm/workflows/qa/automate/workflow.yaml +0 -44
  405. package/bmad/core/agents/bmad-master.agent.yaml +0 -30
  406. package/bmad/core/tasks/editorial-review-prose.xml +0 -102
  407. package/bmad/core/tasks/editorial-review-structure.xml +0 -209
  408. package/bmad/core/tasks/index-docs.xml +0 -65
  409. package/bmad/core/tasks/review-adversarial-general.xml +0 -48
  410. package/bmad/core/tasks/shard-doc.xml +0 -108
  411. package/bmad/core/tasks/workflow.xml +0 -235
  412. package/bmad/core/workflows/advanced-elicitation/workflow.xml +0 -117
  413. package/slash-commands/execute-workflow.md +0 -1
  414. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-01-init.md +0 -0
  415. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-02-domain-analysis.md +0 -0
  416. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-03-competitive-landscape.md +0 -0
  417. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-04-regulatory-focus.md +0 -0
  418. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-05-technical-trends.md +0 -0
  419. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-01-init.md +0 -0
  420. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-02-technical-overview.md +0 -0
  421. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-03-integration-patterns.md +0 -0
  422. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-04-architectural-patterns.md +0 -0
  423. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-05-implementation-research.md +0 -0
  424. /package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/ux-design-template.md +0 -0
  425. /package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/templates/readiness-report-template.md +0 -0
  426. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/architecture-decision-template.md +0 -0
  427. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/domain-complexity.csv +0 -0
  428. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/project-types.csv +0 -0
  429. /package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/template.md +0 -0
  430. /package/bmad/bmm/workflows/4-implementation/{dev-story → bmad-dev-story}/checklist.md +0 -0
  431. /package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/checklist.md +0 -0
  432. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/checklist.md +0 -0
  433. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/documentation-requirements.csv +0 -0
  434. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/deep-dive-template.md +0 -0
  435. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/index-template.md +0 -0
  436. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-overview-template.md +0 -0
  437. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-scan-report-schema.json +0 -0
  438. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/source-tree-template.md +0 -0
  439. /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/project-context-template.md +0 -0
  440. /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-03-complete.md +0 -0
  441. /package/bmad/bmm/workflows/{qa/automate → bmad-qa-generate-e2e-tests}/checklist.md +0 -0
  442. /package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/tech-spec-template.md +0 -0
  443. /package/bmad/core/{workflows/advanced-elicitation → skills/bmad-advanced-elicitation}/methods.csv +0 -0
  444. /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/brain-methods.csv +0 -0
  445. /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/template.md +0 -0
  446. /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-01-agent-loading.md +0 -0
  447. /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-02-discussion-orchestration.md +0 -0
  448. /package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/templates/prd-template.md +0 -0
@@ -353,9 +353,17 @@ You are Ralph, an autonomous AI development agent working on a [PROJECT NAME] pr
353
353
  - Search the codebase before assuming something isn't implemented
354
354
  - Use subagents for expensive operations (file searching, analysis)
355
355
  - Write comprehensive tests with clear documentation
356
- - Update @fix_plan.md with your learnings
356
+ - Toggle completed story checkboxes in @fix_plan.md without rewriting story lines
357
357
  - Commit working changes with descriptive messages
358
358
 
359
+ ## Progress Tracking (CRITICAL)
360
+ - Ralph tracks progress by counting story checkboxes in @fix_plan.md
361
+ - When you complete a story, change `- [ ]` to `- [x]` on that exact story line
362
+ - Do NOT remove, rewrite, or reorder story lines in @fix_plan.md
363
+ - Update the checkbox before committing so the monitor updates immediately
364
+ - Set `TASKS_COMPLETED_THIS_LOOP` to the exact number of story checkboxes toggled this loop
365
+ - Only valid values: 0 or 1
366
+
359
367
  ## 🧪 Testing Guidelines (CRITICAL)
360
368
  - LIMIT testing to ~20% of your total effort per loop
361
369
  - PRIORITIZE: Implementation > Documentation > Tests
@@ -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,18 +69,23 @@ _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}"
74
80
  VERBOSE_PROGRESS="${VERBOSE_PROGRESS:-false}"
75
81
  CLAUDE_TIMEOUT_MINUTES="${CLAUDE_TIMEOUT_MINUTES:-15}"
76
- DEFAULT_CLAUDE_ALLOWED_TOOLS="Write,Read,Edit,MultiEdit,Glob,Grep,Task,TodoWrite,WebFetch,WebSearch,NotebookEdit,Bash"
82
+ DEFAULT_CLAUDE_ALLOWED_TOOLS="Write,Read,Edit,MultiEdit,Glob,Grep,Task,TodoWrite,WebFetch,WebSearch,EnterPlanMode,ExitPlanMode,NotebookEdit,Bash"
77
83
  DEFAULT_PERMISSION_DENIAL_MODE="continue"
78
84
 
79
85
  # Modern Claude CLI configuration (Phase 1.1)
80
86
  CLAUDE_OUTPUT_FORMAT="${CLAUDE_OUTPUT_FORMAT:-json}"
81
87
  CLAUDE_ALLOWED_TOOLS="${CLAUDE_ALLOWED_TOOLS:-$DEFAULT_CLAUDE_ALLOWED_TOOLS}"
82
- CLAUDE_PERMISSION_MODE="${CLAUDE_PERMISSION_MODE:-auto}"
88
+ CLAUDE_PERMISSION_MODE="${CLAUDE_PERMISSION_MODE:-bypassPermissions}"
83
89
  CLAUDE_USE_CONTINUE="${CLAUDE_USE_CONTINUE:-true}"
84
90
  PERMISSION_DENIAL_MODE="${PERMISSION_DENIAL_MODE:-$DEFAULT_PERMISSION_DENIAL_MODE}"
85
91
  CLAUDE_SESSION_FILE="$RALPH_DIR/.claude_session_id" # Session ID persistence file
@@ -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.
@@ -108,6 +122,8 @@ VALID_TOOL_PATTERNS=(
108
122
  "WebFetch"
109
123
  "WebSearch"
110
124
  "AskUserQuestion"
125
+ "EnterPlanMode"
126
+ "ExitPlanMode"
111
127
  "Bash"
112
128
  "Bash(git *)"
113
129
  "Bash(npm *)"
@@ -235,6 +251,11 @@ load_ralphrc() {
235
251
  [[ "$_CLI_VERBOSE_PROGRESS" == "true" ]] && VERBOSE_PROGRESS="$_cli_VERBOSE_PROGRESS"
236
252
  [[ -n "$_env_CB_COOLDOWN_MINUTES" ]] && CB_COOLDOWN_MINUTES="$_env_CB_COOLDOWN_MINUTES"
237
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"
238
259
 
239
260
  normalize_claude_permission_mode
240
261
  RALPHRC_FILE="$config_file"
@@ -249,7 +270,7 @@ driver_supports_tool_allowlist() {
249
270
  driver_permission_denial_help() {
250
271
  echo " - Review the active driver's permission or approval settings."
251
272
  echo " - ALLOWED_TOOLS in $RALPHRC_FILE only applies to the Claude Code driver."
252
- echo " - Keep CLAUDE_PERMISSION_MODE=auto for unattended Claude Code loops."
273
+ echo " - Keep CLAUDE_PERMISSION_MODE=bypassPermissions for unattended Claude Code loops."
253
274
  echo " - After updating permissions, reset the session and restart the loop."
254
275
  }
255
276
 
@@ -511,6 +532,17 @@ update_status() {
511
532
  exit_reason: $exit_reason,
512
533
  next_reset: $next_reset
513
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
514
546
  }
515
547
 
516
548
  validate_permission_denial_mode() {
@@ -528,9 +560,34 @@ validate_permission_denial_mode() {
528
560
  esac
529
561
  }
530
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
+
531
588
  normalize_claude_permission_mode() {
532
589
  if [[ -z "${CLAUDE_PERMISSION_MODE:-}" ]]; then
533
- CLAUDE_PERMISSION_MODE="auto"
590
+ CLAUDE_PERMISSION_MODE="bypassPermissions"
534
591
  fi
535
592
  }
536
593
 
@@ -726,9 +783,275 @@ wait_for_reset() {
726
783
  log_status "SUCCESS" "Rate limit reset! Ready for new calls."
727
784
  }
728
785
 
786
+ count_fix_plan_checkboxes() {
787
+ local fix_plan_file="${1:-$RALPH_DIR/@fix_plan.md}"
788
+ local completed_items=0
789
+ local uncompleted_items=0
790
+ local total_items=0
791
+
792
+ if [[ -f "$fix_plan_file" ]]; then
793
+ uncompleted_items=$(grep -cE "^[[:space:]]*- \[ \]" "$fix_plan_file" 2>/dev/null || true)
794
+ [[ -z "$uncompleted_items" ]] && uncompleted_items=0
795
+ completed_items=$(grep -cE "^[[:space:]]*- \[[xX]\]" "$fix_plan_file" 2>/dev/null || true)
796
+ [[ -z "$completed_items" ]] && completed_items=0
797
+ fi
798
+
799
+ total_items=$((completed_items + uncompleted_items))
800
+ printf '%s %s %s\n' "$completed_items" "$uncompleted_items" "$total_items"
801
+ }
802
+
803
+ enforce_fix_plan_progress_tracking() {
804
+ local analysis_file=$1
805
+ local completed_before=$2
806
+ local completed_after=$3
807
+
808
+ if [[ ! -f "$analysis_file" ]]; then
809
+ return 0
810
+ fi
811
+
812
+ local claimed_tasks
813
+ claimed_tasks=$(jq -r '.analysis.tasks_completed_this_loop // 0' "$analysis_file" 2>/dev/null || echo "0")
814
+ if [[ ! "$claimed_tasks" =~ ^-?[0-9]+$ ]]; then
815
+ claimed_tasks=0
816
+ fi
817
+
818
+ local fix_plan_completed_delta=$((completed_after - completed_before))
819
+ local has_progress_tracking_mismatch=false
820
+ if [[ $claimed_tasks -ne $fix_plan_completed_delta || $claimed_tasks -gt 1 || $fix_plan_completed_delta -gt 1 || $fix_plan_completed_delta -lt 0 ]]; then
821
+ has_progress_tracking_mismatch=true
822
+ fi
823
+
824
+ local tmp_file="$analysis_file.tmp"
825
+ if jq \
826
+ --argjson claimed_tasks "$claimed_tasks" \
827
+ --argjson fix_plan_completed_delta "$fix_plan_completed_delta" \
828
+ --argjson has_progress_tracking_mismatch "$has_progress_tracking_mismatch" \
829
+ '
830
+ (.analysis //= {}) |
831
+ .analysis.tasks_completed_this_loop = $claimed_tasks |
832
+ .analysis.fix_plan_completed_delta = $fix_plan_completed_delta |
833
+ .analysis.has_progress_tracking_mismatch = $has_progress_tracking_mismatch |
834
+ if $has_progress_tracking_mismatch then
835
+ .analysis.has_completion_signal = false |
836
+ .analysis.exit_signal = false
837
+ else
838
+ .
839
+ end
840
+ ' "$analysis_file" > "$tmp_file" 2>/dev/null; then
841
+ mv "$tmp_file" "$analysis_file"
842
+ else
843
+ rm -f "$tmp_file" 2>/dev/null
844
+ return 0
845
+ fi
846
+
847
+ if [[ "$has_progress_tracking_mismatch" == "true" ]]; then
848
+ log_status "WARN" "Progress tracking mismatch: claimed $claimed_tasks completed task(s) but checkbox delta was $fix_plan_completed_delta. Completion signals suppressed for this loop."
849
+ fi
850
+
851
+ return 0
852
+ }
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
+
729
1052
  # Check if we should gracefully exit
730
1053
  should_exit_gracefully() {
731
-
1054
+
732
1055
  if [[ ! -f "$EXIT_SIGNALS_FILE" ]]; then
733
1056
  return 1 # Don't exit, file doesn't exist
734
1057
  fi
@@ -792,11 +1115,10 @@ should_exit_gracefully() {
792
1115
  # Fix #144: Only match valid markdown checkboxes, not date entries like [2026-01-29]
793
1116
  # Valid patterns: "- [ ]" (uncompleted) and "- [x]" or "- [X]" (completed)
794
1117
  if [[ -f "$RALPH_DIR/@fix_plan.md" ]]; then
795
- local uncompleted_items=$(grep -cE "^[[:space:]]*- \[ \]" "$RALPH_DIR/@fix_plan.md" 2>/dev/null || true)
796
- [[ -z "$uncompleted_items" ]] && uncompleted_items=0
797
- local completed_items=$(grep -cE "^[[:space:]]*- \[[xX]\]" "$RALPH_DIR/@fix_plan.md" 2>/dev/null || true)
798
- [[ -z "$completed_items" ]] && completed_items=0
799
- local total_items=$((uncompleted_items + completed_items))
1118
+ local completed_items=0
1119
+ local uncompleted_items=0
1120
+ local total_items=0
1121
+ read -r completed_items uncompleted_items total_items < <(count_fix_plan_checkboxes "$RALPH_DIR/@fix_plan.md")
800
1122
 
801
1123
  if [[ $total_items -gt 0 ]] && [[ $completed_items -eq $total_items ]]; then
802
1124
  log_status "WARN" "Exit condition: All @fix_plan.md items completed ($completed_items/$total_items)" >&2
@@ -901,8 +1223,10 @@ build_loop_context() {
901
1223
  # Extract incomplete tasks from @fix_plan.md
902
1224
  # Bug #3 Fix: Support indented markdown checkboxes with [[:space:]]* pattern
903
1225
  if [[ -f "$RALPH_DIR/@fix_plan.md" ]]; then
904
- local incomplete_tasks=$(grep -cE "^[[:space:]]*- \[ \]" "$RALPH_DIR/@fix_plan.md" 2>/dev/null || true)
905
- [[ -z "$incomplete_tasks" ]] && incomplete_tasks=0
1226
+ local completed_tasks=0
1227
+ local incomplete_tasks=0
1228
+ local total_tasks=0
1229
+ read -r completed_tasks incomplete_tasks total_tasks < <(count_fix_plan_checkboxes "$RALPH_DIR/@fix_plan.md")
906
1230
  context+="Remaining tasks: ${incomplete_tasks}. "
907
1231
  fi
908
1232
 
@@ -918,7 +1242,28 @@ build_loop_context() {
918
1242
  if [[ -f "$RESPONSE_ANALYSIS_FILE" ]]; then
919
1243
  local prev_summary=$(jq -r '.analysis.work_summary // ""' "$RESPONSE_ANALYSIS_FILE" 2>/dev/null | head -c 200)
920
1244
  if [[ -n "$prev_summary" && "$prev_summary" != "null" ]]; then
921
- 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
922
1267
  fi
923
1268
  fi
924
1269
 
@@ -1031,7 +1376,15 @@ save_claude_session() {
1031
1376
  # Try to extract session ID from structured output
1032
1377
  if [[ -f "$output_file" ]]; then
1033
1378
  local session_id
1034
- 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
1035
1388
  if [[ -n "$session_id" && "$session_id" != "null" ]]; then
1036
1389
  echo "$session_id" > "$CLAUDE_SESSION_FILE"
1037
1390
  sync_ralph_session_with_driver "$session_id"
@@ -1410,6 +1763,8 @@ execute_claude_code() {
1410
1763
  local loop_count=$1
1411
1764
  local calls_made=$(cat "$CALL_COUNT_FILE" 2>/dev/null || echo "0")
1412
1765
  calls_made=$((calls_made + 1))
1766
+ local fix_plan_completed_before=0
1767
+ read -r fix_plan_completed_before _ _ < <(count_fix_plan_checkboxes "$RALPH_DIR/@fix_plan.md")
1413
1768
 
1414
1769
  # Fix #141: Capture git HEAD SHA at loop start to detect commits as progress
1415
1770
  # Store in file for access by progress detection after Claude execution
@@ -1664,12 +2019,36 @@ EOF
1664
2019
  analyze_response "$output_file" "$loop_count"
1665
2020
  local analysis_exit_code=$?
1666
2021
 
2022
+ local fix_plan_completed_after=0
2023
+ read -r fix_plan_completed_after _ _ < <(count_fix_plan_checkboxes "$RALPH_DIR/@fix_plan.md")
2024
+ enforce_fix_plan_progress_tracking "$RESPONSE_ANALYSIS_FILE" "$fix_plan_completed_before" "$fix_plan_completed_after"
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
+
1667
2044
  # Update exit signals based on analysis
1668
2045
  update_exit_signals
1669
2046
 
1670
2047
  # Log analysis summary
1671
2048
  log_analysis_summary
1672
2049
 
2050
+ PENDING_EXIT_REASON=$(should_exit_gracefully)
2051
+
1673
2052
  # Get file change count for circuit breaker
1674
2053
  # Fix #141: Detect both uncommitted changes AND committed changes
1675
2054
  local files_changed=0
@@ -1730,6 +2109,13 @@ EOF
1730
2109
  fi
1731
2110
  local output_length=$(wc -c < "$output_file" 2>/dev/null || echo 0)
1732
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
+
1733
2119
  # Record result in circuit breaker
1734
2120
  record_loop_result "$loop_count" "$files_changed" "$has_errors" "$output_length"
1735
2121
  local circuit_result=$?
@@ -1777,6 +2163,18 @@ main() {
1777
2163
  exit 1
1778
2164
  fi
1779
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
+
1780
2178
  if [[ "$(driver_name)" == "claude-code" ]]; then
1781
2179
  normalize_claude_permission_mode
1782
2180
 
@@ -1921,6 +2319,21 @@ main() {
1921
2319
  continue
1922
2320
  fi
1923
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
+
1924
2337
  update_status "$loop_count" "$(cat "$CALL_COUNT_FILE")" "completed" "success"
1925
2338
 
1926
2339
  # Brief pause between successful executions
@@ -2006,7 +2419,7 @@ Options:
2006
2419
  Modern CLI Options (Phase 1.1):
2007
2420
  --output-format FORMAT Set driver output format: json or text (default: $CLAUDE_OUTPUT_FORMAT)
2008
2421
  Note: --live mode requires JSON and will auto-switch
2009
- --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
2010
2423
  --no-continue Disable session continuity across loops
2011
2424
  --session-expiry HOURS Set session expiration time in hours (default: $CLAUDE_SESSION_EXPIRY_HOURS)
2012
2425
 
@@ -9,16 +9,24 @@ You are Ralph, an autonomous AI development agent working on a [YOUR PROJECT NAM
9
9
  3. Implement the highest priority item using best practices
10
10
  4. Use parallel subagents for complex tasks (max 100 concurrent)
11
11
  5. Run tests after each implementation
12
- 6. Update documentation and @fix_plan.md
12
+ 6. Update documentation and the completed story checkbox in @fix_plan.md
13
13
 
14
14
  ## Key Principles
15
15
  - ONE task per loop - focus on the most important thing
16
16
  - Search the codebase before assuming something isn't implemented
17
17
  - Use subagents for expensive operations (file searching, analysis)
18
18
  - Write comprehensive tests with clear documentation
19
- - Update .ralph/@fix_plan.md with your learnings
19
+ - Toggle completed story checkboxes in .ralph/@fix_plan.md without rewriting story lines
20
20
  - Commit working changes with descriptive messages
21
21
 
22
+ ## Progress Tracking (CRITICAL)
23
+ - Ralph tracks progress by counting story checkboxes in .ralph/@fix_plan.md
24
+ - When you complete a story, change `- [ ]` to `- [x]` on that exact story line
25
+ - Do NOT remove, rewrite, or reorder story lines in .ralph/@fix_plan.md
26
+ - Update the checkbox before committing so the monitor updates immediately
27
+ - Set `TASKS_COMPLETED_THIS_LOOP` to the exact number of story checkboxes toggled this loop
28
+ - Only valid values: 0 or 1
29
+
22
30
  ## 🧪 Testing Guidelines (CRITICAL)
23
31
  - LIMIT testing to ~20% of your total effort per loop
24
32
  - PRIORITIZE: Implementation > Documentation > Tests
@@ -34,6 +42,8 @@ You are Ralph, an autonomous AI development agent working on a [YOUR PROJECT NAM
34
42
  - Keep .ralph/@AGENT.md updated with build/run instructions
35
43
  - Document the WHY behind tests and implementations
36
44
  - No placeholder implementations - build it properly
45
+
46
+ ## Autonomous Mode (CRITICAL)
37
47
  - do not ask the user questions during loop execution
38
48
  - do not use AskUserQuestion, EnterPlanMode, or ExitPlanMode during loop execution
39
49
  - make the safest reasonable assumption and continue
@@ -47,7 +57,7 @@ You are Ralph, an autonomous AI development agent working on a [YOUR PROJECT NAM
47
57
  ```
48
58
  ---RALPH_STATUS---
49
59
  STATUS: IN_PROGRESS | COMPLETE | BLOCKED
50
- TASKS_COMPLETED_THIS_LOOP: <number>
60
+ TASKS_COMPLETED_THIS_LOOP: 0 | 1
51
61
  FILES_MODIFIED: <number>
52
62
  TESTS_STATUS: PASSING | FAILING | NOT_RUN
53
63
  WORK_TYPE: IMPLEMENTATION | TESTING | DOCUMENTATION | REFACTORING
@@ -71,7 +81,7 @@ Set EXIT_SIGNAL to **true** when ALL of these conditions are met:
71
81
  ```
72
82
  ---RALPH_STATUS---
73
83
  STATUS: IN_PROGRESS
74
- TASKS_COMPLETED_THIS_LOOP: 2
84
+ TASKS_COMPLETED_THIS_LOOP: 1
75
85
  FILES_MODIFIED: 5
76
86
  TESTS_STATUS: PASSING
77
87
  WORK_TYPE: IMPLEMENTATION
@@ -234,7 +244,7 @@ RECOMMENDATION: No remaining work, all .ralph/specs implemented
234
244
  ```
235
245
  ---RALPH_STATUS---
236
246
  STATUS: IN_PROGRESS
237
- TASKS_COMPLETED_THIS_LOOP: 3
247
+ TASKS_COMPLETED_THIS_LOOP: 1
238
248
  FILES_MODIFIED: 7
239
249
  TESTS_STATUS: PASSING
240
250
  WORK_TYPE: IMPLEMENTATION