bmad-method-test-architecture-enterprise 1.5.3 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/docs/reference/troubleshooting.md +4 -4
- package/package.json +1 -1
- package/release_notes.md +6 -5
- package/src/module-help.csv +9 -9
- package/src/testarch/knowledge/ci-burn-in.md +1 -1
- package/src/testarch/knowledge/contract-testing.md +64 -0
- package/src/testarch/knowledge/error-handling.md +1 -1
- package/src/testarch/knowledge/feature-flags.md +1 -1
- package/src/testarch/knowledge/fixture-architecture.md +1 -1
- package/src/testarch/knowledge/network-recorder.md +5 -5
- package/src/testarch/knowledge/overview.md +1 -1
- package/src/testarch/knowledge/pact-consumer-di.md +4 -4
- package/src/testarch/knowledge/pact-consumer-framework-setup.md +3 -1
- package/src/testarch/knowledge/pactjs-utils-consumer-helpers.md +2 -0
- package/src/testarch/knowledge/playwright-config.md +1 -1
- package/src/testarch/knowledge/risk-governance.md +1 -1
- package/src/testarch/knowledge/selective-testing.md +1 -1
- package/src/testarch/knowledge/visual-debugging.md +1 -1
- package/src/workflows/testarch/bmad-teach-me-testing/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-teach-me-testing/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/workflow-plan-teach-me-testing.md +2 -2
- package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/workflow.md +1 -1
- package/src/workflows/testarch/bmad-testarch-atdd/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-testarch-atdd/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/instructions.md +3 -3
- package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-04-generate-tests.md +3 -0
- package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-04a-subagent-api-failing.md +72 -1
- package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/validation-report-20260127-095021.md +1 -1
- package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/validation-report-20260127-102401.md +1 -1
- package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/workflow.md +1 -1
- package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/workflow.yaml +6 -6
- package/src/workflows/testarch/bmad-testarch-automate/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-testarch-automate/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/checklist.md +29 -0
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/instructions.md +3 -3
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-02-identify-targets.md +24 -0
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-03-generate-tests.md +2 -0
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-03a-subagent-api.md +69 -0
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/validation-report-20260127-095021.md +1 -1
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/validation-report-20260127-102401.md +1 -1
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/workflow.md +1 -1
- package/src/workflows/testarch/{automate → bmad-testarch-automate}/workflow.yaml +5 -5
- package/src/workflows/testarch/bmad-testarch-ci/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-testarch-ci/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{ci → bmad-testarch-ci}/instructions.md +3 -3
- package/src/workflows/testarch/{ci → bmad-testarch-ci}/steps-c/step-02-generate-pipeline.md +10 -10
- package/src/workflows/testarch/{ci → bmad-testarch-ci}/validation-report-20260127-095021.md +1 -1
- package/src/workflows/testarch/{ci → bmad-testarch-ci}/validation-report-20260127-102401.md +1 -1
- package/src/workflows/testarch/{ci → bmad-testarch-ci}/workflow.md +1 -1
- package/src/workflows/testarch/{ci → bmad-testarch-ci}/workflow.yaml +5 -5
- package/src/workflows/testarch/bmad-testarch-framework/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-testarch-framework/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{framework → bmad-testarch-framework}/instructions.md +3 -3
- package/src/workflows/testarch/{framework → bmad-testarch-framework}/validation-report-20260127-095021.md +1 -1
- package/src/workflows/testarch/{framework → bmad-testarch-framework}/validation-report-20260127-102401.md +1 -1
- package/src/workflows/testarch/{framework → bmad-testarch-framework}/workflow.md +1 -1
- package/src/workflows/testarch/{framework → bmad-testarch-framework}/workflow.yaml +5 -5
- package/src/workflows/testarch/bmad-testarch-nfr/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-testarch-nfr/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/instructions.md +3 -3
- package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/validation-report-20260127-095021.md +1 -1
- package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/validation-report-20260127-102401.md +1 -1
- package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/workflow.md +1 -1
- package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/workflow.yaml +6 -6
- package/src/workflows/testarch/bmad-testarch-test-design/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-testarch-test-design/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/instructions.md +3 -3
- package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/test-design-qa-template.md +1 -1
- package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/test-design-template.md +1 -1
- package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/validation-report-20260127-095021.md +1 -1
- package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/validation-report-20260127-102401.md +1 -1
- package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/workflow.md +1 -1
- package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/workflow.yaml +6 -6
- package/src/workflows/testarch/bmad-testarch-test-review/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-testarch-test-review/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/instructions.md +3 -3
- package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/validation-report-20260127-095021.md +1 -1
- package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/validation-report-20260127-102401.md +1 -1
- package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/workflow.md +1 -1
- package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/workflow.yaml +6 -6
- package/src/workflows/testarch/bmad-testarch-trace/SKILL.md +6 -0
- package/src/workflows/testarch/bmad-testarch-trace/bmad-skill-manifest.yaml +1 -0
- package/src/workflows/testarch/{trace → bmad-testarch-trace}/instructions.md +3 -3
- package/src/workflows/testarch/{trace → bmad-testarch-trace}/validation-report-20260127-095021.md +1 -1
- package/src/workflows/testarch/{trace → bmad-testarch-trace}/validation-report-20260127-102401.md +1 -1
- package/src/workflows/testarch/{trace → bmad-testarch-trace}/workflow.md +1 -1
- package/src/workflows/testarch/{trace → bmad-testarch-trace}/workflow.yaml +6 -6
- package/test/test-installation-components.js +19 -10
- package/tools/validate-tea-workflow-descriptions.js +2 -2
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/checklist.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/data/curriculum.yaml +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/data/quiz-questions.yaml +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/data/role-paths.yaml +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/data/session-content-map.yaml +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/data/tea-resources-index.yaml +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/instructions.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-01-init.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-01b-continue.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-02-assess.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-03-session-menu.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-04-session-01.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-04-session-02.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-04-session-03.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-04-session-04.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-04-session-05.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-04-session-06.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-04-session-07.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-c/step-05-completion.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-e/step-e-01-assess-workflow.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-e/step-e-02-apply-edits.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/steps-v/step-v-01-validate.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/templates/certificate-template.md +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/templates/progress-template.yaml +0 -0
- /package/src/workflows/testarch/{teach-me-testing → bmad-teach-me-testing}/templates/session-notes-template.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/atdd-checklist-template.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/checklist.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-01-preflight-and-context.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-01b-resume.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-02-generation-mode.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-03-test-strategy.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-04b-subagent-e2e-failing.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-04c-aggregate.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-05-validate-and-complete.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-e/step-01-assess.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-e/step-02-apply-edit.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-v/step-01-validate.md +0 -0
- /package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/workflow-plan.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-01-preflight-and-context.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-01b-resume.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-03b-subagent-backend.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-03b-subagent-e2e.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-03c-aggregate.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-c/step-04-validate-and-summarize.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-e/step-01-assess.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-e/step-02-apply-edit.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/steps-v/step-01-validate.md +0 -0
- /package/src/workflows/testarch/{automate → bmad-testarch-automate}/workflow-plan.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/azure-pipelines-template.yaml +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/checklist.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/github-actions-template.yaml +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/gitlab-ci-template.yaml +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/harness-pipeline-template.yaml +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/jenkins-pipeline-template.groovy +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/steps-c/step-01-preflight.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/steps-c/step-01b-resume.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/steps-c/step-03-configure-quality-gates.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/steps-c/step-04-validate-and-summary.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/steps-e/step-01-assess.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/steps-e/step-02-apply-edit.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/steps-v/step-01-validate.md +0 -0
- /package/src/workflows/testarch/{ci → bmad-testarch-ci}/workflow-plan.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/checklist.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-c/step-01-preflight.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-c/step-01b-resume.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-c/step-02-select-framework.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-c/step-03-scaffold-framework.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-c/step-04-docs-and-scripts.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-c/step-05-validate-and-summary.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-e/step-01-assess.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-e/step-02-apply-edit.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/steps-v/step-01-validate.md +0 -0
- /package/src/workflows/testarch/{framework → bmad-testarch-framework}/workflow-plan.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/checklist.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/nfr-report-template.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-01-load-context.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-01b-resume.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-02-define-thresholds.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-03-gather-evidence.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-04-evaluate-and-score.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-04a-subagent-security.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-04b-subagent-performance.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-04c-subagent-reliability.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-04d-subagent-scalability.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-04e-aggregate-nfr.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-c/step-05-generate-report.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-e/step-01-assess.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-e/step-02-apply-edit.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/steps-v/step-01-validate.md +0 -0
- /package/src/workflows/testarch/{nfr-assess → bmad-testarch-nfr}/workflow-plan.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/checklist.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-c/step-01-detect-mode.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-c/step-01b-resume.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-c/step-02-load-context.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-c/step-03-risk-and-testability.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-c/step-04-coverage-plan.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-c/step-05-generate-output.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-e/step-01-assess.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-e/step-02-apply-edit.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/steps-v/step-01-validate.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/test-design-architecture-template.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/test-design-handoff-template.md +0 -0
- /package/src/workflows/testarch/{test-design → bmad-testarch-test-design}/workflow-plan.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/checklist.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-01-load-context.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-01b-resume.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-02-discover-tests.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-03-quality-evaluation.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-03a-subagent-determinism.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-03b-subagent-isolation.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-03c-subagent-maintainability.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-03e-subagent-performance.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-03f-aggregate-scores.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-c/step-04-generate-report.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-e/step-01-assess.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-e/step-02-apply-edit.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/steps-v/step-01-validate.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/test-review-template.md +0 -0
- /package/src/workflows/testarch/{test-review → bmad-testarch-test-review}/workflow-plan.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/checklist.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-c/step-01-load-context.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-c/step-01b-resume.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-c/step-02-discover-tests.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-c/step-03-map-criteria.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-c/step-04-analyze-gaps.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-c/step-05-gate-decision.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-e/step-01-assess.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-e/step-02-apply-edit.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/steps-v/step-01-validate.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/trace-template.md +0 -0
- /package/src/workflows/testarch/{trace → bmad-testarch-trace}/workflow-plan.md +0 -0
package/README.md
CHANGED
|
@@ -173,15 +173,15 @@ src/
|
|
|
173
173
|
│ └── tea.agent.yaml
|
|
174
174
|
├── workflows/
|
|
175
175
|
│ └── testarch/
|
|
176
|
-
│ ├──
|
|
177
|
-
│ ├──
|
|
178
|
-
│ ├──
|
|
179
|
-
│ ├──
|
|
180
|
-
│ ├──
|
|
181
|
-
│ ├──
|
|
182
|
-
│ ├── test-design/
|
|
183
|
-
│ ├── test-review/
|
|
184
|
-
│ └── trace/
|
|
176
|
+
│ ├── bmad-teach-me-testing/
|
|
177
|
+
│ ├── bmad-testarch-atdd/
|
|
178
|
+
│ ├── bmad-testarch-automate/
|
|
179
|
+
│ ├── bmad-testarch-ci/
|
|
180
|
+
│ ├── bmad-testarch-framework/
|
|
181
|
+
│ ├── bmad-testarch-nfr/
|
|
182
|
+
│ ├── bmad-testarch-test-design/
|
|
183
|
+
│ ├── bmad-testarch-test-review/
|
|
184
|
+
│ └── bmad-testarch-trace/
|
|
185
185
|
└── testarch/
|
|
186
186
|
├── tea-index.csv
|
|
187
187
|
└── knowledge/
|
|
@@ -191,7 +191,7 @@ If the BMAD installer can run but cannot fetch the Test Architect module from Gi
|
|
|
191
191
|
|
|
192
192
|
```bash
|
|
193
193
|
# Check each workflow
|
|
194
|
-
cat _bmad/tea/workflows/testarch/test-design/workflow.yaml
|
|
194
|
+
cat _bmad/tea/workflows/testarch/bmad-testarch-test-design/workflow.yaml
|
|
195
195
|
```
|
|
196
196
|
|
|
197
197
|
3. Test workflow trigger directly:
|
|
@@ -262,7 +262,7 @@ If the BMAD installer can run but cannot fetch the Test Architect module from Gi
|
|
|
262
262
|
|
|
263
263
|
```bash
|
|
264
264
|
# For automate workflow
|
|
265
|
-
ls -la _bmad/tea/workflows/testarch/automate/steps-c/step-03*.md
|
|
265
|
+
ls -la _bmad/tea/workflows/testarch/bmad-testarch-automate/steps-c/step-03*.md
|
|
266
266
|
# Should show: step-03a-*.md, step-03b-*.md, step-03c-aggregate.md
|
|
267
267
|
```
|
|
268
268
|
|
|
@@ -328,7 +328,7 @@ If the BMAD installer can run but cannot fetch the Test Architect module from Gi
|
|
|
328
328
|
4. Check workflow manifest:
|
|
329
329
|
```bash
|
|
330
330
|
# Each workflow.yaml should specify knowledge_fragments
|
|
331
|
-
grep -A 5 "knowledge_fragments" _bmad/tea/workflows/testarch/test-design/workflow.yaml
|
|
331
|
+
grep -A 5 "knowledge_fragments" _bmad/tea/workflows/testarch/bmad-testarch-test-design/workflow.yaml
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
---
|
|
@@ -715,7 +715,7 @@ Check these first:
|
|
|
715
715
|
|
|
716
716
|
### "Workflow 'test-design' failed at step 3"
|
|
717
717
|
|
|
718
|
-
**Fix**: Check step file exists: `_bmad/tea/workflows/testarch/test-design/steps-c/step-03-*`
|
|
718
|
+
**Fix**: Check step file exists: `_bmad/tea/workflows/testarch/bmad-testarch-test-design/steps-c/step-03-*`
|
|
719
719
|
|
|
720
720
|
### "Agent YAML validation failed"
|
|
721
721
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "bmad-method-test-architecture-enterprise",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.7.0",
|
|
5
5
|
"description": "Master Test Architect for quality strategy, test automation, and release gates",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"bmad",
|
package/release_notes.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
## 🚀 What's New in v1.
|
|
1
|
+
## 🚀 What's New in v1.7.0
|
|
2
2
|
|
|
3
|
-
###
|
|
4
|
-
-
|
|
3
|
+
### ✨ New Features
|
|
4
|
+
- feat: skills migration part1
|
|
5
5
|
|
|
6
6
|
### 📦 Other Changes
|
|
7
|
-
-
|
|
7
|
+
- addressed review comments
|
|
8
|
+
- Merge pull request #54 from bmad-code-org/feat/skill-migration-part1
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
## 📦 Installation
|
|
@@ -14,4 +15,4 @@ npx bmad-method install
|
|
|
14
15
|
# Select "Test Architect" from module menu
|
|
15
16
|
```
|
|
16
17
|
|
|
17
|
-
**Full Changelog**: https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise/compare/v1.
|
|
18
|
+
**Full Changelog**: https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise/compare/v1.6.0...v1.7.0
|
package/src/module-help.csv
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
module,phase,name,code,sequence,workflow-file,command,required,agent,options,description,output-location,outputs,
|
|
2
|
-
tea,0-learning,Teach Me Testing,TMT,10,
|
|
3
|
-
tea,3-solutioning,Test Design,TD,10,
|
|
4
|
-
tea,3-solutioning,Test Framework,TF,20,
|
|
5
|
-
tea,3-solutioning,CI Setup,CI,30,
|
|
6
|
-
tea,4-implementation,ATDD,AT,10,
|
|
7
|
-
tea,4-implementation,Test Automation,TA,20,
|
|
8
|
-
tea,4-implementation,Test Review,RV,30,
|
|
9
|
-
tea,4-implementation,NFR Assessment,NR,40,
|
|
10
|
-
tea,4-implementation,Traceability,TR,50,
|
|
2
|
+
tea,0-learning,Teach Me Testing,TMT,10,skill:bmad-teach-me-testing,bmad-tea-teach-me-testing,false,tea,Create Mode,"Teach testing fundamentals through 7 sessions (TEA Academy)",test_artifacts,"progress file|session notes|certificate",
|
|
3
|
+
tea,3-solutioning,Test Design,TD,10,skill:bmad-testarch-test-design,bmad-tea-testarch-test-design,false,tea,Create Mode,"Risk-based test planning",test_artifacts,"test design document",
|
|
4
|
+
tea,3-solutioning,Test Framework,TF,20,skill:bmad-testarch-framework,bmad-tea-testarch-framework,false,tea,Create Mode,"Initialize production-ready test framework",test_artifacts,"framework scaffold",
|
|
5
|
+
tea,3-solutioning,CI Setup,CI,30,skill:bmad-testarch-ci,bmad-tea-testarch-ci,false,tea,Create Mode,"Configure CI/CD quality pipeline",test_artifacts,"ci config",
|
|
6
|
+
tea,4-implementation,ATDD,AT,10,skill:bmad-testarch-atdd,bmad-tea-testarch-atdd,false,tea,Create Mode,"Generate failing tests (TDD red phase)",test_artifacts,"atdd tests",
|
|
7
|
+
tea,4-implementation,Test Automation,TA,20,skill:bmad-testarch-automate,bmad-tea-testarch-automate,false,tea,Create Mode,"Expand test coverage",test_artifacts,"test suite",
|
|
8
|
+
tea,4-implementation,Test Review,RV,30,skill:bmad-testarch-test-review,bmad-tea-testarch-test-review,false,tea,Validate Mode,"Quality audit (0-100 scoring)",test_artifacts,"review report",
|
|
9
|
+
tea,4-implementation,NFR Assessment,NR,40,skill:bmad-testarch-nfr,bmad-tea-testarch-nfr,false,tea,Create Mode,"Non-functional requirements",test_artifacts,"nfr report",
|
|
10
|
+
tea,4-implementation,Traceability,TR,50,skill:bmad-testarch-trace,bmad-tea-testarch-trace,false,tea,Create Mode,"Coverage traceability and gate",test_artifacts,"traceability matrix|gate decision",
|
|
@@ -714,4 +714,4 @@ Before deploying your CI pipeline, verify:
|
|
|
714
714
|
- Related fragments: `selective-testing.md`, `playwright-config.md`, `test-quality.md`
|
|
715
715
|
- CI tools: GitHub Actions, GitLab CI, CircleCI, Jenkins
|
|
716
716
|
|
|
717
|
-
_Source: Murat CI/CD strategy blog, Playwright/Cypress workflow examples,
|
|
717
|
+
_Source: Murat CI/CD strategy blog, Playwright/Cypress workflow examples, enterprise production pipelines_
|
|
@@ -944,6 +944,67 @@ jobs:
|
|
|
944
944
|
|
|
945
945
|
---
|
|
946
946
|
|
|
947
|
+
## Provider Scrutiny Protocol
|
|
948
|
+
|
|
949
|
+
When generating consumer contract tests, the agent **MUST** analyze provider source code — or the provider's OpenAPI/Swagger spec — before writing any Pact interaction. Generating contracts from consumer-side assumptions alone leads to mismatches that only surface during provider verification — wrong response shapes, wrong status codes, wrong field names, wrong types, missing required fields, and wrong enum values.
|
|
950
|
+
|
|
951
|
+
**Source priority**: Provider source code is the most authoritative reference. When an OpenAPI/Swagger spec exists (`openapi.yaml`, `openapi.json`, `swagger.json`), use it as a complementary or alternative source — it documents the provider's contract explicitly and can be faster to parse than tracing through handler code. When both exist, cross-reference them; if they disagree, the source code wins.
|
|
952
|
+
|
|
953
|
+
### Provider Endpoint Comment
|
|
954
|
+
|
|
955
|
+
Every Pact interaction MUST include a provider endpoint comment immediately above the `.given()` call:
|
|
956
|
+
|
|
957
|
+
```typescript
|
|
958
|
+
// Provider endpoint: server/src/routes/userRouteHandlers.ts -> GET /api/v2/users/:userId
|
|
959
|
+
await provider.given('user with id 1 exists').uponReceiving('a request for user 1');
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
**Format**: `// Provider endpoint: <relative-path-to-handler> -> <METHOD> <route-pattern>`
|
|
963
|
+
|
|
964
|
+
If the provider source is not accessible, use: `// Provider endpoint: TODO — provider source not accessible, verify manually`
|
|
965
|
+
|
|
966
|
+
### Seven-Point Scrutiny Checklist
|
|
967
|
+
|
|
968
|
+
Before generating each Pact interaction, read the provider route handler and/or OpenAPI spec and verify:
|
|
969
|
+
|
|
970
|
+
| # | Check | What to Read (source code / OpenAPI spec) | Common Mismatch |
|
|
971
|
+
| --- | --------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------- |
|
|
972
|
+
| 1 | **Response shape** | Handler's `res.json()` calls / OpenAPI `responses.content.schema` | Nested object vs flat; array wrapper vs direct |
|
|
973
|
+
| 2 | **Status codes** | Handler's `res.status()` calls / OpenAPI `responses` keys | 200 vs 201 for creation; 204 vs 200 for delete |
|
|
974
|
+
| 3 | **Field names** | Response type/DTO definitions / OpenAPI `schema.properties` | `transaction_id` vs `transactionId`; `fraud_score` vs `score` |
|
|
975
|
+
| 4 | **Enum values** | Validation schemas, constants / OpenAPI `schema.enum` | `"active"` vs `"ACTIVE"`; `"pending"` vs `"in_progress"` |
|
|
976
|
+
| 5 | **Required fields** | Request validation (Joi, Zod) / OpenAPI `schema.required` | Missing required header; optional field assumed required |
|
|
977
|
+
| 6 | **Data types** | TypeScript types, DB models / OpenAPI `schema.type` + `format` | `string` ID vs `number` ID; ISO date vs Unix timestamp |
|
|
978
|
+
| 7 | **Nested structures** | Response builder, serializer / OpenAPI `$ref` + `allOf`/`oneOf` | `{ data: { items: [] } }` vs `{ items: [] }` |
|
|
979
|
+
|
|
980
|
+
### Scrutiny Evidence Block
|
|
981
|
+
|
|
982
|
+
Document what was found from provider source and/or OpenAPI spec as a block comment in the test file:
|
|
983
|
+
|
|
984
|
+
```typescript
|
|
985
|
+
/*
|
|
986
|
+
* Provider Scrutiny Evidence:
|
|
987
|
+
* - Handler: server/src/routes/userRouteHandlers.ts:45
|
|
988
|
+
* - OpenAPI: server/openapi.yaml paths./api/v2/users/{userId}.get (if available)
|
|
989
|
+
* - Response type: UserResponseDto (server/src/types/user.ts:12)
|
|
990
|
+
* - Status: 200 (line 52), 404 (line 48)
|
|
991
|
+
* - Fields: { id: number, name: string, email: string, role: "user" | "admin", createdAt: string }
|
|
992
|
+
* - Required request headers: Authorization (Bearer token)
|
|
993
|
+
* - Validation: Zod schema at server/src/validation/user.ts:8
|
|
994
|
+
*/
|
|
995
|
+
```
|
|
996
|
+
|
|
997
|
+
### Graceful Degradation
|
|
998
|
+
|
|
999
|
+
When provider source code is not accessible (different repo, no access, closed source):
|
|
1000
|
+
|
|
1001
|
+
1. **OpenAPI/Swagger spec available**: Use the spec as the source of truth for response shapes, status codes, and field names
|
|
1002
|
+
2. **Pact Broker has existing contracts**: Use `pact_mcp` tools to fetch existing provider states and verified interactions as reference
|
|
1003
|
+
3. **Neither available**: Generate contracts from consumer-side types but use the TODO form of the mandatory comment: `// Provider endpoint: TODO — provider source not accessible, verify manually` and add a `provider_scrutiny: "pending"` field to the output JSON
|
|
1004
|
+
4. **Never silently guess**: If you cannot verify, document what you assumed and why
|
|
1005
|
+
|
|
1006
|
+
---
|
|
1007
|
+
|
|
947
1008
|
## Contract Testing Checklist
|
|
948
1009
|
|
|
949
1010
|
Before implementing contract testing, verify:
|
|
@@ -956,6 +1017,9 @@ Before implementing contract testing, verify:
|
|
|
956
1017
|
- [ ] **Webhooks configured**: Consumer changes trigger provider verification
|
|
957
1018
|
- [ ] **Retention policy**: Old pacts archived (keep 30 days, all production tags)
|
|
958
1019
|
- [ ] **Resilience tested**: Timeouts, retries, error codes in contracts
|
|
1020
|
+
- [ ] **Provider endpoint comments**: Every Pact interaction has `// Provider endpoint:` comment
|
|
1021
|
+
- [ ] **Provider scrutiny completed**: Seven-point checklist verified for each interaction
|
|
1022
|
+
- [ ] **Scrutiny evidence documented**: Block comment with handler, types, status codes, and fields
|
|
959
1023
|
|
|
960
1024
|
## Integration Points
|
|
961
1025
|
|
|
@@ -722,4 +722,4 @@ Before shipping error handling code, verify:
|
|
|
722
722
|
- Related fragments: `network-first.md`, `test-quality.md`, `contract-testing.md`
|
|
723
723
|
- Monitoring tools: Sentry, Datadog, LogRocket
|
|
724
724
|
|
|
725
|
-
_Source: Murat error-handling patterns, Pact resilience guidance,
|
|
725
|
+
_Source: Murat error-handling patterns, Pact resilience guidance, enterprise production error handling_
|
|
@@ -747,4 +747,4 @@ Before merging flag-related code, verify:
|
|
|
747
747
|
- Related fragments: `test-quality.md`, `selective-testing.md`
|
|
748
748
|
- Flag services: LaunchDarkly, Split.io, Unleash, custom implementations
|
|
749
749
|
|
|
750
|
-
_Source: LaunchDarkly strategy blog, Murat test architecture notes,
|
|
750
|
+
_Source: LaunchDarkly strategy blog, Murat test architecture notes, enterprise feature flag governance_
|
|
@@ -398,4 +398,4 @@ When deciding whether to create a fixture, follow these rules:
|
|
|
398
398
|
- **1 use** → Keep inline (avoid premature abstraction)
|
|
399
399
|
- **Complex logic** → Factory function pattern (dynamic data generation)
|
|
400
400
|
|
|
401
|
-
_Source: Murat Testing Philosophy (lines 74-122),
|
|
401
|
+
_Source: Murat Testing Philosophy (lines 74-122), enterprise production patterns, Playwright fixture docs._
|
|
@@ -304,13 +304,13 @@ await networkRecorder.setup(context, {
|
|
|
304
304
|
playback: {
|
|
305
305
|
urlMapping: {
|
|
306
306
|
hostMapping: {
|
|
307
|
-
'localhost:3000': 'admin.
|
|
308
|
-
'admin-staging.
|
|
309
|
-
'admin.
|
|
307
|
+
'localhost:3000': 'admin.example.com',
|
|
308
|
+
'admin-staging.example.com': 'admin.example.com',
|
|
309
|
+
'admin.example.com': 'admin.example.com',
|
|
310
310
|
},
|
|
311
311
|
patterns: [
|
|
312
|
-
{ match: /admin-\d+\.
|
|
313
|
-
{ match: /admin-staging-pr-\w+-\d\.
|
|
312
|
+
{ match: /admin-\d+\.example\.com/, replace: 'admin.example.com' },
|
|
313
|
+
{ match: /admin-staging-pr-\w+-\d\.example\.com/, replace: 'admin.example.com' },
|
|
314
314
|
],
|
|
315
315
|
},
|
|
316
316
|
},
|
|
@@ -15,7 +15,7 @@ Writing Playwright utilities from scratch for every project leads to:
|
|
|
15
15
|
|
|
16
16
|
`@seontechnologies/playwright-utils` provides:
|
|
17
17
|
|
|
18
|
-
- **Production-tested
|
|
18
|
+
- **Production-tested**: Used in enterprise production environments
|
|
19
19
|
- **Functional-first design**: Core logic as pure functions, fixtures for convenience
|
|
20
20
|
- **Composable fixtures**: Use `mergeTests` to combine utilities
|
|
21
21
|
- **TypeScript support**: Full type safety with generic types
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Inject the Pact mock server URL into consumer code via an optional `baseUrl` field on the API context type instead of using raw `fetch()` inside `executeTest()`. This ensures contract tests exercise the real consumer HTTP client — including retry logic, header assembly, timeout configuration, error handling, and metrics — rather than testing Pact itself.
|
|
6
6
|
|
|
7
|
-
The base URL is typically a module-level constant evaluated at import time (`export const API_BASE_URL = env.
|
|
7
|
+
The base URL is typically a module-level constant evaluated at import time (`export const API_BASE_URL = env.API_BASE_URL`), but `mockServer.url` is only available at runtime inside `executeTest()`. Dependency injection solves this timing mismatch cleanly: add one optional field to the context type, use nullish coalescing in the HTTP client factory, and inject the mock server URL in tests.
|
|
8
8
|
|
|
9
9
|
## Rationale
|
|
10
10
|
|
|
@@ -124,7 +124,7 @@ export function createTestContext(mockServerUrl: string): ApiContext {
|
|
|
124
124
|
|
|
125
125
|
```typescript
|
|
126
126
|
.executeTest(async (mockServer: V3MockServer) => {
|
|
127
|
-
const api =
|
|
127
|
+
const api = createApiClient(createTestContext(mockServer.url));
|
|
128
128
|
const result = await api.getFilterFields();
|
|
129
129
|
expect(result).toEqual(
|
|
130
130
|
expect.arrayContaining([
|
|
@@ -277,7 +277,7 @@ expect(response.status).toBe(200);
|
|
|
277
277
|
|
|
278
278
|
```typescript
|
|
279
279
|
// GOOD: Exercises real client, validates parsed return value
|
|
280
|
-
const api =
|
|
280
|
+
const api = createApiClient(createTestContext(mockServer.url));
|
|
281
281
|
const result = await api.searchTransactions(request);
|
|
282
282
|
expect(result.transactions).toBeDefined();
|
|
283
283
|
```
|
|
@@ -307,4 +307,4 @@ Used in workflows:
|
|
|
307
307
|
|
|
308
308
|
## Source
|
|
309
309
|
|
|
310
|
-
Pattern derived from
|
|
310
|
+
Pattern derived from my-consumer-app Pact consumer test refactor (March 2026). Implements dependency injection for testability as described in Pact.js best practices.
|
|
@@ -463,6 +463,7 @@ describe('Movies API Consumer Contract', () => {
|
|
|
463
463
|
- Consumer code MUST expose a URL injection mechanism: `setApiUrl()`, env var override, or constructor parameter
|
|
464
464
|
- If the consumer code doesn't support URL injection, add it — this is a design prerequisite for CDC testing
|
|
465
465
|
- Use PactV4 `addInteraction()` builder (not PactV3 fluent API with `withRequest({...})` object)
|
|
466
|
+
- **Interaction naming convention**: Use the pattern `"a request to <action> <resource> [<condition>]"` for `uponReceiving()`. Examples: `"a request to get a movie by ID"`, `"a request to delete a non-existing movie"`, `"a request to create a movie that already exists"`. These names appear in Pact Broker UI and verification logs — keep them descriptive and unique within the consumer-provider pair.
|
|
466
467
|
- Use `setJsonContent` for request/response builder callbacks with query/header/body concerns; use `setJsonBody` for body-only response callbacks
|
|
467
468
|
- Provider state factory functions (`movieExists`) return `ProviderStateInput` objects
|
|
468
469
|
- `createProviderState` converts to `[stateName, stateParams]` tuple for `.given()`
|
|
@@ -616,9 +617,10 @@ Before presenting the consumer CDC framework to the user, verify:
|
|
|
616
617
|
- [ ] `.github/actions/detect-breaking-change/action.yml` exists
|
|
617
618
|
- [ ] Consumer tests use `.pacttest.ts` extension
|
|
618
619
|
- [ ] Consumer tests use PactV4 `addInteraction()` builder
|
|
620
|
+
- [ ] `uponReceiving()` names follow `"a request to <action> <resource> [<condition>]"` pattern and are unique within the consumer-provider pair
|
|
619
621
|
- [ ] Interaction callbacks use `setJsonContent` for query/header/body and `setJsonBody` for body-only responses
|
|
620
622
|
- [ ] Request bodies use exact values (no `like()` wrapper) — Postel's Law: be strict in what you send
|
|
621
|
-
- [ ] `like()`, `eachLike()`, `string()`, `integer()` matchers are only used in `willRespondWith` (responses), not in `withRequest` (requests)
|
|
623
|
+
- [ ] `like()`, `eachLike()`, `string()`, `integer()` matchers are only used in `willRespondWith` (responses), not in `withRequest` (requests) — matchers check type/shape, not exact values
|
|
622
624
|
- [ ] Consumer tests call REAL consumer code (actual API client functions), NOT raw `fetch()`
|
|
623
625
|
- [ ] Consumer code exposes URL injection mechanism (`setApiUrl()`, env var, or constructor param)
|
|
624
626
|
- [ ] Local consumer-helpers shim present if pactjs-utils not installed
|
|
@@ -196,6 +196,8 @@ await pact
|
|
|
196
196
|
- **Message pacts**: Works identically with `MessageConsumerPact` — same `.given()` API
|
|
197
197
|
- **Builder reuse**: `setJsonContent` works for both `.withRequest(...)` and `.willRespondWith(...)` callbacks (query is ignored on response builders)
|
|
198
198
|
- **Body shorthand**: `setJsonBody` keeps body-only responses concise and readable
|
|
199
|
+
- **Matchers check type, not value**: `string('My movie')` means "any string", `integer(1)` means "any integer". The example values are arbitrary — the provider can return different values and verification still passes as long as the type matches. Use matchers only in `.willRespondWith()` (responses), never in `.withRequest()` (requests) — Postel's Law applies.
|
|
200
|
+
- **Reuse test values across files**: Interactions are uniquely identified by `uponReceiving` + `.given()`, not by placeholder values. Two test files can both use `testId: 100` without conflicting. On the provider side, shared values simplify state handlers — idempotent handlers (check if exists, create if not) only need to ensure one record exists. Use different values only when testing different states of the same entity type (e.g., `movieExists(100)` for happy paths vs. `movieNotFound(999)` for error paths).
|
|
199
201
|
|
|
200
202
|
## Related Fragments
|
|
201
203
|
|
|
@@ -727,4 +727,4 @@ jobs:
|
|
|
727
727
|
- [ ] Projects defined for cross-browser/device testing (if needed)
|
|
728
728
|
- [ ] CI uploads artifacts on failure with 30-day retention
|
|
729
729
|
|
|
730
|
-
_Source: Playwright book repo,
|
|
730
|
+
_Source: Playwright book repo, enterprise configuration example, Murat testing philosophy (lines 216-271)._
|
|
@@ -612,4 +612,4 @@ Before deploying to production, ensure:
|
|
|
612
612
|
- **Related fragments**: `probability-impact.md` (scoring definitions), `test-priorities-matrix.md` (P0-P3 classification), `nfr-criteria.md` (non-functional risks)
|
|
613
613
|
- **Tools**: Risk tracking dashboards (Jira, Linear), gate automation (CI/CD), traceability reports (Markdown, Confluence)
|
|
614
614
|
|
|
615
|
-
_Source: Murat risk governance notes, gate schema guidance,
|
|
615
|
+
_Source: Murat risk governance notes, gate schema guidance, enterprise production gate workflows, ISO 31000 risk management standards_
|
|
@@ -728,5 +728,5 @@ Before implementing selective testing, verify:
|
|
|
728
728
|
- Related fragments: `ci-burn-in.md`, `test-priorities-matrix.md`, `test-quality.md`
|
|
729
729
|
- Selection tools: Playwright --grep, Cypress @cypress/grep, git diff
|
|
730
730
|
|
|
731
|
-
_Source: 32+ selective testing strategies blog, Murat testing philosophy,
|
|
731
|
+
_Source: 32+ selective testing strategies blog, Murat testing philosophy, enterprise CI optimization_
|
|
732
732
|
```
|
|
@@ -521,4 +521,4 @@ Before deploying tests to CI, ensure:
|
|
|
521
521
|
- **Related fragments**: `playwright-config.md` (artifact configuration), `ci-burn-in.md` (CI artifact upload), `test-quality.md` (debugging best practices)
|
|
522
522
|
- **Tools**: Playwright Trace Viewer, Cypress Debug UI, axe-core, HAR files
|
|
523
523
|
|
|
524
|
-
_Source: Playwright official docs, Murat testing philosophy (visual debugging manifesto),
|
|
524
|
+
_Source: Playwright official docs, Murat testing philosophy (visual debugging manifesto), enterprise production debugging patterns_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
type: skill
|
|
@@ -60,7 +60,7 @@ Create an ongoing learning companion that teaches testing progressively through
|
|
|
60
60
|
## Classification Decisions
|
|
61
61
|
|
|
62
62
|
**Workflow Name:** teach-me-testing
|
|
63
|
-
**Target Path:** {project-root}/src/workflows/testarch/teach-me-testing/
|
|
63
|
+
**Target Path:** {project-root}/src/workflows/testarch/bmad-teach-me-testing/
|
|
64
64
|
|
|
65
65
|
**4 Key Decisions:**
|
|
66
66
|
|
|
@@ -927,7 +927,7 @@ teach-me-testing/
|
|
|
927
927
|
`{external-project-root}/_bmad-output/bmb-creations/workflows/teach-me-testing/`
|
|
928
928
|
|
|
929
929
|
**Target (Production):**
|
|
930
|
-
`{project-root}/src/workflows/testarch/teach-me-testing/`
|
|
930
|
+
`{project-root}/src/workflows/testarch/bmad-teach-me-testing/`
|
|
931
931
|
|
|
932
932
|
**Command:**
|
|
933
933
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
type: skill
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Acceptance Test-Driven Development (ATDD)
|
|
4
4
|
|
|
5
|
-
**Workflow ID**: `_bmad/tea/testarch/atdd`
|
|
5
|
+
**Workflow ID**: `_bmad/tea/testarch/bmad-testarch-atdd`
|
|
6
6
|
**Version**: 5.0 (Step-File Architecture)
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -35,11 +35,11 @@ From `workflow.yaml`, resolve:
|
|
|
35
35
|
### 2. First Step
|
|
36
36
|
|
|
37
37
|
Load, read completely, and execute:
|
|
38
|
-
|
|
38
|
+
`./steps-c/step-01-preflight-and-context.md`
|
|
39
39
|
|
|
40
40
|
### 3. Resume Support
|
|
41
41
|
|
|
42
42
|
If the user selects **Resume** mode, load, read completely, and execute:
|
|
43
|
-
|
|
43
|
+
`./steps-c/step-01b-resume.md`
|
|
44
44
|
|
|
45
45
|
This checks the output document for progress tracking frontmatter and routes to the next incomplete step.
|
package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-04-generate-tests.md
RENAMED
|
@@ -71,9 +71,12 @@ const subagentContext = {
|
|
|
71
71
|
config: {
|
|
72
72
|
test_framework: config.test_framework,
|
|
73
73
|
use_playwright_utils: config.tea_use_playwright_utils,
|
|
74
|
+
use_pactjs_utils: config.tea_use_pactjs_utils,
|
|
75
|
+
pact_mcp: config.tea_pact_mcp, // "mcp" | "none"
|
|
74
76
|
browser_automation: config.tea_browser_automation,
|
|
75
77
|
execution_mode: config.tea_execution_mode || 'auto', // "auto" | "subagent" | "agent-team" | "sequential"
|
|
76
78
|
capability_probe: parseBooleanFlag(config.tea_capability_probe, true), // supports booleans and "false"/"true" strings
|
|
79
|
+
provider_endpoint_map: /* from Step 1/3 context, if use_pactjs_utils enabled */,
|
|
77
80
|
},
|
|
78
81
|
timestamp: timestamp
|
|
79
82
|
};
|
package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/steps-c/step-04a-subagent-api-failing.md
RENAMED
|
@@ -16,7 +16,8 @@ This is an **isolated subagent** running in parallel with E2E failing test gener
|
|
|
16
16
|
- Story acceptance criteria from Step 1
|
|
17
17
|
- Test strategy and scenarios from Step 3
|
|
18
18
|
- Knowledge fragments loaded: api-request, data-factories, api-testing-patterns
|
|
19
|
-
- Config: test framework, Playwright Utils enabled/disabled
|
|
19
|
+
- Config: test framework, Playwright Utils enabled/disabled, Pact.js Utils enabled/disabled (`use_pactjs_utils`), Pact MCP mode (`pact_mcp`)
|
|
20
|
+
- Provider Endpoint Map (if `use_pactjs_utils` enabled and provider source accessible)
|
|
20
21
|
|
|
21
22
|
**Your task:** Generate API tests that will FAIL because the feature is not implemented yet (TDD RED PHASE).
|
|
22
23
|
|
|
@@ -113,6 +114,72 @@ test.describe('[Story Name] API Tests (ATDD)', () => {
|
|
|
113
114
|
- ✅ Use data factories for test data (from data-factories fragment)
|
|
114
115
|
- ✅ Include priority tags [P0], [P1], [P2], [P3]
|
|
115
116
|
|
|
117
|
+
### 1.5 Provider Source Scrutiny for CDC in TDD Red Phase (If `use_pactjs_utils` Enabled)
|
|
118
|
+
|
|
119
|
+
When generating Pact consumer contract tests in the ATDD red phase, provider scrutiny applies with TDD-specific rules. Apply the **Seven-Point Scrutiny Checklist** from `contract-testing.md` (Response shape, Status codes, Field names, Enum values, Required fields, Data types, Nested structures) for both existing and new endpoints.
|
|
120
|
+
|
|
121
|
+
**If provider endpoint already exists** (extending an existing API):
|
|
122
|
+
|
|
123
|
+
- READ the provider route handler, types, and validation schemas
|
|
124
|
+
- Verify all seven scrutiny points against the provider source: Response shape, Status codes, Field names, Enum values, Required fields, Data types, Nested structures
|
|
125
|
+
- Add `// Provider endpoint:` comment and scrutiny evidence block documenting findings for each point
|
|
126
|
+
- Wrap the entire test function in `test.skip()` (so the whole test including `executeTest` is skipped), not just the callback
|
|
127
|
+
|
|
128
|
+
**If provider endpoint is new** (TDD — endpoint not implemented yet):
|
|
129
|
+
|
|
130
|
+
- Use acceptance criteria as the source of truth for expected behavior
|
|
131
|
+
- Acceptance criteria should specify all seven scrutiny points where possible (status codes, field names, types, etc.) — note any gaps as assumptions in the evidence block
|
|
132
|
+
- Add `// Provider endpoint: TODO — new endpoint, not yet implemented`
|
|
133
|
+
- Document expected behavior from acceptance criteria in scrutiny evidence block
|
|
134
|
+
- Wrap the entire test function in `test.skip()` and use realistic expectations from the story
|
|
135
|
+
|
|
136
|
+
**Graceful degradation when provider source is inaccessible:**
|
|
137
|
+
|
|
138
|
+
1. **OpenAPI/Swagger spec available**: Use the spec as the source of truth for response shapes, status codes, and field names
|
|
139
|
+
2. **Pact Broker available** (when `pact_mcp` is `"mcp"`): Use SmartBear MCP tools to fetch existing provider states and verified interactions as reference
|
|
140
|
+
3. **Neither available**: For new endpoints, use acceptance criteria; for existing endpoints, use consumer-side types. Mark with `// Provider endpoint: TODO — provider source not accessible, verify manually` and set `provider_scrutiny: "pending"` in output JSON
|
|
141
|
+
4. **Never silently guess**: Document all assumptions in the scrutiny evidence block
|
|
142
|
+
|
|
143
|
+
**Provider endpoint comments are MANDATORY** even in red-phase tests — they document the intent.
|
|
144
|
+
|
|
145
|
+
**Example: Red-phase Pact test with provider scrutiny:**
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
// Provider endpoint: TODO — new endpoint, not yet implemented
|
|
149
|
+
/*
|
|
150
|
+
* Provider Scrutiny Evidence:
|
|
151
|
+
* - Handler: NEW — not yet implemented (TDD red phase)
|
|
152
|
+
* - Expected from acceptance criteria:
|
|
153
|
+
* - Endpoint: POST /api/v2/users/register
|
|
154
|
+
* - Status: 201 for success, 400 for duplicate email, 422 for validation error
|
|
155
|
+
* - Response: { id: number, email: string, createdAt: string }
|
|
156
|
+
*/
|
|
157
|
+
test.skip('[P0] should generate consumer contract for user registration', async () => {
|
|
158
|
+
await provider
|
|
159
|
+
.given('no users exist')
|
|
160
|
+
.uponReceiving('a request to register a new user')
|
|
161
|
+
.withRequest({
|
|
162
|
+
method: 'POST',
|
|
163
|
+
path: '/api/v2/users/register',
|
|
164
|
+
headers: { 'Content-Type': 'application/json' },
|
|
165
|
+
body: { email: 'newuser@example.com', password: 'SecurePass123!' },
|
|
166
|
+
})
|
|
167
|
+
.willRespondWith({
|
|
168
|
+
status: 201,
|
|
169
|
+
headers: { 'Content-Type': 'application/json' },
|
|
170
|
+
body: like({
|
|
171
|
+
id: integer(1),
|
|
172
|
+
email: string('newuser@example.com'),
|
|
173
|
+
createdAt: string('2025-01-15T10:00:00Z'),
|
|
174
|
+
}),
|
|
175
|
+
})
|
|
176
|
+
.executeTest(async (mockServer) => {
|
|
177
|
+
const result = await registerUser({ email: 'newuser@example.com', password: 'SecurePass123!' }, { baseUrl: mockServer.url });
|
|
178
|
+
expect(result.id).toEqual(expect.any(Number));
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
116
183
|
**Why test.skip():**
|
|
117
184
|
|
|
118
185
|
- Tests are written correctly for EXPECTED behavior
|
|
@@ -163,6 +230,7 @@ Write JSON to temp file: `/tmp/tea-atdd-api-tests-{{timestamp}}.json`
|
|
|
163
230
|
"knowledge_fragments_used": ["api-request", "data-factories", "api-testing-patterns"],
|
|
164
231
|
"test_count": 3,
|
|
165
232
|
"tdd_phase": "RED",
|
|
233
|
+
"provider_scrutiny": "completed",
|
|
166
234
|
"summary": "Generated 3 FAILING API tests for user registration story"
|
|
167
235
|
}
|
|
168
236
|
```
|
|
@@ -205,6 +273,8 @@ Subagent completes when:
|
|
|
205
273
|
- JSON output valid and complete
|
|
206
274
|
- No E2E/component/unit tests included (out of scope)
|
|
207
275
|
- Tests follow knowledge fragment patterns
|
|
276
|
+
- Every Pact interaction has `// Provider endpoint:` comment (if CDC enabled)
|
|
277
|
+
- Provider scrutiny completed or TODO markers added for new endpoints (if CDC enabled)
|
|
208
278
|
|
|
209
279
|
### ❌ FAILURE:
|
|
210
280
|
|
|
@@ -213,3 +283,4 @@ Subagent completes when:
|
|
|
213
283
|
- Placeholder assertions (expect(true).toBe(true))
|
|
214
284
|
- Did not follow knowledge fragment patterns
|
|
215
285
|
- Invalid or missing JSON output
|
|
286
|
+
- Pact interactions missing provider endpoint comments (if CDC enabled)
|
package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/validation-report-20260127-095021.md
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
validationDate: 2026-01-27
|
|
3
3
|
workflowName: testarch-atdd
|
|
4
|
-
workflowPath: {project-root}/src/workflows/testarch/atdd
|
|
4
|
+
workflowPath: {project-root}/src/workflows/testarch/bmad-testarch-atdd
|
|
5
5
|
validationStatus: COMPLETE
|
|
6
6
|
completionDate: 2026-01-27 10:03:10
|
|
7
7
|
---
|
package/src/workflows/testarch/{atdd → bmad-testarch-atdd}/validation-report-20260127-102401.md
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
validationDate: 2026-01-27
|
|
3
3
|
workflowName: testarch-atdd
|
|
4
|
-
workflowPath: {project-root}/src/workflows/testarch/atdd
|
|
4
|
+
workflowPath: {project-root}/src/workflows/testarch/bmad-testarch-atdd
|
|
5
5
|
validationStatus: COMPLETE
|
|
6
6
|
completionDate: 2026-01-27 10:24:01
|
|
7
7
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Test Architect workflow: atdd
|
|
2
|
-
name: testarch-atdd
|
|
1
|
+
# Test Architect workflow: bmad-testarch-atdd
|
|
2
|
+
name: bmad-testarch-atdd
|
|
3
3
|
# prettier-ignore
|
|
4
4
|
description: 'Generate failing acceptance tests using TDD cycle. Use when the user says "lets write acceptance tests" or "I want to do ATDD"'
|
|
5
5
|
|
|
@@ -13,10 +13,10 @@ document_output_language: "{config_source}:document_output_language"
|
|
|
13
13
|
date: system-generated
|
|
14
14
|
|
|
15
15
|
# Workflow components
|
|
16
|
-
installed_path: "
|
|
17
|
-
instructions: "
|
|
18
|
-
validation: "
|
|
19
|
-
template: "
|
|
16
|
+
installed_path: "."
|
|
17
|
+
instructions: "./instructions.md"
|
|
18
|
+
validation: "./checklist.md"
|
|
19
|
+
template: "./atdd-checklist-template.md"
|
|
20
20
|
|
|
21
21
|
# Variables and inputs
|
|
22
22
|
variables:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
type: skill
|