Repository Analysis

bmad-code-org/BMAD-METHOD

Breakthrough Method for Agile Ai Driven Development

3.3 Likely human-written View on GitHub
3.3
Adjusted Score
3.3
Raw Score
100%
Time Factor
2026-05-30
Last Push
48,299
Stars
JavaScript
Language
97,748
Lines of Code
512
Files
185
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 0MEDIUM 70LOW 115

Pattern Findings

185 matches across 8 categories. Click a row to expand file-level details.

Decorative Section Separators69 hits · 207 pts
SeverityFileLineSnippet
MEDIUMtools/validate-sidebar-order.js27// ── Main ─────────────────────────────────────────────────────────────────
MEDIUMtools/validate-sidebar-order.js101// ── Directory classification ─────────────────────────────────────────────
MEDIUMtools/validate-sidebar-order.js121// ── Per-directory validation ─────────────────────────────────────────────
MEDIUMtools/validate-sidebar-order.js200// ── Cross-language drift ─────────────────────────────────────────────────
MEDIUMtools/validate-sidebar-order.js257// ── Output ───────────────────────────────────────────────────────────────
MEDIUMtools/validate-sidebar-order.js315// ── Leaf helpers ─────────────────────────────────────────────────────────
MEDIUMtools/installer/ui.js519 // ─────────────────────────────────────────────────────────────────────────────
MEDIUMtools/installer/ui.js521 // ─────────────────────────────────────────────────────────────────────────────
MEDIUMtools/installer/ui.js588 // ─────────────────────────────────────────────────────────────────────────────
MEDIUMtools/installer/ui.js590 // ─────────────────────────────────────────────────────────────────────────────
MEDIUMtools/installer/ui.js645 // ─────────────────────────────────────────────────────────────────────────────
MEDIUMtools/installer/ui.js647 // ─────────────────────────────────────────────────────────────────────────────
MEDIUMtools/installer/core/manifest-generator.js498 '# ─────────────────────────────────────────────────────────────────',
MEDIUMtools/installer/core/manifest-generator.js508 '# ─────────────────────────────────────────────────────────────────',
MEDIUMtools/installer/core/manifest-generator.js513 '# ─────────────────────────────────────────────────────────────────',
MEDIUMtools/installer/core/manifest-generator.js522 '# ─────────────────────────────────────────────────────────────────',
MEDIUMtools/installer/modules/custom-module-manager.js27 // ─── Source Parsing ───────────────────────────────────────────────────────
MEDIUMtools/installer/modules/custom-module-manager.js279 // ─── Marketplace JSON ─────────────────────────────────────────────────────
MEDIUMtools/installer/modules/custom-module-manager.js296 // ─── Discovery ────────────────────────────────────────────────────────────
MEDIUMtools/installer/modules/custom-module-manager.js314 // ─── Source Resolution ────────────────────────────────────────────────────
MEDIUMtools/installer/modules/custom-module-manager.js350 // ─── Clone ────────────────────────────────────────────────────────────────
MEDIUMtools/installer/modules/custom-module-manager.js566 // ─── Plugin Resolution ────────────────────────────────────────────────────
MEDIUMtools/installer/modules/custom-module-manager.js617 // ─── Source Finding ───────────────────────────────────────────────────────
MEDIUMtools/installer/modules/custom-module-manager.js883 // ─── Normalization ────────────────────────────────────────────────────────
MEDIUMtools/installer/modules/plugin-resolver.js67 // ─── Strategy 1: Root Module Files ──────────────────────────────────────────
MEDIUMtools/installer/modules/plugin-resolver.js101 // ─── Strategy 2: Setup Skill ────────────────────────────────────────────────
MEDIUMtools/installer/modules/plugin-resolver.js141 // ─── Strategy 3: Single Standalone Skill ────────────────────────────────────
MEDIUMtools/installer/modules/plugin-resolver.js177 // ─── Strategy 4: Multiple Standalone Skills ─────────────────────────────────
MEDIUMtools/installer/modules/plugin-resolver.js223 // ─── Strategy 5: Fallback (Synthesized) ─────────────────────────────────────
MEDIUMtools/installer/modules/plugin-resolver.js271 // ─── Helpers ────────────────────────────────────────────────────────────────
MEDIUMtools/installer/modules/external-manager.js207 // ─── Resolve channel plan ─────────────────────────────────────────────
MEDIUMtools/installer/modules/external-manager.js311 // ─── Clone or update cache by resolved channel ────────────────────────
MEDIUMtest/test-parse-source-urls.js40// ─── Deep path shapes (4+ segments) ─────────────────────────────────────────
MEDIUMtest/test-parse-source-urls.js86// ─── Azure DevOps URLs (Issue #2268) ────────────────────────────────────────
MEDIUMtest/test-parse-source-urls.js86// ─── Azure DevOps URLs (Issue #2268) ────────────────────────────────────────
MEDIUMtest/test-parse-source-urls.js170// ─── Subdomain hosts ────────────────────────────────────────────────────────
MEDIUMtest/test-parse-source-urls.js191// ─── Simple owner/repo URLs (regression) ────────────────────────────────────
MEDIUMtest/test-parse-source-urls.js215// ─── Generic URL handling (any host, any path depth) ────────────────────────
MEDIUMtest/test-parse-source-urls.js291// ─── Summary ────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js60 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js62 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js82 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js84 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js163 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js165 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js209 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js211 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js249 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js251 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js279 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js281 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js294 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js296 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js309 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js311 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js323 // ─────────────────────────────────────────────────────────────────────────
MEDIUMtest/test-installer-channels.js325 // ─────────────────────────────────────────────────────────────────────────
MEDIUM.augment/code_review_guidelines.yaml51 # ============================================
MEDIUM.augment/code_review_guidelines.yaml53 # ============================================
MEDIUM.augment/code_review_guidelines.yaml65 # ============================================
9 more matches not shown…
Over-Commented Block82 hits · 82 pts
SeverityFileLineSnippet
LOWtools/installer/set-overrides.js1// `--set <module>.<key>=<value>` is a post-install patch. The installer runs
LOWtools/installer/ide/platform-codes.yaml1# BMAD Platform Codes Configuration
LOWtools/installer/ide/_config-driven.js61// Used by platforms that surface only persona agents (e.g. Copilot's Custom
LOWsrc/bmm-skills/2-plan-workflows/bmad-prd/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOWsrc/bmm-skills/2-plan-workflows/bmad-prd/customize.toml21
LOWsrc/bmm-skills/2-plan-workflows/bmad-prd/customize.toml41# Default PRD structure. Treated as a starting point — the LLM adapts it
LOWsrc/bmm-skills/2-plan-workflows/bmad-prd/customize.toml61validation_report_template = "assets/validation-report-template.html"
LOWsrc/bmm-skills/2-plan-workflows/bmad-prd/customize.toml81# 3. Prose mechanics (grammar, clarity, typos)
LOWsrc/bmm-skills/2-plan-workflows/bmad-prd/customize.toml101# matching need.
LOWsrc/bmm-skills/2-plan-workflows/bmad-prd/customize.toml121#
LOWsrc/bmm-skills/2-plan-workflows/bmad-prd/customize.toml141# plain text use the text directly as the subagent's review prompt
LOWsrc/bmm-skills/2-plan-workflows/bmad-ux/customize.toml41
LOW…m-skills/2-plan-workflows/bmad-agent-pm/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…m-skills/2-plan-workflows/bmad-agent-pm/customize.toml21activation_steps_prepend = []
LOW…m-skills/2-plan-workflows/bmad-edit-prd/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…m-skills/2-plan-workflows/bmad-edit-prd/customize.toml21activation_steps_append = []
LOW…2-plan-workflows/bmad-agent-ux-designer/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…2-plan-workflows/bmad-agent-ux-designer/customize.toml21activation_steps_prepend = []
LOW…skills/2-plan-workflows/bmad-create-prd/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…skills/2-plan-workflows/bmad-create-prd/customize.toml21activation_steps_append = []
LOW…ills/2-plan-workflows/bmad-validate-prd/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…ills/2-plan-workflows/bmad-validate-prd/customize.toml21activation_steps_append = []
LOW…/3-solutioning/bmad-create-architecture/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…/3-solutioning/bmad-create-architecture/customize.toml21activation_steps_append = []
LOW…ing/bmad-check-implementation-readiness/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…ing/bmad-check-implementation-readiness/customize.toml21activation_steps_append = []
LOW…lutioning/bmad-create-epics-and-stories/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…lutioning/bmad-create-epics-and-stories/customize.toml21activation_steps_append = []
LOW…ills/3-solutioning/bmad-agent-architect/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…ills/3-solutioning/bmad-agent-architect/customize.toml21activation_steps_prepend = []
LOW…lutioning/bmad-generate-project-context/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…lutioning/bmad-generate-project-context/customize.toml21activation_steps_append = []
LOW…alysis/research/bmad-technical-research/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…alysis/research/bmad-technical-research/customize.toml21activation_steps_append = []
LOW…-analysis/research/bmad-domain-research/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…-analysis/research/bmad-domain-research/customize.toml21activation_steps_append = []
LOW…-analysis/research/bmad-market-research/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…-analysis/research/bmad-market-research/customize.toml21activation_steps_append = []
LOW…mm-skills/1-analysis/bmad-product-brief/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…mm-skills/1-analysis/bmad-product-brief/customize.toml21
LOW…mm-skills/1-analysis/bmad-product-brief/customize.toml41# Default brief structure. Treated as a starting point — the LLM adapts it
LOW…mm-skills/1-analysis/bmad-product-brief/customize.toml61# 1. Structural (cuts, reorganization, section sizing)
LOW…mm-skills/1-analysis/bmad-product-brief/customize.toml81# "When researching internal product context, consult corp:kb_search (database='product-docs') before web search."
LOW…kills/1-analysis/bmad-agent-tech-writer/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…kills/1-analysis/bmad-agent-tech-writer/customize.toml21
LOW…skills/1-analysis/bmad-document-project/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…skills/1-analysis/bmad-document-project/customize.toml21activation_steps_append = []
LOWsrc/bmm-skills/1-analysis/bmad-prfaq/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOWsrc/bmm-skills/1-analysis/bmad-prfaq/customize.toml21activation_steps_append = []
LOW…mm-skills/1-analysis/bmad-agent-analyst/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…mm-skills/1-analysis/bmad-agent-analyst/customize.toml21activation_steps_prepend = []
LOW…lls/4-implementation/bmad-retrospective/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…lls/4-implementation/bmad-retrospective/customize.toml21activation_steps_append = []
LOW…ills/4-implementation/bmad-create-story/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…ills/4-implementation/bmad-create-story/customize.toml21activation_steps_append = []
LOW…-skills/4-implementation/bmad-quick-dev/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…-skills/4-implementation/bmad-quick-dev/customize.toml21activation_steps_append = []
LOW…plementation/bmad-qa-generate-e2e-tests/customize.toml1# DO NOT EDIT -- overwritten on every update.
LOW…plementation/bmad-qa-generate-e2e-tests/customize.toml21activation_steps_append = []
LOW…ation/bmad-sprint-planning/sprint-status-template.yaml1# Sprint Status Template
22 more matches not shown…
Hyper-Verbose Identifiers26 hits · 26 pts
SeverityFileLineSnippet
LOWtools/validate-skills.js104function parseFrontmatterMultiline(content) {
LOWtools/installer/prompts.js242function defaultAutocompleteFilter(search, option) {
LOWtools/installer/project-root.js79function getExternalModuleCachePath(moduleName, ...segments) {
LOWtools/installer/project-root.js102async function resolveInstalledModuleYaml(moduleName) {
LOWtools/installer/list-options.js34async function discoverOfficialModuleYamls() {
LOWtools/installer/core/legacy-warnings.js111async function warnPreNativeSkillsLegacy({ projectRoot, existingVersion } = {}) {
LOWtools/installer/modules/version-resolver.js222async function normalizeExistingDirectory(candidate) {
LOWtools/installer/modules/version-resolver.js259function extractMarketplaceVersion(data, moduleName, marketplacePluginNames = []) {
LOWtools/installer/modules/version-resolver.js302function compareVersionsDescending(left, right) {
LOWtest/test-installation-components.js88async function createSkillCollisionFixture() {
LOW…lls/bmad-customize/scripts/list_customizable_skills.py53def read_frontmatter_description(skill_md: Path) -> str:
LOW…stomize/scripts/tests/test_list_customizable_skills.py63 def test_agent_only_skill_detected(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py80 def test_workflow_only_skill_detected(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py93 def test_dual_surface_skill_emits_two_entries(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py106 def test_skill_without_customize_toml_ignored(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py113 def test_existing_team_override_flagged(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py126 def test_missing_surface_block_reports_error(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py133 def test_malformed_toml_reports_error_without_aborting(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py149 def test_description_with_double_quotes_stripped(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py159 def test_multiple_skills_roots_are_merged(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py179 def test_duplicate_skill_name_across_roots_first_wins(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py199 def test_missing_skills_root_reports_error(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py206 def test_cli_emits_valid_json_and_exits_zero(self):
LOW…stomize/scripts/tests/test_list_customizable_skills.py230 def test_cli_exits_two_on_missing_project_root(self):
LOWsrc/scripts/resolve_customization.py96def _detect_keyed_merge_field(items):
LOWsrc/scripts/resolve_config.py71def _detect_keyed_merge_field(items):
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippet
LOWtest/adversarial-review-tests/sample-content.md16 "email": "user@example.com",
LOWtest/adversarial-review-tests/sample-content.md27 "email": "user@example.com"
LOWdocs/vi-vn/bmad-developer-guide.md540await page.getByLabel('Email').fill('user@example.com')
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippet
MEDIUM.github/workflows/quality.yaml3# Runs comprehensive quality checks on all PRs and pushes to main:
Unused Imports2 hits · 2 pts
SeverityFileLineSnippet
LOW…lls/bmad-customize/scripts/list_customizable_skills.py29
LOW…stomize/scripts/tests/test_list_customizable_skills.py19
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippet
LOWtools/validate-svg-changes.sh19# Check if file exists
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippet
LOW…lls/bmad-customize/scripts/list_customizable_skills.py91