Breakthrough Method for Agile Ai Driven Development
This report presents the forensic synthetic code analysis of bmad-code-org/BMAD-METHOD, a JavaScript project with 52,418 GitHub stars. SynthScan v2.0 examined 94,895 lines of code across 544 source files, recording 765 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 13.2 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 765 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/docs/fix-refs.md | 16 | ## Step 1: Establish Target Audience | COMMENT |
| LOW⚡ | docs/how-to/project-context.md | 24 | ## Step 1: Run it | COMMENT |
| LOW⚡ | docs/how-to/project-context.md | 34 | ## Step 2: Tell it what you bring | COMMENT |
| LOW⚡ | docs/how-to/project-context.md | 42 | ## Step 3: It verifies the rest | COMMENT |
| LOW⚡ | docs/how-to/project-context.md | 48 | ## Step 4: Approve the block | COMMENT |
| LOW | docs/how-to/established-projects.md | 19 | ## Step 1: Clean Up Completed Planning Artifacts | COMMENT |
| LOW | docs/how-to/established-projects.md | 27 | ## Step 2: Create Project Context | COMMENT |
| LOW | docs/how-to/established-projects.md | 43 | ## Step 3: Maintain Quality Project Documentation | COMMENT |
| LOW | docs/how-to/established-projects.md | 54 | ## Step 3: Get Help | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prfaq/SKILL.md | 31 | ### Step 1: Resolve the Workflow Block | COMMENT |
| LOW⚡ | src/bmm-skills/plan/bmad-prfaq/SKILL.md | 43 | ### Step 2: Execute Prepend Steps | COMMENT |
| LOW⚡ | src/bmm-skills/plan/bmad-prfaq/SKILL.md | 47 | ### Step 3: Load Persistent Facts | COMMENT |
| LOW⚡ | src/bmm-skills/plan/bmad-prfaq/SKILL.md | 51 | ### Step 4: Load Config | COMMENT |
| LOW⚡ | src/bmm-skills/plan/bmad-prfaq/SKILL.md | 60 | ### Step 5: Greet the User | COMMENT |
| LOW⚡ | src/bmm-skills/plan/bmad-prfaq/SKILL.md | 64 | ### Step 6: Execute Append Steps | COMMENT |
| LOW | …bmm-skills/plan/bmad-create-epics-and-stories/SKILL.md | 52 | ### Step 1: Resolve the Workflow Block | COMMENT |
| LOW⚡ | …bmm-skills/plan/bmad-create-epics-and-stories/SKILL.md | 64 | ### Step 2: Execute Prepend Steps | COMMENT |
| LOW⚡ | …bmm-skills/plan/bmad-create-epics-and-stories/SKILL.md | 68 | ### Step 3: Load Persistent Facts | COMMENT |
| LOW⚡ | …bmm-skills/plan/bmad-create-epics-and-stories/SKILL.md | 72 | ### Step 4: Load Config | COMMENT |
| LOW⚡ | …bmm-skills/plan/bmad-create-epics-and-stories/SKILL.md | 81 | ### Step 5: Greet the User | COMMENT |
| LOW⚡ | …bmm-skills/plan/bmad-create-epics-and-stories/SKILL.md | 85 | ### Step 6: Execute Append Steps | COMMENT |
| LOW | …create-epics-and-stories/steps/step-02-design-epics.md | 1 | # Step 2: Design Epic List | COMMENT |
| LOW | …eate-epics-and-stories/steps/step-03-create-stories.md | 1 | # Step 3: Generate Epics and Stories | COMMENT |
| LOW | …cs-and-stories/steps/step-01-validate-prerequisites.md | 1 | # Step 1: Validate Prerequisites and Extract Requirements | COMMENT |
| LOW | …te-epics-and-stories/steps/step-04-final-validation.md | 1 | # Step 4: Final Validation | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-pm/SKILL.md | 21 | ### Step 1: Resolve the Agent Block | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-pm/SKILL.md | 33 | ### Step 2: Execute Prepend Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-pm/SKILL.md | 37 | ### Step 3: Adopt Persona | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-pm/SKILL.md | 43 | ### Step 4: Load Persistent Facts | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-pm/SKILL.md | 47 | ### Step 5: Load Config | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-pm/SKILL.md | 56 | ### Step 6: Greet the User | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-pm/SKILL.md | 62 | ### Step 7: Execute Append Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-pm/SKILL.md | 68 | ### Step 8: Dispatch or Present the Menu | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md | 21 | ### Step 1: Resolve the Agent Block | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md | 33 | ### Step 2: Execute Prepend Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md | 37 | ### Step 3: Adopt Persona | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md | 43 | ### Step 4: Load Persistent Facts | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md | 47 | ### Step 5: Load Config | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md | 56 | ### Step 6: Greet the User | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md | 62 | ### Step 7: Execute Append Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-ux-designer/SKILL.md | 68 | ### Step 8: Dispatch or Present the Menu | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-analyst/SKILL.md | 21 | ### Step 1: Resolve the Agent Block | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-analyst/SKILL.md | 33 | ### Step 2: Execute Prepend Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-analyst/SKILL.md | 37 | ### Step 3: Adopt Persona | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-analyst/SKILL.md | 43 | ### Step 4: Load Persistent Facts | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-analyst/SKILL.md | 47 | ### Step 5: Load Config | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-analyst/SKILL.md | 56 | ### Step 6: Greet the User | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-analyst/SKILL.md | 62 | ### Step 7: Execute Append Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-analyst/SKILL.md | 68 | ### Step 8: Dispatch or Present the Menu | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-architect/SKILL.md | 21 | ### Step 1: Resolve the Agent Block | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-architect/SKILL.md | 33 | ### Step 2: Execute Prepend Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-architect/SKILL.md | 37 | ### Step 3: Adopt Persona | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-architect/SKILL.md | 43 | ### Step 4: Load Persistent Facts | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-architect/SKILL.md | 47 | ### Step 5: Load Config | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-architect/SKILL.md | 56 | ### Step 6: Greet the User | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-architect/SKILL.md | 62 | ### Step 7: Execute Append Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-architect/SKILL.md | 68 | ### Step 8: Dispatch or Present the Menu | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-dev/SKILL.md | 21 | ### Step 1: Resolve the Agent Block | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-dev/SKILL.md | 33 | ### Step 2: Execute Prepend Steps | COMMENT |
| LOW⚡ | src/bmm-skills/agents/bmad-agent-dev/SKILL.md | 37 | ### Step 3: Adopt Persona | COMMENT |
| 122 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/validate-skills.js | 107 | function parseFrontmatterMultiline(content) { | CODE |
| LOW | tools/installer/prompts.js | 242 | function defaultAutocompleteFilter(search, option) { | CODE |
| LOW | tools/installer/project-root.js | 79 | function getExternalModuleCachePath(moduleName, ...segments) { | CODE |
| LOW | tools/installer/project-root.js | 102 | async function resolveInstalledModuleYaml(moduleName) { | CODE |
| LOW | tools/installer/list-options.js | 34 | async function discoverOfficialModuleYamls() { | CODE |
| LOW | tools/installer/core/wsl-node-check.js | 74 | function formatWindowsNodeFromWslMessage(detection) { | CODE |
| LOW | tools/installer/core/legacy-warnings.js | 111 | async function warnPreNativeSkillsLegacy({ projectRoot, existingVersion } = {}) { | CODE |
| LOW | tools/installer/modules/version-resolver.js | 222 | async function normalizeExistingDirectory(candidate) { | CODE |
| LOW | tools/installer/modules/version-resolver.js | 259 | function extractMarketplaceVersion(data, moduleName, marketplacePluginNames = []) { | CODE |
| LOW | tools/installer/modules/version-resolver.js | 302 | function compareVersionsDescending(left, right) { | CODE |
| LOW | test/test-installation-components.js | 89 | async function createSkillCollisionFixture() { | CODE |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 202 | def test_set_rejects_unknown_key_and_illegal_status(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 212 | def test_action_items_carried_verbatim(tmp_path): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 219 | def test_story_file_on_disk_floors_ready_for_dev(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 228 | def test_story_file_never_downgrades_done(tmp_path): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 234 | def test_illegal_existing_status_warns_and_resets(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 244 | def test_fenced_code_blocks_are_not_parsed(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 254 | def test_non_ascii_titles_keep_distinct_keys(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 262 | def test_suspect_heading_is_reported(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 269 | def test_dry_run_writes_nothing_and_reports_drift(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 376 | def test_status_counts_and_recommendation(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 386 | def test_status_maps_legacy_values(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 391 | def test_status_open_action_items(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 397 | def test_status_malformed_action_items_are_flagged_not_dropped(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 405 | def test_status_review_beats_ready(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 413 | def test_status_in_progress_beats_all(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 421 | def test_status_staleness_and_orphan_risks(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 431 | def test_status_unparseable_timestamp_warns_instead_of_silence(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 437 | def test_status_iso_and_date_typed_stamps_do_not_crash(tmp_path, capsys): | STRING |
| LOW⚡ | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 447 | def test_status_all_done_recommends_retro_then_nothing(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 75 | def test_fresh_generate_orders_and_defaults(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 95 | def test_header_comment_matches_template(): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 131 | def test_merge_preserves_and_never_downgrades(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 143 | def test_legacy_statuses_merge_by_meaning_not_reset(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 157 | def test_metadata_preserved_when_flags_omitted(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 170 | def test_unknown_keys_and_comments_survive_regenerate(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 179 | def test_fresh_rebuild_ignores_existing_statuses(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 190 | def test_set_applies_explicit_statuses_even_downgrades(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 287 | def test_dry_run_in_sync_after_generate(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 300 | def test_no_epics_fails_with_json(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 312 | def test_non_mapping_yaml_fails_with_json(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 329 | def test_argument_errors_emit_json(capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 460 | def test_status_odd_retro_key_reports_instead_of_crashing(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 473 | def test_status_illegal_status_reported(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 479 | def test_status_missing_file_fails_json(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 500 | def test_validate_reports_problems_without_crashing(tmp_path, capsys): | STRING |
| LOW | …bmad-sprint-planning/scripts/tests/test_sprint_plan.py | 514 | def test_validate_missing_file_and_bad_yaml(tmp_path, capsys): | STRING |
| LOW⚡ | …mm-skills/plan/bmad-architecture/scripts/lint_spine.py | 91 | def find_frontmatter_placeholders(frontmatter: str) -> list[dict]: | CODE |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 69 | def test_mermaid_braces_not_flagged(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 75 | def test_placeholder_markers_caught(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 87 | def test_unfilled_template_token_caught(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 93 | def test_duplicate_ad_id_caught(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 99 | def test_non_monotonic_ad_id_caught(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 107 | def test_missing_field_caught(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 131 | def test_stack_skeleton_row_not_version_pinned(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 138 | def test_stack_html_comment_not_parsed_as_row(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 144 | def test_template_token_is_low_severity(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 153 | def test_no_frontmatter_body_still_scanned(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 159 | def test_frontmatter_value_with_dashes_not_truncated(): | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 167 | def test_ad_heading_in_fence_not_counted(): | STRING |
| 236 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/validate-sidebar-order.js | 27 | // ── Main ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/validate-sidebar-order.js | 101 | // ── Directory classification ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/validate-sidebar-order.js | 121 | // ── Per-directory validation ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/validate-sidebar-order.js | 200 | // ── Cross-language drift ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/validate-sidebar-order.js | 257 | // ── Output ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/validate-sidebar-order.js | 315 | // ── Leaf helpers ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/ui.js | 650 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/ui.js | 652 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/ui.js | 719 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/ui.js | 721 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/ui.js | 776 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/ui.js | 778 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tools/installer/core/manifest-generator.js | 504 | '# ─────────────────────────────────────────────────────────────────', | CODE |
| MEDIUM⚡ | tools/installer/core/manifest-generator.js | 514 | '# ─────────────────────────────────────────────────────────────────', | CODE |
| MEDIUM⚡ | tools/installer/core/manifest-generator.js | 519 | '# ─────────────────────────────────────────────────────────────────', | CODE |
| MEDIUM⚡ | tools/installer/core/manifest-generator.js | 528 | '# ─────────────────────────────────────────────────────────────────', | CODE |
| MEDIUM | tools/installer/modules/custom-module-manager.js | 40 | // ─── Source Parsing ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/custom-module-manager.js | 286 | // ─── Marketplace JSON ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/custom-module-manager.js | 303 | // ─── Discovery ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/custom-module-manager.js | 321 | // ─── Source Resolution ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/custom-module-manager.js | 357 | // ─── Clone ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/custom-module-manager.js | 578 | // ─── Plugin Resolution ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/custom-module-manager.js | 629 | // ─── Source Finding ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/custom-module-manager.js | 895 | // ─── Normalization ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/plugin-resolver.js | 67 | // ─── Strategy 1: Root Module Files ────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/plugin-resolver.js | 101 | // ─── Strategy 2: Setup Skill ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/plugin-resolver.js | 141 | // ─── Strategy 3: Single Standalone Skill ──────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/plugin-resolver.js | 177 | // ─── Strategy 4: Multiple Standalone Skills ───────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/plugin-resolver.js | 223 | // ─── Strategy 5: Fallback (Synthesized) ───────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/plugin-resolver.js | 271 | // ─── Helpers ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/external-manager.js | 251 | // ─── Resolve channel plan ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tools/installer/modules/external-manager.js | 355 | // ─── Clone or update cache by resolved channel ──────────────────────── | COMMENT |
| MEDIUM | test/test-parse-source-urls.js | 40 | // ─── Deep path shapes (4+ segments) ───────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-parse-source-urls.js | 86 | // ─── Azure DevOps URLs (Issue #2268) ──────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-parse-source-urls.js | 86 | // ─── Azure DevOps URLs (Issue #2268) ──────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-parse-source-urls.js | 170 | // ─── Subdomain hosts ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-parse-source-urls.js | 191 | // ─── Simple owner/repo URLs (regression) ──────────────────────────────────── | COMMENT |
| MEDIUM | test/test-parse-source-urls.js | 215 | // ─── Windows local paths ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-parse-source-urls.js | 249 | // ─── Generic URL handling (any host, any path depth) ──────────────────────── | COMMENT |
| MEDIUM | test/test-parse-source-urls.js | 325 | // ─── Summary ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 60 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 62 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 82 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 84 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 163 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 165 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 209 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 211 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 249 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 251 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 279 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 281 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 294 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 296 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 309 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 311 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 323 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/test-installer-channels.js | 325 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .augment/code_review_guidelines.yaml | 51 | # ============================================ | COMMENT |
| MEDIUM | .augment/code_review_guidelines.yaml | 53 | # ============================================ | COMMENT |
| 16 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | removals.txt | 61 | # DESIGN.md and EXPERIENCE.md outputs). | COMMENT |
| LOW | bmad-modules.yaml | 1 | # Official module registry — the single source of truth for which modules | COMMENT |
| LOW | bmad-modules.yaml | 21 | # folders. module-definition should still point at the real module.yaml so | COMMENT |
| LOW | tools/installer/ui.js | 241 | const { MessageLoader } = require('./message-loader'); | COMMENT |
| LOW | tools/installer/set-overrides.js | 1 | // `--set <module>.<key>=<value>` is a post-install patch. The installer runs | COMMENT |
| LOW | tools/installer/ide/platform-codes.yaml | 1 | # BMAD Platform Codes Configuration | COMMENT |
| LOW | tools/installer/ide/_config-driven.js | 61 | // Used by platforms that surface only persona agents (e.g. Copilot's Custom | COMMENT |
| LOW | tools/installer/core/uv-check.js | 1 | const { spawnSync } = require('node:child_process'); | COMMENT |
| LOW | tools/installer/modules/custom-module-manager.js | 81 | // Semver-valid characters: letters, digits, dot, hyphen, underscore, plus, slash. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prd/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prd/customize.toml | 21 | COMMENT | |
| LOW | src/bmm-skills/plan/bmad-prd/customize.toml | 41 | # to the product, project type, and domain. Override the path in team/user TOML | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prd/customize.toml | 61 | COMMENT | |
| LOW | src/bmm-skills/plan/bmad-prd/customize.toml | 81 | # | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prd/customize.toml | 101 | # a registry consulted on demand and only when the conversation surfaces a | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prd/customize.toml | 121 | # Fired once at Finalize step 6, never during Discovery or drafting. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prd/customize.toml | 141 | # subagent applying that prompt to prd.md | COMMENT |
| LOW | src/bmm-skills/plan/bmad-ux/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-ux/customize.toml | 41 | # visual identity work. The user runs the tool externally and saves outputs | COMMENT |
| LOW | src/bmm-skills/plan/bmad-ux/customize.toml | 61 | COMMENT | |
| LOW | src/bmm-skills/plan/bmad-ux/customize.toml | 81 | # names them; drop it to let bmad-review pick what fits the content. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-product-brief/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-product-brief/customize.toml | 21 | COMMENT | |
| LOW | src/bmm-skills/plan/bmad-product-brief/customize.toml | 41 | # to the product, purpose, and domain. Override the path in team/user TOML | COMMENT |
| LOW | src/bmm-skills/plan/bmad-product-brief/customize.toml | 61 | # 2. Content/voice/conventions (org standards, tone, terminology, compliance) | COMMENT |
| LOW | src/bmm-skills/plan/bmad-product-brief/customize.toml | 81 | # Examples (set in team/user override TOML): | COMMENT |
| LOW | …/plan/bmad-sprint-planning/sprint-status-template.yaml | 1 | # Sprint Status Template | COMMENT |
| LOW | …/plan/bmad-sprint-planning/sprint-status-template.yaml | 21 | # - in-progress: Developer actively working on implementation | COMMENT |
| LOW | src/bmm-skills/plan/bmad-sprint-planning/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-sprint-planning/customize.toml | 21 | activation_steps_append = [] | COMMENT |
| LOW | src/bmm-skills/plan/bmad-spec/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-spec/customize.toml | 21 | # Each entry is either a literal sentence, a skill prefixed with `skill:`, | COMMENT |
| LOW | src/bmm-skills/plan/bmad-spec/customize.toml | 41 | # Output path for spec folders. Lands directly under {output_folder}, | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prfaq/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-prfaq/customize.toml | 21 | activation_steps_append = [] | COMMENT |
| LOW | src/bmm-skills/plan/bmad-project-context/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-project-context/customize.toml | 21 | # Append-only. Entries: "file:{project-root}/..." or "file:/abs/path" for | COMMENT |
| LOW | src/bmm-skills/plan/bmad-architecture/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-architecture/customize.toml | 21 | COMMENT | |
| LOW | src/bmm-skills/plan/bmad-architecture/customize.toml | 41 | # need. Override the path in team/user TOML to enforce a different spine shape. | COMMENT |
| LOW | src/bmm-skills/plan/bmad-architecture/customize.toml | 61 | # The default entry runs bmad-review's two editorial lenses in order: | COMMENT |
| LOW | src/bmm-skills/plan/bmad-architecture/customize.toml | 81 | # Runs after polish; returned URLs/IDs are surfaced. Unavailable tools are skipped and flagged; | COMMENT |
| LOW | …ills/plan/bmad-create-epics-and-stories/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | …ills/plan/bmad-create-epics-and-stories/customize.toml | 21 | activation_steps_append = [] | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-pm/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-pm/customize.toml | 21 | activation_steps_prepend = [] | COMMENT |
| LOW | …mm-skills/agents/bmad-agent-ux-designer/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | …mm-skills/agents/bmad-agent-ux-designer/customize.toml | 21 | activation_steps_prepend = [] | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-analyst/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-analyst/customize.toml | 21 | activation_steps_prepend = [] | COMMENT |
| LOW | …/bmm-skills/agents/bmad-agent-architect/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | …/bmm-skills/agents/bmad-agent-architect/customize.toml | 21 | activation_steps_prepend = [] | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-dev/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/agents/bmad-agent-dev/customize.toml | 21 | activation_steps_prepend = [] | COMMENT |
| LOW | …c/bmm-skills/v6-shims/bmad-create-story/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | …c/bmm-skills/v6-shims/bmad-create-story/customize.toml | 21 | activation_steps_append = [] | COMMENT |
| LOW | src/bmm-skills/v6-shims/bmad-edit-prd/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | src/bmm-skills/v6-shims/bmad-edit-prd/customize.toml | 21 | activation_steps_append = [] | COMMENT |
| LOW | …/bmm-skills/v6-shims/bmad-sprint-status/customize.toml | 1 | # DO NOT EDIT -- overwritten on every update. | COMMENT |
| LOW | …/bmm-skills/v6-shims/bmad-sprint-status/customize.toml | 21 | activation_steps_append = [] | COMMENT |
| 54 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | …bmad-retrospective/scripts/tests/test_sprint_status.py | 1008 | "--add-action", '[{"action":null,"owner":"x"}]'] | CODE |
| HIGH | src/core-skills/bmad-brainstorming/scripts/brain.py | 245 | if (!t) { t = (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light'; } | CODE |
| HIGH | src/core-skills/bmad-brainstorming/scripts/brain.py | 418 | var sec = null; | CODE |
| HIGH | src/core-skills/bmad-brainstorming/scripts/brain.py | 433 | if (!b.checked || seen[b.dataset.name]) { return; } | CODE |
| HIGH | src/core-skills/bmad-brainstorming/scripts/brain.py | 435 | out.push(b); | CODE |
| HIGH | src/core-skills/bmad-brainstorming/scripts/brain.py | 463 | var show = !act.length || act.some(function(g){ return good.indexOf(g) >= 0; }); | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 478 | while (out.length < n && a.length){ out.push(a.splice(Math.floor(Math.random() * a.length), 1)[0]); } | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 478 | while (out.length < n && a.length){ out.push(a.splice(Math.floor(Math.random() * a.length), 1)[0]); } | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 488 | L.push("", 'Techniques to use:'); | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 490 | L.push((i + 1) + '.' + (t.r ? ' (random pick)' : '') + ' ' + t.n + ' · ' + t.c); | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 491 | L.push(' ' + t.d); | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 495 | if (state.inv > 0){ extra.push('invent ' + state.inv + ' brand-new technique' + (state.inv > 1 ? 's' : '') + ' on th | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 496 | checkedInvent().forEach(function(b){ extra.push('invent 1 new technique in the spirit of ' + b.dataset.invent); }); | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 497 | if (state.ai > 0){ extra.push('you choose ' + state.ai + ' more technique' + (state.ai > 1 ? 's' : '') + ' that fit | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 498 | if (extra.length){ L.push("", 'Then: ' + extra.join('; and ') + '.'); } | CODE |
| HIGH⚡ | src/core-skills/bmad-brainstorming/scripts/brain.py | 500 | L.push("", state.mode === 'Ideate for me' | CODE |
| HIGH | src/core-skills/bmad-brainstorming/scripts/brain.py | 531 | if (navigator.clipboard && navigator.clipboard.writeText){ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 153 | * **Pass diff inline to the blind-hunter reviewer** (#2463). Diff output is passed inline in the subagent prompt rather | COMMENT |
| MEDIUM | docs/reference/core-tools.md | 32 | | [`bmad-party-mode`](#bmad-party-mode) | Orchestrate multi-agent group discussions | | CODE |
| MEDIUM | src/bmm-skills/plan/bmad-prd/customize.toml | 23 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/plan/bmad-product-brief/customize.toml | 23 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/plan/bmad-sprint-planning/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/plan/bmad-prfaq/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/plan/bmad-architecture/customize.toml | 23 | # (approved stacks, banned dependencies, platform constraints, compliance guardrails). | COMMENT |
| MEDIUM | …ills/plan/bmad-create-epics-and-stories/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | …c/bmm-skills/v6-shims/bmad-create-story/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/v6-shims/bmad-edit-prd/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | …/bmm-skills/v6-shims/bmad-sprint-status/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | …kills/v6-shims/bmad-create-architecture/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/v6-shims/bmad-create-prd/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/v6-shims/bmad-dev-story/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | …c/bmm-skills/v6-shims/bmad-validate-prd/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/ship/bmad-retrospective/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | …-skills/ship/bmad-qa-generate-e2e-tests/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/ship/bmad-correct-course/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/ship/bmad-build-auto/spec-template.md | 9 | warnings: [] # optional: machine-readable warnings for orchestration, e.g. oversized, multiple-goals | CODE |
| MEDIUM | src/bmm-skills/ship/bmad-walkthrough/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM | src/bmm-skills/ship/bmad-code-review/customize.toml | 24 | # (standards, compliance constraints, stylistic guardrails). | COMMENT |
| MEDIUM⚡ | src/core-skills/bmad-deep-recon/customize.toml | 86 | # orchestration when it offers one (e.g. workflows): "off", "offer" | COMMENT |
| MEDIUM | src/core-skills/bmad-brainstorming/customize.toml | 23 | # (domain constraints, house rules, stylistic guardrails). Each entry is a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/bmm-skills/ship/bmad-build-auto/customize.toml | 0 | launch a context-free subagent with this prompt: conduct a review of content. look for what's missing, not only what's w | STRING |
| HIGH | src/bmm-skills/ship/bmad-build/customize.toml | 0 | launch a context-free subagent with this prompt: conduct a review of content. look for what's missing, not only what's w | STRING |
| HIGH | src/bmm-skills/ship/bmad-code-review/customize.toml | 0 | launch a context-free subagent with this prompt: conduct a review of content. look for what's missing, not only what's w | STRING |
| HIGH | src/bmm-skills/ship/bmad-build-auto/customize.toml | 0 | launch a context-free subagent with this prompt: read `{skill-root}/review-prompts/edge-case-hunter.md` completely and f | STRING |
| HIGH | src/bmm-skills/ship/bmad-build/customize.toml | 0 | launch a context-free subagent with this prompt: read `{skill-root}/review-prompts/edge-case-hunter.md` completely and f | STRING |
| HIGH | src/bmm-skills/ship/bmad-code-review/customize.toml | 0 | launch a context-free subagent with this prompt: read `{skill-root}/review-prompts/edge-case-hunter.md` completely and f | STRING |
| HIGH | src/bmm-skills/ship/bmad-build-auto/customize.toml | 0 | launch a context-free subagent with this prompt: read `{skill-root}/review-prompts/verification-gap.md` completely and f | STRING |
| HIGH | src/bmm-skills/ship/bmad-build/customize.toml | 0 | launch a context-free subagent with this prompt: read `{skill-root}/review-prompts/verification-gap.md` completely and f | STRING |
| HIGH | src/bmm-skills/ship/bmad-code-review/customize.toml | 0 | launch a context-free subagent with this prompt: read `{skill-root}/review-prompts/verification-gap.md` completely and f | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/quality.yaml | 3 | # Runs comprehensive quality checks on all PRs and pushes to main: | COMMENT |
| MEDIUM | src/bmm-skills/plan/bmad-project-context/customize.toml | 15 | # harness, not through this array. Users append their own standing facts. | COMMENT |
| MEDIUM⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 247 | # an unfilled {scope}/{paradigm}/{date} in frontmatter is part of the contract and must lint | STRING |
| MEDIUM⚡ | src/core-skills/bmad-deep-recon/customize.toml | 85 | # Run the acquisition fan-out through the harness's deterministic | COMMENT |
| MEDIUM⚡ | src/core-skills/bmad-deep-recon/customize.toml | 92 | # harness can provide wins; [] lets the harness/skill choose (lead stays on | COMMENT |
| MEDIUM⚡ | …e-skills/bmad-brainstorming/assets/brain-selector.html | 134 | <section data-cat="Proven & Professional" style="--c:#3d4f73"><h2>Proven & Professional<span class="cnt">29</spa | CODE |
| MEDIUM⚡ | …e-skills/bmad-brainstorming/assets/brain-selector.html | 134 | <section data-cat="Proven & Professional" style="--c:#3d4f73"><h2>Proven & Professional<span class="cnt">29</spa | CODE |
| MEDIUM⚡ | …e-skills/bmad-brainstorming/assets/brain-selector.html | 137 | <section data-cat="Deep" style="--c:#4658c9"><h2>Deep<span class="cnt">13</span></h2><div class="grid"><label class="tec | CODE |
| MEDIUM⚡ | …e-skills/bmad-brainstorming/assets/brain-selector.html | 137 | <section data-cat="Deep" style="--c:#4658c9"><h2>Deep<span class="cnt">13</span></h2><div class="grid"><label class="tec | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …kills/plan/bmad-sprint-planning/scripts/sprint_plan.py | 172 | CODE | |
| LOW | …kills/plan/bmad-sprint-planning/scripts/sprint_plan.py | 484 | CODE | |
| LOW | …kills/plan/bmad-sprint-planning/scripts/sprint_plan.py | 596 | CODE | |
| LOW | …mm-skills/plan/bmad-architecture/scripts/lint_spine.py | 153 | CODE | |
| LOW | …kills/ship/bmad-retrospective/scripts/sprint_status.py | 329 | CODE | |
| LOW | …lls/bmad-customize/scripts/list_customizable_skills.py | 91 | CODE | |
| LOW | src/core-skills/bmad-review/scripts/word_metrics.py | 34 | CODE | |
| LOW | src/core-skills/bmad-brainstorming/scripts/brain.py | 712 | CODE | |
| LOW | …ills/bmad-advanced-elicitation/scripts/pick_methods.py | 171 | CODE | |
| LOW | src/scripts/config_utils.py | 37 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/adversarial-review-tests/sample-content.md | 16 | "email": "user@example.com", | CODE |
| LOW | test/adversarial-review-tests/sample-content.md | 27 | "email": "user@example.com" | CODE |
| LOW⚡ | …mm-skills/plan/bmad-architecture/scripts/lint_spine.py | 83 | "category": "placeholder", | CODE |
| LOW⚡ | …mm-skills/plan/bmad-architecture/scripts/lint_spine.py | 101 | "category": "placeholder", | CODE |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 72 | assert "placeholder" not in cats(result) | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 78 | assert "placeholder" in cats(result) | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 90 | assert any(f["category"] == "placeholder" for f in result["findings"]) | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 149 | toks = [f for f in result["findings"] if f["category"] == "placeholder" and "template token" in f["detail"]] | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 156 | assert "placeholder" in cats(result) # TBD caught even with no frontmatter | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 250 | fm = [f for f in result["findings"] if f["category"] == "placeholder" and "frontmatter" in f["detail"]] | STRING |
| LOW⚡ | …lan/bmad-architecture/scripts/tests/test_lint_spine.py | 257 | assert any(f["category"] == "placeholder" and "frontmatter" in f["detail"] and "TBD" in f["detail"] | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …kills/plan/bmad-sprint-planning/scripts/sprint_plan.py | 232 | except Exception as exc: | CODE |
| LOW | …kills/plan/bmad-sprint-planning/scripts/sprint_plan.py | 458 | except Exception as exc: | CODE |
| LOW | …kills/plan/bmad-sprint-planning/scripts/sprint_plan.py | 463 | except Exception: | CODE |
| LOW | …kills/plan/bmad-sprint-planning/scripts/sprint_plan.py | 610 | except Exception as exc: | CODE |
| LOW | …skills/ship/bmad-retrospective/scripts/git_evidence.py | 108 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …kills/ship/bmad-retrospective/scripts/sprint_status.py | 174 | except Exception as exc: # noqa: BLE001 - report any parse error as JSON | CODE |
| LOW | …kills/ship/bmad-retrospective/scripts/sprint_status.py | 562 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …kills/ship/bmad-retrospective/scripts/sprint_status.py | 576 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …kills/ship/bmad-retrospective/scripts/sprint_status.py | 655 | except Exception as exc: # noqa: BLE001 - best-effort restore | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …mm-skills/plan/bmad-architecture/scripts/lint_spine.py | 24 | CODE | |
| LOW | …lls/bmad-customize/scripts/list_customizable_skills.py | 29 | CODE | |
| LOW | …stomize/scripts/tests/test_list_customizable_skills.py | 19 | CODE | |
| LOW | …bmad-forge-idea/scripts/tests/test_resolve_personas.py | 122 | CODE | |
| LOW | src/core-skills/bmad-deep-recon/scripts/recon_kit.py | 31 | CODE | |
| LOW | src/scripts/render_skill.py | 7 | CODE | |
| LOW | src/scripts/memlog.py | 69 | CODE | |
| LOW | src/scripts/config_utils.py | 3 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/validate-svg-changes.sh | 19 | # Check if file exists | COMMENT |