* refactor: convert create-story workflow.yaml to workflow.md (step 7)
Merge workflow.yaml config and instructions.xml execution logic into a
single self-contained workflow.md. Drop engine scaffolding directives,
preserve all behavioral constraints. Update checklist.md references.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: update remaining workflow.yaml refs to workflow.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
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>
* chore(sprint-planning): convert workflow.yaml + instructions.md to unified workflow.md
Step 4 of 9 in the yaml-to-md conversion plan. Merges config
and instructions into a single self-contained workflow.md,
dropping engine scaffolding (critical tags, invoke-protocol).
* fix(sprint-planning): address review findings from PR triage
- Update stale workflow.yaml references to workflow.md in sm.agent.yaml and module-help.csv
- Widen epics_pattern from epic*.md to *epic*.md to match documented input files
- Fix placeholder mismatch: epics_in_progress_count → in_progress_count
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* refactor(sprint-status): convert workflow.yaml + instructions.md to single workflow.md
Merge workflow config and instruction content into a unified workflow.md
with YAML frontmatter, following the established convention for converted
workflows. Update module-help.csv reference accordingly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(sprint-status): restore no-time-estimates rule dropped during conversion
The <critical> preamble removal incorrectly classified this behavioral
rule as boilerplate. It is an actual output constraint.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* test: add comprehensive workflow conversion test results
- 14 test fixtures covering data and validate modes
- Tested across Opus, Sonnet, and Haiku models
- OLD format (yaml+md) vs NEW format (workflow.md)
- Confirms zero regressions in conversion
- Includes reproduction instructions for future sessions
* fix(sprint-status): consolidate no-time-estimates into role line
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor(qa-generate-e2e-tests): convert workflow.yaml + instructions.md to single workflow.md
Task 2 of yaml-to-md conversion plan. Merges config variables into
INITIALIZATION section, inlines instructions into EXECUTION section.
Drops non-consumed yaml keys (required_tools, tags, execution_hints).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor(retrospective): convert workflow.yaml + instructions.md to single workflow.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: update workflow.yaml references to workflow.md for converted workflows
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove test results file from version control
SPRINT_STATUS_CONVERSION_TEST_RESULTS.md contains hardcoded local
filesystem paths and is a session-specific test artifact. Added to
.bare/info/exclude to keep it ignored across all worktrees.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
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>