Skip to content

Add module tools: setup skill, config system, and builder updates#34

Merged
bmadcode merged 10 commits intomainfrom
module-tools
Mar 22, 2026
Merged

Add module tools: setup skill, config system, and builder updates#34
bmadcode merged 10 commits intomainfrom
module-tools

Conversation

@bmadcode
Copy link
Copy Markdown
Contributor

@bmadcode bmadcode commented Mar 21, 2026

Summary

  • New bmad-builder-setup skill — installs/configures the BMad Builder module into a project. Collects user preferences, writes config.yaml (shared project config) and config.user.yaml (gitignored personal settings), registers capabilities in module-help.csv. Includes anti-zombie pattern, legacy config migration, and Python scripts with full test coverage.
  • User config separationuser_name and communication_language are written exclusively to config.user.yaml, never to config.yaml. Existing user keys in config.yaml are actively stripped during merge.
  • Builder activation updates — agent-builder and workflow-builder now load config from _bmad/config.yaml and config.user.yaml with sensible fallback defaults when config is missing.
  • Removed all manifest concepts — deleted bmad-manifest.json files, manifest schemas, and manifest.py scripts from both builder skills. Updated docs and references accordingly.
  • Module configuration docs — explains when modules need configuration vs. sensible defaults, how the setup skill works, and when standalone skills can skip overhead.

Test plan

  • merge-config.py — 33 unit tests passing (fresh install, update, anti-zombie, legacy migration, user key separation)
  • merge-help-csv.py — test suite passing
  • Manual: run bmad-builder-setup on a clean project, verify config.yaml has no user-only keys
  • Manual: run setup again to verify update/anti-zombie behavior
  • Manual: run agent-builder and workflow-builder without config, verify fallback defaults work

Summary by CodeRabbit

  • New Features

    • Added a module setup skill with CLI tools to merge module config and help entries; included tests.
  • Removed Features

    • Deprecated manifest-driven capability model and removed manifest tooling and schemas.
  • Documentation

    • Major docs overhaul: Module Configuration page, activation/config-loading updates, simplified templates, and standardized sidecar memory paths.
  • Chores

    • Updated .gitignore, added a doc link validator, and adjusted CI lint/validate jobs.

Delete bmad-manifest.json, bmad-skill-manifest.yaml, manifest.py,
bmad-manifest-schema.json, and metadata-reference.md files across
both builders and samples. Remove all references from docs, build
processes, quality scans, prepass scripts, templates, and references.
New skill: bmad-builder-config
- Simple workflow that installs/configures the bmb module into a project
- Creates/updates shared {project-root}/_bmad/config.yaml with module settings
- Merges module-help.csv entries with anti-zombie pattern (removes stale
  entries before writing fresh ones)
- Two deterministic Python scripts: merge-config.py and merge-help-csv.py
- 22 unit tests covering fresh install, update, anti-zombie, round-trip
- Outcome-based SKILL.md (~39 lines) — scripts are self-documenting via --help
- Both lint gates pass clean (path-standards, script-standards)

Remove bmad-init from entire codebase (13 files):
- bmad-init skill no longer exists; config is read directly from
  {project-root}/_bmad/config.yaml
- Templates: removed {if-bmad-init}/{/if-bmad-init} conditional blocks,
  replaced with unconditional config loading from config.yaml
- Template substitution rules: removed bmad-init conditional section
- Classification reference: removed bmad-init mentions from type descriptions
- Complex workflow patterns: replaced bmad-init invocation pattern with
  direct config file reading
- Build process (both builders): removed bmad-init as default external skill,
  updated standalone field description
- Quality scanners: replaced "bmad-init variables" with "config variables"
  in prompt-craft, workflow-integrity, and enhancement-opportunities scanners
- Script opportunities reference: updated variable tracking to reference
  config.yaml directly
- Standard fields: updated standalone field from "Opts out of bmad-init?"
  to "Fully standalone, no config needed?"

Update module-help.csv:
- New CSV column format (module,agent-name,skill-name,display-name,...)
- Added bmad-builder-config entry (Configure Builder, CB)
…it and legacy migration

Renames the skill directory and updates all references (display name, menu code,
descriptions). Splits configuration into shared config.yaml and personal
config.user.yaml for gitignored user settings. Adds legacy config migration that
carries forward matching values then removes old files. Expands SKILL.md with
argument-based headless mode, default priority chain, and an outcome section
requiring consistent use of user name and communication language. Updates both
merge scripts and their tests for the new flags and features.
Explains when modules need configuration vs. sensible defaults or agent
memory, how the setup skill writes config files and registers with the
help system, and when standalone skills can skip the overhead entirely.
Includes sample prompt for upcoming module scaffolding tooling.
Rewrites On Activation for agent-builder and workflow-builder to load
config from _bmad/config.yaml and config.user.yaml with fallback
defaults when config is missing. Also adds .ruff* to gitignore.
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 21, 2026

Caution

Review failed

Pull request was closed or merged during review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This PR removes per-skill manifests and manifest tooling, centralizes runtime config to {project-root}/_bmad/config.yaml and {project-root}/_bmad/config.user.yaml, adds a new bmad-builder-setup skill with merge utilities and tests, updates prepass/scan scripts to derive structure from prompt files, and standardizes sidecar memory paths to {project-root}/_bmad/memory/.

Changes

