ma-agents 3.6.2 → 3.9.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/CONTRIBUTING.md +139 -0
- package/README.md +26 -11
- package/bin/cli.js +138 -37
- package/docs/deployment/vllm-nemotron.md +4 -2
- package/lib/.bmad-extension-plugin.build-1264-1777348888201/.claude-plugin/marketplace.json +109 -0
- package/lib/{bmad-extension → .bmad-extension-plugin.build-1264-1777348888201/skills}/module-help.csv +5 -5
- package/lib/.bmad-extension-plugin.build-1264-1777348888201/skills/module.yaml +20 -0
- package/lib/.bmad-extension-plugin.build-24696-1777348768444/.claude-plugin/marketplace.json +109 -0
- package/lib/.bmad-extension-plugin.build-24696-1777348768444/skills/module-help.csv +62 -0
- package/lib/.bmad-extension-plugin.build-24696-1777348768444/skills/module.yaml +20 -0
- package/lib/.bmad-extension-plugin.build-25428-1777348694953/.claude-plugin/marketplace.json +109 -0
- package/lib/.bmad-extension-plugin.build-25428-1777348694953/skills/module-help.csv +62 -0
- package/lib/.bmad-extension-plugin.build-25428-1777348694953/skills/module.yaml +20 -0
- package/lib/agents.js +32 -10
- package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +4 -11
- package/lib/bmad-cache/bmb/README.md +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/{pack-554778ad4e7254827618ebd2497c3f4bce9054a4.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/packed-refs +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/refs/tags/v1.7.0 +1 -0
- 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 +2 -7
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/customize-template.toml +62 -0
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/sample-customize-analyst.toml +87 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/customize-template.toml +56 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/sample-customize-product-brief.toml +51 -0
- package/lib/bmad-cache/bmb/tools/validate-doc-links.cjs +6 -1
- package/lib/bmad-cache/bmb/website/astro.config.mjs +5 -1
- package/lib/bmad-cache/cache-manifest.json +13 -11
- package/lib/bmad-cache/cis/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-cache/cis/README.md +1 -1
- package/lib/bmad-cache/cis/_git_preserved/index +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-39c4fd66f4e0eb3f4d93665318df04cd356b0297.pack → pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.pack} +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.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/shallow +1 -1
- package/lib/bmad-cache/cis/package.json +1 -1
- package/lib/bmad-cache/cis/src/module.yaml +49 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-brainstorming-coach/customize.toml +38 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-creative-problem-solver/customize.toml +38 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-design-thinking-coach/customize.toml +39 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-innovation-strategist/customize.toml +38 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-presentation-master/customize.toml +73 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-storyteller/customize.toml +60 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-design-thinking/customize.toml +41 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-innovation-strategy/customize.toml +41 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-problem-solving/customize.toml +42 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-storytelling/customize.toml +41 -0
- package/lib/bmad-cache/cis/tools/build-docs.mjs +8 -0
- package/lib/bmad-cache/cis/website/astro.config.mjs +34 -4
- package/lib/bmad-cache/cis/website/src/content/config.ts +2 -1
- package/lib/bmad-cache/cis/website/src/content/i18n/zh-CN.json +28 -0
- package/lib/bmad-cache/cis/website/src/lib/locales.mjs +27 -0
- package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +7 -6
- package/lib/bmad-cache/gds/README.md +5 -3
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-ac967149d58fba215d07238ad8881bdbdad5c9c3.pack → pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.pack} +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.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-architect/customize.toml +57 -0
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +59 -0
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +129 -0
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +60 -0
- package/lib/bmad-cache/gds/src/agents/gds-agent-tech-writer/customize.toml +65 -0
- package/lib/bmad-cache/gds/src/module-help.csv +4 -4
- package/lib/bmad-cache/gds/src/module.yaml +43 -1
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/research/gds-domain-research/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-narrative/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-ux-design/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-gdd/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-prd/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-gdd/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-gdd/data/genre-complexity.csv +26 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/domain-complexity.csv +15 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/project-types.csv +11 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-check-implementation-readiness/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-create-epics-and-stories/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-generate-project-context/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-code-review/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-correct-course/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-create-story/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-dev-story/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-retrospective/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-status/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-e2e-scaffold/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-performance-test/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-playtest-plan/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-automate/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-design/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-framework/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-review/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/customize.toml +41 -0
- package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev/customize.toml +41 -0
- package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-cache/tea/.github/CODE_OF_CONDUCT.md +128 -0
- package/lib/bmad-cache/tea/.github/FUNDING.yaml +15 -0
- package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/config.yaml +11 -0
- package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/feature_request.md +70 -0
- package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/issue.md +61 -0
- package/lib/bmad-cache/tea/.github/workflows/docs.yaml +66 -0
- package/lib/bmad-cache/tea/.github/workflows/manual-release.yaml +216 -0
- package/lib/bmad-cache/tea/.github/workflows/quality.yaml +117 -0
- package/lib/bmad-cache/tea/.vscode/settings.json +47 -0
- package/lib/bmad-cache/tea/README.md +63 -55
- package/lib/bmad-cache/tea/_git_preserved/index +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-e75385cd52b693dbb8a3b2afb50058952543b3a2.pack → pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.pack} +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.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/shallow +1 -1
- package/lib/bmad-cache/tea/docs/explanation/engagement-models.md +1 -1
- package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +1 -1
- package/lib/bmad-cache/tea/docs/glossary/index.md +1 -1
- package/lib/bmad-cache/tea/docs/how-to/customization/extend-tea-with-custom-workflows.md +29 -0
- package/lib/bmad-cache/tea/docs/how-to/workflows/run-trace.md +27 -20
- package/lib/bmad-cache/tea/docs/how-to/workflows/teach-me-testing.md +2 -2
- package/lib/bmad-cache/tea/docs/reference/commands.md +3 -3
- package/lib/bmad-cache/tea/docs/reference/troubleshooting.md +36 -0
- package/lib/bmad-cache/tea/docs/tutorials/learn-testing-tea-academy.md +1 -1
- package/lib/bmad-cache/tea/package-lock.json +2 -2
- package/lib/bmad-cache/tea/package.json +3 -3
- package/lib/bmad-cache/tea/src/agents/bmad-tea/SKILL.md +54 -44
- package/lib/bmad-cache/tea/src/agents/bmad-tea/customize.toml +104 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/contract-testing.md +32 -15
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-overview.md +15 -12
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +13 -4
- package/lib/bmad-cache/tea/src/module.yaml +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/README.md +5 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/SKILL.md +124 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/checklist.md +3 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/instructions.md +7 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-01-init.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-01b-continue.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-02-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-02.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-03.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-04.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-05.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-06.md +1 -1
- 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/steps-c/step-05-completion.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-e/step-e-01-assess-workflow.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-e/step-e-02-apply-edits.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-v/step-v-01-validate.md +12 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/SKILL.md +80 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/instructions.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/contract-testing.md +32 -15
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-overview.md +15 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/tea-index.csv +13 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-01-preflight-and-context.md +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-02-generation-mode.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-03-test-strategy.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04-generate-tests.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04a-subagent-api-failing.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04c-aggregate.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-05-validate-and-complete.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-e/step-01-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-e/step-02-apply-edit.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-v/step-01-validate.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/SKILL.md +80 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/instructions.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/contract-testing.md +18 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/tea-index.csv +12 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-01-preflight-and-context.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-02-identify-targets.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03-generate-tests.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03a-subagent-api.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03c-aggregate.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-04-validate-and-summarize.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-e/step-01-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-e/step-02-apply-edit.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-v/step-01-validate.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/SKILL.md +80 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/instructions.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/contract-testing.md +18 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/tea-index.csv +12 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-01-preflight.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-02-generate-pipeline.md +15 -7
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-03-configure-quality-gates.md +7 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-04-validate-and-summary.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-e/step-01-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-e/step-02-apply-edit.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-v/step-01-validate.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/SKILL.md +80 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/instructions.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/contract-testing.md +18 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/tea-index.csv +12 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-01-preflight.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-02-select-framework.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-03-scaffold-framework.md +11 -7
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-04-docs-and-scripts.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-05-validate-and-summary.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-e/step-01-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-e/step-02-apply-edit.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-v/step-01-validate.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/SKILL.md +80 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/instructions.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/contract-testing.md +18 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/tea-index.csv +12 -4
- 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-02-define-thresholds.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-03-gather-evidence.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04-evaluate-and-score.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04e-aggregate-nfr.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-05-generate-report.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-e/step-01-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-e/step-02-apply-edit.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-v/step-01-validate.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/SKILL.md +82 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/instructions.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/contract-testing.md +18 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/tea-index.csv +12 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-01-detect-mode.md +7 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-01b-resume.md +29 -15
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +7 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-03-risk-and-testability.md +7 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-04-coverage-plan.md +7 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-05-generate-output.md +14 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-e/step-01-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-e/step-02-apply-edit.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-v/step-01-validate.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-architecture-template.md +3 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-qa-template.md +3 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-template.md +3 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/SKILL.md +80 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/instructions.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/contract-testing.md +18 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/tea-index.csv +12 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-01-load-context.md +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-02-discover-tests.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03-quality-evaluation.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03a-subagent-determinism.md +43 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03f-aggregate-scores.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-04-generate-report.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-e/step-01-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-e/step-02-apply-edit.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-v/step-01-validate.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/SKILL.md +82 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/checklist.md +42 -18
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/customize.toml +40 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/instructions.md +6 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/contract-testing.md +18 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pact-consumer-framework-setup.md +134 -12
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pact-mcp.md +1 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pactjs-utils-consumer-helpers.md +111 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pactjs-utils-provider-verifier.md +83 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-module-setup.md +122 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-providers.md +155 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-template-matchers.md +160 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-timeout-error.md +130 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/tea-index.csv +12 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-01-load-context.md +74 -13
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-01b-resume.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-02-discover-tests.md +24 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-03-map-criteria.md +15 -11
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-04-analyze-gaps.md +210 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-05-gate-decision.md +477 -62
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-e/step-01-assess.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-e/step-02-apply-edit.md +8 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-v/step-01-validate.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/trace-template.md +10 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/workflow-plan.md +14 -11
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/workflow.yaml +24 -0
- package/lib/bmad-cache/tea/test/test-installation-components.js +210 -66
- package/lib/bmad-cache/tea/test/test-knowledge-base.js +6 -1
- package/lib/bmad-cache/tea/test/test-release-metadata.js +71 -0
- package/lib/bmad-cache/tea/tools/validate-agent-schema.js +73 -0
- package/lib/bmad-customize/bmm-qa.customize.yaml +1 -1
- package/lib/bmad-extension/.claude-plugin/marketplace.json.template +117 -0
- package/lib/bmad-extension/skills/add-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/bmad-dev-story/workflow.md +39 -0
- package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +41 -0
- package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +39 -0
- package/lib/bmad-extension/skills/cleanup-done/SKILL.md +39 -0
- package/lib/bmad-extension/skills/close-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/generate-backlog/SKILL.md +41 -0
- package/lib/bmad-extension/skills/ma-agent-cyber/.gitkeep +0 -0
- package/lib/bmad-extension/skills/ma-agent-cyber/SKILL.md +49 -0
- package/lib/bmad-extension/skills/ma-agent-cyber/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/ma-agent-devops/.gitkeep +0 -0
- package/lib/bmad-extension/skills/ma-agent-devops/SKILL.md +49 -0
- package/lib/bmad-extension/skills/ma-agent-devops/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/ma-agent-ml/.gitkeep +0 -0
- package/lib/bmad-extension/skills/ma-agent-ml/SKILL.md +59 -0
- package/lib/bmad-extension/skills/ma-agent-ml/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/ma-agent-sqa/.gitkeep +0 -0
- package/lib/bmad-extension/skills/ma-agent-sqa/SKILL.md +59 -0
- package/lib/bmad-extension/skills/ma-agent-sqa/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/ma-agent-sre/.gitkeep +0 -0
- package/lib/bmad-extension/skills/ma-agent-sre/SKILL.md +49 -0
- package/lib/bmad-extension/skills/ma-agent-sre/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/modify-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/module-help.csv +62 -0
- package/lib/bmad-extension/skills/module.yaml +20 -0
- package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +39 -0
- package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +109 -0
- package/lib/bmad-extension-plugin/skills/add-sprint/SKILL.md +214 -0
- package/lib/bmad-extension-plugin/skills/add-sprint/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/add-to-sprint/SKILL.md +282 -0
- package/lib/bmad-extension-plugin/skills/add-to-sprint/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-story/SKILL.md +6 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-story/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-story/checklist.md +80 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-story/workflow.md +548 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/SKILL.md +6 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/checklist.md +74 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/sprint-status-template.yaml +89 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/workflow.md +413 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-status/SKILL.md +6 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-status/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-status/workflow.md +473 -0
- package/lib/bmad-extension-plugin/skills/cleanup-done/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/cleanup-done/SKILL.md +254 -0
- package/lib/bmad-extension-plugin/skills/cleanup-done/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/close-sprint/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/close-sprint/SKILL.md +418 -0
- package/lib/bmad-extension-plugin/skills/close-sprint/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/create-bug-story/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/create-bug-story/SKILL.md +195 -0
- package/lib/bmad-extension-plugin/skills/create-bug-story/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/cyber-generate-certs/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/cyber-generate-certs/SKILL.md +27 -0
- package/lib/bmad-extension-plugin/skills/cyber-generate-certs/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/cyber-immunity-estimation/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/cyber-immunity-estimation/SKILL.md +29 -0
- package/lib/bmad-extension-plugin/skills/cyber-immunity-estimation/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/cyber-security-audit/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/cyber-security-audit/SKILL.md +27 -0
- package/lib/bmad-extension-plugin/skills/cyber-security-audit/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/cyber-vault-secrets/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/cyber-vault-secrets/SKILL.md +28 -0
- package/lib/bmad-extension-plugin/skills/cyber-vault-secrets/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/cyber-verify-docker-users/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/cyber-verify-docker-users/SKILL.md +23 -0
- package/lib/bmad-extension-plugin/skills/cyber-verify-docker-users/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/cyber-verify-image-signature/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/cyber-verify-image-signature/SKILL.md +22 -0
- package/lib/bmad-extension-plugin/skills/cyber-verify-image-signature/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/cyber-vulnerability-scan/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/cyber-vulnerability-scan/SKILL.md +28 -0
- package/lib/bmad-extension-plugin/skills/cyber-vulnerability-scan/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/devops-configure-infrastructure/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/devops-configure-infrastructure/SKILL.md +27 -0
- package/lib/bmad-extension-plugin/skills/devops-configure-infrastructure/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/devops-disconnected-deployment/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/devops-disconnected-deployment/SKILL.md +27 -0
- package/lib/bmad-extension-plugin/skills/devops-disconnected-deployment/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/devops-docker-compose-setup/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/devops-docker-compose-setup/SKILL.md +26 -0
- package/lib/bmad-extension-plugin/skills/devops-docker-compose-setup/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/devops-manage-helm/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/devops-manage-helm/SKILL.md +28 -0
- package/lib/bmad-extension-plugin/skills/devops-manage-helm/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/devops-sign-docker-image/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/devops-sign-docker-image/SKILL.md +24 -0
- package/lib/bmad-extension-plugin/skills/devops-sign-docker-image/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/generate-backlog/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/generate-backlog/SKILL.md +236 -0
- package/lib/bmad-extension-plugin/skills/generate-backlog/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ma-agent-cyber/.gitkeep +0 -0
- package/lib/{bmad-extension/skills/bmad-ma-agent-cyber → bmad-extension-plugin/skills/ma-agent-cyber}/SKILL.md +1 -1
- package/lib/{bmad-extension/skills/bmad-ma-agent-cyber → bmad-extension-plugin/skills/ma-agent-cyber}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/ma-agent-devops/.gitkeep +0 -0
- package/lib/{bmad-extension/skills/bmad-ma-agent-devops → bmad-extension-plugin/skills/ma-agent-devops}/SKILL.md +1 -1
- package/lib/{bmad-extension/skills/bmad-ma-agent-devops → bmad-extension-plugin/skills/ma-agent-devops}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/ma-agent-ml/.gitkeep +0 -0
- package/lib/{bmad-extension/skills/bmad-ma-agent-ml → bmad-extension-plugin/skills/ma-agent-ml}/SKILL.md +1 -1
- package/lib/{bmad-extension/skills/bmad-ma-agent-ml → bmad-extension-plugin/skills/ma-agent-ml}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/ma-agent-sqa/.gitkeep +0 -0
- package/lib/{bmad-extension/skills/bmad-ma-agent-sqa → bmad-extension-plugin/skills/ma-agent-sqa}/SKILL.md +1 -1
- package/lib/{bmad-extension/skills/bmad-ma-agent-sqa → bmad-extension-plugin/skills/ma-agent-sqa}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/ma-agent-sre/.gitkeep +0 -0
- package/lib/{bmad-extension/skills/bmad-ma-agent-sre → bmad-extension-plugin/skills/ma-agent-sre}/SKILL.md +1 -1
- package/lib/{bmad-extension/skills/bmad-ma-agent-sre → bmad-extension-plugin/skills/ma-agent-sre}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/mil498-ocd/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/SKILL.md +30 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/prompts/01-discover-project-artifacts.md +26 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/prompts/03-generate-document.md +90 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/prompts/04-validate.md +14 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/prompts/05-review.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/prompts/06-save.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-ocd/template.md +169 -0
- package/lib/bmad-extension-plugin/skills/mil498-requirement-quality/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/mil498-requirement-quality/SKILL.md +105 -0
- package/lib/bmad-extension-plugin/skills/mil498-requirement-quality/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/SKILL.md +30 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/prompts/01-discover-project-artifacts.md +50 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/prompts/03-generate-document.md +98 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/prompts/04-validate.md +16 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/prompts/05-review.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/prompts/06-save.md +19 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdd/template.md +163 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/SKILL.md +30 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/prompts/01-discover-project-artifacts.md +32 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/prompts/03-generate-document.md +187 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/prompts/04-validate.md +13 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/prompts/05-review.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/prompts/06-save.md +14 -0
- package/lib/bmad-extension-plugin/skills/mil498-sdp/template.md +307 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/SKILL.md +30 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/prompts/01-discover-project-artifacts.md +42 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/prompts/03-generate-document.md +100 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/prompts/04-validate.md +16 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/prompts/05-review.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/prompts/06-save.md +18 -0
- package/lib/bmad-extension-plugin/skills/mil498-srs/template.md +219 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/SKILL.md +32 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/prompts/01-discover-project-artifacts.md +32 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/prompts/03-csci-discovery-interview.md +43 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/prompts/04-generate-document.md +96 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/prompts/05-validate.md +18 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/prompts/06-review.md +16 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/prompts/07-save.md +16 -0
- package/lib/bmad-extension-plugin/skills/mil498-ssdd/template.md +154 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/SKILL.md +31 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/prompts/01-discover-project-artifacts.md +31 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/prompts/03-generate-document.md +108 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/prompts/04-validate.md +16 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/prompts/05-review.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/prompts/06-save.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-sss/template.md +225 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/SKILL.md +30 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/prompts/01-discover-project-artifacts.md +42 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/prompts/03-generate-document.md +117 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/prompts/04-validate.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/prompts/05-review.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/prompts/06-save.md +15 -0
- package/lib/bmad-extension-plugin/skills/mil498-std/template.md +188 -0
- package/lib/bmad-extension-plugin/skills/ml-advise/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-advise/SKILL.md +76 -0
- package/lib/bmad-extension-plugin/skills/ml-advise/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-advise/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-analysis/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-analysis/SKILL.md +60 -0
- package/lib/bmad-extension-plugin/skills/ml-analysis/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-analysis/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-architecture/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-architecture/SKILL.md +55 -0
- package/lib/bmad-extension-plugin/skills/ml-architecture/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-architecture/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-detailed-design/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-detailed-design/SKILL.md +67 -0
- package/lib/bmad-extension-plugin/skills/ml-detailed-design/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-detailed-design/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-eda/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-eda/SKILL.md +56 -0
- package/lib/bmad-extension-plugin/skills/ml-eda/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-eda/scripts/baseline_classifier.py +522 -0
- package/lib/bmad-extension-plugin/skills/ml-eda/scripts/class_weights_calculator.py +295 -0
- package/lib/bmad-extension-plugin/skills/ml-eda/scripts/clustering_explorer.py +383 -0
- package/lib/bmad-extension-plugin/skills/ml-eda/scripts/eda_analyzer.py +654 -0
- package/lib/bmad-extension-plugin/skills/ml-eda/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/SKILL.md +74 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/assets/advanced_trainer_configs.py +430 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/assets/quick_trainer_setup.py +233 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/assets/template_datamodule.py +219 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/assets/template_gnn_module.py +341 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/assets/template_lightning_module.py +158 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-experiment/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-hparam/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-hparam/SKILL.md +81 -0
- package/lib/bmad-extension-plugin/skills/ml-hparam/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-hparam/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-ideation/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-ideation/SKILL.md +50 -0
- package/lib/bmad-extension-plugin/skills/ml-ideation/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-ideation/scripts/validate_ml_prd.py +287 -0
- package/lib/bmad-extension-plugin/skills/ml-ideation/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-infra/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-infra/SKILL.md +58 -0
- package/lib/bmad-extension-plugin/skills/ml-infra/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-infra/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-retrospective/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-retrospective/SKILL.md +63 -0
- package/lib/bmad-extension-plugin/skills/ml-retrospective/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-retrospective/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-revision/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-revision/SKILL.md +82 -0
- package/lib/bmad-extension-plugin/skills/ml-revision/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-revision/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/ml-techspec/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/ml-techspec/SKILL.md +80 -0
- package/lib/bmad-extension-plugin/skills/ml-techspec/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/ml-techspec/skill.json +7 -0
- package/lib/bmad-extension-plugin/skills/modify-sprint/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/modify-sprint/SKILL.md +350 -0
- package/lib/bmad-extension-plugin/skills/modify-sprint/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/module-help.csv +62 -0
- package/lib/bmad-extension-plugin/skills/module.yaml +20 -0
- package/lib/bmad-extension-plugin/skills/prioritize-backlog/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/prioritize-backlog/SKILL.md +256 -0
- package/lib/bmad-extension-plugin/skills/prioritize-backlog/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/project-context-expansion/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/project-context-expansion/SKILL.md +238 -0
- package/lib/bmad-extension-plugin/skills/project-context-expansion/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/remove-from-sprint/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/remove-from-sprint/SKILL.md +223 -0
- package/lib/bmad-extension-plugin/skills/remove-from-sprint/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sprint-status-view/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sprint-status-view/SKILL.md +216 -0
- package/lib/bmad-extension-plugin/skills/sprint-status-view/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sqa-audit/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sqa-audit/SKILL.md +279 -0
- package/lib/bmad-extension-plugin/skills/sqa-audit/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sqa-ieee12207/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sqa-ieee12207/SKILL.md +374 -0
- package/lib/bmad-extension-plugin/skills/sqa-ieee12207/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sqa-requirements-quality/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sqa-requirements-quality/SKILL.md +244 -0
- package/lib/bmad-extension-plugin/skills/sqa-requirements-quality/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sre-check-deployment-status/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sre-check-deployment-status/SKILL.md +32 -0
- package/lib/bmad-extension-plugin/skills/sre-check-deployment-status/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sre-check-secrets/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sre-check-secrets/SKILL.md +23 -0
- package/lib/bmad-extension-plugin/skills/sre-check-secrets/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sre-check-system-status/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sre-check-system-status/SKILL.md +27 -0
- package/lib/bmad-extension-plugin/skills/sre-check-system-status/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sre-day-2-ops/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sre-day-2-ops/SKILL.md +26 -0
- package/lib/bmad-extension-plugin/skills/sre-day-2-ops/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sre-deployment-strategies/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sre-deployment-strategies/SKILL.md +28 -0
- package/lib/bmad-extension-plugin/skills/sre-deployment-strategies/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sre-fix-deployments/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sre-fix-deployments/SKILL.md +25 -0
- package/lib/bmad-extension-plugin/skills/sre-fix-deployments/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension-plugin/skills/sre-gitops-status/.gitkeep +0 -0
- package/lib/bmad-extension-plugin/skills/sre-gitops-status/SKILL.md +25 -0
- package/lib/bmad-extension-plugin/skills/sre-gitops-status/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad.js +1375 -372
- package/lib/installer.js +367 -2
- package/package.json +23 -5
- package/scripts/build-bmad-cache.js +250 -47
- package/scripts/build-plugin.js +574 -0
- package/skills/add-sprint/SKILL.md +39 -0
- package/skills/add-to-sprint/SKILL.md +39 -0
- package/skills/bmad-sprint-planning/SKILL.md +41 -0
- package/skills/bmad-sprint-status/SKILL.md +39 -0
- package/skills/cleanup-done/SKILL.md +39 -0
- package/skills/close-sprint/SKILL.md +39 -0
- package/skills/generate-backlog/SKILL.md +41 -0
- package/skills/modify-sprint/SKILL.md +39 -0
- package/skills/prioritize-backlog/SKILL.md +39 -0
- package/skills/remove-from-sprint/SKILL.md +39 -0
- package/skills/sprint-status-view/SKILL.md +39 -0
- package/skills/story-status-lookup/SKILL.md +38 -21
- package/.ma-agents.json +0 -10
- package/AGENTS.md +0 -97
- package/AiAudit.md +0 -12
- package/DEVELOPMENT.md +0 -173
- package/MANIFEST.yaml +0 -3
- package/_bmad-output/implementation-artifacts/16-4-validation-report.md +0 -79
- package/_bmad-output/implementation-artifacts/17-10-rework-generate-backlog.md +0 -237
- package/_bmad-output/implementation-artifacts/17-11-rework-add-to-sprint.md +0 -339
- package/_bmad-output/implementation-artifacts/17-12-rework-remove-from-sprint.md +0 -348
- package/_bmad-output/implementation-artifacts/17-13-rework-sprint-status-view.md +0 -383
- package/_bmad-output/implementation-artifacts/17-14-rework-cleanup-done.md +0 -348
- package/_bmad-output/implementation-artifacts/17-15-rework-bmad-sprint-planning.md +0 -385
- package/_bmad-output/implementation-artifacts/17-16-rework-add-sprint.md +0 -362
- package/_bmad-output/implementation-artifacts/17-17-rework-modify-sprint.md +0 -477
- package/_bmad-output/implementation-artifacts/17-18-rework-bmad-dev-story.md +0 -377
- package/_bmad-output/implementation-artifacts/17-19-rework-story-status-lookup.md +0 -301
- package/_bmad-output/implementation-artifacts/17-20-rework-bmad-sprint-status.md +0 -508
- package/_bmad-output/implementation-artifacts/17-21-new-close-sprint.md +0 -455
- package/_bmad-output/implementation-artifacts/17-22-jira-adapter-pattern.md +0 -325
- package/_bmad-output/implementation-artifacts/17-23-migration-deprecation-old-files.md +0 -403
- package/_bmad-output/implementation-artifacts/17-24-rework-prioritize-backlog.md +0 -344
- package/_bmad-output/implementation-artifacts/17-9-unified-sprint-status-schema.md +0 -279
- package/_bmad-output/implementation-artifacts/19-1-knowledge-graph-core-library.md +0 -239
- package/_bmad-output/implementation-artifacts/19-2-graph-emission-create-prd.md +0 -171
- package/_bmad-output/implementation-artifacts/19-3-graph-emission-create-architecture-epics.md +0 -179
- package/_bmad-output/implementation-artifacts/19-4-graph-emission-create-story-remaining.md +0 -190
- package/_bmad-output/implementation-artifacts/19-5-open-graph-skill.md +0 -213
- package/_bmad-output/implementation-artifacts/19-6-interactive-visualization-renderer.md +0 -259
- package/_bmad-output/implementation-artifacts/19-7-llm-writability-validation-tests.md +0 -280
- package/_bmad-output/implementation-artifacts/21-1-install-time-profile-prompt.md +0 -181
- package/_bmad-output/implementation-artifacts/21-10-profile-reconfigure.md +0 -161
- package/_bmad-output/implementation-artifacts/21-11-profile-uninstall.md +0 -150
- package/_bmad-output/implementation-artifacts/21-2-universal-instruction-block-expansion.md +0 -253
- package/_bmad-output/implementation-artifacts/21-3-roomodes-template-bmad-modes.md +0 -229
- package/_bmad-output/implementation-artifacts/21-4-agents-md-template-opencode.md +0 -275
- package/_bmad-output/implementation-artifacts/21-5-clinerules-template-extension.md +0 -221
- package/_bmad-output/implementation-artifacts/21-6-onprem-layered-guardrails.md +0 -287
- package/_bmad-output/implementation-artifacts/21-7-bmad-persona-phase-prefix.md +0 -258
- package/_bmad-output/implementation-artifacts/21-8-vllm-reference-doc-readme.md +0 -158
- package/_bmad-output/implementation-artifacts/21-9-tests-validation.md +0 -368
- package/_bmad-output/implementation-artifacts/4-1-vs-agent-registry-entry.md +0 -173
- package/_bmad-output/implementation-artifacts/4-2-vs-skill-template-format.md +0 -129
- package/_bmad-output/implementation-artifacts/5-5-explicit-parameter-passing.md +0 -274
- package/_bmad-output/implementation-artifacts/5-6-fix-space-in-path-bug.md +0 -186
- package/_bmad-output/implementation-artifacts/7-1-test-infrastructure-setup.md +0 -144
- package/_bmad-output/implementation-artifacts/7-2-installer-pipeline-tests.md +0 -132
- package/_bmad-output/implementation-artifacts/7-3-bmad-pipeline-tests.md +0 -119
- package/_bmad-output/implementation-artifacts/7-4-cli-command-routing-tests.md +0 -162
- package/_bmad-output/implementation-artifacts/bug-bmad-recompile-fails-on-airgapped-network.md +0 -112
- package/_bmad-output/implementation-artifacts/bug-experimentalwarning-about-commonjs-loading-es-module-during-install.md +0 -57
- package/_bmad-output/implementation-artifacts/deferred-work.md +0 -9
- package/_bmad-output/implementation-artifacts/done/1-1-ci-cd-yes-flag.md +0 -200
- package/_bmad-output/implementation-artifacts/done/10-1-ensure-bmad-output-not-gitignored.md +0 -172
- package/_bmad-output/implementation-artifacts/done/10-2-document-bmad-output-policy.md +0 -102
- package/_bmad-output/implementation-artifacts/done/11-1-auto-bug-detection-skill.md +0 -119
- package/_bmad-output/implementation-artifacts/done/11-2-bug-story-extension-workflow.md +0 -132
- package/_bmad-output/implementation-artifacts/done/11-3-integrate-bug-detection-code-review.md +0 -111
- package/_bmad-output/implementation-artifacts/done/12-1-add-sprint-workflow.md +0 -126
- package/_bmad-output/implementation-artifacts/done/12-2-add-to-sprint-workflow.md +0 -137
- package/_bmad-output/implementation-artifacts/done/12-3-modify-sprint-workflow.md +0 -127
- package/_bmad-output/implementation-artifacts/done/12-4-sprint-status-assigned-items.md +0 -129
- package/_bmad-output/implementation-artifacts/done/13-1-project-context-template-and-generator.md +0 -179
- package/_bmad-output/implementation-artifacts/done/13-2-install-pipeline-integration.md +0 -138
- package/_bmad-output/implementation-artifacts/done/13-3-bmad-critical-actions-update.md +0 -150
- package/_bmad-output/implementation-artifacts/done/13-4-retrospective-expansion-trigger.md +0 -128
- package/_bmad-output/implementation-artifacts/done/13-5-document-project-context-generation.md +0 -118
- package/_bmad-output/implementation-artifacts/done/15-1-bump-bmad-method-to-6-2-1.md +0 -132
- package/_bmad-output/implementation-artifacts/done/15-2-restructure-extension-module.md +0 -174
- package/_bmad-output/implementation-artifacts/done/15-3-convert-custom-agents-to-skill-folders.md +0 -183
- package/_bmad-output/implementation-artifacts/done/15-4-convert-mil498-workflows-to-skill-md.md +0 -252
- package/_bmad-output/implementation-artifacts/done/15-5-convert-sre-devops-cyber-workflows.md +0 -232
- package/_bmad-output/implementation-artifacts/done/15-6-separate-built-in-agent-customizations.md +0 -163
- package/_bmad-output/implementation-artifacts/done/15-7-migration-detection-and-upgrade-path.md +0 -133
- package/_bmad-output/implementation-artifacts/done/15-8-validate-migrated-agents-and-workflows.md +0 -172
- package/_bmad-output/implementation-artifacts/done/15-8-validation-report.md +0 -342
- package/_bmad-output/implementation-artifacts/done/16-1-repository-layout-wizard.md +0 -223
- package/_bmad-output/implementation-artifacts/done/16-2-config-storage-and-cross-reference.md +0 -180
- package/_bmad-output/implementation-artifacts/done/16-3-project-context-multi-repo-section.md +0 -136
- package/_bmad-output/implementation-artifacts/done/16-4-validate-cross-repo-path-resolution.md +0 -137
- package/_bmad-output/implementation-artifacts/done/16-4-validation-report.md +0 -79
- package/_bmad-output/implementation-artifacts/done/16-5-fix-config-lost-on-update.md +0 -110
- package/_bmad-output/implementation-artifacts/done/16-6-repo-sync-check-skill.md +0 -116
- package/_bmad-output/implementation-artifacts/done/16-7-portable-path-storage.md +0 -109
- package/_bmad-output/implementation-artifacts/done/16-8-cicd-remote-mode.md +0 -97
- package/_bmad-output/implementation-artifacts/done/16-9-reconfigure-layout-workflow.md +0 -125
- package/_bmad-output/implementation-artifacts/done/17-1-sprint-entity-model.md +0 -322
- package/_bmad-output/implementation-artifacts/done/17-2-flat-backlog-model.md +0 -264
- package/_bmad-output/implementation-artifacts/done/17-3-bug-as-story-type.md +0 -208
- package/_bmad-output/implementation-artifacts/done/17-4-backlog-to-sprint-workflow.md +0 -209
- package/_bmad-output/implementation-artifacts/done/17-5-sprint-to-backlog-workflow.md +0 -221
- package/_bmad-output/implementation-artifacts/done/17-6-done-item-cleanup.md +0 -273
- package/_bmad-output/implementation-artifacts/done/17-7-multi-criteria-prioritization.md +0 -235
- package/_bmad-output/implementation-artifacts/done/17-8-rework-sprint-status-display.md +0 -285
- package/_bmad-output/implementation-artifacts/done/2-1-cpp-coding-standards-skill.md +0 -188
- package/_bmad-output/implementation-artifacts/done/2-2-csharp-coding-standards-skill.md +0 -211
- package/_bmad-output/implementation-artifacts/done/2-3-python-coding-standards-skill.md +0 -189
- package/_bmad-output/implementation-artifacts/done/3-1-skill-scaffolding-tool.md +0 -184
- package/_bmad-output/implementation-artifacts/done/3-2-skill-validation-tool.md +0 -178
- package/_bmad-output/implementation-artifacts/done/3-3-mandatory-skill-designation.md +0 -136
- package/_bmad-output/implementation-artifacts/done/3-4-bmad-persona-customization-tooling.md +0 -141
- package/_bmad-output/implementation-artifacts/done/3-5-specialized-agent-development-tooling.md +0 -145
- package/_bmad-output/implementation-artifacts/done/5-1-bmad-method-direct-dependency.md +0 -188
- package/_bmad-output/implementation-artifacts/done/5-2-bmad-cache-build-script.md +0 -219
- package/_bmad-output/implementation-artifacts/done/5-3-pre-populate-bmad-cache.md +0 -234
- package/_bmad-output/implementation-artifacts/done/5-4-validate-bundled-installation.md +0 -274
- package/_bmad-output/implementation-artifacts/done/6-1-methodology-presentation-bundle.md +0 -173
- package/_bmad-output/implementation-artifacts/done/8-1-move-instruction-injection-to-top.md +0 -131
- package/_bmad-output/implementation-artifacts/done/8-2-agent-aware-injection-strategy.md +0 -124
- package/_bmad-output/implementation-artifacts/done/8-3-create-bmad-extension-module.md +0 -187
- package/_bmad-output/implementation-artifacts/done/8-4-integration-verification.md +0 -102
- package/_bmad-output/implementation-artifacts/done/8-5-per-agent-enforcement-hooks-research.md +0 -126
- package/_bmad-output/implementation-artifacts/done/8-6-context-persistence-research.md +0 -101
- package/_bmad-output/implementation-artifacts/done/9-1-register-opencode-agent.md +0 -73
- package/_bmad-output/implementation-artifacts/done/9-2-json-merge-injection.md +0 -91
- package/_bmad-output/implementation-artifacts/done/9-3-json-merge-existing.md +0 -113
- package/_bmad-output/implementation-artifacts/done/9-4-json-error-handling.md +0 -90
- package/_bmad-output/implementation-artifacts/epic-11-12-shared-guardrails.md +0 -53
- package/_bmad-output/implementation-artifacts/epic-15-adversarial-fixes.md +0 -287
- package/_bmad-output/implementation-artifacts/epic-16-adversarial-review.md +0 -49
- package/_bmad-output/implementation-artifacts/epic-16-edge-case-review.md +0 -230
- package/_bmad-output/implementation-artifacts/epic-17-adversarial-review.md +0 -37
- package/_bmad-output/implementation-artifacts/epic-17-edge-case-review.md +0 -140
- package/_bmad-output/implementation-artifacts/sprint-status.yaml +0 -139
- package/_bmad-output/planning-artifacts/adapter-pattern-spec.md +0 -508
- package/_bmad-output/planning-artifacts/architecture.md +0 -2023
- package/_bmad-output/planning-artifacts/domain-research-roocode-2026-03-31.md +0 -295
- package/_bmad-output/planning-artifacts/epics.md +0 -4232
- package/_bmad-output/planning-artifacts/mil498-workflow-audit.md +0 -290
- package/_bmad-output/planning-artifacts/prd.md +0 -811
- package/_bmad-output/planning-artifacts/product-brief-agents-2026-03-08.md +0 -214
- package/_bmad-output/planning-artifacts/sprint-status-schema.md +0 -506
- package/_bmad-output/planning-artifacts/validation-report-prd-2026-04-07.md +0 -330
- package/_bmad-output/project-context.md +0 -47
- package/agents.code-workspace +0 -11
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-554778ad4e7254827618ebd2497c3f4bce9054a4.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-554778ad4e7254827618ebd2497c3f4bce9054a4.rev +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-39c4fd66f4e0eb3f4d93665318df04cd356b0297.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-39c4fd66f4e0eb3f4d93665318df04cd356b0297.rev +0 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-brainstorming-coach/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-creative-problem-solver/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-design-thinking-coach/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-innovation-strategist/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-presentation-master/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-storyteller/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/cis/src/skills/bmad-cis-design-thinking/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/cis/src/skills/bmad-cis-innovation-strategy/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/cis/src/skills/bmad-cis-problem-solving/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/cis/src/skills/bmad-cis-storytelling/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-ac967149d58fba215d07238ad8881bdbdad5c9c3.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-ac967149d58fba215d07238ad8881bdbdad5c9c3.rev +0 -0
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-architect/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-qa/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-scrum-master/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/gds/src/agents/gds-agent-tech-writer/bmad-skill-manifest.yaml +0 -11
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/research/bmad-skill-manifest.yaml +0 -9
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/research/gds-domain-research/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/2-design/create-prd/bmad-skill-manifest.yaml +0 -14
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-narrative/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-ux-design/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-check-implementation-readiness/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-create-epics-and-stories/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-generate-project-context/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-code-review/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-correct-course/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-create-story/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-dev-story/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-retrospective/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-status/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-e2e-scaffold/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-performance-test/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-playtest-plan/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-automate/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-design/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-framework/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-review/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gds-document-project/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev-new-preview/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-spec/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-e75385cd52b693dbb8a3b2afb50058952543b3a2.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-e75385cd52b693dbb8a3b2afb50058952543b3a2.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.10.0 +0 -1
- package/lib/bmad-cache/tea/src/agents/bmad-tea/bmad-skill-manifest.yaml +0 -14
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/workflow.md +0 -90
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/workflow.md +0 -41
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/workflow.md +0 -41
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/workflow.md +0 -41
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/workflow.md +0 -41
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow.md +0 -41
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/workflow.md +0 -41
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/workflow.md +0 -41
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/workflow.md +0 -41
- package/lib/bmad-customizations/bmm-demerzel.customize.yaml +0 -36
- package/lib/bmad-customizations/demerzel.md +0 -32
- package/lib/bmad-customize/bmm-quick-flow-solo-dev.customize.yaml +0 -8
- package/lib/bmad-extension/module.yaml +0 -5
- package/out.txt +0 -0
- package/test/agent-injection-strategy.test.js +0 -129
- package/test/agents-md.test.js +0 -398
- package/test/bmad-extension.test.js +0 -283
- package/test/bmad-output-policy.test.js +0 -119
- package/test/bmad-persona-phase-prefix.test.js +0 -271
- package/test/bmad-version-bump.test.js +0 -313
- package/test/build-bmad-args.test.js +0 -368
- package/test/cicd-remote-mode.test.js +0 -224
- package/test/clinerules.test.js +0 -339
- package/test/config-layout.test.js +0 -230
- package/test/config-lost-on-update.test.js +0 -363
- package/test/config-storage.test.js +0 -275
- package/test/convert-agents-to-skills.test.js +0 -255
- package/test/create-agent.test.js +0 -232
- package/test/cross-repo-validation.test.js +0 -201
- package/test/enforcement-hooks.test.js +0 -324
- package/test/experimental-warning.test.js +0 -314
- package/test/extension-module-restructure.test.js +0 -407
- package/test/fixtures/README.md +0 -74
- package/test/fixtures/empty-project/README.md +0 -5
- package/test/fixtures/empty-project/package.json +0 -5
- package/test/fixtures/onprem-profile-baseline/.gitkeep +0 -2
- package/test/fixtures/standard-profile-baseline/.gitkeep +0 -2
- package/test/generate-project-context.test.js +0 -483
- package/test/instruction-block.test.js +0 -388
- package/test/instruction-injection.test.js +0 -336
- package/test/integration-verification.test.js +0 -433
- package/test/migration-validation.test.js +0 -506
- package/test/migration.test.js +0 -832
- package/test/offline-recompile.test.js +0 -267
- package/test/onprem-injection.test.js +0 -441
- package/test/onprem-layer.test.js +0 -419
- package/test/opencode-agent.test.js +0 -150
- package/test/opencode-json-error.test.js +0 -260
- package/test/opencode-json-injection.test.js +0 -264
- package/test/opencode-json-merge.test.js +0 -318
- package/test/portable-paths.test.js +0 -268
- package/test/profile.test.js +0 -301
- package/test/reconfigure.test.js +0 -436
- package/test/repo-layout.test.js +0 -246
- package/test/roo-code-agent.test.js +0 -166
- package/test/roo-code-injection.test.js +0 -172
- package/test/roomodes.test.js +0 -343
- package/test/skill-authoring.test.js +0 -272
- package/test/skill-customize-agent.test.js +0 -253
- package/test/skill-mandatory.test.js +0 -235
- package/test/skill-validation.test.js +0 -378
- package/test/story-15-5-workflow-skills.test.js +0 -311
- package/test/uninstall.test.js +0 -402
- package/test/yes-flag.test.js +0 -200
- /package/lib/bmad-cache/gds/src/{gametest → agents/gds-agent-game-dev/gametest}/qa-index.csv +0 -0
- /package/lib/bmad-cache/gds/src/workflows/2-design/{create-prd → gds-create-prd}/data/domain-complexity.csv +0 -0
- /package/lib/bmad-cache/gds/src/workflows/2-design/{create-prd → gds-create-prd}/data/project-types.csv +0 -0
- /package/lib/{bmad-extension/skills/bmad-ma-agent-cyber → bmad-extension-plugin/skills/add-sprint}/.gitkeep +0 -0
- /package/lib/{bmad-extension/skills/bmad-ma-agent-devops → bmad-extension-plugin/skills/add-to-sprint}/.gitkeep +0 -0
- /package/lib/{bmad-extension/skills/bmad-ma-agent-ml → bmad-extension-plugin/skills/bmad-dev-story}/.gitkeep +0 -0
- /package/lib/{bmad-extension/skills/bmad-ma-agent-sqa → bmad-extension-plugin/skills/bmad-sprint-planning}/.gitkeep +0 -0
- /package/lib/{bmad-extension/skills/bmad-ma-agent-sre → bmad-extension-plugin/skills/bmad-sprint-status}/.gitkeep +0 -0
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
# Story 19.7: LLM-Writability Contract Validation and Integration Tests
|
|
2
|
-
|
|
3
|
-
Status: ready-for-dev
|
|
4
|
-
|
|
5
|
-
## Story
|
|
6
|
-
|
|
7
|
-
As a **Chief Architect**,
|
|
8
|
-
I want the knowledge graph JSON format validated against the LLM-writability contract and covered by integration tests,
|
|
9
|
-
so that we can verify that any LLM can extend the graph by copying existing patterns, and that the additive-only semantics are enforced.
|
|
10
|
-
|
|
11
|
-
## Acceptance Criteria
|
|
12
|
-
|
|
13
|
-
1. **Given** a `knowledge-graph.json` file with one existing node and one existing edge
|
|
14
|
-
**When** an LLM is instructed to add a new node and a new edge by copying the existing patterns (no external schema provided)
|
|
15
|
-
**Then** the resulting JSON is valid and passes `emitToGraph()` ingestion without errors
|
|
16
|
-
**And** the existing node and edge are preserved unchanged (NFR40)
|
|
17
|
-
|
|
18
|
-
2. **Given** `emitToGraph()` is called with a node id that already exists in `nodes`
|
|
19
|
-
**When** the function completes
|
|
20
|
-
**Then** `nodes` contains exactly one entry with that id (no duplicate)
|
|
21
|
-
**And** the original node's fields are unchanged (except `title` which may be updated)
|
|
22
|
-
|
|
23
|
-
3. **Given** `emitToGraph()` is called with an edge `(from, to, type)` triple that already exists
|
|
24
|
-
**When** the function completes
|
|
25
|
-
**Then** `edges` contains exactly one entry with that triple (no duplicate)
|
|
26
|
-
**And** the original edge's provenance (created_by, agent) is unchanged
|
|
27
|
-
|
|
28
|
-
4. **Given** a graph with 500 nodes and 1000 edges
|
|
29
|
-
**When** `emitToGraph()` adds one new node and one new edge
|
|
30
|
-
**Then** the operation completes in under 1 second
|
|
31
|
-
|
|
32
|
-
5. **Given** the full emission sequence is run (all 7 skills emit in order)
|
|
33
|
-
**When** the resulting `knowledge-graph.json` is inspected
|
|
34
|
-
**Then** all emitted nodes are present
|
|
35
|
-
**And** all emitted edges are present with correct provenance
|
|
36
|
-
**And** `meta.file_count`, `meta.node_count`, `meta.edge_count` are accurate
|
|
37
|
-
|
|
38
|
-
## Tasks / Subtasks
|
|
39
|
-
|
|
40
|
-
### Task 1: Set up test directory structure (AC: 1–5)
|
|
41
|
-
|
|
42
|
-
Story 19.7 integration tests follow the existing Node.js test runner pattern. Epic 7 (Test Suite) is on hold, so these tests use the existing Node.js test runner directly (no Jest, no Vitest — plain Node.js `assert` and test runner, or whichever lightweight pattern is already in use in the repo).
|
|
43
|
-
|
|
44
|
-
- [ ] 1.1 Create directory `tests/knowledge-graph/`
|
|
45
|
-
- [ ] 1.2 Create `tests/knowledge-graph/fixtures/` for test fixture files
|
|
46
|
-
- [ ] 1.3 Check existing test files in the repo (e.g., `tests/` root) to identify the test runner pattern in use — do NOT introduce a new test framework; replicate the existing pattern exactly
|
|
47
|
-
|
|
48
|
-
### Task 2: Test — additive-only semantics (AC: 1, 2, 3)
|
|
49
|
-
|
|
50
|
-
- [ ] 2.1 Create `tests/knowledge-graph/emit.test.js`:
|
|
51
|
-
- **Test: first call creates valid structure**
|
|
52
|
-
- Use a temp directory; call `emitToGraph(tmpDir, minimalPayload)`
|
|
53
|
-
- Verify file is created, has `meta`, `files`, `nodes`, `edges` sections
|
|
54
|
-
- Verify `meta.node_count` and `meta.edge_count` match array lengths
|
|
55
|
-
|
|
56
|
-
- **Test: duplicate node is rejected (AC: 2)**
|
|
57
|
-
- Seed graph with node `{ id: "prd#test", ... }`
|
|
58
|
-
- Call `emitToGraph()` again with the same node id but different title
|
|
59
|
-
- Verify `nodes` has exactly 1 entry with that id
|
|
60
|
-
- Verify title is updated (expected behavior per Story 19.1: title updates are allowed)
|
|
61
|
-
|
|
62
|
-
- **Test: duplicate edge is rejected (AC: 3)**
|
|
63
|
-
- Seed graph with edge `{ from: "prd#a", to: "prd#b", type: "implements", created_by: "original", ... }`
|
|
64
|
-
- Call `emitToGraph()` again with same `(from, to, type)` but different `created_by`
|
|
65
|
-
- Verify `edges` has exactly 1 entry with that triple
|
|
66
|
-
- Verify `created_by` is unchanged (provenance preserved — only `created_at`/`agent` can update)
|
|
67
|
-
|
|
68
|
-
- **Test: existing entries preserved (AC: 1, 2, 3 — NFR40)**
|
|
69
|
-
- Seed graph with 3 nodes and 2 edges
|
|
70
|
-
- Call `emitToGraph()` with 2 new nodes and 1 new edge
|
|
71
|
-
- Verify total: 5 nodes, 3 edges
|
|
72
|
-
- Verify all original entries are byte-identical to their initial values
|
|
73
|
-
|
|
74
|
-
### Task 3: Test — LLM-writability contract (AC: 1)
|
|
75
|
-
|
|
76
|
-
- [ ] 3.1 Create `tests/knowledge-graph/fixtures/llm-seed.json` — a minimal valid `knowledge-graph.json` with exactly 1 node and 1 edge (following the exact schema structure from `architecture.md` Decision P3-1)
|
|
77
|
-
- [ ] 3.2 Create `tests/knowledge-graph/llm-writability.test.js`:
|
|
78
|
-
- **Test: copy-pattern extension produces valid JSON**
|
|
79
|
-
- Load `fixtures/llm-seed.json`
|
|
80
|
-
- Programmatically "extend" it by copying the pattern (add a new node entry and new edge entry following the exact same field structure)
|
|
81
|
-
- Write the extended JSON back to a temp file
|
|
82
|
-
- Call `emitToGraph(tmpDir, emptyEmission)` on the extended file — verify no errors thrown
|
|
83
|
-
- Verify total node/edge counts are correct
|
|
84
|
-
- **Test: valid structure can be round-tripped**
|
|
85
|
-
- Read `fixtures/llm-seed.json`, parse, serialize as `JSON.stringify(graph, null, 2)`, parse again — verify no data loss
|
|
86
|
-
|
|
87
|
-
### Task 4: Test — performance (AC: 4)
|
|
88
|
-
|
|
89
|
-
- [ ] 4.1 Add to `tests/knowledge-graph/emit.test.js`:
|
|
90
|
-
- **Test: large graph performance**
|
|
91
|
-
- Generate a fixture graph with 500 nodes and 1000 edges programmatically (use a helper function, not a fixture file — 500-node JSON fixture would be large)
|
|
92
|
-
- Write to temp dir
|
|
93
|
-
- Measure time of `emitToGraph()` adding 1 node and 1 edge
|
|
94
|
-
- Assert elapsed < 1000ms (using `Date.now()` before/after)
|
|
95
|
-
|
|
96
|
-
### Task 5: Test — full emission sequence (AC: 5)
|
|
97
|
-
|
|
98
|
-
- [ ] 5.1 Create `tests/knowledge-graph/sequence.test.js`:
|
|
99
|
-
- **Test: sequential emission produces correct final graph**
|
|
100
|
-
- Simulate the 7-skill emission sequence using `emitToGraph()` directly (no actual skills invoked — just the payloads each skill would emit)
|
|
101
|
-
- Use representative payloads:
|
|
102
|
-
1. PRD seeding: 3 PRD nodes, 0 edges
|
|
103
|
-
2. Architecture: 2 arch nodes, 2 `implements` edges to PRD nodes
|
|
104
|
-
3. Epics: 2 epic nodes, 2 `derives-from` edges + 1 `informed-by` edge
|
|
105
|
-
4. Story: 1 story node, 1 `traces-to` edge + 1 `informed-by` edge
|
|
106
|
-
5. Validate-prd: 1 validation node, 1 `validates` edge
|
|
107
|
-
6. Dev-story: 1 `refines` edge (story → arch)
|
|
108
|
-
7. Sprint-planning: 1 sprint node, 1 `derives-from` edge
|
|
109
|
-
- Verify final graph:
|
|
110
|
-
- `meta.node_count == 9` (3+2+2+1+1)
|
|
111
|
-
- `meta.edge_count == 8` (2+3+2+1+1) (approximately — adjust to actual test payload)
|
|
112
|
-
- All emitted nodes present
|
|
113
|
-
- All emitted edges present with correct provenance fields
|
|
114
|
-
|
|
115
|
-
### Task 6: Test — VSCode detection (AC — Story 19.5)
|
|
116
|
-
|
|
117
|
-
- [ ] 6.1 Create `tests/knowledge-graph/vscode-detection.test.js`:
|
|
118
|
-
- **Test: VSCODE_PID env var triggers VSCode path**
|
|
119
|
-
- Set `process.env.VSCODE_PID = "12345"` before running detection logic
|
|
120
|
-
- Verify detection returns `true`
|
|
121
|
-
- Restore `process.env` after test
|
|
122
|
-
- **Test: TERM_PROGRAM=vscode triggers VSCode path**
|
|
123
|
-
- Set `process.env.TERM_PROGRAM = "vscode"`
|
|
124
|
-
- Verify detection returns `true`
|
|
125
|
-
- **Test: neither env var set returns false**
|
|
126
|
-
- Ensure both env vars are unset; verify detection returns `false`
|
|
127
|
-
- Extract detection logic from `lib/bmad-extension/skills/open-graph/SKILL.md` into a testable helper function `lib/bmad-extension/skills/open-graph/detect-env.js`
|
|
128
|
-
|
|
129
|
-
## Dev Notes
|
|
130
|
-
|
|
131
|
-
### CRITICAL: Test Framework — Use Existing Pattern
|
|
132
|
-
|
|
133
|
-
Epic 7 (Test Suite Foundation) is on hold. Do NOT introduce Jest, Vitest, Mocha, or any new test framework. Check if any test files already exist in `tests/` and replicate their exact pattern.
|
|
134
|
-
|
|
135
|
-
If no test infrastructure exists: use Node.js built-in `node:test` module (available from Node.js 18+) and `node:assert`. This requires no npm installation.
|
|
136
|
-
|
|
137
|
-
Pattern to check first:
|
|
138
|
-
- Look for any `*.test.js` files in the repo
|
|
139
|
-
- Look for `test` script in `package.json`
|
|
140
|
-
|
|
141
|
-
### Prerequisite: All of Stories 19.1–19.6 Must Be Complete
|
|
142
|
-
|
|
143
|
-
This story validates the complete Epic 19 implementation. It depends on:
|
|
144
|
-
- `lib/knowledge-graph/emit.js` (Story 19.1)
|
|
145
|
-
- `lib/bmad-extension/skills/open-graph/` (Stories 19.5, 19.6)
|
|
146
|
-
|
|
147
|
-
### Test Directory Convention
|
|
148
|
-
|
|
149
|
-
Tests live in `tests/knowledge-graph/` following the expectation from the Epic 19 cross-epic notes. Temp directories for all file I/O in tests:
|
|
150
|
-
```javascript
|
|
151
|
-
import { mkdtempSync, rmSync } from 'node:fs';
|
|
152
|
-
import { join } from 'node:path';
|
|
153
|
-
import { tmpdir } from 'node:os';
|
|
154
|
-
|
|
155
|
-
let tmpDir;
|
|
156
|
-
setup(() => { tmpDir = mkdtempSync(join(tmpdir(), 'kg-test-')); });
|
|
157
|
-
teardown(() => { rmSync(tmpDir, { recursive: true, force: true }); });
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### LLM-Writability Fixture (Task 3)
|
|
161
|
-
|
|
162
|
-
The fixture `tests/knowledge-graph/fixtures/llm-seed.json` must be a minimal but complete example:
|
|
163
|
-
```json
|
|
164
|
-
{
|
|
165
|
-
"meta": {
|
|
166
|
-
"schema_version": "1.0",
|
|
167
|
-
"project": "test-project",
|
|
168
|
-
"generated_at": "2026-04-07T10:00:00Z",
|
|
169
|
-
"last_updated": "2026-04-07T10:00:00Z",
|
|
170
|
-
"file_count": 1,
|
|
171
|
-
"node_count": 1,
|
|
172
|
-
"edge_count": 1
|
|
173
|
-
},
|
|
174
|
-
"files": {
|
|
175
|
-
"prd": {
|
|
176
|
-
"pointer": "_bmad-output/planning-artifacts/prd.md",
|
|
177
|
-
"title": "Product Requirements Document",
|
|
178
|
-
"pointer_type": "relative_path"
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
|
-
"nodes": [
|
|
182
|
-
{
|
|
183
|
-
"id": "prd#functional-requirements",
|
|
184
|
-
"file": "prd",
|
|
185
|
-
"anchor": "functional-requirements",
|
|
186
|
-
"title": "Functional Requirements",
|
|
187
|
-
"type": "prd"
|
|
188
|
-
}
|
|
189
|
-
],
|
|
190
|
-
"edges": [
|
|
191
|
-
{
|
|
192
|
-
"from": "arch#decision-test",
|
|
193
|
-
"to": "prd#functional-requirements",
|
|
194
|
-
"type": "implements",
|
|
195
|
-
"label": "implements requirement",
|
|
196
|
-
"created_by": "test-user",
|
|
197
|
-
"agent": "test-agent",
|
|
198
|
-
"created_at": "2026-04-07T10:00:00Z"
|
|
199
|
-
}
|
|
200
|
-
]
|
|
201
|
-
}
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
This fixture is intentionally minimal so that an LLM reading it has exactly one example to copy.
|
|
205
|
-
|
|
206
|
-
### Performance Test Helper (Task 4)
|
|
207
|
-
|
|
208
|
-
Generate the 500-node / 1000-edge test graph programmatically:
|
|
209
|
-
```javascript
|
|
210
|
-
function generateLargeGraph(nodeCount, edgeCount) {
|
|
211
|
-
const nodes = Array.from({ length: nodeCount }, (_, i) => ({
|
|
212
|
-
id: `prd#node-${i}`, file: 'prd', anchor: `node-${i}`, title: `Node ${i}`, type: 'prd'
|
|
213
|
-
}));
|
|
214
|
-
const edges = Array.from({ length: edgeCount }, (_, i) => ({
|
|
215
|
-
from: `prd#node-${i % nodeCount}`,
|
|
216
|
-
to: `prd#node-${(i + 1) % nodeCount}`,
|
|
217
|
-
type: 'implements',
|
|
218
|
-
label: `edge ${i}`,
|
|
219
|
-
created_by: 'test', agent: 'test', created_at: new Date().toISOString()
|
|
220
|
-
}));
|
|
221
|
-
// ... build and write graph to temp dir
|
|
222
|
-
}
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
### `detect-env.js` Extraction (Task 6)
|
|
226
|
-
|
|
227
|
-
The VSCode detection logic from SKILL.md should be extracted to a testable Node.js module:
|
|
228
|
-
```javascript
|
|
229
|
-
// lib/bmad-extension/skills/open-graph/detect-env.js
|
|
230
|
-
function detectVSCode() {
|
|
231
|
-
return process.env.TERM_PROGRAM === 'vscode' || process.env.VSCODE_PID !== undefined;
|
|
232
|
-
}
|
|
233
|
-
module.exports = { detectVSCode };
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
This makes it importable by tests without executing the `execSync` open command.
|
|
237
|
-
|
|
238
|
-
### File Structure Created by This Story
|
|
239
|
-
|
|
240
|
-
```
|
|
241
|
-
tests/
|
|
242
|
-
└── knowledge-graph/
|
|
243
|
-
├── fixtures/
|
|
244
|
-
│ └── llm-seed.json ← NEW (LLM-writability test fixture)
|
|
245
|
-
├── emit.test.js ← NEW (additive semantics + performance tests)
|
|
246
|
-
├── llm-writability.test.js ← NEW (copy-pattern extension tests)
|
|
247
|
-
├── sequence.test.js ← NEW (full emission sequence test)
|
|
248
|
-
└── vscode-detection.test.js ← NEW (env var detection tests)
|
|
249
|
-
|
|
250
|
-
lib/bmad-extension/skills/open-graph/
|
|
251
|
-
└── detect-env.js ← NEW (extracted detection logic for testability)
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
### Project Structure Notes
|
|
255
|
-
|
|
256
|
-
- No SKILL.md files modified by this story.
|
|
257
|
-
- No new skills registered.
|
|
258
|
-
- The `detect-env.js` extraction from Story 19.5's SKILL.md is a minor refactor to enable testability.
|
|
259
|
-
- If no `tests/` directory exists, create it. Add a `test` script to `package.json` if one does not exist: `"test": "node --test tests/**/*.test.js"` (Node.js 18+ built-in runner).
|
|
260
|
-
|
|
261
|
-
### References
|
|
262
|
-
|
|
263
|
-
- Story 19.1: `_bmad-output/implementation-artifacts/19-1-knowledge-graph-core-library.md` — `emitToGraph()` behavior under test
|
|
264
|
-
- Architecture LLM-writability contract: `_bmad-output/planning-artifacts/architecture.md#llm-writability-contract-nfr39`
|
|
265
|
-
- Architecture additive-only semantics: `_bmad-output/planning-artifacts/architecture.md#nfr40-additive-only-emission`
|
|
266
|
-
- Epics cross-epic notes on testing: `_bmad-output/planning-artifacts/epics.md#epic-19--cross-epic-notes`
|
|
267
|
-
- NFRs: NFR39 (LLM-writability), NFR40 (additive-only)
|
|
268
|
-
- FR: FR152 (no duplicates, provenance preservation)
|
|
269
|
-
|
|
270
|
-
## Dev Agent Record
|
|
271
|
-
|
|
272
|
-
### Agent Model Used
|
|
273
|
-
|
|
274
|
-
_to be filled by dev agent_
|
|
275
|
-
|
|
276
|
-
### Debug Log References
|
|
277
|
-
|
|
278
|
-
### Completion Notes List
|
|
279
|
-
|
|
280
|
-
### File List
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
# Story 21.1: Install-Time Profile Prompt and Persistence
|
|
2
|
-
|
|
3
|
-
Status: done
|
|
4
|
-
|
|
5
|
-
## Story
|
|
6
|
-
|
|
7
|
-
As an **engineer running `npx ma-agents install`**,
|
|
8
|
-
I want the installer to ask whether this is an on-prem / air-gapped install once and remember my answer,
|
|
9
|
-
So that on-prem-specific guardrails activate without me having to remember a CLI flag, and I am not re-prompted on subsequent installs.
|
|
10
|
-
|
|
11
|
-
## Acceptance Criteria
|
|
12
|
-
|
|
13
|
-
1. A new module `lib/profile.js` exists exposing exactly three functions: `getProfile(projectRoot)`, `setProfile(projectRoot, value)`, `resolveProfile({ persisted, yesMode })`. No other public API.
|
|
14
|
-
2. `getProfile(projectRoot)` reads `.ma-agents.json` at project root and returns the value of the top-level `"profile"` field, or `undefined` if the file or field is absent. It does not throw on missing file.
|
|
15
|
-
3. `setProfile(projectRoot, value)` writes `"profile": <value>` to the top-level of `.ma-agents.json`, preserving all existing fields (`manifestVersion`, `agent`, `agents`, `scope`, `skills`). When the file does not exist, it is created via the existing `ensureManifest` path so the standard schema is initialized.
|
|
16
|
-
4. `setProfile` accepts only the values `"on-prem"` and `"standard"`. Any other value throws an `Error` naming the bad value.
|
|
17
|
-
5. `resolveProfile({ persisted, yesMode })` returns the effective profile per this precedence: (a) `persisted` if set; (b) `"standard"` if `yesMode === true`; (c) `null` (caller must prompt). It does not perform any I/O.
|
|
18
|
-
6. The interactive wizard in `bin/cli.js` shows a single `prompts({ type: 'select' })` question after agent selection (Step 2) and before repository-layout selection (Step 2.5), with message `Is this an on-prem / air-gapped install using a local LLM (e.g. Nemotron)?` and choices `Yes — apply local-LLM guardrails (recommended for non-Claude models)` (value `on-prem`) and `No — standard install (Claude on web, Anthropic API, etc.)` (value `standard`). Default initial selection is the `No` (standard) row.
|
|
19
|
-
7. The wizard prompt is shown only when `resolveProfile()` returns `null`. When a value is already persisted or `--yes` is passed, no prompt appears and the resolved value is logged once using one of the canonical formats: `Using profile: <value> (from .ma-agents.json)`, `Using profile: standard (from --yes default)`, or `Using profile: <value> (from wizard)`. These formats are pinned in architecture.md P3-3 and referenced by tests verbatim.
|
|
20
|
-
8. After the wizard prompt is answered (or after resolver returns a non-null value), `setProfile` is called with the resolved value before any agent installation runs — guaranteeing the profile is persisted even if a later install step fails.
|
|
21
|
-
9. Direct install command (`npx ma-agents install <skill> --agent <agent>`) respects `--yes`: `--yes` without a persisted value defaults to `standard` and persists; absence of `--yes` and no persisted value triggers the same prompt as the wizard when stdin is a TTY, and defaults silently to `standard` (same as `--yes`) when stdin is not a TTY.
|
|
22
|
-
10. CI/CD path: `npx ma-agents install --yes` with no persisted profile writes `"profile": "standard"` to `.ma-agents.json` and proceeds without prompting (NFR45).
|
|
23
|
-
11. Re-running install with a persisted profile does NOT re-prompt and does NOT change the persisted value (NFR45).
|
|
24
|
-
12. The existing `manifestVersion` value is bumped from `1.1.0` to `1.2.0` in `ensureManifest` to reflect the new `"profile"` field. Manifests at `1.1.0` (no `profile`) are read without error — the `"profile"` field is treated as optional and absent equals `undefined`. Writing to an existing `1.1.0` manifest via `setProfile` MIGRATES `manifestVersion` to `1.2.0` (the `profile` field is only valid under the 1.2.0 schema — carrying it on a 1.1.0 manifest would be schema drift). The migration is logged once per install: `Migrated .ma-agents.json manifestVersion 1.1.0 → 1.2.0`. Fresh manifests bootstrapped via `ensureManifest` start at `1.2.0` directly. NOTE: This migration behavior is a Step 2 follow-up code change (tracked separately); this AC documents the intended end state.
|
|
25
|
-
|
|
26
|
-
## Tasks / Subtasks
|
|
27
|
-
|
|
28
|
-
- [x] Task 1: Create `lib/profile.js` (AC: #1–#5)
|
|
29
|
-
- [x] 1.1 Create `lib/profile.js` with `'use strict'` and the three exports
|
|
30
|
-
- [x] 1.2 Implement `getProfile` reading via existing `readManifest`-style path; return `undefined` if file or field missing
|
|
31
|
-
- [x] 1.3 Implement `setProfile` with value validation; reuse `ensureManifest` to bootstrap the file when absent; preserve all other fields on write
|
|
32
|
-
- [x] 1.4 Implement `resolveProfile` as a pure function (no I/O) per the precedence in AC #5
|
|
33
|
-
|
|
34
|
-
- [x] Task 2: Add wizard prompt (AC: #6, #7, #8)
|
|
35
|
-
- [x] 2.1 In the wizard flow (cli.js:655–900), after Step 2 (agent selection, ~line 829) and before Step 2.5 (repository layout), call `resolveProfile({ persisted: getProfile(projectRoot), yesMode: yesFlag })`
|
|
36
|
-
- [x] 2.2 If the result is `null`, run the `prompts({ type: 'select' })` question per AC #6 (initial index = 1 for the "No" row)
|
|
37
|
-
- [x] 2.3 Log `Using profile: <value> (from <source>)` exactly once
|
|
38
|
-
- [x] 2.4 Call `setProfile(projectRoot, resolvedValue)` BEFORE any agent install step (AC #8)
|
|
39
|
-
|
|
40
|
-
- [x] Task 3: Direct install path parity (AC: #9, #10)
|
|
41
|
-
- [x] 3.1 Apply the same `resolveProfile` + prompt fallback logic in the direct-install path of `handleInstall`
|
|
42
|
-
- [x] 3.2 When stdin is not a TTY and resolver returns `null`, silently default to `standard` (same as `--yes`) and persist — do not abort
|
|
43
|
-
|
|
44
|
-
- [x] Task 4: Manifest version bump + back-compat (AC: #12)
|
|
45
|
-
- [x] 4.1 In `ensureManifest` (installer.js:64-70), change `manifestVersion: '1.1.0'` to `'1.2.0'`
|
|
46
|
-
- [x] 4.2 Existing files at `1.1.0` continue to load — do NOT migrate or rewrite the version on read; only writes through `setProfile` / `ensureManifest` produce `1.2.0`. A `1.1.0` file with no `profile` field is valid; `getProfile` returns `undefined`
|
|
47
|
-
|
|
48
|
-
- [x] Task 5: Unit tests in `test/profile.test.js` (covers all ACs)
|
|
49
|
-
- [x] 5.1 `getProfile` returns `undefined` when `.ma-agents.json` does not exist (AC #2)
|
|
50
|
-
- [x] 5.2 `getProfile` returns `undefined` when file exists but `profile` field is absent (AC #2, #12 back-compat)
|
|
51
|
-
- [x] 5.3 `getProfile` returns the persisted value when present (AC #2)
|
|
52
|
-
- [x] 5.4 `setProfile` creates the file with the standard schema when absent (AC #3)
|
|
53
|
-
- [x] 5.5 `setProfile` preserves existing fields (`manifestVersion`, `agent`, `agents`, `scope`, `skills`) when updating (AC #3)
|
|
54
|
-
- [x] 5.6 `setProfile` throws on invalid value with the bad value in the error message (AC #4)
|
|
55
|
-
- [x] 5.7 `resolveProfile` precedence — persisted wins over yes-default (AC #5)
|
|
56
|
-
- [x] 5.8 `resolveProfile` precedence — yes-default returns `standard` only when no persisted (AC #5)
|
|
57
|
-
- [x] 5.9 `resolveProfile` returns `null` when nothing is set and `yesMode === false` (AC #5)
|
|
58
|
-
- [x] 5.10 `resolveProfile` does not perform I/O (AC #5 — verified by spying on `fs`)
|
|
59
|
-
- [x] 5.11 Round-trip: `setProfile('on-prem')` then `getProfile()` returns `'on-prem'` (AC #2/#3)
|
|
60
|
-
- [x] 5.12 Re-running `setProfile` with same value is idempotent (file content byte-identical except potentially `installedAt` if other fields update — but profile field stable)
|
|
61
|
-
|
|
62
|
-
- [ ] Task 6: Integration test in `test/onprem-injection.test.js` (deferred to Story 21.9 — list as TODO here, do not implement)
|
|
63
|
-
|
|
64
|
-
## Dev Notes
|
|
65
|
-
|
|
66
|
-
### Architecture Compliance
|
|
67
|
-
|
|
68
|
-
- **Decision P3-3** (Local-LLM / On-Prem Agent Tuning Profile) — this story implements the `lib/profile.js` module and the install-time prompt. Stories 21.2–21.7 consume `getProfile()` to gate content. Stories 21.8 (docs) and 21.9 (tests) close the epic.
|
|
69
|
-
- **NFR45** (CI/CD compatibility) — `--yes` defaults to `standard`; non-TTY direct installs silently default to `standard`; persisted answer is not re-prompted.
|
|
70
|
-
- **NFR44** (profile isolation) — `setProfile` is the only mutator; no other code path writes the `profile` field. Standard profile installs must produce no on-prem-specific output (verified in Story 21.9).
|
|
71
|
-
|
|
72
|
-
### Source Tree Components to Touch
|
|
73
|
-
|
|
74
|
-
| File | Change |
|
|
75
|
-
|------|--------|
|
|
76
|
-
| `lib/profile.js` | CREATE — `getProfile`, `setProfile`, `resolveProfile` |
|
|
77
|
-
| `lib/installer.js` | MODIFY — `manifestVersion` bump 1.1.0 → 1.2.0 in `ensureManifest` (line ~64-70) |
|
|
78
|
-
| `bin/cli.js` | MODIFY — wizard prompt insertion after Step 2 (line ~829); direct-install path resolution in `handleInstall` |
|
|
79
|
-
| `test/profile.test.js` | CREATE — unit tests per Task 6 |
|
|
80
|
-
|
|
81
|
-
### Library and Pattern References
|
|
82
|
-
|
|
83
|
-
- Prompts library: **`prompts`** (npm) — same as everywhere else in the wizard. Existing example to mirror: `lib/installer.js:625-631` (the repo-layout `select` prompt).
|
|
84
|
-
- Manifest read/write: reuse `readManifest` / `writeManifest` / `ensureManifest` in `lib/installer.js:23-70`. Do not create a parallel JSON-IO path. `setProfile` may import these or, if circular-import risk exists, replicate the minimal write pattern (`fs.writeFileSync(path, JSON.stringify(obj, null, 2) + '\n', 'utf-8')`).
|
|
85
|
-
- Flag parsing site: `bin/cli.js:170-176`. No new flag is added — profile is resolved from persisted state or `--yes` default only.
|
|
86
|
-
|
|
87
|
-
### Wizard Insertion Point
|
|
88
|
-
|
|
89
|
-
Per the explore report, wizard step order is:
|
|
90
|
-
- Step 0: Existing installation check (~668)
|
|
91
|
-
- Step 1: Skill selection (~737)
|
|
92
|
-
- Step 2: Agent selection (IDE + BMAD multiselects, ~776–804)
|
|
93
|
-
- **Step 2.4 (NEW): Profile prompt** ← insert here
|
|
94
|
-
- Step 2.5: Repository layout (~829)
|
|
95
|
-
- Step 3: Installation scope (~832)
|
|
96
|
-
|
|
97
|
-
Place the call so that the profile is resolved and persisted BEFORE repo-layout because future stories may want to gate layout-related guidance on profile (out of scope for this story, but the order is correct).
|
|
98
|
-
|
|
99
|
-
### `.ma-agents.json` Example After This Story
|
|
100
|
-
|
|
101
|
-
Standard profile, fresh install:
|
|
102
|
-
|
|
103
|
-
```json
|
|
104
|
-
{
|
|
105
|
-
"manifestVersion": "1.2.0",
|
|
106
|
-
"agent": "claude-code",
|
|
107
|
-
"agents": ["claude-code"],
|
|
108
|
-
"scope": "project",
|
|
109
|
-
"profile": "standard",
|
|
110
|
-
"skills": {}
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
On-prem profile after install:
|
|
115
|
-
|
|
116
|
-
```json
|
|
117
|
-
{
|
|
118
|
-
"manifestVersion": "1.2.0",
|
|
119
|
-
"agent": "claude-code",
|
|
120
|
-
"agents": ["claude-code", "roo-code"],
|
|
121
|
-
"scope": "project",
|
|
122
|
-
"profile": "on-prem",
|
|
123
|
-
"skills": { "...": "..." }
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### Out of Scope for This Story
|
|
128
|
-
|
|
129
|
-
- Per-tool template content (Stories 21.2–21.5)
|
|
130
|
-
- On-prem layered guardrail content (Story 21.6)
|
|
131
|
-
- BMAD persona phase prefix (Story 21.7)
|
|
132
|
-
- vLLM deployment doc (Story 21.8)
|
|
133
|
-
- Integration test asserting standard vs on-prem produces correct injection content (Story 21.9)
|
|
134
|
-
|
|
135
|
-
This story is foundation only: prompt + persistence + read API. Downstream stories consume `getProfile(projectRoot)` and branch on its value.
|
|
136
|
-
|
|
137
|
-
### Testing Standards
|
|
138
|
-
|
|
139
|
-
Match the existing test layout in `test/` (mocha-style or node:test — verify by reading one existing test file first). Place `test/profile.test.js` next to `test/generate-project-context.test.js`. All tests must run as part of `npm test`. Use a temporary directory per test (e.g., `os.tmpdir()` + `fs.mkdtempSync`) to isolate `.ma-agents.json` reads/writes — never mutate the repo's own `.ma-agents.json`.
|
|
140
|
-
|
|
141
|
-
### Epic 21 Cross-Story Context
|
|
142
|
-
|
|
143
|
-
**Story 21.1 (this):** Profile prompt + `lib/profile.js` API + persistence. No template content yet.
|
|
144
|
-
**Story 21.2:** Universal instruction-block expansion (consumes `getProfile` indirectly via installer composition function).
|
|
145
|
-
**Stories 21.3–21.5:** Per-tool templates (`.roomodes`, `AGENTS.md`, `.clinerules`).
|
|
146
|
-
**Story 21.6:** On-prem layered guardrails — first story that branches behavior on `profile === 'on-prem'`.
|
|
147
|
-
**Story 21.7:** BMAD persona phase prefix in customize-loader.
|
|
148
|
-
**Story 21.8:** vLLM reference doc + README on-prem section.
|
|
149
|
-
**Story 21.9:** Tests covering NFR44, NFR46, NFR47 (integration-level).
|
|
150
|
-
|
|
151
|
-
## Dev Agent Record
|
|
152
|
-
|
|
153
|
-
### Agent Model Used
|
|
154
|
-
Claude Opus 4.6 (1M context) — bmad-dev-story + bmad-code-review flow.
|
|
155
|
-
|
|
156
|
-
### Debug Log References
|
|
157
|
-
- Initial `npm test` run hit a pre-existing `bmad-version-bump` failure in the worktree due to missing `node_modules/bmad-method/package.json`. Resolved by running `npm install` in the worktree; not related to this story's changes.
|
|
158
|
-
- Self-review finding (Cynical Review layer): initial implementation used `installPath` (the custom skills install target) as the project root for `.ma-agents.json` in the wizard path, which is wrong — `.ma-agents.json` lives at `process.cwd()`, not the skills install dir. Corrected before opening the PR.
|
|
159
|
-
|
|
160
|
-
### Completion Notes List
|
|
161
|
-
- `lib/profile.js` exposes exactly the three required functions (`getProfile`, `setProfile`, `resolveProfile`). `resolveProfile` is pure — verified by fs-spy test (6.11).
|
|
162
|
-
- `lib/installer.js`: bumped `MANIFEST_VERSION` from `1.1.0` → `1.2.0`; added `ensureManifest` to `module.exports` so `setProfile` can bootstrap fresh manifests without duplicating JSON-IO logic.
|
|
163
|
-
- `bin/cli.js`: Both wizard and direct-install paths call `setProfile` BEFORE any agent install step (AC #8) and log `Using profile: <value> (from <source>)` exactly once. No CLI flag is introduced — profile is sourced from persisted `.ma-agents.json` or the `--yes` default.
|
|
164
|
-
- Wizard insertion point is "Step 2.4" — after agent selection, before repo-layout (matches story spec). Direct-install path silently defaults to `standard` when stdin is not a TTY (mirrors `--yes`) rather than aborting.
|
|
165
|
-
- Manifest back-compat: reads never migrate the version. A 1.1.0 file without `profile` reads as `undefined`; writing `setProfile` onto an existing 1.1.0 manifest adds the `profile` field while preserving the original `manifestVersion`. Fresh manifests created through `ensureManifest` are initialized at 1.2.0.
|
|
166
|
-
- Task 6 (integration test) intentionally left unchecked — explicitly deferred to Story 21.9 per spec.
|
|
167
|
-
|
|
168
|
-
### File List
|
|
169
|
-
- CREATED: `lib/profile.js`
|
|
170
|
-
- CREATED: `test/profile.test.js` (14 unit tests, all passing)
|
|
171
|
-
- MODIFIED: `lib/installer.js` (manifest version bump; export `ensureManifest`)
|
|
172
|
-
- MODIFIED: `bin/cli.js` (wizard Step 2.4 profile prompt; direct-install profile resolution with non-TTY standard default)
|
|
173
|
-
- MODIFIED: `package.json` (added `test/profile.test.js` to npm test script)
|
|
174
|
-
|
|
175
|
-
## Change Log
|
|
176
|
-
- 2026-04-14: Story created (Epic 21, Story 21.1)
|
|
177
|
-
- 2026-04-14: Story 21.1 implemented — `lib/profile.js` + install-time prompt + manifest 1.2.0 bump; status moved ready-for-dev → review.
|
|
178
|
-
- 2026-04-13: Spec correction — `--profile=` CLI flag removed (never wanted); `resolveProfile` reduced to 2-arg `{ persisted, yesMode }`; direct-install non-TTY path now defaults to `standard` silently instead of aborting. AC count reduced 14 → 11.
|
|
179
|
-
- 2026-04-14: Story delivered via PR #32 (feature/story-21-1-install-time-profile). Status → done. Dev Notes aligned with no-flag correction (removed stale `--profile=` references in Architecture Compliance, Source Tree Components, Library and Pattern References).
|
|
180
|
-
- 2026-04-14: AC #12 clarified — `setProfile` on 1.1.0 manifest migrates to 1.2.0 (no schema drift). Migration implementation tracked as Step 2 follow-up (separate PR).
|
|
181
|
-
- 2026-04-14: AC #7 log-string enum expanded to match canonical formats pinned in architecture.md P3-3 ("from wizard" source added).
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
# Story 21.10: Profile Reconfigure
|
|
2
|
-
|
|
3
|
-
Status: Review
|
|
4
|
-
|
|
5
|
-
## Story
|
|
6
|
-
|
|
7
|
-
As an **engineer who needs to change a previously-persisted profile**,
|
|
8
|
-
I want a `ma-agents reconfigure` subcommand that re-runs the profile prompt and re-stamps all profile-dependent artifacts,
|
|
9
|
-
So that a CI-default `standard` profile or a mistaken interactive answer can be corrected without hand-editing `.ma-agents.json`.
|
|
10
|
-
|
|
11
|
-
## Acceptance Criteria
|
|
12
|
-
|
|
13
|
-
1. A new CLI subcommand `npx ma-agents reconfigure` exists. It accepts no positional arguments and the usual flags where relevant (`--yes`, scope flags if present — see AC #6 for `--yes` handling). Running it in a project without `.ma-agents.json` exits with a named error and a hint to run `install` first — it does NOT silently bootstrap a manifest, because reconfigure presumes a prior install.
|
|
14
|
-
2. `reconfigure` shows the same profile-selection prompt Story 21.1's wizard shows, but with the currently-persisted value as the default highlighted option. The prompt text references the current value: `Current profile: <value>. Change to?`.
|
|
15
|
-
3. After the user picks a value (or confirms the existing one), `reconfigure` writes the resolved value via `setProfile` (reusing `lib/profile.js` unchanged). Logging follows the canonical log-string formats pinned in architecture.md P3-3 — the source of the write is `wizard` for this command (matching the `(from wizard)` suffix used by the install wizard).
|
|
16
|
-
4. If the newly-resolved profile equals the previously-persisted value, `reconfigure` reports `Profile unchanged: <value>. No re-stamp needed.` and exits 0 without touching any files.
|
|
17
|
-
5. If the profile CHANGED, `reconfigure` re-stamps ALL profile-dependent artifacts:
|
|
18
|
-
- The instruction-block-injection files (`CLAUDE.md`, `.clinerules`, `.cline/clinerules.md`, `.roo/rules/00-ma-agents.md`, `AGENTS.md`)
|
|
19
|
-
- The `.roomodes` file (per-mode `customInstructions`)
|
|
20
|
-
- The BMAD customize-loader output (if Story 21.7 has landed — if it has not, this bullet is a no-op and the Task 3 subitems are skipped)
|
|
21
|
-
Implementation strategy: reuse the exact injection functions the installer uses; do NOT fork logic.
|
|
22
|
-
6. `reconfigure` with `--yes` is explicitly rejected: the command exits nonzero with the message `--yes is not valid for reconfigure — this command is interactive by design to prevent accidental CI-triggered profile changes.` Rationale: Finding #5 is that CI quietly persists `standard`; we must not allow CI to silently flip profiles in either direction.
|
|
23
|
-
7. Before re-stamping, `reconfigure` prints the list of files that will be modified and asks for a single yes/no confirmation: `The following files will be updated to match profile=<new>: [list]. Continue?`. This is in addition to the profile-selection prompt in AC #2 — two-step confirmation for destructive scope.
|
|
24
|
-
8. `reconfigure` backs up each to-be-overwritten marker-block region to `<target>.backup-<ISO-timestamp>` before re-stamping. Same backup convention as Story 21.2 AC #8 — reuse if already implemented.
|
|
25
|
-
9. `reconfigure` respects Story 21.3 AC #9 slug-stomp protection: if user-edited ma-agents-owned `.roomodes` slugs are detected, the command aborts with the same `RoomodesSlugDivergenceError` and instructs the user to either rename the slug or pass `--force-roomodes-overwrite`. `--force-roomodes-overwrite` IS honored by `reconfigure` (unlike `--yes`) because it is a deliberate, user-supplied override.
|
|
26
|
-
10. `reconfigure` respects Story 21.5 AC #6 `.clinerules` dual-file drift detection: if the two Cline rule files (`.clinerules` and `.cline/clinerules.md`) have divergent marker-block content, the command aborts with `ClinerulesDualFileDriftError`. The user reconciles manually before retrying. No override flag is provided for this case.
|
|
27
|
-
11. A new log event is appended to `.ma-agents.json::profileHistory` (new field, append-only, capped at 20 entries — oldest entries dropped first when the cap is reached): `{ date: <ISO>, from: <previous>, to: <new>, source: "reconfigure" }`. The field is created on first reconfigure; a missing field on read means no prior reconfigure event. Gives operators a forensic trail for "when did this project's profile last change, and from what?"
|
|
28
|
-
|
|
29
|
-
## Tasks / Subtasks
|
|
30
|
-
|
|
31
|
-
- [ ] Task 1: Register `reconfigure` subcommand in `bin/cli.js` (AC: #1, #6)
|
|
32
|
-
- [ ] 1.1 Add `reconfigure` case to the top-level command dispatcher
|
|
33
|
-
- [ ] 1.2 Reject `--yes` with the pinned error message per AC #6 (exit nonzero)
|
|
34
|
-
- [ ] 1.3 When `.ma-agents.json` is absent, exit with a named error and a hint to run `install` first (AC #1)
|
|
35
|
-
- [ ] 1.4 Route to the new `lib/reconfigure.js` orchestrator
|
|
36
|
-
|
|
37
|
-
- [ ] Task 2: Create `lib/reconfigure.js` orchestrator (AC: #2, #3, #4, #7)
|
|
38
|
-
- [ ] 2.1 Load persisted profile via `getProfile()`; abort if absent (AC #1)
|
|
39
|
-
- [ ] 2.2 Show profile-selection prompt with persisted value as default (AC #2)
|
|
40
|
-
- [ ] 2.3 If resolved value equals persisted value, log `Profile unchanged: <value>. No re-stamp needed.` and exit 0 (AC #4)
|
|
41
|
-
- [ ] 2.4 Otherwise, compute the list of files that will be touched; print the list and ask the `Continue?` confirmation (AC #7)
|
|
42
|
-
- [ ] 2.5 Call `setProfile(projectRoot, newValue)` and log via the canonical `Using profile: <value> (from wizard)` format (AC #3)
|
|
43
|
-
|
|
44
|
-
- [ ] Task 3: Re-stamp orchestration (AC: #5)
|
|
45
|
-
- [ ] 3.1 Reuse the injection helpers from `lib/installer.js` for the 5 instruction-block-injection files
|
|
46
|
-
- [ ] 3.2 Reuse the `.roomodes` merger from `lib/merge/roomodes.js` (Story 21.3) for `customInstructions`
|
|
47
|
-
- [ ] 3.3 If Story 21.7 has landed, invoke the BMAD customize-loader re-stamp; otherwise skip (documented as conditional)
|
|
48
|
-
- [ ] 3.4 Ensure zero duplication with installer stamping logic — do NOT fork
|
|
49
|
-
|
|
50
|
-
- [ ] Task 4: Backup step (AC: #8)
|
|
51
|
-
- [ ] 4.1 Before each overwrite, capture the current marker-block region and write to `<target>.backup-<ISO-timestamp>`
|
|
52
|
-
- [ ] 4.2 Use UTC ISO format for the timestamp (stable across locales)
|
|
53
|
-
- [ ] 4.3 Reuse Story 21.2 backup helper if present; otherwise implement inline and note the refactor opportunity
|
|
54
|
-
|
|
55
|
-
- [ ] Task 5: Slug-stomp protection integration (AC: #9)
|
|
56
|
-
- [ ] 5.1 Before touching `.roomodes`, run the Story 21.3 AC #9 slug-divergence check
|
|
57
|
-
- [ ] 5.2 On divergence, throw `RoomodesSlugDivergenceError` with a message instructing rename or `--force-roomodes-overwrite`
|
|
58
|
-
- [ ] 5.3 Honor `--force-roomodes-overwrite` when supplied — user-supplied override is allowed
|
|
59
|
-
|
|
60
|
-
- [ ] Task 6: Clinerules dual-file drift detection (AC: #10)
|
|
61
|
-
- [ ] 6.1 Before touching Cline rule files, compare the marker-block content of `.clinerules` and `.cline/clinerules.md`
|
|
62
|
-
- [ ] 6.2 On divergence, throw `ClinerulesDualFileDriftError` with a message pointing the user at both files; no override flag
|
|
63
|
-
|
|
64
|
-
- [ ] Task 7: `profileHistory` append (AC: #11)
|
|
65
|
-
- [ ] 7.1 After a successful re-stamp, append `{ date, from, to, source: "reconfigure" }` to `.ma-agents.json::profileHistory`
|
|
66
|
-
- [ ] 7.2 Create the field on first use; cap at 20 entries (drop oldest first)
|
|
67
|
-
- [ ] 7.3 Ensure the write goes through `setProfile` or an equivalent atomic write path (no parallel JSON-IO)
|
|
68
|
-
|
|
69
|
-
- [ ] Task 8: Tests in `test/reconfigure.test.js` (covers all ACs)
|
|
70
|
-
- [ ] 8.1 `--yes` is rejected with pinned message and nonzero exit (AC #6)
|
|
71
|
-
- [ ] 8.2 Missing `.ma-agents.json` exits with named error (AC #1)
|
|
72
|
-
- [ ] 8.3 Same-value confirmation exits with `Profile unchanged:` and no file writes (AC #4)
|
|
73
|
-
- [ ] 8.4 Profile change from `standard` to `on-prem` re-stamps all injection files + `.roomodes` (AC #5)
|
|
74
|
-
- [ ] 8.5 Two-step confirmation — selecting "no" at the `Continue?` prompt aborts with zero file changes (AC #7)
|
|
75
|
-
- [ ] 8.6 Backup files created at `<target>.backup-<ISO-timestamp>` before each overwrite (AC #8)
|
|
76
|
-
- [ ] 8.7 Slug divergence raises `RoomodesSlugDivergenceError`; `--force-roomodes-overwrite` bypasses (AC #9)
|
|
77
|
-
- [ ] 8.8 Dual-file drift raises `ClinerulesDualFileDriftError`; no override flag (AC #10)
|
|
78
|
-
- [ ] 8.9 `profileHistory` append — first reconfigure creates the field; subsequent reconfigures append; cap at 20 drops oldest (AC #11)
|
|
79
|
-
|
|
80
|
-
## Dev Notes
|
|
81
|
-
|
|
82
|
-
### Architecture Compliance
|
|
83
|
-
|
|
84
|
-
- **Decision P3-3** (Local-LLM / On-Prem Agent Tuning Profile) — `reconfigure` extends the profile API established in Story 21.1 without changing `lib/profile.js`'s public contract. The three exports stay exactly as defined in Story 21.1 AC #1: `getProfile`, `setProfile`, `resolveProfile`. `reconfigure` is a new consumer, not a new API.
|
|
85
|
-
- **NFR44** (profile isolation) — standard-profile output must remain free of on-prem strings after a `reconfigure` that lands on `standard`. Reuse of the installer's injection helpers (AC #5) is what guarantees this — forked re-stamp logic would risk drift.
|
|
86
|
-
- **NFR45** (CI/CD compatibility) — `reconfigure` is *deliberately* incompatible with CI (`--yes` blocked per AC #6). This is not a regression of NFR45; NFR45 covers `install`, not `reconfigure`. CI never needs to call `reconfigure`; profile changes are a human, interactive act.
|
|
87
|
-
- **NFR46** (idempotency) — after `reconfigure`, running `install` with the same profile must produce byte-identical output. Verified in Task 8 by running `install` after `reconfigure` and diffing marker-block regions.
|
|
88
|
-
|
|
89
|
-
### Source Tree Components to Touch
|
|
90
|
-
|
|
91
|
-
| File | Change |
|
|
92
|
-
|------|--------|
|
|
93
|
-
| `bin/cli.js` | MODIFY — register `reconfigure` subcommand; route to new handler |
|
|
94
|
-
| `lib/reconfigure.js` | CREATE — orchestrates prompt → confirmation → backup → re-stamp → history append |
|
|
95
|
-
| `lib/installer.js` | MINOR — export injection functions currently internal if `reconfigure` needs to call them directly (avoid duplication) |
|
|
96
|
-
| `lib/profile.js` | UNCHANGED — `setProfile` already does the right thing post-Step 2 of the corrective plan |
|
|
97
|
-
| `test/reconfigure.test.js` | CREATE |
|
|
98
|
-
|
|
99
|
-
### Library and Pattern References
|
|
100
|
-
|
|
101
|
-
- Prompts library: **`prompts`** (npm) — same as the Story 21.1 wizard. Reuse the exact prompt shape; override only the `initial` index (to highlight the currently-persisted value) and the message text (`Current profile: <value>. Change to?`).
|
|
102
|
-
- Injection helpers: reuse from `lib/installer.js` for the 5 instruction-block-injection files; reuse from `lib/merge/roomodes.js` (Story 21.3) for `.roomodes`.
|
|
103
|
-
- `setProfile` from `lib/profile.js` — unchanged public contract.
|
|
104
|
-
- Backup naming convention: `<target>.backup-<ISO-timestamp>` per Story 21.2 AC #8.
|
|
105
|
-
- Error class names must match upstream exactly: `RoomodesSlugDivergenceError` (Story 21.3 AC #9), `ClinerulesDualFileDriftError` (Story 21.5 AC #6).
|
|
106
|
-
|
|
107
|
-
### Out of Scope
|
|
108
|
-
|
|
109
|
-
- Profile migration / data migration — none required. `.ma-agents.json` schema already has the `profile` field (Story 21.1 AC #12). Only the new optional `profileHistory` field is added; its absence is valid.
|
|
110
|
-
- Programmatic re-stamp without a human — explicitly forbidden by AC #6. `--yes` is blocked.
|
|
111
|
-
- Changing `lib/profile.js`'s public API — Story 21.1 AC #1 pinned three exports; `reconfigure` is a consumer, not a modifier.
|
|
112
|
-
- Auto-rollback on failed re-stamp — out of scope for this story; failures surface as errors and leave the backup files available for manual recovery. A future story may add transactional re-stamp.
|
|
113
|
-
|
|
114
|
-
### Testing Standards
|
|
115
|
-
|
|
116
|
-
Match the existing test layout (node:test or mocha-style — verify by reading one existing test file first). Place `test/reconfigure.test.js` next to `test/profile.test.js`. All tests must run as part of `npm test`. Use `fs.mkdtempSync(os.tmpdir() + ...)` per test to isolate `.ma-agents.json` reads/writes — never mutate the repo's own `.ma-agents.json` or instruction files. Mock `prompts` for deterministic test runs (the installer tests already do this — reuse the pattern).
|
|
117
|
-
|
|
118
|
-
### Epic 21 Cross-Story Context
|
|
119
|
-
|
|
120
|
-
**Story 21.10 (this):** Reconfigure subcommand — escape hatch for a previously-persisted profile. Depends on Stories 21.1 (profile API), 21.2 (marker injection + backup convention), 21.3 (slug-stomp protection), 21.4 (`AGENTS.md` template + `markdown-markers` merger — re-stamped on profile flip), 21.5 (dual-file drift detection), 21.6 (on-prem layer composition — the actual content being re-stamped), 21.7 (BMAD persona `on_prem_phase_prefix` — re-composed when profile flips, per Task 3.3). Runs after 21.6 in the execution order; must exist before 21.9's end-to-end tests so the round-trip test (21.9 AC #1 (f)) can exercise the real command instead of manual `.ma-agents.json` edits.
|
|
121
|
-
|
|
122
|
-
## Dev Agent Record
|
|
123
|
-
|
|
124
|
-
### Agent Model Used
|
|
125
|
-
Claude Opus 4.6 (1M context) — bmad-dev-story flow.
|
|
126
|
-
|
|
127
|
-
### Debug Log References
|
|
128
|
-
- `.roomodes` slug-divergence comparison deliberately strips `customInstructions` because installed files already carry the profile-composed universal block; a profile flip legitimately rewrites that field. `whenToUse`, `roleDefinition`, `groups`, `name` are the user-editable surfaces the check catches. Documented inline in `lib/reconfigure.js::checkRoomodesSlugDivergence`.
|
|
129
|
-
- `updateAgentInstructions` is invoked with `yesMode: true` from the reconfigure loop so per-file drift prompts do not re-ask after the global `Continue?` confirmation (AC #7). The installer's `handleMarkerBlockDrift` still emits the pinned WARNING line and writes the canonical `<target>.backup-<ISO>` sibling (AC #8).
|
|
130
|
-
- `appendProfileHistory` does a fresh read-modify-write of `.ma-agents.json` so it composes with `setProfile`'s write — no parallel JSON-IO path. Cap enforcement is `shift()`-based (oldest-first eviction).
|
|
131
|
-
|
|
132
|
-
### Completion Notes List
|
|
133
|
-
- New `lib/reconfigure.js` orchestrator exports `reconfigure({ projectRoot, argv, promptsLib, now })` plus three named error classes (`RoomodesSlugDivergenceError`, `ManifestNotFoundError`, `ReconfigureYesRejectedError`) and the `PROFILE_HISTORY_CAP` constant (20).
|
|
134
|
-
- `bin/cli.js` registers the `reconfigure` verb and routes to `handleReconfigure`, which maps each error class to a user-facing exit(1) message. `--yes` on reconfigure exits nonzero with the pinned message verbatim (AC #6).
|
|
135
|
-
- Re-stamp reuses the canonical `updateAgentInstructions` path from `lib/installer.js`; zero forked logic. Backups are produced by the installer's existing drift handler using the canonical `buildBackupFilename` helper owned by Story 21.2.
|
|
136
|
-
- `checkRoomodesSlugDivergence` throws `RoomodesSlugDivergenceError` when any ma-agents-owned slug present in the existing `.roomodes` differs from the shipped template on non-customInstructions fields; `--force-roomodes-overwrite` bypasses the check (AC #9). `.clinerules` dual-file drift is delegated to Story 21.5's `checkClinerulesDualFileDrift` (no override, AC #10).
|
|
137
|
-
- `profileHistory` append uses a fresh read-modify-write that composes with `setProfile`'s write — capped at 20, oldest-first eviction (AC #11). Missing-field start is handled (first reconfigure creates the array).
|
|
138
|
-
- Prompt shape mirrors Story 21.1's wizard prompt (same two choices) but with `initial` set to the persisted value's row and the message `Current profile: <value>. Change to?` per AC #2.
|
|
139
|
-
|
|
140
|
-
### Adversarial Review Findings
|
|
141
|
-
|
|
142
|
-
| # | Layer | Severity | Finding | Disposition |
|
|
143
|
-
|---|-------|----------|---------|-------------|
|
|
144
|
-
| 1 | Cynical | P1 | setProfile runs BEFORE re-stamp loop; mid-flight re-stamp failure leaves profile+artifacts out of sync | Accepted — story explicitly lists "Auto-rollback" as out of scope; `profileHistory` append is gated on full loop success so forensic log does not falsely record a partial reconfigure |
|
|
145
|
-
| 2 | Cynical | P2 | `--yes` detection is string-includes on argv; benign for reconfigure (no positional args) | Accepted — same pattern as installer; reconfigure AC #1 forbids positional args |
|
|
146
|
-
| 3 | Edge-case | P1 | Slug-divergence check drops `customInstructions` from the compare | Correct by design — installer-stamped `customInstructions` carries the composed block which legitimately changes per profile; other fields remain user-edit detectors. Test 8.7 exercises `whenToUse` drift |
|
|
147
|
-
| 4 | Cynical | P2 | `appendProfileHistory` is read-modify-write, not atomic rename | Accepted — matches `setProfile`'s write pattern; reconfigure is interactive-only so concurrency isn't a realistic vector |
|
|
148
|
-
| 5 | Edge-case | P2 | Same-value short-circuit when `persistedProfile === undefined` requires user to pick a value; cannot short-circuit to undefined | Accepted — prompt choices are `on-prem` | `standard` only; chosenProfile is always a concrete value |
|
|
149
|
-
| 6 | Edge-case | P2 | No help-text doc for `--force-roomodes-overwrite` | **Fixed** — added Reconfigure options block in `showHelp()` |
|
|
150
|
-
|
|
151
|
-
### File List
|
|
152
|
-
- CREATED: `lib/reconfigure.js`
|
|
153
|
-
- CREATED: `test/reconfigure.test.js` (12 tests, all passing)
|
|
154
|
-
- MODIFIED: `bin/cli.js` (new `reconfigure` case + `handleReconfigure` + help text)
|
|
155
|
-
- MODIFIED: `package.json` (added `test/reconfigure.test.js` to npm test script)
|
|
156
|
-
- MODIFIED: `_bmad-output/implementation-artifacts/21-10-profile-reconfigure.md` (Dev Agent Record / File List / Change Log)
|
|
157
|
-
|
|
158
|
-
## Change Log
|
|
159
|
-
- 2026-04-15: Story 21.10 implemented — reconfigure CLI verb + orchestrator + slug/dual-file guards + profileHistory append. Status ready-for-dev → review.
|
|
160
|
-
- 2026-04-15: Upstream dependency list completed per adversarial-review finding — added Stories 21.4 (`AGENTS.md` re-stamping surface), 21.7 (BMAD persona phase prefix re-composition). Restores Dependencies bidirectionality with those stories' downstream lists.
|
|
161
|
-
- 2026-04-14: Story created (Epic 21, Story 21.10). Closes adversarial-review Findings #5 and #7 (no escape hatch for persisted profile; CI-default silent-downgrade trap).
|