Move validate-prd from a workflow entry in create-prd manifest to a
self-contained skill at src/bmm/workflows/2-plan-workflows/bmad-validate-prd/.
Update pm.agent.yaml and module-help.csv to use skill: URI.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move the create-prd workflow into src/core/tasks/bmad-create-prd/ as a
self-contained native skill with SKILL.md, workflow.md, steps-c/, data/,
and templates/. Update all internal path references from absolute
{project-root}/_bmad/... to relative paths. Mark the source
workflow-create-prd.md as standalone:false to prevent duplicate manifest
entries. Update pm.agent.yaml and module-help.csv to use skill:bmad-create-prd.
Move edit-prd workflow and steps-e/ out of the shared create-prd directory
into its own bmad-edit-prd skill directory with SKILL.md, workflow.md, and
bmad-skill-manifest.yaml. Update pm.agent.yaml and module-help.csv to use
skill:bmad-edit-prd. Fix validationWorkflow path in step-e-04 to use
absolute {project-root} reference since relative path breaks after move.
* chore: convert correct-course workflow to native skill
* fix(skill): patch correct-course native skill metadata
* fix(skill): inline hardcoded path variables in correct-course
Remove installed_path, checklist, and project_context variables that
just indirected single-use hardcoded paths. Use bare values inline.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(skills): convert create-epics-and-stories workflow to native skill
* fix(skills): normalize create-epics-and-stories metadata
* fix: remove workflow_path indirection, use direct relative paths
Replace the custom workflow_path variable with direct relative paths
(../workflow.md, ../templates/epics-template.md) in all step files.
Also remove duplicate epicsTemplate entry in step-01.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: remove unused frontmatter refs from step files
Drop thisStepFile, workflowFile, and epicsTemplate (where unused in
body) from all step frontmatter. Only keep variables actually
referenced in step body content.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: convert partyModeWorkflow to skill ref, drop unused task refs
- partyModeWorkflow now uses skill:bmad-party-mode (it is a skill)
- remove advancedElicitationTask and partyModeWorkflow from steps 1/4
where they are not referenced in the body
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: inline all frontmatter refs, use canonical skill invocation
- Remove all file/task reference variables from step frontmatter
- Inline paths directly where used in body text
- Use canonical "invoke the skill" phrasing for skill references
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(augment): remove legacy YAML/XML workflow rules from code review guidelines
All workflows have been converted to markdown. Remove workflow.yaml,
workflow.xml, and config_source references from Augment review rules.
Drop the entire xml_workflows section (5 rules) and the YAML-specific
standard_workflow_instructions rule.
* refactor: extract discover_inputs protocol from workflow.xml into co-located markdown
Convert the discover_inputs XML protocol (FULL_LOAD, SELECTIVE_LOAD,
INDEX_GUIDED strategies) into standalone markdown files placed alongside
the two workflows that use it (create-story, code-review). Replace
<invoke-protocol> tags with explicit file references. This decouples
the workflows from workflow.xml, enabling its deletion in a follow-up.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: delete dead YAML/XML workflow engine files
Remove 5 files made obsolete by the workflow.yaml → workflow.md migration:
- workflow.xml (the YAML workflow interpreter engine)
- dev-story/instructions.xml (superseded by workflow.md)
- 3 installer templates for YAML workflow command generation
References in CLI code will be cleaned up in follow-up commits.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: delete obsolete workflow handler fragments
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: remove YAML workflow code paths from CLI installer pipeline
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: remove workflow.xml references from manifests and checklists
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: remove workflow.xml references from English command docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* test: update fixtures to remove workflow.yaml references
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: update workflow.yaml example path to workflow.md in handler-multi
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: stop tracking workflow/validate-workflow as handler attributes
These handler fragments were deleted — the exec handler already covers
loading .md workflow files directly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: rename workflow attribute to exec in agent menu items
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address PR review findings from triage
- Fix regex capture group index in module manager workflow path parsing
- Remove stale workflow handler references from handler-multi.txt
- Replace workflow with multi in activation-steps dispatch contract
- Remove dead validate-workflow emission from compiler and xml-builder
- Align commands.md wording to remove engine references
- Fix relativePath anchoring in _base-ide.js recursive directory scans
- Remove dead code from workflow-command-generator (unused template,
generateCommandContent, writeColonArtifacts, writeDashArtifacts)
- Delete unused workflow-commander.md template
- Add regression test for workflow path regex
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Step 5 of 9 in yaml-to-md conversion plan. Merges workflow.yaml config
(6 input_file_patterns including INDEX_GUIDED) and instructions.md
execution logic into a single self-contained workflow.md. Updates
references in sm.agent.yaml, pm.agent.yaml, module-help.csv, and
checklist.md. Deletes workflow.yaml and instructions.md.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add custom GitHub Copilot installer handler
Adds a dedicated GitHub Copilot handler that generates:
- Agent files with .agent.md extension and enriched descriptions
- Prompt files (.prompt.md) for workflows, tasks, and agent activators
- copilot-instructions.md with project config and agent reference table
Replaces the generic config-driven handler with a custom one that
properly supports Copilot's agent/prompt file conventions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: escape YAML descriptions and preserve user copilot-instructions
- Escape single quotes in YAML frontmatter descriptions across all prompt
generators (createWorkflowPromptContent, createTechWriterPromptContent,
createAgentActivatorPromptContent) to match createAgentContent behavior
- Make copilot-instructions.md non-destructive using BMAD markers
(<!-- BMAD:START --> / <!-- BMAD:END -->) to preserve user content
- On cleanup, only remove content between markers; skip files without markers
- Back up existing unmarked files before overwriting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: add error handling for CSV read/parse in loadAgentManifest and loadBmadHelp
Wrap file read and csv.parse in try/catch blocks so malformed or
unreadable CSV files gracefully degrade instead of aborting setup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: use specific detection paths instead of .github configDir
Set configDir to null and use detectionPaths with
.github/copilot-instructions.md and .github/agents/ so the base
detect() doesn't false-positive on every GitHub repo.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: add comments explaining hardcoded bmm/config.yaml in prompts
Clarify that bmm/config.yaml is safe to hardcode in generated prompt
content because these prompts are only created when bmm module data
(bmad-help.csv, agent artifacts) exists.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: guard against missing workflow-file in bmad-help.csv entries
Skip entries where workflow-file is empty/undefined to prevent
workflowFile.endsWith() from throwing during prompt generation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: guard escapeYamlSingleQuote against undefined input
Default to empty string when value is undefined/null to prevent
replaceAll from throwing on missing CSV fields.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: preserve customised tool permissions across reinstalls
Before this change, reinstalling would overwrite any user-customised
tools arrays in agent and prompt frontmatter with the hardcoded default.
Now the installer reads existing tool permissions from .agent.md and
.prompt.md files before cleanup, and re-applies them to the regenerated
files. Falls back to the default ['read', 'edit', 'search', 'execute']
for new files or files without prior customisation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: prevent cleanup from stripping copilot-instructions.md markers before generation
The cleanup() method was removing the BMAD marker section from
copilot-instructions.md, leaving user content without markers.
generateCopilotInstructions() then treated the markerless file as
legacy, backed it up, and overwrote user content.
Fix: remove the copilot-instructions.md block from cleanup() entirely.
generateCopilotInstructions() already handles marker-based replacement
in a single read-modify-write pass that correctly preserves user content.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: update manager.js comments to include github-copilot.js
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: make agent capabilities data-driven via agent YAML metadata
Replace the hardcoded getAgentCapabilities() map with a data-driven
pipeline. Capabilities are now defined in each .agent.yaml source file,
compiled into the XML output, extracted into agent-manifest.csv by the
manifest generator, and read by the GitHub Copilot handler at install
time. New agents automatically get their capabilities without code
changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: use this.bmadFolderName instead of hardcoded _bmad in template paths
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>