Cohort / File(s) Summary
Top-level & metadata
/.gitignore, CHANGELOG.md, src/module.yaml, package.json, .markdownlint-cli2.yaml, .github/workflows/publish.yaml
Added .ruff* to gitignore; adjusted changelog wording; removed module config from src/module.yaml; reordered package.json fields and added docs:validate-links; ignored src/skills/** in markdownlint; minor YAML quoting changes.
New setup skill & tooling
src/skills/bmad-builder-setup/SKILL.md, src/skills/bmad-builder-setup/assets/module.yaml, src/skills/bmad-builder-setup/scripts/merge-config.py, src/skills/bmad-builder-setup/scripts/merge-help-csv.py, src/skills/bmad-builder-setup/scripts/tests/*
Added bmad-builder-setup docs and module.yaml; implemented merge-config.py and merge-help-csv.py with anti-zombie merging and legacy migration options; included unit tests covering behavior.
Manifest files, schemas & CLIs removed
src/**/bmad-manifest.json, **/scripts/bmad-manifest-schema.json, **/scripts/manifest.py, docs/reference/bmad-skill-manifest.md, many references/*/metadata-reference.md
Deleted per-skill bmad-manifest.json files, manifest JSON schemas, manifest CLI scripts, and corresponding manifest reference docs across agent/workflow builders.
Builder activation, templates & samples
src/skills/*/SKILL.md, src/skills/*/assets/SKILL-template.md, samples/**/SKILL.md, samples/**/init.md, samples/**/references/*, samples/**/dream-*.md
Replaced bmad-init/manifest-driven flows with direct reads from _bmad/config.yaml + config.user.yaml; standardized headless handling; removed manifest-driven menu construction; updated many sample docs and templates.
Prepass / scan scripts
src/skills/*/scripts/prepass-*.py, src/skills/*/scripts/prepass-*.py, src/skills/*/scripts/*scan*.py, src/skills/*/scripts/scan-path-standards.py, tools/validate-file-refs.mjs
Removed manifest parsing and alignment checks; dependency/structure extraction now derived from prompt/MD files; removed manifest-related output fields; updated path/memory validation and added new bare-internal-path checks; clarified validator comment.
Quality-scan, references & guidance docs
src/skills/*/quality-scan-*.md, src/skills/*/references/*, docs/*, CHANGELOG.md
Removed manifest validation guidance and examples; switched checks to use config variables and _bmad/config.yaml; simplified many process checklists and guidance to reflect manifest-less workflows and new config semantics.
Sample manifests removed
samples/bmad-agent-dream-weaver/bmad-manifest.json, samples/bmad-excalidraw/bmad-manifest.json
Deleted sample manifest files and their capability mappings.
Memory path standardization
many samples/**, src/skills/*/assets/*, templates
Replaced _bmad/_memory/ with {project-root}/_bmad/memory/ across docs, templates, samples, and scanners.
Docs tooling & validators
tools/validate-doc-links.cjs, tools/validate-file-refs.mjs, .github/workflows/quality.yaml
Added a docs link validator CLI (tools/validate-doc-links.cjs); clarified validate-file-refs.mjs comment; removed eslint/validate jobs from CI workflow.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant BuilderSkill as "Builder Skill (agent/workflow)"
    participant SetupSkill as "bmad-builder-setup"
    participant MergeConfig as "merge-config.py"
    participant MergeHelp as "merge-help-csv.py"
    participant Repo as "Project (_bmad/ files)"

    rect rgba(135,206,235,0.5)
      User->>BuilderSkill: Activate (may pass --headless)
      BuilderSkill->>Repo: Read `_bmad/config.yaml` + `_bmad/config.user.yaml`
      alt config missing
        BuilderSkill->>User: Inform setup availability
      end
    end

    rect rgba(144,238,144,0.5)
      User->>SetupSkill: Run setup (provide answers / legacy dir)
      SetupSkill->>MergeConfig: Invoke merge-config (module YAML + answers)
      MergeConfig->>Repo: Update `_bmad/config.yaml` and `_bmad/config.user.yaml` (anti-zombie)
      MergeConfig->>User: Print JSON summary
      SetupSkill->>MergeHelp: Invoke merge-help-csv (help CSV)
      MergeHelp->>Repo: Update `_bmad/module-help.csv` (anti-zombie)
      MergeHelp->>User: Print JSON summary
    end

    rect rgba(255,182,193,0.5)
      BuilderSkill->>Repo: Subsequent activations read updated config and help CSV
      BuilderSkill->>User: Operate using config values and prompt files
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Poem

🐇 I nibbled old manifests, bids them adieu,
Configs now take root where the _bmad winds blew.
Merge scripts sweep zombies into neat CSV hay,
Setup skill hums softly and shows the new way.
A little rabbit cheers for tidy files today.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch module-tools

@augmentcode
Copy link
Copy Markdown

augmentcode bot commented Mar 21, 2026

🤖 Augment PR Summary

Summary: Adds a first-class module setup skill for BMad Builder, migrates legacy per-module configs, and removes the old manifest-based metadata approach.

Changes:

  • Introduces bmad-builder-setup with assets/module.yaml and merge scripts to write _bmad/config.yaml, _bmad/config.user.yaml, and merge module help into _bmad/module-help.csv.
  • Adds comprehensive unit tests for merge-config.py and merge-help-csv.py.
  • Splits shared vs. user-only config (e.g., user_name, communication_language), actively stripping user keys from shared config during merges.
  • Updates agent-builder and workflow-builder activation instructions to load from the new shared/user config files with fallback defaults when config is missing.
  • Removes bmad-manifest.json files, manifest schemas, and manifest CRUD scripts from builder skills and samples; updates quality scan tooling accordingly.
  • Refreshes docs: adds module configuration guidance and removes manifest reference pages/links.

Technical Notes: Merge scripts use an anti-zombie approach (remove existing module section/rows before writing) and can optionally clean up legacy files under _bmad/<module-code>/ and _bmad/core/.

🤖 Was this summary useful? React with 👍 or 👎

Copy link
Copy Markdown

@augmentcode augmentcode bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. 5 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

args.legacy_dir, module_code, module_yaml, args.verbose
)
if legacy_core or legacy_module:
answers = apply_legacy_defaults(answers, legacy_core, legacy_module)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When --legacy-dir is present, apply_legacy_defaults() can inject a core block even if the caller intentionally omitted core (e.g., because shared core already exists), and then merge_config() may overwrite existing shared core keys (like output_folder / document_output_language) with legacy values.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Comment thread src/skills/bmad-agent-builder/SKILL.md Outdated
2. Detect user's intent from their request:

**Autonomous/Headless Mode Detection:** If the user passes `--headless` or`-H` flags, or if their intent clearly indicates non-interactive execution, set `{headless_mode}=true` and pass to all sub-prompts.
2. Load config from `{project-root}/_bmad/config.yaml` (bmb section) and `config.user.yaml`. If missing, note that `bmad-builder-setup` is available and continue with fallbacks:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This instruction references config.user.yaml without the {project-root}/_bmad/ prefix, which may cause lookups relative to the skill directory rather than the project’s _bmad folder.

Severity: medium

Other Locations
  • src/skills/bmad-workflow-builder/SKILL.md:23

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

## On Activation

1. **Load config via bmad-init skill** — Store all returned vars for use:
1. **Load config** from `{project-root}/_bmad/config.yaml` — Store all returned vars for use:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The template says {user_name} / {communication_language} come from {project-root}/_bmad/config.yaml, but this PR’s setup flow writes those user-only keys exclusively to {project-root}/_bmad/config.user.yaml, so generated skills may not be able to resolve them.

Severity: medium

Other Locations
  • src/skills/bmad-workflow-builder/assets/SKILL-template.md:31
  • src/skills/bmad-workflow-builder/assets/SKILL-template.md:70

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

- module: {bmad-module-code}
- vars: user_name:BMad,communication_language:English,document_output_language:English,output_folder:{project-root}/_bmad-output,{output-location-variable}:{default-output-path}
Load config from {project-root}/_bmad/config.yaml
- Read the `core` section for shared variables (user_name, communication_language, etc.)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The config loader guidance references a core section inside config.yaml, but merge-config.py writes shared core keys at the root level (and migrates any legacy core: block up), so consumers following this doc may read the wrong structure.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

- Dependency graphing (parsing imports, references, skill entries)
- Memory structure validation (required sections, path correctness)
- Access boundary extraction and verification
- Dependency graphing (parsing imports, references, skill entries)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dependency graphing (parsing imports, references, skill entries) appears twice in the “Common script-worthy operations” list, which looks unintentional and may confuse the build guidance.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 15

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
src/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py (1)

164-182: ⚠️ Potential issue | 🔴 Critical

Dependency graph extraction is currently non-functional.

dep_graph/prefer_after are never populated after stage discovery, so cycle/redundancy analysis is effectively disabled and hard_dependencies always returns empty.

Suggested fix direction
 def scan_execution_deps(skill_path: Path) -> dict:
-    # Build dependency graph from skill structure
-    dep_graph: dict[str, list[str]] = {}
-    prefer_after: dict[str, list[str]] = {}
+    # Build dependency graph from skill structure
+    dep_graph: dict[str, list[str]] = {}
+    prefer_after: dict[str, list[str]] = {}
     all_stages: set[str] = set()

-    # Check for stage-level prompt files at skill root
-    for f in sorted(skill_path.iterdir()):
-        if f.is_file() and f.suffix == '.md' and f.name != 'SKILL.md':
-            all_stages.add(f.stem)
+    stage_files = [
+        f for f in sorted(skill_path.iterdir())
+        if f.is_file() and f.suffix == '.md' and f.name != 'SKILL.md'
+    ]
+    for f in stage_files:
+        all_stages.add(f.stem)
+        dep_graph.setdefault(f.stem, [])
+        prefer_after.setdefault(f.stem, [])
+
+    # TODO: parse per-stage dependency hints from markdown/frontmatter
+    # and populate dep_graph / prefer_after before running graph analyses.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py` around
lines 164 - 182, The dep_graph and prefer_after maps are never filled after
discovering stages, so detect_cycles, find_transitive_redundancy and
find_parallel_groups operate on an empty graph and hard_dependencies ends up
empty; modify the stage-scanning logic (the loop that fills all_stages) to also
open each stage file and extract dependency metadata into dep_graph (hard
dependencies) and prefer_after (soft/after relationships) before calling
detect_cycles, find_transitive_redundancy and find_parallel_groups — parse
whatever marker you use in stage files (frontmatter keys, "requires"/"after"
lines, or similar) and ensure every discovered stage is present as a key in
dep_graph (with empty list if none) so downstream functions see the actual
graph.
src/skills/bmad-agent-builder/quality-scan-structure.md (1)

140-152: ⚠️ Potential issue | 🟡 Minor

Invalid JSON: trailing comma in example output.

The JSON example has a trailing comma on line 145 ("has_headless": false,) which is invalid JSON syntax. This could confuse implementations following this schema.

🐛 Fix the trailing comma
   "assessments": {
     "sections_found": ["Overview", "Identity"],
     "capabilities_count": 0,
     "has_memory": false,
-    "has_headless": false,
+    "has_headless": false
   },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-agent-builder/quality-scan-structure.md` around lines 140 -
152, The JSON example under the "assessments" object contains an invalid
trailing comma after the "has_headless" property; remove that trailing comma so
the object is valid JSON (locate the "assessments" block and the "has_headless"
key in the example output and delete the comma following false).
src/skills/bmad-agent-builder/references/script-opportunities-reference.md (1)

170-178: ⚠️ Potential issue | 🟡 Minor

Fix the activation step numbering gap.

Line 177 jumps from 6 to 8 (“Present menu”). Please renumber to keep the sequence contiguous for readers and for any script/checklist derived from this list.

✏️ Suggested doc fix
-6. Greet
-8. Present menu
+6. Greet
+7. Present menu
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-agent-builder/references/script-opportunities-reference.md`
around lines 170 - 178, The ordered checklist has a numbering gap: after "6.
Greet" it jumps to "8. Present menu"; change "8. Present menu" to "7. Present
menu" so the sequence reads 1. Activation mode detection, 2. Config loading, 3.
First-run check, 4. Access boundaries load, 5. Memory load, 6. Greet, 7. Present
menu, and update any adjacent list numbering if present to keep the sequence
contiguous (refer to the list items "Activation mode detection", "Greet", and
"Present menu" to locate the exact spot).
🧹 Nitpick comments (5)
src/skills/bmad-builder-setup/scripts/merge-config.py (1)

266-268: Consider moving _CORE_USER_KEYS definition earlier in the file.

_CORE_USER_KEYS is used in merge_config() at line 225 but defined at line 267. While this works (the function body isn't executed until called), placing constants near the top of the module (alongside _CORE_KEYS at line 88) improves readability and follows the convention of defining constants before their use.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-builder-setup/scripts/merge-config.py` around lines 266 -
268, Move the constant definition of _CORE_USER_KEYS so it appears before its
use in merge_config — e.g., relocate the _CORE_USER_KEYS = ("user_name",
"communication_language") declaration up near the existing _CORE_KEYS constant
(around where _CORE_KEYS is defined) so constants are declared prior to being
referenced by the merge_config function; ensure no logic changes, only
reposition the constant.
src/skills/bmad-agent-builder/scripts/prepass-execution-deps.py (1)

202-212: Dependency graph functions are now effectively no-ops.

With dep_graph always empty, detect_cycles(), find_transitive_redundancy(), and partially find_parallel_groups() will never produce meaningful results. The graph-related functions (lines 33-110) are now dead code.

If these capabilities are being removed intentionally with the manifest, consider removing the unused functions to reduce maintenance burden. If dependency analysis will be restored via a different mechanism, a TODO comment would clarify intent.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-agent-builder/scripts/prepass-execution-deps.py` around lines
202 - 212, The dependency graph (dep_graph) is never populated so functions
detect_cycles, find_transitive_redundancy, and find_parallel_groups become dead
code; either restore dep_graph population from your manifest/prompt metadata or
remove/mark the unused functions. Locate where dep_graph, prefer_after and
all_stages are initialized and either (A) implement logic to populate dep_graph
by parsing prompt files or the skill manifest (so detect_cycles and
find_transitive_redundancy operate on real data), or (B) remove or annotate
detect_cycles, find_transitive_redundancy, and find_parallel_groups with a
TODO/comment indicating dependency analysis is intentionally disabled. Ensure
references to prompts_dir and f.stem are used in the chosen approach so stage
names feed into dep_graph if you restore analysis.
.gitignore (1)

21-21: Consider narrowing the pattern to .ruff_cache/ if config files should be tracked.

The pattern .ruff* will ignore both cache directories (.ruff_cache/) and configuration files (.ruff.toml). If Ruff configuration should be committed to the repository, consider using .ruff_cache/ instead.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.gitignore at line 21, The .gitignore entry `.ruff*` is too broad and also
ignores configuration files like `.ruff.toml`; replace or narrow it to
`.ruff_cache/` (or add a separate `.ruff_cache/` line and remove `.ruff*`) so
cache directories are ignored but Ruff config files (`.ruff.toml`) remain
tracked; update the ignore pattern accordingly and ensure no other rules still
match `.ruff.toml`.
src/skills/bmad-agent-builder/build-process.md (1)

37-41: Remove the duplicated dependency-graphing bullet.

Line 37 and Line 40 repeat the same guidance verbatim; keeping one avoids redundant prompting behavior.

Suggested cleanup
 - Dependency graphing (parsing imports, references, skill entries)
 - Memory structure validation (required sections, path correctness)
 - Access boundary extraction and verification
-- Dependency graphing (parsing imports, references, skill entries)
 - Pre-processing for LLM capabilities (extract compact metrics from large files so the LLM works from structured data, not raw content)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-agent-builder/build-process.md` around lines 37 - 41, The
markdown contains a duplicated bullet "Dependency graphing (parsing imports,
references, skill entries)"; remove the second occurrence (the redundant line)
so the list only includes that item once and retains the other bullets ("Memory
structure validation...", "Access boundary extraction...", "Pre-processing for
LLM capabilities..."), ensuring no extra blank lines are introduced.
src/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py (1)

296-300: Minor redundancy in file filtering condition.

Line 300 checks both f.name not in skip_files and f.name != 'SKILL.md', but 'SKILL.md' is already in skip_files (line 297). The second check is redundant.

♻️ Optional simplification
     skip_files = {'SKILL.md'}
 
     for f in sorted(skill_path.iterdir()):
-        if f.is_file() and f.suffix == '.md' and f.name not in skip_files and f.name != 'SKILL.md':
+        if f.is_file() and f.suffix == '.md' and f.name not in skip_files:
             data = scan_file_patterns(f, f.name)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py` around lines
296 - 300, The loop that iterates files redundantly checks f.name not in
skip_files and f.name != 'SKILL.md' even though 'SKILL.md' is already in
skip_files; remove the extra equality check so the condition is just if
f.is_file() and f.suffix == '.md' and f.name not in skip_files, keeping the
skip_files set (skip_files) and the iterator over skill_path.iterdir() unchanged
and only referencing f and f.name in the simplified condition.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@CHANGELOG.md`:
- Line 17: Add a clear changelog entry documenting the removal of manifest-based
architecture: update CHANGELOG.md to include a line stating that manifest files
and related code (e.g., bmad-manifest.json, manifest schemas, manifest.py and
any manifest handling in both builders) were removed and replaced by the YAML
configuration system so users are aware of the breaking change from
manifest-based to YAML-based configuration.

In `@docs/explanation/module-configuration.md`:
- Around line 123-124: Fix the typo in the documentation sentence inside
module-configuration.md where it currently reads "components amd structure" —
change "amd" to "and" so the phrase reads "components and structure"; update the
text near the sentence that references `bmad-builder-setup` SKILL.md, scripts,
tests, and the two asset files (`module.yaml` and `module-help.csv`)
accordingly.

In `@docs/reference/workflow-patterns.md`:
- Line 12: Update the outdated init name used in the Simple Utility workflow
description: find the table cell that includes the string `bmad-init` and
replace it with `bmad-builder-setup` so the documentation reflects the current
setup/config flow; ensure the replacement preserves formatting (inline code
backticks) and the rest of the row (e.g., SKILL.md + `scripts/`) remains
unchanged.

In `@src/skills/bmad-builder-setup/assets/module.yaml`:
- Line 18: The prompt string under the prompt key in module.yaml is
ambiguous—change "Evals, Test, Quality and Planning Reports?" to a clearer
phrasing such as "Evals, Tests, Quality, and Planning Reports?" (make "Test"
plural to "Tests" and add the Oxford comma for consistency) so the prompt
properly refers to multiple tests and reads cleanly.
- Around line 1-5: The YAML file uses unquoted scalars and inconsistent
formatting; update the module.yaml so all scalar values are double-quoted (e.g.,
"code", "name", "description", "module_version", "default_selected") and ensure
consistent YAML style (spacing, indentation and line endings) to satisfy the
linter and the project's rule that all YAML must use double quotes with
avoidEscape: true; edit the entries for code, name, description, module_version
and default_selected to be double-quoted and re-run the formatter to confirm no
other lines (noted lines 7-10 and 12-20) violate the same rule.

In `@src/skills/bmad-builder-setup/scripts/merge-help-csv.py`:
- Around line 16-17: The docstring lists exit code 2 but the script never uses
it; wrap the script's main processing (the top-level logic in this module) in a
try/except that catches unexpected runtime errors, print the exception to stderr
(or log it) and call sys.exit(2) on such exceptions, and update the top-level
docstring string accordingly if you prefer removing 2 instead; specifically, add
a guarded main() function or wrap existing top-level code in try: ... except
Exception as e: print(f"Runtime error: {e}", file=sys.stderr); sys.exit(2) so
the documented "2=runtime error" is actually emitted on I/O or other runtime
failures.

In `@src/skills/bmad-builder-setup/scripts/tests/test-merge-config.py`:
- Around line 449-451: The test unpacks load_legacy_values into core, mod, files
but never uses core; update the unpacking in the test to avoid the unused
variable by either assigning it to a throwaway name (e.g., _core) or only
unpacking the needed values (e.g., mod, files) when calling load_legacy_values
in the test_merge_config test where load_legacy_values is invoked; change the
tuple assignment accordingly so the unused value is not bound to `core`.
- Around line 422-424: The test unpacks three values from load_legacy_values
into core, mod, files but never uses mod; update the unpacking in
test-merge-config.py to avoid an unused variable by either assigning a throwaway
name (e.g., core, _, files = load_legacy_values(...)) or by only capturing the
needed return values (e.g., core, files = load_legacy_values(...)) depending on
the function's return shape; keep the call to load_legacy_values and assertions
unchanged and reference load_legacy_values, core, mod, files to locate the
change.

In `@src/skills/bmad-builder-setup/scripts/tests/test-merge-help-csv.py`:
- Around line 86-88: The test unpacks read_csv_rows(path) into header and rows
but never uses header; fix by changing the unpacking to ignore the header (e.g.,
use _ or discard it) so only rows is used in assertions (reference:
read_csv_rows and the test in test-merge-help-csv.py where header, rows =
read_csv_rows(path) is written).

In `@src/skills/bmad-builder-setup/SKILL.md`:
- Line 49: The help examples in SKILL.md use inconsistent executable paths
("./scripts/merge-config.py --help" vs "scripts/merge-help-csv.py --help");
update the examples so both commands use the same explicit path (e.g., prefix
both with "./scripts/") to ensure consistency and avoid failures when run from
different working directories—edit the line containing the two command examples
to use the unified path.

In `@src/skills/bmad-workflow-builder/assets/SKILL-template.md`:
- Around line 31-34: Update the "Load config" step in SKILL-template.md to load
and merge user-scoped settings from `_bmad/config.user.yaml` in addition to
`_bmad/config.yaml` so `{user_name}` and `{communication_language}` (and
optionally `{document_output_language}`) are sourced from the user config when
present; modify the instructions for the Load config step (the block referencing
`{user_name}`, `{communication_language}`, `{document_output_language}`) to
explicitly call out loading `_bmad/config.user.yaml` and merging/overriding
values, and apply the same change to the second duplicate block (the later block
at lines ~70-74) so workflows pick up user personalization.
- Line 68: The file contains a duplicated Markdown heading "## On Activation"
(the symbol "## On Activation") causing MD024; fix it by removing or renaming
the redundant heading so only one "## On Activation" remains—either delete the
extra heading and merge its content into the original section or change it to a
distinct heading (e.g., "### On Activation Details") to preserve structure and
pass markdown-lint.

In `@src/skills/bmad-workflow-builder/quality-scan-enhancement-opportunities.md`:
- Around line 191-193: The recovery message incorrectly references the old setup
entrypoint "module-init"; update the fallback text used in Stage 2 (the JSON
object with "detail" and "action" in quality-scan-enhancement-opportunities.md)
to point users to the new setup skill "bmad-builder-setup", and while here
ensure the Stage 2 logic detects a missing _bmad/config.yaml, explains how to
run "bmad-builder-setup" to create it, and offers an option to proceed with
sensible defaults if the user agrees; locate and update the "detail" and
"action" strings that compose the missing-config fallback for Stage 2 to
implement this corrected guidance.

In `@src/skills/bmad-workflow-builder/quality-scan-skill-cohesion.md`:
- Line 302: The checklist and implementation for the cohesion scan currently
only reads SKILL.md and prompts but omits references/*.md; update the “Parallel
read batch” step and the completeness/verification logic so the scanner reads
SKILL.md, all prompt files AND references/*.md (the “list resources/” step) in
the same parallel batch, and ensure the completeness check that currently
verifies SKILL.md + prompts also verifies references/*.md is present and
accounted for in the cohesion findings.

In `@src/skills/bmad-workflow-builder/references/complex-workflow-patterns.md`:
- Around line 33-42: Update the "Config Loading Pattern" guidance so workflows
read shared keys from the core config and user-specific keys from the user
config: change instructions that say to read user_name and
communication_language from `_bmad/config.yaml` to instead read shared variables
from the `core` section of `_bmad/config.yaml` and user-specific variables
(e.g., user_name, communication_language) from `_bmad/config.user.yaml`; ensure
the doc text under the "Config Loading Pattern" heading and any repeated
occurrences (mentions of `core` and module sections) reflect this separation so
generated workflows will load personal config from the user file.

---

Outside diff comments:
In `@src/skills/bmad-agent-builder/quality-scan-structure.md`:
- Around line 140-152: The JSON example under the "assessments" object contains
an invalid trailing comma after the "has_headless" property; remove that
trailing comma so the object is valid JSON (locate the "assessments" block and
the "has_headless" key in the example output and delete the comma following
false).

In `@src/skills/bmad-agent-builder/references/script-opportunities-reference.md`:
- Around line 170-178: The ordered checklist has a numbering gap: after "6.
Greet" it jumps to "8. Present menu"; change "8. Present menu" to "7. Present
menu" so the sequence reads 1. Activation mode detection, 2. Config loading, 3.
First-run check, 4. Access boundaries load, 5. Memory load, 6. Greet, 7. Present
menu, and update any adjacent list numbering if present to keep the sequence
contiguous (refer to the list items "Activation mode detection", "Greet", and
"Present menu" to locate the exact spot).

In `@src/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py`:
- Around line 164-182: The dep_graph and prefer_after maps are never filled
after discovering stages, so detect_cycles, find_transitive_redundancy and
find_parallel_groups operate on an empty graph and hard_dependencies ends up
empty; modify the stage-scanning logic (the loop that fills all_stages) to also
open each stage file and extract dependency metadata into dep_graph (hard
dependencies) and prefer_after (soft/after relationships) before calling
detect_cycles, find_transitive_redundancy and find_parallel_groups — parse
whatever marker you use in stage files (frontmatter keys, "requires"/"after"
lines, or similar) and ensure every discovered stage is present as a key in
dep_graph (with empty list if none) so downstream functions see the actual
graph.

---

Nitpick comments:
In @.gitignore:
- Line 21: The .gitignore entry `.ruff*` is too broad and also ignores
configuration files like `.ruff.toml`; replace or narrow it to `.ruff_cache/`
(or add a separate `.ruff_cache/` line and remove `.ruff*`) so cache directories
are ignored but Ruff config files (`.ruff.toml`) remain tracked; update the
ignore pattern accordingly and ensure no other rules still match `.ruff.toml`.

In `@src/skills/bmad-agent-builder/build-process.md`:
- Around line 37-41: The markdown contains a duplicated bullet "Dependency
graphing (parsing imports, references, skill entries)"; remove the second
occurrence (the redundant line) so the list only includes that item once and
retains the other bullets ("Memory structure validation...", "Access boundary
extraction...", "Pre-processing for LLM capabilities..."), ensuring no extra
blank lines are introduced.

In `@src/skills/bmad-agent-builder/scripts/prepass-execution-deps.py`:
- Around line 202-212: The dependency graph (dep_graph) is never populated so
functions detect_cycles, find_transitive_redundancy, and find_parallel_groups
become dead code; either restore dep_graph population from your manifest/prompt
metadata or remove/mark the unused functions. Locate where dep_graph,
prefer_after and all_stages are initialized and either (A) implement logic to
populate dep_graph by parsing prompt files or the skill manifest (so
detect_cycles and find_transitive_redundancy operate on real data), or (B)
remove or annotate detect_cycles, find_transitive_redundancy, and
find_parallel_groups with a TODO/comment indicating dependency analysis is
intentionally disabled. Ensure references to prompts_dir and f.stem are used in
the chosen approach so stage names feed into dep_graph if you restore analysis.

In `@src/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py`:
- Around line 296-300: The loop that iterates files redundantly checks f.name
not in skip_files and f.name != 'SKILL.md' even though 'SKILL.md' is already in
skip_files; remove the extra equality check so the condition is just if
f.is_file() and f.suffix == '.md' and f.name not in skip_files, keeping the
skip_files set (skip_files) and the iterator over skill_path.iterdir() unchanged
and only referencing f and f.name in the simplified condition.

In `@src/skills/bmad-builder-setup/scripts/merge-config.py`:
- Around line 266-268: Move the constant definition of _CORE_USER_KEYS so it
appears before its use in merge_config — e.g., relocate the _CORE_USER_KEYS =
("user_name", "communication_language") declaration up near the existing
_CORE_KEYS constant (around where _CORE_KEYS is defined) so constants are
declared prior to being referenced by the merge_config function; ensure no logic
changes, only reposition the constant.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5a699987-9695-4b52-b88b-c96bf8ce521d

📥 Commits

Reviewing files that changed from the base of the PR and between dfc064b and 44bc861.

⛔ Files ignored due to path filters (2)
  • src/module-help.csv is excluded by !**/*.csv
  • src/skills/bmad-builder-setup/assets/module-help.csv is excluded by !**/*.csv
📒 Files selected for processing (66)
  • .gitignore
  • CHANGELOG.md
  • docs/explanation/index.md
  • docs/explanation/module-configuration.md
  • docs/explanation/what-are-bmad-agents.md
  • docs/explanation/what-are-skills.md
  • docs/explanation/what-are-workflows.md
  • docs/index.md
  • docs/reference/bmad-skill-manifest.md
  • docs/reference/builder-commands.md
  • docs/reference/index.md
  • docs/reference/workflow-patterns.md
  • samples/bmad-agent-dream-weaver/SKILL.md
  • samples/bmad-agent-dream-weaver/bmad-manifest.json
  • samples/bmad-agent-dream-weaver/init.md
  • samples/bmad-excalidraw/bmad-manifest.json
  • src/module.yaml
  • src/skills/bmad-agent-builder/SKILL.md
  • src/skills/bmad-agent-builder/assets/SKILL-template.md
  • src/skills/bmad-agent-builder/assets/quality-report-template.md
  • src/skills/bmad-agent-builder/bmad-manifest.json
  • src/skills/bmad-agent-builder/bmad-skill-manifest.yaml
  • src/skills/bmad-agent-builder/build-process.md
  • src/skills/bmad-agent-builder/quality-scan-agent-cohesion.md
  • src/skills/bmad-agent-builder/quality-scan-prompt-craft.md
  • src/skills/bmad-agent-builder/quality-scan-script-opportunities.md
  • src/skills/bmad-agent-builder/quality-scan-structure.md
  • src/skills/bmad-agent-builder/references/metadata-reference.md
  • src/skills/bmad-agent-builder/references/script-opportunities-reference.md
  • src/skills/bmad-agent-builder/references/skill-best-practices.md
  • src/skills/bmad-agent-builder/references/template-substitution-rules.md
  • src/skills/bmad-agent-builder/references/universal-scan-schema.md
  • src/skills/bmad-agent-builder/report-quality-scan-creator.md
  • src/skills/bmad-agent-builder/scripts/bmad-manifest-schema.json
  • src/skills/bmad-agent-builder/scripts/manifest.py
  • src/skills/bmad-agent-builder/scripts/prepass-execution-deps.py
  • src/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py
  • src/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py
  • src/skills/bmad-builder-setup/SKILL.md
  • src/skills/bmad-builder-setup/assets/module.yaml
  • src/skills/bmad-builder-setup/scripts/merge-config.py
  • src/skills/bmad-builder-setup/scripts/merge-help-csv.py
  • src/skills/bmad-builder-setup/scripts/tests/test-merge-config.py
  • src/skills/bmad-builder-setup/scripts/tests/test-merge-help-csv.py
  • src/skills/bmad-workflow-builder/SKILL.md
  • src/skills/bmad-workflow-builder/assets/SKILL-template.md
  • src/skills/bmad-workflow-builder/bmad-manifest.json
  • src/skills/bmad-workflow-builder/bmad-skill-manifest.yaml
  • src/skills/bmad-workflow-builder/build-process.md
  • src/skills/bmad-workflow-builder/quality-scan-enhancement-opportunities.md
  • src/skills/bmad-workflow-builder/quality-scan-execution-efficiency.md
  • src/skills/bmad-workflow-builder/quality-scan-prompt-craft.md
  • src/skills/bmad-workflow-builder/quality-scan-script-opportunities.md
  • src/skills/bmad-workflow-builder/quality-scan-skill-cohesion.md
  • src/skills/bmad-workflow-builder/quality-scan-workflow-integrity.md
  • src/skills/bmad-workflow-builder/references/classification-reference.md
  • src/skills/bmad-workflow-builder/references/complex-workflow-patterns.md
  • src/skills/bmad-workflow-builder/references/metadata-reference.md
  • src/skills/bmad-workflow-builder/references/script-opportunities-reference.md
  • src/skills/bmad-workflow-builder/references/standard-fields.md
  • src/skills/bmad-workflow-builder/references/template-substitution-rules.md
  • src/skills/bmad-workflow-builder/references/universal-scan-schema.md
  • src/skills/bmad-workflow-builder/scripts/bmad-manifest-schema.json
  • src/skills/bmad-workflow-builder/scripts/manifest.py
  • src/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py
  • src/skills/bmad-workflow-builder/scripts/prepass-workflow-integrity.py
💤 Files with no reviewable changes (19)
  • docs/explanation/what-are-bmad-agents.md
  • src/skills/bmad-agent-builder/references/template-substitution-rules.md
  • src/skills/bmad-agent-builder/bmad-skill-manifest.yaml
  • docs/reference/index.md
  • src/skills/bmad-agent-builder/assets/quality-report-template.md
  • samples/bmad-excalidraw/bmad-manifest.json
  • docs/reference/bmad-skill-manifest.md
  • src/skills/bmad-workflow-builder/references/template-substitution-rules.md
  • src/skills/bmad-agent-builder/references/metadata-reference.md
  • src/skills/bmad-workflow-builder/bmad-manifest.json
  • src/skills/bmad-agent-builder/bmad-manifest.json
  • src/skills/bmad-workflow-builder/references/metadata-reference.md
  • samples/bmad-agent-dream-weaver/bmad-manifest.json
  • src/skills/bmad-agent-builder/scripts/bmad-manifest-schema.json
  • src/skills/bmad-workflow-builder/scripts/prepass-workflow-integrity.py
  • src/skills/bmad-workflow-builder/bmad-skill-manifest.yaml
  • src/skills/bmad-workflow-builder/scripts/bmad-manifest-schema.json
  • src/skills/bmad-workflow-builder/scripts/manifest.py
  • src/skills/bmad-agent-builder/scripts/manifest.py

Comment thread CHANGELOG.md
### Removed

- Obsolete sample and manifest files from old skill structure
- Obsolete sample files from old skill structure
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Document the removal of manifest files and architecture.

The changelog entry removes the mention of manifest files, but the PR objectives indicate that manifest-related concepts and files (bmad-manifest.json, manifest schemas, manifest.py, etc.) were removed across both builders as a major architectural change. This removal should be properly documented in the changelog to inform users of the breaking change from manifest-based to YAML-based configuration.

Consider adding a dedicated entry such as:

- Manifest-based skill architecture (replaced with YAML configuration system)

This helps users understand the architectural shift when upgrading.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` at line 17, Add a clear changelog entry documenting the removal
of manifest-based architecture: update CHANGELOG.md to include a line stating
that manifest files and related code (e.g., bmad-manifest.json, manifest
schemas, manifest.py and any manifest handling in both builders) were removed
and replaced by the YAML configuration system so users are aware of the breaking
change from manifest-based to YAML-based configuration.

Comment on lines +123 to +124
A decent LLM will clone the entire `bmad-builder-setup` skill components amd structure — SKILL.md, scripts, tests — updating only the skill name, description, and the two asset files (`module.yaml` and `module-help.csv`) to reflect your module.
Take the time to ensure the description that triggers it is correct, along with the module.yaml and module-help.csv
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix typo in user-facing docs.

Line 123 says “components amd structure”; this should be “and”.

✏️ Suggested fix
-A decent LLM will clone the entire `bmad-builder-setup` skill components amd structure — SKILL.md, scripts, tests — updating only the skill name, description, and the two asset files (`module.yaml` and `module-help.csv`) to reflect your module.
+A decent LLM will clone the entire `bmad-builder-setup` skill components and structure — SKILL.md, scripts, tests — updating only the skill name, description, and the two asset files (`module.yaml` and `module-help.csv`) to reflect your module.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
A decent LLM will clone the entire `bmad-builder-setup` skill components amd structure — SKILL.md, scripts, tests — updating only the skill name, description, and the two asset files (`module.yaml` and `module-help.csv`) to reflect your module.
Take the time to ensure the description that triggers it is correct, along with the module.yaml and module-help.csv
A decent LLM will clone the entire `bmad-builder-setup` skill components and structure — SKILL.md, scripts, tests — updating only the skill name, description, and the two asset files (`module.yaml` and `module-help.csv`) to reflect your module.
Take the time to ensure the description that triggers it is correct, along with the module.yaml and module-help.csv
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/explanation/module-configuration.md` around lines 123 - 124, Fix the
typo in the documentation sentence inside module-configuration.md where it
currently reads "components amd structure" — change "amd" to "and" so the phrase
reads "components and structure"; update the text near the sentence that
references `bmad-builder-setup` SKILL.md, scripts, tests, and the two asset
files (`module.yaml` and `module-help.csv`) accordingly.

| Type | Description | Structure |
| ---- | ----------- | --------- |
| **Simple Utility** | Input/output building block. Headless, composable, often script-driven. May opt out of `bmad-init` for true standalone use | Single SKILL.md + `scripts/` |
| **Simple Utility** | Input/output building block. Headless, composable, often script-driven. May opt out of `bmad-init` for true standalone use | SKILL.md + `scripts/` |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Line 12 uses outdated init terminology.

The doc still says bmad-init, but this PR’s setup/config flow centers on bmad-builder-setup. Keeping old naming here can misroute users during setup.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/reference/workflow-patterns.md` at line 12, Update the outdated init
name used in the Simple Utility workflow description: find the table cell that
includes the string `bmad-init` and replace it with `bmad-builder-setup` so the
documentation reflects the current setup/config flow; ensure the replacement
preserves formatting (inline code backticks) and the rest of the row (e.g.,
SKILL.md + `scripts/`) remains unchanged.

Comment on lines +1 to +5
code: bmb
name: "BMad Builder"
description: "Standard Skill Compliant Factory for BMad Agents, Workflows and Modules"
module_version: 1.0.0
default_selected: false
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Resolve YAML style + formatting warnings before merge.

This file currently fails formatting checks, and string scalars like Line 1 (code) and Line 4 (module_version) are not double-quoted.

✅ Suggested fix
-code: bmb
+code: "bmb"
@@
-module_version: 1.0.0
+module_version: "1.0.0"
As per coding guidelines, `**/*.{yaml,yml}`: Use double quotes in all YAML with avoidEscape: true to maintain consistency in agent and workflow definitions.

Also applies to: 7-10, 12-20

🧰 Tools
🪛 GitHub Actions: Quality & Validation

[warning] 1-1: Prettier check reported formatting issues in this file.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-builder-setup/assets/module.yaml` around lines 1 - 5, The
YAML file uses unquoted scalars and inconsistent formatting; update the
module.yaml so all scalar values are double-quoted (e.g., "code", "name",
"description", "module_version", "default_selected") and ensure consistent YAML
style (spacing, indentation and line endings) to satisfy the linter and the
project's rule that all YAML must use double quotes with avoidEscape: true; edit
the entries for code, name, description, module_version and default_selected to
be double-quoted and re-run the formatter to confirm no other lines (noted lines
7-10 and 12-20) violate the same rule.

