bmad-enhanced 1.3.8 → 1.4.1
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/README.md +115 -131
- package/_bmad/_config/agent-manifest.csv +23 -0
- package/_bmad/_config/agents/bmb-agent-builder.customize.yaml +41 -0
- package/_bmad/_config/agents/bmb-module-builder.customize.yaml +41 -0
- package/_bmad/_config/agents/bmb-workflow-builder.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-analyst.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-architect.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-dev.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-pm.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-quick-flow-solo-dev.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-quinn.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-sm.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-tech-writer.customize.yaml +41 -0
- package/_bmad/_config/agents/bmm-ux-designer.customize.yaml +41 -0
- package/_bmad/_config/agents/cis-brainstorming-coach.customize.yaml +41 -0
- package/_bmad/_config/agents/cis-creative-problem-solver.customize.yaml +41 -0
- package/_bmad/_config/agents/cis-design-thinking-coach.customize.yaml +41 -0
- package/_bmad/_config/agents/cis-innovation-strategist.customize.yaml +41 -0
- package/_bmad/_config/agents/cis-presentation-master.customize.yaml +41 -0
- package/_bmad/_config/agents/cis-storyteller.customize.yaml +41 -0
- package/_bmad/_config/agents/core-bmad-master.customize.yaml +41 -0
- package/_bmad/_config/agents/tea-tea.customize.yaml +41 -0
- package/_bmad/_config/bmad-help.csv +66 -0
- package/_bmad/_config/files-manifest.csv +602 -0
- package/_bmad/_config/manifest.yaml +42 -0
- package/_bmad/_config/task-manifest.csv +9 -0
- package/_bmad/_config/tool-manifest.csv +1 -0
- package/_bmad/_config/workflow-manifest.csv +41 -0
- package/_bmad/_memory/config.yaml +11 -0
- package/_bmad/_memory/storyteller-sidecar/stories-told.md +7 -0
- package/_bmad/_memory/storyteller-sidecar/story-preferences.md +7 -0
- package/_bmad/bmb/agents/agent-builder.md +59 -0
- package/_bmad/bmb/agents/module-builder.md +60 -0
- package/_bmad/bmb/agents/workflow-builder.md +61 -0
- package/_bmad/bmb/config.yaml +12 -0
- package/_bmad/bmb/module-help.csv +13 -0
- package/_bmad/bmb/workflows/agent/data/agent-compilation.md +273 -0
- package/_bmad/bmb/workflows/agent/data/agent-menu-patterns.md +233 -0
- package/_bmad/bmb/workflows/agent/data/agent-metadata.md +208 -0
- package/_bmad/bmb/workflows/agent/data/brainstorm-context.md +146 -0
- package/_bmad/bmb/workflows/agent/data/communication-presets.csv +61 -0
- package/_bmad/bmb/workflows/agent/data/critical-actions.md +120 -0
- package/_bmad/bmb/workflows/agent/data/expert-agent-architecture.md +236 -0
- package/_bmad/bmb/workflows/agent/data/expert-agent-validation.md +174 -0
- package/_bmad/bmb/workflows/agent/data/module-agent-validation.md +126 -0
- package/_bmad/bmb/workflows/agent/data/persona-properties.md +266 -0
- package/_bmad/bmb/workflows/agent/data/principles-crafting.md +292 -0
- package/_bmad/bmb/workflows/agent/data/reference/module-examples/architect.md +68 -0
- package/_bmad/bmb/workflows/agent/data/simple-agent-architecture.md +204 -0
- package/_bmad/bmb/workflows/agent/data/simple-agent-validation.md +133 -0
- package/_bmad/bmb/workflows/agent/data/understanding-agent-types.md +222 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-01-brainstorm.md +128 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-02-discovery.md +170 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-03-type-metadata.md +296 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-04-persona.md +212 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-05-commands-menu.md +178 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-06-activation.md +279 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-07a-build-simple.md +187 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-07b-build-expert.md +201 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-07c-build-module.md +258 -0
- package/_bmad/bmb/workflows/agent/steps-c/step-08-celebrate.md +249 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-01-load-existing.md +221 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-02-discover-edits.md +193 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-03-placeholder.md +1 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-04-type-metadata.md +124 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-05-persona.md +134 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-06-commands-menu.md +122 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-07-activation.md +125 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-08a-edit-simple.md +137 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-08b-edit-expert.md +119 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-08c-edit-module.md +123 -0
- package/_bmad/bmb/workflows/agent/steps-e/e-09-celebrate.md +155 -0
- package/_bmad/bmb/workflows/agent/steps-v/v-01-load-review.md +136 -0
- package/_bmad/bmb/workflows/agent/steps-v/v-02a-validate-metadata.md +116 -0
- package/_bmad/bmb/workflows/agent/steps-v/v-02b-validate-persona.md +124 -0
- package/_bmad/bmb/workflows/agent/steps-v/v-02c-validate-menu.md +145 -0
- package/_bmad/bmb/workflows/agent/steps-v/v-02d-validate-structure.md +136 -0
- package/_bmad/bmb/workflows/agent/steps-v/v-02e-validate-sidecar.md +136 -0
- package/_bmad/bmb/workflows/agent/steps-v/v-03-summary.md +104 -0
- package/_bmad/bmb/workflows/agent/templates/agent-plan.template.md +5 -0
- package/_bmad/bmb/workflows/agent/templates/expert-agent-template/expert-agent.template.md +77 -0
- package/_bmad/bmb/workflows/agent/templates/simple-agent.template.md +72 -0
- package/_bmad/bmb/workflows/agent/workflow.md +123 -0
- package/_bmad/bmb/workflows/module/data/agent-architecture.md +179 -0
- package/_bmad/bmb/workflows/module/data/agent-spec-template.md +79 -0
- package/_bmad/bmb/workflows/module/data/module-installer-standards.md +348 -0
- package/_bmad/bmb/workflows/module/data/module-standards.md +280 -0
- package/_bmad/bmb/workflows/module/data/module-yaml-conventions.md +392 -0
- package/_bmad/bmb/workflows/module/steps-b/step-01-welcome.md +147 -0
- package/_bmad/bmb/workflows/module/steps-b/step-02-spark.md +140 -0
- package/_bmad/bmb/workflows/module/steps-b/step-03-module-type.md +148 -0
- package/_bmad/bmb/workflows/module/steps-b/step-04-vision.md +82 -0
- package/_bmad/bmb/workflows/module/steps-b/step-05-identity.md +96 -0
- package/_bmad/bmb/workflows/module/steps-b/step-06-users.md +85 -0
- package/_bmad/bmb/workflows/module/steps-b/step-07-value.md +75 -0
- package/_bmad/bmb/workflows/module/steps-b/step-08-agents.md +96 -0
- package/_bmad/bmb/workflows/module/steps-b/step-09-workflows.md +82 -0
- package/_bmad/bmb/workflows/module/steps-b/step-10-tools.md +90 -0
- package/_bmad/bmb/workflows/module/steps-b/step-11-scenarios.md +83 -0
- package/_bmad/bmb/workflows/module/steps-b/step-12-creative.md +94 -0
- package/_bmad/bmb/workflows/module/steps-b/step-13-review.md +104 -0
- package/_bmad/bmb/workflows/module/steps-b/step-14-finalize.md +117 -0
- package/_bmad/bmb/workflows/module/steps-c/step-01-load-brief.md +178 -0
- package/_bmad/bmb/workflows/module/steps-c/step-01b-continue.md +83 -0
- package/_bmad/bmb/workflows/module/steps-c/step-02-structure.md +109 -0
- package/_bmad/bmb/workflows/module/steps-c/step-03-config.md +118 -0
- package/_bmad/bmb/workflows/module/steps-c/step-04-installer.md +160 -0
- package/_bmad/bmb/workflows/module/steps-c/step-05-agents.md +167 -0
- package/_bmad/bmb/workflows/module/steps-c/step-06-workflows.md +183 -0
- package/_bmad/bmb/workflows/module/steps-c/step-07-docs.md +402 -0
- package/_bmad/bmb/workflows/module/steps-c/step-08-complete.md +123 -0
- package/_bmad/bmb/workflows/module/steps-e/step-01-load-target.md +81 -0
- package/_bmad/bmb/workflows/module/steps-e/step-02-select-edit.md +77 -0
- package/_bmad/bmb/workflows/module/steps-e/step-03-apply-edit.md +77 -0
- package/_bmad/bmb/workflows/module/steps-e/step-04-review.md +80 -0
- package/_bmad/bmb/workflows/module/steps-e/step-05-confirm.md +75 -0
- package/_bmad/bmb/workflows/module/steps-v/step-01-load-target.md +96 -0
- package/_bmad/bmb/workflows/module/steps-v/step-02-file-structure.md +94 -0
- package/_bmad/bmb/workflows/module/steps-v/step-03-module-yaml.md +99 -0
- package/_bmad/bmb/workflows/module/steps-v/step-04-agent-specs.md +152 -0
- package/_bmad/bmb/workflows/module/steps-v/step-05-workflow-specs.md +152 -0
- package/_bmad/bmb/workflows/module/steps-v/step-06-documentation.md +143 -0
- package/_bmad/bmb/workflows/module/steps-v/step-07-installation.md +113 -0
- package/_bmad/bmb/workflows/module/steps-v/step-08-report.md +197 -0
- package/_bmad/bmb/workflows/module/templates/brief-template.md +154 -0
- package/_bmad/bmb/workflows/module/templates/workflow-spec-template.md +96 -0
- package/_bmad/bmb/workflows/module/workflow.md +100 -0
- package/_bmad/bmb/workflows/workflow/data/architecture.md +152 -0
- package/_bmad/bmb/workflows/workflow/data/common-workflow-tools.csv +19 -0
- package/_bmad/bmb/workflows/workflow/data/csv-data-file-standards.md +81 -0
- package/_bmad/bmb/workflows/workflow/data/frontmatter-standards.md +225 -0
- package/_bmad/bmb/workflows/workflow/data/input-discovery-standards.md +269 -0
- package/_bmad/bmb/workflows/workflow/data/intent-vs-prescriptive-spectrum.md +50 -0
- package/_bmad/bmb/workflows/workflow/data/menu-handling-standards.md +167 -0
- package/_bmad/bmb/workflows/workflow/data/output-format-standards.md +188 -0
- package/_bmad/bmb/workflows/workflow/data/step-file-rules.md +235 -0
- package/_bmad/bmb/workflows/workflow/data/step-type-patterns.md +311 -0
- package/_bmad/bmb/workflows/workflow/data/subprocess-optimization-patterns.md +386 -0
- package/_bmad/bmb/workflows/workflow/data/trimodal-workflow-structure.md +209 -0
- package/_bmad/bmb/workflows/workflow/data/workflow-chaining-standards.md +271 -0
- package/_bmad/bmb/workflows/workflow/data/workflow-examples.md +276 -0
- package/_bmad/bmb/workflows/workflow/data/workflow-type-criteria.md +172 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-00-conversion.md +262 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-01-discovery.md +194 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-01b-continuation.md +3 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-02-classification.md +269 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-03-requirements.md +282 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-04-tools.md +281 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-05-plan-review.md +242 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-06-design.md +329 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-07-foundation.md +238 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-08-build-step-01.md +377 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-09-build-next-step.md +350 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-10-confirmation.md +320 -0
- package/_bmad/bmb/workflows/workflow/steps-c/step-11-completion.md +191 -0
- package/_bmad/bmb/workflows/workflow/steps-e/step-e-01-assess-workflow.md +237 -0
- package/_bmad/bmb/workflows/workflow/steps-e/step-e-02-discover-edits.md +248 -0
- package/_bmad/bmb/workflows/workflow/steps-e/step-e-03-fix-validation.md +252 -0
- package/_bmad/bmb/workflows/workflow/steps-e/step-e-04-direct-edit.md +275 -0
- package/_bmad/bmb/workflows/workflow/steps-e/step-e-05-apply-edit.md +154 -0
- package/_bmad/bmb/workflows/workflow/steps-e/step-e-06-validate-after.md +190 -0
- package/_bmad/bmb/workflows/workflow/steps-e/step-e-07-complete.md +206 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md +109 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-01-validate.md +221 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-01b-structure.md +152 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md +199 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-02b-path-violations.md +265 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-03-menu-validation.md +164 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md +211 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md +200 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md +195 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md +209 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md +199 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md +179 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md +186 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-10-report-complete.md +154 -0
- package/_bmad/bmb/workflows/workflow/steps-v/step-11-plan-validation.md +237 -0
- package/_bmad/bmb/workflows/workflow/templates/minimal-output-template.md +11 -0
- package/_bmad/bmb/workflows/workflow/templates/step-01-init-continuable-template.md +241 -0
- package/_bmad/bmb/workflows/workflow/templates/step-1b-template.md +223 -0
- package/_bmad/bmb/workflows/workflow/templates/step-template.md +290 -0
- package/_bmad/bmb/workflows/workflow/templates/workflow-template.md +102 -0
- package/_bmad/bmb/workflows/workflow/workflow.md +109 -0
- package/_bmad/bmm/agents/analyst.md +76 -0
- package/_bmad/bmm/agents/architect.md +58 -0
- package/_bmad/bmm/agents/dev.md +69 -0
- package/_bmad/bmm/agents/pm.md +72 -0
- package/_bmad/bmm/agents/qa.md +92 -0
- package/_bmad/bmm/agents/quick-flow-solo-dev.md +69 -0
- package/_bmad/bmm/agents/sm.md +70 -0
- package/_bmad/bmm/agents/tech-writer/tech-writer.md +70 -0
- package/_bmad/bmm/agents/ux-designer.md +57 -0
- package/_bmad/bmm/config.yaml +16 -0
- package/_bmad/bmm/data/project-context-template.md +26 -0
- package/_bmad/bmm/module-help.csv +32 -0
- package/_bmad/bmm/teams/default-party.csv +20 -0
- package/_bmad/bmm/teams/team-fullstack.yaml +12 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
- package/_bmad/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
- package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
- package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
- package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
- package/_bmad/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/_bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
- package/_bmad/bmm/workflows/1-analysis/research/research.template.md +29 -0
- package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
- package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
- package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
- package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
- package/_bmad/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
- package/_bmad/bmm/workflows/1-analysis/research/workflow.md +173 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +13 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +153 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +218 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/validation-report-prd-workflow.md +433 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-prd/workflow.md +150 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
- package/_bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
- package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
- package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
- package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
- package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
- package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
- package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +135 -0
- package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/_bmad/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
- package/_bmad/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
- package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
- package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
- package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
- package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
- package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
- package/_bmad/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
- package/_bmad/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
- package/_bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +50 -0
- package/_bmad/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
- package/_bmad/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
- package/_bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +58 -0
- package/_bmad/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
- package/_bmad/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
- package/_bmad/bmm/workflows/4-implementation/create-story/template.md +49 -0
- package/_bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +59 -0
- package/_bmad/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
- package/_bmad/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
- package/_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +25 -0
- package/_bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
- package/_bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +57 -0
- package/_bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/_bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
- package/_bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/_bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +53 -0
- package/_bmad/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
- package/_bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +176 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +149 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +192 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +145 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
- package/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
- package/_bmad/bmm/workflows/document-project/checklist.md +245 -0
- package/_bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/_bmad/bmm/workflows/document-project/instructions.md +221 -0
- package/_bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/_bmad/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/_bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/_bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/_bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/_bmad/bmm/workflows/document-project/workflow.yaml +28 -0
- package/_bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/_bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/_bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/_bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +26 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +26 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +26 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
- package/_bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +26 -0
- package/_bmad/bmm/workflows/qa/automate/checklist.md +33 -0
- package/_bmad/bmm/workflows/qa/automate/instructions.md +110 -0
- package/_bmad/bmm/workflows/qa/automate/workflow.yaml +47 -0
- package/_bmad/cis/agents/brainstorming-coach.md +61 -0
- package/_bmad/cis/agents/creative-problem-solver.md +61 -0
- package/_bmad/cis/agents/design-thinking-coach.md +61 -0
- package/_bmad/cis/agents/innovation-strategist.md +61 -0
- package/_bmad/cis/agents/presentation-master.md +67 -0
- package/_bmad/cis/agents/storyteller/storyteller.md +58 -0
- package/_bmad/cis/config.yaml +12 -0
- package/_bmad/cis/module-help.csv +6 -0
- package/_bmad/cis/teams/creative-squad.yaml +7 -0
- package/_bmad/cis/teams/default-party.csv +12 -0
- package/_bmad/cis/workflows/README.md +139 -0
- package/_bmad/cis/workflows/design-thinking/README.md +56 -0
- package/_bmad/cis/workflows/design-thinking/design-methods.csv +31 -0
- package/_bmad/cis/workflows/design-thinking/instructions.md +202 -0
- package/_bmad/cis/workflows/design-thinking/template.md +111 -0
- package/_bmad/cis/workflows/design-thinking/workflow.yaml +27 -0
- package/_bmad/cis/workflows/innovation-strategy/README.md +56 -0
- package/_bmad/cis/workflows/innovation-strategy/innovation-frameworks.csv +31 -0
- package/_bmad/cis/workflows/innovation-strategy/instructions.md +276 -0
- package/_bmad/cis/workflows/innovation-strategy/template.md +189 -0
- package/_bmad/cis/workflows/innovation-strategy/workflow.yaml +27 -0
- package/_bmad/cis/workflows/problem-solving/README.md +56 -0
- package/_bmad/cis/workflows/problem-solving/instructions.md +252 -0
- package/_bmad/cis/workflows/problem-solving/solving-methods.csv +31 -0
- package/_bmad/cis/workflows/problem-solving/template.md +165 -0
- package/_bmad/cis/workflows/problem-solving/workflow.yaml +27 -0
- package/_bmad/cis/workflows/storytelling/README.md +58 -0
- package/_bmad/cis/workflows/storytelling/instructions.md +293 -0
- package/_bmad/cis/workflows/storytelling/story-types.csv +26 -0
- package/_bmad/cis/workflows/storytelling/template.md +113 -0
- package/_bmad/cis/workflows/storytelling/workflow.yaml +27 -0
- package/_bmad/core/agents/bmad-master.md +56 -0
- package/_bmad/core/config.yaml +9 -0
- package/_bmad/core/module-help.csv +9 -0
- package/_bmad/core/resources/excalidraw/README.md +160 -0
- package/_bmad/core/resources/excalidraw/excalidraw-helpers.md +127 -0
- package/_bmad/core/resources/excalidraw/library-loader.md +50 -0
- package/_bmad/core/resources/excalidraw/validate-json-instructions.md +79 -0
- package/_bmad/core/tasks/editorial-review-prose.xml +100 -0
- package/_bmad/core/tasks/editorial-review-structure.xml +209 -0
- package/_bmad/core/tasks/help.md +62 -0
- package/_bmad/core/tasks/index-docs.xml +65 -0
- package/_bmad/core/tasks/review-adversarial-general.xml +48 -0
- package/_bmad/core/tasks/shard-doc.xml +109 -0
- package/_bmad/core/tasks/workflow.xml +235 -0
- package/_bmad/core/workflows/advanced-elicitation/methods.csv +51 -0
- package/_bmad/core/workflows/advanced-elicitation/workflow.xml +117 -0
- package/_bmad/core/workflows/brainstorming/brain-methods.csv +62 -0
- package/_bmad/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
- package/_bmad/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
- package/_bmad/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
- package/_bmad/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
- package/_bmad/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
- package/_bmad/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
- package/_bmad/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
- package/_bmad/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
- package/_bmad/core/workflows/brainstorming/template.md +15 -0
- package/_bmad/core/workflows/brainstorming/workflow.md +58 -0
- package/_bmad/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/_bmad/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/_bmad/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
- package/_bmad/core/workflows/party-mode/workflow.md +194 -0
- package/_bmad/tea/agents/tea.md +71 -0
- package/_bmad/tea/config.yaml +19 -0
- package/_bmad/tea/module-help.csv +10 -0
- package/_bmad/tea/teams/default-party.csv +2 -0
- package/_bmad/tea/testarch/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/_bmad/tea/testarch/knowledge/api-request.md +442 -0
- package/_bmad/tea/testarch/knowledge/api-testing-patterns.md +851 -0
- package/_bmad/tea/testarch/knowledge/auth-session.md +548 -0
- package/_bmad/tea/testarch/knowledge/burn-in.md +273 -0
- package/_bmad/tea/testarch/knowledge/ci-burn-in.md +675 -0
- package/_bmad/tea/testarch/knowledge/component-tdd.md +486 -0
- package/_bmad/tea/testarch/knowledge/contract-testing.md +957 -0
- package/_bmad/tea/testarch/knowledge/data-factories.md +500 -0
- package/_bmad/tea/testarch/knowledge/email-auth.md +721 -0
- package/_bmad/tea/testarch/knowledge/error-handling.md +725 -0
- package/_bmad/tea/testarch/knowledge/feature-flags.md +750 -0
- package/_bmad/tea/testarch/knowledge/file-utils.md +456 -0
- package/_bmad/tea/testarch/knowledge/fixture-architecture.md +401 -0
- package/_bmad/tea/testarch/knowledge/fixtures-composition.md +382 -0
- package/_bmad/tea/testarch/knowledge/intercept-network-call.md +426 -0
- package/_bmad/tea/testarch/knowledge/log.md +426 -0
- package/_bmad/tea/testarch/knowledge/network-error-monitor.md +401 -0
- package/_bmad/tea/testarch/knowledge/network-first.md +486 -0
- package/_bmad/tea/testarch/knowledge/network-recorder.md +527 -0
- package/_bmad/tea/testarch/knowledge/nfr-criteria.md +670 -0
- package/_bmad/tea/testarch/knowledge/overview.md +286 -0
- package/_bmad/tea/testarch/knowledge/playwright-config.md +730 -0
- package/_bmad/tea/testarch/knowledge/probability-impact.md +601 -0
- package/_bmad/tea/testarch/knowledge/recurse.md +421 -0
- package/_bmad/tea/testarch/knowledge/risk-governance.md +615 -0
- package/_bmad/tea/testarch/knowledge/selective-testing.md +732 -0
- package/_bmad/tea/testarch/knowledge/selector-resilience.md +527 -0
- package/_bmad/tea/testarch/knowledge/test-healing-patterns.md +644 -0
- package/_bmad/tea/testarch/knowledge/test-levels-framework.md +473 -0
- package/_bmad/tea/testarch/knowledge/test-priorities-matrix.md +373 -0
- package/_bmad/tea/testarch/knowledge/test-quality.md +664 -0
- package/_bmad/tea/testarch/knowledge/timing-debugging.md +372 -0
- package/_bmad/tea/testarch/knowledge/visual-debugging.md +524 -0
- package/_bmad/tea/testarch/tea-index.csv +35 -0
- package/_bmad/tea/workflows/testarch/README.md +74 -0
- package/_bmad/tea/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
- package/_bmad/tea/workflows/testarch/atdd/checklist.md +374 -0
- package/_bmad/tea/workflows/testarch/atdd/instructions.md +38 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-c/step-01-preflight-and-context.md +110 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-c/step-02-generation-mode.md +79 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-c/step-03-test-strategy.md +76 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-c/step-04-generate-tests.md +228 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-c/step-04a-subprocess-api-failing.md +215 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-c/step-04b-subprocess-e2e-failing.md +212 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-c/step-04c-aggregate.md +329 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-c/step-05-validate-and-complete.md +68 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-e/step-01-assess.md +65 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-e/step-02-apply-edit.md +60 -0
- package/_bmad/tea/workflows/testarch/atdd/steps-v/step-01-validate.md +67 -0
- package/_bmad/tea/workflows/testarch/atdd/validation-report-20260127-095021.md +73 -0
- package/_bmad/tea/workflows/testarch/atdd/validation-report-20260127-102401.md +116 -0
- package/_bmad/tea/workflows/testarch/atdd/workflow-plan.md +21 -0
- package/_bmad/tea/workflows/testarch/atdd/workflow.md +39 -0
- package/_bmad/tea/workflows/testarch/atdd/workflow.yaml +45 -0
- package/_bmad/tea/workflows/testarch/automate/checklist.md +582 -0
- package/_bmad/tea/workflows/testarch/automate/instructions.md +43 -0
- package/_bmad/tea/workflows/testarch/automate/steps-c/step-01-preflight-and-context.md +127 -0
- package/_bmad/tea/workflows/testarch/automate/steps-c/step-02-identify-targets.md +95 -0
- package/_bmad/tea/workflows/testarch/automate/steps-c/step-03-generate-tests.md +199 -0
- package/_bmad/tea/workflows/testarch/automate/steps-c/step-03a-subprocess-api.md +183 -0
- package/_bmad/tea/workflows/testarch/automate/steps-c/step-03b-subprocess-e2e.md +181 -0
- package/_bmad/tea/workflows/testarch/automate/steps-c/step-03c-aggregate.md +300 -0
- package/_bmad/tea/workflows/testarch/automate/steps-c/step-04-validate-and-summarize.md +69 -0
- package/_bmad/tea/workflows/testarch/automate/steps-e/step-01-assess.md +65 -0
- package/_bmad/tea/workflows/testarch/automate/steps-e/step-02-apply-edit.md +60 -0
- package/_bmad/tea/workflows/testarch/automate/steps-v/step-01-validate.md +67 -0
- package/_bmad/tea/workflows/testarch/automate/validation-report-20260127-095021.md +72 -0
- package/_bmad/tea/workflows/testarch/automate/validation-report-20260127-102401.md +114 -0
- package/_bmad/tea/workflows/testarch/automate/workflow-plan.md +20 -0
- package/_bmad/tea/workflows/testarch/automate/workflow.md +39 -0
- package/_bmad/tea/workflows/testarch/automate/workflow.yaml +52 -0
- package/_bmad/tea/workflows/testarch/ci/checklist.md +247 -0
- package/_bmad/tea/workflows/testarch/ci/github-actions-template.yaml +198 -0
- package/_bmad/tea/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
- package/_bmad/tea/workflows/testarch/ci/instructions.md +38 -0
- package/_bmad/tea/workflows/testarch/ci/steps-c/step-01-preflight.md +92 -0
- package/_bmad/tea/workflows/testarch/ci/steps-c/step-02-generate-pipeline.md +82 -0
- package/_bmad/tea/workflows/testarch/ci/steps-c/step-03-configure-quality-gates.md +75 -0
- package/_bmad/tea/workflows/testarch/ci/steps-c/step-04-validate-and-summary.md +67 -0
- package/_bmad/tea/workflows/testarch/ci/steps-e/step-01-assess.md +65 -0
- package/_bmad/tea/workflows/testarch/ci/steps-e/step-02-apply-edit.md +60 -0
- package/_bmad/tea/workflows/testarch/ci/steps-v/step-01-validate.md +67 -0
- package/_bmad/tea/workflows/testarch/ci/validation-report-20260127-095021.md +72 -0
- package/_bmad/tea/workflows/testarch/ci/validation-report-20260127-102401.md +114 -0
- package/_bmad/tea/workflows/testarch/ci/workflow-plan.md +20 -0
- package/_bmad/tea/workflows/testarch/ci/workflow.md +39 -0
- package/_bmad/tea/workflows/testarch/ci/workflow.yaml +45 -0
- package/_bmad/tea/workflows/testarch/framework/checklist.md +320 -0
- package/_bmad/tea/workflows/testarch/framework/instructions.md +38 -0
- package/_bmad/tea/workflows/testarch/framework/steps-c/step-01-preflight.md +75 -0
- package/_bmad/tea/workflows/testarch/framework/steps-c/step-02-select-framework.md +73 -0
- package/_bmad/tea/workflows/testarch/framework/steps-c/step-03-scaffold-framework.md +120 -0
- package/_bmad/tea/workflows/testarch/framework/steps-c/step-04-docs-and-scripts.md +70 -0
- package/_bmad/tea/workflows/testarch/framework/steps-c/step-05-validate-and-summary.md +68 -0
- package/_bmad/tea/workflows/testarch/framework/steps-e/step-01-assess.md +65 -0
- package/_bmad/tea/workflows/testarch/framework/steps-e/step-02-apply-edit.md +60 -0
- package/_bmad/tea/workflows/testarch/framework/steps-v/step-01-validate.md +67 -0
- package/_bmad/tea/workflows/testarch/framework/validation-report-20260127-095021.md +73 -0
- package/_bmad/tea/workflows/testarch/framework/validation-report-20260127-102401.md +116 -0
- package/_bmad/tea/workflows/testarch/framework/workflow-plan.md +22 -0
- package/_bmad/tea/workflows/testarch/framework/workflow.md +39 -0
- package/_bmad/tea/workflows/testarch/framework/workflow.yaml +47 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/checklist.md +407 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/instructions.md +36 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/nfr-report-template.md +462 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-01-load-context.md +85 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-02-define-thresholds.md +82 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-03-gather-evidence.md +64 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04-evaluate-and-score.md +140 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04a-subprocess-security.md +138 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04b-subprocess-performance.md +84 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04c-subprocess-reliability.md +85 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04d-subprocess-scalability.md +88 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04e-aggregate-nfr.md +219 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-c/step-05-generate-report.md +71 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-e/step-01-assess.md +65 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-e/step-02-apply-edit.md +60 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/steps-v/step-01-validate.md +67 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/validation-report-20260127-095021.md +73 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/validation-report-20260127-102401.md +116 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/workflow-plan.md +19 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/workflow.md +39 -0
- package/_bmad/tea/workflows/testarch/nfr-assess/workflow.yaml +47 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/checklist.md +197 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/data/curriculum.yaml +129 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/data/quiz-questions.yaml +206 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/data/role-paths.yaml +136 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/data/session-content-map.yaml +204 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/data/tea-resources-index.yaml +359 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/instructions.md +130 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-01-init.md +235 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-01b-continue.md +147 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-02-assess.md +258 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-03-session-menu.md +219 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-04-session-01.md +460 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-04-session-02.md +465 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-04-session-03.md +301 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-04-session-04.md +234 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-04-session-05.md +234 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-04-session-06.md +209 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-04-session-07.md +212 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-c/step-05-completion.md +339 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-e/step-e-01-assess-workflow.md +141 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-e/step-e-02-apply-edits.md +122 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/steps-v/step-v-01-validate.md +263 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/templates/certificate-template.md +86 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/templates/progress-template.yaml +95 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/templates/session-notes-template.md +83 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/workflow-plan-teach-me-testing.md +950 -0
- package/_bmad/tea/workflows/testarch/teach-me-testing/workflow.md +90 -0
- package/_bmad/tea/workflows/testarch/test-design/checklist.md +410 -0
- package/_bmad/tea/workflows/testarch/test-design/instructions.md +52 -0
- package/_bmad/tea/workflows/testarch/test-design/steps-c/step-01-detect-mode.md +109 -0
- package/_bmad/tea/workflows/testarch/test-design/steps-c/step-02-load-context.md +127 -0
- package/_bmad/tea/workflows/testarch/test-design/steps-c/step-03-risk-and-testability.md +85 -0
- package/_bmad/tea/workflows/testarch/test-design/steps-c/step-04-coverage-plan.md +98 -0
- package/_bmad/tea/workflows/testarch/test-design/steps-c/step-05-generate-output.md +97 -0
- package/_bmad/tea/workflows/testarch/test-design/steps-e/step-01-assess.md +65 -0
- package/_bmad/tea/workflows/testarch/test-design/steps-e/step-02-apply-edit.md +60 -0
- package/_bmad/tea/workflows/testarch/test-design/steps-v/step-01-validate.md +67 -0
- package/_bmad/tea/workflows/testarch/test-design/test-design-architecture-template.md +222 -0
- package/_bmad/tea/workflows/testarch/test-design/test-design-qa-template.md +296 -0
- package/_bmad/tea/workflows/testarch/test-design/test-design-template.md +294 -0
- package/_bmad/tea/workflows/testarch/test-design/validation-report-20260127-095021.md +73 -0
- package/_bmad/tea/workflows/testarch/test-design/validation-report-20260127-102401.md +116 -0
- package/_bmad/tea/workflows/testarch/test-design/workflow-plan.md +22 -0
- package/_bmad/tea/workflows/testarch/test-design/workflow.md +39 -0
- package/_bmad/tea/workflows/testarch/test-design/workflow.yaml +69 -0
- package/_bmad/tea/workflows/testarch/test-review/checklist.md +472 -0
- package/_bmad/tea/workflows/testarch/test-review/instructions.md +36 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-01-load-context.md +101 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-02-discover-tests.md +69 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-03-quality-evaluation.md +184 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-03a-subprocess-determinism.md +214 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-03b-subprocess-isolation.md +125 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-03c-subprocess-maintainability.md +102 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-03d-subprocess-coverage.md +111 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-03e-subprocess-performance.md +117 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-03f-aggregate-scores.md +246 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-c/step-04-generate-report.md +72 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-e/step-01-assess.md +65 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-e/step-02-apply-edit.md +60 -0
- package/_bmad/tea/workflows/testarch/test-review/steps-v/step-01-validate.md +67 -0
- package/_bmad/tea/workflows/testarch/test-review/test-review-template.md +390 -0
- package/_bmad/tea/workflows/testarch/test-review/validation-report-20260127-095021.md +72 -0
- package/_bmad/tea/workflows/testarch/test-review/validation-report-20260127-102401.md +114 -0
- package/_bmad/tea/workflows/testarch/test-review/workflow-plan.md +18 -0
- package/_bmad/tea/workflows/testarch/test-review/workflow.md +39 -0
- package/_bmad/tea/workflows/testarch/test-review/workflow.yaml +46 -0
- package/_bmad/tea/workflows/testarch/trace/checklist.md +642 -0
- package/_bmad/tea/workflows/testarch/trace/instructions.md +36 -0
- package/_bmad/tea/workflows/testarch/trace/steps-c/step-01-load-context.md +80 -0
- package/_bmad/tea/workflows/testarch/trace/steps-c/step-02-discover-tests.md +69 -0
- package/_bmad/tea/workflows/testarch/trace/steps-c/step-03-map-criteria.md +65 -0
- package/_bmad/tea/workflows/testarch/trace/steps-c/step-04-analyze-gaps.md +244 -0
- package/_bmad/tea/workflows/testarch/trace/steps-c/step-05-gate-decision.md +232 -0
- package/_bmad/tea/workflows/testarch/trace/steps-e/step-01-assess.md +65 -0
- package/_bmad/tea/workflows/testarch/trace/steps-e/step-02-apply-edit.md +60 -0
- package/_bmad/tea/workflows/testarch/trace/steps-v/step-01-validate.md +67 -0
- package/_bmad/tea/workflows/testarch/trace/trace-template.md +675 -0
- package/_bmad/tea/workflows/testarch/trace/validation-report-20260127-095021.md +73 -0
- package/_bmad/tea/workflows/testarch/trace/validation-report-20260127-102401.md +116 -0
- package/_bmad/tea/workflows/testarch/trace/workflow-plan.md +21 -0
- package/_bmad/tea/workflows/testarch/trace/workflow.md +39 -0
- package/_bmad/tea/workflows/testarch/trace/workflow.yaml +55 -0
- package/index.js +37 -58
- package/package.json +25 -4
- package/scripts/bmad-doctor.js +324 -0
- package/scripts/install-all-agents.js +55 -207
- package/scripts/install-emma.js +17 -14
- package/scripts/install-wade.js +17 -14
- package/scripts/postinstall.js +10 -7
- package/scripts/update/bmad-migrate.js +58 -5
- package/scripts/update/bmad-update.js +18 -8
- package/scripts/update/bmad-version.js +21 -7
- package/scripts/update/lib/backup-manager.js +22 -58
- package/scripts/update/lib/config-merger.js +4 -39
- package/scripts/update/lib/migration-runner.js +78 -114
- package/scripts/update/lib/refresh-installation.js +132 -0
- package/scripts/update/lib/utils.js +96 -0
- package/scripts/update/lib/validator.js +31 -151
- package/scripts/update/lib/version-detector.js +36 -41
- package/scripts/update/migrations/1.0.x-to-1.3.0.js +41 -222
- package/scripts/update/migrations/1.1.x-to-1.3.0.js +7 -188
- package/scripts/update/migrations/1.2.x-to-1.3.0.js +7 -188
- package/scripts/update/migrations/registry.js +27 -53
- package/_bmad-output/design-artifacts/EMMA-USER-GUIDE.md +0 -710
- package/_bmad-output/design-artifacts/WADE-USER-GUIDE.md +0 -1191
- package/_bmad-output/vortex-artifacts/EMMA-USER-GUIDE.md +0 -450
- package/_bmad-output/vortex-artifacts/WADE-USER-GUIDE.md +0 -471
- package/create-github-release.sh +0 -19
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
const fs = require('fs-extra');
|
|
4
|
-
const path = require('path');
|
|
5
4
|
const yaml = require('js-yaml');
|
|
6
5
|
|
|
7
6
|
/**
|
|
@@ -24,7 +23,7 @@ async function mergeConfig(currentConfigPath, newVersion, updates = {}) {
|
|
|
24
23
|
try {
|
|
25
24
|
const currentContent = fs.readFileSync(currentConfigPath, 'utf8');
|
|
26
25
|
current = yaml.load(currentContent);
|
|
27
|
-
} catch (
|
|
26
|
+
} catch (_error) {
|
|
28
27
|
console.warn('Warning: Could not parse current config.yaml, using defaults');
|
|
29
28
|
current = {};
|
|
30
29
|
}
|
|
@@ -80,7 +79,7 @@ function extractUserPreferences(config) {
|
|
|
80
79
|
prefs.output_folder = config.output_folder;
|
|
81
80
|
}
|
|
82
81
|
|
|
83
|
-
if (
|
|
82
|
+
if (Object.prototype.hasOwnProperty.call(config, 'party_mode_enabled')) {
|
|
84
83
|
prefs.party_mode_enabled = config.party_mode_enabled;
|
|
85
84
|
}
|
|
86
85
|
|
|
@@ -111,7 +110,7 @@ function validateConfig(config) {
|
|
|
111
110
|
];
|
|
112
111
|
|
|
113
112
|
for (const field of requiredFields) {
|
|
114
|
-
if (!
|
|
113
|
+
if (!Object.prototype.hasOwnProperty.call(config, field)) {
|
|
115
114
|
errors.push(`Missing required field: ${field}`);
|
|
116
115
|
}
|
|
117
116
|
}
|
|
@@ -189,44 +188,10 @@ function addMigrationHistory(config, fromVersion, toVersion, migrationsApplied)
|
|
|
189
188
|
return config;
|
|
190
189
|
}
|
|
191
190
|
|
|
192
|
-
/**
|
|
193
|
-
* Get default config template for a version
|
|
194
|
-
* @param {string} version - Version to generate template for
|
|
195
|
-
* @returns {object} Default config template
|
|
196
|
-
*/
|
|
197
|
-
function getDefaultConfig(version) {
|
|
198
|
-
return {
|
|
199
|
-
submodule_name: '_vortex',
|
|
200
|
-
description: 'Contextualize and Externalize streams - Strategic framing and validated learning',
|
|
201
|
-
module: 'bme',
|
|
202
|
-
version,
|
|
203
|
-
output_folder: '{project-root}/_bmad-output/vortex-artifacts',
|
|
204
|
-
user_name: '{user}',
|
|
205
|
-
communication_language: 'en',
|
|
206
|
-
agents: [
|
|
207
|
-
'contextualization-expert',
|
|
208
|
-
'lean-experiments-specialist'
|
|
209
|
-
],
|
|
210
|
-
workflows: [
|
|
211
|
-
'lean-persona',
|
|
212
|
-
'product-vision',
|
|
213
|
-
'contextualize-scope',
|
|
214
|
-
'mvp',
|
|
215
|
-
'lean-experiment',
|
|
216
|
-
'proof-of-concept',
|
|
217
|
-
'proof-of-value'
|
|
218
|
-
],
|
|
219
|
-
party_mode_enabled: true,
|
|
220
|
-
core_module: 'bme',
|
|
221
|
-
migration_history: []
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
|
|
225
191
|
module.exports = {
|
|
226
192
|
mergeConfig,
|
|
227
193
|
extractUserPreferences,
|
|
228
194
|
validateConfig,
|
|
229
195
|
writeConfig,
|
|
230
|
-
addMigrationHistory
|
|
231
|
-
getDefaultConfig
|
|
196
|
+
addMigrationHistory
|
|
232
197
|
};
|
|
@@ -3,26 +3,34 @@
|
|
|
3
3
|
const fs = require('fs-extra');
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const chalk = require('chalk');
|
|
6
|
+
const yaml = require('js-yaml');
|
|
7
|
+
const { findProjectRoot, getPackageVersion } = require('./utils');
|
|
6
8
|
const backupManager = require('./backup-manager');
|
|
7
|
-
const versionDetector = require('./version-detector');
|
|
8
9
|
const configMerger = require('./config-merger');
|
|
9
10
|
const validator = require('./validator');
|
|
11
|
+
const { refreshInstallation } = require('./refresh-installation');
|
|
10
12
|
const registry = require('../migrations/registry');
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Migration Runner for BMAD-Enhanced
|
|
14
|
-
* Core orchestration: executes
|
|
16
|
+
* Core orchestration: executes migration deltas, refreshes installation, handles backups and rollback.
|
|
15
17
|
*/
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
|
-
* Run migrations from current version to
|
|
19
|
-
* @param {string} fromVersion - Current version
|
|
20
|
-
* @param {string} toVersion - Target version
|
|
20
|
+
* Run migrations from current version to the current package version.
|
|
21
|
+
* @param {string} fromVersion - Current installed version
|
|
21
22
|
* @param {object} options - Options { dryRun, verbose }
|
|
22
23
|
* @returns {Promise<object>} Migration result
|
|
23
24
|
*/
|
|
24
|
-
async function runMigrations(fromVersion,
|
|
25
|
+
async function runMigrations(fromVersion, options = {}) {
|
|
25
26
|
const { dryRun = false, verbose = false } = options;
|
|
27
|
+
const toVersion = getPackageVersion();
|
|
28
|
+
|
|
29
|
+
// Resolve project root
|
|
30
|
+
const projectRoot = findProjectRoot();
|
|
31
|
+
if (!projectRoot) {
|
|
32
|
+
throw new Error('Not in a BMAD project. Could not find _bmad/ directory.');
|
|
33
|
+
}
|
|
26
34
|
|
|
27
35
|
console.log('');
|
|
28
36
|
if (dryRun) {
|
|
@@ -31,8 +39,8 @@ async function runMigrations(fromVersion, toVersion, options = {}) {
|
|
|
31
39
|
console.log('');
|
|
32
40
|
}
|
|
33
41
|
|
|
34
|
-
// 1. Get applicable
|
|
35
|
-
const migrations = registry.getMigrationsFor(fromVersion
|
|
42
|
+
// 1. Get applicable migration deltas
|
|
43
|
+
const migrations = registry.getMigrationsFor(fromVersion);
|
|
36
44
|
|
|
37
45
|
if (migrations.length === 0) {
|
|
38
46
|
console.log(chalk.yellow('No migrations needed'));
|
|
@@ -52,7 +60,7 @@ async function runMigrations(fromVersion, toVersion, options = {}) {
|
|
|
52
60
|
}
|
|
53
61
|
|
|
54
62
|
// 2. Acquire migration lock
|
|
55
|
-
await acquireMigrationLock();
|
|
63
|
+
await acquireMigrationLock(projectRoot);
|
|
56
64
|
|
|
57
65
|
let backupMetadata = null;
|
|
58
66
|
const results = [];
|
|
@@ -60,20 +68,18 @@ async function runMigrations(fromVersion, toVersion, options = {}) {
|
|
|
60
68
|
try {
|
|
61
69
|
// 3. Create backup
|
|
62
70
|
console.log(chalk.cyan('[1/5] Creating backup...'));
|
|
63
|
-
|
|
64
|
-
backupMetadata = await backupManager.createBackup(fromVersion);
|
|
65
|
-
backupMetadata.userDataCount = userDataCount;
|
|
71
|
+
backupMetadata = await backupManager.createBackup(fromVersion, projectRoot);
|
|
66
72
|
console.log(chalk.green(`✓ Backup created: ${path.basename(backupMetadata.backup_dir)}`));
|
|
67
73
|
console.log('');
|
|
68
74
|
|
|
69
|
-
// 4. Execute
|
|
70
|
-
console.log(chalk.cyan('[2/5] Running
|
|
75
|
+
// 4. Execute migration deltas sequentially
|
|
76
|
+
console.log(chalk.cyan('[2/5] Running migration deltas...'));
|
|
71
77
|
for (let i = 0; i < migrations.length; i++) {
|
|
72
78
|
const migration = migrations[i];
|
|
73
79
|
console.log(chalk.cyan(`\nMigration ${i + 1}/${migrations.length}: ${migration.name}`));
|
|
74
80
|
|
|
75
81
|
try {
|
|
76
|
-
const changes = await executeMigration(migration, { verbose });
|
|
82
|
+
const changes = await executeMigration(migration, projectRoot, { verbose });
|
|
77
83
|
results.push({
|
|
78
84
|
name: migration.name,
|
|
79
85
|
success: true,
|
|
@@ -87,20 +93,30 @@ async function runMigrations(fromVersion, toVersion, options = {}) {
|
|
|
87
93
|
}
|
|
88
94
|
}
|
|
89
95
|
console.log('');
|
|
90
|
-
console.log(chalk.green('✓ All
|
|
96
|
+
console.log(chalk.green('✓ All migration deltas completed'));
|
|
91
97
|
console.log('');
|
|
92
98
|
|
|
93
|
-
// 5.
|
|
94
|
-
console.log(chalk.cyan('[3/5]
|
|
95
|
-
await
|
|
99
|
+
// 5. Refresh installation (copy latest files from package)
|
|
100
|
+
console.log(chalk.cyan('[3/5] Refreshing installation files...'));
|
|
101
|
+
const refreshChanges = await refreshInstallation(projectRoot);
|
|
102
|
+
results.push({
|
|
103
|
+
name: 'refresh-installation',
|
|
104
|
+
success: true,
|
|
105
|
+
changes: refreshChanges
|
|
106
|
+
});
|
|
107
|
+
console.log(chalk.green('✓ Installation refreshed'));
|
|
108
|
+
console.log('');
|
|
109
|
+
|
|
110
|
+
// 6. Update migration history in config.yaml
|
|
111
|
+
console.log(chalk.cyan('[4/5] Updating configuration...'));
|
|
112
|
+
await updateMigrationHistory(projectRoot, fromVersion, toVersion, results);
|
|
96
113
|
console.log(chalk.green('✓ Migration history updated'));
|
|
97
114
|
console.log('');
|
|
98
115
|
|
|
99
|
-
//
|
|
100
|
-
console.log(chalk.cyan('[
|
|
101
|
-
const validationResult = await validator.validateInstallation(backupMetadata);
|
|
116
|
+
// 7. Validate installation
|
|
117
|
+
console.log(chalk.cyan('[5/5] Validating installation...'));
|
|
118
|
+
const validationResult = await validator.validateInstallation(backupMetadata, projectRoot);
|
|
102
119
|
|
|
103
|
-
// Display validation results
|
|
104
120
|
validationResult.checks.forEach(check => {
|
|
105
121
|
if (check.passed) {
|
|
106
122
|
console.log(chalk.green(` ✓ ${check.name}`));
|
|
@@ -123,21 +139,17 @@ async function runMigrations(fromVersion, toVersion, options = {}) {
|
|
|
123
139
|
console.log(chalk.green('✓ Installation validated'));
|
|
124
140
|
console.log('');
|
|
125
141
|
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
const deletedCount = await backupManager.cleanupOldBackups(5);
|
|
142
|
+
// 8. Cleanup old backups
|
|
143
|
+
const deletedCount = await backupManager.cleanupOldBackups(5, projectRoot);
|
|
129
144
|
if (deletedCount > 0) {
|
|
130
145
|
console.log(chalk.green(`✓ Cleaned up ${deletedCount} old backup(s)`));
|
|
131
|
-
} else {
|
|
132
|
-
console.log(chalk.green('✓ No old backups to clean up'));
|
|
133
146
|
}
|
|
134
|
-
console.log('');
|
|
135
147
|
|
|
136
148
|
// Release lock
|
|
137
|
-
await releaseMigrationLock();
|
|
149
|
+
await releaseMigrationLock(projectRoot);
|
|
138
150
|
|
|
139
151
|
// Create migration log
|
|
140
|
-
await createMigrationLog(fromVersion, toVersion, results, backupMetadata);
|
|
152
|
+
await createMigrationLog(projectRoot, fromVersion, toVersion, results, backupMetadata);
|
|
141
153
|
|
|
142
154
|
return {
|
|
143
155
|
success: true,
|
|
@@ -158,7 +170,7 @@ async function runMigrations(fromVersion, toVersion, options = {}) {
|
|
|
158
170
|
if (backupMetadata) {
|
|
159
171
|
console.log(chalk.yellow('Restoring from backup...'));
|
|
160
172
|
try {
|
|
161
|
-
await backupManager.restoreBackup(backupMetadata);
|
|
173
|
+
await backupManager.restoreBackup(backupMetadata, projectRoot);
|
|
162
174
|
console.log(chalk.green('✓ Installation restored from backup'));
|
|
163
175
|
console.log('');
|
|
164
176
|
} catch (restoreError) {
|
|
@@ -171,10 +183,10 @@ async function runMigrations(fromVersion, toVersion, options = {}) {
|
|
|
171
183
|
}
|
|
172
184
|
|
|
173
185
|
// Release lock
|
|
174
|
-
await releaseMigrationLock();
|
|
186
|
+
await releaseMigrationLock(projectRoot);
|
|
175
187
|
|
|
176
188
|
// Create error log
|
|
177
|
-
await createErrorLog(fromVersion, toVersion, error, backupMetadata);
|
|
189
|
+
await createErrorLog(projectRoot, fromVersion, toVersion, error, backupMetadata);
|
|
178
190
|
|
|
179
191
|
throw error;
|
|
180
192
|
}
|
|
@@ -182,8 +194,6 @@ async function runMigrations(fromVersion, toVersion, options = {}) {
|
|
|
182
194
|
|
|
183
195
|
/**
|
|
184
196
|
* Preview migrations without applying
|
|
185
|
-
* @param {Array} migrations - Migrations to preview
|
|
186
|
-
* @returns {Promise<object>} Preview result
|
|
187
197
|
*/
|
|
188
198
|
async function previewMigrations(migrations) {
|
|
189
199
|
const previews = [];
|
|
@@ -199,40 +209,35 @@ async function previewMigrations(migrations) {
|
|
|
199
209
|
preview.actions.forEach(action => {
|
|
200
210
|
console.log(chalk.gray(` - ${action}`));
|
|
201
211
|
});
|
|
202
|
-
|
|
203
|
-
previews.push({
|
|
204
|
-
name: migration.name,
|
|
205
|
-
preview
|
|
206
|
-
});
|
|
212
|
+
previews.push({ name: migration.name, preview });
|
|
207
213
|
}
|
|
208
214
|
}
|
|
209
215
|
|
|
216
|
+
console.log('');
|
|
217
|
+
console.log(chalk.white('After deltas, installation will be refreshed:'));
|
|
218
|
+
console.log(chalk.gray(' - Refresh agent files'));
|
|
219
|
+
console.log(chalk.gray(' - Refresh 7 workflow directories'));
|
|
220
|
+
console.log(chalk.gray(' - Update config.yaml (preserving user preferences)'));
|
|
221
|
+
console.log(chalk.gray(' - Update user guides (with .bak backup)'));
|
|
210
222
|
console.log('');
|
|
211
223
|
console.log(chalk.green('To apply these changes, run:'));
|
|
212
224
|
console.log(chalk.cyan(' npx bmad-update'));
|
|
213
225
|
console.log('');
|
|
214
226
|
|
|
215
|
-
return {
|
|
216
|
-
success: true,
|
|
217
|
-
dryRun: true,
|
|
218
|
-
previews
|
|
219
|
-
};
|
|
227
|
+
return { success: true, dryRun: true, previews };
|
|
220
228
|
}
|
|
221
229
|
|
|
222
230
|
/**
|
|
223
|
-
* Execute a single migration
|
|
224
|
-
* @param {object} migration - Migration to execute
|
|
225
|
-
* @param {object} options - Options { verbose }
|
|
226
|
-
* @returns {Promise<Array<string>>} Changes made
|
|
231
|
+
* Execute a single migration delta
|
|
227
232
|
*/
|
|
228
|
-
async function executeMigration(migration, options = {}) {
|
|
233
|
+
async function executeMigration(migration, projectRoot, options = {}) {
|
|
229
234
|
const { verbose = false } = options;
|
|
230
235
|
|
|
231
236
|
if (!migration.module || !migration.module.apply) {
|
|
232
237
|
throw new Error(`Migration ${migration.name} has no apply function`);
|
|
233
238
|
}
|
|
234
239
|
|
|
235
|
-
const changes = await migration.module.apply();
|
|
240
|
+
const changes = await migration.module.apply(projectRoot);
|
|
236
241
|
|
|
237
242
|
if (verbose) {
|
|
238
243
|
changes.forEach(change => {
|
|
@@ -245,45 +250,35 @@ async function executeMigration(migration, options = {}) {
|
|
|
245
250
|
|
|
246
251
|
/**
|
|
247
252
|
* Update migration history in config.yaml
|
|
248
|
-
* @param {string} fromVersion - Version migrated from
|
|
249
|
-
* @param {string} toVersion - Version migrated to
|
|
250
|
-
* @param {Array} results - Migration results
|
|
251
253
|
*/
|
|
252
|
-
async function updateMigrationHistory(fromVersion, toVersion, results) {
|
|
253
|
-
const configPath = path.join(
|
|
254
|
+
async function updateMigrationHistory(projectRoot, fromVersion, toVersion, results) {
|
|
255
|
+
const configPath = path.join(projectRoot, '_bmad/bme/_vortex/config.yaml');
|
|
254
256
|
|
|
255
257
|
if (!fs.existsSync(configPath)) {
|
|
256
|
-
throw new Error('config.yaml not found');
|
|
258
|
+
throw new Error('config.yaml not found after refresh');
|
|
257
259
|
}
|
|
258
260
|
|
|
259
261
|
const configContent = fs.readFileSync(configPath, 'utf8');
|
|
260
|
-
const yaml = require('js-yaml');
|
|
261
262
|
const config = yaml.load(configContent);
|
|
262
263
|
|
|
263
|
-
|
|
264
|
-
|
|
264
|
+
const migrationsApplied = results
|
|
265
|
+
.filter(r => r.name !== 'refresh-installation')
|
|
266
|
+
.map(r => r.name);
|
|
267
|
+
|
|
265
268
|
const updatedConfig = configMerger.addMigrationHistory(
|
|
266
|
-
config,
|
|
267
|
-
fromVersion,
|
|
268
|
-
toVersion,
|
|
269
|
-
migrationsApplied
|
|
269
|
+
config, fromVersion, toVersion, migrationsApplied
|
|
270
270
|
);
|
|
271
271
|
|
|
272
|
-
// Write config
|
|
273
272
|
await configMerger.writeConfig(configPath, updatedConfig);
|
|
274
273
|
}
|
|
275
274
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
*/
|
|
279
|
-
async function acquireMigrationLock() {
|
|
280
|
-
const lockFile = path.join(process.cwd(), '_bmad-output/.migration-lock');
|
|
275
|
+
async function acquireMigrationLock(projectRoot) {
|
|
276
|
+
const lockFile = path.join(projectRoot, '_bmad-output/.migration-lock');
|
|
281
277
|
|
|
282
278
|
if (fs.existsSync(lockFile)) {
|
|
283
279
|
const lock = await fs.readJson(lockFile);
|
|
284
280
|
const age = Date.now() - lock.timestamp;
|
|
285
281
|
|
|
286
|
-
// Stale lock (older than 5 minutes)
|
|
287
282
|
if (age > 5 * 60 * 1000) {
|
|
288
283
|
console.log(chalk.yellow('Removing stale migration lock'));
|
|
289
284
|
await fs.remove(lockFile);
|
|
@@ -292,39 +287,22 @@ async function acquireMigrationLock() {
|
|
|
292
287
|
}
|
|
293
288
|
}
|
|
294
289
|
|
|
295
|
-
|
|
296
|
-
await fs.
|
|
297
|
-
await fs.writeJson(lockFile, {
|
|
298
|
-
timestamp: Date.now(),
|
|
299
|
-
pid: process.pid
|
|
300
|
-
});
|
|
290
|
+
await fs.ensureDir(path.join(projectRoot, '_bmad-output'));
|
|
291
|
+
await fs.writeJson(lockFile, { timestamp: Date.now(), pid: process.pid });
|
|
301
292
|
}
|
|
302
293
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
*/
|
|
306
|
-
async function releaseMigrationLock() {
|
|
307
|
-
const lockFile = path.join(process.cwd(), '_bmad-output/.migration-lock');
|
|
308
|
-
|
|
294
|
+
async function releaseMigrationLock(projectRoot) {
|
|
295
|
+
const lockFile = path.join(projectRoot, '_bmad-output/.migration-lock');
|
|
309
296
|
if (fs.existsSync(lockFile)) {
|
|
310
297
|
await fs.remove(lockFile);
|
|
311
298
|
}
|
|
312
299
|
}
|
|
313
300
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
* @param {string} fromVersion - Version migrated from
|
|
317
|
-
* @param {string} toVersion - Version migrated to
|
|
318
|
-
* @param {Array} results - Migration results
|
|
319
|
-
* @param {object} backupMetadata - Backup metadata
|
|
320
|
-
*/
|
|
321
|
-
async function createMigrationLog(fromVersion, toVersion, results, backupMetadata) {
|
|
322
|
-
const logsDir = path.join(process.cwd(), '_bmad-output/.logs');
|
|
301
|
+
async function createMigrationLog(projectRoot, fromVersion, toVersion, results, backupMetadata) {
|
|
302
|
+
const logsDir = path.join(projectRoot, '_bmad-output/.logs');
|
|
323
303
|
await fs.ensureDir(logsDir);
|
|
324
304
|
|
|
325
|
-
const
|
|
326
|
-
const logFile = path.join(logsDir, `migration-${timestamp}.log`);
|
|
327
|
-
|
|
305
|
+
const logFile = path.join(logsDir, `migration-${Date.now()}.log`);
|
|
328
306
|
const logContent = [
|
|
329
307
|
`BMAD-Enhanced Migration Log`,
|
|
330
308
|
`Date: ${new Date().toISOString()}`,
|
|
@@ -345,20 +323,11 @@ async function createMigrationLog(fromVersion, toVersion, results, backupMetadat
|
|
|
345
323
|
await fs.writeFile(logFile, logContent, 'utf8');
|
|
346
324
|
}
|
|
347
325
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
* @param {string} fromVersion - Version migrated from
|
|
351
|
-
* @param {string} toVersion - Version migrated to
|
|
352
|
-
* @param {Error} error - Error that occurred
|
|
353
|
-
* @param {object} backupMetadata - Backup metadata (if exists)
|
|
354
|
-
*/
|
|
355
|
-
async function createErrorLog(fromVersion, toVersion, error, backupMetadata) {
|
|
356
|
-
const logsDir = path.join(process.cwd(), '_bmad-output/.logs');
|
|
326
|
+
async function createErrorLog(projectRoot, fromVersion, toVersion, error, backupMetadata) {
|
|
327
|
+
const logsDir = path.join(projectRoot, '_bmad-output/.logs');
|
|
357
328
|
await fs.ensureDir(logsDir);
|
|
358
329
|
|
|
359
|
-
const
|
|
360
|
-
const logFile = path.join(logsDir, `migration-error-${timestamp}.log`);
|
|
361
|
-
|
|
330
|
+
const logFile = path.join(logsDir, `migration-error-${Date.now()}.log`);
|
|
362
331
|
const logContent = [
|
|
363
332
|
`BMAD-Enhanced Migration Error Log`,
|
|
364
333
|
`Date: ${new Date().toISOString()}`,
|
|
@@ -373,18 +342,13 @@ async function createErrorLog(fromVersion, toVersion, error, backupMetadata) {
|
|
|
373
342
|
backupMetadata ? `Backup: ${backupMetadata.backup_dir}` : 'No backup created',
|
|
374
343
|
backupMetadata ? 'Status: ROLLED BACK' : 'Status: FAILED (no backup)',
|
|
375
344
|
'',
|
|
376
|
-
'Please report this issue at: https://github.com/amalik/BMAD-Enhanced/issues'
|
|
377
|
-
'Include this log file when reporting.'
|
|
345
|
+
'Please report this issue at: https://github.com/amalik/BMAD-Enhanced/issues'
|
|
378
346
|
].join('\n');
|
|
379
347
|
|
|
380
348
|
await fs.writeFile(logFile, logContent, 'utf8');
|
|
381
|
-
|
|
382
349
|
console.log(chalk.gray(`Migration log: ${logFile}`));
|
|
383
350
|
}
|
|
384
351
|
|
|
385
|
-
/**
|
|
386
|
-
* Custom error for migration failures
|
|
387
|
-
*/
|
|
388
352
|
class MigrationError extends Error {
|
|
389
353
|
constructor(migrationName, originalError) {
|
|
390
354
|
super(`Migration ${migrationName} failed: ${originalError.message}`);
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const { getPackageVersion } = require('./utils');
|
|
6
|
+
const configMerger = require('./config-merger');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Refresh Installation for BMAD-Enhanced
|
|
10
|
+
*
|
|
11
|
+
* Copies latest agent files, workflows, config, and user guides from the
|
|
12
|
+
* package to the project. Called ONCE after all migration deltas have run,
|
|
13
|
+
* or directly by the install script.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const AGENT_FILES = [
|
|
17
|
+
'contextualization-expert.md',
|
|
18
|
+
'lean-experiments-specialist.md'
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
const WORKFLOWS = [
|
|
22
|
+
'lean-persona',
|
|
23
|
+
'product-vision',
|
|
24
|
+
'contextualize-scope',
|
|
25
|
+
'mvp',
|
|
26
|
+
'lean-experiment',
|
|
27
|
+
'proof-of-concept',
|
|
28
|
+
'proof-of-value'
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const USER_GUIDES = [
|
|
32
|
+
'EMMA-USER-GUIDE.md',
|
|
33
|
+
'WADE-USER-GUIDE.md'
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Refresh all installation files from the package to the project.
|
|
38
|
+
*
|
|
39
|
+
* @param {string} projectRoot - Absolute path to project root
|
|
40
|
+
* @param {object} options
|
|
41
|
+
* @param {boolean} options.backupGuides - Create .bak of user guides before overwriting (default: true)
|
|
42
|
+
* @param {boolean} options.verbose - Log each action (default: true)
|
|
43
|
+
* @returns {Promise<Array<string>>} List of changes made
|
|
44
|
+
*/
|
|
45
|
+
async function refreshInstallation(projectRoot, options = {}) {
|
|
46
|
+
const { backupGuides = true, verbose = true } = options;
|
|
47
|
+
const changes = [];
|
|
48
|
+
const packageRoot = path.join(__dirname, '..', '..', '..');
|
|
49
|
+
const packageVortex = path.join(packageRoot, '_bmad', 'bme', '_vortex');
|
|
50
|
+
const targetVortex = path.join(projectRoot, '_bmad', 'bme', '_vortex');
|
|
51
|
+
const version = getPackageVersion();
|
|
52
|
+
|
|
53
|
+
// 1. Copy agent files
|
|
54
|
+
const agentsSource = path.join(packageVortex, 'agents');
|
|
55
|
+
const agentsTarget = path.join(targetVortex, 'agents');
|
|
56
|
+
await fs.ensureDir(agentsTarget);
|
|
57
|
+
|
|
58
|
+
for (const file of AGENT_FILES) {
|
|
59
|
+
const src = path.join(agentsSource, file);
|
|
60
|
+
if (fs.existsSync(src)) {
|
|
61
|
+
await fs.copy(src, path.join(agentsTarget, file), { overwrite: true });
|
|
62
|
+
changes.push(`Refreshed agent: ${file}`);
|
|
63
|
+
if (verbose) console.log(` Refreshed agent: ${file}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Remove deprecated agent files if still present
|
|
68
|
+
const deprecatedAgents = ['empathy-mapper.md', 'wireframe-designer.md'];
|
|
69
|
+
for (const file of deprecatedAgents) {
|
|
70
|
+
const agentPath = path.join(agentsTarget, file);
|
|
71
|
+
if (fs.existsSync(agentPath)) {
|
|
72
|
+
await fs.remove(agentPath);
|
|
73
|
+
changes.push(`Removed deprecated agent: ${file}`);
|
|
74
|
+
if (verbose) console.log(` Removed deprecated agent: ${file}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// 2. Copy workflow directories
|
|
79
|
+
const workflowsSource = path.join(packageVortex, 'workflows');
|
|
80
|
+
const workflowsTarget = path.join(targetVortex, 'workflows');
|
|
81
|
+
await fs.ensureDir(workflowsTarget);
|
|
82
|
+
|
|
83
|
+
for (const wf of WORKFLOWS) {
|
|
84
|
+
const src = path.join(workflowsSource, wf);
|
|
85
|
+
if (fs.existsSync(src)) {
|
|
86
|
+
await fs.copy(src, path.join(workflowsTarget, wf), { overwrite: true });
|
|
87
|
+
changes.push(`Refreshed workflow: ${wf}`);
|
|
88
|
+
if (verbose) console.log(` Refreshed workflow: ${wf}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 3. Update config.yaml (merge, preserving user prefs)
|
|
93
|
+
const configPath = path.join(targetVortex, 'config.yaml');
|
|
94
|
+
await fs.ensureDir(path.dirname(configPath));
|
|
95
|
+
|
|
96
|
+
const updates = {
|
|
97
|
+
agents: ['contextualization-expert', 'lean-experiments-specialist'],
|
|
98
|
+
workflows: WORKFLOWS
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const merged = await configMerger.mergeConfig(configPath, version, updates);
|
|
102
|
+
await configMerger.writeConfig(configPath, merged);
|
|
103
|
+
changes.push(`Updated config.yaml to v${version}`);
|
|
104
|
+
if (verbose) console.log(` Updated config.yaml to v${version}`);
|
|
105
|
+
|
|
106
|
+
// 4. Copy user guides (with optional backup)
|
|
107
|
+
const guidesSource = path.join(packageRoot, '_bmad-output', 'vortex-artifacts');
|
|
108
|
+
const guidesTarget = path.join(projectRoot, '_bmad-output', 'vortex-artifacts');
|
|
109
|
+
await fs.ensureDir(guidesTarget);
|
|
110
|
+
|
|
111
|
+
for (const guide of USER_GUIDES) {
|
|
112
|
+
const src = path.join(guidesSource, guide);
|
|
113
|
+
const dest = path.join(guidesTarget, guide);
|
|
114
|
+
|
|
115
|
+
if (fs.existsSync(src)) {
|
|
116
|
+
// Backup existing guide before overwriting
|
|
117
|
+
if (backupGuides && fs.existsSync(dest)) {
|
|
118
|
+
await fs.copy(dest, dest + '.bak', { overwrite: true });
|
|
119
|
+
changes.push(`Backed up ${guide} → ${guide}.bak`);
|
|
120
|
+
if (verbose) console.log(` Backed up ${guide} → ${guide}.bak`);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
await fs.copy(src, dest, { overwrite: true });
|
|
124
|
+
changes.push(`Refreshed guide: ${guide}`);
|
|
125
|
+
if (verbose) console.log(` Refreshed guide: ${guide}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return changes;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
module.exports = { refreshInstallation };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Shared utilities for the BMAD-Enhanced update system.
|
|
8
|
+
* Single source of truth for version, comparison, project detection.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Get the package version at runtime from package.json.
|
|
13
|
+
* This is the SINGLE SOURCE OF TRUTH for version - never hardcode versions elsewhere.
|
|
14
|
+
* @returns {string} e.g. "1.3.8"
|
|
15
|
+
*/
|
|
16
|
+
function getPackageVersion() {
|
|
17
|
+
const pkg = require('../../../package.json');
|
|
18
|
+
return pkg.version;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Compare two semantic version strings.
|
|
23
|
+
* @param {string} v1
|
|
24
|
+
* @param {string} v2
|
|
25
|
+
* @returns {number} -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
26
|
+
*/
|
|
27
|
+
function compareVersions(v1, v2) {
|
|
28
|
+
const parts1 = v1.split('.').map(Number);
|
|
29
|
+
const parts2 = v2.split('.').map(Number);
|
|
30
|
+
|
|
31
|
+
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
|
32
|
+
const p1 = parts1[i] || 0;
|
|
33
|
+
const p2 = parts2[i] || 0;
|
|
34
|
+
if (p1 < p2) return -1;
|
|
35
|
+
if (p1 > p2) return 1;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Count user data files in _bmad-output/ (excluding .backups, .logs).
|
|
43
|
+
* @param {string} projectRoot - Absolute path to project root
|
|
44
|
+
* @returns {Promise<number>}
|
|
45
|
+
*/
|
|
46
|
+
async function countUserDataFiles(projectRoot) {
|
|
47
|
+
const outputDir = path.join(projectRoot, '_bmad-output');
|
|
48
|
+
|
|
49
|
+
if (!fs.existsSync(outputDir)) {
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
let count = 0;
|
|
54
|
+
|
|
55
|
+
async function walk(dir) {
|
|
56
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
57
|
+
for (const entry of entries) {
|
|
58
|
+
if (entry.name === '.backups' || entry.name === '.logs') continue;
|
|
59
|
+
const full = path.join(dir, entry.name);
|
|
60
|
+
if (entry.isDirectory()) {
|
|
61
|
+
await walk(full);
|
|
62
|
+
} else if (entry.isFile()) {
|
|
63
|
+
count++;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
await walk(outputDir);
|
|
69
|
+
return count;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Find the project root by walking up from cwd looking for _bmad/ directory.
|
|
74
|
+
* @returns {string|null} Absolute path to project root, or null if not found
|
|
75
|
+
*/
|
|
76
|
+
function findProjectRoot() {
|
|
77
|
+
let dir = process.cwd();
|
|
78
|
+
const root = path.parse(dir).root;
|
|
79
|
+
|
|
80
|
+
while (true) {
|
|
81
|
+
if (fs.existsSync(path.join(dir, '_bmad'))) {
|
|
82
|
+
return dir;
|
|
83
|
+
}
|
|
84
|
+
if (dir === root) break;
|
|
85
|
+
dir = path.dirname(dir);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
module.exports = {
|
|
92
|
+
getPackageVersion,
|
|
93
|
+
compareVersions,
|
|
94
|
+
countUserDataFiles,
|
|
95
|
+
findProjectRoot
|
|
96
|
+
};
|