bmad-fh 6.0.0-alpha.23
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/.coderabbit.yaml +40 -0
- package/.githooks/post-checkout +129 -0
- package/.githooks/pre-commit +63 -0
- package/.githooks/pre-push +135 -0
- package/.github/CODE_OF_CONDUCT.md +128 -0
- package/.github/FUNDING.yaml +15 -0
- package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/ISSUE_TEMPLATE/issue.md +32 -0
- package/.github/scripts/discord-helpers.sh +34 -0
- package/.github/workflows/bundle-latest.yaml +330 -0
- package/.github/workflows/discord.yaml +90 -0
- package/.github/workflows/docs.yaml +63 -0
- package/.github/workflows/manual-release.yaml +190 -0
- package/.github/workflows/publish-multi-artifact.yaml +50 -0
- package/.github/workflows/quality.yaml +115 -0
- package/.husky/pre-commit +20 -0
- package/.markdownlint-cli2.yaml +41 -0
- package/.nvmrc +1 -0
- package/.prettierignore +9 -0
- package/.vscode/settings.json +97 -0
- package/CHANGELOG.md +1394 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +306 -0
- package/CONTRIBUTORS.md +32 -0
- package/LICENSE +30 -0
- package/README.md +126 -0
- package/SECURITY.md +85 -0
- package/TRADEMARK.md +55 -0
- package/Wordmark.png +0 -0
- package/banner-bmad-method.png +0 -0
- package/docs/404.md +9 -0
- package/docs/_README_WORKFLOW_DIAGRAMS.md +40 -0
- package/docs/_STYLE_GUIDE.md +367 -0
- package/docs/_archive/customize-workflows.md +30 -0
- package/docs/_archive/getting-started-bmadv4.md +247 -0
- package/docs/_archive/vendor-workflows.md +52 -0
- package/docs/downloads.md +72 -0
- package/docs/explanation/agents/barry-quick-flow.md +328 -0
- package/docs/explanation/agents/index.md +19 -0
- package/docs/explanation/architecture/four-phases.md +107 -0
- package/docs/explanation/architecture/preventing-agent-conflicts.md +111 -0
- package/docs/explanation/architecture/why-solutioning-matters.md +75 -0
- package/docs/explanation/bmm/index.md +131 -0
- package/docs/explanation/core/index.md +18 -0
- package/docs/explanation/core-concepts/agent-roles.md +179 -0
- package/docs/explanation/core-concepts/index.md +35 -0
- package/docs/explanation/core-concepts/what-are-agents.md +97 -0
- package/docs/explanation/core-concepts/what-are-modules.md +85 -0
- package/docs/explanation/core-concepts/what-are-workflows.md +204 -0
- package/docs/explanation/faq/brownfield-faq.md +73 -0
- package/docs/explanation/faq/getting-started-faq.md +67 -0
- package/docs/explanation/faq/implementation-faq.md +52 -0
- package/docs/explanation/faq/index.md +16 -0
- package/docs/explanation/faq/levels-and-tracks-faq.md +52 -0
- package/docs/explanation/faq/planning-faq.md +41 -0
- package/docs/explanation/faq/tools-faq.md +277 -0
- package/docs/explanation/faq/workflows-faq.md +61 -0
- package/docs/explanation/features/advanced-elicitation.md +95 -0
- package/docs/explanation/features/brainstorming-techniques.md +92 -0
- package/docs/explanation/features/party-mode.md +95 -0
- package/docs/explanation/features/quick-flow.md +149 -0
- package/docs/explanation/features/tea-overview.md +410 -0
- package/docs/explanation/features/web-bundles.md +34 -0
- package/docs/explanation/philosophy/facilitation-over-generation.md +333 -0
- package/docs/explanation/philosophy/testing-as-engineering.md +112 -0
- package/docs/explanation/tea/engagement-models.md +710 -0
- package/docs/explanation/tea/fixture-architecture.md +457 -0
- package/docs/explanation/tea/knowledge-base-system.md +554 -0
- package/docs/explanation/tea/network-first-patterns.md +853 -0
- package/docs/explanation/tea/risk-based-testing.md +586 -0
- package/docs/explanation/tea/test-quality-standards.md +907 -0
- package/docs/how-to/brownfield/add-feature-to-existing.md +74 -0
- package/docs/how-to/brownfield/document-existing-project.md +66 -0
- package/docs/how-to/brownfield/index.md +84 -0
- package/docs/how-to/brownfield/quick-fix-in-brownfield.md +77 -0
- package/docs/how-to/brownfield/use-tea-for-enterprise.md +526 -0
- package/docs/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
- package/docs/how-to/customization/customize-agents.md +212 -0
- package/docs/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
- package/docs/how-to/customization/index.md +23 -0
- package/docs/how-to/customization/integrate-playwright-utils.md +813 -0
- package/docs/how-to/customization/shard-large-documents.md +101 -0
- package/docs/how-to/get-answers-about-bmad.md +102 -0
- package/docs/how-to/installation/index.md +12 -0
- package/docs/how-to/installation/install-bmad.md +111 -0
- package/docs/how-to/installation/install-custom-modules.md +118 -0
- package/docs/how-to/installation/upgrade-to-v6.md +131 -0
- package/docs/how-to/workflows/bmgd-quick-flow.md +156 -0
- package/docs/how-to/workflows/conduct-research.md +97 -0
- package/docs/how-to/workflows/create-architecture.md +119 -0
- package/docs/how-to/workflows/create-epics-and-stories.md +109 -0
- package/docs/how-to/workflows/create-prd.md +91 -0
- package/docs/how-to/workflows/create-product-brief.md +94 -0
- package/docs/how-to/workflows/create-story.md +102 -0
- package/docs/how-to/workflows/create-ux-design.md +100 -0
- package/docs/how-to/workflows/implement-story.md +97 -0
- package/docs/how-to/workflows/quick-spec.md +122 -0
- package/docs/how-to/workflows/run-atdd.md +436 -0
- package/docs/how-to/workflows/run-automate.md +653 -0
- package/docs/how-to/workflows/run-brainstorming-session.md +73 -0
- package/docs/how-to/workflows/run-code-review.md +89 -0
- package/docs/how-to/workflows/run-implementation-readiness.md +125 -0
- package/docs/how-to/workflows/run-nfr-assess.md +679 -0
- package/docs/how-to/workflows/run-sprint-planning.md +94 -0
- package/docs/how-to/workflows/run-test-design.md +98 -0
- package/docs/how-to/workflows/run-test-review.md +605 -0
- package/docs/how-to/workflows/run-trace.md +883 -0
- package/docs/how-to/workflows/setup-ci.md +712 -0
- package/docs/how-to/workflows/setup-party-mode.md +89 -0
- package/docs/how-to/workflows/setup-test-framework.md +98 -0
- package/docs/index.md +63 -0
- package/docs/migration-guide.md +365 -0
- package/docs/multi-scope-guide.md +379 -0
- package/docs/plans/multi-scope-parallel-artifacts-plan.md +695 -0
- package/docs/reference/agents/index.md +109 -0
- package/docs/reference/configuration/core-tasks.md +67 -0
- package/docs/reference/configuration/global-config.md +28 -0
- package/docs/reference/glossary/index.md +159 -0
- package/docs/reference/tea/commands.md +254 -0
- package/docs/reference/tea/configuration.md +678 -0
- package/docs/reference/tea/knowledge-base.md +340 -0
- package/docs/reference/workflows/core-workflows.md +32 -0
- package/docs/reference/workflows/document-project.md +73 -0
- package/docs/reference/workflows/index.md +12 -0
- package/docs/tutorials/getting-started/getting-started-bmadv6.md +246 -0
- package/docs/tutorials/getting-started/images/workflow-method-greenfield.excalidraw +5034 -0
- package/docs/tutorials/getting-started/images/workflow-method-greenfield.svg +4 -0
- package/docs/tutorials/getting-started/images/workflow-overview.jpg +0 -0
- package/docs/tutorials/getting-started/tea-lite-quickstart.md +444 -0
- package/docs/tutorials/getting-started/workflow-overview.jpg +0 -0
- package/eslint.config.mjs +152 -0
- package/package.json +117 -0
- package/prettier.config.mjs +32 -0
- package/src/bmm/_module-installer/installer.js +48 -0
- package/src/bmm/_module-installer/platform-specifics/claude-code.js +35 -0
- package/src/bmm/_module-installer/platform-specifics/windsurf.js +32 -0
- package/src/bmm/agents/analyst.agent.yaml +41 -0
- package/src/bmm/agents/architect.agent.yaml +33 -0
- package/src/bmm/agents/dev.agent.yaml +38 -0
- package/src/bmm/agents/pm.agent.yaml +51 -0
- package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
- package/src/bmm/agents/sm.agent.yaml +47 -0
- package/src/bmm/agents/tea.agent.yaml +68 -0
- package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
- package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +49 -0
- package/src/bmm/agents/ux-designer.agent.yaml +30 -0
- package/src/bmm/data/README.md +29 -0
- package/src/bmm/data/project-context-template.md +40 -0
- package/src/bmm/module.yaml +64 -0
- package/src/bmm/sub-modules/claude-code/config.yaml +4 -0
- package/src/bmm/sub-modules/claude-code/injections.yaml +242 -0
- package/src/bmm/sub-modules/claude-code/readme.md +87 -0
- package/src/bmm/teams/default-party.csv +21 -0
- package/src/bmm/teams/team-fullstack.yaml +12 -0
- package/src/bmm/testarch/knowledge/api-request.md +442 -0
- package/src/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
- package/src/bmm/testarch/knowledge/auth-session.md +552 -0
- package/src/bmm/testarch/knowledge/burn-in.md +273 -0
- package/src/bmm/testarch/knowledge/ci-burn-in.md +675 -0
- package/src/bmm/testarch/knowledge/component-tdd.md +486 -0
- package/src/bmm/testarch/knowledge/contract-testing.md +957 -0
- package/src/bmm/testarch/knowledge/data-factories.md +500 -0
- package/src/bmm/testarch/knowledge/email-auth.md +721 -0
- package/src/bmm/testarch/knowledge/error-handling.md +725 -0
- package/src/bmm/testarch/knowledge/feature-flags.md +750 -0
- package/src/bmm/testarch/knowledge/file-utils.md +463 -0
- package/src/bmm/testarch/knowledge/fixture-architecture.md +401 -0
- package/src/bmm/testarch/knowledge/fixtures-composition.md +382 -0
- package/src/bmm/testarch/knowledge/intercept-network-call.md +430 -0
- package/src/bmm/testarch/knowledge/log.md +429 -0
- package/src/bmm/testarch/knowledge/network-error-monitor.md +405 -0
- package/src/bmm/testarch/knowledge/network-first.md +486 -0
- package/src/bmm/testarch/knowledge/network-recorder.md +527 -0
- package/src/bmm/testarch/knowledge/nfr-criteria.md +670 -0
- package/src/bmm/testarch/knowledge/overview.md +286 -0
- package/src/bmm/testarch/knowledge/playwright-config.md +730 -0
- package/src/bmm/testarch/knowledge/probability-impact.md +601 -0
- package/src/bmm/testarch/knowledge/recurse.md +421 -0
- package/src/bmm/testarch/knowledge/risk-governance.md +615 -0
- package/src/bmm/testarch/knowledge/selective-testing.md +732 -0
- package/src/bmm/testarch/knowledge/selector-resilience.md +527 -0
- package/src/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
- package/src/bmm/testarch/knowledge/test-levels-framework.md +473 -0
- package/src/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
- package/src/bmm/testarch/knowledge/test-quality.md +664 -0
- package/src/bmm/testarch/knowledge/timing-debugging.md +372 -0
- package/src/bmm/testarch/knowledge/visual-debugging.md +524 -0
- package/src/bmm/testarch/tea-index.csv +34 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +194 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
- package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
- package/src/bmm/workflows/1-analysis/research/workflow.md +173 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
- package/src/bmm/workflows/2-plan-workflows/prd/data/domain-complexity.csv +13 -0
- package/src/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md +197 -0
- package/src/bmm/workflows/2-plan-workflows/prd/data/project-types.csv +11 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01-init.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01b-continue.md +153 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-03-success.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md +213 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md +207 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-06-innovation.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-07-project-type.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-08-scoping.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-09-functional.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md +180 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md +247 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md +249 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md +253 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md +168 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md +218 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
- package/src/bmm/workflows/2-plan-workflows/prd/templates/prd-template.md +10 -0
- package/src/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md +433 -0
- package/src/bmm/workflows/2-plan-workflows/prd/workflow.md +150 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +133 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +352 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +145 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
- package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
- package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
- package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +51 -0
- package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
- package/src/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
- package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +60 -0
- package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
- package/src/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
- package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
- package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +61 -0
- package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
- package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
- package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +27 -0
- package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +58 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +54 -0
- package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
- package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +36 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +156 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +140 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +52 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +191 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
- package/src/bmm/workflows/document-project/checklist.md +245 -0
- package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/src/bmm/workflows/document-project/instructions.md +221 -0
- package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/src/bmm/workflows/document-project/workflow.yaml +30 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
- package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
- package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
- package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
- package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
- package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
- package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
- package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +364 -0
- package/src/bmm/workflows/testarch/atdd/checklist.md +374 -0
- package/src/bmm/workflows/testarch/atdd/instructions.md +806 -0
- package/src/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
- package/src/bmm/workflows/testarch/automate/checklist.md +582 -0
- package/src/bmm/workflows/testarch/automate/instructions.md +1324 -0
- package/src/bmm/workflows/testarch/automate/workflow.yaml +54 -0
- package/src/bmm/workflows/testarch/ci/checklist.md +248 -0
- package/src/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
- package/src/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
- package/src/bmm/workflows/testarch/ci/instructions.md +536 -0
- package/src/bmm/workflows/testarch/ci/workflow.yaml +47 -0
- package/src/bmm/workflows/testarch/framework/checklist.md +321 -0
- package/src/bmm/workflows/testarch/framework/instructions.md +481 -0
- package/src/bmm/workflows/testarch/framework/workflow.yaml +49 -0
- package/src/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
- package/src/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
- package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +445 -0
- package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
- package/src/bmm/workflows/testarch/test-design/checklist.md +235 -0
- package/src/bmm/workflows/testarch/test-design/instructions.md +788 -0
- package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
- package/src/bmm/workflows/testarch/test-design/workflow.yaml +56 -0
- package/src/bmm/workflows/testarch/test-review/checklist.md +472 -0
- package/src/bmm/workflows/testarch/test-review/instructions.md +628 -0
- package/src/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
- package/src/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
- package/src/bmm/workflows/testarch/trace/checklist.md +655 -0
- package/src/bmm/workflows/testarch/trace/instructions.md +1047 -0
- package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
- package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
- package/src/bmm/workflows/workflow-status/init/instructions.md +346 -0
- package/src/bmm/workflows/workflow-status/init/workflow.yaml +30 -0
- package/src/bmm/workflows/workflow-status/instructions.md +397 -0
- package/src/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +103 -0
- package/src/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +100 -0
- package/src/bmm/workflows/workflow-status/paths/method-brownfield.yaml +103 -0
- package/src/bmm/workflows/workflow-status/paths/method-greenfield.yaml +100 -0
- package/src/bmm/workflows/workflow-status/project-levels.yaml +59 -0
- package/src/bmm/workflows/workflow-status/workflow-status-template.yaml +24 -0
- package/src/bmm/workflows/workflow-status/workflow.yaml +32 -0
- package/src/core/_module-installer/installer.js +60 -0
- package/src/core/agents/bmad-master.agent.yaml +30 -0
- package/src/core/lib/scope/artifact-resolver.js +298 -0
- package/src/core/lib/scope/event-logger.js +411 -0
- package/src/core/lib/scope/index.js +30 -0
- package/src/core/lib/scope/scope-context.js +307 -0
- package/src/core/lib/scope/scope-initializer.js +458 -0
- package/src/core/lib/scope/scope-manager.js +512 -0
- package/src/core/lib/scope/scope-migrator.js +442 -0
- package/src/core/lib/scope/scope-sync.js +489 -0
- package/src/core/lib/scope/scope-validator.js +299 -0
- package/src/core/lib/scope/state-lock.js +342 -0
- package/src/core/module.yaml +53 -0
- package/src/core/resources/excalidraw/README.md +160 -0
- package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
- package/src/core/resources/excalidraw/library-loader.md +50 -0
- package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
- package/src/core/tasks/editorial-review-prose.xml +91 -0
- package/src/core/tasks/editorial-review-structure.xml +198 -0
- package/src/core/tasks/index-docs.xml +65 -0
- package/src/core/tasks/review-adversarial-general.xml +46 -0
- package/src/core/tasks/shard-doc.xml +109 -0
- package/src/core/tasks/workflow.xml +277 -0
- package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
- package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
- package/src/core/workflows/brainstorming/template.md +15 -0
- package/src/core/workflows/brainstorming/workflow.md +58 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
- package/src/core/workflows/party-mode/workflow.md +194 -0
- package/src/utility/agent-components/activation-rules.txt +6 -0
- package/src/utility/agent-components/activation-steps.txt +28 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/agent-components/agent.customize.template.yaml +41 -0
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-data.txt +5 -0
- package/src/utility/agent-components/handler-exec.txt +19 -0
- package/src/utility/agent-components/handler-multi.txt +14 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/test/README.md +295 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
- package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
- package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
- package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
- package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
- package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
- package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
- package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
- package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
- package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
- package/test/test-agent-schema.js +387 -0
- package/test/test-cli-integration.sh +159 -0
- package/test/test-installation-components.js +214 -0
- package/test/test-scope-e2e.js +450 -0
- package/test/test-scope-system.js +787 -0
- package/test/unit-test-schema.js +133 -0
- package/tools/bmad-npx-wrapper.js +38 -0
- package/tools/build-docs.js +577 -0
- package/tools/cli/README.md +7 -0
- package/tools/cli/bmad-cli.js +58 -0
- package/tools/cli/commands/install.js +87 -0
- package/tools/cli/commands/scope.js +474 -0
- package/tools/cli/external-official-modules.yaml +41 -0
- package/tools/cli/installers/install-messages.yaml +58 -0
- package/tools/cli/installers/lib/core/config-collector.js +1079 -0
- package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +739 -0
- package/tools/cli/installers/lib/core/detector.js +223 -0
- package/tools/cli/installers/lib/core/ide-config-manager.js +156 -0
- package/tools/cli/installers/lib/core/installer.js +2585 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +963 -0
- package/tools/cli/installers/lib/core/manifest.js +590 -0
- package/tools/cli/installers/lib/custom/handler.js +363 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +654 -0
- package/tools/cli/installers/lib/ide/antigravity.js +486 -0
- package/tools/cli/installers/lib/ide/auggie.js +244 -0
- package/tools/cli/installers/lib/ide/claude-code.js +487 -0
- package/tools/cli/installers/lib/ide/cline.js +269 -0
- package/tools/cli/installers/lib/ide/codex.js +375 -0
- package/tools/cli/installers/lib/ide/crush.js +300 -0
- package/tools/cli/installers/lib/ide/cursor.js +169 -0
- package/tools/cli/installers/lib/ide/gemini.js +301 -0
- package/tools/cli/installers/lib/ide/github-copilot.js +383 -0
- package/tools/cli/installers/lib/ide/iflow.js +191 -0
- package/tools/cli/installers/lib/ide/kilo.js +250 -0
- package/tools/cli/installers/lib/ide/kiro-cli.js +326 -0
- package/tools/cli/installers/lib/ide/manager.js +244 -0
- package/tools/cli/installers/lib/ide/opencode.js +257 -0
- package/tools/cli/installers/lib/ide/qwen.js +372 -0
- package/tools/cli/installers/lib/ide/roo.js +270 -0
- package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +96 -0
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +158 -0
- package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +119 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +242 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +29 -0
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +30 -0
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +45 -0
- package/tools/cli/installers/lib/ide/trae.js +313 -0
- package/tools/cli/installers/lib/ide/windsurf.js +258 -0
- package/tools/cli/installers/lib/message-loader.js +85 -0
- package/tools/cli/installers/lib/modules/external-manager.js +133 -0
- package/tools/cli/installers/lib/modules/manager.js +1362 -0
- package/tools/cli/lib/activation-builder.js +163 -0
- package/tools/cli/lib/agent/compiler.js +522 -0
- package/tools/cli/lib/agent/installer.js +716 -0
- package/tools/cli/lib/agent/template-engine.js +152 -0
- package/tools/cli/lib/agent-analyzer.js +109 -0
- package/tools/cli/lib/agent-party-generator.js +194 -0
- package/tools/cli/lib/cli-utils.js +227 -0
- package/tools/cli/lib/config.js +213 -0
- package/tools/cli/lib/file-ops.js +204 -0
- package/tools/cli/lib/platform-codes.js +116 -0
- package/tools/cli/lib/project-root.js +77 -0
- package/tools/cli/lib/prompts.js +433 -0
- package/tools/cli/lib/ui.js +1591 -0
- package/tools/cli/lib/xml-handler.js +177 -0
- package/tools/cli/lib/xml-to-markdown.js +82 -0
- package/tools/cli/lib/yaml-format.js +245 -0
- package/tools/cli/lib/yaml-xml-builder.js +587 -0
- package/tools/cli/scripts/migrate-workflows.js +281 -0
- package/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
- package/tools/docs/index.md +2 -0
- package/tools/fix-doc-links.js +288 -0
- package/tools/flattener/aggregate.js +76 -0
- package/tools/flattener/binary.js +80 -0
- package/tools/flattener/discovery.js +71 -0
- package/tools/flattener/files.js +35 -0
- package/tools/flattener/ignoreRules.js +172 -0
- package/tools/flattener/main.js +483 -0
- package/tools/flattener/projectRoot.js +201 -0
- package/tools/flattener/prompts.js +44 -0
- package/tools/flattener/stats.helpers.js +368 -0
- package/tools/flattener/stats.js +75 -0
- package/tools/flattener/test-matrix.js +409 -0
- package/tools/flattener/xml.js +82 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/lib/xml-utils.js +13 -0
- package/tools/maintainer/review-pr-README.md +55 -0
- package/tools/maintainer/review-pr.md +242 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +157 -0
- package/tools/schema/agent.js +493 -0
- package/tools/validate-agent-schema.js +110 -0
- package/tools/validate-doc-links.js +363 -0
- package/tools/validate-svg-changes.sh +356 -0
- package/website/README.md +76 -0
- package/website/astro.config.mjs +228 -0
- package/website/public/favicon.ico +0 -0
- package/website/public/img/bmad-dark.png +0 -0
- package/website/public/img/bmad-light.png +0 -0
- package/website/public/img/logo.svg +4 -0
- package/website/public/robots.txt +37 -0
- package/website/src/components/Banner.astro +59 -0
- package/website/src/components/Header.astro +121 -0
- package/website/src/components/MobileMenuFooter.astro +53 -0
- package/website/src/content/config.ts +6 -0
- package/website/src/lib/site-url.js +25 -0
- package/website/src/rehype-markdown-links.js +102 -0
- package/website/src/styles/custom.css +485 -0
|
@@ -0,0 +1,712 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "How to Set Up CI Pipeline with TEA"
|
|
3
|
+
description: Configure automated test execution with selective testing and burn-in loops using TEA
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# How to Set Up CI Pipeline with TEA
|
|
7
|
+
|
|
8
|
+
Use TEA's `*ci` workflow to scaffold production-ready CI/CD configuration for automated test execution with selective testing, parallel sharding, and flakiness detection.
|
|
9
|
+
|
|
10
|
+
## When to Use This
|
|
11
|
+
|
|
12
|
+
- Need to automate test execution in CI/CD
|
|
13
|
+
- Want selective testing (only run affected tests)
|
|
14
|
+
- Need parallel execution for faster feedback
|
|
15
|
+
- Want burn-in loops for flakiness detection
|
|
16
|
+
- Setting up new CI/CD pipeline
|
|
17
|
+
- Optimizing existing CI/CD workflow
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
- BMad Method installed
|
|
22
|
+
- TEA agent available
|
|
23
|
+
- Test framework configured (run `*framework` first)
|
|
24
|
+
- Tests written (have something to run in CI)
|
|
25
|
+
- CI/CD platform access (GitHub Actions, GitLab CI, etc.)
|
|
26
|
+
|
|
27
|
+
## Steps
|
|
28
|
+
|
|
29
|
+
### 1. Load TEA Agent
|
|
30
|
+
|
|
31
|
+
Start a fresh chat and load TEA:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
*tea
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 2. Run the CI Workflow
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
*ci
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 3. Select CI/CD Platform
|
|
44
|
+
|
|
45
|
+
TEA will ask which platform you're using.
|
|
46
|
+
|
|
47
|
+
**Supported Platforms:**
|
|
48
|
+
- **GitHub Actions** (most common)
|
|
49
|
+
- **GitLab CI**
|
|
50
|
+
- **Circle CI**
|
|
51
|
+
- **Jenkins**
|
|
52
|
+
- **Other** (TEA provides generic template)
|
|
53
|
+
|
|
54
|
+
**Example:**
|
|
55
|
+
```
|
|
56
|
+
GitHub Actions
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 4. Configure Test Strategy
|
|
60
|
+
|
|
61
|
+
TEA will ask about your test execution strategy.
|
|
62
|
+
|
|
63
|
+
#### Repository Structure
|
|
64
|
+
|
|
65
|
+
**Question:** "What's your repository structure?"
|
|
66
|
+
|
|
67
|
+
**Options:**
|
|
68
|
+
- **Single app** - One application in root
|
|
69
|
+
- **Monorepo** - Multiple apps/packages
|
|
70
|
+
- **Monorepo with affected detection** - Only test changed packages
|
|
71
|
+
|
|
72
|
+
**Example:**
|
|
73
|
+
```
|
|
74
|
+
Monorepo with multiple apps
|
|
75
|
+
Need selective testing for changed packages only
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### Parallel Execution
|
|
79
|
+
|
|
80
|
+
**Question:** "Want to shard tests for parallel execution?"
|
|
81
|
+
|
|
82
|
+
**Options:**
|
|
83
|
+
- **No sharding** - Run tests sequentially
|
|
84
|
+
- **Shard by workers** - Split across N workers
|
|
85
|
+
- **Shard by file** - Each file runs in parallel
|
|
86
|
+
|
|
87
|
+
**Example:**
|
|
88
|
+
```
|
|
89
|
+
Yes, shard across 4 workers for faster execution
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Why Shard?**
|
|
93
|
+
- **4 workers:** 20-minute suite → 5 minutes
|
|
94
|
+
- **Better resource usage:** Utilize CI runners efficiently
|
|
95
|
+
- **Faster feedback:** Developers wait less
|
|
96
|
+
|
|
97
|
+
#### Burn-In Loops
|
|
98
|
+
|
|
99
|
+
**Question:** "Want burn-in loops for flakiness detection?"
|
|
100
|
+
|
|
101
|
+
**Options:**
|
|
102
|
+
- **No burn-in** - Run tests once
|
|
103
|
+
- **PR burn-in** - Run tests multiple times on PRs
|
|
104
|
+
- **Nightly burn-in** - Dedicated flakiness detection job
|
|
105
|
+
|
|
106
|
+
**Example:**
|
|
107
|
+
```
|
|
108
|
+
Yes, run tests 5 times on PRs to catch flaky tests early
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Why Burn-In?**
|
|
112
|
+
- Catches flaky tests before they merge
|
|
113
|
+
- Prevents intermittent CI failures
|
|
114
|
+
- Builds confidence in test suite
|
|
115
|
+
|
|
116
|
+
### 5. Review Generated CI Configuration
|
|
117
|
+
|
|
118
|
+
TEA generates platform-specific workflow files.
|
|
119
|
+
|
|
120
|
+
#### GitHub Actions (`.github/workflows/test.yml`):
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
name: Test Suite
|
|
124
|
+
|
|
125
|
+
on:
|
|
126
|
+
pull_request:
|
|
127
|
+
push:
|
|
128
|
+
branches: [main, develop]
|
|
129
|
+
schedule:
|
|
130
|
+
- cron: '0 2 * * *' # Nightly at 2 AM
|
|
131
|
+
|
|
132
|
+
jobs:
|
|
133
|
+
# Main test job with sharding
|
|
134
|
+
test:
|
|
135
|
+
name: Test (Shard ${{ matrix.shard }})
|
|
136
|
+
runs-on: ubuntu-latest
|
|
137
|
+
timeout-minutes: 15
|
|
138
|
+
|
|
139
|
+
strategy:
|
|
140
|
+
fail-fast: false
|
|
141
|
+
matrix:
|
|
142
|
+
shard: [1, 2, 3, 4]
|
|
143
|
+
|
|
144
|
+
steps:
|
|
145
|
+
- name: Checkout code
|
|
146
|
+
uses: actions/checkout@v4
|
|
147
|
+
|
|
148
|
+
- name: Setup Node.js
|
|
149
|
+
uses: actions/setup-node@v4
|
|
150
|
+
with:
|
|
151
|
+
node-version-file: '.nvmrc'
|
|
152
|
+
cache: 'npm'
|
|
153
|
+
|
|
154
|
+
- name: Install dependencies
|
|
155
|
+
run: npm ci
|
|
156
|
+
|
|
157
|
+
- name: Install Playwright browsers
|
|
158
|
+
run: npx playwright install --with-deps
|
|
159
|
+
|
|
160
|
+
- name: Run tests
|
|
161
|
+
run: npx playwright test --shard=${{ matrix.shard }}/4
|
|
162
|
+
|
|
163
|
+
- name: Upload test results
|
|
164
|
+
if: always()
|
|
165
|
+
uses: actions/upload-artifact@v4
|
|
166
|
+
with:
|
|
167
|
+
name: test-results-${{ matrix.shard }}
|
|
168
|
+
path: test-results/
|
|
169
|
+
retention-days: 7
|
|
170
|
+
|
|
171
|
+
- name: Upload test report
|
|
172
|
+
if: always()
|
|
173
|
+
uses: actions/upload-artifact@v4
|
|
174
|
+
with:
|
|
175
|
+
name: playwright-report-${{ matrix.shard }}
|
|
176
|
+
path: playwright-report/
|
|
177
|
+
retention-days: 7
|
|
178
|
+
|
|
179
|
+
# Burn-in job for flakiness detection (PRs only)
|
|
180
|
+
burn-in:
|
|
181
|
+
name: Burn-In (Flakiness Detection)
|
|
182
|
+
runs-on: ubuntu-latest
|
|
183
|
+
if: github.event_name == 'pull_request'
|
|
184
|
+
timeout-minutes: 30
|
|
185
|
+
|
|
186
|
+
steps:
|
|
187
|
+
- name: Checkout code
|
|
188
|
+
uses: actions/checkout@v4
|
|
189
|
+
|
|
190
|
+
- name: Setup Node.js
|
|
191
|
+
uses: actions/setup-node@v4
|
|
192
|
+
with:
|
|
193
|
+
node-version-file: '.nvmrc'
|
|
194
|
+
cache: 'npm'
|
|
195
|
+
|
|
196
|
+
- name: Install dependencies
|
|
197
|
+
run: npm ci
|
|
198
|
+
|
|
199
|
+
- name: Install Playwright browsers
|
|
200
|
+
run: npx playwright install --with-deps
|
|
201
|
+
|
|
202
|
+
- name: Run burn-in loop
|
|
203
|
+
run: |
|
|
204
|
+
for i in {1..5}; do
|
|
205
|
+
echo "=== Burn-in iteration $i/5 ==="
|
|
206
|
+
npx playwright test --grep-invert "@skip" || exit 1
|
|
207
|
+
done
|
|
208
|
+
|
|
209
|
+
- name: Upload burn-in results
|
|
210
|
+
if: failure()
|
|
211
|
+
uses: actions/upload-artifact@v4
|
|
212
|
+
with:
|
|
213
|
+
name: burn-in-failures
|
|
214
|
+
path: test-results/
|
|
215
|
+
|
|
216
|
+
# Selective testing (changed files only)
|
|
217
|
+
selective:
|
|
218
|
+
name: Selective Tests
|
|
219
|
+
runs-on: ubuntu-latest
|
|
220
|
+
if: github.event_name == 'pull_request'
|
|
221
|
+
|
|
222
|
+
steps:
|
|
223
|
+
- name: Checkout code
|
|
224
|
+
uses: actions/checkout@v4
|
|
225
|
+
with:
|
|
226
|
+
fetch-depth: 0 # Full history for git diff
|
|
227
|
+
|
|
228
|
+
- name: Setup Node.js
|
|
229
|
+
uses: actions/setup-node@v4
|
|
230
|
+
with:
|
|
231
|
+
node-version-file: '.nvmrc'
|
|
232
|
+
cache: 'npm'
|
|
233
|
+
|
|
234
|
+
- name: Install dependencies
|
|
235
|
+
run: npm ci
|
|
236
|
+
|
|
237
|
+
- name: Install Playwright browsers
|
|
238
|
+
run: npx playwright install --with-deps
|
|
239
|
+
|
|
240
|
+
- name: Run selective tests
|
|
241
|
+
run: npm run test:changed
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
#### GitLab CI (`.gitlab-ci.yml`):
|
|
245
|
+
|
|
246
|
+
```yaml
|
|
247
|
+
variables:
|
|
248
|
+
NODE_VERSION: "18"
|
|
249
|
+
|
|
250
|
+
stages:
|
|
251
|
+
- test
|
|
252
|
+
- burn-in
|
|
253
|
+
|
|
254
|
+
# Test job with parallel execution
|
|
255
|
+
test:
|
|
256
|
+
stage: test
|
|
257
|
+
image: node:$NODE_VERSION
|
|
258
|
+
parallel: 4
|
|
259
|
+
script:
|
|
260
|
+
- npm ci
|
|
261
|
+
- npx playwright install --with-deps
|
|
262
|
+
- npx playwright test --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL
|
|
263
|
+
artifacts:
|
|
264
|
+
when: always
|
|
265
|
+
paths:
|
|
266
|
+
- test-results/
|
|
267
|
+
- playwright-report/
|
|
268
|
+
expire_in: 7 days
|
|
269
|
+
rules:
|
|
270
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
271
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
272
|
+
|
|
273
|
+
# Burn-in job for flakiness detection
|
|
274
|
+
burn-in:
|
|
275
|
+
stage: burn-in
|
|
276
|
+
image: node:$NODE_VERSION
|
|
277
|
+
script:
|
|
278
|
+
- npm ci
|
|
279
|
+
- npx playwright install --with-deps
|
|
280
|
+
- |
|
|
281
|
+
for i in {1..5}; do
|
|
282
|
+
echo "=== Burn-in iteration $i/5 ==="
|
|
283
|
+
npx playwright test || exit 1
|
|
284
|
+
done
|
|
285
|
+
artifacts:
|
|
286
|
+
when: on_failure
|
|
287
|
+
paths:
|
|
288
|
+
- test-results/
|
|
289
|
+
rules:
|
|
290
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
#### Burn-In Testing
|
|
294
|
+
|
|
295
|
+
**Option 1: Classic Burn-In (Playwright Built-In)**
|
|
296
|
+
|
|
297
|
+
```json
|
|
298
|
+
{
|
|
299
|
+
"scripts": {
|
|
300
|
+
"test": "playwright test",
|
|
301
|
+
"test:burn-in": "playwright test --repeat-each=5 --retries=0"
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
**How it works:**
|
|
307
|
+
- Runs every test 5 times
|
|
308
|
+
- Fails if any iteration fails
|
|
309
|
+
- Detects flakiness before merge
|
|
310
|
+
|
|
311
|
+
**Use when:** Small test suite, want to run everything multiple times
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
**Option 2: Smart Burn-In (Playwright Utils)**
|
|
316
|
+
|
|
317
|
+
If `tea_use_playwright_utils: true`:
|
|
318
|
+
|
|
319
|
+
**scripts/burn-in-changed.ts:**
|
|
320
|
+
```typescript
|
|
321
|
+
import { runBurnIn } from '@seontechnologies/playwright-utils/burn-in';
|
|
322
|
+
|
|
323
|
+
await runBurnIn({
|
|
324
|
+
configPath: 'playwright.burn-in.config.ts',
|
|
325
|
+
baseBranch: 'main'
|
|
326
|
+
});
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**playwright.burn-in.config.ts:**
|
|
330
|
+
```typescript
|
|
331
|
+
import type { BurnInConfig } from '@seontechnologies/playwright-utils/burn-in';
|
|
332
|
+
|
|
333
|
+
const config: BurnInConfig = {
|
|
334
|
+
skipBurnInPatterns: ['**/config/**', '**/*.md', '**/*types*'],
|
|
335
|
+
burnInTestPercentage: 0.3,
|
|
336
|
+
burnIn: { repeatEach: 5, retries: 0 }
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
export default config;
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
**package.json:**
|
|
343
|
+
```json
|
|
344
|
+
{
|
|
345
|
+
"scripts": {
|
|
346
|
+
"test:burn-in": "tsx scripts/burn-in-changed.ts"
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
**How it works:**
|
|
352
|
+
- Git diff analysis (only affected tests)
|
|
353
|
+
- Smart filtering (skip configs, docs, types)
|
|
354
|
+
- Volume control (run 30% of affected tests)
|
|
355
|
+
- Each test runs 5 times
|
|
356
|
+
|
|
357
|
+
**Use when:** Large test suite, want intelligent selection
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
**Comparison:**
|
|
362
|
+
|
|
363
|
+
| Feature | Classic Burn-In | Smart Burn-In (PW-Utils) |
|
|
364
|
+
|---------|----------------|--------------------------|
|
|
365
|
+
| Changed 1 file | Runs all 500 tests × 5 = 2500 runs | Runs 3 affected tests × 5 = 15 runs |
|
|
366
|
+
| Config change | Runs all tests | Skips (no tests affected) |
|
|
367
|
+
| Type change | Runs all tests | Skips (no runtime impact) |
|
|
368
|
+
| Setup | Zero config | Requires config file |
|
|
369
|
+
|
|
370
|
+
**Recommendation:** Start with classic (simple), upgrade to smart (faster) when suite grows.
|
|
371
|
+
|
|
372
|
+
### 6. Configure Secrets
|
|
373
|
+
|
|
374
|
+
TEA provides a secrets checklist.
|
|
375
|
+
|
|
376
|
+
**Required Secrets** (add to CI/CD platform):
|
|
377
|
+
|
|
378
|
+
```markdown
|
|
379
|
+
## GitHub Actions Secrets
|
|
380
|
+
|
|
381
|
+
Repository Settings → Secrets and variables → Actions
|
|
382
|
+
|
|
383
|
+
### Required
|
|
384
|
+
- None (tests run without external auth)
|
|
385
|
+
|
|
386
|
+
### Optional
|
|
387
|
+
- `TEST_USER_EMAIL` - Test user credentials
|
|
388
|
+
- `TEST_USER_PASSWORD` - Test user password
|
|
389
|
+
- `API_BASE_URL` - API endpoint for tests
|
|
390
|
+
- `DATABASE_URL` - Test database (if needed)
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
**How to Add Secrets:**
|
|
394
|
+
|
|
395
|
+
**GitHub Actions:**
|
|
396
|
+
1. Go to repo Settings → Secrets → Actions
|
|
397
|
+
2. Click "New repository secret"
|
|
398
|
+
3. Add name and value
|
|
399
|
+
4. Use in workflow: `${{ secrets.TEST_USER_EMAIL }}`
|
|
400
|
+
|
|
401
|
+
**GitLab CI:**
|
|
402
|
+
1. Go to Project Settings → CI/CD → Variables
|
|
403
|
+
2. Add variable name and value
|
|
404
|
+
3. Use in workflow: `$TEST_USER_EMAIL`
|
|
405
|
+
|
|
406
|
+
### 7. Test the CI Pipeline
|
|
407
|
+
|
|
408
|
+
#### Push and Verify
|
|
409
|
+
|
|
410
|
+
**Commit the workflow file:**
|
|
411
|
+
```bash
|
|
412
|
+
git add .github/workflows/test.yml
|
|
413
|
+
git commit -m "ci: add automated test pipeline"
|
|
414
|
+
git push
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
**Watch the CI run:**
|
|
418
|
+
- GitHub Actions: Go to Actions tab
|
|
419
|
+
- GitLab CI: Go to CI/CD → Pipelines
|
|
420
|
+
- Circle CI: Go to Pipelines
|
|
421
|
+
|
|
422
|
+
**Expected Result:**
|
|
423
|
+
```
|
|
424
|
+
✓ test (shard 1/4) - 3m 24s
|
|
425
|
+
✓ test (shard 2/4) - 3m 18s
|
|
426
|
+
✓ test (shard 3/4) - 3m 31s
|
|
427
|
+
✓ test (shard 4/4) - 3m 15s
|
|
428
|
+
✓ burn-in - 15m 42s
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
#### Test on Pull Request
|
|
432
|
+
|
|
433
|
+
**Create test PR:**
|
|
434
|
+
```bash
|
|
435
|
+
git checkout -b test-ci-setup
|
|
436
|
+
echo "# Test" > test.md
|
|
437
|
+
git add test.md
|
|
438
|
+
git commit -m "test: verify CI setup"
|
|
439
|
+
git push -u origin test-ci-setup
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
**Open PR and verify:**
|
|
443
|
+
- Tests run automatically
|
|
444
|
+
- Burn-in runs (if configured for PRs)
|
|
445
|
+
- Selective tests run (if applicable)
|
|
446
|
+
- All checks pass ✓
|
|
447
|
+
|
|
448
|
+
## What You Get
|
|
449
|
+
|
|
450
|
+
### Automated Test Execution
|
|
451
|
+
- **On every PR** - Catch issues before merge
|
|
452
|
+
- **On every push to main** - Protect production
|
|
453
|
+
- **Nightly** - Comprehensive regression testing
|
|
454
|
+
|
|
455
|
+
### Parallel Execution
|
|
456
|
+
- **4x faster feedback** - Shard across multiple workers
|
|
457
|
+
- **Efficient resource usage** - Maximize CI runner utilization
|
|
458
|
+
|
|
459
|
+
### Selective Testing
|
|
460
|
+
- **Run only affected tests** - Git diff-based selection
|
|
461
|
+
- **Faster PR feedback** - Don't run entire suite every time
|
|
462
|
+
|
|
463
|
+
### Flakiness Detection
|
|
464
|
+
- **Burn-in loops** - Run tests multiple times
|
|
465
|
+
- **Early detection** - Catch flaky tests in PRs
|
|
466
|
+
- **Confidence building** - Know tests are reliable
|
|
467
|
+
|
|
468
|
+
### Artifact Collection
|
|
469
|
+
- **Test results** - Saved for 7 days
|
|
470
|
+
- **Screenshots** - On test failures
|
|
471
|
+
- **Videos** - Full test recordings
|
|
472
|
+
- **Traces** - Playwright trace files for debugging
|
|
473
|
+
|
|
474
|
+
## Tips
|
|
475
|
+
|
|
476
|
+
### Start Simple, Add Complexity
|
|
477
|
+
|
|
478
|
+
**Week 1:** Basic pipeline
|
|
479
|
+
```yaml
|
|
480
|
+
- Run tests on PR
|
|
481
|
+
- Single worker (no sharding)
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
**Week 2:** Add parallelization
|
|
485
|
+
```yaml
|
|
486
|
+
- Shard across 4 workers
|
|
487
|
+
- Faster feedback
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
**Week 3:** Add selective testing
|
|
491
|
+
```yaml
|
|
492
|
+
- Git diff-based selection
|
|
493
|
+
- Skip unaffected tests
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
**Week 4:** Add burn-in
|
|
497
|
+
```yaml
|
|
498
|
+
- Detect flaky tests
|
|
499
|
+
- Run on PR and nightly
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### Optimize for Feedback Speed
|
|
503
|
+
|
|
504
|
+
**Goal:** PR feedback in < 5 minutes
|
|
505
|
+
|
|
506
|
+
**Strategies:**
|
|
507
|
+
- Shard tests across workers (4 workers = 4x faster)
|
|
508
|
+
- Use selective testing (run 20% of tests, not 100%)
|
|
509
|
+
- Cache dependencies (`actions/cache`, `cache: 'npm'`)
|
|
510
|
+
- Run smoke tests first, full suite after
|
|
511
|
+
|
|
512
|
+
**Example fast workflow:**
|
|
513
|
+
```yaml
|
|
514
|
+
jobs:
|
|
515
|
+
smoke:
|
|
516
|
+
# Run critical path tests (2 min)
|
|
517
|
+
run: npm run test:smoke
|
|
518
|
+
|
|
519
|
+
full:
|
|
520
|
+
needs: smoke
|
|
521
|
+
# Run full suite only if smoke passes (10 min)
|
|
522
|
+
run: npm test
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
### Use Test Tags
|
|
526
|
+
|
|
527
|
+
Tag tests for selective execution:
|
|
528
|
+
|
|
529
|
+
```typescript
|
|
530
|
+
// Critical path tests (always run)
|
|
531
|
+
test('@critical should login', async ({ page }) => { });
|
|
532
|
+
|
|
533
|
+
// Smoke tests (run first)
|
|
534
|
+
test('@smoke should load homepage', async ({ page }) => { });
|
|
535
|
+
|
|
536
|
+
// Slow tests (run nightly only)
|
|
537
|
+
test('@slow should process large file', async ({ page }) => { });
|
|
538
|
+
|
|
539
|
+
// Skip in CI
|
|
540
|
+
test('@local-only should use local service', async ({ page }) => { });
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
**In CI:**
|
|
544
|
+
```bash
|
|
545
|
+
# PR: Run critical and smoke only
|
|
546
|
+
npx playwright test --grep "@critical|@smoke"
|
|
547
|
+
|
|
548
|
+
# Nightly: Run everything except local-only
|
|
549
|
+
npx playwright test --grep-invert "@local-only"
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
### Monitor CI Performance
|
|
553
|
+
|
|
554
|
+
Track metrics:
|
|
555
|
+
|
|
556
|
+
```markdown
|
|
557
|
+
## CI Metrics
|
|
558
|
+
|
|
559
|
+
| Metric | Target | Current | Status |
|
|
560
|
+
|--------|--------|---------|--------|
|
|
561
|
+
| PR feedback time | < 5 min | 3m 24s | ✅ |
|
|
562
|
+
| Full suite time | < 15 min | 12m 18s | ✅ |
|
|
563
|
+
| Flakiness rate | < 1% | 0.3% | ✅ |
|
|
564
|
+
| CI cost/month | < $100 | $75 | ✅ |
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
### Handle Flaky Tests
|
|
568
|
+
|
|
569
|
+
When burn-in detects flakiness:
|
|
570
|
+
|
|
571
|
+
1. **Quarantine flaky test:**
|
|
572
|
+
```typescript
|
|
573
|
+
test.skip('flaky test - investigating', async ({ page }) => {
|
|
574
|
+
// TODO: Fix flakiness
|
|
575
|
+
});
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
2. **Investigate with trace viewer:**
|
|
579
|
+
```bash
|
|
580
|
+
npx playwright show-trace test-results/trace.zip
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
3. **Fix root cause:**
|
|
584
|
+
- Add network-first patterns
|
|
585
|
+
- Remove hard waits
|
|
586
|
+
- Fix race conditions
|
|
587
|
+
|
|
588
|
+
4. **Verify fix:**
|
|
589
|
+
```bash
|
|
590
|
+
npm run test:burn-in -- tests/flaky.spec.ts --repeat 20
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
### Secure Secrets
|
|
594
|
+
|
|
595
|
+
**Don't commit secrets to code:**
|
|
596
|
+
```yaml
|
|
597
|
+
# ❌ Bad
|
|
598
|
+
- run: API_KEY=sk-1234... npm test
|
|
599
|
+
|
|
600
|
+
# ✅ Good
|
|
601
|
+
- run: npm test
|
|
602
|
+
env:
|
|
603
|
+
API_KEY: ${{ secrets.API_KEY }}
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
**Use environment-specific secrets:**
|
|
607
|
+
- `STAGING_API_URL`
|
|
608
|
+
- `PROD_API_URL`
|
|
609
|
+
- `TEST_API_URL`
|
|
610
|
+
|
|
611
|
+
### Cache Aggressively
|
|
612
|
+
|
|
613
|
+
Speed up CI with caching:
|
|
614
|
+
|
|
615
|
+
```yaml
|
|
616
|
+
# Cache node_modules
|
|
617
|
+
- uses: actions/setup-node@v4
|
|
618
|
+
with:
|
|
619
|
+
cache: 'npm'
|
|
620
|
+
|
|
621
|
+
# Cache Playwright browsers
|
|
622
|
+
- name: Cache Playwright browsers
|
|
623
|
+
uses: actions/cache@v4
|
|
624
|
+
with:
|
|
625
|
+
path: ~/.cache/ms-playwright
|
|
626
|
+
key: playwright-${{ hashFiles('package-lock.json') }}
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
## Common Issues
|
|
630
|
+
|
|
631
|
+
### Tests Pass Locally, Fail in CI
|
|
632
|
+
|
|
633
|
+
**Symptoms:**
|
|
634
|
+
- Green locally, red in CI
|
|
635
|
+
- "Works on my machine"
|
|
636
|
+
|
|
637
|
+
**Common Causes:**
|
|
638
|
+
- Different Node version
|
|
639
|
+
- Different browser version
|
|
640
|
+
- Missing environment variables
|
|
641
|
+
- Timezone differences
|
|
642
|
+
- Race conditions (CI slower)
|
|
643
|
+
|
|
644
|
+
**Solutions:**
|
|
645
|
+
```yaml
|
|
646
|
+
# Pin Node version
|
|
647
|
+
- uses: actions/setup-node@v4
|
|
648
|
+
with:
|
|
649
|
+
node-version-file: '.nvmrc'
|
|
650
|
+
|
|
651
|
+
# Pin browser versions
|
|
652
|
+
- run: npx playwright install --with-deps chromium@1.40.0
|
|
653
|
+
|
|
654
|
+
# Set timezone
|
|
655
|
+
env:
|
|
656
|
+
TZ: 'America/New_York'
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
### CI Takes Too Long
|
|
660
|
+
|
|
661
|
+
**Problem:** CI takes 30+ minutes, developers wait too long.
|
|
662
|
+
|
|
663
|
+
**Solutions:**
|
|
664
|
+
1. **Shard tests:** 4 workers = 4x faster
|
|
665
|
+
2. **Selective testing:** Only run affected tests on PR
|
|
666
|
+
3. **Smoke tests first:** Run critical path (2 min), full suite after
|
|
667
|
+
4. **Cache dependencies:** `npm ci` with cache
|
|
668
|
+
5. **Optimize tests:** Remove slow tests, hard waits
|
|
669
|
+
|
|
670
|
+
### Burn-In Always Fails
|
|
671
|
+
|
|
672
|
+
**Problem:** Burn-in job fails every time.
|
|
673
|
+
|
|
674
|
+
**Cause:** Test suite is flaky.
|
|
675
|
+
|
|
676
|
+
**Solution:**
|
|
677
|
+
1. Identify flaky tests (check which iteration fails)
|
|
678
|
+
2. Fix flaky tests using `*test-review`
|
|
679
|
+
3. Re-run burn-in on specific files:
|
|
680
|
+
```bash
|
|
681
|
+
npm run test:burn-in tests/flaky.spec.ts
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
### Out of CI Minutes
|
|
685
|
+
|
|
686
|
+
**Problem:** Using too many CI minutes, hitting plan limit.
|
|
687
|
+
|
|
688
|
+
**Solutions:**
|
|
689
|
+
1. Run full suite only on main branch
|
|
690
|
+
2. Use selective testing on PRs
|
|
691
|
+
3. Run expensive tests nightly only
|
|
692
|
+
4. Self-host runners (for GitHub Actions)
|
|
693
|
+
|
|
694
|
+
## Related Guides
|
|
695
|
+
|
|
696
|
+
- [How to Set Up Test Framework](/docs/how-to/workflows/setup-test-framework.md) - Run first
|
|
697
|
+
- [How to Run Test Review](/docs/how-to/workflows/run-test-review.md) - Audit CI tests
|
|
698
|
+
- [Integrate Playwright Utils](/docs/how-to/customization/integrate-playwright-utils.md) - Burn-in utility
|
|
699
|
+
|
|
700
|
+
## Understanding the Concepts
|
|
701
|
+
|
|
702
|
+
- [Test Quality Standards](/docs/explanation/tea/test-quality-standards.md) - Why determinism matters
|
|
703
|
+
- [Network-First Patterns](/docs/explanation/tea/network-first-patterns.md) - Avoid CI flakiness
|
|
704
|
+
|
|
705
|
+
## Reference
|
|
706
|
+
|
|
707
|
+
- [Command: *ci](/docs/reference/tea/commands.md#ci) - Full command reference
|
|
708
|
+
- [TEA Configuration](/docs/reference/tea/configuration.md) - CI-related config options
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
712
|
+
Generated with [BMad Method](https://bmad-method.org) - TEA (Test Architect)
|