result: "{project-root}/{value}"

bmad_builder_reports:
prompt: "Output for Evals, Test, Quality and Planning Reports?"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Tighten prompt wording for clarity.

Line 18 reads “Evals, Test, Quality and Planning Reports?” — “Tests” is likely intended.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-builder-setup/assets/module.yaml` at line 18, The prompt
string under the prompt key in module.yaml is ambiguous—change "Evals, Test,
Quality and Planning Reports?" to a clearer phrasing such as "Evals, Tests,
Quality, and Planning Reports?" (make "Test" plural to "Tests" and add the
Oxford comma for consistency) so the prompt properly refers to multiple tests
and reads cleanly.

Comment thread src/skills/bmad-workflow-builder/assets/SKILL-template.md Outdated
Comment thread src/skills/bmad-workflow-builder/assets/SKILL-template.md
Comment on lines +191 to 193
"detail": "Stage 2 assumes a config exists at _bmad/config.yaml. A first-timer who invokes this skill directly gets a cryptic error with no guidance on how to recover. This would frustrate new users and create abandonment.",
"action": "Add a graceful fallback in stage 2: detect missing config, explain how to run the module-init skill, and offer to proceed with defaults."
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Recovery action references the wrong setup entrypoint.

Line 192 tells users to run module-init, but this PR introduces bmad-builder-setup as the configuration/setup skill. If module-init is not an alias, this creates a broken recovery path for first-time users.

Suggested patch
-      "action": "Add a graceful fallback in stage 2: detect missing config, explain how to run the module-init skill, and offer to proceed with defaults."
+      "action": "Add a graceful fallback in stage 2: detect missing config, explain how to run the bmad-builder-setup skill, and offer to proceed with defaults."
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"detail": "Stage 2 assumes a config exists at _bmad/config.yaml. A first-timer who invokes this skill directly gets a cryptic error with no guidance on how to recover. This would frustrate new users and create abandonment.",
"action": "Add a graceful fallback in stage 2: detect missing config, explain how to run the module-init skill, and offer to proceed with defaults."
}
"detail": "Stage 2 assumes a config exists at _bmad/config.yaml. A first-timer who invokes this skill directly gets a cryptic error with no guidance on how to recover. This would frustrate new users and create abandonment.",
"action": "Add a graceful fallback in stage 2: detect missing config, explain how to run the bmad-builder-setup skill, and offer to proceed with defaults."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-workflow-builder/quality-scan-enhancement-opportunities.md`
around lines 191 - 193, The recovery message incorrectly references the old
setup entrypoint "module-init"; update the fallback text used in Stage 2 (the
JSON object with "detail" and "action" in
quality-scan-enhancement-opportunities.md) to point users to the new setup skill
"bmad-builder-setup", and while here ensure the Stage 2 logic detects a missing
_bmad/config.yaml, explains how to run "bmad-builder-setup" to create it, and
offers an option to proceed with sensible defaults if the user agrees; locate
and update the "detail" and "action" strings that compose the missing-config
fallback for Stage 2 to implement this corrected guidance.

