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.
- package/bmad/bmm/agents/analyst.agent.yaml +6 -6
- package/bmad/bmm/agents/architect.agent.yaml +2 -2
- package/bmad/bmm/agents/bmad-skill-manifest.yaml +39 -0
- package/bmad/bmm/agents/dev.agent.yaml +2 -2
- package/bmad/bmm/agents/pm.agent.yaml +6 -6
- package/bmad/bmm/agents/qa.agent.yaml +1 -1
- package/bmad/bmm/agents/quick-flow-solo-dev.agent.yaml +7 -3
- package/bmad/bmm/agents/sm.agent.yaml +4 -4
- package/bmad/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
- package/bmad/bmm/agents/tech-writer/tech-writer.agent.yaml +1 -1
- package/bmad/bmm/agents/ux-designer.agent.yaml +1 -1
- package/bmad/bmm/module-help.csv +26 -25
- package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +6 -0
- package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/product-brief.template.md +2 -2
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01-init.md +4 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01b-continue.md +0 -3
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-02-vision.md +5 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-03-users.md +5 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-04-metrics.md +5 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-05-scope.md +5 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-06-complete.md +1 -4
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/workflow.md +4 -6
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/SKILL.md +88 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/artifact-analyzer.md +60 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/opportunity-reviewer.md +44 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/skeptic-reviewer.md +44 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/web-researcher.md +49 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-manifest.json +17 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/contextual-discovery.md +57 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/draft-and-review.md +86 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/finalize.md +75 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/guided-elicitation.md +70 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/resources/brief-template.md +60 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/SKILL.md +6 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-06-research-synthesis.md +2 -1
- package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/research.template.md +29 -0
- package/bmad/bmm/workflows/1-analysis/research/{workflow-domain-research.md → bmad-domain-research/workflow.md} +0 -5
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/SKILL.md +6 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/research.template.md +29 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +478 -0
- package/bmad/bmm/workflows/1-analysis/research/{workflow-market-research.md → bmad-market-research/workflow.md} +1 -6
- package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/SKILL.md +6 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/research.template.md +29 -0
- package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-06-research-synthesis.md +2 -1
- package/bmad/bmm/workflows/1-analysis/research/{workflow-technical-research.md → bmad-technical-research/workflow.md} +0 -4
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +2 -2
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +2 -2
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +2 -2
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +2 -2
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +2 -1
- package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/SKILL.md +6 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01-init.md +2 -2
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01b-continue.md +1 -1
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-02-discovery.md +2 -2
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-03-core-experience.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-04-emotional-response.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-05-inspiration.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-06-design-system.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-07-defining-experience.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-08-visual-foundation.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-09-design-directions.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-10-user-journeys.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-11-component-strategy.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-12-ux-patterns.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-13-responsive-accessibility.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-14-complete.md +3 -3
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/workflow.md +2 -8
- package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/SKILL.md +6 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01-discovery.md +3 -8
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01b-legacy-conversion.md +1 -5
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-02-review.md +5 -9
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-03-edit.md +3 -6
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-04-complete.md +2 -5
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd/workflow-edit-prd.md → bmad-edit-prd/workflow.md} +2 -4
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/SKILL.md +6 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/domain-complexity.csv +15 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/prd-purpose.md +197 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/project-types.csv +11 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/workflow.md +62 -0
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +2 -4
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +1 -1
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +3 -3
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +3 -2
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +3 -1
- package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/SKILL.md +6 -0
- package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-01-document-discovery.md +3 -8
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -5
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +1 -5
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -5
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -6
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-06-final-assessment.md +1 -4
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/workflow.md +1 -6
- package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/SKILL.md +6 -0
- package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01-init.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01b-continue.md +11 -2
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-02-context.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-03-starter.md +5 -7
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-04-decisions.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-05-patterns.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-06-structure.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-07-validation.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-08-complete.md +1 -1
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/workflow.md +1 -12
- package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/SKILL.md +6 -0
- package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-01-validate-prerequisites.md +37 -41
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-02-design-epics.md +7 -28
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-03-create-stories.md +13 -30
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-04-final-validation.md +3 -21
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/templates/epics-template.md +4 -0
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/workflow.md +1 -6
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-01-gather-context.md +61 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +41 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-03-triage.md +50 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +38 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/workflow.md +54 -0
- package/bmad/bmm/workflows/4-implementation/bmad-correct-course/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{correct-course → bmad-correct-course}/checklist.md +1 -1
- package/bmad/bmm/workflows/4-implementation/{correct-course/instructions.md → bmad-correct-course/workflow.md} +74 -14
- package/bmad/bmm/workflows/4-implementation/bmad-create-story/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/checklist.md +9 -10
- package/bmad/bmm/workflows/4-implementation/bmad-create-story/discover-inputs.md +88 -0
- package/bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md +380 -0
- package/bmad/bmm/workflows/4-implementation/bmad-dev-story/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{dev-story/instructions.xml → bmad-dev-story/workflow.md} +42 -2
- package/bmad/bmm/workflows/4-implementation/bmad-retrospective/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{retrospective/instructions.md → bmad-retrospective/workflow.md} +58 -23
- package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/sprint-status-template.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{sprint-planning/instructions.md → bmad-sprint-planning/workflow.md} +47 -10
- package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{sprint-status/instructions.md → bmad-sprint-status/workflow.md} +39 -8
- package/bmad/bmm/workflows/bmad-document-project/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/{document-project → bmad-document-project}/instructions.md +6 -8
- package/bmad/bmm/workflows/bmad-document-project/workflow.md +27 -0
- package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/deep-dive-instructions.md +3 -2
- package/bmad/bmm/workflows/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
- package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/full-scan-instructions.md +5 -4
- package/bmad/bmm/workflows/bmad-document-project/workflows/full-scan-workflow.md +34 -0
- package/bmad/bmm/workflows/bmad-generate-project-context/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-01-discover.md +3 -1
- package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-02-generate.md +7 -4
- package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/workflow.md +2 -8
- package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/{qa/automate/instructions.md → bmad-qa-generate-e2e-tests/workflow.md} +33 -7
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-01-mode-detection.md +9 -14
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-02-context-gathering.md +1 -5
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-03-execute.md +1 -5
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-04-self-check.md +1 -5
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-05-adversarial-review.md +8 -18
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-06-resolve-findings.md +0 -2
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/workflow.md +1 -13
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +51 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +35 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +33 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +50 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +17 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +79 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-01-understand.md +7 -13
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-02-investigate.md +3 -7
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-03-generate.md +1 -5
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-04-review.md +9 -14
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/workflow.md +1 -7
- package/bmad/core/module-help.csv +10 -8
- package/bmad/core/module.yaml +1 -1
- package/bmad/core/skills/bmad-advanced-elicitation/SKILL.md +6 -0
- package/bmad/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-advanced-elicitation/workflow.md +135 -0
- package/bmad/core/skills/bmad-brainstorming/SKILL.md +6 -0
- package/bmad/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01-session-setup.md +35 -18
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01b-continue.md +4 -2
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02a-user-selected.md +5 -1
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02b-ai-recommended.md +3 -1
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02c-random-selection.md +3 -1
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02d-progressive-flow.md +3 -1
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-03-technique-execution.md +6 -4
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-04-idea-organization.md +4 -2
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/workflow.md +4 -9
- package/bmad/core/skills/bmad-distillator/SKILL.md +178 -0
- package/bmad/core/skills/bmad-distillator/agents/distillate-compressor.md +116 -0
- package/bmad/core/skills/bmad-distillator/agents/round-trip-reconstructor.md +68 -0
- package/bmad/core/skills/bmad-distillator/bmad-skill-manifest.yaml +15 -0
- package/bmad/core/skills/bmad-distillator/resources/compression-rules.md +51 -0
- package/bmad/core/skills/bmad-distillator/resources/distillate-format-reference.md +227 -0
- package/bmad/core/skills/bmad-distillator/resources/splitting-strategy.md +78 -0
- package/bmad/core/skills/bmad-distillator/scripts/analyze_sources.py +300 -0
- package/bmad/core/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +204 -0
- package/bmad/core/skills/bmad-editorial-review-prose/SKILL.md +6 -0
- package/bmad/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-editorial-review-prose/workflow.md +81 -0
- package/bmad/core/skills/bmad-editorial-review-structure/SKILL.md +6 -0
- package/bmad/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-editorial-review-structure/workflow.md +174 -0
- package/bmad/core/skills/bmad-help/SKILL.md +6 -0
- package/bmad/core/skills/bmad-help/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/{tasks/help.md → skills/bmad-help/workflow.md} +11 -8
- package/bmad/core/skills/bmad-index-docs/SKILL.md +6 -0
- package/bmad/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-index-docs/workflow.md +61 -0
- package/bmad/core/skills/bmad-party-mode/SKILL.md +6 -0
- package/bmad/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-03-graceful-exit.md +0 -1
- package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/workflow.md +0 -4
- package/bmad/core/skills/bmad-review-adversarial-general/SKILL.md +6 -0
- package/bmad/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-review-adversarial-general/workflow.md +32 -0
- package/bmad/core/skills/bmad-review-edge-case-hunter/SKILL.md +6 -0
- package/bmad/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-review-edge-case-hunter/workflow.md +62 -0
- package/bmad/core/skills/bmad-shard-doc/SKILL.md +6 -0
- package/bmad/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-shard-doc/workflow.md +100 -0
- package/bmad/core/tasks/bmad-create-prd/SKILL.md +6 -0
- package/bmad/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/tasks/bmad-create-prd/data/domain-complexity.csv +15 -0
- package/bmad/core/tasks/bmad-create-prd/data/prd-purpose.md +197 -0
- package/bmad/core/tasks/bmad-create-prd/data/project-types.csv +11 -0
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01-init.md +7 -20
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01b-continue.md +29 -21
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02-discovery.md +7 -23
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02b-vision.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02c-executive-summary.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-03-success.md +4 -16
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-04-journeys.md +4 -16
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-05-domain.md +7 -20
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-06-innovation.md +8 -23
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-07-project-type.md +6 -21
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-08-scoping.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-09-functional.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-10-nonfunctional.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-11-polish.md +22 -18
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-12-complete.md +4 -13
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md → core/tasks/bmad-create-prd/workflow.md} +3 -4
- package/bundled-versions.json +1 -1
- package/dist/commands/doctor-checks.js +14 -5
- package/dist/commands/doctor-checks.js.map +1 -1
- package/dist/commands/doctor.js +13 -4
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +12 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.js +3 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/installer/commands.js +33 -15
- package/dist/installer/commands.js.map +1 -1
- package/dist/installer/install.js +1 -1
- package/dist/installer/install.js.map +1 -1
- package/dist/installer/project-files.js +4 -4
- package/dist/installer/project-files.js.map +1 -1
- package/dist/installer/template-files.js +64 -17
- package/dist/installer/template-files.js.map +1 -1
- package/dist/platform/codex.js +6 -1
- package/dist/platform/codex.js.map +1 -1
- package/dist/platform/detect.js +7 -3
- package/dist/platform/detect.js.map +1 -1
- package/dist/platform/doctor-checks.js +2 -2
- package/dist/platform/doctor-checks.js.map +1 -1
- package/dist/platform/guidance.js +66 -0
- package/dist/platform/guidance.js.map +1 -0
- package/dist/platform/instructions-snippet.js +15 -0
- package/dist/platform/instructions-snippet.js.map +1 -1
- package/dist/platform/opencode.js +20 -0
- package/dist/platform/opencode.js.map +1 -0
- package/dist/platform/registry.js +2 -0
- package/dist/platform/registry.js.map +1 -1
- package/dist/platform/types.js +1 -0
- package/dist/platform/types.js.map +1 -1
- package/dist/reset.js +3 -3
- package/dist/reset.js.map +1 -1
- package/dist/run/ralph-process.js +51 -7
- package/dist/run/ralph-process.js.map +1 -1
- package/dist/run/run-dashboard.js +5 -6
- package/dist/run/run-dashboard.js.map +1 -1
- package/dist/transition/artifact-scan.js +14 -5
- package/dist/transition/artifact-scan.js.map +1 -1
- package/dist/utils/constants.js +4 -2
- package/dist/utils/constants.js.map +1 -1
- package/dist/watch/dashboard.js +16 -5
- package/dist/watch/dashboard.js.map +1 -1
- package/dist/watch/renderer.js +8 -6
- package/dist/watch/renderer.js.map +1 -1
- package/package.json +1 -1
- package/ralph/drivers/opencode.sh +147 -0
- package/ralph/lib/response_analyzer.sh +227 -78
- package/ralph/lib/wizard_utils.sh +4 -4
- package/ralph/ralph_loop.sh +340 -4
- package/ralph/templates/ralphrc.template +28 -2
- package/slash-commands/advanced-elicitation.md +1 -1
- package/slash-commands/adversarial-review.md +1 -1
- package/slash-commands/bmad-help.md +1 -1
- package/slash-commands/bmalph.md +1 -1
- package/slash-commands/brainstorm-project.md +1 -1
- package/slash-commands/brainstorming.md +1 -1
- package/slash-commands/correct-course.md +1 -1
- package/slash-commands/create-architecture.md +1 -1
- package/slash-commands/create-brief.md +1 -1
- package/slash-commands/create-epics-stories.md +1 -1
- package/slash-commands/create-prd.md +1 -1
- package/slash-commands/create-story.md +1 -1
- package/slash-commands/create-ux.md +1 -1
- package/slash-commands/distillator.md +1 -0
- package/slash-commands/document-project.md +1 -1
- package/slash-commands/domain-research.md +1 -1
- package/slash-commands/edge-case-hunter.md +1 -0
- package/slash-commands/edit-prd.md +1 -0
- package/slash-commands/editorial-prose.md +1 -1
- package/slash-commands/editorial-structure.md +1 -1
- package/slash-commands/generate-project-context.md +1 -1
- package/slash-commands/implementation-readiness.md +1 -1
- package/slash-commands/index-docs.md +1 -1
- package/slash-commands/market-research.md +1 -1
- package/slash-commands/party-mode.md +1 -1
- package/slash-commands/qa-automate.md +1 -1
- package/slash-commands/quick-dev-new.md +1 -0
- package/slash-commands/quick-dev.md +1 -1
- package/slash-commands/retrospective.md +1 -1
- package/slash-commands/shard-doc.md +1 -1
- package/slash-commands/sprint-planning.md +1 -1
- package/slash-commands/sprint-status.md +1 -1
- package/slash-commands/tech-spec.md +1 -1
- package/slash-commands/technical-research.md +1 -1
- package/slash-commands/validate-architecture.md +1 -1
- package/slash-commands/validate-brief.md +1 -1
- package/slash-commands/validate-epics-stories.md +1 -1
- package/slash-commands/validate-prd.md +1 -1
- package/slash-commands/validate-story.md +1 -1
- package/slash-commands/validate-ux.md +1 -1
- package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -23
- package/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +0 -227
- package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -44
- package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -54
- package/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +0 -346
- package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -53
- package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -21
- package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -53
- package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -47
- package/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -25
- package/bmad/bmm/workflows/document-project/workflow.yaml +0 -22
- package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
- package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
- package/bmad/bmm/workflows/qa/automate/workflow.yaml +0 -44
- package/bmad/core/agents/bmad-master.agent.yaml +0 -30
- package/bmad/core/tasks/editorial-review-prose.xml +0 -102
- package/bmad/core/tasks/editorial-review-structure.xml +0 -209
- package/bmad/core/tasks/index-docs.xml +0 -65
- package/bmad/core/tasks/review-adversarial-general.xml +0 -48
- package/bmad/core/tasks/shard-doc.xml +0 -108
- package/bmad/core/tasks/workflow.xml +0 -235
- package/bmad/core/workflows/advanced-elicitation/workflow.xml +0 -117
- package/slash-commands/execute-workflow.md +0 -1
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-01-init.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-02-domain-analysis.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-03-competitive-landscape.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-04-regulatory-focus.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-05-technical-trends.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-01-init.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-02-technical-overview.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-03-integration-patterns.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-04-architectural-patterns.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-05-implementation-research.md +0 -0
- /package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/ux-design-template.md +0 -0
- /package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/templates/readiness-report-template.md +0 -0
- /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/architecture-decision-template.md +0 -0
- /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/domain-complexity.csv +0 -0
- /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/project-types.csv +0 -0
- /package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/template.md +0 -0
- /package/bmad/bmm/workflows/4-implementation/{dev-story → bmad-dev-story}/checklist.md +0 -0
- /package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/checklist.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/checklist.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/documentation-requirements.csv +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/deep-dive-template.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/index-template.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-overview-template.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-scan-report-schema.json +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/source-tree-template.md +0 -0
- /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/project-context-template.md +0 -0
- /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-03-complete.md +0 -0
- /package/bmad/bmm/workflows/{qa/automate → bmad-qa-generate-e2e-tests}/checklist.md +0 -0
- /package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/tech-spec-template.md +0 -0
- /package/bmad/core/{workflows/advanced-elicitation → skills/bmad-advanced-elicitation}/methods.csv +0 -0
- /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/brain-methods.csv +0 -0
- /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/template.md +0 -0
- /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-01-agent-loading.md +0 -0
- /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-02-discussion-orchestration.md +0 -0
- /package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/templates/prd-template.md +0 -0
package/ralph/ralph_loop.sh
CHANGED
|
@@ -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
|
-
|
|
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/
|
|
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/
|
|
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/
|
|
1
|
+
Read and execute the workflow/task at `_bmad/core/skills/bmad-help/workflow.md`.
|
package/slash-commands/bmalph.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Read and
|
|
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/
|
|
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/
|
|
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.
|
|
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/
|
|
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.
|
|
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.
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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.
|
|
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/
|
|
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.
|
|
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.
|
|
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.
|