@hyperdrive.bot/bmad-workflow 1.0.21 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agents/dev-barry.md +69 -0
- package/assets/agents/dev.md +323 -0
- package/assets/agents/qa.md +92 -0
- package/assets/agents/sm-bob.md +65 -0
- package/assets/agents/sm.md +296 -0
- package/assets/config/default-config.yaml +6 -0
- package/assets/templates/epic-tmpl.yaml +277 -0
- package/assets/templates/prd-tmpl.yaml +261 -0
- package/assets/templates/qa-gate-tmpl.yaml +103 -0
- package/assets/templates/story-tmpl.yaml +138 -0
- package/dist/commands/eject.d.ts +76 -0
- package/dist/commands/eject.js +232 -0
- package/dist/commands/init.d.ts +47 -0
- package/dist/commands/init.js +265 -0
- package/dist/commands/stories/develop.js +1 -0
- package/dist/commands/stories/qa.d.ts +1 -0
- package/dist/commands/stories/qa.js +7 -0
- package/dist/commands/workflow.d.ts +6 -3
- package/dist/commands/workflow.js +106 -26
- package/dist/models/bmad-config-schema.d.ts +51 -0
- package/dist/models/bmad-config-schema.js +53 -0
- package/dist/services/agents/gemini-agent-runner.js +7 -2
- package/dist/services/agents/opencode-agent-runner.js +7 -2
- package/dist/services/file-system/asset-resolver.d.ts +117 -0
- package/dist/services/file-system/asset-resolver.js +234 -0
- package/dist/services/file-system/file-manager.d.ts +13 -0
- package/dist/services/file-system/file-manager.js +32 -0
- package/dist/services/file-system/path-resolver.d.ts +22 -1
- package/dist/services/file-system/path-resolver.js +36 -9
- package/dist/services/orchestration/dependency-graph-executor.js +1 -0
- package/dist/services/orchestration/workflow-orchestrator.d.ts +11 -0
- package/dist/services/orchestration/workflow-orchestrator.js +79 -10
- package/dist/utils/config-merge.d.ts +60 -0
- package/dist/utils/config-merge.js +52 -0
- package/package.json +4 -2
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# <!-- Powered by BMAD™ Core -->
|
|
2
|
+
template:
|
|
3
|
+
id: prd-template-v2
|
|
4
|
+
name: Product Requirements Document
|
|
5
|
+
version: 2.1
|
|
6
|
+
output:
|
|
7
|
+
format: markdown
|
|
8
|
+
filename: docs/prd.md
|
|
9
|
+
title: "{{project_name}} Product Requirements Document (PRD)"
|
|
10
|
+
|
|
11
|
+
workflow:
|
|
12
|
+
mode: interactive
|
|
13
|
+
elicitation: advanced-elicitation
|
|
14
|
+
|
|
15
|
+
# Excalidraw diagram resources (shared across visual sections)
|
|
16
|
+
excalidraw:
|
|
17
|
+
shared_path: "{project-root}/_bmad/bmm/workflows/excalidraw-diagrams/_shared"
|
|
18
|
+
helpers: "{project-root}/_bmad/core/resources/excalidraw/excalidraw-helpers.md"
|
|
19
|
+
templates: "{project-root}/_bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml"
|
|
20
|
+
library: "{project-root}/_bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json"
|
|
21
|
+
workflows:
|
|
22
|
+
diagram: "{project-root}/_bmad/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml"
|
|
23
|
+
wireframe: "{project-root}/_bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml"
|
|
24
|
+
dataflow: "{project-root}/_bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml"
|
|
25
|
+
|
|
26
|
+
sections:
|
|
27
|
+
- id: goals-context
|
|
28
|
+
title: Goals and Background Context
|
|
29
|
+
instruction: |
|
|
30
|
+
Ask if Project Brief document is available. If NO Project Brief exists, STRONGLY recommend creating one first using project-brief-tmpl (it provides essential foundation: problem statement, target users, success metrics, MVP scope, constraints). If user insists on PRD without brief, gather this information during Goals section. If Project Brief exists, review and use it to populate Goals (bullet list of desired outcomes) and Background Context (1-2 paragraphs on what this solves and why) so we can determine what is and is not in scope for PRD mvp. Either way this is critical to determine the requirements. Include Change Log table.
|
|
31
|
+
sections:
|
|
32
|
+
- id: goals
|
|
33
|
+
title: Goals
|
|
34
|
+
type: bullet-list
|
|
35
|
+
instruction: Bullet list of 1 line desired outcomes the PRD will deliver if successful - user and project desires
|
|
36
|
+
- id: background
|
|
37
|
+
title: Background Context
|
|
38
|
+
type: paragraphs
|
|
39
|
+
instruction: 1-2 short paragraphs summarizing the background context, such as what we learned in the brief without being redundant with the goals, what and why this solves a problem, what the current landscape or need is
|
|
40
|
+
- id: changelog
|
|
41
|
+
title: Change Log
|
|
42
|
+
type: table
|
|
43
|
+
columns: [Date, Version, Description, Author]
|
|
44
|
+
instruction: Track document versions and changes
|
|
45
|
+
|
|
46
|
+
- id: requirements
|
|
47
|
+
title: Requirements
|
|
48
|
+
instruction: Draft the list of functional and non functional requirements under the two child sections
|
|
49
|
+
elicit: true
|
|
50
|
+
sections:
|
|
51
|
+
- id: functional
|
|
52
|
+
title: Functional
|
|
53
|
+
type: numbered-list
|
|
54
|
+
prefix: FR
|
|
55
|
+
instruction: Each Requirement will be a bullet markdown and an identifier sequence starting with FR
|
|
56
|
+
examples:
|
|
57
|
+
- "FR6: The Todo List uses AI to detect and warn against potentially duplicate todo items that are worded differently."
|
|
58
|
+
- id: non-functional
|
|
59
|
+
title: Non Functional
|
|
60
|
+
type: numbered-list
|
|
61
|
+
prefix: NFR
|
|
62
|
+
instruction: Each Requirement will be a bullet markdown and an identifier sequence starting with NFR
|
|
63
|
+
examples:
|
|
64
|
+
- "NFR1: AWS service usage must aim to stay within free-tier limits where feasible."
|
|
65
|
+
|
|
66
|
+
- id: ui-goals
|
|
67
|
+
title: User Interface Design Goals
|
|
68
|
+
condition: PRD has UX/UI requirements
|
|
69
|
+
instruction: |
|
|
70
|
+
Capture high-level UI/UX vision to guide Design Architect and to inform story creation. Steps:
|
|
71
|
+
|
|
72
|
+
1. Pre-fill all subsections with educated guesses based on project context
|
|
73
|
+
2. Present the complete rendered section to user
|
|
74
|
+
3. Clearly let the user know where assumptions were made
|
|
75
|
+
4. Ask targeted questions for unclear/missing elements or areas needing more specification
|
|
76
|
+
5. This is NOT detailed UI spec - focus on product vision and user goals
|
|
77
|
+
elicit: true
|
|
78
|
+
choices:
|
|
79
|
+
accessibility: [None, WCAG AA, WCAG AAA]
|
|
80
|
+
platforms: [Web Responsive, Mobile Only, Desktop Only, Cross-Platform]
|
|
81
|
+
sections:
|
|
82
|
+
- id: ux-vision
|
|
83
|
+
title: Overall UX Vision
|
|
84
|
+
- id: interaction-paradigms
|
|
85
|
+
title: Key Interaction Paradigms
|
|
86
|
+
- id: core-screens
|
|
87
|
+
title: Core Screens and Views
|
|
88
|
+
instruction: From a product perspective, what are the most critical screens or views necessary to deliver the the PRD values and goals? This is meant to be Conceptual High Level to Drive Rough Epic or User Stories
|
|
89
|
+
examples:
|
|
90
|
+
- "Login Screen"
|
|
91
|
+
- "Main Dashboard"
|
|
92
|
+
- "Item Detail Page"
|
|
93
|
+
- "Settings Page"
|
|
94
|
+
sections:
|
|
95
|
+
- id: wireframes
|
|
96
|
+
title: Core Screen Wireframes
|
|
97
|
+
condition: Core screens list approved by user
|
|
98
|
+
instruction: |
|
|
99
|
+
After the core screens list is approved, offer to generate low-fidelity wireframes using the Excalidraw wireframe workflow. Steps:
|
|
100
|
+
|
|
101
|
+
1. Ask: "Would you like me to generate low-fi wireframes for the core screens? These help the UX Designer and Architect visualize layout intent."
|
|
102
|
+
2. If yes, check if a theme.json already exists from a prior diagram in this PRD session — reuse it for visual consistency
|
|
103
|
+
3. Invoke the create-wireframe workflow for each core screen (or a combined multi-screen wireframe)
|
|
104
|
+
4. Save to {{output_folder}}/excalidraw-diagrams/prd-wireframes-{timestamp}.excalidraw
|
|
105
|
+
5. Reference the wireframe file path in this section of the PRD output
|
|
106
|
+
6. If no, skip — this is optional and should not block PRD progress
|
|
107
|
+
elicit: true
|
|
108
|
+
workflow_ref: "{{excalidraw.workflows.wireframe}}"
|
|
109
|
+
- id: accessibility
|
|
110
|
+
title: "Accessibility: {None|WCAG AA|WCAG AAA|Custom Requirements}"
|
|
111
|
+
- id: branding
|
|
112
|
+
title: Branding
|
|
113
|
+
instruction: Any known branding elements or style guides that must be incorporated?
|
|
114
|
+
examples:
|
|
115
|
+
- "Replicate the look and feel of early 1900s black and white cinema, including animated effects replicating film damage or projector glitches during page or state transitions."
|
|
116
|
+
- "Attached is the full color pallet and tokens for our corporate branding."
|
|
117
|
+
- id: target-platforms
|
|
118
|
+
title: "Target Device and Platforms: {Web Responsive|Mobile Only|Desktop Only|Cross-Platform}"
|
|
119
|
+
examples:
|
|
120
|
+
- "Web Responsive, and all mobile platforms"
|
|
121
|
+
- "iPhone Only"
|
|
122
|
+
- "ASCII Windows Desktop"
|
|
123
|
+
|
|
124
|
+
- id: technical-assumptions
|
|
125
|
+
title: Technical Assumptions
|
|
126
|
+
instruction: |
|
|
127
|
+
Gather technical decisions that will guide the Architect. Steps:
|
|
128
|
+
|
|
129
|
+
1. Check if .bmad-core/data/technical-preferences.yaml or an attached technical-preferences file exists - use it to pre-populate choices
|
|
130
|
+
2. Ask user about: languages, frameworks, starter templates, libraries, APIs, deployment targets
|
|
131
|
+
3. For unknowns, offer guidance based on project goals and MVP scope
|
|
132
|
+
4. Document ALL technical choices with rationale (why this choice fits the project)
|
|
133
|
+
5. These become constraints for the Architect - be specific and complete
|
|
134
|
+
elicit: true
|
|
135
|
+
choices:
|
|
136
|
+
repository: [Monorepo, Polyrepo]
|
|
137
|
+
architecture: [Monolith, Microservices, Serverless]
|
|
138
|
+
testing: [Unit Only, Unit + Integration, Full Testing Pyramid]
|
|
139
|
+
sections:
|
|
140
|
+
- id: repository-structure
|
|
141
|
+
title: "Repository Structure: {Monorepo|Polyrepo|Multi-repo}"
|
|
142
|
+
- id: service-architecture
|
|
143
|
+
title: Service Architecture
|
|
144
|
+
instruction: "CRITICAL DECISION - Document the high-level service architecture (e.g., Monolith, Microservices, Serverless functions within a Monorepo)."
|
|
145
|
+
- id: testing-requirements
|
|
146
|
+
title: Testing Requirements
|
|
147
|
+
instruction: "CRITICAL DECISION - Document the testing requirements, unit only, integration, e2e, manual, need for manual testing convenience methods)."
|
|
148
|
+
- id: additional-assumptions
|
|
149
|
+
title: Additional Technical Assumptions and Requests
|
|
150
|
+
instruction: Throughout the entire process of drafting this document, if any other technical assumptions are raised or discovered appropriate for the architect, add them here as additional bulleted items
|
|
151
|
+
|
|
152
|
+
- id: architecture-diagram
|
|
153
|
+
title: Architecture Overview Diagram
|
|
154
|
+
condition: Technical Assumptions section completed
|
|
155
|
+
instruction: |
|
|
156
|
+
After Technical Assumptions are finalized, offer to generate a system architecture diagram using the Excalidraw diagram workflow. This visual becomes the primary reference for the Architect and development team. Steps:
|
|
157
|
+
|
|
158
|
+
1. Ask: "Would you like me to generate a system architecture diagram? It captures service boundaries, databases, and integrations visually — the Architect reads this FIRST."
|
|
159
|
+
2. If yes, extract components from Technical Assumptions: services, databases, external APIs, deployment targets
|
|
160
|
+
3. Check if a theme.json exists from a prior diagram in this PRD session — reuse for consistency
|
|
161
|
+
4. Invoke the create-diagram workflow with extracted components and relationships
|
|
162
|
+
5. Save to {{output_folder}}/excalidraw-diagrams/prd-architecture-{timestamp}.excalidraw
|
|
163
|
+
6. Reference the diagram file path in this section of the PRD output
|
|
164
|
+
7. If no, skip — but note this is highly recommended for multi-service or distributed architectures
|
|
165
|
+
elicit: true
|
|
166
|
+
workflow_ref: "{{excalidraw.workflows.diagram}}"
|
|
167
|
+
|
|
168
|
+
- id: data-flow-diagram
|
|
169
|
+
title: Data Flow Diagram
|
|
170
|
+
condition: Requirements section completed AND system involves multiple data sources or API integrations
|
|
171
|
+
instruction: |
|
|
172
|
+
For systems with multiple data sources, API integrations, or complex data pipelines, offer to generate a data flow diagram. Steps:
|
|
173
|
+
|
|
174
|
+
1. Ask: "Your requirements mention multiple data sources/integrations. Would you like a data flow diagram showing how data moves through the system?"
|
|
175
|
+
2. If yes, extract data entities, processes, data stores, and external systems from Requirements and Technical Assumptions
|
|
176
|
+
3. Reuse existing theme.json if available from prior diagrams in this PRD session
|
|
177
|
+
4. Invoke the create-dataflow workflow
|
|
178
|
+
5. Save to {{output_folder}}/excalidraw-diagrams/prd-dataflow-{timestamp}.excalidraw
|
|
179
|
+
6. Reference the diagram file path in this section of the PRD output
|
|
180
|
+
7. If no or condition not met, skip entirely — this is optional
|
|
181
|
+
elicit: true
|
|
182
|
+
workflow_ref: "{{excalidraw.workflows.dataflow}}"
|
|
183
|
+
|
|
184
|
+
- id: epic-list
|
|
185
|
+
title: Epic List
|
|
186
|
+
instruction: |
|
|
187
|
+
Present a high-level list of all epics for user approval. Each epic should have a title and a short (1 sentence) goal statement. This allows the user to review the overall structure before diving into details.
|
|
188
|
+
|
|
189
|
+
CRITICAL: Epics MUST be logically sequential following agile best practices:
|
|
190
|
+
|
|
191
|
+
- Each epic should deliver a significant, end-to-end, fully deployable increment of testable functionality
|
|
192
|
+
- Epic 1 must establish foundational project infrastructure (app setup, Git, CI/CD, core services) unless we are adding new functionality to an existing app, while also delivering an initial piece of functionality, even as simple as a health-check route or display of a simple canary page - remember this when we produce the stories for the first epic!
|
|
193
|
+
- Each subsequent epic builds upon previous epics' functionality delivering major blocks of functionality that provide tangible value to users or business when deployed
|
|
194
|
+
- Not every project needs multiple epics, an epic needs to deliver value. For example, an API completed can deliver value even if a UI is not complete and planned for a separate epic.
|
|
195
|
+
- Err on the side of less epics, but let the user know your rationale and offer options for splitting them if it seems some are too large or focused on disparate things.
|
|
196
|
+
- Cross Cutting Concerns should flow through epics and stories and not be final stories. For example, adding a logging framework as a last story of an epic, or at the end of a project as a final epic or story would be terrible as we would not have logging from the beginning.
|
|
197
|
+
elicit: true
|
|
198
|
+
examples:
|
|
199
|
+
- "Epic 1: Foundation & Core Infrastructure: Establish project setup, authentication, and basic user management"
|
|
200
|
+
- "Epic 2: Core Business Entities: Create and manage primary domain objects with CRUD operations"
|
|
201
|
+
- "Epic 3: User Workflows & Interactions: Enable key user journeys and business processes"
|
|
202
|
+
- "Epic 4: Reporting & Analytics: Provide insights and data visualization for users"
|
|
203
|
+
|
|
204
|
+
- id: epic-details
|
|
205
|
+
title: Epic {{epic_number}} {{epic_title}}
|
|
206
|
+
repeatable: true
|
|
207
|
+
instruction: |
|
|
208
|
+
After the epic list is approved, present each epic with all its stories and acceptance criteria as a complete review unit.
|
|
209
|
+
|
|
210
|
+
For each epic provide expanded goal (2-3 sentences describing the objective and value all the stories will achieve).
|
|
211
|
+
|
|
212
|
+
CRITICAL STORY SEQUENCING REQUIREMENTS:
|
|
213
|
+
|
|
214
|
+
- Stories within each epic MUST be logically sequential
|
|
215
|
+
- Each story should be a "vertical slice" delivering complete functionality aside from early enabler stories for project foundation
|
|
216
|
+
- No story should depend on work from a later story or epic
|
|
217
|
+
- Identify and note any direct prerequisite stories
|
|
218
|
+
- Focus on "what" and "why" not "how" (leave technical implementation to Architect) yet be precise enough to support a logical sequential order of operations from story to story.
|
|
219
|
+
- Ensure each story delivers clear user or business value, try to avoid enablers and build them into stories that deliver value.
|
|
220
|
+
- Size stories for AI agent execution: Each story must be completable by a single AI agent in one focused session without context overflow
|
|
221
|
+
- Think "junior developer working for 2-4 hours" - stories must be small, focused, and self-contained
|
|
222
|
+
- If a story seems complex, break it down further as long as it can deliver a vertical slice
|
|
223
|
+
elicit: true
|
|
224
|
+
template: "{{epic_goal}}"
|
|
225
|
+
sections:
|
|
226
|
+
- id: story
|
|
227
|
+
title: Story {{epic_number}}.{{story_number}} {{story_title}}
|
|
228
|
+
repeatable: true
|
|
229
|
+
template: |
|
|
230
|
+
As a {{user_type}},
|
|
231
|
+
I want {{action}},
|
|
232
|
+
so that {{benefit}}.
|
|
233
|
+
sections:
|
|
234
|
+
- id: acceptance-criteria
|
|
235
|
+
title: Acceptance Criteria
|
|
236
|
+
type: numbered-list
|
|
237
|
+
item_template: "{{criterion_number}}: {{criteria}}"
|
|
238
|
+
repeatable: true
|
|
239
|
+
instruction: |
|
|
240
|
+
Define clear, comprehensive, and testable acceptance criteria that:
|
|
241
|
+
|
|
242
|
+
- Precisely define what "done" means from a functional perspective
|
|
243
|
+
- Are unambiguous and serve as basis for verification
|
|
244
|
+
- Include any critical non-functional requirements from the PRD
|
|
245
|
+
- Consider local testability for backend/data components
|
|
246
|
+
- Specify UI/UX requirements and framework adherence where applicable
|
|
247
|
+
- Avoid cross-cutting concerns that should be in other stories or PRD sections
|
|
248
|
+
|
|
249
|
+
- id: checklist-results
|
|
250
|
+
title: Checklist Results Report
|
|
251
|
+
instruction: Before running the checklist and drafting the prompts, offer to output the full updated PRD. If outputting it, confirm with the user that you will be proceeding to run the checklist and produce the report. Once the user confirms, execute the pm-checklist and populate the results in this section.
|
|
252
|
+
|
|
253
|
+
- id: next-steps
|
|
254
|
+
title: Next Steps
|
|
255
|
+
sections:
|
|
256
|
+
- id: ux-expert-prompt
|
|
257
|
+
title: UX Expert Prompt
|
|
258
|
+
instruction: This section will contain the prompt for the UX Expert, keep it short and to the point to initiate create architecture mode using this document as input.
|
|
259
|
+
- id: architect-prompt
|
|
260
|
+
title: Architect Prompt
|
|
261
|
+
instruction: This section will contain the prompt for the Architect, keep it short and to the point to initiate create architecture mode using this document as input.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# <!-- Powered by BMAD™ Core -->
|
|
2
|
+
template:
|
|
3
|
+
id: qa-gate-template-v1
|
|
4
|
+
name: Quality Gate Decision
|
|
5
|
+
version: 1.0
|
|
6
|
+
output:
|
|
7
|
+
format: yaml
|
|
8
|
+
filename: qa.qaLocation/gates/{{epic_num}}.{{story_num}}-{{story_slug}}.yml
|
|
9
|
+
title: "Quality Gate: {{epic_num}}.{{story_num}}"
|
|
10
|
+
|
|
11
|
+
# Required fields (keep these first)
|
|
12
|
+
schema: 1
|
|
13
|
+
story: "{{epic_num}}.{{story_num}}"
|
|
14
|
+
story_title: "{{story_title}}"
|
|
15
|
+
gate: "{{gate_status}}" # PASS|CONCERNS|FAIL|WAIVED
|
|
16
|
+
status_reason: "{{status_reason}}" # 1-2 sentence summary of why this gate decision
|
|
17
|
+
reviewer: "Quinn (Test Architect)"
|
|
18
|
+
updated: "{{iso_timestamp}}"
|
|
19
|
+
|
|
20
|
+
# Always present but only active when WAIVED
|
|
21
|
+
waiver: { active: false }
|
|
22
|
+
|
|
23
|
+
# Issues (if any) - Use fixed severity: low | medium | high
|
|
24
|
+
top_issues: []
|
|
25
|
+
|
|
26
|
+
# Risk summary (from risk-profile task if run)
|
|
27
|
+
risk_summary:
|
|
28
|
+
totals: { critical: 0, high: 0, medium: 0, low: 0 }
|
|
29
|
+
recommendations:
|
|
30
|
+
must_fix: []
|
|
31
|
+
monitor: []
|
|
32
|
+
|
|
33
|
+
# Examples section using block scalars for clarity
|
|
34
|
+
examples:
|
|
35
|
+
with_issues: |
|
|
36
|
+
top_issues:
|
|
37
|
+
- id: "SEC-001"
|
|
38
|
+
severity: high # ONLY: low|medium|high
|
|
39
|
+
finding: "No rate limiting on login endpoint"
|
|
40
|
+
suggested_action: "Add rate limiting middleware before production"
|
|
41
|
+
- id: "TEST-001"
|
|
42
|
+
severity: medium
|
|
43
|
+
finding: "Missing integration tests for auth flow"
|
|
44
|
+
suggested_action: "Add test coverage for critical paths"
|
|
45
|
+
|
|
46
|
+
when_waived: |
|
|
47
|
+
waiver:
|
|
48
|
+
active: true
|
|
49
|
+
reason: "Accepted for MVP release - will address in next sprint"
|
|
50
|
+
approved_by: "Product Owner"
|
|
51
|
+
|
|
52
|
+
# ============ Optional Extended Fields ============
|
|
53
|
+
# Uncomment and use if your team wants more detail
|
|
54
|
+
|
|
55
|
+
optional_fields_examples:
|
|
56
|
+
quality_and_expiry: |
|
|
57
|
+
quality_score: 75 # 0-100 (optional scoring)
|
|
58
|
+
expires: "2025-01-26T00:00:00Z" # Optional gate freshness window
|
|
59
|
+
|
|
60
|
+
evidence: |
|
|
61
|
+
evidence:
|
|
62
|
+
tests_reviewed: 15
|
|
63
|
+
risks_identified: 3
|
|
64
|
+
trace:
|
|
65
|
+
ac_covered: [1, 2, 3] # AC numbers with test coverage
|
|
66
|
+
ac_gaps: [4] # AC numbers lacking coverage
|
|
67
|
+
|
|
68
|
+
nfr_validation: |
|
|
69
|
+
nfr_validation:
|
|
70
|
+
security: { status: CONCERNS, notes: "Rate limiting missing" }
|
|
71
|
+
performance: { status: PASS, notes: "" }
|
|
72
|
+
reliability: { status: PASS, notes: "" }
|
|
73
|
+
maintainability: { status: PASS, notes: "" }
|
|
74
|
+
|
|
75
|
+
history: |
|
|
76
|
+
history: # Append-only audit trail
|
|
77
|
+
- at: "2025-01-12T10:00:00Z"
|
|
78
|
+
gate: FAIL
|
|
79
|
+
note: "Initial review - missing tests"
|
|
80
|
+
- at: "2025-01-12T15:00:00Z"
|
|
81
|
+
gate: CONCERNS
|
|
82
|
+
note: "Tests added but rate limiting still missing"
|
|
83
|
+
|
|
84
|
+
risk_summary: |
|
|
85
|
+
risk_summary: # From risk-profile task
|
|
86
|
+
totals:
|
|
87
|
+
critical: 0
|
|
88
|
+
high: 0
|
|
89
|
+
medium: 0
|
|
90
|
+
low: 0
|
|
91
|
+
# 'highest' is emitted only when risks exist
|
|
92
|
+
recommendations:
|
|
93
|
+
must_fix: []
|
|
94
|
+
monitor: []
|
|
95
|
+
|
|
96
|
+
recommendations: |
|
|
97
|
+
recommendations:
|
|
98
|
+
immediate: # Must fix before production
|
|
99
|
+
- action: "Add rate limiting to auth endpoints"
|
|
100
|
+
refs: ["api/auth/login.ts:42-68"]
|
|
101
|
+
future: # Can be addressed later
|
|
102
|
+
- action: "Consider caching for better performance"
|
|
103
|
+
refs: ["services/data.service.ts"]
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# <!-- Powered by BMAD™ Core -->
|
|
2
|
+
template:
|
|
3
|
+
id: story-template-v2
|
|
4
|
+
name: Story Document
|
|
5
|
+
version: 2.0
|
|
6
|
+
output:
|
|
7
|
+
format: markdown
|
|
8
|
+
filename: docs/stories/{{epic_num}}.{{story_num}}.{{story_title_short}}.md
|
|
9
|
+
title: "Story {{epic_num}}.{{story_num}}: {{story_title_short}}"
|
|
10
|
+
|
|
11
|
+
workflow:
|
|
12
|
+
mode: interactive
|
|
13
|
+
elicitation: advanced-elicitation
|
|
14
|
+
|
|
15
|
+
agent_config:
|
|
16
|
+
editable_sections:
|
|
17
|
+
- Status
|
|
18
|
+
- Story
|
|
19
|
+
- Acceptance Criteria
|
|
20
|
+
- Tasks / Subtasks
|
|
21
|
+
- Dev Notes
|
|
22
|
+
- Testing
|
|
23
|
+
- Change Log
|
|
24
|
+
|
|
25
|
+
sections:
|
|
26
|
+
- id: status
|
|
27
|
+
title: Status
|
|
28
|
+
type: choice
|
|
29
|
+
choices: [Draft, Approved, InProgress, Review, Done]
|
|
30
|
+
instruction: Select the current status of the story
|
|
31
|
+
owner: scrum-master
|
|
32
|
+
editors: [scrum-master, dev-agent]
|
|
33
|
+
|
|
34
|
+
- id: story
|
|
35
|
+
title: Story
|
|
36
|
+
type: template-text
|
|
37
|
+
template: |
|
|
38
|
+
**As a** {{role}},
|
|
39
|
+
**I want** {{action}},
|
|
40
|
+
**so that** {{benefit}}
|
|
41
|
+
instruction: Define the user story using the standard format with role, action, and benefit
|
|
42
|
+
elicit: true
|
|
43
|
+
owner: scrum-master
|
|
44
|
+
editors: [scrum-master]
|
|
45
|
+
|
|
46
|
+
- id: acceptance-criteria
|
|
47
|
+
title: Acceptance Criteria
|
|
48
|
+
type: numbered-list
|
|
49
|
+
instruction: Copy the acceptance criteria numbered list from the epic file
|
|
50
|
+
elicit: true
|
|
51
|
+
owner: scrum-master
|
|
52
|
+
editors: [scrum-master]
|
|
53
|
+
|
|
54
|
+
- id: tasks-subtasks
|
|
55
|
+
title: Tasks / Subtasks
|
|
56
|
+
type: bullet-list
|
|
57
|
+
instruction: |
|
|
58
|
+
Break down the story into specific tasks and subtasks needed for implementation.
|
|
59
|
+
Reference applicable acceptance criteria numbers where relevant.
|
|
60
|
+
template: |
|
|
61
|
+
- [ ] Task 1 (AC: # if applicable)
|
|
62
|
+
- [ ] Subtask1.1...
|
|
63
|
+
- [ ] Task 2 (AC: # if applicable)
|
|
64
|
+
- [ ] Subtask 2.1...
|
|
65
|
+
- [ ] Task 3 (AC: # if applicable)
|
|
66
|
+
- [ ] Subtask 3.1...
|
|
67
|
+
elicit: true
|
|
68
|
+
owner: scrum-master
|
|
69
|
+
editors: [scrum-master, dev-agent]
|
|
70
|
+
|
|
71
|
+
- id: dev-notes
|
|
72
|
+
title: Dev Notes
|
|
73
|
+
instruction: |
|
|
74
|
+
Populate relevant information, only what was pulled from actual artifacts from docs folder, relevant to this story:
|
|
75
|
+
- Do not invent information
|
|
76
|
+
- If known add Relevant Source Tree info that relates to this story
|
|
77
|
+
- If there were important notes from previous story that are relevant to this one, include them here
|
|
78
|
+
- Put enough information in this section so that the dev agent should NEVER need to read the architecture documents, these notes along with the tasks and subtasks must give the Dev Agent the complete context it needs to comprehend with the least amount of overhead the information to complete the story, meeting all AC and completing all tasks+subtasks
|
|
79
|
+
elicit: true
|
|
80
|
+
owner: scrum-master
|
|
81
|
+
editors: [scrum-master]
|
|
82
|
+
sections:
|
|
83
|
+
- id: testing-standards
|
|
84
|
+
title: Testing
|
|
85
|
+
instruction: |
|
|
86
|
+
List Relevant Testing Standards from Architecture the Developer needs to conform to:
|
|
87
|
+
- Test file location
|
|
88
|
+
- Test standards
|
|
89
|
+
- Testing frameworks and patterns to use
|
|
90
|
+
- Any specific testing requirements for this story
|
|
91
|
+
elicit: true
|
|
92
|
+
owner: scrum-master
|
|
93
|
+
editors: [scrum-master]
|
|
94
|
+
|
|
95
|
+
- id: change-log
|
|
96
|
+
title: Change Log
|
|
97
|
+
type: table
|
|
98
|
+
columns: [Date, Version, Description, Author]
|
|
99
|
+
instruction: Track changes made to this story document
|
|
100
|
+
owner: scrum-master
|
|
101
|
+
editors: [scrum-master, dev-agent, qa-agent]
|
|
102
|
+
|
|
103
|
+
- id: dev-agent-record
|
|
104
|
+
title: Dev Agent Record
|
|
105
|
+
instruction: This section is populated by the development agent during implementation
|
|
106
|
+
owner: dev-agent
|
|
107
|
+
editors: [dev-agent]
|
|
108
|
+
sections:
|
|
109
|
+
- id: agent-model
|
|
110
|
+
title: Agent Model Used
|
|
111
|
+
template: "{{agent_model_name_version}}"
|
|
112
|
+
instruction: Record the specific AI agent model and version used for development
|
|
113
|
+
owner: dev-agent
|
|
114
|
+
editors: [dev-agent]
|
|
115
|
+
|
|
116
|
+
- id: debug-log-references
|
|
117
|
+
title: Debug Log References
|
|
118
|
+
instruction: Reference any debug logs or traces generated during development
|
|
119
|
+
owner: dev-agent
|
|
120
|
+
editors: [dev-agent]
|
|
121
|
+
|
|
122
|
+
- id: completion-notes
|
|
123
|
+
title: Completion Notes List
|
|
124
|
+
instruction: Notes about the completion of tasks and any issues encountered
|
|
125
|
+
owner: dev-agent
|
|
126
|
+
editors: [dev-agent]
|
|
127
|
+
|
|
128
|
+
- id: file-list
|
|
129
|
+
title: File List
|
|
130
|
+
instruction: List all files created, modified, or affected during story implementation
|
|
131
|
+
owner: dev-agent
|
|
132
|
+
editors: [dev-agent]
|
|
133
|
+
|
|
134
|
+
- id: qa-results
|
|
135
|
+
title: QA Results
|
|
136
|
+
instruction: Results from QA Agent QA review of the completed story implementation
|
|
137
|
+
owner: qa-agent
|
|
138
|
+
editors: [qa-agent]
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eject Command
|
|
3
|
+
*
|
|
4
|
+
* Copies bundled assets (agents, templates, config) into a local project directory
|
|
5
|
+
* for full customization. After eject, the CLI resolves assets from the local path
|
|
6
|
+
* instead of bundled defaults.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```bash
|
|
10
|
+
* bmad-workflow eject
|
|
11
|
+
* bmad-workflow eject --target ./my-assets
|
|
12
|
+
* bmad-workflow eject --agents-only
|
|
13
|
+
* bmad-workflow eject --templates-only
|
|
14
|
+
* bmad-workflow eject --force
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { Command } from '@oclif/core';
|
|
18
|
+
import { FileManager } from '../services/file-system/file-manager.js';
|
|
19
|
+
/**
|
|
20
|
+
* Subdirectory definition for eject operations
|
|
21
|
+
*/
|
|
22
|
+
export interface EjectSubdir {
|
|
23
|
+
/** Name of subdirectory under assets/ */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Target name (may differ from source for config) */
|
|
26
|
+
targetName?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Summary of eject operation
|
|
30
|
+
*/
|
|
31
|
+
export interface EjectSummary {
|
|
32
|
+
copied: Map<string, number>;
|
|
33
|
+
skipped: string[];
|
|
34
|
+
targetPath: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the bundled assets directory path.
|
|
38
|
+
*
|
|
39
|
+
* From dist/commands/eject.js → ../../assets
|
|
40
|
+
*/
|
|
41
|
+
export declare function getAssetsDir(): string;
|
|
42
|
+
/**
|
|
43
|
+
* Determine which subdirectories to eject based on flags
|
|
44
|
+
*/
|
|
45
|
+
export declare function getSubdirs(agentsOnly: boolean, templatesOnly: boolean): EjectSubdir[];
|
|
46
|
+
/**
|
|
47
|
+
* Copy assets from source to target with skip/force logic
|
|
48
|
+
*/
|
|
49
|
+
export declare function copyAssets(assetsDir: string, targetPath: string, subdirs: EjectSubdir[], force: boolean, fileManager: FileManager): Promise<EjectSummary>;
|
|
50
|
+
/**
|
|
51
|
+
* Create or update .bmad-workflow.yaml with bmad_path
|
|
52
|
+
*/
|
|
53
|
+
export declare function updateConfig(targetPath: string, projectRoot?: string): void;
|
|
54
|
+
/**
|
|
55
|
+
* Format summary output lines
|
|
56
|
+
*/
|
|
57
|
+
export declare function formatSummary(summary: EjectSummary): string[];
|
|
58
|
+
/**
|
|
59
|
+
* Eject Command
|
|
60
|
+
*
|
|
61
|
+
* Copies bundled assets into a local project directory for customization.
|
|
62
|
+
*/
|
|
63
|
+
export default class EjectCommand extends Command {
|
|
64
|
+
static description: string;
|
|
65
|
+
static examples: {
|
|
66
|
+
command: string;
|
|
67
|
+
description: string;
|
|
68
|
+
}[];
|
|
69
|
+
static flags: {
|
|
70
|
+
'agents-only': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
71
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
72
|
+
target: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
73
|
+
'templates-only': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
74
|
+
};
|
|
75
|
+
run(): Promise<void>;
|
|
76
|
+
}
|