## Process

1. **Parallel read batch:** Read SKILL.md, bmad-manifest.json, all prompt files, and list resources/ — in a single parallel batch
1. **Parallel read batch:** Read SKILL.md, all prompt files, and list resources/ — in a single parallel batch
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Align process/completeness checks with declared scan targets.

Line 302 says to “list resources/” and Line 315 only verifies SKILL.md + prompts, but this scanner’s targets also require references/*.md. This can produce incomplete cohesion findings.

Suggested doc fix
-1. **Parallel read batch:** Read SKILL.md, all prompt files, and list resources/ — in a single parallel batch
+1. **Parallel read batch:** Read SKILL.md, all prompt files, and all `references/*.md` files — in a single parallel batch
...
-- Did I read SKILL.md and ALL prompts?
+- Did I read SKILL.md, ALL prompts, and all `references/*.md` files?

Also applies to: 315-315

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-workflow-builder/quality-scan-skill-cohesion.md` at line 302,
The checklist and implementation for the cohesion scan currently only reads
SKILL.md and prompts but omits references/*.md; update the “Parallel read batch”
step and the completeness/verification logic so the scanner reads SKILL.md, all
prompt files AND references/*.md (the “list resources/” step) in the same
parallel batch, and ensure the completeness check that currently verifies
SKILL.md + prompts also verifies references/*.md is present and accounted for in
the cohesion findings.

Comment thread src/skills/bmad-workflow-builder/references/complex-workflow-patterns.md Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
samples/bmad-excalidraw/SKILL.md (1)

36-40: Clarify greeting behavior when user_name is omitted.

Line 36 specifies that {user_name} should be omitted when missing from config, but line 40 instructs to "Greet user as {user_name}" without explaining what happens when the name is unavailable. Consider adding brief guidance, such as "greet the user (using {user_name} if available)" or "greet the user generically if {user_name} is omitted."

💬 Example clarification
-2. **Greet user** as `{user_name}`, speaking in `{communication_language}`
+2. **Greet user** (using `{user_name}` if available), speaking in `{communication_language}`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@samples/bmad-excalidraw/SKILL.md` around lines 36 - 40, The instruction
"Greet user as {user_name}" is ambiguous when {user_name} is omitted; update the
SKILL.md text to explicitly state fallback behavior (e.g., "Greet the user using
{user_name} if available; otherwise use a generic greeting such as 'Hello' or
'Hi there' in {communication_language}"). Mention the placeholder {user_name}
and {communication_language} so readers know to prefer the configured name and
otherwise use a generic, language-matched greeting.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@samples/bmad-agent-dream-weaver/SKILL.md`:
- Line 63: Update the prompt text that currently references
"{project-root}/_bmad/config.yaml and config.user.yaml" so the second filename
is fully qualified as "{project-root}/_bmad/config.user.yaml"; specifically
change the sentence that mentions loading config in SKILL.md (the line
containing "{project-root}/_bmad/config.yaml and config.user.yaml" and the
guidance for {communication_language} and {user_name}) to use the explicit full
path for config.user.yaml to avoid cwd-dependent resolution.
- Around line 81-87: The skill menu references three capability IDs that lack
corresponding markdown capability files — add capability prompt files named
dream-capture.md, lucid-coaching.md, and pattern-analysis.md (matching the IDs
used in the SKILL.md menu) containing the expected capability metadata and
prompts so the loader that opens {name}.md does not fail, or alternatively
remove/rename those IDs in the menu to match existing capability files; ensure
the filenames exactly match the IDs (dream-capture, lucid-coaching,
pattern-analysis) referenced by the menu.

In `@samples/bmad-excalidraw/SKILL.md`:
- Line 38: Update the fallback shown for `output_folder` in SKILL.md to match
the authoritative default used by the bmad-builder-setup skill: replace the
current `{project-root}/diagrams` fallback with `{project-root}/_bmad-output` so
all skills use the same output location (this aligns `output_folder` and avoids
the divergent `_bmad-output/diagrams/` vs `diagrams/diagrams/` behavior).

---

Nitpick comments:
In `@samples/bmad-excalidraw/SKILL.md`:
- Around line 36-40: The instruction "Greet user as {user_name}" is ambiguous
when {user_name} is omitted; update the SKILL.md text to explicitly state
fallback behavior (e.g., "Greet the user using {user_name} if available;
otherwise use a generic greeting such as 'Hello' or 'Hi there' in
{communication_language}"). Mention the placeholder {user_name} and
{communication_language} so readers know to prefer the configured name and
otherwise use a generic, language-matched greeting.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 474d6196-6ad1-4e94-ab81-a1e3d1f1ccc4

📥 Commits

Reviewing files that changed from the base of the PR and between 44bc861 and 332f807.

📒 Files selected for processing (21)
  • docs/explanation/what-are-bmad-agents.md
  • samples/bmad-agent-dream-weaver/SKILL.md
  • samples/bmad-agent-dream-weaver/dream-log.md
  • samples/bmad-agent-dream-weaver/dream-seed.md
  • samples/bmad-agent-dream-weaver/headless-wake.md
  • samples/bmad-agent-dream-weaver/init.md
  • samples/bmad-agent-dream-weaver/lucid-coach.md
  • samples/bmad-agent-dream-weaver/pattern-discovery.md
  • samples/bmad-agent-dream-weaver/recall-training.md
  • samples/bmad-agent-dream-weaver/references/memory-system.md
  • samples/bmad-excalidraw/SKILL.md
  • src/skills/bmad-agent-builder/assets/SKILL-template.md
  • src/skills/bmad-agent-builder/assets/autonomous-wake.md
  • src/skills/bmad-agent-builder/assets/init-template.md
  • src/skills/bmad-agent-builder/assets/memory-system.md
  • src/skills/bmad-agent-builder/build-process.md
  • src/skills/bmad-agent-builder/quality-scan-execution-efficiency.md
  • src/skills/bmad-agent-builder/references/standard-fields.md
  • src/skills/bmad-agent-builder/scripts/scan-path-standards.py
  • src/skills/bmad-workflow-builder/references/standard-fields.md
  • tools/validate-file-refs.mjs
✅ Files skipped from review due to trivial changes (10)
  • tools/validate-file-refs.mjs
  • src/skills/bmad-agent-builder/assets/memory-system.md
  • samples/bmad-agent-dream-weaver/recall-training.md
  • src/skills/bmad-agent-builder/assets/autonomous-wake.md
  • samples/bmad-agent-dream-weaver/lucid-coach.md
  • samples/bmad-agent-dream-weaver/pattern-discovery.md
  • src/skills/bmad-agent-builder/quality-scan-execution-efficiency.md
  • samples/bmad-agent-dream-weaver/references/memory-system.md
  • samples/bmad-agent-dream-weaver/dream-log.md
  • src/skills/bmad-agent-builder/assets/init-template.md
🚧 Files skipped from review as they are similar to previous changes (5)
  • samples/bmad-agent-dream-weaver/init.md
  • src/skills/bmad-agent-builder/build-process.md
  • src/skills/bmad-agent-builder/assets/SKILL-template.md
  • src/skills/bmad-workflow-builder/references/standard-fields.md
  • docs/explanation/what-are-bmad-agents.md

- `{project-root}/_bmad/_memory/dream-weaver-sidecar/access-boundaries.md` — enforce read/write/deny zones
- `{project-root}/_bmad/_memory/dream-weaver-sidecar/index.md` — essential context and previous session
- `bmad-manifest.json` — set `{capabilities}` list
- **Load config** from `{project-root}/_bmad/config.yaml` and `config.user.yaml`. Use `{communication_language}` for all communications. For `{user_name}`: check sidecar memory first, then config — if neither has it, ask the user what they'd like to be called and store it in sidecar memory for future sessions.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Use an explicit full path for config.user.yaml.

Line 63 leaves config.user.yaml unqualified; make it {project-root}/_bmad/config.user.yaml to avoid cwd-dependent resolution in prompt execution.

💡 Proposed fix
-  - **Load config** from `{project-root}/_bmad/config.yaml` and `config.user.yaml`. Use `{communication_language}` for all communications. For `{user_name}`: check sidecar memory first, then config — if neither has it, ask the user what they'd like to be called and store it in sidecar memory for future sessions.
+  - **Load config** from `{project-root}/_bmad/config.yaml` and `{project-root}/_bmad/config.user.yaml`. Use `{communication_language}` for all communications. For `{user_name}`: check sidecar memory first, then config — if neither has it, ask the user what they'd like to be called and store it in sidecar memory for future sessions.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **Load config** from `{project-root}/_bmad/config.yaml` and `config.user.yaml`. Use `{communication_language}` for all communications. For `{user_name}`: check sidecar memory first, then config — if neither has it, ask the user what they'd like to be called and store it in sidecar memory for future sessions.
- **Load config** from `{project-root}/_bmad/config.yaml` and `{project-root}/_bmad/config.user.yaml`. Use `{communication_language}` for all communications. For `{user_name}`: check sidecar memory first, then config — if neither has it, ask the user what they'd like to be called and store it in sidecar memory for future sessions.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@samples/bmad-agent-dream-weaver/SKILL.md` at line 63, Update the prompt text
that currently references "{project-root}/_bmad/config.yaml and
config.user.yaml" so the second filename is fully qualified as
"{project-root}/_bmad/config.user.yaml"; specifically change the sentence that
mentions loading config in SKILL.md (the line containing
"{project-root}/_bmad/config.yaml and config.user.yaml" and the guidance for
{communication_language} and {user_name}) to use the explicit full path for
config.user.yaml to avoid cwd-dependent resolution.

1. **Load config** from `{project-root}/_bmad/config.yaml` and `config.user.yaml`. If missing, continue with fallbacks:
- `{user_name}` — fallback: omit
- `{communication_language}` — fallback: match the user's language
- `{output_folder}` — fallback: `{project-root}/diagrams`
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Inconsistent output_folder default creates cross-skill confusion.

The fallback value {project-root}/diagrams conflicts with the authoritative default {project-root}/_bmad-output defined in the bmad-builder-setup skill. This inconsistency means:

  • Users who run setup will have diagrams saved to _bmad-output/diagrams/ (per line 23)
  • Users who skip setup will have diagrams saved to diagrams/diagrams/ (redundant path)
  • Different skills will use different output locations, causing confusion

The fallback should match the authoritative default to ensure consistent behavior across all skills.

📁 Proposed fix to align with authoritative default
-   - `{output_folder}` — fallback: `{project-root}/diagrams`
+   - `{output_folder}` — fallback: `{project-root}/_bmad-output`

As per coding guidelines, the bmad-builder-setup skill establishes the authoritative config contract with output_folder default of {project-root}/_bmad-output.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- `{output_folder}` — fallback: `{project-root}/diagrams`
- `{output_folder}` — fallback: `{project-root}/_bmad-output`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@samples/bmad-excalidraw/SKILL.md` at line 38, Update the fallback shown for
`output_folder` in SKILL.md to match the authoritative default used by the
bmad-builder-setup skill: replace the current `{project-root}/diagrams` fallback
with `{project-root}/_bmad-output` so all skills use the same output location
(this aligns `output_folder` and avoids the divergent `_bmad-output/diagrams/`
vs `diagrams/diagrams/` behavior).

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py (1)

221-264: ⚠️ Potential issue | 🟠 Major

Memory-path consistency check is now lossy and can miss legacy .memory references.

At Line 221, the regex captures from memory/ onward, so _bmad/.memory/... and _bmad/memory/... collapse to the same value. That makes the inconsistency logic at Line 243+ unable to detect mixed old/new formats during migration.

💡 Proposed fix
-    mem_pattern = re.compile(r'(?:memory/|sidecar/)[\w\-/]+(?:\.\w+)?')
+    # Preserve legacy vs new memory style so migration inconsistencies are detectable.
+    mem_pattern = re.compile(r'(?:_bmad/)?(?:\.?memory|sidecar)/[\w./-]+')
@@
-    prefixes = set()
-    for p in sorted_paths:
-        prefix = p.split('/')[0]
-        prefixes.add(prefix)
-
-    memory_prefixes = {p for p in prefixes if 'memory' in p.lower()}
+    memory_styles = set()
+    sidecar_prefixes = set()
+    for p in sorted_paths:
+        if re.search(r'(?:^|/)\.memory/', p):
+            memory_styles.add('.memory')
+        elif re.search(r'(?:^|/)memory/', p):
+            memory_styles.add('memory')
+        if re.search(r'(?:^|/)sidecar/', p):
+            sidecar_prefixes.add('sidecar')
@@
-    if len(memory_prefixes) > 1:
+    if len(memory_styles) > 1:
         findings.append({
             'file': 'multiple', 'line': 0,
             'severity': 'medium', 'category': 'memory-paths',
-            'issue': f'Inconsistent memory path prefixes: {", ".join(sorted(memory_prefixes))}',
+            'issue': f'Inconsistent memory path formats: {", ".join(sorted(memory_styles))}',
+        })
+
+    if '.memory' in memory_styles:
+        findings.append({
+            'file': 'multiple', 'line': 0,
+            'severity': 'medium', 'category': 'memory-paths',
+            'issue': 'Legacy ".memory/" path detected; migrate to "memory/"',
         })
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py`
around lines 221 - 264, The regex mem_pattern currently strips the leading dot
in legacy ".memory" names so _bmad/.memory/... and _bmad/memory/... collapse and
the inconsistency check (memory_prefixes/sidecar_prefixes over sorted_paths)
misses mixed formats; update mem_pattern to preserve and distinguish ".memory"
vs "memory" (i.e., match and capture the actual leading token including a
possible leading dot or preceding segment) or alter the prefix extraction logic
to consider the exact token (e.g., include the full first path component
including any leading '.'), so memory_paths, sorted_paths and the subsequent
memory_prefixes/sidecar_prefixes computation correctly detect old (.memory) vs
new (memory) formats.
♻️ Duplicate comments (1)
samples/bmad-agent-dream-weaver/SKILL.md (1)

63-63: ⚠️ Potential issue | 🟡 Minor

Use a fully qualified path for user config.

config.user.yaml is still unqualified here; use {project-root}/_bmad/config.user.yaml to avoid cwd-dependent resolution.

Proposed fix
-  - **Load config** from `{project-root}/_bmad/config.yaml` and `config.user.yaml`. Use `{communication_language}` for all communications. For `{user_name}`: check sidecar memory first, then config — if neither has it, ask the user what they'd like to be called and store it in sidecar memory for future sessions.
+  - **Load config** from `{project-root}/_bmad/config.yaml` and `{project-root}/_bmad/config.user.yaml`. Use `{communication_language}` for all communications. For `{user_name}`: check sidecar memory first, then config — if neither has it, ask the user what they'd like to be called and store it in sidecar memory for future sessions.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@samples/bmad-agent-dream-weaver/SKILL.md` at line 63, The documentation line
under "Load config" references an unqualified filename "config.user.yaml" which
can lead to cwd-dependent resolution; update that sentence to use the fully
qualified path "{project-root}/_bmad/config.user.yaml" (so it reads something
like "from {project-root}/_bmad/config.yaml and
{project-root}/_bmad/config.user.yaml") and ensure the phrase that follows
(about using {communication_language} and resolving {user_name} via sidecar
memory then config) still refers to the same qualified config path; modify the
"Load config" sentence in SKILL.md where "config.user.yaml" appears.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@samples/bmad-agent-dream-weaver/SKILL.md`:
- Around line 81-87: SKILL.md lists capability IDs dream-capture,
lucid-coaching, and pattern-analysis but the corresponding prompt files are
missing; create three new markdown files named dream-capture.md,
lucid-coaching.md, and pattern-analysis.md in the
samples/bmad-agent-dream-weaver/ directory, each containing the capability
prompt for the matching ID (title/header matching the ID, a short description of
the capability, input/output expectations, and example usage) so the skill
selector can load them when referenced by SKILL.md.

---

Outside diff comments:
In `@src/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py`:
- Around line 221-264: The regex mem_pattern currently strips the leading dot in
legacy ".memory" names so _bmad/.memory/... and _bmad/memory/... collapse and
the inconsistency check (memory_prefixes/sidecar_prefixes over sorted_paths)
misses mixed formats; update mem_pattern to preserve and distinguish ".memory"
vs "memory" (i.e., match and capture the actual leading token including a
possible leading dot or preceding segment) or alter the prefix extraction logic
to consider the exact token (e.g., include the full first path component
including any leading '.'), so memory_paths, sorted_paths and the subsequent
memory_prefixes/sidecar_prefixes computation correctly detect old (.memory) vs
new (memory) formats.

---

Duplicate comments:
In `@samples/bmad-agent-dream-weaver/SKILL.md`:
- Line 63: The documentation line under "Load config" references an unqualified
filename "config.user.yaml" which can lead to cwd-dependent resolution; update
that sentence to use the fully qualified path
"{project-root}/_bmad/config.user.yaml" (so it reads something like "from
{project-root}/_bmad/config.yaml and {project-root}/_bmad/config.user.yaml") and
ensure the phrase that follows (about using {communication_language} and
resolving {user_name} via sidecar memory then config) still refers to the same
qualified config path; modify the "Load config" sentence in SKILL.md where
"config.user.yaml" appears.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d9d00f89-16ad-4649-8261-703629c1d33c

📥 Commits

Reviewing files that changed from the base of the PR and between 332f807 and a0eaa5c.

📒 Files selected for processing (20)
  • docs/explanation/what-are-bmad-agents.md
  • samples/bmad-agent-dream-weaver/SKILL.md
  • samples/bmad-agent-dream-weaver/dream-log.md
  • samples/bmad-agent-dream-weaver/dream-seed.md
  • samples/bmad-agent-dream-weaver/headless-wake.md
  • samples/bmad-agent-dream-weaver/init.md
  • samples/bmad-agent-dream-weaver/lucid-coach.md
  • samples/bmad-agent-dream-weaver/pattern-discovery.md
  • samples/bmad-agent-dream-weaver/recall-training.md
  • samples/bmad-agent-dream-weaver/references/memory-system.md
  • src/skills/bmad-agent-builder/assets/SKILL-template.md
  • src/skills/bmad-agent-builder/assets/autonomous-wake.md
  • src/skills/bmad-agent-builder/assets/init-template.md
  • src/skills/bmad-agent-builder/assets/memory-system.md
  • src/skills/bmad-agent-builder/build-process.md
  • src/skills/bmad-agent-builder/quality-scan-execution-efficiency.md
  • src/skills/bmad-agent-builder/references/standard-fields.md
  • src/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py
  • src/skills/bmad-agent-builder/scripts/scan-path-standards.py
  • src/skills/bmad-workflow-builder/references/standard-fields.md
✅ Files skipped from review due to trivial changes (7)
  • src/skills/bmad-agent-builder/quality-scan-execution-efficiency.md
  • samples/bmad-agent-dream-weaver/init.md
  • src/skills/bmad-agent-builder/assets/memory-system.md
  • samples/bmad-agent-dream-weaver/recall-training.md
  • samples/bmad-agent-dream-weaver/pattern-discovery.md
  • src/skills/bmad-agent-builder/references/standard-fields.md
  • samples/bmad-agent-dream-weaver/headless-wake.md
🚧 Files skipped from review as they are similar to previous changes (10)
  • src/skills/bmad-agent-builder/assets/init-template.md
  • samples/bmad-agent-dream-weaver/dream-seed.md
  • src/skills/bmad-agent-builder/assets/autonomous-wake.md
  • samples/bmad-agent-dream-weaver/lucid-coach.md
  • src/skills/bmad-workflow-builder/references/standard-fields.md
  • src/skills/bmad-agent-builder/scripts/scan-path-standards.py
  • src/skills/bmad-agent-builder/build-process.md
  • docs/explanation/what-are-bmad-agents.md
  • samples/bmad-agent-dream-weaver/references/memory-system.md
  • src/skills/bmad-agent-builder/assets/SKILL-template.md

Comment on lines +81 to +87
1. [DC] - Capture and log a dream → dream-capture
2. [DI] - Interpret a dream's symbols and themes → dream-interpret
3. [RT] - Recall training exercises → recall-training
4. [LC] - Lucid dreaming coaching → lucid-coaching
5. [DS] - Plant dream seeds for tonight → dream-seed
6. [PA] - Pattern analysis across dreams → pattern-analysis
7. [SM] - Save memory → save-memory
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

skill_dir="samples/bmad-agent-dream-weaver"
skill_file="$skill_dir/SKILL.md"

python - <<'PY'
import re
from pathlib import Path

skill_file = Path("samples/bmad-agent-dream-weaver/SKILL.md")
base = skill_file.parent
text = skill_file.read_text(encoding="utf-8")

ids = re.findall(r'^\s*\d+\.\s+\[[A-Z]+\]\s+-\s+.*→\s+([a-z0-9-]+)\s*$', text, flags=re.MULTILINE)
print("Capability IDs found:", ids)

missing = []
for cid in ids:
    p = base / f"{cid}.md"
    ok = p.exists()
    print(f"{cid:20} -> {p} :: {'OK' if ok else 'MISSING'}")
    if not ok:
        missing.append(cid)

if missing:
    print("\nMissing prompt files:", ", ".join(missing))
    raise SystemExit(1)

print("\nAll capability IDs map to existing prompt files.")
PY

Repository: bmad-code-org/bmad-builder

Length of output: 856


🏁 Script executed:

#!/bin/bash
# Check lines 97-99 in SKILL.md for capability IDs
sed -n '97,99p' samples/bmad-agent-dream-weaver/SKILL.md | cat -n

Repository: bmad-code-org/bmad-builder

Length of output: 324


Add missing capability prompt files for dream-capture, lucid-coaching, and pattern-analysis.

The following capability IDs in lines 81-87 reference non-existent prompt files and will fail at selection time:

  • dream-capture.md — missing
  • lucid-coaching.md — missing
  • pattern-analysis.md — missing

Create these three markdown files in samples/bmad-agent-dream-weaver/ to match the capability IDs declared in SKILL.md.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@samples/bmad-agent-dream-weaver/SKILL.md` around lines 81 - 87, SKILL.md
lists capability IDs dream-capture, lucid-coaching, and pattern-analysis but the
corresponding prompt files are missing; create three new markdown files named
dream-capture.md, lucid-coaching.md, and pattern-analysis.md in the
samples/bmad-agent-dream-weaver/ directory, each containing the capability
prompt for the matching ID (title/header matching the ID, a short description of
the capability, input/output expectations, and example usage) so the skill
selector can load them when referenced by SKILL.md.

Rewrite both agent and workflow SKILL-templates to be minimal skeletons
rather than prescriptive blueprints. Templates now cover frontmatter,
overview, and activation with config loading — the builder crafts
everything else based on discovery phases.

Key changes:
- Config loading uses module/standalone pattern with sensible defaults
  and setup skill awareness (matching the builder's own activation)
- Standardize on "headless" terminology, remove "autonomous" mixing
- Headless reduced to one sentence instead of 25-line specification
- Remove rigid workflow steps/stages/menus from templates
- Update substitution rules, classification reference, and complex
  workflow patterns to match
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
tools/validate-doc-links.cjs (2)

311-323: Consider using fullMatch for more robust link replacement.

The applyFixes function reconstructs the link string from linkText and href, but fullMatch (already captured at line 269) would be more reliable if the original link has any formatting variance captured by the regex.

♻️ Proposed fix
 function applyFixes(content, issues) {
   let updated = content;

   for (const issue of issues) {
     if (issue.status === 'auto-fixable' && issue.suggestedFix) {
-      const oldLink = `[${issue.linkText}](${issue.href})`;
+      const oldLink = issue.fullMatch;
       const newLink = `[${issue.linkText}](${issue.suggestedFix})`;
       updated = updated.replace(oldLink, newLink);
     }
   }

   return updated;
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tools/validate-doc-links.cjs` around lines 311 - 323, The applyFixes function
should use the regex-captured original match (issue.fullMatch) when swapping
links instead of reconstructing the link from linkText and href; update
applyFixes to build newLink as `[${issue.linkText}](${issue.suggestedFix})` and
replace using issue.fullMatch if present (falling back to the constructed
oldLink) so formatting captured by the regex is preserved (refer to applyFixes
and the issue.fullMatch value captured earlier).

180-211: Cache getMarkdownFiles result to avoid repeated directory traversals.

getMarkdownFiles(DOCS_ROOT) is called inside findFileWithContext, which runs for every broken link. For repositories with many broken links, this causes redundant directory walks.

♻️ Proposed fix: memoize file list
+let cachedMarkdownFiles = null;
+
+/**
+ * Get all markdown files (cached after first call)
+ */
+function getAllMarkdownFiles() {
+  if (!cachedMarkdownFiles) {
+    cachedMarkdownFiles = getMarkdownFiles(DOCS_ROOT);
+  }
+  return cachedMarkdownFiles;
+}
+
 /**
  * Search for a file with directory context
  */
 function findFileWithContext(brokenPath) {
   // Extract filename and parent directory from the broken path
   // e.g., /tutorials/getting-started/foo/ -> parent: getting-started, file: foo.md
   const cleanPath = brokenPath.replace(/\/$/, '').replace(/^(\.\.\/|\.\/|\/)+/, '');
   const parts = cleanPath.split('/');
   const fileName = parts.at(-1) + '.md';
   const parentDir = parts.length > 1 ? parts.at(-2) : null;

-  const allFiles = getMarkdownFiles(DOCS_ROOT);
+  const allFiles = getAllMarkdownFiles();
   const matches = [];
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tools/validate-doc-links.cjs` around lines 180 - 211, The function
findFileWithContext repeatedly calls getMarkdownFiles(DOCS_ROOT) for every
broken link causing redundant directory traversals; cache or memoize that result
once (e.g., compute allFiles = getMarkdownFiles(DOCS_ROOT) outside the loop or
add a simple module-level/closure cache used by findFileWithContext) and then
iterate over the cached allFiles instead of calling getMarkdownFiles each time;
reference getMarkdownFiles, DOCS_ROOT, and findFileWithContext when making this
change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/quality.yaml:
- Around line 3-6: CI workflow removed the mandatory eslint and schema
validation jobs, so restore the missing jobs and steps named eslint and validate
(or their equivalent job IDs) in .github/workflows/quality.yaml to re-enable
ESLint checks and agent schema validation (validate:schemas, test:schemas,
validate:refs) in CI; ensure these jobs invoke the same npm scripts used locally
(e.g., npm run test, npm run test:schemas) and are configured to run on PRs so
CI gates merges when linting or YAML schema validation fail.

In `@src/skills/bmad-agent-builder/assets/SKILL-template.md`:
- Line 29: Update the sidecar memory path in SKILL-template.md to include the
project root prefix so it matches build-process.md: change the string "Memory
location: `_bmad/memory/{skillName}-sidecar/`" to use
"{project-root}/_bmad/memory/{skillName}-sidecar/" (ensure the exact token
`{project-root}` is prepended to the existing path in the SKILL-template.md
content so it aligns with the documented convention).

---

Nitpick comments:
In `@tools/validate-doc-links.cjs`:
- Around line 311-323: The applyFixes function should use the regex-captured
original match (issue.fullMatch) when swapping links instead of reconstructing
the link from linkText and href; update applyFixes to build newLink as
`[${issue.linkText}](${issue.suggestedFix})` and replace using issue.fullMatch
if present (falling back to the constructed oldLink) so formatting captured by
the regex is preserved (refer to applyFixes and the issue.fullMatch value
captured earlier).
- Around line 180-211: The function findFileWithContext repeatedly calls
getMarkdownFiles(DOCS_ROOT) for every broken link causing redundant directory
traversals; cache or memoize that result once (e.g., compute allFiles =
getMarkdownFiles(DOCS_ROOT) outside the loop or add a simple
module-level/closure cache used by findFileWithContext) and then iterate over
the cached allFiles instead of calling getMarkdownFiles each time; reference
getMarkdownFiles, DOCS_ROOT, and findFileWithContext when making this change.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 958a9f47-8600-4a9a-99a8-ea7bf02e7d02

📥 Commits

Reviewing files that changed from the base of the PR and between a0eaa5c and f2ca0d9.

📒 Files selected for processing (12)
  • .github/workflows/publish.yaml
  • .github/workflows/quality.yaml
  • .markdownlint-cli2.yaml
  • package.json
  • src/skills/bmad-agent-builder/assets/SKILL-template.md
  • src/skills/bmad-agent-builder/references/template-substitution-rules.md
  • src/skills/bmad-builder-setup/assets/module.yaml
  • src/skills/bmad-workflow-builder/assets/SKILL-template.md
  • src/skills/bmad-workflow-builder/references/classification-reference.md
  • src/skills/bmad-workflow-builder/references/complex-workflow-patterns.md
  • src/skills/bmad-workflow-builder/references/template-substitution-rules.md
  • tools/validate-doc-links.cjs
✅ Files skipped from review due to trivial changes (3)
  • .markdownlint-cli2.yaml
  • .github/workflows/publish.yaml
  • src/skills/bmad-builder-setup/assets/module.yaml
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/skills/bmad-workflow-builder/references/classification-reference.md
  • src/skills/bmad-agent-builder/references/template-substitution-rules.md
  • src/skills/bmad-workflow-builder/references/complex-workflow-patterns.md
  • src/skills/bmad-workflow-builder/references/template-substitution-rules.md

Comment on lines +3 to +6
# Runs quality checks on all PRs:
# - Prettier (formatting)
# - ESLint (linting)
# - markdownlint (markdown quality)
# - Schema validation (YAML structure)
# - Agent schema tests (fixture-based validation)
# - Installation component tests (compilation)
# - Bundle validation (web bundle integrity)
# - Documentation build
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the test script still includes the removed CI checks
grep -E '"test":|validate|lint' package.json | head -10

Repository: bmad-code-org/bmad-builder

Length of output: 674


Remove eslint and schema validation jobs from CI, violating mandatory enforcement requirements.

The eslint and validate jobs were removed from the CI workflow, eliminating CI-level enforcement of:

  • ESLint checks on JavaScript/YAML files
  • Agent schema validation (validate:schemas, test:schemas)
  • Cross-file reference validation (validate:refs)

While npm run test still includes these checks locally, CI no longer gates PRs on them. This violates documented requirements: "ESLint and Prettier must pass on all JavaScript/Node.js build tools" and "All agent YAML files must be validated against the defined schema using npm run test:schemas before committing." Checks should remain enforced in CI to prevent regressions if developers skip local verification.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/quality.yaml around lines 3 - 6, CI workflow removed the
mandatory eslint and schema validation jobs, so restore the missing jobs and
steps named eslint and validate (or their equivalent job IDs) in
.github/workflows/quality.yaml to re-enable ESLint checks and agent schema
validation (validate:schemas, test:schemas, validate:refs) in CI; ensure these
jobs invoke the same npm scripts used locally (e.g., npm run test, npm run
test:schemas) and are configured to run on PRs so CI gates merges when linting
or YAML schema validation fail.

Comment thread src/skills/bmad-agent-builder/assets/SKILL-template.md Outdated
Frontmatter:
- Only name and description allowed in YAML frontmatter
- Removed argument-hint and all non-frontmatter fields (displayName, skillName, etc.)
- Split standard-fields.md into Frontmatter Fields vs Content Fields sections
- Lint script now validates frontmatter keys and flags invalid ones

Skill-internal paths:
- All skill-internal references now require ./ prefix (./references/, ./scripts/, ./assets/)
- Distinguishes skill-internal files from {project-root} paths to prevent LLM confusion
- Lint script updated: ./ is now required (was previously flagged as violation)
- Added bare-internal-path check for references/, scripts/, assets/ without ./

Progressive disclosure structure:
- All prompt files must live in ./references/, not at skill root
- SKILL.md is the only .md file at root — it serves as identity and router
- Capability sections replaced with succinct routing tables
- Removed CLI Usage section — user-facing help belongs in Overview
- Lint script now flags .md files at skill root (except SKILL.md)

Config resolution restored:
- Both builder SKILL.md files now list config keys with actual defaults
- user_name, communication_language, document_output_language, output paths
- Fixed anti-pattern in skill-best-practices: distinguishes mechanic (bad) from outcome-intent with defaults (good)

Activation flow:
- Single activation flow regardless of interactive/headless mode
- Sidecar index.md is the single entry point to memory system
- Interactive activation offers capability menu or continues from memory context
- SKILL template updated with config resolution, routing table, and memory patterns

Lint gate auto-fix:
- Build process now delegates lint to subagent if available
- Fix-and-rerun loop with max 3 attempts per script
- Lint scripts bumped to v2.0.0 with frontmatter, structure, and path checks

Also includes quality scanner and asset template refinements across both builders.
@bmadcode bmadcode merged commit 50eb6ac into main Mar 22, 2026
3 of 4 checks passed
@bmadcode bmadcode deleted the module-tools branch March 22, 2026 00:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant