ma-agents 3.12.2 → 3.13.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/bin/cli.js +11 -6
- package/docs/architecture.md +18 -0
- package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/bmb/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.pack +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.rev +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/bmb/package-lock.json +2 -2
- package/lib/bmad-cache/bmb/package.json +1 -1
- package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/assets/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/samples/sample-module-setup/assets/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/cleanup-legacy.py +28 -0
- package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/assets/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/cleanup-legacy.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/Dockerfile +29 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/docker_setup.py +115 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/generate_report.py +184 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/pty_runner.py +171 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_evals.py +492 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_triggers.py +366 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/utils.py +260 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/assets/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/cleanup-legacy.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-validate-module.py +74 -1
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/validate-module.py +24 -13
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/sample-customize-product-brief.toml +48 -33
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/extract-report-json.py +287 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +57 -8
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +7 -7
- package/lib/bmad-cache/bmb/skills/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/website/public/img/eval-test-types.png +0 -0
- package/lib/bmad-cache/cache-manifest.json +17 -18
- package/lib/bmad-cache/cis/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/cis/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/cis/_git_preserved/index +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.pack → pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.pack} +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.rev +0 -0
- package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/cis/_git_preserved/refs/tags/v0.2.1 +1 -0
- package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/cis/package-lock.json +2 -2
- package/lib/bmad-cache/cis/package.json +1 -1
- package/lib/bmad-cache/cis/src/module-help.csv +1 -1
- package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +4 -7
- package/lib/bmad-cache/gds/README.md +3 -1
- package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-9427a146a90c00bb542cba038874bf9671ba4dc0.pack → pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.pack} +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/gds/package.json +1 -1
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +5 -5
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +5 -5
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +0 -5
- package/lib/bmad-cache/gds/src/module-help.csv +6 -12
- package/lib/bmad-cache/gds/src/module.yaml +1 -1
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +97 -22
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/validation-report-template.html +190 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/customize.toml +99 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/scripts/render-validation-html.py +290 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/assets/validation-report-template.html +190 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/customize.toml +84 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/assets/validation-report-template.html +319 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/customize.toml +101 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +1 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +88 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +124 -2
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-investigate/customize.toml +62 -0
- package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-cache/tea/.github/workflows/docs.yaml +3 -3
- package/lib/bmad-cache/tea/.github/workflows/quality.yaml +10 -10
- package/lib/bmad-cache/tea/AGENTS.md +31 -0
- package/lib/bmad-cache/tea/CHANGELOG.md +42 -1
- package/lib/bmad-cache/tea/README.md +8 -5
- package/lib/bmad-cache/tea/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/tea/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/tea/_git_preserved/index +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-f0df537f2649464ff6c5aee241165eb9c8664227.pack → pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.pack} +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.19.0 +1 -0
- package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/tea/docs/explanation/engagement-models.md +15 -16
- package/lib/bmad-cache/tea/docs/explanation/knowledge-base-system.md +2 -0
- package/lib/bmad-cache/tea/docs/explanation/risk-based-testing.md +1 -1
- package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +88 -52
- package/lib/bmad-cache/tea/docs/explanation/testing-as-engineering.md +13 -12
- package/lib/bmad-cache/tea/docs/glossary/index.md +2 -2
- package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-for-enterprise.md +19 -18
- package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-with-existing-tests.md +1 -1
- package/lib/bmad-cache/tea/docs/how-to/workflows/run-nfr-assess.md +32 -26
- package/lib/bmad-cache/tea/docs/how-to/workflows/run-test-design.md +20 -14
- package/lib/bmad-cache/tea/docs/how-to/workflows/run-trace.md +3 -3
- package/lib/bmad-cache/tea/docs/index.md +13 -11
- package/lib/bmad-cache/tea/docs/reference/commands.md +37 -13
- package/lib/bmad-cache/tea/docs/reference/knowledge-base.md +2 -2
- package/lib/bmad-cache/tea/package-lock.json +2 -2
- package/lib/bmad-cache/tea/package.json +1 -1
- package/lib/bmad-cache/tea/src/agents/bmad-tea/customize.toml +20 -15
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/confidence-gate.md +73 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/test-quality.md +1 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +2 -1
- package/lib/bmad-cache/tea/src/module-help.csv +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/README.md +5 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/role-paths.yaml +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/tea-resources-index.yaml +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-07.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/certificate-template.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/SKILL.md +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/checklist.md +11 -11
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/instructions.md +4 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/nfr-report-template.md +5 -5
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01-load-context.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01b-resume.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-02-define-thresholds.md +14 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04-evaluate-and-score.md +7 -7
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04a-subagent-security.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04b-subagent-performance.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04c-subagent-reliability.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04d-subagent-scalability.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04e-aggregate-nfr.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-05-generate-report.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow-plan.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow.yaml +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/checklist.md +23 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +7 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-03-risk-and-testability.md +16 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-04-coverage-plan.md +20 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-05-generate-output.md +2 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-architecture-template.md +17 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-qa-template.md +15 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-template.md +16 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/checklist.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/trace-template.md +1 -1
- package/lib/bmad-cache/tea/test/test-installation-components.js +49 -0
- package/lib/bmad-cache/tea/website/astro.config.mjs +2 -2
- package/lib/bmad-cache/wds/README.md +1 -1
- package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/wds/_git_preserved/index +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.idx +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/{pack-96877c1c09123cccb1f91c1412184b11d2b492ad.pack → pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.pack} +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.rev +0 -0
- package/lib/bmad-cache/wds/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/wds/_git_preserved/refs/tags/v0.4.3 +1 -0
- package/lib/bmad-cache/wds/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/wds/eslint.config.mjs +1 -1
- package/lib/bmad-cache/wds/package.json +1 -1
- package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/customize.toml +80 -0
- package/lib/bmad-cache/wds/src/agents/wds-agent-mimir-builder/customize.toml +52 -0
- package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/customize.toml +70 -0
- package/lib/bmad-cache/wds/src/module-help.csv +19 -19
- package/lib/bmad-cache/wds/src/module.yaml +28 -0
- package/lib/bmad-cache/wds/src/scripts/README.md +155 -0
- package/lib/bmad-cache/wds/src/scripts/wds-add-object.js +202 -0
- package/lib/bmad-cache/wds/src/scripts/wds-add-spacing.js +158 -0
- package/lib/bmad-cache/wds/src/scripts/wds-init-page.js +229 -0
- package/lib/bmad-cache/wds/src/scripts/wds-init-scenario.js +120 -0
- package/lib/bmad-cache/wds/src/scripts/wds-nav.js +201 -0
- package/lib/bmad-cache/wds/src/scripts/wds-validate.js +301 -0
- package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/workflow.xml +450 -0
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/workflow-specify.xml +387 -0
- package/lib/bmad-extension/.claude-plugin/marketplace.json.template +1 -1
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -2
- package/lib/bmad.js +91 -7
- package/lib/installer.js +28 -6
- package/lib/mil498-templates/OCD.md +169 -169
- package/lib/mil498-templates/README.md +4 -4
- package/lib/mil498-templates/SDD.md +163 -163
- package/lib/mil498-templates/SDP.md +307 -307
- package/lib/mil498-templates/SRS.md +219 -219
- package/lib/mil498-templates/SSDD.md +154 -154
- package/lib/mil498-templates/SSS.md +225 -225
- package/lib/mil498-templates/STD.md +188 -188
- package/lib/templates/instruction-block-git.template.md +25 -0
- package/package.json +5 -4
- package/scripts/build-bmad-cache.js +143 -42
- package/skills/git-workflow-skill/skill.json +21 -21
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.pack +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.rev +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/bmb/_git_preserved/refs/tags/v1.7.0 +0 -1
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-convert-report.py +0 -406
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_generate_convert_report.py +0 -243
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.rev +0 -0
- package/lib/bmad-cache/cis/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/domain-complexity.csv +0 -15
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/project-types.csv +0 -11
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-ux-design/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-gdd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-prd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-gdd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/domain-complexity.csv +0 -15
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/project-types.csv +0 -11
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-96877c1c09123cccb1f91c1412184b11d2b492ad.idx +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-96877c1c09123cccb1f91c1412184b11d2b492ad.rev +0 -0
- package/lib/bmad-cache/wds/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/bmad-skill-manifest.yaml +0 -12
- package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/bmad-skill-manifest.yaml +0 -12
- package/lib/bmad-cache/wds/src/workflows/wds-0-alignment-signoff/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-2-trigger-mapping/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-6-asset-generation/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-8-product-evolution/bmad-skill-manifest.yaml +0 -1
- /package/lib/bmad-cache/gds/src/workflows/2-design/{gds-create-gdd → gds-gdd/assets}/game-types.csv +0 -0
- /package/lib/bmad-cache/gds/src/workflows/2-design/{gds-validate-gdd/data → gds-gdd/assets}/genre-complexity.csv +0 -0
|
@@ -68,13 +68,27 @@ Using `risk-governance.md` and `probability-impact.md` (if loaded):
|
|
|
68
68
|
|
|
69
69
|
---
|
|
70
70
|
|
|
71
|
-
## 3.
|
|
71
|
+
## 3. NFR Planning Assessment
|
|
72
|
+
|
|
73
|
+
Using `nfr-criteria.md` when loaded:
|
|
74
|
+
|
|
75
|
+
- Identify NFR categories in scope: security, performance, reliability, scalability, maintainability, compliance, and any project-specific categories
|
|
76
|
+
- Extract measurable thresholds from PRD, architecture, ADRs, epics, or stories
|
|
77
|
+
- Mark missing thresholds as **UNKNOWN** and convert them into clarification items or risks; do not guess values
|
|
78
|
+
- Define planned evidence sources for later validation (tests, scans, metrics, logs, monitoring, CI reports)
|
|
79
|
+
- Convert NFR gaps into the existing risk register using SEC / PERF / OPS / TECH / DATA categories
|
|
80
|
+
|
|
81
|
+
**Boundary:** This workflow plans NFR validation. It does not assess final PASS/CONCERNS/FAIL from implementation evidence. Use `nfr-assess` after implementation evidence exists.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 4. Summarize Risk Findings
|
|
72
86
|
|
|
73
87
|
Summarize the highest risks and their mitigation priorities.
|
|
74
88
|
|
|
75
89
|
---
|
|
76
90
|
|
|
77
|
-
###
|
|
91
|
+
### 5. Save Progress
|
|
78
92
|
|
|
79
93
|
**Save this step's accumulated work to `{outputFile}`.**
|
|
80
94
|
|
|
@@ -44,6 +44,7 @@ For each requirement or risk-driven scenario:
|
|
|
44
44
|
- Select **test level** (E2E / API / Component / Unit) using `test-levels-framework.md`
|
|
45
45
|
- Ensure no duplicate coverage across levels
|
|
46
46
|
- Assign priorities (P0–P3) using `test-priorities-matrix.md`
|
|
47
|
+
- Map NFR-derived risks to planned validation scenarios and evidence sources
|
|
47
48
|
|
|
48
49
|
**Priority rules:**
|
|
49
50
|
|
|
@@ -54,7 +55,20 @@ For each requirement or risk-driven scenario:
|
|
|
54
55
|
|
|
55
56
|
---
|
|
56
57
|
|
|
57
|
-
## 2.
|
|
58
|
+
## 2. NFR Coverage and Evidence Plan
|
|
59
|
+
|
|
60
|
+
For each in-scope NFR category:
|
|
61
|
+
|
|
62
|
+
- Map the NFR to one or more planned validation scenarios
|
|
63
|
+
- Select the right validation level/tool (for example: API/UI tests for auth and resilience, k6 for load/performance, CI/static analysis for maintainability, monitoring/logs for reliability)
|
|
64
|
+
- Identify the expected evidence artifact that `nfr-assess` should consume later
|
|
65
|
+
- Mark missing thresholds or missing evidence sources as blockers, risks, or assumptions
|
|
66
|
+
|
|
67
|
+
Keep this concise. Do not include full NFR evidence assessment tables or final PASS/CONCERNS/FAIL decisions in test design.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 3. Execution Strategy (Keep Simple)
|
|
58
72
|
|
|
59
73
|
Use a **PR / Nightly / Weekly** model:
|
|
60
74
|
|
|
@@ -64,7 +78,7 @@ Use a **PR / Nightly / Weekly** model:
|
|
|
64
78
|
|
|
65
79
|
---
|
|
66
80
|
|
|
67
|
-
##
|
|
81
|
+
## 4. Resource Estimates (Ranges Only)
|
|
68
82
|
|
|
69
83
|
Provide intervals (no false precision):
|
|
70
84
|
|
|
@@ -76,7 +90,7 @@ Provide intervals (no false precision):
|
|
|
76
90
|
|
|
77
91
|
---
|
|
78
92
|
|
|
79
|
-
##
|
|
93
|
+
## 5. Quality Gates
|
|
80
94
|
|
|
81
95
|
Define thresholds:
|
|
82
96
|
|
|
@@ -84,10 +98,12 @@ Define thresholds:
|
|
|
84
98
|
- P1 pass rate ≥ 95%
|
|
85
99
|
- High-risk mitigations complete before release
|
|
86
100
|
- Coverage target ≥ 80% (adjust if justified)
|
|
101
|
+
- NFR validation evidence identified for each in-scope NFR category
|
|
102
|
+
- Full NFR PASS/CONCERNS/FAIL status deferred to `nfr-assess` when evidence exists
|
|
87
103
|
|
|
88
104
|
---
|
|
89
105
|
|
|
90
|
-
###
|
|
106
|
+
### 6. Save Progress
|
|
91
107
|
|
|
92
108
|
**Save this step's accumulated work to `{outputFile}`.**
|
|
93
109
|
|
|
@@ -130,7 +130,9 @@ Epic-level mode remains single-worker by default (one output artifact).
|
|
|
130
130
|
Ensure the outputs include:
|
|
131
131
|
|
|
132
132
|
- Risk assessment matrix
|
|
133
|
+
- NFR planning summary (thresholds, missing thresholds, planned evidence, and NFR-derived risks) — when NFRs are in scope
|
|
133
134
|
- Coverage matrix and priorities
|
|
135
|
+
- NFR coverage and planned evidence mapping — when NFRs are in scope
|
|
134
136
|
- Execution strategy
|
|
135
137
|
- Resource estimates (ranges)
|
|
136
138
|
- Quality gate criteria
|
|
@@ -121,6 +121,23 @@ inputDocuments: []
|
|
|
121
121
|
|
|
122
122
|
---
|
|
123
123
|
|
|
124
|
+
### NFR Testability Requirements
|
|
125
|
+
|
|
126
|
+
**Purpose:** Capture what architecture must provide so NFR validation can be automated later. This is planning guidance, not final evidence assessment.
|
|
127
|
+
|
|
128
|
+
| NFR Category | Threshold / Requirement | Current Design Support | Gap / Decision Needed | Planned Evidence |
|
|
129
|
+
| --------------- | ------------------------------------------------- | --------------------------- | ------------------------------ | --------------------------------------- |
|
|
130
|
+
| Security | {Auth/authz/data protection requirement} | {Supported/partial/unknown} | {Architecture gap or decision} | {Security tests, scan, audit log} |
|
|
131
|
+
| Performance | {Latency/throughput/resource requirement} | {Supported/partial/unknown} | {Architecture gap or decision} | {k6/APM/load report} |
|
|
132
|
+
| Reliability | {Availability/error-rate/recovery requirement} | {Supported/partial/unknown} | {Architecture gap or decision} | {Burn-in, monitoring, failover report} |
|
|
133
|
+
| Maintainability | {Coverage/code quality/observability requirement} | {Supported/partial/unknown} | {Architecture gap or decision} | {Coverage, static analysis, docs audit} |
|
|
134
|
+
|
|
135
|
+
**Unknown thresholds:** {List any missing NFR thresholds. Unknown thresholds should become risks or clarification items, not guessed values.}
|
|
136
|
+
|
|
137
|
+
**Assessment boundary:** Final PASS/CONCERNS/FAIL status belongs in `nfr-assess` after implementation evidence exists.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
124
141
|
### Testability Concerns and Architectural Gaps
|
|
125
142
|
|
|
126
143
|
**🚨 ACTIONABLE CONCERNS - Architecture Team Must Address**
|
|
@@ -123,6 +123,21 @@ test('example test @p0', async ({ apiRequest }) => {
|
|
|
123
123
|
|
|
124
124
|
---
|
|
125
125
|
|
|
126
|
+
## NFR Test Coverage Plan
|
|
127
|
+
|
|
128
|
+
**Purpose:** Map NFR requirements to planned validation work. This section defines what evidence QA should create or collect; it does not assign final PASS/CONCERNS/FAIL status.
|
|
129
|
+
|
|
130
|
+
| NFR Category | Requirement / Threshold | Planned Validation | Tool / Level | Evidence Artifact | Priority |
|
|
131
|
+
| --------------- | ----------------------- | ------------------------------------------ | -------------------- | ----------------------------- | -------- |
|
|
132
|
+
| Security | {Requirement} | {Auth/authz/security validation} | {API/E2E/SAST/DAST} | {Report or test result path} | {P0-P3} |
|
|
133
|
+
| Performance | {Requirement} | {Load/stress/baseline validation} | {k6/APM/Lighthouse} | {Report or dashboard} | {P0-P3} |
|
|
134
|
+
| Reliability | {Requirement} | {Error/retry/failover validation} | {API/E2E/monitoring} | {Burn-in/log/metric evidence} | {P0-P3} |
|
|
135
|
+
| Maintainability | {Requirement} | {Coverage/static analysis/docs validation} | {CI/static analysis} | {Coverage or quality report} | {P0-P3} |
|
|
136
|
+
|
|
137
|
+
**Missing thresholds or evidence sources:** {List NFRs that need stakeholder clarification or tooling before `nfr-assess`.}
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
126
141
|
## Entry Criteria
|
|
127
142
|
|
|
128
143
|
**QA testing cannot begin until ALL of the following are met:**
|
package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-template.md
CHANGED
|
@@ -76,6 +76,21 @@ lastSaved: ''
|
|
|
76
76
|
|
|
77
77
|
---
|
|
78
78
|
|
|
79
|
+
## NFR Planning
|
|
80
|
+
|
|
81
|
+
**Purpose:** Capture epic-specific NFR thresholds, planned validation, and evidence expected for later `nfr-assess`. This is not a final evidence audit.
|
|
82
|
+
|
|
83
|
+
| NFR Category | Requirement / Threshold | Risk Link | Planned Validation | Evidence Needed |
|
|
84
|
+
| --------------- | ----------------------- | --------- | ------------------------------------------ | -------------------------------- |
|
|
85
|
+
| Security | {Requirement} | {R-ID} | {API/E2E/SAST/DAST validation} | {Test report, scan, audit log} |
|
|
86
|
+
| Performance | {Requirement} | {R-ID} | {Load/stress/baseline validation} | {k6/APM/Lighthouse report} |
|
|
87
|
+
| Reliability | {Requirement} | {R-ID} | {Error/retry/failover validation} | {Burn-in, logs, monitoring data} |
|
|
88
|
+
| Maintainability | {Requirement} | {R-ID} | {Coverage/static analysis/docs validation} | {Coverage or quality report} |
|
|
89
|
+
|
|
90
|
+
**Unknown thresholds:** {List missing NFR thresholds or mark N/A. Do not invent values.}
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
79
94
|
## Entry Criteria
|
|
80
95
|
|
|
81
96
|
- [ ] Requirements and assumptions agreed upon by QA, Dev, PM
|
|
@@ -247,6 +262,7 @@ lastSaved: ''
|
|
|
247
262
|
- [ ] No high-risk (≥6) items unmitigated
|
|
248
263
|
- [ ] Security tests (SEC category) pass 100%
|
|
249
264
|
- [ ] Performance targets met (PERF category)
|
|
265
|
+
- [ ] Planned NFR evidence exists or `nfr-assess` has documented CONCERNS/waivers
|
|
250
266
|
|
|
251
267
|
---
|
|
252
268
|
|
package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/tea-index.csv
CHANGED
|
@@ -39,7 +39,7 @@ pactjs-utils-request-filter,Pact.js Utils Request Filter,"createRequestFilter, n
|
|
|
39
39
|
pact-mcp,Pact MCP Server,"SmartBear MCP for PactFlow: generate tests, review, can-i-deploy, provider states","pact,mcp,pactflow,contract-testing,broker",specialized,knowledge/pact-mcp.md
|
|
40
40
|
pact-consumer-framework-setup,Pact Consumer CDC Framework Setup,"Directory structure, vitest config with fileParallelism:false + pool:forks + singleFork:true (FFI safety), determinism gate (check-pact-determinism.sh), jq-normalized publishing, 1:1 local/CI parity, PactV4 patterns","pactjs-utils,consumer,contract-testing,pact,ci,framework,setup,vitest,shell-scripts,determinism,jq,pactv4,ffi",specialized,knowledge/pact-consumer-framework-setup.md
|
|
41
41
|
pact-broker-webhooks,Pact Broker Webhooks,"PactFlow → GitHub repository_dispatch auth via dedicated machine user + classic PAT (repo scope, no expiration) + PactFlow secret; staleness monitoring and PAT rotation runbook","pact,pactflow,broker,webhooks,github,auth,pat,ci,operations,security",specialized,knowledge/pact-broker-webhooks.md
|
|
42
|
-
adr-quality-readiness-checklist,ADR Quality Readiness Checklist,"8-category 29-criteria framework for ADR testability and NFR
|
|
42
|
+
adr-quality-readiness-checklist,ADR Quality Readiness Checklist,"8-category 29-criteria framework for ADR testability and NFR evidence audit","nfr,testability,adr,quality,assessment,checklist",extended,knowledge/adr-quality-readiness-checklist.md
|
|
43
43
|
playwright-cli,Playwright CLI,"Token-efficient CLI for AI coding agents: element refs, sessions, snapshots, trace analysis, debug=cli autonomous investigation","cli,browser,agent,automation,snapshot,trace,debug",core,knowledge/playwright-cli.md
|
|
44
44
|
pact-consumer-di,Pact Consumer DI Pattern,"Dependency injection pattern for Pact consumer tests — call actual source code instead of raw fetch by injecting mock server URL via optional baseUrl in context type","contract-testing,pact,consumer,dependency-injection,api,backend,architecture",extended,knowledge/pact-consumer-di.md
|
|
45
45
|
webhook-fundamentals,Webhook Testing Fundamentals,"Why webhook delivery is hard: async, parallel pollution, opaque timeouts, cleanup drift. playwright-utils approach with polling, typed matchers, rich errors, startedAt isolation","webhook,async,playwright-utils,event-driven,eventually-consistent",core,knowledge/webhook-testing-fundamentals.md
|
|
@@ -252,7 +252,7 @@ Knowledge fragments referenced:
|
|
|
252
252
|
- [ ] Story/epic/release file identified and read
|
|
253
253
|
- [ ] Test design document discovered or explicitly provided (if available)
|
|
254
254
|
- [ ] Traceability matrix discovered or explicitly provided (available from Phase 1)
|
|
255
|
-
- [ ] NFR
|
|
255
|
+
- [ ] NFR evidence audit discovered or explicitly provided (if available)
|
|
256
256
|
- [ ] Code coverage report discovered or explicitly provided (if available)
|
|
257
257
|
- [ ] Burn-in results discovered or explicitly provided (if available)
|
|
258
258
|
|
package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/tea-index.csv
CHANGED
|
@@ -39,7 +39,7 @@ pactjs-utils-request-filter,Pact.js Utils Request Filter,"createRequestFilter, n
|
|
|
39
39
|
pact-mcp,Pact MCP Server,"SmartBear MCP for PactFlow: generate tests, review, can-i-deploy, provider states","pact,mcp,pactflow,contract-testing,broker",specialized,knowledge/pact-mcp.md
|
|
40
40
|
pact-consumer-framework-setup,Pact Consumer CDC Framework Setup,"Directory structure, vitest config with fileParallelism:false + pool:forks + singleFork:true (FFI safety), determinism gate (check-pact-determinism.sh), jq-normalized publishing, 1:1 local/CI parity, PactV4 patterns","pactjs-utils,consumer,contract-testing,pact,ci,framework,setup,vitest,shell-scripts,determinism,jq,pactv4,ffi",specialized,knowledge/pact-consumer-framework-setup.md
|
|
41
41
|
pact-broker-webhooks,Pact Broker Webhooks,"PactFlow → GitHub repository_dispatch auth via dedicated machine user + classic PAT (repo scope, no expiration) + PactFlow secret; staleness monitoring and PAT rotation runbook","pact,pactflow,broker,webhooks,github,auth,pat,ci,operations,security",specialized,knowledge/pact-broker-webhooks.md
|
|
42
|
-
adr-quality-readiness-checklist,ADR Quality Readiness Checklist,"8-category 29-criteria framework for ADR testability and NFR
|
|
42
|
+
adr-quality-readiness-checklist,ADR Quality Readiness Checklist,"8-category 29-criteria framework for ADR testability and NFR evidence audit","nfr,testability,adr,quality,assessment,checklist",extended,knowledge/adr-quality-readiness-checklist.md
|
|
43
43
|
playwright-cli,Playwright CLI,"Token-efficient CLI for AI coding agents: element refs, sessions, snapshots, trace analysis, debug=cli autonomous investigation","cli,browser,agent,automation,snapshot,trace,debug",core,knowledge/playwright-cli.md
|
|
44
44
|
pact-consumer-di,Pact Consumer DI Pattern,"Dependency injection pattern for Pact consumer tests — call actual source code instead of raw fetch by injecting mock server URL via optional baseUrl in context type","contract-testing,pact,consumer,dependency-injection,api,backend,architecture",extended,knowledge/pact-consumer-di.md
|
|
45
45
|
webhook-fundamentals,Webhook Testing Fundamentals,"Why webhook delivery is hard: async, parallel pollution, opaque timeouts, cleanup drift. playwright-utils approach with polling, typed matchers, rich errors, startedAt isolation","webhook,async,playwright-utils,event-driven,eventually-consistent",core,knowledge/webhook-testing-fundamentals.md
|
|
@@ -678,7 +678,7 @@ traceability_and_gate:
|
|
|
678
678
|
- **Test Design:** {TEST_DESIGN_PATH} (if available)
|
|
679
679
|
- **Tech Spec:** {TECH_SPEC_PATH} (if available)
|
|
680
680
|
- **Test Results:** {TEST_RESULTS_PATH}
|
|
681
|
-
- **NFR
|
|
681
|
+
- **NFR Evidence Audit:** {NFR_FILE_PATH} (if available)
|
|
682
682
|
- **Test Files:** {TEST_DIR_PATH}
|
|
683
683
|
|
|
684
684
|
---
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
const path = require('node:path');
|
|
14
14
|
const fs = require('node:fs/promises');
|
|
15
|
+
const { parse } = require('csv-parse/sync');
|
|
15
16
|
const yaml = require('js-yaml');
|
|
16
17
|
|
|
17
18
|
async function pathExists(filePath) {
|
|
@@ -23,6 +24,11 @@ async function pathExists(filePath) {
|
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
function extractFrontmatter(content) {
|
|
28
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);
|
|
29
|
+
return match ? match[1] : '';
|
|
30
|
+
}
|
|
31
|
+
|
|
26
32
|
// ANSI colors
|
|
27
33
|
const colors = {
|
|
28
34
|
reset: '\u001B[0m',
|
|
@@ -253,10 +259,12 @@ async function runTests() {
|
|
|
253
259
|
];
|
|
254
260
|
|
|
255
261
|
for (const dirName of workflowDirs) {
|
|
262
|
+
const workflowDir = path.join(projectRoot, `src/workflows/testarch/${dirName}`);
|
|
256
263
|
const skillMdPath = path.join(projectRoot, `src/workflows/testarch/${dirName}/SKILL.md`);
|
|
257
264
|
const customizeTomlPath = path.join(projectRoot, `src/workflows/testarch/${dirName}/customize.toml`);
|
|
258
265
|
const workflowYamlPath = path.join(projectRoot, `src/workflows/testarch/${dirName}/workflow.yaml`);
|
|
259
266
|
const instructionsMdPath = path.join(projectRoot, `src/workflows/testarch/${dirName}/instructions.md`);
|
|
267
|
+
let workflowKnowledgeIndexValidated = false;
|
|
260
268
|
|
|
261
269
|
if (await pathExists(skillMdPath)) {
|
|
262
270
|
try {
|
|
@@ -344,6 +352,7 @@ async function runTests() {
|
|
|
344
352
|
const stepPath = path.join(stepDirPath, fileName);
|
|
345
353
|
try {
|
|
346
354
|
const stepContent = await fs.readFile(stepPath, 'utf8');
|
|
355
|
+
const frontmatter = extractFrontmatter(stepContent);
|
|
347
356
|
const stepLabel = `${dirName}/${stepDir}/${fileName}`;
|
|
348
357
|
|
|
349
358
|
assert(!stepContent.includes("nextStepFile: './"), `${stepLabel} has no cwd-sensitive nextStepFile`);
|
|
@@ -371,6 +380,46 @@ async function runTests() {
|
|
|
371
380
|
if (stepContent.includes('workflowPath:')) {
|
|
372
381
|
assert(stepContent.includes("workflowPath: '{skill-root}'"), `${stepLabel} anchors workflowPath to {skill-root}`);
|
|
373
382
|
}
|
|
383
|
+
|
|
384
|
+
if (frontmatter.includes('knowledgeIndex:')) {
|
|
385
|
+
const knowledgeIndexMatch = frontmatter.match(/^knowledgeIndex:\s*['"]([^'"]+)['"]/m);
|
|
386
|
+
assert(Boolean(knowledgeIndexMatch), `${stepLabel} declares a parseable knowledgeIndex`);
|
|
387
|
+
|
|
388
|
+
const knowledgeIndexReference = knowledgeIndexMatch ? knowledgeIndexMatch[1] : '';
|
|
389
|
+
const knowledgeIndexPath = path.resolve(workflowDir, knowledgeIndexReference);
|
|
390
|
+
const expectedKnowledgeIndexPath = path.join(workflowDir, 'resources', 'tea-index.csv');
|
|
391
|
+
|
|
392
|
+
assert(knowledgeIndexPath === expectedKnowledgeIndexPath, `${stepLabel} uses the workflow-local knowledge index`);
|
|
393
|
+
assert(await pathExists(knowledgeIndexPath), `${stepLabel} knowledgeIndex target exists`);
|
|
394
|
+
|
|
395
|
+
if (!workflowKnowledgeIndexValidated && (await pathExists(knowledgeIndexPath))) {
|
|
396
|
+
const records = parse(await fs.readFile(knowledgeIndexPath, 'utf8'), { columns: true, skip_empty_lines: true });
|
|
397
|
+
const workflowKnowledgeDir = path.join(path.dirname(knowledgeIndexPath), 'knowledge');
|
|
398
|
+
const workflowKnowledgeFiles = (await fs.readdir(workflowKnowledgeDir)).filter((name) => name.endsWith('.md'));
|
|
399
|
+
const missingFragments = [];
|
|
400
|
+
|
|
401
|
+
for (const record of records) {
|
|
402
|
+
if (!record.fragment_file) {
|
|
403
|
+
missingFragments.push(`${record.id || '<missing-id>'}: missing fragment_file`);
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
const fragmentPath = path.resolve(path.dirname(knowledgeIndexPath), record.fragment_file);
|
|
408
|
+
if (!(await pathExists(fragmentPath))) {
|
|
409
|
+
missingFragments.push(record.fragment_file);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
assert(
|
|
414
|
+
records.length === workflowKnowledgeFiles.length,
|
|
415
|
+
`${dirName}/resources/tea-index.csv line count matches workflow-local fragments`,
|
|
416
|
+
`Found ${records.length} records for ${workflowKnowledgeFiles.length} fragments`,
|
|
417
|
+
);
|
|
418
|
+
assert(missingFragments.length === 0, `${dirName}/resources/tea-index.csv fragment files exist`, missingFragments.join(', '));
|
|
419
|
+
|
|
420
|
+
workflowKnowledgeIndexValidated = true;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
374
423
|
} catch (error) {
|
|
375
424
|
assert(false, `${dirName}/${stepDir}/${fileName} validates`, error.message);
|
|
376
425
|
}
|
|
@@ -100,14 +100,14 @@ export default defineConfig({
|
|
|
100
100
|
label: 'Workflows',
|
|
101
101
|
items: [
|
|
102
102
|
{ label: 'Teach Me Testing', slug: 'how-to/workflows/teach-me-testing' },
|
|
103
|
+
{ label: 'Test Design', slug: 'how-to/workflows/run-test-design' },
|
|
103
104
|
{ label: 'Set Up Test Framework', slug: 'how-to/workflows/setup-test-framework' },
|
|
104
105
|
{ label: 'Set Up CI Pipeline', slug: 'how-to/workflows/setup-ci' },
|
|
105
|
-
{ label: 'Test Design', slug: 'how-to/workflows/run-test-design' },
|
|
106
106
|
{ label: 'ATDD', slug: 'how-to/workflows/run-atdd' },
|
|
107
107
|
{ label: 'Automate', slug: 'how-to/workflows/run-automate' },
|
|
108
108
|
{ label: 'Test Review', slug: 'how-to/workflows/run-test-review' },
|
|
109
|
+
{ label: 'NFR Evidence Audit', slug: 'how-to/workflows/run-nfr-assess' },
|
|
109
110
|
{ label: 'Trace', slug: 'how-to/workflows/run-trace' },
|
|
110
|
-
{ label: 'NFR Assessment', slug: 'how-to/workflows/run-nfr-assess' },
|
|
111
111
|
],
|
|
112
112
|
},
|
|
113
113
|
{
|
|
@@ -128,7 +128,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
|
128
128
|
|
|
129
129
|
## Support BMad
|
|
130
130
|
|
|
131
|
-
BMad is free for everyone and always will be. Star this repo, [buy me a coffee](https://buymeacoffee.com/bmad), or email contact@bmadcode.com for corporate sponsorship.
|
|
131
|
+
BMad is free for everyone and always will be. Star this repo, [buy me a coffee](https://buymeacoffee.com/bmad), or email <contact@bmadcode.com> for corporate sponsorship.
|
|
132
132
|
|
|
133
133
|
## License
|
|
134
134
|
|
|
@@ -15,10 +15,60 @@
|
|
|
15
15
|
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
|
16
16
|
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
|
17
17
|
|
|
18
|
-
# This example catches duplicate Signed-off-by lines
|
|
18
|
+
# This example catches duplicate Signed-off-by lines and messages that
|
|
19
|
+
# would confuse 'git am'.
|
|
20
|
+
|
|
21
|
+
ret=0
|
|
19
22
|
|
|
20
23
|
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
|
21
24
|
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
|
22
25
|
echo >&2 Duplicate Signed-off-by lines.
|
|
23
|
-
|
|
26
|
+
ret=1
|
|
24
27
|
}
|
|
28
|
+
|
|
29
|
+
comment_re="$(
|
|
30
|
+
{
|
|
31
|
+
git config --get-regexp "^core\.comment(char|string)\$" ||
|
|
32
|
+
echo '#'
|
|
33
|
+
} | sed -n -e '
|
|
34
|
+
${
|
|
35
|
+
s/^[^ ]* //
|
|
36
|
+
s|[][*./\]|\\&|g
|
|
37
|
+
s/^auto$/[#;@!$%^&|:]/
|
|
38
|
+
p
|
|
39
|
+
}'
|
|
40
|
+
)"
|
|
41
|
+
scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$"
|
|
42
|
+
comment_line="^${comment_re}.*"
|
|
43
|
+
blank_line='^[ ]*$'
|
|
44
|
+
# Disallow lines starting with "diff -" or "Index: " in the body of the
|
|
45
|
+
# message. Stop looking if we see a scissors line.
|
|
46
|
+
line="$(sed -n -e "
|
|
47
|
+
# Skip comments and blank lines at the start of the file.
|
|
48
|
+
/${scissors_line}/q
|
|
49
|
+
/${comment_line}/d
|
|
50
|
+
/${blank_line}/d
|
|
51
|
+
# The first paragraph will become the subject header so
|
|
52
|
+
# does not need to be checked.
|
|
53
|
+
: subject
|
|
54
|
+
n
|
|
55
|
+
/${scissors_line}/q
|
|
56
|
+
/${blank_line}/!b subject
|
|
57
|
+
# Check the body of the message for problematic
|
|
58
|
+
# prefixes.
|
|
59
|
+
: body
|
|
60
|
+
n
|
|
61
|
+
/${scissors_line}/q
|
|
62
|
+
/${comment_line}/b body
|
|
63
|
+
/^diff -/{p;q;}
|
|
64
|
+
/^Index: /{p;q;}
|
|
65
|
+
b body
|
|
66
|
+
" "$1")"
|
|
67
|
+
if test -n "$line"
|
|
68
|
+
then
|
|
69
|
+
echo >&2 "Message contains a diff that will confuse 'git am'."
|
|
70
|
+
echo >&2 "To fix this indent the diff."
|
|
71
|
+
ret=1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
exit $ret
|
|
@@ -29,8 +29,6 @@ if ($version ne 2) {
|
|
|
29
29
|
|
|
30
30
|
my $git_work_tree = get_working_dir();
|
|
31
31
|
|
|
32
|
-
my $retry = 1;
|
|
33
|
-
|
|
34
32
|
my $json_pkg;
|
|
35
33
|
eval {
|
|
36
34
|
require JSON::XS;
|
|
@@ -123,8 +121,7 @@ sub watchman_query {
|
|
|
123
121
|
sub is_work_tree_watched {
|
|
124
122
|
my ($output) = @_;
|
|
125
123
|
my $error = $output->{error};
|
|
126
|
-
if ($
|
|
127
|
-
$retry--;
|
|
124
|
+
if ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) {
|
|
128
125
|
my $response = qx/watchman watch "$git_work_tree"/;
|
|
129
126
|
die "Failed to make watchman watch '$git_work_tree'.\n" .
|
|
130
127
|
"Falling back to scanning...\n" if $? != 0;
|
|
@@ -142,15 +139,12 @@ sub is_work_tree_watched {
|
|
|
142
139
|
# Watchman query just to get it over with now so we won't pay
|
|
143
140
|
# the cost in git to look up each individual file.
|
|
144
141
|
my $o = watchman_clock();
|
|
145
|
-
$error = $
|
|
142
|
+
$error = $o->{error};
|
|
146
143
|
|
|
147
144
|
die "Watchman: $error.\n" .
|
|
148
145
|
"Falling back to scanning...\n" if $error;
|
|
149
146
|
|
|
150
147
|
output_result($o->{clock}, ("/"));
|
|
151
|
-
$last_update_token = $o->{clock};
|
|
152
|
-
|
|
153
|
-
eval { launch_watchman() };
|
|
154
148
|
return 0;
|
|
155
149
|
}
|
|
156
150
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# pack-refs with: peeled fully-peeled sorted
|
|
2
|
-
|
|
2
|
+
cc16f09fcfab26d35635af1491f36a38a8431c8d refs/remotes/origin/main
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
cc16f09fcfab26d35635af1491f36a38a8431c8d
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
8ad7e713507b4acebaac632afddec6bbb909a74e
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
cc16f09fcfab26d35635af1491f36a38a8431c8d
|
|
@@ -83,7 +83,7 @@ export default [
|
|
|
83
83
|
|
|
84
84
|
// CLI scripts under tools/** and test/**
|
|
85
85
|
{
|
|
86
|
-
files: ['tools/**/*.js', 'tools/**/*.mjs', 'test/**/*.js'],
|
|
86
|
+
files: ['tools/**/*.js', 'tools/**/*.mjs', 'test/**/*.js', 'src/scripts/**/*.js'],
|
|
87
87
|
rules: {
|
|
88
88
|
// Allow CommonJS patterns for Node CLI scripts
|
|
89
89
|
'unicorn/prefer-module': 'off',
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# DO NOT EDIT -- overwritten on every update.
|
|
2
|
+
#
|
|
3
|
+
# Freya, the WDS Designer, is the hardcoded identity of this agent.
|
|
4
|
+
# Customize the persona and menu below to shape behavior without
|
|
5
|
+
# changing who the agent is.
|
|
6
|
+
|
|
7
|
+
[agent]
|
|
8
|
+
# non-configurable skill frontmatter, create a custom agent if you need a new name/title
|
|
9
|
+
name = "Freya"
|
|
10
|
+
title = "WDS Designer"
|
|
11
|
+
|
|
12
|
+
# --- Configurable below. Overrides merge per BMad structural rules: ---
|
|
13
|
+
# scalars: override wins • arrays (persistent_facts, principles, activation_steps_*): append
|
|
14
|
+
# arrays-of-tables with `code`/`id`: replace matching items, append new ones.
|
|
15
|
+
|
|
16
|
+
icon = "🎨"
|
|
17
|
+
|
|
18
|
+
activation_steps_prepend = []
|
|
19
|
+
activation_steps_append = []
|
|
20
|
+
|
|
21
|
+
persistent_facts = [
|
|
22
|
+
"file:{project-root}/**/project-context.md",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
role = "Strategic UX Designer + Design Thinking Partner"
|
|
26
|
+
identity = "Freya, Norse goddess of beauty, magic, and strategy. Thinks WITH you, not FOR you. Starts with WHY before HOW — design without strategy is decoration. Creates artifacts developers can trust: detailed specs, prototypes, and design systems. Core beliefs: Strategy then Design then Specification. Psychology drives design. Content is strategy — every word triggers user psychology."
|
|
27
|
+
communication_style = "Creative collaborator who brings strategic depth. Asks 'WHY?' before 'WHAT?' — connecting design choices to business goals and user psychology. Explores one challenge deeply rather than skimming many. Keeps responses focused and actionable — leads with decisions, follows with rationale. Suggests workshops when strategic thinking is needed."
|
|
28
|
+
|
|
29
|
+
principles = [
|
|
30
|
+
"Domain: Phases 3 (UX Scenarios), 4 (UX Design), 5 (Agentic Development), 6 (Asset Generation), 7 (Design System - optional), 8 (Product Evolution). Hand over other domains to specialist agents.",
|
|
31
|
+
"Replaces BMM Sally (UX Designer) when WDS is installed.",
|
|
32
|
+
"Load strategic context BEFORE designing — always connect to Trigger Map.",
|
|
33
|
+
"Specifications must be logical and complete — if you can't explain it, it's not ready.",
|
|
34
|
+
"Prototypes validate before production — show, don't tell.",
|
|
35
|
+
"Design systems grow organically from actual usage, not upfront planning.",
|
|
36
|
+
"AI-assisted design via Stitch when spec + sketch ready; Figma integration for visual refinement.",
|
|
37
|
+
"Load micro-guides when entering workflows: strategic-design.md, specification-quality.md, agentic-development.md, content-creation.md, design-system.md",
|
|
38
|
+
"HARM: Producing output that looks complete but doesn't follow the template. The user must then correct what should have been right — wasting time, money, and trust. Plausible-looking wrong output is worse than no output. Custom formats break the pipeline for every phase downstream.",
|
|
39
|
+
"HELP: Reading the actual template into context before writing. Discussing decisions with the user. Delivering artifacts that the next phase can consume without auditing. The user's time goes to decisions, not corrections.",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
[[agent.menu]]
|
|
43
|
+
code = "SC"
|
|
44
|
+
description = "Scenarios: Outline user flows and journeys (Phase 3)"
|
|
45
|
+
skill = "bmad-wds-outline-scenarios"
|
|
46
|
+
|
|
47
|
+
[[agent.menu]]
|
|
48
|
+
code = "UX"
|
|
49
|
+
description = "UX Design: Create pages and storyboards (Phase 4)"
|
|
50
|
+
skill = "bmad-wds-conceptual-sketching"
|
|
51
|
+
|
|
52
|
+
[[agent.menu]]
|
|
53
|
+
code = "SP"
|
|
54
|
+
description = "Specifications: Write content, interaction and functionality specs (Phase 4)"
|
|
55
|
+
skill = "bmad-wds-conceptual-specs"
|
|
56
|
+
|
|
57
|
+
[[agent.menu]]
|
|
58
|
+
code = "SA"
|
|
59
|
+
description = "Audit: Check spec completeness and quality (Phase 4)"
|
|
60
|
+
skill = "bmad-wds-spec-audit"
|
|
61
|
+
|
|
62
|
+
[[agent.menu]]
|
|
63
|
+
code = "GA"
|
|
64
|
+
description = "Generate Assets: Nano Banana, Stitch and other services (Phase 6)"
|
|
65
|
+
skill = "bmad-wds-visual-design"
|
|
66
|
+
|
|
67
|
+
[[agent.menu]]
|
|
68
|
+
code = "DS"
|
|
69
|
+
description = "Design System: Build component library with design tokens (Phase 7)"
|
|
70
|
+
skill = "bmad-wds-design-system"
|
|
71
|
+
|
|
72
|
+
[[agent.menu]]
|
|
73
|
+
code = "DD"
|
|
74
|
+
description = "Design Delivery: Package flows for development handoff (Phase 5)"
|
|
75
|
+
skill = "bmad-wds-design-delivery"
|
|
76
|
+
|
|
77
|
+
[[agent.menu]]
|
|
78
|
+
code = "PE"
|
|
79
|
+
description = "Product Evolution: Continuous improvement for living products (Phase 8)"
|
|
80
|
+
skill = "bmad-wds-product-evolution"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# DO NOT EDIT -- overwritten on every update.
|
|
2
|
+
#
|
|
3
|
+
# Mimir, the WDS Builder, is the hardcoded identity of this agent.
|
|
4
|
+
# Customize the persona and menu below to shape behavior without
|
|
5
|
+
# changing who the agent is.
|
|
6
|
+
|
|
7
|
+
[agent]
|
|
8
|
+
# non-configurable skill frontmatter, create a custom agent if you need a new name/title
|
|
9
|
+
name = "Mimir"
|
|
10
|
+
title = "WDS Builder"
|
|
11
|
+
|
|
12
|
+
# --- Configurable below. Overrides merge per BMad structural rules: ---
|
|
13
|
+
# scalars: override wins • arrays (persistent_facts, principles, activation_steps_*): append
|
|
14
|
+
# arrays-of-tables with `code`/`id`: replace matching items, append new ones.
|
|
15
|
+
|
|
16
|
+
icon = "🔨"
|
|
17
|
+
|
|
18
|
+
activation_steps_prepend = []
|
|
19
|
+
activation_steps_append = []
|
|
20
|
+
|
|
21
|
+
persistent_facts = [
|
|
22
|
+
"file:{project-root}/**/project-context.md",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
role = "Implementation Agent + Technical Build Partner"
|
|
26
|
+
identity = "Mimir, god of wisdom and deep knowledge — the well beneath the world tree. Methodical, precise, empirical. Not creative — rigorous. Creativity happened upstream. Reads the spec completely before writing a line of code. Plans before acting. Verifies before moving on. Does not embellish."
|
|
27
|
+
communication_style = "Technical and precise. Confirms understanding of requirements before starting. Reports progress in discrete verified steps. Flags ambiguity immediately rather than guessing. Asks one clarifying question at a time."
|
|
28
|
+
|
|
29
|
+
principles = [
|
|
30
|
+
"Domain: Phase 5 (Agentic Development). Receives Work Orders from Freya, produces working code.",
|
|
31
|
+
"Read the full spec before writing a single line of code — no shortcuts.",
|
|
32
|
+
"One requirement at a time. Implement, commit, verify. Never batch unverified changes.",
|
|
33
|
+
"The PRD is the contract. If reality diverges from PRD, stop and surface it.",
|
|
34
|
+
"Browser test every UI change — a sub-agent confirms the requirement passes visually.",
|
|
35
|
+
"HARM: Writing code without reading the spec. Batching changes without verification. Assuming what the user meant.",
|
|
36
|
+
"HELP: Starting from the Work Order, writing the PRD, implementing one requirement at a time with verification.",
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
[[agent.menu]]
|
|
40
|
+
code = "TA"
|
|
41
|
+
description = "Tech Audit: Read codebase and produce living architecture document (first-time entry)"
|
|
42
|
+
skill = "bmad-wds-tech-audit"
|
|
43
|
+
|
|
44
|
+
[[agent.menu]]
|
|
45
|
+
code = "PR"
|
|
46
|
+
description = "PRD: Write Product Requirements Document from a Freya Work Order"
|
|
47
|
+
skill = "bmad-wds-prd"
|
|
48
|
+
|
|
49
|
+
[[agent.menu]]
|
|
50
|
+
code = "BU"
|
|
51
|
+
description = "Build: Implement requirements from PRD — one verified task at a time"
|
|
52
|
+
skill = "bmad-wds-build"
|