ma-agents 3.4.9 → 3.5.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/AiAudit.md +7 -0
- package/README.md +78 -29
- package/_bmad-output/implementation-artifacts/17-10-rework-generate-backlog.md +237 -0
- package/_bmad-output/implementation-artifacts/17-11-rework-add-to-sprint.md +339 -0
- package/_bmad-output/implementation-artifacts/17-12-rework-remove-from-sprint.md +348 -0
- package/_bmad-output/implementation-artifacts/17-13-rework-sprint-status-view.md +383 -0
- package/_bmad-output/implementation-artifacts/17-14-rework-cleanup-done.md +348 -0
- package/_bmad-output/implementation-artifacts/17-15-rework-bmad-sprint-planning.md +385 -0
- package/_bmad-output/implementation-artifacts/17-16-rework-add-sprint.md +362 -0
- package/_bmad-output/implementation-artifacts/17-17-rework-modify-sprint.md +477 -0
- package/_bmad-output/implementation-artifacts/17-18-rework-bmad-dev-story.md +377 -0
- package/_bmad-output/implementation-artifacts/17-19-rework-story-status-lookup.md +301 -0
- package/_bmad-output/implementation-artifacts/17-20-rework-bmad-sprint-status.md +508 -0
- package/_bmad-output/implementation-artifacts/17-21-new-close-sprint.md +455 -0
- package/_bmad-output/implementation-artifacts/17-22-jira-adapter-pattern.md +325 -0
- package/_bmad-output/implementation-artifacts/17-23-migration-deprecation-old-files.md +403 -0
- package/_bmad-output/implementation-artifacts/17-24-rework-prioritize-backlog.md +344 -0
- package/_bmad-output/implementation-artifacts/17-9-unified-sprint-status-schema.md +279 -0
- package/_bmad-output/implementation-artifacts/4-1-vs-agent-registry-entry.md +173 -0
- package/_bmad-output/implementation-artifacts/4-2-vs-skill-template-format.md +129 -0
- package/_bmad-output/implementation-artifacts/5-5-explicit-parameter-passing.md +274 -0
- package/_bmad-output/implementation-artifacts/5-6-fix-space-in-path-bug.md +186 -0
- package/_bmad-output/implementation-artifacts/7-1-test-infrastructure-setup.md +144 -0
- package/_bmad-output/implementation-artifacts/7-2-installer-pipeline-tests.md +132 -0
- package/_bmad-output/implementation-artifacts/7-3-bmad-pipeline-tests.md +119 -0
- package/_bmad-output/implementation-artifacts/7-4-cli-command-routing-tests.md +162 -0
- package/_bmad-output/implementation-artifacts/deferred-work.md +9 -0
- package/_bmad-output/implementation-artifacts/done/1-1-ci-cd-yes-flag.md +200 -0
- package/_bmad-output/implementation-artifacts/done/10-1-ensure-bmad-output-not-gitignored.md +172 -0
- package/_bmad-output/implementation-artifacts/done/10-2-document-bmad-output-policy.md +102 -0
- package/_bmad-output/implementation-artifacts/done/11-1-auto-bug-detection-skill.md +119 -0
- package/_bmad-output/implementation-artifacts/done/11-2-bug-story-extension-workflow.md +132 -0
- package/_bmad-output/implementation-artifacts/done/11-3-integrate-bug-detection-code-review.md +111 -0
- package/_bmad-output/implementation-artifacts/done/12-1-add-sprint-workflow.md +126 -0
- package/_bmad-output/implementation-artifacts/done/12-2-add-to-sprint-workflow.md +137 -0
- package/_bmad-output/implementation-artifacts/done/12-3-modify-sprint-workflow.md +127 -0
- package/_bmad-output/implementation-artifacts/done/12-4-sprint-status-assigned-items.md +129 -0
- package/_bmad-output/implementation-artifacts/done/13-1-project-context-template-and-generator.md +179 -0
- package/_bmad-output/implementation-artifacts/done/13-2-install-pipeline-integration.md +138 -0
- package/_bmad-output/implementation-artifacts/done/13-3-bmad-critical-actions-update.md +150 -0
- package/_bmad-output/implementation-artifacts/done/13-4-retrospective-expansion-trigger.md +128 -0
- package/_bmad-output/implementation-artifacts/done/13-5-document-project-context-generation.md +118 -0
- package/_bmad-output/implementation-artifacts/done/15-1-bump-bmad-method-to-6-2-1.md +132 -0
- package/_bmad-output/implementation-artifacts/done/15-2-restructure-extension-module.md +174 -0
- package/_bmad-output/implementation-artifacts/done/15-3-convert-custom-agents-to-skill-folders.md +183 -0
- package/_bmad-output/implementation-artifacts/done/15-4-convert-mil498-workflows-to-skill-md.md +252 -0
- package/_bmad-output/implementation-artifacts/done/15-5-convert-sre-devops-cyber-workflows.md +232 -0
- package/_bmad-output/implementation-artifacts/done/15-6-separate-built-in-agent-customizations.md +163 -0
- package/_bmad-output/implementation-artifacts/done/15-7-migration-detection-and-upgrade-path.md +133 -0
- package/_bmad-output/implementation-artifacts/done/15-8-validate-migrated-agents-and-workflows.md +172 -0
- package/_bmad-output/implementation-artifacts/done/15-8-validation-report.md +342 -0
- package/_bmad-output/implementation-artifacts/done/16-1-repository-layout-wizard.md +223 -0
- package/_bmad-output/implementation-artifacts/done/16-2-config-storage-and-cross-reference.md +180 -0
- package/_bmad-output/implementation-artifacts/done/16-3-project-context-multi-repo-section.md +136 -0
- package/_bmad-output/implementation-artifacts/done/16-4-validate-cross-repo-path-resolution.md +137 -0
- package/_bmad-output/implementation-artifacts/done/16-4-validation-report.md +79 -0
- package/_bmad-output/implementation-artifacts/done/16-5-fix-config-lost-on-update.md +110 -0
- package/_bmad-output/implementation-artifacts/done/16-6-repo-sync-check-skill.md +116 -0
- package/_bmad-output/implementation-artifacts/done/16-7-portable-path-storage.md +109 -0
- package/_bmad-output/implementation-artifacts/done/16-8-cicd-remote-mode.md +97 -0
- package/_bmad-output/implementation-artifacts/done/16-9-reconfigure-layout-workflow.md +125 -0
- package/_bmad-output/implementation-artifacts/done/17-1-sprint-entity-model.md +322 -0
- package/_bmad-output/implementation-artifacts/done/17-2-flat-backlog-model.md +264 -0
- package/_bmad-output/implementation-artifacts/done/17-3-bug-as-story-type.md +208 -0
- package/_bmad-output/implementation-artifacts/done/17-4-backlog-to-sprint-workflow.md +209 -0
- package/_bmad-output/implementation-artifacts/done/17-5-sprint-to-backlog-workflow.md +221 -0
- package/_bmad-output/implementation-artifacts/done/17-6-done-item-cleanup.md +273 -0
- package/_bmad-output/implementation-artifacts/done/17-7-multi-criteria-prioritization.md +235 -0
- package/_bmad-output/implementation-artifacts/done/17-8-rework-sprint-status-display.md +285 -0
- package/_bmad-output/implementation-artifacts/done/2-1-cpp-coding-standards-skill.md +188 -0
- package/_bmad-output/implementation-artifacts/done/2-2-csharp-coding-standards-skill.md +211 -0
- package/_bmad-output/implementation-artifacts/done/2-3-python-coding-standards-skill.md +189 -0
- package/_bmad-output/implementation-artifacts/done/3-1-skill-scaffolding-tool.md +184 -0
- package/_bmad-output/implementation-artifacts/done/3-2-skill-validation-tool.md +178 -0
- package/_bmad-output/implementation-artifacts/done/3-3-mandatory-skill-designation.md +136 -0
- package/_bmad-output/implementation-artifacts/done/3-4-bmad-persona-customization-tooling.md +141 -0
- package/_bmad-output/implementation-artifacts/done/3-5-specialized-agent-development-tooling.md +145 -0
- package/_bmad-output/implementation-artifacts/done/5-1-bmad-method-direct-dependency.md +188 -0
- package/_bmad-output/implementation-artifacts/done/5-2-bmad-cache-build-script.md +219 -0
- package/_bmad-output/implementation-artifacts/done/5-3-pre-populate-bmad-cache.md +234 -0
- package/_bmad-output/implementation-artifacts/done/5-4-validate-bundled-installation.md +274 -0
- package/_bmad-output/implementation-artifacts/done/6-1-methodology-presentation-bundle.md +173 -0
- package/_bmad-output/implementation-artifacts/done/8-1-move-instruction-injection-to-top.md +131 -0
- package/_bmad-output/implementation-artifacts/done/8-2-agent-aware-injection-strategy.md +124 -0
- package/_bmad-output/implementation-artifacts/done/8-3-create-bmad-extension-module.md +187 -0
- package/_bmad-output/implementation-artifacts/done/8-4-integration-verification.md +102 -0
- package/_bmad-output/implementation-artifacts/done/8-5-per-agent-enforcement-hooks-research.md +126 -0
- package/_bmad-output/implementation-artifacts/done/8-6-context-persistence-research.md +101 -0
- package/_bmad-output/implementation-artifacts/done/9-1-register-opencode-agent.md +73 -0
- package/_bmad-output/implementation-artifacts/done/9-2-json-merge-injection.md +91 -0
- package/_bmad-output/implementation-artifacts/done/9-3-json-merge-existing.md +113 -0
- package/_bmad-output/implementation-artifacts/done/9-4-json-error-handling.md +90 -0
- package/_bmad-output/implementation-artifacts/epic-11-12-shared-guardrails.md +53 -0
- package/_bmad-output/implementation-artifacts/epic-15-adversarial-fixes.md +287 -0
- package/_bmad-output/implementation-artifacts/epic-16-adversarial-review.md +49 -0
- package/_bmad-output/implementation-artifacts/epic-16-edge-case-review.md +230 -0
- package/_bmad-output/implementation-artifacts/epic-17-adversarial-review.md +37 -0
- package/_bmad-output/implementation-artifacts/epic-17-edge-case-review.md +140 -0
- package/_bmad-output/implementation-artifacts/sprint-status.yaml +83 -0
- package/_bmad-output/methodology/BMAD_AI_Development_Training.pptx +0 -0
- package/_bmad-output/methodology/version.json +7 -0
- package/_bmad-output/planning-artifacts/adapter-pattern-spec.md +508 -0
- package/_bmad-output/planning-artifacts/architecture.md +1619 -0
- package/_bmad-output/planning-artifacts/domain-research-roocode-2026-03-31.md +295 -0
- package/_bmad-output/planning-artifacts/epics.md +3287 -0
- package/_bmad-output/planning-artifacts/mil498-workflow-audit.md +290 -0
- package/_bmad-output/planning-artifacts/prd.md +684 -0
- package/_bmad-output/planning-artifacts/product-brief-agents-2026-03-08.md +214 -0
- package/_bmad-output/planning-artifacts/sprint-status-schema.md +506 -0
- package/_bmad-output/project-context.md +47 -0
- package/lib/bmad-extension/module-help.csv +26 -4
- package/lib/bmad-extension/skills/add-sprint/SKILL.md +126 -72
- package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +124 -96
- package/{.opencode/skills/add-to-sprint → lib/bmad-extension/skills/bmad-dev-story}/bmad-skill-manifest.yaml +1 -1
- package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/checklist.md +13 -13
- package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/workflow.md +103 -44
- package/lib/bmad-extension/skills/bmad-ma-agent-mil498/SKILL.md +2 -1
- package/lib/bmad-extension/skills/bmad-sprint-planning/SKILL.md +6 -0
- package/lib/bmad-extension/skills/bmad-sprint-planning/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/bmad-sprint-planning/checklist.md +74 -0
- package/lib/bmad-extension/skills/bmad-sprint-planning/sprint-status-template.yaml +89 -0
- package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +372 -0
- package/lib/bmad-extension/skills/bmad-sprint-status/SKILL.md +6 -0
- package/{.opencode/skills/create-bug-story → lib/bmad-extension/skills/bmad-sprint-status}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +434 -0
- package/lib/bmad-extension/skills/cleanup-done/SKILL.md +215 -0
- package/lib/bmad-extension/skills/close-sprint/SKILL.md +379 -0
- package/{.opencode/skills/add-sprint → lib/bmad-extension/skills/close-sprint}/bmad-skill-manifest.yaml +1 -1
- package/lib/bmad-extension/skills/generate-backlog/SKILL.md +195 -0
- package/lib/bmad-extension/skills/mil498-requirement-quality/SKILL.md +105 -0
- package/lib/bmad-extension/skills/mil498-requirement-quality/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension/skills/mil498-ssdd/prompts/05-validate.md +4 -0
- package/lib/bmad-extension/skills/modify-sprint/SKILL.md +227 -175
- package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +217 -0
- package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +184 -0
- package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +165 -190
- package/lib/bmad-extension/workflows/add-sprint/workflow.md +125 -71
- package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +123 -95
- package/lib/bmad-extension/workflows/modify-sprint/workflow.md +228 -176
- package/lib/bmad-extension/workflows/remove-from-sprint/workflow.md +164 -0
- package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +162 -189
- package/mil498/README.md +4 -0
- package/out.txt +0 -0
- package/package.json +1 -1
- package/skills/add-sprint/SKILL.md +165 -0
- package/skills/add-sprint/skill.json +7 -0
- package/skills/add-to-sprint/SKILL.md +231 -0
- package/skills/add-to-sprint/skill.json +7 -0
- package/skills/bmad-sprint-planning/SKILL.md +321 -0
- package/skills/bmad-sprint-planning/skill.json +7 -0
- package/skills/bmad-sprint-status/SKILL.md +273 -0
- package/skills/bmad-sprint-status/skill.json +7 -0
- package/skills/cleanup-done/SKILL.md +203 -0
- package/skills/cleanup-done/skill.json +7 -0
- package/skills/close-sprint/SKILL.md +370 -0
- package/skills/close-sprint/skill.json +7 -0
- package/skills/generate-backlog/SKILL.md +178 -0
- package/skills/generate-backlog/skill.json +7 -0
- package/skills/modify-sprint/SKILL.md +302 -0
- package/skills/modify-sprint/skill.json +7 -0
- package/skills/prioritize-backlog/SKILL.md +203 -0
- package/skills/prioritize-backlog/skill.json +7 -0
- package/skills/remove-from-sprint/SKILL.md +174 -0
- package/skills/remove-from-sprint/skill.json +7 -0
- package/skills/sprint-status-view/SKILL.md +173 -0
- package/skills/sprint-status-view/skill.json +7 -0
- package/skills/story-status-lookup/SKILL.md +21 -6
- package/skills/story-status-lookup/skill.json +2 -2
- package/test/extension-module-restructure.test.js +12 -11
- package/test/migration-validation.test.js +10 -10
- package/.opencode/skills/.ma-agents.json +0 -241
- package/.opencode/skills/MANIFEST.yaml +0 -254
- package/.opencode/skills/add-sprint/SKILL.md +0 -207
- package/.opencode/skills/add-to-sprint/SKILL.md +0 -189
- package/.opencode/skills/ai-audit-trail/SKILL.md +0 -23
- package/.opencode/skills/auto-bug-detection/SKILL.md +0 -169
- package/.opencode/skills/bmad-advanced-elicitation/SKILL.md +0 -137
- package/.opencode/skills/bmad-advanced-elicitation/methods.csv +0 -51
- package/.opencode/skills/bmad-agent-analyst/SKILL.md +0 -56
- package/.opencode/skills/bmad-agent-analyst/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-agent-architect/SKILL.md +0 -52
- package/.opencode/skills/bmad-agent-architect/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-agent-dev/SKILL.md +0 -62
- package/.opencode/skills/bmad-agent-dev/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-agent-pm/SKILL.md +0 -57
- package/.opencode/skills/bmad-agent-pm/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-agent-qa/SKILL.md +0 -59
- package/.opencode/skills/bmad-agent-qa/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-agent-quick-flow-solo-dev/SKILL.md +0 -51
- package/.opencode/skills/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-agent-sm/SKILL.md +0 -53
- package/.opencode/skills/bmad-agent-sm/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-agent-tech-writer/SKILL.md +0 -55
- package/.opencode/skills/bmad-agent-tech-writer/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-agent-tech-writer/explain-concept.md +0 -20
- package/.opencode/skills/bmad-agent-tech-writer/mermaid-gen.md +0 -20
- package/.opencode/skills/bmad-agent-tech-writer/validate-doc.md +0 -19
- package/.opencode/skills/bmad-agent-tech-writer/write-document.md +0 -20
- package/.opencode/skills/bmad-agent-ux-designer/SKILL.md +0 -53
- package/.opencode/skills/bmad-agent-ux-designer/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-brainstorming/SKILL.md +0 -6
- package/.opencode/skills/bmad-brainstorming/brain-methods.csv +0 -62
- package/.opencode/skills/bmad-brainstorming/steps/step-01-session-setup.md +0 -214
- package/.opencode/skills/bmad-brainstorming/steps/step-01b-continue.md +0 -124
- package/.opencode/skills/bmad-brainstorming/steps/step-02a-user-selected.md +0 -229
- package/.opencode/skills/bmad-brainstorming/steps/step-02b-ai-recommended.md +0 -239
- package/.opencode/skills/bmad-brainstorming/steps/step-02c-random-selection.md +0 -211
- package/.opencode/skills/bmad-brainstorming/steps/step-02d-progressive-flow.md +0 -266
- package/.opencode/skills/bmad-brainstorming/steps/step-03-technique-execution.md +0 -401
- package/.opencode/skills/bmad-brainstorming/steps/step-04-idea-organization.md +0 -305
- package/.opencode/skills/bmad-brainstorming/template.md +0 -15
- package/.opencode/skills/bmad-brainstorming/workflow.md +0 -53
- package/.opencode/skills/bmad-check-implementation-readiness/SKILL.md +0 -6
- package/.opencode/skills/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -179
- package/.opencode/skills/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -168
- package/.opencode/skills/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -169
- package/.opencode/skills/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -129
- package/.opencode/skills/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -241
- package/.opencode/skills/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -126
- package/.opencode/skills/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -4
- package/.opencode/skills/bmad-check-implementation-readiness/workflow.md +0 -49
- package/.opencode/skills/bmad-cis-design-thinking/SKILL.md +0 -6
- package/.opencode/skills/bmad-cis-design-thinking/bmad-skill-manifest.yaml +0 -1
- package/.opencode/skills/bmad-cis-design-thinking/design-methods.csv +0 -31
- package/.opencode/skills/bmad-cis-design-thinking/template.md +0 -111
- package/.opencode/skills/bmad-cis-design-thinking/workflow.md +0 -242
- package/.opencode/skills/bmad-cis-innovation-strategy/SKILL.md +0 -6
- package/.opencode/skills/bmad-cis-innovation-strategy/bmad-skill-manifest.yaml +0 -1
- package/.opencode/skills/bmad-cis-innovation-strategy/innovation-frameworks.csv +0 -31
- package/.opencode/skills/bmad-cis-innovation-strategy/template.md +0 -189
- package/.opencode/skills/bmad-cis-innovation-strategy/workflow.md +0 -315
- package/.opencode/skills/bmad-cis-problem-solving/SKILL.md +0 -6
- package/.opencode/skills/bmad-cis-problem-solving/bmad-skill-manifest.yaml +0 -1
- package/.opencode/skills/bmad-cis-problem-solving/solving-methods.csv +0 -31
- package/.opencode/skills/bmad-cis-problem-solving/template.md +0 -165
- package/.opencode/skills/bmad-cis-problem-solving/workflow.md +0 -291
- package/.opencode/skills/bmad-cis-storytelling/SKILL.md +0 -6
- package/.opencode/skills/bmad-cis-storytelling/bmad-skill-manifest.yaml +0 -1
- package/.opencode/skills/bmad-cis-storytelling/story-types.csv +0 -26
- package/.opencode/skills/bmad-cis-storytelling/template.md +0 -113
- package/.opencode/skills/bmad-cis-storytelling/workflow.md +0 -321
- package/.opencode/skills/bmad-code-review/SKILL.md +0 -6
- package/.opencode/skills/bmad-code-review/steps/step-01-gather-context.md +0 -62
- package/.opencode/skills/bmad-code-review/steps/step-02-review.md +0 -34
- package/.opencode/skills/bmad-code-review/steps/step-03-triage.md +0 -49
- package/.opencode/skills/bmad-code-review/steps/step-04-present.md +0 -129
- package/.opencode/skills/bmad-code-review/workflow.md +0 -55
- package/.opencode/skills/bmad-correct-course/SKILL.md +0 -6
- package/.opencode/skills/bmad-correct-course/checklist.md +0 -288
- package/.opencode/skills/bmad-correct-course/workflow.md +0 -267
- package/.opencode/skills/bmad-create-architecture/SKILL.md +0 -6
- package/.opencode/skills/bmad-create-architecture/architecture-decision-template.md +0 -12
- package/.opencode/skills/bmad-create-architecture/data/domain-complexity.csv +0 -13
- package/.opencode/skills/bmad-create-architecture/data/project-types.csv +0 -7
- package/.opencode/skills/bmad-create-architecture/steps/step-01-init.md +0 -153
- package/.opencode/skills/bmad-create-architecture/steps/step-01b-continue.md +0 -173
- package/.opencode/skills/bmad-create-architecture/steps/step-02-context.md +0 -224
- package/.opencode/skills/bmad-create-architecture/steps/step-03-starter.md +0 -329
- package/.opencode/skills/bmad-create-architecture/steps/step-04-decisions.md +0 -318
- package/.opencode/skills/bmad-create-architecture/steps/step-05-patterns.md +0 -359
- package/.opencode/skills/bmad-create-architecture/steps/step-06-structure.md +0 -379
- package/.opencode/skills/bmad-create-architecture/steps/step-07-validation.md +0 -359
- package/.opencode/skills/bmad-create-architecture/steps/step-08-complete.md +0 -76
- package/.opencode/skills/bmad-create-architecture/workflow.md +0 -38
- package/.opencode/skills/bmad-create-epics-and-stories/SKILL.md +0 -6
- package/.opencode/skills/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -255
- package/.opencode/skills/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -212
- package/.opencode/skills/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -255
- package/.opencode/skills/bmad-create-epics-and-stories/steps/step-04-final-validation.md +0 -131
- package/.opencode/skills/bmad-create-epics-and-stories/templates/epics-template.md +0 -61
- package/.opencode/skills/bmad-create-epics-and-stories/workflow.md +0 -53
- package/.opencode/skills/bmad-create-prd/SKILL.md +0 -6
- package/.opencode/skills/bmad-create-prd/data/domain-complexity.csv +0 -15
- package/.opencode/skills/bmad-create-prd/data/prd-purpose.md +0 -197
- package/.opencode/skills/bmad-create-prd/data/project-types.csv +0 -11
- package/.opencode/skills/bmad-create-prd/steps-c/step-01-init.md +0 -178
- package/.opencode/skills/bmad-create-prd/steps-c/step-01b-continue.md +0 -161
- package/.opencode/skills/bmad-create-prd/steps-c/step-02-discovery.md +0 -208
- package/.opencode/skills/bmad-create-prd/steps-c/step-02b-vision.md +0 -142
- package/.opencode/skills/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -158
- package/.opencode/skills/bmad-create-prd/steps-c/step-03-success.md +0 -214
- package/.opencode/skills/bmad-create-prd/steps-c/step-04-journeys.md +0 -201
- package/.opencode/skills/bmad-create-prd/steps-c/step-05-domain.md +0 -194
- package/.opencode/skills/bmad-create-prd/steps-c/step-06-innovation.md +0 -211
- package/.opencode/skills/bmad-create-prd/steps-c/step-07-project-type.md +0 -222
- package/.opencode/skills/bmad-create-prd/steps-c/step-08-scoping.md +0 -216
- package/.opencode/skills/bmad-create-prd/steps-c/step-09-functional.md +0 -219
- package/.opencode/skills/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -230
- package/.opencode/skills/bmad-create-prd/steps-c/step-11-polish.md +0 -221
- package/.opencode/skills/bmad-create-prd/steps-c/step-12-complete.md +0 -115
- package/.opencode/skills/bmad-create-prd/templates/prd-template.md +0 -10
- package/.opencode/skills/bmad-create-prd/workflow.md +0 -62
- package/.opencode/skills/bmad-create-story/SKILL.md +0 -6
- package/.opencode/skills/bmad-create-story/checklist.md +0 -357
- package/.opencode/skills/bmad-create-story/discover-inputs.md +0 -88
- package/.opencode/skills/bmad-create-story/template.md +0 -49
- package/.opencode/skills/bmad-create-story/workflow.md +0 -380
- package/.opencode/skills/bmad-create-ux-design/SKILL.md +0 -6
- package/.opencode/skills/bmad-create-ux-design/steps/step-01-init.md +0 -135
- package/.opencode/skills/bmad-create-ux-design/steps/step-01b-continue.md +0 -127
- package/.opencode/skills/bmad-create-ux-design/steps/step-02-discovery.md +0 -190
- package/.opencode/skills/bmad-create-ux-design/steps/step-03-core-experience.md +0 -217
- package/.opencode/skills/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -220
- package/.opencode/skills/bmad-create-ux-design/steps/step-05-inspiration.md +0 -235
- package/.opencode/skills/bmad-create-ux-design/steps/step-06-design-system.md +0 -253
- package/.opencode/skills/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -255
- package/.opencode/skills/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -225
- package/.opencode/skills/bmad-create-ux-design/steps/step-09-design-directions.md +0 -225
- package/.opencode/skills/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -242
- package/.opencode/skills/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -249
- package/.opencode/skills/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -238
- package/.opencode/skills/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -265
- package/.opencode/skills/bmad-create-ux-design/steps/step-14-complete.md +0 -171
- package/.opencode/skills/bmad-create-ux-design/ux-design-template.md +0 -13
- package/.opencode/skills/bmad-create-ux-design/workflow.md +0 -36
- package/.opencode/skills/bmad-distillator/SKILL.md +0 -178
- package/.opencode/skills/bmad-distillator/agents/distillate-compressor.md +0 -116
- package/.opencode/skills/bmad-distillator/agents/round-trip-reconstructor.md +0 -68
- package/.opencode/skills/bmad-distillator/resources/compression-rules.md +0 -51
- package/.opencode/skills/bmad-distillator/resources/distillate-format-reference.md +0 -227
- package/.opencode/skills/bmad-distillator/resources/splitting-strategy.md +0 -78
- package/.opencode/skills/bmad-distillator/scripts/analyze_sources.py +0 -300
- package/.opencode/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -204
- package/.opencode/skills/bmad-document-project/SKILL.md +0 -6
- package/.opencode/skills/bmad-document-project/checklist.md +0 -245
- package/.opencode/skills/bmad-document-project/documentation-requirements.csv +0 -12
- package/.opencode/skills/bmad-document-project/instructions.md +0 -128
- package/.opencode/skills/bmad-document-project/templates/deep-dive-template.md +0 -345
- package/.opencode/skills/bmad-document-project/templates/index-template.md +0 -169
- package/.opencode/skills/bmad-document-project/templates/project-overview-template.md +0 -103
- package/.opencode/skills/bmad-document-project/templates/project-scan-report-schema.json +0 -160
- package/.opencode/skills/bmad-document-project/templates/source-tree-template.md +0 -135
- package/.opencode/skills/bmad-document-project/workflow.md +0 -27
- package/.opencode/skills/bmad-document-project/workflows/deep-dive-instructions.md +0 -299
- package/.opencode/skills/bmad-document-project/workflows/deep-dive-workflow.md +0 -34
- package/.opencode/skills/bmad-document-project/workflows/full-scan-instructions.md +0 -1107
- package/.opencode/skills/bmad-document-project/workflows/full-scan-workflow.md +0 -34
- package/.opencode/skills/bmad-domain-research/SKILL.md +0 -6
- package/.opencode/skills/bmad-domain-research/domain-steps/step-01-init.md +0 -137
- package/.opencode/skills/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -229
- package/.opencode/skills/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -238
- package/.opencode/skills/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -206
- package/.opencode/skills/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -234
- package/.opencode/skills/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -444
- package/.opencode/skills/bmad-domain-research/research.template.md +0 -29
- package/.opencode/skills/bmad-domain-research/workflow.md +0 -49
- package/.opencode/skills/bmad-edit-prd/SKILL.md +0 -6
- package/.opencode/skills/bmad-edit-prd/steps-e/step-e-01-discovery.md +0 -242
- package/.opencode/skills/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +0 -204
- package/.opencode/skills/bmad-edit-prd/steps-e/step-e-02-review.md +0 -245
- package/.opencode/skills/bmad-edit-prd/steps-e/step-e-03-edit.md +0 -250
- package/.opencode/skills/bmad-edit-prd/steps-e/step-e-04-complete.md +0 -165
- package/.opencode/skills/bmad-edit-prd/workflow.md +0 -63
- package/.opencode/skills/bmad-editorial-review-prose/SKILL.md +0 -86
- package/.opencode/skills/bmad-editorial-review-structure/SKILL.md +0 -179
- package/.opencode/skills/bmad-generate-project-context/SKILL.md +0 -6
- package/.opencode/skills/bmad-generate-project-context/project-context-template.md +0 -21
- package/.opencode/skills/bmad-generate-project-context/steps/step-01-discover.md +0 -186
- package/.opencode/skills/bmad-generate-project-context/steps/step-02-generate.md +0 -321
- package/.opencode/skills/bmad-generate-project-context/steps/step-03-complete.md +0 -278
- package/.opencode/skills/bmad-generate-project-context/workflow.md +0 -43
- package/.opencode/skills/bmad-help/SKILL.md +0 -73
- package/.opencode/skills/bmad-index-docs/SKILL.md +0 -66
- package/.opencode/skills/bmad-init/SKILL.md +0 -100
- package/.opencode/skills/bmad-init/resources/core-module.yaml +0 -25
- package/.opencode/skills/bmad-init/scripts/bmad_init.py +0 -593
- package/.opencode/skills/bmad-init/scripts/tests/test_bmad_init.py +0 -329
- package/.opencode/skills/bmad-ma-agent-cyber/SKILL.md +0 -49
- package/.opencode/skills/bmad-ma-agent-cyber/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-ma-agent-devops/SKILL.md +0 -49
- package/.opencode/skills/bmad-ma-agent-devops/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-ma-agent-mil498/SKILL.md +0 -53
- package/.opencode/skills/bmad-ma-agent-mil498/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-ma-agent-ml/SKILL.md +0 -59
- package/.opencode/skills/bmad-ma-agent-ml/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-ma-agent-sre/SKILL.md +0 -49
- package/.opencode/skills/bmad-ma-agent-sre/bmad-skill-manifest.yaml +0 -11
- package/.opencode/skills/bmad-market-research/SKILL.md +0 -6
- package/.opencode/skills/bmad-market-research/research.template.md +0 -29
- package/.opencode/skills/bmad-market-research/steps/step-01-init.md +0 -184
- package/.opencode/skills/bmad-market-research/steps/step-02-customer-behavior.md +0 -239
- package/.opencode/skills/bmad-market-research/steps/step-03-customer-pain-points.md +0 -251
- package/.opencode/skills/bmad-market-research/steps/step-04-customer-decisions.md +0 -261
- package/.opencode/skills/bmad-market-research/steps/step-05-competitive-analysis.md +0 -173
- package/.opencode/skills/bmad-market-research/steps/step-06-research-completion.md +0 -478
- package/.opencode/skills/bmad-market-research/workflow.md +0 -49
- package/.opencode/skills/bmad-party-mode/SKILL.md +0 -6
- package/.opencode/skills/bmad-party-mode/steps/step-01-agent-loading.md +0 -138
- package/.opencode/skills/bmad-party-mode/steps/step-02-discussion-orchestration.md +0 -187
- package/.opencode/skills/bmad-party-mode/steps/step-03-graceful-exit.md +0 -167
- package/.opencode/skills/bmad-party-mode/workflow.md +0 -190
- package/.opencode/skills/bmad-product-brief/SKILL.md +0 -87
- package/.opencode/skills/bmad-product-brief/agents/artifact-analyzer.md +0 -60
- package/.opencode/skills/bmad-product-brief/agents/opportunity-reviewer.md +0 -44
- package/.opencode/skills/bmad-product-brief/agents/skeptic-reviewer.md +0 -44
- package/.opencode/skills/bmad-product-brief/agents/web-researcher.md +0 -49
- package/.opencode/skills/bmad-product-brief/bmad-manifest.json +0 -17
- package/.opencode/skills/bmad-product-brief/prompts/contextual-discovery.md +0 -57
- package/.opencode/skills/bmad-product-brief/prompts/draft-and-review.md +0 -86
- package/.opencode/skills/bmad-product-brief/prompts/finalize.md +0 -75
- package/.opencode/skills/bmad-product-brief/prompts/guided-elicitation.md +0 -70
- package/.opencode/skills/bmad-product-brief/resources/brief-template.md +0 -60
- package/.opencode/skills/bmad-qa-generate-e2e-tests/SKILL.md +0 -6
- package/.opencode/skills/bmad-qa-generate-e2e-tests/checklist.md +0 -33
- package/.opencode/skills/bmad-qa-generate-e2e-tests/workflow.md +0 -136
- package/.opencode/skills/bmad-quick-dev/SKILL.md +0 -6
- package/.opencode/skills/bmad-quick-dev/spec-template.md +0 -88
- package/.opencode/skills/bmad-quick-dev/step-01-clarify-and-route.md +0 -64
- package/.opencode/skills/bmad-quick-dev/step-02-plan.md +0 -35
- package/.opencode/skills/bmad-quick-dev/step-03-implement.md +0 -37
- package/.opencode/skills/bmad-quick-dev/step-04-review.md +0 -49
- package/.opencode/skills/bmad-quick-dev/step-05-present.md +0 -63
- package/.opencode/skills/bmad-quick-dev/step-oneshot.md +0 -49
- package/.opencode/skills/bmad-quick-dev/workflow.md +0 -79
- package/.opencode/skills/bmad-retrospective/SKILL.md +0 -6
- package/.opencode/skills/bmad-retrospective/workflow.md +0 -1479
- package/.opencode/skills/bmad-review-adversarial-general/SKILL.md +0 -37
- package/.opencode/skills/bmad-review-edge-case-hunter/SKILL.md +0 -67
- package/.opencode/skills/bmad-shard-doc/SKILL.md +0 -105
- package/.opencode/skills/bmad-sprint-planning/SKILL.md +0 -6
- package/.opencode/skills/bmad-sprint-planning/checklist.md +0 -33
- package/.opencode/skills/bmad-sprint-planning/sprint-status-template.yaml +0 -56
- package/.opencode/skills/bmad-sprint-planning/workflow.md +0 -263
- package/.opencode/skills/bmad-sprint-status/SKILL.md +0 -6
- package/.opencode/skills/bmad-sprint-status/workflow.md +0 -261
- package/.opencode/skills/bmad-technical-research/SKILL.md +0 -6
- package/.opencode/skills/bmad-technical-research/research.template.md +0 -29
- package/.opencode/skills/bmad-technical-research/technical-steps/step-01-init.md +0 -137
- package/.opencode/skills/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -239
- package/.opencode/skills/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -248
- package/.opencode/skills/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -202
- package/.opencode/skills/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -233
- package/.opencode/skills/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -487
- package/.opencode/skills/bmad-technical-research/workflow.md +0 -50
- package/.opencode/skills/bmad-validate-prd/SKILL.md +0 -6
- package/.opencode/skills/bmad-validate-prd/data/domain-complexity.csv +0 -15
- package/.opencode/skills/bmad-validate-prd/data/prd-purpose.md +0 -197
- package/.opencode/skills/bmad-validate-prd/data/project-types.csv +0 -11
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -221
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -188
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -206
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -171
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -211
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -225
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -214
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -202
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -240
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -260
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -206
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -261
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -239
- package/.opencode/skills/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -229
- package/.opencode/skills/bmad-validate-prd/workflow.md +0 -62
- package/.opencode/skills/cleanup-done/SKILL.md +0 -159
- package/.opencode/skills/cmake-best-practices/SKILL.md +0 -64
- package/.opencode/skills/cmake-best-practices/examples/cmake.md +0 -59
- package/.opencode/skills/code-documentation/SKILL.md +0 -57
- package/.opencode/skills/code-documentation/examples/cpp.md +0 -29
- package/.opencode/skills/code-documentation/examples/csharp.md +0 -28
- package/.opencode/skills/code-documentation/examples/javascript_typescript.md +0 -28
- package/.opencode/skills/code-documentation/examples/python.md +0 -57
- package/.opencode/skills/code-review/SKILL.md +0 -43
- package/.opencode/skills/commit-message/SKILL.md +0 -79
- package/.opencode/skills/cpp-best-practices/SKILL.md +0 -234
- package/.opencode/skills/cpp-best-practices/examples/modern-idioms.md +0 -189
- package/.opencode/skills/cpp-best-practices/examples/naming-and-organization.md +0 -102
- package/.opencode/skills/cpp-concurrency-safety/SKILL.md +0 -60
- package/.opencode/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
- package/.opencode/skills/cpp-const-correctness/SKILL.md +0 -63
- package/.opencode/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
- package/.opencode/skills/cpp-memory-handling/SKILL.md +0 -42
- package/.opencode/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
- package/.opencode/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
- package/.opencode/skills/cpp-modern-composition/SKILL.md +0 -64
- package/.opencode/skills/cpp-modern-composition/examples/composition.md +0 -51
- package/.opencode/skills/cpp-robust-interfaces/SKILL.md +0 -55
- package/.opencode/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
- package/.opencode/skills/create-bug-story/SKILL.md +0 -263
- package/.opencode/skills/create-hardened-docker-skill/SKILL.md +0 -637
- package/.opencode/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
- package/.opencode/skills/csharp-best-practices/SKILL.md +0 -278
- package/.opencode/skills/cyber-generate-certs/.gitkeep +0 -0
- package/.opencode/skills/cyber-generate-certs/SKILL.md +0 -27
- package/.opencode/skills/cyber-generate-certs/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/cyber-immunity-estimation/.gitkeep +0 -0
- package/.opencode/skills/cyber-immunity-estimation/SKILL.md +0 -29
- package/.opencode/skills/cyber-immunity-estimation/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/cyber-security-audit/.gitkeep +0 -0
- package/.opencode/skills/cyber-security-audit/SKILL.md +0 -27
- package/.opencode/skills/cyber-security-audit/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/cyber-vault-secrets/.gitkeep +0 -0
- package/.opencode/skills/cyber-vault-secrets/SKILL.md +0 -28
- package/.opencode/skills/cyber-vault-secrets/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/cyber-verify-docker-users/.gitkeep +0 -0
- package/.opencode/skills/cyber-verify-docker-users/SKILL.md +0 -23
- package/.opencode/skills/cyber-verify-docker-users/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/cyber-verify-image-signature/.gitkeep +0 -0
- package/.opencode/skills/cyber-verify-image-signature/SKILL.md +0 -22
- package/.opencode/skills/cyber-verify-image-signature/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/cyber-vulnerability-scan/.gitkeep +0 -0
- package/.opencode/skills/cyber-vulnerability-scan/SKILL.md +0 -28
- package/.opencode/skills/cyber-vulnerability-scan/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/devops-configure-infrastructure/.gitkeep +0 -0
- package/.opencode/skills/devops-configure-infrastructure/SKILL.md +0 -27
- package/.opencode/skills/devops-configure-infrastructure/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/devops-disconnected-deployment/.gitkeep +0 -0
- package/.opencode/skills/devops-disconnected-deployment/SKILL.md +0 -27
- package/.opencode/skills/devops-disconnected-deployment/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/devops-docker-compose-setup/.gitkeep +0 -0
- package/.opencode/skills/devops-docker-compose-setup/SKILL.md +0 -26
- package/.opencode/skills/devops-docker-compose-setup/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/devops-manage-helm/.gitkeep +0 -0
- package/.opencode/skills/devops-manage-helm/SKILL.md +0 -28
- package/.opencode/skills/devops-manage-helm/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/devops-sign-docker-image/.gitkeep +0 -0
- package/.opencode/skills/devops-sign-docker-image/SKILL.md +0 -24
- package/.opencode/skills/devops-sign-docker-image/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/docker-hardening-verification/SKILL.md +0 -28
- package/.opencode/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
- package/.opencode/skills/docker-image-signing/SKILL.md +0 -28
- package/.opencode/skills/docker-image-signing/scripts/sign-image.sh +0 -33
- package/.opencode/skills/document-revision-history/SKILL.md +0 -104
- package/.opencode/skills/generate-backlog/.gitkeep +0 -0
- package/.opencode/skills/generate-backlog/SKILL.md +0 -183
- package/.opencode/skills/git-workflow-skill/SKILL.md +0 -194
- package/.opencode/skills/git-workflow-skill/hooks/commit-msg +0 -61
- package/.opencode/skills/git-workflow-skill/hooks/pre-commit +0 -38
- package/.opencode/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
- package/.opencode/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
- package/.opencode/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
- package/.opencode/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
- package/.opencode/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
- package/.opencode/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
- package/.opencode/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
- package/.opencode/skills/js-ts-security-skill/SKILL.md +0 -64
- package/.opencode/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
- package/.opencode/skills/logging-best-practices/SKILL.md +0 -50
- package/.opencode/skills/logging-best-practices/examples/cpp.md +0 -36
- package/.opencode/skills/logging-best-practices/examples/csharp.md +0 -49
- package/.opencode/skills/logging-best-practices/examples/javascript.md +0 -77
- package/.opencode/skills/logging-best-practices/examples/python.md +0 -57
- package/.opencode/skills/logging-best-practices/references/logging-standards.md +0 -29
- package/.opencode/skills/mil498-ocd/.gitkeep +0 -0
- package/.opencode/skills/mil498-ocd/SKILL.md +0 -30
- package/.opencode/skills/mil498-ocd/bmad-skill-manifest.yaml +0 -5
- package/.opencode/skills/mil498-ocd/prompts/01-discover-project-artifacts.md +0 -26
- package/.opencode/skills/mil498-ocd/prompts/02-load-template.md +0 -10
- package/.opencode/skills/mil498-ocd/prompts/03-generate-document.md +0 -90
- package/.opencode/skills/mil498-ocd/prompts/04-validate.md +0 -14
- package/.opencode/skills/mil498-ocd/prompts/05-review.md +0 -15
- package/.opencode/skills/mil498-ocd/prompts/06-save.md +0 -15
- package/.opencode/skills/mil498-sdd/.gitkeep +0 -0
- package/.opencode/skills/mil498-sdd/SKILL.md +0 -30
- package/.opencode/skills/mil498-sdd/bmad-skill-manifest.yaml +0 -5
- package/.opencode/skills/mil498-sdd/prompts/01-discover-project-artifacts.md +0 -50
- package/.opencode/skills/mil498-sdd/prompts/02-load-template.md +0 -10
- package/.opencode/skills/mil498-sdd/prompts/03-generate-document.md +0 -98
- package/.opencode/skills/mil498-sdd/prompts/04-validate.md +0 -16
- package/.opencode/skills/mil498-sdd/prompts/05-review.md +0 -15
- package/.opencode/skills/mil498-sdd/prompts/06-save.md +0 -19
- package/.opencode/skills/mil498-sdd/template.md +0 -163
- package/.opencode/skills/mil498-sdp/.gitkeep +0 -0
- package/.opencode/skills/mil498-sdp/SKILL.md +0 -30
- package/.opencode/skills/mil498-sdp/bmad-skill-manifest.yaml +0 -5
- package/.opencode/skills/mil498-sdp/prompts/01-discover-project-artifacts.md +0 -32
- package/.opencode/skills/mil498-sdp/prompts/02-load-template.md +0 -10
- package/.opencode/skills/mil498-sdp/prompts/03-generate-document.md +0 -187
- package/.opencode/skills/mil498-sdp/prompts/04-validate.md +0 -13
- package/.opencode/skills/mil498-sdp/prompts/05-review.md +0 -15
- package/.opencode/skills/mil498-sdp/prompts/06-save.md +0 -14
- package/.opencode/skills/mil498-srs/.gitkeep +0 -0
- package/.opencode/skills/mil498-srs/SKILL.md +0 -30
- package/.opencode/skills/mil498-srs/bmad-skill-manifest.yaml +0 -5
- package/.opencode/skills/mil498-srs/prompts/01-discover-project-artifacts.md +0 -42
- package/.opencode/skills/mil498-srs/prompts/02-load-template.md +0 -10
- package/.opencode/skills/mil498-srs/prompts/03-generate-document.md +0 -100
- package/.opencode/skills/mil498-srs/prompts/04-validate.md +0 -16
- package/.opencode/skills/mil498-srs/prompts/05-review.md +0 -15
- package/.opencode/skills/mil498-srs/prompts/06-save.md +0 -18
- package/.opencode/skills/mil498-ssdd/.gitkeep +0 -0
- package/.opencode/skills/mil498-ssdd/SKILL.md +0 -32
- package/.opencode/skills/mil498-ssdd/bmad-skill-manifest.yaml +0 -5
- package/.opencode/skills/mil498-ssdd/prompts/01-discover-project-artifacts.md +0 -32
- package/.opencode/skills/mil498-ssdd/prompts/02-load-template.md +0 -10
- package/.opencode/skills/mil498-ssdd/prompts/03-csci-discovery-interview.md +0 -43
- package/.opencode/skills/mil498-ssdd/prompts/04-generate-document.md +0 -96
- package/.opencode/skills/mil498-ssdd/prompts/05-validate.md +0 -14
- package/.opencode/skills/mil498-ssdd/prompts/06-review.md +0 -16
- package/.opencode/skills/mil498-ssdd/prompts/07-save.md +0 -16
- package/.opencode/skills/mil498-sss/.gitkeep +0 -0
- package/.opencode/skills/mil498-sss/SKILL.md +0 -31
- package/.opencode/skills/mil498-sss/bmad-skill-manifest.yaml +0 -5
- package/.opencode/skills/mil498-sss/prompts/01-discover-project-artifacts.md +0 -31
- package/.opencode/skills/mil498-sss/prompts/02-load-template.md +0 -10
- package/.opencode/skills/mil498-sss/prompts/03-generate-document.md +0 -108
- package/.opencode/skills/mil498-sss/prompts/04-validate.md +0 -16
- package/.opencode/skills/mil498-sss/prompts/05-review.md +0 -15
- package/.opencode/skills/mil498-sss/prompts/06-save.md +0 -15
- package/.opencode/skills/mil498-std/.gitkeep +0 -0
- package/.opencode/skills/mil498-std/SKILL.md +0 -30
- package/.opencode/skills/mil498-std/bmad-skill-manifest.yaml +0 -5
- package/.opencode/skills/mil498-std/prompts/01-discover-project-artifacts.md +0 -42
- package/.opencode/skills/mil498-std/prompts/02-load-template.md +0 -10
- package/.opencode/skills/mil498-std/prompts/03-generate-document.md +0 -117
- package/.opencode/skills/mil498-std/prompts/04-validate.md +0 -15
- package/.opencode/skills/mil498-std/prompts/05-review.md +0 -15
- package/.opencode/skills/mil498-std/prompts/06-save.md +0 -15
- package/.opencode/skills/ml-advise/.gitkeep +0 -0
- package/.opencode/skills/ml-advise/SKILL.md +0 -76
- package/.opencode/skills/ml-advise/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-advise/skill.json +0 -7
- package/.opencode/skills/ml-analysis/.gitkeep +0 -0
- package/.opencode/skills/ml-analysis/SKILL.md +0 -60
- package/.opencode/skills/ml-analysis/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-analysis/skill.json +0 -7
- package/.opencode/skills/ml-architecture/.gitkeep +0 -0
- package/.opencode/skills/ml-architecture/SKILL.md +0 -55
- package/.opencode/skills/ml-architecture/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-architecture/skill.json +0 -7
- package/.opencode/skills/ml-detailed-design/.gitkeep +0 -0
- package/.opencode/skills/ml-detailed-design/SKILL.md +0 -67
- package/.opencode/skills/ml-detailed-design/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-detailed-design/skill.json +0 -7
- package/.opencode/skills/ml-eda/.gitkeep +0 -0
- package/.opencode/skills/ml-eda/SKILL.md +0 -56
- package/.opencode/skills/ml-eda/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-eda/scripts/baseline_classifier.py +0 -522
- package/.opencode/skills/ml-eda/scripts/class_weights_calculator.py +0 -295
- package/.opencode/skills/ml-eda/scripts/clustering_explorer.py +0 -383
- package/.opencode/skills/ml-eda/scripts/eda_analyzer.py +0 -654
- package/.opencode/skills/ml-eda/skill.json +0 -7
- package/.opencode/skills/ml-experiment/.gitkeep +0 -0
- package/.opencode/skills/ml-experiment/SKILL.md +0 -74
- package/.opencode/skills/ml-experiment/assets/advanced_trainer_configs.py +0 -430
- package/.opencode/skills/ml-experiment/assets/quick_trainer_setup.py +0 -233
- package/.opencode/skills/ml-experiment/assets/template_datamodule.py +0 -219
- package/.opencode/skills/ml-experiment/assets/template_gnn_module.py +0 -341
- package/.opencode/skills/ml-experiment/assets/template_lightning_module.py +0 -158
- package/.opencode/skills/ml-experiment/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-experiment/skill.json +0 -7
- package/.opencode/skills/ml-hparam/.gitkeep +0 -0
- package/.opencode/skills/ml-hparam/SKILL.md +0 -81
- package/.opencode/skills/ml-hparam/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-hparam/skill.json +0 -7
- package/.opencode/skills/ml-ideation/.gitkeep +0 -0
- package/.opencode/skills/ml-ideation/SKILL.md +0 -50
- package/.opencode/skills/ml-ideation/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-ideation/scripts/validate_ml_prd.py +0 -287
- package/.opencode/skills/ml-ideation/skill.json +0 -7
- package/.opencode/skills/ml-infra/.gitkeep +0 -0
- package/.opencode/skills/ml-infra/SKILL.md +0 -58
- package/.opencode/skills/ml-infra/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-infra/skill.json +0 -7
- package/.opencode/skills/ml-retrospective/.gitkeep +0 -0
- package/.opencode/skills/ml-retrospective/SKILL.md +0 -63
- package/.opencode/skills/ml-retrospective/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-retrospective/skill.json +0 -7
- package/.opencode/skills/ml-revision/.gitkeep +0 -0
- package/.opencode/skills/ml-revision/SKILL.md +0 -82
- package/.opencode/skills/ml-revision/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-revision/skill.json +0 -7
- package/.opencode/skills/ml-techspec/.gitkeep +0 -0
- package/.opencode/skills/ml-techspec/SKILL.md +0 -80
- package/.opencode/skills/ml-techspec/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/ml-techspec/skill.json +0 -7
- package/.opencode/skills/modify-sprint/.gitkeep +0 -0
- package/.opencode/skills/modify-sprint/SKILL.md +0 -322
- package/.opencode/skills/modify-sprint/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/open-presentation/SKILL.md +0 -35
- package/.opencode/skills/opentelemetry-best-practices/SKILL.md +0 -34
- package/.opencode/skills/opentelemetry-best-practices/examples/go.md +0 -32
- package/.opencode/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
- package/.opencode/skills/opentelemetry-best-practices/examples/python.md +0 -37
- package/.opencode/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
- package/.opencode/skills/prioritize-backlog/.gitkeep +0 -0
- package/.opencode/skills/prioritize-backlog/SKILL.md +0 -195
- package/.opencode/skills/project-context-expansion/.gitkeep +0 -0
- package/.opencode/skills/project-context-expansion/SKILL.md +0 -238
- package/.opencode/skills/project-context-expansion/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/python-best-practices/SKILL.md +0 -385
- package/.opencode/skills/python-dependency-mgmt/SKILL.md +0 -42
- package/.opencode/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
- package/.opencode/skills/python-security-skill/SKILL.md +0 -56
- package/.opencode/skills/python-security-skill/examples/security.md +0 -56
- package/.opencode/skills/remove-from-sprint/.gitkeep +0 -0
- package/.opencode/skills/remove-from-sprint/SKILL.md +0 -163
- package/.opencode/skills/self-signed-cert/SKILL.md +0 -42
- package/.opencode/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
- package/.opencode/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
- package/.opencode/skills/skill-creator/SKILL.md +0 -196
- package/.opencode/skills/skill-creator/references/output-patterns.md +0 -82
- package/.opencode/skills/skill-creator/references/workflows.md +0 -28
- package/.opencode/skills/skill-creator/scripts/init_skill.py +0 -208
- package/.opencode/skills/skill-creator/scripts/package_skill.py +0 -99
- package/.opencode/skills/skill-creator/scripts/quick_validate.py +0 -113
- package/.opencode/skills/sprint-status-view/.gitkeep +0 -0
- package/.opencode/skills/sprint-status-view/SKILL.md +0 -263
- package/.opencode/skills/sprint-status-view/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/sre-check-deployment-status/.gitkeep +0 -0
- package/.opencode/skills/sre-check-deployment-status/SKILL.md +0 -32
- package/.opencode/skills/sre-check-deployment-status/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/sre-check-secrets/.gitkeep +0 -0
- package/.opencode/skills/sre-check-secrets/SKILL.md +0 -23
- package/.opencode/skills/sre-check-secrets/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/sre-check-system-status/.gitkeep +0 -0
- package/.opencode/skills/sre-check-system-status/SKILL.md +0 -27
- package/.opencode/skills/sre-check-system-status/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/sre-day-2-ops/.gitkeep +0 -0
- package/.opencode/skills/sre-day-2-ops/SKILL.md +0 -26
- package/.opencode/skills/sre-day-2-ops/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/sre-deployment-strategies/.gitkeep +0 -0
- package/.opencode/skills/sre-deployment-strategies/SKILL.md +0 -28
- package/.opencode/skills/sre-deployment-strategies/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/sre-fix-deployments/.gitkeep +0 -0
- package/.opencode/skills/sre-fix-deployments/SKILL.md +0 -25
- package/.opencode/skills/sre-fix-deployments/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/sre-gitops-status/.gitkeep +0 -0
- package/.opencode/skills/sre-gitops-status/SKILL.md +0 -25
- package/.opencode/skills/sre-gitops-status/bmad-skill-manifest.yaml +0 -3
- package/.opencode/skills/story-status-lookup/SKILL.md +0 -78
- package/.opencode/skills/test-accompanied-development/SKILL.md +0 -50
- package/.opencode/skills/test-generator/SKILL.md +0 -65
- package/.opencode/skills/vercel-react-best-practices/SKILL.md +0 -109
- package/.opencode/skills/verify-hardened-docker-skill/SKILL.md +0 -442
- package/.opencode/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
- package/.roo/rules/00-ma-agents.md +0 -13
- package/.roo/skills/.ma-agents.json +0 -241
- package/.roo/skills/MANIFEST.yaml +0 -254
- package/.roo/skills/ai-audit-trail/SKILL.md +0 -23
- package/.roo/skills/auto-bug-detection/SKILL.md +0 -169
- package/.roo/skills/cmake-best-practices/SKILL.md +0 -64
- package/.roo/skills/cmake-best-practices/examples/cmake.md +0 -59
- package/.roo/skills/code-documentation/SKILL.md +0 -57
- package/.roo/skills/code-documentation/examples/cpp.md +0 -29
- package/.roo/skills/code-documentation/examples/csharp.md +0 -28
- package/.roo/skills/code-documentation/examples/javascript_typescript.md +0 -28
- package/.roo/skills/code-documentation/examples/python.md +0 -57
- package/.roo/skills/code-review/SKILL.md +0 -43
- package/.roo/skills/commit-message/SKILL.md +0 -79
- package/.roo/skills/cpp-best-practices/SKILL.md +0 -234
- package/.roo/skills/cpp-best-practices/examples/modern-idioms.md +0 -189
- package/.roo/skills/cpp-best-practices/examples/naming-and-organization.md +0 -102
- package/.roo/skills/cpp-concurrency-safety/SKILL.md +0 -60
- package/.roo/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
- package/.roo/skills/cpp-const-correctness/SKILL.md +0 -63
- package/.roo/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
- package/.roo/skills/cpp-memory-handling/SKILL.md +0 -42
- package/.roo/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
- package/.roo/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
- package/.roo/skills/cpp-modern-composition/SKILL.md +0 -64
- package/.roo/skills/cpp-modern-composition/examples/composition.md +0 -51
- package/.roo/skills/cpp-robust-interfaces/SKILL.md +0 -55
- package/.roo/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
- package/.roo/skills/create-hardened-docker-skill/SKILL.md +0 -637
- package/.roo/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
- package/.roo/skills/csharp-best-practices/SKILL.md +0 -278
- package/.roo/skills/docker-hardening-verification/SKILL.md +0 -28
- package/.roo/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
- package/.roo/skills/docker-image-signing/SKILL.md +0 -28
- package/.roo/skills/docker-image-signing/scripts/sign-image.sh +0 -33
- package/.roo/skills/document-revision-history/SKILL.md +0 -104
- package/.roo/skills/git-workflow-skill/SKILL.md +0 -194
- package/.roo/skills/git-workflow-skill/hooks/commit-msg +0 -61
- package/.roo/skills/git-workflow-skill/hooks/pre-commit +0 -38
- package/.roo/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
- package/.roo/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
- package/.roo/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
- package/.roo/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
- package/.roo/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
- package/.roo/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
- package/.roo/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
- package/.roo/skills/js-ts-security-skill/SKILL.md +0 -64
- package/.roo/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
- package/.roo/skills/logging-best-practices/SKILL.md +0 -50
- package/.roo/skills/logging-best-practices/examples/cpp.md +0 -36
- package/.roo/skills/logging-best-practices/examples/csharp.md +0 -49
- package/.roo/skills/logging-best-practices/examples/javascript.md +0 -77
- package/.roo/skills/logging-best-practices/examples/python.md +0 -57
- package/.roo/skills/logging-best-practices/references/logging-standards.md +0 -29
- package/.roo/skills/open-presentation/SKILL.md +0 -35
- package/.roo/skills/opentelemetry-best-practices/SKILL.md +0 -34
- package/.roo/skills/opentelemetry-best-practices/examples/go.md +0 -32
- package/.roo/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
- package/.roo/skills/opentelemetry-best-practices/examples/python.md +0 -37
- package/.roo/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
- package/.roo/skills/python-best-practices/SKILL.md +0 -385
- package/.roo/skills/python-dependency-mgmt/SKILL.md +0 -42
- package/.roo/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
- package/.roo/skills/python-security-skill/SKILL.md +0 -56
- package/.roo/skills/python-security-skill/examples/security.md +0 -56
- package/.roo/skills/self-signed-cert/SKILL.md +0 -42
- package/.roo/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
- package/.roo/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
- package/.roo/skills/skill-creator/SKILL.md +0 -196
- package/.roo/skills/skill-creator/references/output-patterns.md +0 -82
- package/.roo/skills/skill-creator/references/workflows.md +0 -28
- package/.roo/skills/skill-creator/scripts/init_skill.py +0 -208
- package/.roo/skills/skill-creator/scripts/package_skill.py +0 -99
- package/.roo/skills/skill-creator/scripts/quick_validate.py +0 -113
- package/.roo/skills/story-status-lookup/SKILL.md +0 -78
- package/.roo/skills/test-accompanied-development/SKILL.md +0 -50
- package/.roo/skills/test-generator/SKILL.md +0 -65
- package/.roo/skills/vercel-react-best-practices/SKILL.md +0 -109
- package/.roo/skills/verify-hardened-docker-skill/SKILL.md +0 -442
- package/.roo/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
- package/opencode.json +0 -5
- /package/{.opencode/skills/add-sprint → lib/bmad-extension/skills/bmad-dev-story}/.gitkeep +0 -0
- /package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/SKILL.md +0 -0
- /package/{.opencode/skills/add-to-sprint → lib/bmad-extension/skills/bmad-sprint-planning}/.gitkeep +0 -0
- /package/{.opencode/skills/bmad-ma-agent-cyber → lib/bmad-extension/skills/bmad-sprint-status}/.gitkeep +0 -0
- /package/{.opencode/skills/bmad-ma-agent-devops → lib/bmad-extension/skills/cleanup-done}/.gitkeep +0 -0
- /package/{.opencode → lib/bmad-extension}/skills/cleanup-done/bmad-skill-manifest.yaml +0 -0
- /package/{.opencode/skills/bmad-ma-agent-mil498 → lib/bmad-extension/skills/close-sprint}/.gitkeep +0 -0
- /package/{.opencode/skills/bmad-ma-agent-ml → lib/bmad-extension/skills/generate-backlog}/.gitkeep +0 -0
- /package/{.opencode → lib/bmad-extension}/skills/generate-backlog/bmad-skill-manifest.yaml +0 -0
- /package/{.opencode/skills/bmad-ma-agent-sre → lib/bmad-extension/skills/mil498-requirement-quality}/.gitkeep +0 -0
- /package/{.opencode/skills/cleanup-done → lib/bmad-extension/skills/prioritize-backlog}/.gitkeep +0 -0
- /package/{.opencode → lib/bmad-extension}/skills/prioritize-backlog/bmad-skill-manifest.yaml +0 -0
- /package/{.opencode/skills/create-bug-story → lib/bmad-extension/skills/remove-from-sprint}/.gitkeep +0 -0
- /package/{.opencode → lib/bmad-extension}/skills/remove-from-sprint/bmad-skill-manifest.yaml +0 -0
- /package/{.opencode/skills/mil498-ocd/template.md → mil498/OCD.md} +0 -0
- /package/{.opencode/skills/mil498-sdp/template.md → mil498/SDP.md} +0 -0
- /package/{.opencode/skills/mil498-srs/template.md → mil498/SRS.md} +0 -0
- /package/{.opencode/skills/mil498-ssdd/template.md → mil498/SSDD.md} +0 -0
- /package/{.opencode/skills/mil498-sss/template.md → mil498/SSS.md} +0 -0
- /package/{.opencode/skills/mil498-std/template.md → mil498/STD.md} +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Story 7.4: Add Tests for cli.js Command Routing
|
|
2
|
+
|
|
3
|
+
Status: ready-for-dev
|
|
4
|
+
|
|
5
|
+
<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
6
|
+
<!-- Dependency: Story 7-1 must be completed first (test framework setup) -->
|
|
7
|
+
|
|
8
|
+
## Story
|
|
9
|
+
|
|
10
|
+
As a **developer**,
|
|
11
|
+
I want tests covering CLI command parsing and routing,
|
|
12
|
+
So that command-line argument handling is verified automatically.
|
|
13
|
+
|
|
14
|
+
## Acceptance Criteria
|
|
15
|
+
|
|
16
|
+
1. **Given** tests exist for `cli.js`
|
|
17
|
+
**When** the test suite runs
|
|
18
|
+
**Then** it verifies:
|
|
19
|
+
- Known commands (install, list, status, uninstall) route correctly
|
|
20
|
+
- Unknown commands produce helpful error messages
|
|
21
|
+
- Flag parsing (`--yes`, `--force`, `--agent`) extracts values correctly
|
|
22
|
+
- Help output is displayed for `--help` flag
|
|
23
|
+
- Version output is displayed for `--version` flag
|
|
24
|
+
|
|
25
|
+
## Tasks / Subtasks
|
|
26
|
+
|
|
27
|
+
- [ ] Task 1: Analyze cli.js testability (AC: #1)
|
|
28
|
+
- [ ] 1.1: Map the command routing in `main()` function (line 523)
|
|
29
|
+
- [ ] 1.2: Identify `parseFlags(args)` function (line 107) — this is a pure function, directly testable
|
|
30
|
+
- [ ] 1.3: Identify which functions can be tested without triggering interactive prompts or real installs
|
|
31
|
+
- [ ] 1.4: Note: `cli.js` is the `bin` entry point — it calls `main()` on require. Tests must NOT require cli.js directly or it will execute. Import specific functions or test via subprocess.
|
|
32
|
+
- [ ] Task 2: Test flag parsing (AC: #1)
|
|
33
|
+
- [ ] 2.1: Create `tests/cli.test.js`
|
|
34
|
+
- [ ] 2.2: **Challenge:** `parseFlags()` is not exported — it's internal to cli.js. Options:
|
|
35
|
+
- Option A: Export `parseFlags` from cli.js for testing (minor, safe change)
|
|
36
|
+
- Option B: Test via subprocess: `node bin/cli.js --help` and verify output
|
|
37
|
+
- Option C: Extract `parseFlags` to a shared utility (over-engineering for this story)
|
|
38
|
+
- [ ] 2.3: If Option A: Test `parseFlags(['--yes'])` returns `{ yes: true }`
|
|
39
|
+
- [ ] 2.4: If Option A: Test `parseFlags(['--force'])` returns `{ force: true }`
|
|
40
|
+
- [ ] 2.5: If Option A: Test `parseFlags(['--agent', 'claude-code'])` returns `{ agent: 'claude-code' }`
|
|
41
|
+
- [ ] 2.6: If Option A: Test `parseFlags([])` returns empty/default flags
|
|
42
|
+
- [ ] Task 3: Test CLI commands via subprocess (AC: #1)
|
|
43
|
+
- [ ] 3.1: Test: `node bin/cli.js --help` exits 0 and outputs usage info
|
|
44
|
+
- [ ] 3.2: Test: `node bin/cli.js --version` exits 0 and outputs version matching `package.json` version
|
|
45
|
+
- [ ] 3.3: Test: `node bin/cli.js list` exits 0 and outputs skill/agent listings
|
|
46
|
+
- [ ] 3.4: Test: `node bin/cli.js list --skills` exits 0 and outputs skill names
|
|
47
|
+
- [ ] 3.5: Test: `node bin/cli.js list --agents` exits 0 and outputs agent names
|
|
48
|
+
- [ ] 3.6: Test: `node bin/cli.js unknowncommand` exits non-zero or outputs help/error
|
|
49
|
+
- [ ] 3.7: Use `child_process.execSync` or `child_process.exec` for subprocess testing
|
|
50
|
+
- [ ] Task 4: Test help and version output content (AC: #1)
|
|
51
|
+
- [ ] 4.1: Test: help output contains key command names (install, list, status, uninstall)
|
|
52
|
+
- [ ] 4.2: Test: version output matches `require('../package.json').version`
|
|
53
|
+
|
|
54
|
+
## Dev Notes
|
|
55
|
+
|
|
56
|
+
### Architecture Compliance
|
|
57
|
+
|
|
58
|
+
- **Test location:** `tests/cli.test.js` [Source: architecture.md#Structure-Patterns]
|
|
59
|
+
- **CLI entry point hazard:** `bin/cli.js` calls `main()` at the bottom of the file. Requiring it directly would trigger the CLI. Tests must either:
|
|
60
|
+
1. Test via subprocess (`child_process.exec('node bin/cli.js ...')`)
|
|
61
|
+
2. Or export specific functions and guard `main()` behind `require.main === module` check
|
|
62
|
+
- **No real installs:** CLI tests must not trigger `install` or `uninstall` operations
|
|
63
|
+
|
|
64
|
+
### cli.js Module Structure
|
|
65
|
+
|
|
66
|
+
From [cli.js:1-565](bin/cli.js) — 565 lines, key functions:
|
|
67
|
+
|
|
68
|
+
**Display functions (no side effects beyond console output):**
|
|
69
|
+
- `showHelp()` (line 13) — prints usage info
|
|
70
|
+
- `showSkills()` (line 42) — lists skills
|
|
71
|
+
- `showAgents()` (line 51) — lists agents
|
|
72
|
+
- `showStatus(args)` (line 70) — shows install status
|
|
73
|
+
|
|
74
|
+
**Parsing functions (pure logic, most testable):**
|
|
75
|
+
- `parseFlags(args)` (line 107) — extracts --yes, --force, --agent, --skill, --scope, --path flags
|
|
76
|
+
|
|
77
|
+
**Command handlers (orchestrate operations, harder to test):**
|
|
78
|
+
- `handleInstall(args)` (line 425) — install command handler
|
|
79
|
+
- `handleUninstall(args)` (line 453) — uninstall command handler
|
|
80
|
+
- `installWizard(...)` (line 130) — interactive install flow
|
|
81
|
+
- `interactiveMode()` (line 480) — interactive menu
|
|
82
|
+
- `main()` (line 523) — entry point, routes commands
|
|
83
|
+
|
|
84
|
+
### parseFlags() Function Detail
|
|
85
|
+
|
|
86
|
+
From [cli.js:107-127](bin/cli.js#L107-L127):
|
|
87
|
+
```javascript
|
|
88
|
+
function parseFlags(args) {
|
|
89
|
+
// Parses: --yes, --force, --agent <name>, --skill <name>, --scope <scope>, --path <path>
|
|
90
|
+
// Returns object with extracted values
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This is the best candidate for direct unit testing if exported.
|
|
95
|
+
|
|
96
|
+
### Subprocess Testing Pattern
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
const { execSync } = require('node:child_process');
|
|
100
|
+
const { describe, it } = require('node:test');
|
|
101
|
+
const assert = require('node:assert');
|
|
102
|
+
|
|
103
|
+
describe('CLI commands', () => {
|
|
104
|
+
it('--help should exit 0 and show usage', () => {
|
|
105
|
+
const output = execSync('node bin/cli.js --help', { encoding: 'utf-8' });
|
|
106
|
+
assert.ok(output.includes('Usage'));
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('--version should show package version', () => {
|
|
110
|
+
const output = execSync('node bin/cli.js --version', { encoding: 'utf-8' });
|
|
111
|
+
const { version } = require('../package.json');
|
|
112
|
+
assert.ok(output.includes(version));
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Minimal Source Change Option
|
|
118
|
+
|
|
119
|
+
To test `parseFlags()` directly, a small change to `cli.js` may be needed:
|
|
120
|
+
|
|
121
|
+
```javascript
|
|
122
|
+
// At bottom of cli.js, replace direct main() call:
|
|
123
|
+
if (require.main === module) {
|
|
124
|
+
main();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// And export testable functions:
|
|
128
|
+
module.exports = { parseFlags };
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
This is a minimal, safe change that enables direct testing while preserving CLI behavior. Discuss with reviewer if this is acceptable or if subprocess-only testing is preferred.
|
|
132
|
+
|
|
133
|
+
### Critical Guardrails
|
|
134
|
+
|
|
135
|
+
- **Never trigger real installs** — only test non-destructive commands (list, help, version, status)
|
|
136
|
+
- **No interactive prompts in tests** — avoid commands that trigger `prompts` library
|
|
137
|
+
- **subprocess tests must have timeout** — prevent hanging tests
|
|
138
|
+
- **No new npm dependencies** — use `node:test`, `node:assert`, `node:child_process`
|
|
139
|
+
- **Minimal changes to `bin/cli.js`** — only `require.main` guard and optional exports if needed
|
|
140
|
+
|
|
141
|
+
### Project Structure Notes
|
|
142
|
+
|
|
143
|
+
- Files to create: `tests/cli.test.js`
|
|
144
|
+
- Files to potentially modify: `bin/cli.js` (add `require.main` guard + export parseFlags — minimal change)
|
|
145
|
+
- No changes to `lib/` source files
|
|
146
|
+
|
|
147
|
+
### References
|
|
148
|
+
|
|
149
|
+
- [Source: _bmad-output/planning-artifacts/epics.md#Epic-7] — Story 7.4 definition
|
|
150
|
+
- [Source: _bmad-output/planning-artifacts/architecture.md#Structure-Patterns] — Test directory structure
|
|
151
|
+
- [Source: bin/cli.js] — CLI module (565 lines, 10 functions, entry point)
|
|
152
|
+
- [Source: _bmad-output/implementation-artifacts/7-1-test-infrastructure-setup.md] — Prerequisite story
|
|
153
|
+
|
|
154
|
+
## Dev Agent Record
|
|
155
|
+
|
|
156
|
+
### Agent Model Used
|
|
157
|
+
|
|
158
|
+
### Debug Log References
|
|
159
|
+
|
|
160
|
+
### Completion Notes List
|
|
161
|
+
|
|
162
|
+
### File List
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Deferred Work
|
|
2
|
+
|
|
3
|
+
## Deferred from: code review of 17-9-unified-sprint-status-schema (2026-04-03)
|
|
4
|
+
|
|
5
|
+
- sprint-status.yaml still uses old flat `development_status` format — migration is Story 17.23
|
|
6
|
+
- `generated` field in sprint-status.yaml is bare date, not ISO-8601 datetime — will be reformatted by Story 17.15 bootstrap
|
|
7
|
+
- No `schema_version` metadata field — can be added in a future story if schema evolution is needed
|
|
8
|
+
- Concurrent modification has no locking guidance — skills run serially in current architecture
|
|
9
|
+
- `correct-course` referenced in schema Section 4.6 but not in skill integration map — informational reference only
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Story 1.1: Add --yes Flag for Non-Interactive Skill Installation
|
|
2
|
+
|
|
3
|
+
Status: review
|
|
4
|
+
|
|
5
|
+
<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
6
|
+
|
|
7
|
+
## Story
|
|
8
|
+
|
|
9
|
+
As a **DevOps engineer**,
|
|
10
|
+
I want to run `npx ma-agents install --yes` to skip all interactive prompts,
|
|
11
|
+
So that I can automate skill installation in CI/CD pipelines without human intervention.
|
|
12
|
+
|
|
13
|
+
## Acceptance Criteria
|
|
14
|
+
|
|
15
|
+
1. **Given** the CLI is invoked with `--yes` flag
|
|
16
|
+
**When** the install command executes
|
|
17
|
+
**Then** all interactive prompts (skill selection, agent selection, confirmations) are bypassed with default selections
|
|
18
|
+
**And** the installation completes without requiring stdin input
|
|
19
|
+
**And** exit code 0 is returned on success, non-zero on failure
|
|
20
|
+
|
|
21
|
+
2. **Given** the CLI is invoked with `--yes --force` flags together
|
|
22
|
+
**When** the install command executes
|
|
23
|
+
**Then** all interactive prompts are skipped with default selections (same as `--yes` alone)
|
|
24
|
+
**And** existing skill files are overwritten without version comparison (the `--force` behavior)
|
|
25
|
+
**Note:** `--yes` controls prompt skipping; `--force` controls file overwrite. They are orthogonal.
|
|
26
|
+
|
|
27
|
+
3. **Given** the CLI is invoked with `--yes` and a specific agent target (e.g., `--agent claude-code`)
|
|
28
|
+
**When** the install command executes
|
|
29
|
+
**Then** only the specified agent is targeted without prompting for agent selection
|
|
30
|
+
**And** all skills are installed to that agent without skill selection prompts
|
|
31
|
+
|
|
32
|
+
## Tasks / Subtasks
|
|
33
|
+
|
|
34
|
+
- [x] Task 1: Add `--yes` and `--agent` flag parsing to `parseFlags()` (AC: #1, #2, #3)
|
|
35
|
+
- [x] 1.1: Add `yesFlag` boolean extraction in `parseFlags()` function (search: `function parseFlags`). Same pattern as existing `forceFlag`.
|
|
36
|
+
- [x] 1.2: Add `--agent <name>` extraction in `parseFlags()`. Pattern: same as `--path` — extract next positional arg after `--agent` as the agent name. Return as `agentFlag`.
|
|
37
|
+
- [x] 1.3: Filter `--yes` and `--agent <name>` from positional args (same filter pattern as `--global` and `--force`)
|
|
38
|
+
- [x] 1.4: Validate `--agent` value: if `--agent` is present but no name follows, print `Error: --agent requires an agent name` / `Hint: Run "list" to see available agents` and exit 1
|
|
39
|
+
- [x] 1.5: Add `--yes` and `--agent <name>` to help text (search: `console.log.*Usage`)
|
|
40
|
+
- [x] Task 2: Update `installWizard()` to bypass prompts when `--yes` is active (AC: #1)
|
|
41
|
+
- [x] 2.1: Accept `yesFlag` parameter in `installWizard()` signature (search: `async function installWizard`)
|
|
42
|
+
- [x] 2.2: Skip existing installation check prompt (search: `Existing installation detected`) — default to `'reinstall'` (clean slate, then install all). This avoids the `isUpdate` path which re-triggers skill selection prompts.
|
|
43
|
+
- [x] 2.3: Skip skill selection prompt (search: `install all available skills or choose`) — default to ALL skills. **Important:** when `yesFlag` is true, also skip when `isUpdate` is true — the `isUpdate` OR condition must not re-trigger prompts.
|
|
44
|
+
- [x] 2.4: Skip IDE agent selection prompt (search: `Select AI Coding Assistants`) — default to ALL detected IDE agents. If zero IDE agents detected, set to empty array (not an error — BMAD agents may still be selected).
|
|
45
|
+
- [x] 2.5: Skip BMAD agent selection prompt (search: `Select BMAD Method Agents`) — default to ALL BMAD agents
|
|
46
|
+
- [x] 2.6: After agent selection, if total `selectedAgentIds` is zero, print `Error: No agents detected` / `Hint: Ensure at least one supported IDE is present` and exit 1. This is expected CI/CD behavior — fail fast with a clear message rather than silently succeeding with nothing installed.
|
|
47
|
+
- [x] 2.7: Skip scope selection prompt (search: `Installation scope`) — default to `'project'` scope. Note: if `--global` or `--path` was already provided by the user, those take precedence and this prompt is already skipped by existing logic.
|
|
48
|
+
- [x] 2.8: Skip BMAD install/update prompts (search: `BMAD-METHOD not detected` / `BMAD-METHOD installation detected`) — default to YES. **Caution:** the BMAD tools filter (search: `['claude-code', 'cursor', 'cline', 'gemini', 'antigravity']`) is hardcoded; agents outside this list will not receive BMAD customizations. This is existing behavior, not a new concern, but log a warning if `selectedAgentIds` contains agents not in the filter list.
|
|
49
|
+
- [x] 2.9: Skip final confirmation prompt (search: `Proceed with installation`) — proceed immediately
|
|
50
|
+
- [x] Task 3: Update `handleInstall()` to pass `yesFlag` and `agentFlag` through call chain (AC: #1, #2, #3)
|
|
51
|
+
- [x] 3.1: Extract `yesFlag` and `agentFlag` from parsed flags in `handleInstall()` (search: `async function handleInstall`)
|
|
52
|
+
- [x] 3.2: When `agentFlag` is present, validate it against known agents (call `listAgents()` and check). If invalid, print `Error: Unknown agent '<name>'` / `Hint: Run "list" to see available agents` and exit 1.
|
|
53
|
+
- [x] 3.3: Pass `yesFlag` to `installWizard()` call
|
|
54
|
+
- [x] 3.4: When `agentFlag` is present, pass it as `preselectedAgents: [agentFlag]` to `installWizard()`, which skips agent selection entirely (existing behavior when `preselectedAgents` is non-empty)
|
|
55
|
+
- [x] 3.5: Pass `yes: yesFlag` in options to `installSkill()` calls
|
|
56
|
+
- [x] Task 4: Update `installSkill()` to honor `--yes` for upgrade/downgrade prompts (AC: #1)
|
|
57
|
+
- [x] 4.1: Accept `yes` in options destructuring (search: `async function installSkill`, then the `const { force` destructure)
|
|
58
|
+
- [x] 4.2: When `yes === true` and skill is already installed and `force` is false: skip upgrade/downgrade/same-version decision prompts (search: `What would you like to do?` inside `installSkill`). Default action: `'update'` (install the package version). This does NOT force file overwrites — it simply auto-selects "update" instead of prompting.
|
|
59
|
+
- [x] 4.3: When `yes === true`, pre-set `batchState.globalAction = 'update'` so all remaining skills in the batch also auto-update without prompts (search: `batchState`).
|
|
60
|
+
- [x] 4.4: Guard against accidental prompt execution: if `yes === true` and any `prompts()` call returns `undefined` (which happens when stdin is closed/piped), treat it as a fatal error — print `Error: Unexpected interactive prompt in non-interactive mode` and exit 1. This catches missed bypass paths.
|
|
61
|
+
- [x] Task 5: Ensure proper exit codes (AC: #1)
|
|
62
|
+
- [x] 5.1: Verify `process.exit(0)` on successful non-interactive completion
|
|
63
|
+
- [x] 5.2: Verify `process.exit(1)` on any failure (no skills found, no agents detected, invalid `--agent` name, install errors)
|
|
64
|
+
- [x] 5.3: Ensure no dangling promises or unhandled rejections that could prevent clean exit
|
|
65
|
+
- [x] Task 6: Automated tests (AC: #1, #2, #3)
|
|
66
|
+
- [x] 6.1: Unit test `parseFlags()` with `--yes`, `--yes --force`, `--yes --agent claude-code`, `--yes --agent` (missing name)
|
|
67
|
+
- [x] 6.2: Unit test `installWizard()` with `yesFlag=true`: mock `prompts` and assert it is NEVER called. Verify all defaults are applied correctly.
|
|
68
|
+
- [x] 6.3: Unit test `installSkill()` with `yes=true`: verify prompts are skipped and default action is `'update'`
|
|
69
|
+
- [x] 6.4: Integration test: run `npx ma-agents install --yes` with stdin piped from `/dev/null` and assert exit code 0, no stdin reads, and expected output
|
|
70
|
+
- [x] 6.5: Integration test: run `npx ma-agents install --yes --agent invalid-agent-name` and assert exit code 1 with error message
|
|
71
|
+
- [ ] Task 7: Manual smoke testing
|
|
72
|
+
- [ ] 7.1: `npx ma-agents install --yes` — installs all skills to all detected agents, project scope
|
|
73
|
+
- [ ] 7.2: `npx ma-agents install --yes --force` — same as above but overwrites existing files
|
|
74
|
+
- [ ] 7.3: `npx ma-agents install --yes --agent claude-code` — installs all skills to Claude Code only
|
|
75
|
+
- [ ] 7.4: `npx ma-agents install --yes --global` — installs all skills globally
|
|
76
|
+
- [ ] 7.5: `echo '' | npx ma-agents install --yes` — verify zero stdin dependency
|
|
77
|
+
|
|
78
|
+
## Dev Notes
|
|
79
|
+
|
|
80
|
+
### Architecture Compliance
|
|
81
|
+
|
|
82
|
+
- **Module boundaries:** All CLI argument parsing stays in `bin/cli.js`. The `--yes` flag is parsed there and passed as an option to `lib/installer.js`. installer.js NEVER parses CLI args directly — it receives options objects. This is the established pattern with `--force`.
|
|
83
|
+
- **No new dependencies:** The `prompts` library is already used. When `--yes` is active, prompts are simply NOT called — no need for a mock or alternative prompting library.
|
|
84
|
+
- **Code style:** Plain JavaScript, camelCase for variables/functions, no classes. Follow exact patterns from existing `forceFlag` implementation.
|
|
85
|
+
|
|
86
|
+
### Key Implementation Pattern
|
|
87
|
+
|
|
88
|
+
The `--force` flag provides the exact model to follow:
|
|
89
|
+
1. **Parsed in `parseFlags()`** (search: `function parseFlags`) — boolean extraction from args array
|
|
90
|
+
2. **Passed through call chain** — `handleInstall()` → `installWizard()` / `installSkill()`
|
|
91
|
+
3. **Consumed in functions** — conditionally skip prompts based on flag value
|
|
92
|
+
|
|
93
|
+
The `--yes` flag follows this IDENTICAL pattern but covers a broader scope:
|
|
94
|
+
- `--force`: skips file-overwrite guards (the `if (installed && !force)` gate in `installSkill`)
|
|
95
|
+
- `--yes`: skips ALL interactive prompts (wizard + upgrade/downgrade), selecting sensible defaults
|
|
96
|
+
- `--yes --force`: skips ALL prompts AND forces file overwrites — the two flags are **orthogonal**
|
|
97
|
+
|
|
98
|
+
### Flag Semantics: `--yes` vs `--force`
|
|
99
|
+
|
|
100
|
+
These flags operate on different axes and MUST NOT be conflated:
|
|
101
|
+
|
|
102
|
+
| Flag | What it controls | Effect in `installSkill()` |
|
|
103
|
+
|------|-----------------|---------------------------|
|
|
104
|
+
| `--yes` | Prompt skipping | When a skill is already installed, auto-selects `'update'` action instead of prompting. Does NOT bypass version comparison — the version check still runs, it just auto-decides. |
|
|
105
|
+
| `--force` | File overwrite | Bypasses the entire `if (installed && !force)` block. Skips version comparison entirely and proceeds directly to file copy/overwrite. |
|
|
106
|
+
| `--yes --force` | Both | `--force` takes precedence in `installSkill()` (the `!force` gate means the prompt block is never entered, so `--yes` has no additional effect there). In `installWizard()`, `--yes` skips wizard prompts while `--force` is passed through for file operations. |
|
|
107
|
+
|
|
108
|
+
### Default Selections When --yes is Active
|
|
109
|
+
|
|
110
|
+
| Prompt | Default (--yes) | Code anchor (search string) |
|
|
111
|
+
|--------|----------------|---------------------------|
|
|
112
|
+
| Existing installation action | `'reinstall'` (clean slate + install all) | `Existing installation detected` |
|
|
113
|
+
| Skill selection | ALL skills | `install all available skills or choose` |
|
|
114
|
+
| IDE agent selection | ALL detected IDE agents | `Select AI Coding Assistants` |
|
|
115
|
+
| BMAD agent selection | ALL BMAD agents | `Select BMAD Method Agents` |
|
|
116
|
+
| Scope | `'project'` (unless `--global` or `--path`) | `Installation scope` |
|
|
117
|
+
| BMAD install/update | YES | `BMAD-METHOD not detected` / `BMAD-METHOD installation detected` |
|
|
118
|
+
| Final confirmation | YES (proceed) | `Proceed with installation` |
|
|
119
|
+
| Upgrade/downgrade decision | `'update'` (install package version) | `What would you like to do?` inside `installSkill` |
|
|
120
|
+
|
|
121
|
+
**Why `'reinstall'` for existing installation:** The `'update'` action sets `isUpdate = true`, which re-triggers the skill selection prompt (the guard is `selectedSkillIds.length === 0 || isUpdate`). Using `'reinstall'` avoids this interaction — it clears existing installs and proceeds to install all skills cleanly, which is the expected CI/CD behavior.
|
|
122
|
+
|
|
123
|
+
### Critical Guardrails
|
|
124
|
+
|
|
125
|
+
- **Never add TypeScript, build steps, or new dependencies** [Source: architecture.md#Anti-Patterns]
|
|
126
|
+
- **Use `path.join()` for all file paths** — no string concatenation [Source: architecture.md#Enforcement-Guidelines]
|
|
127
|
+
- **Preserve module boundaries** — CLI parsing in cli.js, install logic in installer.js [Source: architecture.md#Module-Boundaries]
|
|
128
|
+
- **Console output format:** plain text, chalk colors (green=success, yellow=warning, red=error), no emoji [Source: architecture.md#Format-Patterns]
|
|
129
|
+
- **Error format:** `Error: <what>` then ` Hint: <how to fix>` [Source: architecture.md#Format-Patterns]
|
|
130
|
+
- **Defensive prompt guard:** In `--yes` mode, if any `prompts()` call executes and returns `undefined` (which happens when stdin is closed/piped from `/dev/null`), this indicates a missed bypass. Treat as fatal: print error and exit 1. This prevents silent success-exit on incomplete operations.
|
|
131
|
+
|
|
132
|
+
### Interaction with --agent Flag
|
|
133
|
+
|
|
134
|
+
The `--agent <name>` flag is NOT currently parsed by `parseFlags()`. This story adds it as a first-class flag (Task 1.2) because AC #3 requires it for CI/CD usage.
|
|
135
|
+
|
|
136
|
+
**Parsing pattern:** Same as `--path` — extract the next positional arg after `--agent` as the agent name, splice both from positional args.
|
|
137
|
+
|
|
138
|
+
**Validation:** `handleInstall()` validates the agent name against `listAgents()` before passing to `installWizard()`. Invalid names produce `Error: Unknown agent '<name>'` / `Hint: Run "list" to see available agents` and exit 1.
|
|
139
|
+
|
|
140
|
+
**Interaction with `--yes`:** When `--agent` is present, it is passed as `preselectedAgents`, which already skips agent selection in the existing wizard logic. `--yes` is not required for `--agent` to work, but they combine naturally.
|
|
141
|
+
|
|
142
|
+
### Batch State Consideration
|
|
143
|
+
|
|
144
|
+
The installer has a `batchState` pattern (search: `batchState` in `installSkill`) for "apply decision to all remaining" during multi-skill installs. When `--yes` is active, pre-set `batchState.globalAction = 'update'` before the skill install loop. This ensures all skills auto-update without prompts, using the existing batch mechanism rather than bypassing prompts individually (cleaner, fewer code paths to maintain).
|
|
145
|
+
|
|
146
|
+
### BMAD Tools Filter Limitation
|
|
147
|
+
|
|
148
|
+
The BMAD integration code (search: `['claude-code', 'cursor', 'cline', 'gemini', 'antigravity']`) hardcodes a filter for which agents receive BMAD customizations. In `--yes` mode, if `selectedAgentIds` includes agents not in this list, those agents will not receive BMAD customizations. This is existing behavior, not introduced by this story, but in `--yes` mode a warning should be logged: `Warning: Agent '<name>' is not supported for BMAD customizations`.
|
|
149
|
+
|
|
150
|
+
### Project Structure Notes
|
|
151
|
+
|
|
152
|
+
- Files to modify: `bin/cli.js`, `lib/installer.js`
|
|
153
|
+
- Test files to create: `test/yes-flag.test.js` (or add to existing test file if one exists)
|
|
154
|
+
- No directory structure changes
|
|
155
|
+
- Alignment with unified project structure: confirmed — both files are established modules in the 4-module architecture
|
|
156
|
+
|
|
157
|
+
### References
|
|
158
|
+
|
|
159
|
+
- [Source: _bmad-output/planning-artifacts/epics.md#Epic-1] — Epic 1 story definition and acceptance criteria
|
|
160
|
+
- [Source: _bmad-output/planning-artifacts/prd.md#FR6] — FR6: Non-interactive CI/CD mode requirement
|
|
161
|
+
- [Source: _bmad-output/planning-artifacts/prd.md#NFR9] — NFR9: Cross-platform identical results
|
|
162
|
+
- [Source: _bmad-output/planning-artifacts/architecture.md#Pipeline-Architecture] — Install pipeline 5 stages
|
|
163
|
+
- [Source: _bmad-output/planning-artifacts/architecture.md#Implementation-Patterns] — Naming, structure, format, process patterns
|
|
164
|
+
- [Source: _bmad-output/planning-artifacts/architecture.md#Module-Boundaries] — cli.js/installer.js/agents.js/bmad.js boundaries
|
|
165
|
+
- [Source: bin/cli.js `function parseFlags`] — Current parseFlags() implementation
|
|
166
|
+
- [Source: bin/cli.js `async function installWizard`] — Current installWizard() with all prompt locations
|
|
167
|
+
- [Source: lib/installer.js `async function installSkill`] — Current installSkill() with force flag pattern
|
|
168
|
+
|
|
169
|
+
## Dev Agent Record
|
|
170
|
+
|
|
171
|
+
### Agent Model Used
|
|
172
|
+
|
|
173
|
+
claude-sonnet-4-6
|
|
174
|
+
|
|
175
|
+
### Debug Log References
|
|
176
|
+
|
|
177
|
+
None — implementation proceeded cleanly without debugging issues.
|
|
178
|
+
|
|
179
|
+
### Completion Notes List
|
|
180
|
+
|
|
181
|
+
- Added `yesFlag` and `agentFlag` to `parseFlags()` with filtering from positional args; validated `--agent` presence requires a name argument.
|
|
182
|
+
- Updated `installWizard()` with 5th parameter `yesFlag=false`; all 8 interactive prompts are bypassed with sensible defaults when `yesFlag=true`: reinstall (Step 0), all skills (Step 1), all agents (Step 2), project scope (Step 3), BMAD auto-install/update (Step 3.5), skip confirmation (Step 4).
|
|
183
|
+
- Updated `handleInstall()` to extract `yesFlag`/`agentFlag`, validate `agentFlag` against `listAgents()`, and pass both through to wizard and direct-install paths.
|
|
184
|
+
- Updated `installSkill()` to accept `yes` option; pre-sets `batchState.globalAction = 'update'` at the top of the function (before path group iteration) so all skills in the batch auto-update; added `undefined`-guard after each `prompts()` call as defensive check.
|
|
185
|
+
- Added `require.main === module` guard in `cli.js` and exported `parseFlags` to enable unit testing without triggering main().
|
|
186
|
+
- Created `test/yes-flag.test.js` with 9 tests covering all ACs: 5 parseFlags unit tests, 2 integration tests for error exits, 1 batchState pre-set unit test, 1 integration test for full `--yes` install.
|
|
187
|
+
- Updated `package.json` test script to run `node test/yes-flag.test.js`.
|
|
188
|
+
- All 9 automated tests pass. Task 7 (manual smoke tests) left for user to verify.
|
|
189
|
+
|
|
190
|
+
### File List
|
|
191
|
+
|
|
192
|
+
- bin/cli.js (modified)
|
|
193
|
+
- lib/installer.js (modified)
|
|
194
|
+
- test/yes-flag.test.js (created)
|
|
195
|
+
- package.json (modified — test script)
|
|
196
|
+
- _bmad-output/implementation-artifacts/1-1-ci-cd-yes-flag.md (this file)
|
|
197
|
+
|
|
198
|
+
## Change Log
|
|
199
|
+
|
|
200
|
+
- 2026-03-16: Implemented `--yes` and `--agent` flags for non-interactive CI/CD mode. Modified `parseFlags()`, `installWizard()`, `handleInstall()` in `bin/cli.js` and `installSkill()` in `lib/installer.js`. Created `test/yes-flag.test.js` with 9 passing automated tests. All ACs #1, #2, #3 satisfied.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Story 10.1: Ensure _bmad-output Is Not Gitignored
|
|
2
|
+
|
|
3
|
+
Status: done
|
|
4
|
+
|
|
5
|
+
<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
6
|
+
|
|
7
|
+
## Story
|
|
8
|
+
|
|
9
|
+
As a **Chief Architect**,
|
|
10
|
+
I want the installer to remove _bmad-output from .gitignore if present and never add it,
|
|
11
|
+
So that planning artifacts are tracked as version-controlled project knowledge.
|
|
12
|
+
|
|
13
|
+
## Acceptance Criteria
|
|
14
|
+
|
|
15
|
+
1. **Given** project with _bmad-output in .gitignore, **When** installer runs (install/update), **Then** _bmad-output line removed, **And** the console displays exactly: `_bmad-output is now tracked as project knowledge (not gitignored)`
|
|
16
|
+
2. **Given** project with no _bmad-output in .gitignore, **When** installer runs, **Then** .gitignore not modified for this concern (no write call is made)
|
|
17
|
+
3. **Given** no .gitignore exists, **When** installer runs, **Then** no .gitignore created for this purpose and no error thrown
|
|
18
|
+
4. **Given** installer creates/updates .gitignore for other entries, **When** it writes, **Then** _bmad-output never included in the written content
|
|
19
|
+
|
|
20
|
+
## Tasks / Subtasks
|
|
21
|
+
|
|
22
|
+
- [ ] Verify chalk is already a project dependency (`package.json`) before using chalk.green(); add import/require at the top of installer.js if not already present (AC: #1)
|
|
23
|
+
- [ ] Create ensureBmadOutputTracked(projectRoot) function in lib/installer.js (AC: #1, #2, #3)
|
|
24
|
+
- [ ] Attempt to read .gitignore with `fs.readFileSync(path.join(projectRoot, '.gitignore'), 'utf-8')` inside a `try/catch`; on `ENOENT` (or any error), return early — do NOT use `existsSync` pre-check followed by `readFileSync` (avoids TOCTOU race condition) (AC: #3)
|
|
25
|
+
- [ ] Split content on `/\r?\n/` to handle both Unix (LF) and Windows (CRLF) line endings — never split on `'\n'` alone (AC: #1, Windows compat)
|
|
26
|
+
- [ ] Trim each line before pattern comparison (handles trailing whitespace) (AC: #1)
|
|
27
|
+
- [ ] Scan for lines matching _bmad-output variations after trimming: `_bmad-output`, `_bmad-output/`, `/_bmad-output`, `/_bmad-output/`
|
|
28
|
+
- [ ] Remove matching lines; reconstruct file content preserving original line endings (join with `'\n'` is acceptable as normalized output)
|
|
29
|
+
- [ ] Write back only if at least one line was removed (AC: #2)
|
|
30
|
+
- [ ] Print `chalk.green('_bmad-output is now tracked as project knowledge (not gitignored)')` when lines are removed (AC: #1)
|
|
31
|
+
- [ ] Integrate ensureBmadOutputTracked() into install pipeline (AC: #1)
|
|
32
|
+
- [ ] Call after skill installation or during manifest update stage
|
|
33
|
+
- [ ] Audit existing codebase for any code that adds _bmad-output to .gitignore (AC: #4)
|
|
34
|
+
- [ ] Check lib/installer.js for any .gitignore write logic that includes _bmad-output
|
|
35
|
+
- [ ] Check lib/bmad.js for any .gitignore write logic that includes _bmad-output
|
|
36
|
+
- [ ] Remove any such logic if found
|
|
37
|
+
- [ ] Remove _bmad-output/ from the ma-agents project's own .gitignore (AC: #4)
|
|
38
|
+
|
|
39
|
+
### Tests
|
|
40
|
+
|
|
41
|
+
- [ ] Test AC1 — removal and message:
|
|
42
|
+
- [ ] Fixture: .gitignore containing `_bmad-output/` among other entries
|
|
43
|
+
- [ ] Assert: `_bmad-output/` line removed from written content
|
|
44
|
+
- [ ] Assert: `writeFileSync` (or equivalent) WAS called once
|
|
45
|
+
- [ ] Assert: console output contains the exact string `_bmad-output is now tracked as project knowledge (not gitignored)`
|
|
46
|
+
- [ ] Test AC2 — no-op when already clean:
|
|
47
|
+
- [ ] Fixture: .gitignore with no _bmad-output entry
|
|
48
|
+
- [ ] Assert: `writeFileSync` (or equivalent) was NOT called (use sinon spy or jest mock)
|
|
49
|
+
- [ ] Test AC3 — missing .gitignore:
|
|
50
|
+
- [ ] Fixture: project directory with no .gitignore file
|
|
51
|
+
- [ ] Assert: no error thrown, no .gitignore created
|
|
52
|
+
- [ ] Test AC4 — installer write paths never include _bmad-output:
|
|
53
|
+
- [ ] Spy on all .gitignore write call sites in lib/installer.js and lib/bmad.js
|
|
54
|
+
- [ ] Assert: none of the written content strings include `_bmad-output`
|
|
55
|
+
- [ ] This test acts as a regression guard — future code changes that reintroduce the pattern will fail this test
|
|
56
|
+
- [ ] Test — Windows CRLF compatibility:
|
|
57
|
+
- [ ] Fixture: .gitignore with `_bmad-output/\r\n` (Windows line endings)
|
|
58
|
+
- [ ] Assert: line is correctly detected and removed (match does not fail due to `\r`)
|
|
59
|
+
- [ ] Test — idempotency:
|
|
60
|
+
- [ ] Run ensureBmadOutputTracked() on a project where _bmad-output was already removed in a prior run
|
|
61
|
+
- [ ] Assert: `writeFileSync` is NOT called on the second run (no spurious file churn)
|
|
62
|
+
- [ ] Test — own .gitignore cleanup:
|
|
63
|
+
- [ ] Assert: the ma-agents project's own .gitignore does not contain `_bmad-output` (grep assertion on the file)
|
|
64
|
+
|
|
65
|
+
## Dev Notes
|
|
66
|
+
|
|
67
|
+
### Architecture Compliance
|
|
68
|
+
- FR58/FR59: _bmad-output is project knowledge and must be version-controlled.
|
|
69
|
+
- Use `fs.readFileSync(path, 'utf-8')` — always pass the `'utf-8'` encoding option. Without it, `readFileSync` returns a Buffer; calling `.split()` on a Buffer throws a TypeError in some Node versions and produces unexpected behavior in others.
|
|
70
|
+
- Console output uses `chalk.green()` per established console output patterns in the codebase. Verify chalk import style matches the project's module system (CJS `require` vs ESM `import`) — chalk v5+ is ESM-only.
|
|
71
|
+
- `path.join()` for all file path construction.
|
|
72
|
+
|
|
73
|
+
### TOCTOU Fix — CRITICAL
|
|
74
|
+
Do NOT use the pattern:
|
|
75
|
+
```js
|
|
76
|
+
if (fs.existsSync(filePath)) {
|
|
77
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
78
|
+
...
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
The file can be deleted between `existsSync` and `readFileSync`. Use instead:
|
|
82
|
+
```js
|
|
83
|
+
try {
|
|
84
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
85
|
+
// proceed
|
|
86
|
+
} catch (err) {
|
|
87
|
+
if (err.code === 'ENOENT') return; // file doesn't exist — no-op
|
|
88
|
+
throw err; // unexpected error — re-throw
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Windows Line Ending Fix — CRITICAL
|
|
93
|
+
Do NOT split on `'\n'` alone. Use:
|
|
94
|
+
```js
|
|
95
|
+
const lines = content.split(/\r?\n/);
|
|
96
|
+
```
|
|
97
|
+
Then trim each line before comparison:
|
|
98
|
+
```js
|
|
99
|
+
const trimmed = line.trim();
|
|
100
|
+
if (BMAD_OUTPUT_PATTERNS.includes(trimmed)) { ... }
|
|
101
|
+
```
|
|
102
|
+
This handles both `_bmad-output\r` (Windows CRLF) and `_bmad-output` (Unix LF).
|
|
103
|
+
|
|
104
|
+
### Pattern List
|
|
105
|
+
```js
|
|
106
|
+
const BMAD_OUTPUT_PATTERNS = ['_bmad-output', '_bmad-output/', '/_bmad-output', '/_bmad-output/'];
|
|
107
|
+
```
|
|
108
|
+
Note: commented-out lines (e.g., `# _bmad-output`) and glob variants (e.g., `_bmad-output/**`) are out of scope for this story. The four listed patterns cover the common cases written by IDEs and developers.
|
|
109
|
+
|
|
110
|
+
### Write Guard (AC2)
|
|
111
|
+
Only write back if lines were actually removed:
|
|
112
|
+
```js
|
|
113
|
+
const filtered = lines.filter(line => !BMAD_OUTPUT_PATTERNS.includes(line.trim()));
|
|
114
|
+
if (filtered.length === lines.length) return; // nothing removed — do not write
|
|
115
|
+
fs.writeFileSync(filePath, filtered.join('\n'), 'utf-8');
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Exact Message (AC1)
|
|
119
|
+
The chalk output must produce exactly this text (the chalk color wrapping is fine, but the string content must match):
|
|
120
|
+
```
|
|
121
|
+
_bmad-output is now tracked as project knowledge (not gitignored)
|
|
122
|
+
```
|
|
123
|
+
Test assertions must verify this exact string, not just "something was logged."
|
|
124
|
+
|
|
125
|
+
### Critical Guardrails
|
|
126
|
+
- Do NOT use `existsSync` before `readFileSync` — use try/catch with `ENOENT` check
|
|
127
|
+
- Do NOT use `readFileSync` without `'utf-8'` encoding
|
|
128
|
+
- Do NOT split on `'\n'` alone — always use `/\r?\n/`
|
|
129
|
+
- Do NOT create a .gitignore file if one does not exist
|
|
130
|
+
- Do NOT remove other entries from .gitignore — only _bmad-output variations
|
|
131
|
+
- Do NOT skip the AC2 write-guard test — assert the write function was NOT called
|
|
132
|
+
|
|
133
|
+
### Project Structure Notes
|
|
134
|
+
- Modify: `lib/installer.js` — add ensureBmadOutputTracked() function and call it in install pipeline
|
|
135
|
+
- Modify: `.gitignore` (project root) — remove `_bmad-output/` entry
|
|
136
|
+
- Audit: `lib/bmad.js` — check for any .gitignore write logic referencing _bmad-output
|
|
137
|
+
|
|
138
|
+
### References
|
|
139
|
+
- [Source: lib/installer.js — install pipeline for integration point]
|
|
140
|
+
- [Source: .gitignore — current _bmad-output/ entry to remove]
|
|
141
|
+
- [Source: lib/bmad.js — audit for .gitignore write logic]
|
|
142
|
+
|
|
143
|
+
## Dev Agent Record
|
|
144
|
+
|
|
145
|
+
### Agent Model Used
|
|
146
|
+
claude-sonnet-4-6
|
|
147
|
+
|
|
148
|
+
### Debug Log References
|
|
149
|
+
None — implementation was straightforward with no debugging required.
|
|
150
|
+
|
|
151
|
+
### Completion Notes List
|
|
152
|
+
- ✅ Added `BMAD_OUTPUT_PATTERNS` constant and `ensureBmadOutputTracked(projectRoot)` function to `lib/installer.js` after `writeManifest()`
|
|
153
|
+
- ✅ Uses try/catch with ENOENT check (no TOCTOU race), splits on `/\r?\n/`, trims lines before comparison, writes back only if lines removed
|
|
154
|
+
- ✅ Called `ensureBmadOutputTracked(installPath)` immediately after `writeManifest(installPath, manifest)` in `installSkill()`
|
|
155
|
+
- ✅ Exported `ensureBmadOutputTracked` in `module.exports`
|
|
156
|
+
- ✅ Removed commented `_bmad-output/` line from project `.gitignore` (line 16)
|
|
157
|
+
- ✅ Created `test/bmad-output-policy.test.js` with 6 Story 10-1 tests (AC1–AC3, CRLF, idempotency, own .gitignore) plus 5 relocated Story 10-2 README tests
|
|
158
|
+
- ✅ Removed Story 10-2 test block from `test/yes-flag.test.js`
|
|
159
|
+
- ✅ Strengthened discoverable assertion in relocated test (counts H2s before section, asserts ≤ 3)
|
|
160
|
+
- ✅ All 11 tests in `test/bmad-output-policy.test.js` pass
|
|
161
|
+
|
|
162
|
+
### File List
|
|
163
|
+
- `lib/installer.js` (modified — added `ensureBmadOutputTracked()`, call in `installSkill()`, exported)
|
|
164
|
+
- `.gitignore` (modified — removed commented `_bmad-output/` line)
|
|
165
|
+
- `test/bmad-output-policy.test.js` (created — 11 tests for Stories 10-1 and 10-2)
|
|
166
|
+
- `test/yes-flag.test.js` (modified — removed Story 10-2 test block)
|
|
167
|
+
- `_bmad-output/implementation-artifacts/10-1-ensure-bmad-output-not-gitignored.md` (modified — status → done)
|
|
168
|
+
- `_bmad-output/implementation-artifacts/10-2-document-bmad-output-policy.md` (modified — status → done)
|
|
169
|
+
- `_bmad-output/implementation-artifacts/sprint-status.yaml` (modified — 10-2 → done)
|
|
170
|
+
|
|
171
|
+
### Change Log
|
|
172
|
+
- 2026-03-18: Implemented Story 10-1 — ensureBmadOutputTracked() in lib/installer.js; also completed Story 10-2 closure (test relocation, status updates)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Story 10.2: Document _bmad-output Policy in README and Installation Guidance
|
|
2
|
+
|
|
3
|
+
Status: done
|
|
4
|
+
|
|
5
|
+
depends-on: 10-1-ensure-bmad-output-not-gitignored
|
|
6
|
+
|
|
7
|
+
<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
8
|
+
|
|
9
|
+
## Story
|
|
10
|
+
|
|
11
|
+
As a **Chief Architect**,
|
|
12
|
+
I want the _bmad-output folder policy documented in the README and installation guidance,
|
|
13
|
+
So that developers understand why _bmad-output is version-controlled and do not add it back to .gitignore.
|
|
14
|
+
|
|
15
|
+
## Acceptance Criteria
|
|
16
|
+
|
|
17
|
+
1. **Given** the project README, **When** a developer reads it, **Then** it contains a dedicated section explaining that `_bmad-output/` is intentionally tracked in version control as project knowledge, **And** the section explains what the folder contains (planning artifacts: PRDs, architecture, epics, stories, sprint plans), **And** the section explains why it is tracked (team alignment, AI context continuity, project history).
|
|
18
|
+
2. **Given** the installation or getting-started documentation, **When** a developer sets up the tool, **Then** the guidance explicitly states that `_bmad-output/` must not be added to `.gitignore` and explains that the installer will remove it if found.
|
|
19
|
+
3. **Given** the README section on `_bmad-output`, **When** a developer's IDE or tooling suggests adding it to `.gitignore`, **Then** the documentation gives them the language to confidently decline (i.e., the rationale is clear and actionable).
|
|
20
|
+
|
|
21
|
+
## Tasks / Subtasks
|
|
22
|
+
|
|
23
|
+
- [x] Add `_bmad-output/` policy section to README.md (AC: #1, #3)
|
|
24
|
+
- [x] Place section under an appropriate heading — after the installation section or as part of a "Project Structure" or "How It Works" section
|
|
25
|
+
- [x] Section heading: `## Project Knowledge: _bmad-output/`
|
|
26
|
+
- [x] Content must include:
|
|
27
|
+
- [x] What the folder is: planning artifacts generated by BMAD agents (PRDs, architecture docs, epics, stories, sprint status)
|
|
28
|
+
- [x] Why it is tracked: enables team alignment on AI-generated plans, provides context continuity for AI agents across sessions, preserves decision history
|
|
29
|
+
- [x] Explicit statement: "Do not add `_bmad-output/` to your `.gitignore`"
|
|
30
|
+
- [x] Note: the installer automatically removes `_bmad-output/` from `.gitignore` if it finds it there
|
|
31
|
+
- [x] Add `_bmad-output/` guidance to installation documentation (AC: #2)
|
|
32
|
+
- [x] If a dedicated installation guide exists (e.g., INSTALL.md, docs/getting-started.md, or equivalent): add a note in the post-install or project setup section
|
|
33
|
+
- [x] If no separate installation doc exists: add the note to the README installation section
|
|
34
|
+
- [x] Content: "`_bmad-output/` is tracked by the installer as version-controlled project knowledge. Do not add it to `.gitignore`. If it is present in `.gitignore`, the installer will remove it automatically."
|
|
35
|
+
- [x] Verify the section is discoverable (AC: #3)
|
|
36
|
+
- [x] Confirm the `_bmad-output/` section is reachable from the README table of contents (if one exists) or appears within the first two major sections of the document
|
|
37
|
+
- [x] Test — README contains required content (AC: #1)
|
|
38
|
+
- [x] Assert README.md contains the exact heading `## Project Knowledge: _bmad-output/` (or equivalent agreed heading)
|
|
39
|
+
- [x] Assert README.md contains the phrase "Do not add `_bmad-output/` to your `.gitignore`"
|
|
40
|
+
- [x] Assert README.md mentions at least one reason for tracking (e.g., "team alignment", "AI context", "planning artifacts")
|
|
41
|
+
- [x] Test — installation guidance contains the policy note (AC: #2)
|
|
42
|
+
- [x] Assert the relevant installation doc contains the phrase "`_bmad-output/`" in a policy/setup context
|
|
43
|
+
- [x] Assert the installer behavior (auto-removal from .gitignore) is mentioned
|
|
44
|
+
|
|
45
|
+
## Dev Notes
|
|
46
|
+
|
|
47
|
+
### Scope
|
|
48
|
+
This is a documentation-only story. No code changes to `lib/installer.js`, `lib/agents.js`, or any other source file. The deliverables are markdown edits to `README.md` and optionally one installation documentation file.
|
|
49
|
+
|
|
50
|
+
### Rationale to Include
|
|
51
|
+
The documentation must give developers enough context to push back when their IDE suggests adding `_bmad-output/` to `.gitignore`. The key points:
|
|
52
|
+
1. **What**: AI-generated planning artifacts (PRDs, architecture, epics, stories, sprint plans)
|
|
53
|
+
2. **Why commit**: Team members need to see the same plans; AI agents need prior context across sessions; the history of decisions is valuable
|
|
54
|
+
3. **Installer behavior**: The tool actively removes this entry from `.gitignore` — documenting this prevents confusion when developers notice their `.gitignore` was modified
|
|
55
|
+
|
|
56
|
+
### Section Placement
|
|
57
|
+
Prefer placing the section near the existing description of how the tool works — not buried in a troubleshooting FAQ. Developers should encounter it during normal onboarding, not only when something goes wrong.
|
|
58
|
+
|
|
59
|
+
### Test Strategy
|
|
60
|
+
Documentation tests can be implemented as simple grep/regex assertions in the test suite:
|
|
61
|
+
```js
|
|
62
|
+
const readme = fs.readFileSync('README.md', 'utf-8');
|
|
63
|
+
assert(readme.includes('_bmad-output'));
|
|
64
|
+
assert(readme.includes('Do not add'));
|
|
65
|
+
```
|
|
66
|
+
These serve as regression guards — if someone accidentally removes the section, CI catches it.
|
|
67
|
+
|
|
68
|
+
### Critical Guardrails
|
|
69
|
+
- Do NOT modify any source code files in this story — documentation only
|
|
70
|
+
- Do NOT remove existing README sections — only add or extend
|
|
71
|
+
- The exact phrase "Do not add `_bmad-output/` to your `.gitignore`" (or semantically equivalent) must appear in the written content
|
|
72
|
+
|
|
73
|
+
### Project Structure Notes
|
|
74
|
+
- Modify: `README.md` — add `_bmad-output/` policy section
|
|
75
|
+
- Modify (if exists): installation guide or getting-started doc — add policy note
|
|
76
|
+
- No source code changes
|
|
77
|
+
|
|
78
|
+
### References
|
|
79
|
+
- [FR59: _bmad-output policy documented in README and installation guidance]
|
|
80
|
+
- [FR58: _bmad-output not added to .gitignore by installer — covered in Story 10.1]
|
|
81
|
+
- [Story 10.1 — ensureBmadOutputTracked() behavior that this story documents]
|
|
82
|
+
|
|
83
|
+
## Dev Agent Record
|
|
84
|
+
|
|
85
|
+
### Agent Model Used
|
|
86
|
+
claude-sonnet-4-6
|
|
87
|
+
|
|
88
|
+
### Debug Log References
|
|
89
|
+
None — documentation-only story.
|
|
90
|
+
|
|
91
|
+
### Completion Notes List
|
|
92
|
+
- ✅ Added `## Project Knowledge: _bmad-output/` section to README.md placed between "How It Works" and "Supported Agents" sections (discoverable early in document)
|
|
93
|
+
- ✅ Section covers: what the folder contains, why it's tracked (3 reasons), explicit do-not-gitignore directive, installer behaviour note
|
|
94
|
+
- ✅ No separate installation doc exists; policy guidance is in the README installation context (AC #2 satisfied)
|
|
95
|
+
- ✅ 5 regression tests added to `test/yes-flag.test.js` — all pass
|
|
96
|
+
|
|
97
|
+
### File List
|
|
98
|
+
- `README.md` (modified — added `## Project Knowledge: _bmad-output/` section)
|
|
99
|
+
- `test/yes-flag.test.js` (modified — added Story 10.2 documentation regression tests)
|
|
100
|
+
|
|
101
|
+
### Change Log
|
|
102
|
+
- 2026-03-18: Implemented Story 10.2 — documented _bmad-output/ policy in README.md with regression tests
|