bmad-method 6.10.1-next.8 → 6.11.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/.claude-plugin/marketplace.json +30 -57
- package/README.md +49 -82
- package/README_CN.md +10 -10
- package/README_VN.md +11 -11
- package/bmad-modules.yaml +43 -39
- package/package.json +7 -3
- package/removals.txt +17 -0
- package/src/bmm-skills/{1-analysis → agents}/bmad-agent-analyst/SKILL.md +1 -1
- package/src/bmm-skills/{1-analysis → agents}/bmad-agent-analyst/customize.toml +22 -7
- package/src/bmm-skills/{3-solutioning → agents}/bmad-agent-architect/SKILL.md +1 -1
- package/src/bmm-skills/{3-solutioning → agents}/bmad-agent-architect/customize.toml +2 -2
- package/src/bmm-skills/{4-implementation → agents}/bmad-agent-dev/SKILL.md +1 -1
- package/src/bmm-skills/{4-implementation → agents}/bmad-agent-dev/customize.toml +7 -14
- package/src/bmm-skills/{2-plan-workflows → agents}/bmad-agent-pm/SKILL.md +1 -1
- package/src/bmm-skills/{2-plan-workflows → agents}/bmad-agent-pm/customize.toml +2 -2
- package/src/bmm-skills/{2-plan-workflows → agents}/bmad-agent-ux-designer/SKILL.md +1 -1
- package/src/bmm-skills/module-help.csv +14 -26
- package/src/bmm-skills/module.yaml +5 -15
- package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/SKILL.md +3 -3
- package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/customize.toml +4 -2
- package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/SKILL.md +1 -1
- package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/steps/step-04-final-validation.md +1 -1
- package/src/bmm-skills/plan/bmad-generate-project-context/SKILL.md +10 -0
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/SKILL.md +3 -1
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/assets/prd-template.md +1 -1
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/customize.toml +5 -3
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/references/validate.md +3 -3
- package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/SKILL.md +1 -1
- package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/bmad-manifest.json +1 -1
- package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/references/verdict.md +1 -1
- package/src/bmm-skills/{1-analysis → plan}/bmad-product-brief/SKILL.md +1 -1
- package/src/bmm-skills/{1-analysis → plan}/bmad-product-brief/customize.toml +5 -3
- package/src/bmm-skills/plan/bmad-project-context/SKILL.md +110 -0
- package/src/bmm-skills/plan/bmad-project-context/customize.toml +24 -0
- package/src/bmm-skills/plan/bmad-project-context/references/best-practices.md +65 -0
- package/src/bmm-skills/plan/bmad-project-context/references/template.md +55 -0
- package/src/{core-skills → bmm-skills/plan}/bmad-spec/SKILL.md +18 -3
- package/src/{core-skills → bmm-skills/plan}/bmad-spec/assets/spec-template.md +1 -1
- package/src/bmm-skills/plan/bmad-spec/assets/stories-schema.md +44 -0
- package/src/{core-skills → bmm-skills/plan}/bmad-spec/customize.toml +3 -4
- package/src/bmm-skills/plan/bmad-sprint-planning/SKILL.md +62 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/fix-sprint-status.md +30 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/generate-tracking.md +25 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/readiness-gate.md +20 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/status-view.md +14 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/validate.md +10 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc +0 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/sprint_plan.py +697 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/test_sprint_plan.py +524 -0
- package/src/bmm-skills/{4-implementation → plan}/bmad-sprint-planning/sprint-status-template.yaml +9 -7
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/SKILL.md +1 -1
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/color-themes.md +1 -1
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/customize.toml +4 -2
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/references/creative-tools.md +1 -1
- package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/references/validate.md +1 -1
- package/src/bmm-skills/ship/bmad-build/SKILL.md +13 -0
- package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/compile-epic-context.md +1 -1
- package/src/bmm-skills/ship/bmad-build/customize.toml +164 -0
- package/src/bmm-skills/ship/bmad-build/references/deletion-check.md +14 -0
- package/src/bmm-skills/ship/bmad-build/review-prompts/edge-case-hunter.md +88 -0
- package/src/bmm-skills/ship/bmad-build/review-prompts/verification-gap.md +113 -0
- package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-01-clarify-and-route.md +20 -19
- package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-02-plan.md +5 -9
- package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-03-implement.md +10 -6
- package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-04-review.md +9 -15
- package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/step-05-present.md +10 -13
- package/src/bmm-skills/ship/bmad-build/step-oneshot.md +77 -0
- package/src/bmm-skills/ship/bmad-build/sync-sprint-status.md +19 -0
- package/src/bmm-skills/ship/bmad-build/workflow.md +84 -0
- package/src/bmm-skills/ship/bmad-build-auto/SKILL.md +13 -0
- package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/compile-epic-context.md +1 -1
- package/src/bmm-skills/ship/bmad-build-auto/customize.toml +121 -0
- package/src/{core-skills/bmad-review-edge-case-hunter/SKILL.md → bmm-skills/ship/bmad-build-auto/review-prompts/edge-case-hunter.md} +21 -6
- package/src/{core-skills/bmad-review-verification-gap/SKILL.md → bmm-skills/ship/bmad-build-auto/review-prompts/verification-gap.md} +15 -8
- package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/spec-template.md +2 -1
- package/src/bmm-skills/ship/bmad-build-auto/step-01-clarify-and-route.md +83 -0
- package/src/bmm-skills/ship/bmad-build-auto/step-02-plan.md +27 -0
- package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/step-03-implement.md +6 -4
- package/src/bmm-skills/{4-implementation/bmad-dev-auto → ship/bmad-build-auto}/step-04-review.md +26 -25
- package/src/bmm-skills/ship/bmad-build-auto/workflow.md +104 -0
- package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/SKILL.md +1 -1
- package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-05-wrapup.md +1 -1
- package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/SKILL.md +1 -1
- package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/customize.toml +37 -17
- package/src/bmm-skills/ship/bmad-code-review/references/deletion-check.md +14 -0
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/edge-case-hunter.md +88 -0
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/verification-gap.md +113 -0
- package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/steps/step-01-gather-context.md +7 -4
- package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/steps/step-02-review.md +1 -1
- package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/steps/step-04-present.md +1 -1
- package/src/bmm-skills/{4-implementation → ship}/bmad-correct-course/SKILL.md +7 -8
- package/src/bmm-skills/{4-implementation → ship}/bmad-qa-generate-e2e-tests/SKILL.md +2 -2
- package/src/bmm-skills/ship/bmad-retrospective/SKILL.md +94 -0
- package/src/bmm-skills/{4-implementation → ship}/bmad-retrospective/customize.toml +2 -2
- package/src/bmm-skills/ship/bmad-retrospective/references/acceptance-verdict.md +55 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/aggregate-views.md +17 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/evidence-gathering.md +30 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/retro-document.md +84 -0
- package/src/bmm-skills/ship/bmad-retrospective/references/team-discussion.md +22 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/git_evidence.py +304 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/sprint_status.py +746 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/fixtures/sprint-status-template.yaml +71 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_git_evidence.py +750 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_sprint_status.py +1579 -0
- package/src/bmm-skills/v6-shims/README.md +28 -0
- package/src/bmm-skills/{3-solutioning → v6-shims}/bmad-create-architecture/SKILL.md +2 -2
- package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-create-prd/SKILL.md +4 -4
- package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/SKILL.md +5 -3
- package/src/bmm-skills/v6-shims/bmad-dev-auto/SKILL.md +19 -0
- package/src/bmm-skills/{4-implementation → v6-shims}/bmad-dev-story/SKILL.md +5 -3
- package/src/bmm-skills/{4-implementation → v6-shims}/bmad-dev-story/customize.toml +3 -0
- package/src/bmm-skills/v6-shims/bmad-document-project/SKILL.md +14 -0
- package/src/bmm-skills/v6-shims/bmad-domain-research/SKILL.md +14 -0
- package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-edit-prd/SKILL.md +4 -4
- package/src/bmm-skills/v6-shims/bmad-market-research/SKILL.md +14 -0
- package/src/bmm-skills/v6-shims/bmad-quick-dev/SKILL.md +19 -0
- package/src/bmm-skills/v6-shims/bmad-sprint-status/SKILL.md +26 -0
- package/src/bmm-skills/v6-shims/bmad-technical-research/SKILL.md +14 -0
- package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-validate-prd/SKILL.md +4 -4
- package/src/core-skills/bmad-advanced-elicitation/SKILL.md +26 -103
- package/src/core-skills/bmad-advanced-elicitation/customize.toml +54 -0
- package/src/core-skills/bmad-advanced-elicitation/scripts/pick_methods.py +233 -0
- package/src/core-skills/bmad-advanced-elicitation/scripts/tests/test_pick_methods.py +228 -0
- package/src/core-skills/bmad-brainstorming/SKILL.md +3 -3
- package/src/core-skills/bmad-brainstorming/assets/brain-selector.html +2 -0
- package/src/core-skills/bmad-brainstorming/references/mode-autonomous.md +1 -1
- package/src/core-skills/bmad-brainstorming/scripts/brain.py +36 -6
- package/src/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +22 -0
- package/src/core-skills/bmad-customize/SKILL.md +2 -2
- package/src/core-skills/bmad-deep-recon/SKILL.md +82 -0
- package/src/core-skills/bmad-deep-recon/assets/research.template.md +18 -0
- package/src/core-skills/bmad-deep-recon/customize.toml +212 -0
- package/src/core-skills/bmad-deep-recon/references/draft.md +8 -0
- package/src/core-skills/bmad-deep-recon/references/finalize.md +11 -0
- package/src/core-skills/bmad-deep-recon/references/html-briefing.md +16 -0
- package/src/core-skills/bmad-deep-recon/references/lifecycle.md +11 -0
- package/src/core-skills/bmad-deep-recon/references/process.md +10 -0
- package/src/core-skills/bmad-deep-recon/references/run.md +73 -0
- package/src/core-skills/bmad-deep-recon/references/selection.md +13 -0
- package/src/core-skills/bmad-deep-recon/references/synthesis.md +16 -0
- package/src/core-skills/bmad-deep-recon/references/verification.md +29 -0
- package/src/core-skills/bmad-deep-recon/scripts/recon_kit.py +322 -0
- package/src/core-skills/bmad-deep-recon/scripts/tests/test_recon_kit.py +144 -0
- package/src/core-skills/bmad-deep-recon/types/academic-lit.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/competitive.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/domain.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/market.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/technical.md +19 -0
- package/src/core-skills/bmad-deep-recon/types/user-voice.md +19 -0
- package/src/core-skills/bmad-forge-idea/SKILL.md +2 -2
- package/src/core-skills/bmad-forge-idea/scripts/resolve_personas.py +7 -2
- package/src/core-skills/bmad-help/SKILL.md +3 -3
- package/src/core-skills/bmad-party-mode/SKILL.md +2 -2
- package/src/core-skills/bmad-party-mode/customize.toml +1 -1
- package/src/core-skills/bmad-party-mode/scripts/resolve_party.py +14 -4
- package/src/core-skills/bmad-review/SKILL.md +49 -0
- package/src/core-skills/bmad-review/customize.toml +141 -0
- package/src/core-skills/bmad-review/references/editorial-common.md +56 -0
- package/src/core-skills/bmad-review/references/lens-adversarial.md +19 -0
- package/src/core-skills/bmad-review/references/lens-edge-case-hunter.md +54 -0
- package/src/core-skills/bmad-review/references/lens-prose.md +7 -0
- package/src/core-skills/bmad-review/references/lens-structure.md +9 -0
- package/src/core-skills/bmad-review/references/lens-verification-gap.md +92 -0
- package/src/core-skills/bmad-review/references/structure-models.md +44 -0
- package/src/core-skills/bmad-review/scripts/tests/test_word_metrics.py +62 -0
- package/src/core-skills/bmad-review/scripts/word_metrics.py +102 -0
- package/src/core-skills/module-help.csv +4 -8
- package/src/core-skills/module.yaml +5 -0
- package/src/core-skills/v6-shims/README.md +25 -0
- package/src/core-skills/v6-shims/bmad-editorial-review/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-editorial-review/customize.toml +31 -0
- package/src/core-skills/v6-shims/bmad-editorial-review-prose/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-editorial-review-structure/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-review-adversarial-general/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-review-edge-case-hunter/SKILL.md +6 -0
- package/src/core-skills/v6-shims/bmad-review-verification-gap/SKILL.md +6 -0
- package/src/scripts/__pycache__/config_utils.cpython-311.pyc +0 -0
- package/src/scripts/config_utils.py +119 -0
- package/src/scripts/render_skill.py +401 -0
- package/src/scripts/resolve_config.py +32 -136
- package/src/scripts/resolve_customization.py +43 -184
- package/src/scripts/tests/__pycache__/test_config_utils.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_config.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-311.pyc +0 -0
- package/src/scripts/tests/test_config_utils.py +85 -0
- package/src/scripts/tests/test_resolve_config.py +89 -0
- package/src/scripts/tests/test_resolve_customization.py +27 -0
- package/tools/installer/cli-utils.js +6 -2
- package/tools/installer/core/installer.js +31 -9
- package/tools/installer/core/manifest-generator.js +1 -1
- package/tools/installer/core/uv-check.js +122 -24
- package/tools/installer/ide/_config-driven.js +1 -1
- package/tools/installer/ide/platform-codes.yaml +7 -0
- package/tools/installer/ide/shared/path-utils.js +2 -2
- package/tools/installer/install-messages.yaml +3 -2
- package/tools/installer/modules/custom-module-manager.js +12 -6
- package/tools/installer/modules/external-manager.js +12 -8
- package/tools/installer/modules/git-env.js +47 -0
- package/tools/installer/modules/official-modules.js +1 -1
- package/tools/installer/prompts.js +41 -102
- package/tools/installer/ui.js +99 -22
- package/tools/skill-validator.md +11 -1
- package/tools/validate-published-implementation-model.mjs +68 -0
- package/tools/validate-skills.js +33 -0
- package/web-bundles/prd-coach/prd-template.md +1 -1
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/SKILL.md +0 -76
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/customize.toml +0 -81
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/explain-concept.md +0 -20
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/mermaid-gen.md +0 -20
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/validate-doc.md +0 -19
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/write-document.md +0 -20
- package/src/bmm-skills/1-analysis/bmad-document-project/SKILL.md +0 -62
- package/src/bmm-skills/1-analysis/bmad-document-project/checklist.md +0 -245
- package/src/bmm-skills/1-analysis/bmad-document-project/customize.toml +0 -41
- package/src/bmm-skills/1-analysis/bmad-document-project/documentation-requirements.csv +0 -12
- package/src/bmm-skills/1-analysis/bmad-document-project/instructions.md +0 -128
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/deep-dive-template.md +0 -345
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/index-template.md +0 -169
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/project-overview-template.md +0 -103
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/project-scan-report-schema.json +0 -160
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/source-tree-template.md +0 -135
- package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-instructions.md +0 -300
- package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-workflow.md +0 -34
- package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-instructions.md +0 -1108
- package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-workflow.md +0 -34
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/SKILL.md +0 -96
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/customize.toml +0 -41
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md +0 -137
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -229
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -238
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -206
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -234
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -450
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/research.template.md +0 -29
- package/src/bmm-skills/1-analysis/research/bmad-market-research/SKILL.md +0 -96
- package/src/bmm-skills/1-analysis/research/bmad-market-research/customize.toml +0 -41
- package/src/bmm-skills/1-analysis/research/bmad-market-research/research.template.md +0 -29
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-01-init.md +0 -184
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +0 -239
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +0 -251
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +0 -261
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +0 -173
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +0 -484
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/SKILL.md +0 -96
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/customize.toml +0 -41
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/research.template.md +0 -29
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md +0 -137
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -239
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -248
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -202
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -233
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -493
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/SKILL.md +0 -91
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/customize.toml +0 -41
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -179
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -168
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -169
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -129
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -241
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -132
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -4
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/SKILL.md +0 -81
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/customize.toml +0 -41
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/project-context-template.md +0 -21
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-01-discover.md +0 -186
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-02-generate.md +0 -321
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-03-complete.md +0 -284
- package/src/bmm-skills/4-implementation/bmad-dev-auto/SKILL.md +0 -103
- package/src/bmm-skills/4-implementation/bmad-dev-auto/customize.toml +0 -108
- package/src/bmm-skills/4-implementation/bmad-dev-auto/step-01-clarify-and-route.md +0 -66
- package/src/bmm-skills/4-implementation/bmad-dev-auto/step-02-plan.md +0 -31
- package/src/bmm-skills/4-implementation/bmad-quick-dev/SKILL.md +0 -115
- package/src/bmm-skills/4-implementation/bmad-quick-dev/customize.toml +0 -83
- package/src/bmm-skills/4-implementation/bmad-quick-dev/step-oneshot.md +0 -82
- package/src/bmm-skills/4-implementation/bmad-quick-dev/sync-sprint-status.md +0 -19
- package/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md +0 -1527
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md +0 -319
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md +0 -34
- package/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md +0 -311
- package/src/core-skills/bmad-brainstorming/analysis/catalog-analysis.md +0 -239
- package/src/core-skills/bmad-brainstorming/analysis/method-matrix.csv +0 -109
- package/src/core-skills/bmad-editorial-review-prose/SKILL.md +0 -86
- package/src/core-skills/bmad-editorial-review-structure/SKILL.md +0 -179
- package/src/core-skills/bmad-index-docs/SKILL.md +0 -66
- package/src/core-skills/bmad-review-adversarial-general/SKILL.md +0 -37
- package/src/core-skills/bmad-shard-doc/SKILL.md +0 -105
- /package/src/bmm-skills/{2-plan-workflows → agents}/bmad-agent-ux-designer/customize.toml +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/assets/spine-template.md +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/references/headless.md +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/references/reviewer-gate.md +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/scripts/lint_spine.py +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-architecture/scripts/tests/test_lint_spine.py +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/customize.toml +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -0
- /package/src/bmm-skills/{3-solutioning → plan}/bmad-create-epics-and-stories/templates/epics-template.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/assets/headless-schemas.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/assets/prd-validation-checklist.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/assets/validation-report-template.html +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-prd/references/headless.md +0 -0
- /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/agents/artifact-analyzer.md +0 -0
- /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/agents/web-researcher.md +0 -0
- /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/assets/prfaq-template.md +0 -0
- /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/customize.toml +0 -0
- /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/references/customer-faq.md +0 -0
- /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/references/internal-faq.md +0 -0
- /package/src/bmm-skills/{1-analysis → plan}/bmad-prfaq/references/press-release.md +0 -0
- /package/src/bmm-skills/{1-analysis → plan}/bmad-product-brief/assets/brief-template.md +0 -0
- /package/src/{core-skills → bmm-skills/plan}/bmad-spec/assets/headless-schemas.md +0 -0
- /package/src/bmm-skills/{4-implementation → plan}/bmad-sprint-planning/customize.toml +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/design-directions.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/design-example-editorial.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/design-example-mobile.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/design-example-shadcn.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/excalidraw-wireframe.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/experience-example-mobile.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/experience-example-shadcn.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/headless-schemas.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/key-screens.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/assets/validation-report-template.html +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/references/design-md-spec.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → plan}/bmad-ux/references/headless.md +0 -0
- /package/src/bmm-skills/{4-implementation/bmad-quick-dev → ship/bmad-build}/spec-template.md +0 -0
- /package/src/{core-skills/bmad-review-edge-case-hunter → bmm-skills/ship/bmad-build-auto}/references/deletion-check.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/customize.toml +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/generate-trail.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-01-orientation.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-02-walkthrough.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-03-detail-pass.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-checkpoint-preview/step-04-testing.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-code-review/steps/step-03-triage.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-correct-course/checklist.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-correct-course/customize.toml +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-qa-generate-e2e-tests/checklist.md +0 -0
- /package/src/bmm-skills/{4-implementation → ship}/bmad-qa-generate-e2e-tests/customize.toml +0 -0
- /package/src/bmm-skills/{3-solutioning → v6-shims}/bmad-create-architecture/customize.toml +0 -0
- /package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-create-prd/customize.toml +0 -0
- /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/checklist.md +0 -0
- /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/customize.toml +0 -0
- /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/discover-inputs.md +0 -0
- /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-create-story/template.md +0 -0
- /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-dev-story/checklist.md +0 -0
- /package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-edit-prd/customize.toml +0 -0
- /package/src/bmm-skills/{4-implementation → v6-shims}/bmad-sprint-status/customize.toml +0 -0
- /package/src/bmm-skills/{2-plan-workflows → v6-shims}/bmad-validate-prd/customize.toml +0 -0
- /package/src/core-skills/bmad-advanced-elicitation/{methods.csv → assets/methods.csv} +0 -0
- /package/src/core-skills/bmad-party-mode/scripts/tests/{test-resolve_party.py → test_resolve_party.py} +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.10"
|
|
4
|
+
# ///
|
|
5
|
+
"""Exact word counts for a document, as JSON.
|
|
6
|
+
|
|
7
|
+
Emits the document's total word count and a per-heading-section breakdown so
|
|
8
|
+
an editorial review can ground word-impact estimates and reduction
|
|
9
|
+
percentages in real numbers instead of guessing. Sections are delimited by
|
|
10
|
+
markdown headings (# through ######); heading markers inside fenced code
|
|
11
|
+
blocks are ignored (fences pair CommonMark-style: a fence closes only on a
|
|
12
|
+
run of the same character at least as long, so ```` fences may embed ```
|
|
13
|
+
examples). A word is any whitespace-separated token, plus one word per CJK
|
|
14
|
+
character since those scripts do not space-delimit words. For non-markdown
|
|
15
|
+
input the result is a single section holding the full text.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import argparse
|
|
19
|
+
import json
|
|
20
|
+
import re
|
|
21
|
+
import sys
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
|
|
24
|
+
HEADING = re.compile(r"^(#{1,6})\s+(\S.*)$")
|
|
25
|
+
FENCE = re.compile(r"^ {0,3}(`{3,}|~{3,})")
|
|
26
|
+
CJK = re.compile(r"[-ヿ㐀-䶿一-鿿豈-가-ヲ-゚]")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def word_count(text: str) -> int:
|
|
30
|
+
cjk = len(CJK.findall(text))
|
|
31
|
+
return cjk + len(CJK.sub(" ", text).split())
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def section_metrics(text: str) -> list[dict]:
|
|
35
|
+
sections = []
|
|
36
|
+
current = {"heading": "(preamble)", "level": 0, "body": []}
|
|
37
|
+
open_fence = None # (char, length) while inside a fenced block
|
|
38
|
+
for line in text.splitlines():
|
|
39
|
+
fence = FENCE.match(line)
|
|
40
|
+
if fence:
|
|
41
|
+
marker = fence.group(1)
|
|
42
|
+
if open_fence is None:
|
|
43
|
+
open_fence = (marker[0], len(marker))
|
|
44
|
+
elif marker[0] == open_fence[0] and len(marker) >= open_fence[1] and line.strip() == marker:
|
|
45
|
+
open_fence = None
|
|
46
|
+
current["body"].append(line)
|
|
47
|
+
continue
|
|
48
|
+
match = None if open_fence else HEADING.match(line)
|
|
49
|
+
if match:
|
|
50
|
+
sections.append(current)
|
|
51
|
+
current = {
|
|
52
|
+
"heading": match.group(2).strip(),
|
|
53
|
+
"level": len(match.group(1)),
|
|
54
|
+
"body": [],
|
|
55
|
+
}
|
|
56
|
+
else:
|
|
57
|
+
current["body"].append(line)
|
|
58
|
+
sections.append(current)
|
|
59
|
+
|
|
60
|
+
out = []
|
|
61
|
+
for section in sections:
|
|
62
|
+
words = word_count("\n".join(section["body"]))
|
|
63
|
+
if section["heading"] == "(preamble)" and words == 0:
|
|
64
|
+
continue
|
|
65
|
+
out.append(
|
|
66
|
+
{"heading": section["heading"], "level": section["level"], "words": words}
|
|
67
|
+
)
|
|
68
|
+
return out
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def metrics(path: Path) -> dict:
|
|
72
|
+
text = path.read_text(encoding="utf-8", errors="replace")
|
|
73
|
+
return {
|
|
74
|
+
"file": str(path),
|
|
75
|
+
"total_words": word_count(text),
|
|
76
|
+
"sections": section_metrics(text),
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def main() -> int:
|
|
81
|
+
if hasattr(sys.stdout, "reconfigure"):
|
|
82
|
+
sys.stdout.reconfigure(encoding="utf-8") # JSON is UTF-8 regardless of locale code page
|
|
83
|
+
parser = argparse.ArgumentParser(description=__doc__.splitlines()[0])
|
|
84
|
+
parser.add_argument("path", help="document to measure")
|
|
85
|
+
parser.add_argument("-o", "--output", help="write JSON here (default: stdout)")
|
|
86
|
+
args = parser.parse_args()
|
|
87
|
+
|
|
88
|
+
path = Path(args.path)
|
|
89
|
+
if not path.is_file():
|
|
90
|
+
print(f"error: not a readable file: {path}", file=sys.stderr)
|
|
91
|
+
return 2
|
|
92
|
+
|
|
93
|
+
result = json.dumps(metrics(path), indent=2, ensure_ascii=False)
|
|
94
|
+
if args.output:
|
|
95
|
+
Path(args.output).write_text(result + "\n", encoding="utf-8")
|
|
96
|
+
else:
|
|
97
|
+
print(result)
|
|
98
|
+
return 0
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
if __name__ == "__main__":
|
|
102
|
+
sys.exit(main())
|
|
@@ -3,12 +3,8 @@ Core,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt,
|
|
|
3
3
|
Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas.,,,anytime,,,false,{output_folder}/brainstorming,brainstorming session
|
|
4
4
|
Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate.,,,anytime,,,false,,
|
|
5
5
|
Core,bmad-help,BMad Help,BH,,,,anytime,,,false,,
|
|
6
|
-
Core,bmad-index-docs,Index Docs,ID,Use when LLM needs to understand available docs without loading everything.,,,anytime,,,false,,
|
|
7
|
-
Core,bmad-shard-doc,Shard Document,SD,Use when doc becomes too large (>500 lines) to manage effectively.,,[path],anytime,,,false,,
|
|
8
|
-
Core,bmad-editorial-review-prose,Editorial Review - Prose,EP,Use after drafting to polish written content.,,[path],anytime,,,false,report located with target document,three-column markdown table with suggested fixes
|
|
9
|
-
Core,bmad-editorial-review-structure,Editorial Review - Structure,ES,Use when doc produced from multiple subprocesses or needs structural improvement.,,[path],anytime,,,false,report located with target document,
|
|
10
|
-
Core,bmad-review-adversarial-general,Adversarial Review,AR,"Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews.",,[path],anytime,,,false,,
|
|
11
|
-
Core,bmad-review-edge-case-hunter,Edge Case Hunter Review,ECH,Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven.,,[path],anytime,,,false,,
|
|
12
|
-
Core,bmad-spec,Spec,SP,"Use to distill any intent input (brief, PRD, transcript, brain dump, design folder, mixed multi-source) into a succinct, no-fluff SPEC.md contract + companions that downstream work derives from. Locks the WHAT before the HOW. Works for software, game design, research, editorial, policy, business, anything intent-bearing. Validation mode also available.",,[path],anytime,,,false,{output_folder}/specs/spec-{slug},SPEC.md + companion files
|
|
13
6
|
Core,bmad-customize,BMad Customize,BC,"Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required.",,,anytime,,,false,{project-root}/_bmad/custom,TOML override files
|
|
14
|
-
Core,bmad-
|
|
7
|
+
Core,bmad-advanced-elicitation,Advanced Elicitation,AE,"Use at any checkpoint to push a just-produced draft, section, or plan past its first version — pick from a menu of elicitation methods (pre-mortem, first principles, red team, socratic) and apply the improvements.",,,anytime,,,false,,
|
|
8
|
+
Core,bmad-review,Review,RV,"Use to review anything before it ships — a diff, branch, or uncommitted changes; a PRD, spec, story, or architecture doc; any prose document. Runs whichever installed lenses fit the content and reports findings in one shape: shipped lenses cover adversarial critique, edge cases, verification gaps, document structure (cuts, merges, moves), and prose copy-edit, and installs may add more. Reach for it to tighten a bloated or LLM-slop draft, pressure-test a plan before building, or check a change is adequately tested. Run every applicable lens or name the ones you want. Code Review in other modules calls it automatically.",,[path],anytime,,,false,,findings JSON array + markdown report
|
|
9
|
+
Core,bmad-forge-idea,Forge Idea,FI,"Use to pressure-test and harden an idea — software, business, creative, research, or life — until it proves out, hardens into something buildable, or dies cheaply. Persona-driven interrogation; optional handoff to bmad-spec or bmad-build.",,,anytime,,,false,{output_folder}/forge,refined-idea brief (optional)
|
|
10
|
+
Core,bmad-deep-recon,Deep Recon,RS,Decision-grade research three ways: draft a deep-research prompt for your own AI tool then process the returned report into a downstream-ready cited summary — or run the research directly via web fan-out. Types: market domain technical competitive user-voice academic-lit plus a select shape for choose-between decisions; claim verification and refresh lifecycle. Custom types via overrides.,,[type],anytime,,,false,{planning_artifacts}/research,research report/summary + optional html briefing
|
|
@@ -31,3 +31,8 @@ output_folder:
|
|
|
31
31
|
prompt: "Where should output files be saved?"
|
|
32
32
|
default: "_bmad-output"
|
|
33
33
|
result: "{project-root}/{value}"
|
|
34
|
+
|
|
35
|
+
# The one directory created at install time. Everything else (module artifact
|
|
36
|
+
# folders, project knowledge) is created lazily by the first skill that writes there.
|
|
37
|
+
directories:
|
|
38
|
+
- "{output_folder}"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# v6 Deprecation Shims
|
|
2
|
+
|
|
3
|
+
Skills in this folder are forwarders kept for backward compatibility with v6 skill IDs.
|
|
4
|
+
Each one holds no logic of its own — it forwards to the skill that replaced it, pinning
|
|
5
|
+
the legacy output contract so existing callers keep working.
|
|
6
|
+
|
|
7
|
+
| Shim | Forwards to |
|
|
8
|
+
| --------------------------------- | ---------------------------------------- |
|
|
9
|
+
| `bmad-editorial-review` | `bmad-review` (structure + prose lenses) |
|
|
10
|
+
| `bmad-editorial-review-prose` | `bmad-review` (prose lens) |
|
|
11
|
+
| `bmad-editorial-review-structure` | `bmad-review` (structure lens) |
|
|
12
|
+
| `bmad-review-adversarial-general` | `bmad-review` (adversarial lens) |
|
|
13
|
+
| `bmad-review-edge-case-hunter` | `bmad-review` (edge-case lens) |
|
|
14
|
+
| `bmad-review-verification-gap` | `bmad-review` (verification-gap lens) |
|
|
15
|
+
|
|
16
|
+
`bmad-editorial-review` keeps its `customize.toml` so existing team and user
|
|
17
|
+
overrides still resolve; the shim forwards those resolved values to `bmad-review`.
|
|
18
|
+
|
|
19
|
+
External module repos (gds, loop, tea, bmb, os-utils) still invoke these IDs, so they
|
|
20
|
+
ship by default. Removal rides the v7 cut — never a 6.x minor.
|
|
21
|
+
|
|
22
|
+
The folder is grouping only: the installer discovers skills recursively and installs each
|
|
23
|
+
one under its own `name`, so nesting here does not change any installed path or skill ID.
|
|
24
|
+
A future install option will let users include or exclude this folder before it is removed
|
|
25
|
+
outright.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-editorial-review
|
|
3
|
+
description: 'Deprecated — forwards to bmad-review.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Merged into `bmad-review`. Invoke the `bmad-review` skill on the same content with the `structure` and `prose` lenses — both, structure first, so prose runs on top of the structure findings — unless the caller asked for a structure-only or prose-only review, in which case pass only that lens. Pass through any `also_consider` areas, and forward this skill's resolved `[workflow]` fields as pre-resolved values — but only those that resolved to something, since an empty value here means no legacy override exists and bmad-review's own default should stand: `reader_type`, `style_guide`, `review_guidance`, `output_preferences`, `persistent_facts`, `activation_steps_prepend`, `activation_steps_append`, `on_complete`, and `review_output_path` as the report path. Present the findings in the legacy shape: the two-pass findings table `| Pass | Original Text | Revised Text | Changes |` with the purpose/audience read above it and, when the structure pass ran, the reduction summary below it — and no other lens's output.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# DO NOT EDIT -- overwritten on every update.
|
|
2
|
+
#
|
|
3
|
+
# Legacy override surface for bmad-editorial-review, which is deprecated and
|
|
4
|
+
# forwards to bmad-review's `structure` and `prose` lenses. These keys exist
|
|
5
|
+
# only so overrides written against the old skill keep resolving: the shim
|
|
6
|
+
# resolves them here and passes them to bmad-review as pre-resolved values,
|
|
7
|
+
# which bmad-review honors verbatim over its own.
|
|
8
|
+
#
|
|
9
|
+
# Every field is documented in bmad-review's customize.toml, which is where
|
|
10
|
+
# new customization belongs. Defaults are empty here so the shim contributes
|
|
11
|
+
# nothing of its own — an unset key falls through to bmad-review's default.
|
|
12
|
+
#
|
|
13
|
+
# Override files (not edited here):
|
|
14
|
+
# {project-root}/_bmad/custom/bmad-editorial-review.toml (team)
|
|
15
|
+
# {project-root}/_bmad/custom/bmad-editorial-review.user.toml (personal)
|
|
16
|
+
#
|
|
17
|
+
# Overrides merge per BMad structural rules: scalars win, arrays append.
|
|
18
|
+
|
|
19
|
+
[workflow]
|
|
20
|
+
|
|
21
|
+
activation_steps_prepend = []
|
|
22
|
+
activation_steps_append = []
|
|
23
|
+
persistent_facts = []
|
|
24
|
+
review_guidance = []
|
|
25
|
+
on_complete = ""
|
|
26
|
+
output_preferences = ""
|
|
27
|
+
reader_type = ""
|
|
28
|
+
style_guide = ""
|
|
29
|
+
|
|
30
|
+
# Where the findings table lands; forwarded as bmad-review's report path.
|
|
31
|
+
review_output_path = ""
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-editorial-review-prose
|
|
3
|
+
description: 'Deprecated — forwards to bmad-review.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Merged into `bmad-review`. Invoke the `bmad-review` skill on the same content with only the `prose` lens, passing through the same inputs and any `also_consider` areas. Present the findings in the legacy shape: a three-column markdown table `| Original Text | Revised Text | Changes |` — no Pass column, no preamble above the table. If no issues are found, output exactly: `No editorial issues identified`.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-editorial-review-structure
|
|
3
|
+
description: 'Deprecated — forwards to bmad-review.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Merged into `bmad-review`. Invoke the `bmad-review` skill on the same content with only the `structure` lens, passing through the same inputs and any `also_consider` areas. Present the findings in the legacy report shape: a `## Document Summary` block (purpose, audience, reader type, structure model, current length), a `## Recommendations` list of numbered `[CUT/MERGE/MOVE/CONDENSE/QUESTION/PRESERVE]` entries each with rationale and word impact, and a closing `## Summary` (total recommendations, estimated reduction) — not the findings table. If no structural issues are found, output exactly: `No substantive changes recommended`.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-review-adversarial-general
|
|
3
|
+
description: 'Deprecated — forwards to bmad-review.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Merged into `bmad-review`. Invoke the `bmad-review` skill on the same content with only the `adversarial` lens, passing through any `also_consider` areas. Present the findings as a Markdown list — descriptions only, no severity, priority, or ranking; no JSON block.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-review-edge-case-hunter
|
|
3
|
+
description: 'Deprecated — forwards to bmad-review.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Merged into `bmad-review`. Invoke the `bmad-review` skill on the same content with only the `edge-case-hunter` lens, passing through any `also_consider` areas. Output ONLY the raw findings JSON array in the legacy shape: the four standard fields (plus `kind`/`confidence` on deletion findings), no `lens` field, no markdown wrapping, no extra text. `[]` is valid when nothing is found.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-review-verification-gap
|
|
3
|
+
description: 'Deprecated — forwards to bmad-review.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Merged into `bmad-review`. Invoke the `bmad-review` skill on the same content with only the `verification-gap` lens. Present the markdown rendering only (no JSON block), listing any `gap_shape: "other"` findings under an `## Other findings` heading. When there are no findings at all, output exactly this single line: `No verification gaps found.`
|
|
Binary file
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""Shared strict TOML loading and structural merge support."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import tomllib
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Any, Iterable
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ConfigError(ValueError):
|
|
11
|
+
"""Raised when a present configuration layer cannot be used safely."""
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
_KEYED_MERGE_FIELDS = ("code", "id")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def load_toml(path: Path, *, required: bool = False) -> dict[str, Any]:
|
|
18
|
+
"""Load a TOML table, allowing absence only for optional layers."""
|
|
19
|
+
if not path.exists():
|
|
20
|
+
if required:
|
|
21
|
+
raise ConfigError(f"required TOML file not found: {path}")
|
|
22
|
+
return {}
|
|
23
|
+
if not path.is_file():
|
|
24
|
+
raise ConfigError(f"TOML layer is not a file: {path}")
|
|
25
|
+
try:
|
|
26
|
+
with path.open("rb") as stream:
|
|
27
|
+
parsed = tomllib.load(stream)
|
|
28
|
+
except tomllib.TOMLDecodeError as error:
|
|
29
|
+
raise ConfigError(f"failed to parse {path}: {error}") from error
|
|
30
|
+
except OSError as error:
|
|
31
|
+
raise ConfigError(f"failed to read {path}: {error}") from error
|
|
32
|
+
if not isinstance(parsed, dict):
|
|
33
|
+
raise ConfigError(f"TOML layer did not parse to a table: {path}")
|
|
34
|
+
return parsed
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _detect_keyed_merge_field(items: list[Any]) -> str | None:
|
|
38
|
+
if not items or not all(isinstance(item, dict) for item in items):
|
|
39
|
+
return None
|
|
40
|
+
for candidate in _KEYED_MERGE_FIELDS:
|
|
41
|
+
if all(candidate in item for item in items):
|
|
42
|
+
for item in items:
|
|
43
|
+
value = item[candidate]
|
|
44
|
+
if not isinstance(value, str):
|
|
45
|
+
raise ConfigError(
|
|
46
|
+
f"keyed array identifier `{candidate}` must be a string, "
|
|
47
|
+
f"got {type(value).__name__}"
|
|
48
|
+
)
|
|
49
|
+
if not value:
|
|
50
|
+
raise ConfigError(
|
|
51
|
+
f"keyed array identifier `{candidate}` must not be empty"
|
|
52
|
+
)
|
|
53
|
+
return candidate
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _merge_arrays(base: list[Any], override: list[Any]) -> list[Any]:
|
|
58
|
+
keyed_field = _detect_keyed_merge_field(base + override)
|
|
59
|
+
if keyed_field is None:
|
|
60
|
+
return list(base) + list(override)
|
|
61
|
+
|
|
62
|
+
result: list[Any] = []
|
|
63
|
+
index_by_key: dict[str, int] = {}
|
|
64
|
+
for item in base:
|
|
65
|
+
copied = dict(item)
|
|
66
|
+
index_by_key[copied[keyed_field]] = len(result)
|
|
67
|
+
result.append(copied)
|
|
68
|
+
for item in override:
|
|
69
|
+
copied = dict(item)
|
|
70
|
+
key = copied[keyed_field]
|
|
71
|
+
if key in index_by_key:
|
|
72
|
+
result[index_by_key[key]] = copied
|
|
73
|
+
else:
|
|
74
|
+
index_by_key[key] = len(result)
|
|
75
|
+
result.append(copied)
|
|
76
|
+
return result
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def structural_merge(base: Any, override: Any) -> Any:
|
|
80
|
+
"""Merge tables recursively, keyed table arrays by identity, and append other arrays."""
|
|
81
|
+
if isinstance(base, dict) and isinstance(override, dict):
|
|
82
|
+
result = dict(base)
|
|
83
|
+
for key, value in override.items():
|
|
84
|
+
result[key] = structural_merge(result[key], value) if key in result else value
|
|
85
|
+
return result
|
|
86
|
+
if isinstance(base, list) and isinstance(override, list):
|
|
87
|
+
return _merge_arrays(base, override)
|
|
88
|
+
return override
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def merge_layers(layers: Iterable[dict[str, Any]]) -> dict[str, Any]:
|
|
92
|
+
merged: dict[str, Any] = {}
|
|
93
|
+
for layer in layers:
|
|
94
|
+
merged = structural_merge(merged, layer)
|
|
95
|
+
return merged
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def load_central_config(project_root: Path) -> dict[str, Any]:
|
|
99
|
+
bmad_dir = project_root / "_bmad"
|
|
100
|
+
return merge_layers(
|
|
101
|
+
(
|
|
102
|
+
load_toml(bmad_dir / "config.toml", required=True),
|
|
103
|
+
load_toml(bmad_dir / "config.user.toml"),
|
|
104
|
+
load_toml(bmad_dir / "custom" / "config.toml"),
|
|
105
|
+
load_toml(bmad_dir / "custom" / "config.user.toml"),
|
|
106
|
+
)
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def load_customization(project_root: Path | None, skill_dir: Path) -> dict[str, Any]:
|
|
111
|
+
skill_name = skill_dir.name
|
|
112
|
+
custom_dir = project_root / "_bmad" / "custom" if project_root else None
|
|
113
|
+
return merge_layers(
|
|
114
|
+
(
|
|
115
|
+
load_toml(skill_dir / "customize.toml", required=True),
|
|
116
|
+
load_toml(custom_dir / f"{skill_name}.toml") if custom_dir else {},
|
|
117
|
+
load_toml(custom_dir / f"{skill_name}.user.toml") if custom_dir else {},
|
|
118
|
+
)
|
|
119
|
+
)
|