bmad-method 4.37.0 â 5.0.0-beta.1
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/.github/workflows/promote-to-stable.yml +144 -0
- package/CHANGELOG.md +16 -9
- package/bmad-core/agents/qa.md +37 -18
- package/bmad-core/data/test-levels-framework.md +146 -0
- package/bmad-core/data/test-priorities-matrix.md +172 -0
- package/bmad-core/tasks/nfr-assess.md +343 -0
- package/bmad-core/tasks/qa-gate.md +159 -0
- package/bmad-core/tasks/review-story.md +234 -74
- package/bmad-core/tasks/risk-profile.md +353 -0
- package/bmad-core/tasks/test-design.md +174 -0
- package/bmad-core/tasks/trace-requirements.md +264 -0
- package/bmad-core/templates/qa-gate-tmpl.yaml +102 -0
- package/dist/agents/analyst.txt +20 -26
- package/dist/agents/architect.txt +14 -35
- package/dist/agents/bmad-master.txt +40 -70
- package/dist/agents/bmad-orchestrator.txt +28 -5
- package/dist/agents/dev.txt +0 -14
- package/dist/agents/pm.txt +0 -25
- package/dist/agents/po.txt +0 -18
- package/dist/agents/qa.txt +2079 -135
- package/dist/agents/sm.txt +0 -10
- package/dist/agents/ux-expert.txt +0 -7
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -37
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +3 -12
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -7
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +44 -90
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +14 -49
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +0 -46
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +0 -15
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +0 -17
- package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +38 -142
- package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2
- package/dist/teams/team-all.txt +2181 -261
- package/dist/teams/team-fullstack.txt +43 -57
- package/dist/teams/team-ide-minimal.txt +2064 -125
- package/dist/teams/team-no-ui.txt +43 -57
- package/docs/enhanced-ide-development-workflow.md +220 -15
- package/docs/user-guide.md +271 -18
- package/docs/working-in-the-brownfield.md +264 -31
- package/package.json +1 -1
- package/tools/installer/bin/bmad.js +33 -32
- package/tools/installer/config/install.config.yaml +11 -1
- package/tools/installer/lib/file-manager.js +1 -1
- package/tools/installer/lib/ide-base-setup.js +1 -1
- package/tools/installer/lib/ide-setup.js +197 -83
- package/tools/installer/lib/installer.js +3 -3
- package/tools/installer/package.json +1 -1
|
@@ -76,7 +76,7 @@ The PM will:
|
|
|
76
76
|
*document-project
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
The
|
|
79
|
+
The architect will:
|
|
80
80
|
|
|
81
81
|
- **Ask about your focus** if no PRD was provided
|
|
82
82
|
- **Offer options**: Create PRD, provide requirements, or describe the enhancement
|
|
@@ -85,11 +85,11 @@ The analyst will:
|
|
|
85
85
|
- **Skip unrelated areas** to keep docs lean
|
|
86
86
|
- **Generate ONE architecture document** for all environments
|
|
87
87
|
|
|
88
|
-
The
|
|
88
|
+
The architect creates:
|
|
89
89
|
|
|
90
90
|
- **One comprehensive architecture document** following fullstack-architecture template
|
|
91
91
|
- **Covers all system aspects** in a single file
|
|
92
|
-
- **Easy to copy and save** as `docs/
|
|
92
|
+
- **Easy to copy and save** as `docs/architecture.md`
|
|
93
93
|
- **Can be sharded later** in IDE if desired
|
|
94
94
|
|
|
95
95
|
For example, if you say "Add payment processing to user service":
|
|
@@ -108,10 +108,10 @@ For example, if you say "Add payment processing to user service":
|
|
|
108
108
|
2. **Upload your project**:
|
|
109
109
|
- **Option A**: Paste your GitHub repository URL directly
|
|
110
110
|
- **Option B**: Upload your flattened-codebase.xml file
|
|
111
|
-
3. **Load the
|
|
111
|
+
3. **Load the architect agent**: Upload `dist/agents/architect.txt`
|
|
112
112
|
4. **Run documentation**: Type `*document-project`
|
|
113
113
|
|
|
114
|
-
The
|
|
114
|
+
The architect will generate comprehensive documentation of everything.
|
|
115
115
|
|
|
116
116
|
#### Phase 2: Plan Your Enhancement
|
|
117
117
|
|
|
@@ -206,19 +206,20 @@ The PO ensures:
|
|
|
206
206
|
### Phase 4: Save and Shard Documents
|
|
207
207
|
|
|
208
208
|
1. Save your PRD and Architecture as:
|
|
209
|
-
docs/
|
|
210
|
-
docs/
|
|
209
|
+
docs/prd.md
|
|
210
|
+
docs/architecture.md
|
|
211
|
+
(Note: You can optionally prefix with 'brownfield-' if managing multiple versions)
|
|
211
212
|
2. Shard your docs:
|
|
212
213
|
In your IDE
|
|
213
214
|
|
|
214
215
|
```bash
|
|
215
216
|
@po
|
|
216
|
-
shard docs/
|
|
217
|
+
shard docs/prd.md
|
|
217
218
|
```
|
|
218
219
|
|
|
219
220
|
```bash
|
|
220
221
|
@po
|
|
221
|
-
shard docs/
|
|
222
|
+
shard docs/architecture.md
|
|
222
223
|
```
|
|
223
224
|
|
|
224
225
|
### Phase 5: Transition to Development
|
|
@@ -255,12 +256,172 @@ Brownfield changes should:
|
|
|
255
256
|
|
|
256
257
|
### 4. Test Integration Thoroughly
|
|
257
258
|
|
|
258
|
-
|
|
259
|
+
#### Why the Test Architect is Critical for Brownfield
|
|
260
|
+
|
|
261
|
+
In brownfield projects, the Test Architect (Quinn) becomes your safety net against breaking existing functionality. Unlike greenfield where you're building fresh, brownfield requires careful validation that new changes don't destabilize what already works.
|
|
262
|
+
|
|
263
|
+
#### Brownfield-Specific Testing Challenges
|
|
264
|
+
|
|
265
|
+
The Test Architect addresses unique brownfield complexities:
|
|
266
|
+
|
|
267
|
+
| **Challenge** | **How Test Architect Helps** | **Command** |
|
|
268
|
+
| --------------------------- | ------------------------------------------------- | ------------------- |
|
|
269
|
+
| **Regression Risks** | Identifies which existing features might break | `*risk` |
|
|
270
|
+
| **Legacy Dependencies** | Maps integration points and hidden dependencies | `*trace` |
|
|
271
|
+
| **Performance Degradation** | Validates no slowdown in existing flows | `*nfr` |
|
|
272
|
+
| **Coverage Gaps** | Finds untested legacy code that new changes touch | `*design` |
|
|
273
|
+
| **Breaking Changes** | Detects API/contract violations | `*review` |
|
|
274
|
+
| **Migration Safety** | Validates data transformations and rollback plans | `*risk` + `*review` |
|
|
275
|
+
|
|
276
|
+
#### Complete Test Architect Workflow for Brownfield
|
|
277
|
+
|
|
278
|
+
##### Stage 1: Before Development (Risk & Strategy)
|
|
259
279
|
|
|
260
|
-
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
280
|
+
**CRITICAL FOR BROWNFIELD - Run These First:**
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
# 1. RISK ASSESSMENT (Run IMMEDIATELY after story creation)
|
|
284
|
+
@qa *risk {brownfield-story}
|
|
285
|
+
# Identifies: Legacy dependencies, breaking changes, integration points
|
|
286
|
+
# Output: docs/qa/assessments/{epic}.{story}-risk-{YYYYMMDD}.md
|
|
287
|
+
# Brownfield Focus:
|
|
288
|
+
# - Regression probability scoring
|
|
289
|
+
# - Affected downstream systems
|
|
290
|
+
# - Data migration risks
|
|
291
|
+
# - Rollback complexity
|
|
292
|
+
|
|
293
|
+
# 2. TEST DESIGN (After risk assessment)
|
|
294
|
+
@qa *design {brownfield-story}
|
|
295
|
+
# Creates: Regression test strategy + new feature tests
|
|
296
|
+
# Output: docs/qa/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md
|
|
297
|
+
# Brownfield Focus:
|
|
298
|
+
# - Existing functionality that needs regression tests
|
|
299
|
+
# - Integration test requirements
|
|
300
|
+
# - Performance benchmarks to maintain
|
|
301
|
+
# - Feature flag test scenarios
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
##### Stage 2: During Development (Continuous Validation)
|
|
305
|
+
|
|
306
|
+
**Monitor Integration Health While Coding:**
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# 3. REQUIREMENTS TRACING (Mid-development checkpoint)
|
|
310
|
+
@qa *trace {brownfield-story}
|
|
311
|
+
# Maps: New requirements + existing functionality preservation
|
|
312
|
+
# Output: docs/qa/assessments/{epic}.{story}-trace-{YYYYMMDD}.md
|
|
313
|
+
# Brownfield Focus:
|
|
314
|
+
# - Existing features that must still work
|
|
315
|
+
# - New/old feature interactions
|
|
316
|
+
# - API contract preservation
|
|
317
|
+
# - Missing regression test coverage
|
|
318
|
+
|
|
319
|
+
# 4. NFR VALIDATION (Before considering "done")
|
|
320
|
+
@qa *nfr {brownfield-story}
|
|
321
|
+
# Validates: Performance, security, reliability unchanged
|
|
322
|
+
# Output: docs/qa/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md
|
|
323
|
+
# Brownfield Focus:
|
|
324
|
+
# - Performance regression detection
|
|
325
|
+
# - Security implications of integrations
|
|
326
|
+
# - Backward compatibility validation
|
|
327
|
+
# - Load/stress on legacy components
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
##### Stage 3: Code Review (Deep Integration Analysis)
|
|
331
|
+
|
|
332
|
+
**Comprehensive Brownfield Review:**
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
# 5. FULL REVIEW (When development complete)
|
|
336
|
+
@qa *review {brownfield-story}
|
|
337
|
+
# Performs: Deep analysis + active refactoring
|
|
338
|
+
# Outputs:
|
|
339
|
+
# - QA Results in story file
|
|
340
|
+
# - Gate file: docs/qa/gates/{epic}.{story}-{slug}.yml
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
The review specifically analyzes:
|
|
344
|
+
|
|
345
|
+
- **API Breaking Changes**: Validates all existing contracts maintained
|
|
346
|
+
- **Data Migration Safety**: Checks transformation logic and rollback procedures
|
|
347
|
+
- **Performance Regression**: Compares against baseline metrics
|
|
348
|
+
- **Integration Points**: Validates all touchpoints with legacy code
|
|
349
|
+
- **Feature Flag Logic**: Ensures proper toggle behavior
|
|
350
|
+
- **Dependency Impacts**: Maps affected downstream systems
|
|
351
|
+
|
|
352
|
+
##### Stage 4: Post-Review (Gate Updates)
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
# 6. GATE STATUS UPDATE (After addressing issues)
|
|
356
|
+
@qa *gate {brownfield-story}
|
|
357
|
+
# Updates: Quality gate decision after fixes
|
|
358
|
+
# Output: docs/qa/gates/{epic}.{story}-{slug}.yml
|
|
359
|
+
# Brownfield Considerations:
|
|
360
|
+
# - May WAIVE certain legacy code issues
|
|
361
|
+
# - Documents technical debt acceptance
|
|
362
|
+
# - Tracks migration progress
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
#### Brownfield-Specific Risk Scoring
|
|
366
|
+
|
|
367
|
+
The Test Architect uses enhanced risk scoring for brownfield:
|
|
368
|
+
|
|
369
|
+
| **Risk Category** | **Brownfield Factors** | **Impact on Gate** |
|
|
370
|
+
| ---------------------- | ------------------------------------------ | ------------------- |
|
|
371
|
+
| **Regression Risk** | Number of integration points Ă Age of code | Score âĽ9 = FAIL |
|
|
372
|
+
| **Data Risk** | Migration complexity Ă Data volume | Score âĽ6 = CONCERNS |
|
|
373
|
+
| **Performance Risk** | Current load Ă Added complexity | Score âĽ6 = CONCERNS |
|
|
374
|
+
| **Compatibility Risk** | API consumers Ă Contract changes | Score âĽ9 = FAIL |
|
|
375
|
+
|
|
376
|
+
#### Brownfield Testing Standards
|
|
377
|
+
|
|
378
|
+
Quinn enforces additional standards for brownfield:
|
|
379
|
+
|
|
380
|
+
- **Regression Test Coverage**: Every touched legacy module needs tests
|
|
381
|
+
- **Performance Baselines**: Must maintain or improve current metrics
|
|
382
|
+
- **Rollback Procedures**: Every change needs a rollback plan
|
|
383
|
+
- **Feature Flags**: All risky changes behind toggles
|
|
384
|
+
- **Integration Tests**: Cover all legacy touchpoints
|
|
385
|
+
- **Contract Tests**: Validate API compatibility
|
|
386
|
+
- **Data Validation**: Migration correctness checks
|
|
387
|
+
|
|
388
|
+
#### Quick Reference: Brownfield Test Commands
|
|
389
|
+
|
|
390
|
+
| **Scenario** | **Commands to Run** | **Order** | **Why Critical** |
|
|
391
|
+
| --------------------------------- | ---------------------------------------------------- | ---------- | ----------------------------- |
|
|
392
|
+
| **Adding Feature to Legacy Code** | `*risk` â `*design` â `*trace` â `*review` | Sequential | Map all dependencies first |
|
|
393
|
+
| **API Modification** | `*risk` â `*design` â `*nfr` â `*review` | Sequential | Prevent breaking consumers |
|
|
394
|
+
| **Performance-Critical Change** | `*nfr` early and often â `*review` | Continuous | Catch degradation immediately |
|
|
395
|
+
| **Data Migration** | `*risk` â `*design` â `*trace` â `*review` â `*gate` | Full cycle | Ensure data integrity |
|
|
396
|
+
| **Bug Fix in Complex System** | `*risk` â `*trace` â `*review` | Focused | Prevent side effects |
|
|
397
|
+
|
|
398
|
+
#### Integration with Brownfield Scenarios
|
|
399
|
+
|
|
400
|
+
**Scenario-Specific Guidance:**
|
|
401
|
+
|
|
402
|
+
1. **Legacy Code Modernization**
|
|
403
|
+
- Start with `*risk` to map all dependencies
|
|
404
|
+
- Use `*design` to plan strangler fig approach
|
|
405
|
+
- Run `*trace` frequently to ensure nothing breaks
|
|
406
|
+
- `*review` with focus on gradual migration
|
|
407
|
+
|
|
408
|
+
2. **Adding Features to Monolith**
|
|
409
|
+
- `*risk` identifies integration complexity
|
|
410
|
+
- `*design` plans isolation strategies
|
|
411
|
+
- `*nfr` monitors performance impact
|
|
412
|
+
- `*review` validates no monolith degradation
|
|
413
|
+
|
|
414
|
+
3. **Microservice Extraction**
|
|
415
|
+
- `*risk` maps service boundaries
|
|
416
|
+
- `*trace` ensures functionality preservation
|
|
417
|
+
- `*nfr` validates network overhead acceptable
|
|
418
|
+
- `*gate` documents accepted trade-offs
|
|
419
|
+
|
|
420
|
+
4. **Database Schema Changes**
|
|
421
|
+
- `*risk` assesses migration complexity
|
|
422
|
+
- `*design` plans backward-compatible approach
|
|
423
|
+
- `*trace` maps all affected queries
|
|
424
|
+
- `*review` validates migration safety
|
|
264
425
|
|
|
265
426
|
### 5. Communicate Changes
|
|
266
427
|
|
|
@@ -277,29 +438,63 @@ Document:
|
|
|
277
438
|
|
|
278
439
|
1. Document existing system
|
|
279
440
|
2. Create brownfield PRD focusing on integration
|
|
280
|
-
3.
|
|
281
|
-
|
|
441
|
+
3. **Test Architect Early Involvement**:
|
|
442
|
+
- Run `@qa *risk` on draft stories to identify integration risks
|
|
443
|
+
- Use `@qa *design` to plan regression test strategy
|
|
444
|
+
4. Architecture emphasizes compatibility
|
|
445
|
+
5. Stories include integration tasks with test requirements
|
|
446
|
+
6. **During Development**:
|
|
447
|
+
- Developer runs `@qa *trace` to verify coverage
|
|
448
|
+
- Use `@qa *nfr` to monitor performance impact
|
|
449
|
+
7. **Review Stage**: `@qa *review` validates integration safety
|
|
282
450
|
|
|
283
451
|
### Scenario 2: Modernizing Legacy Code
|
|
284
452
|
|
|
285
453
|
1. Extensive documentation phase
|
|
286
454
|
2. PRD includes migration strategy
|
|
287
|
-
3.
|
|
288
|
-
|
|
455
|
+
3. **Test Architect Strategy Planning**:
|
|
456
|
+
- `@qa *risk` assesses modernization complexity
|
|
457
|
+
- `@qa *design` plans parallel testing approach
|
|
458
|
+
4. Architecture plans gradual transition (strangler fig pattern)
|
|
459
|
+
5. Stories follow incremental modernization with:
|
|
460
|
+
- Regression tests for untouched legacy code
|
|
461
|
+
- Integration tests for new/old boundaries
|
|
462
|
+
- Performance benchmarks at each stage
|
|
463
|
+
6. **Continuous Validation**: Run `@qa *trace` after each increment
|
|
464
|
+
7. **Gate Management**: Use `@qa *gate` to track technical debt acceptance
|
|
289
465
|
|
|
290
466
|
### Scenario 3: Bug Fix in Complex System
|
|
291
467
|
|
|
292
468
|
1. Document relevant subsystems
|
|
293
469
|
2. Use `create-brownfield-story` for focused fix
|
|
294
|
-
3.
|
|
295
|
-
4.
|
|
470
|
+
3. **Test Architect Risk Assessment**: Run `@qa *risk` to identify side effect potential
|
|
471
|
+
4. Include regression test requirements from `@qa *design` output
|
|
472
|
+
5. **During Fix**: Use `@qa *trace` to map affected functionality
|
|
473
|
+
6. **Before Commit**: Run `@qa *review` for comprehensive validation
|
|
474
|
+
7. Test Architect validates no side effects using:
|
|
475
|
+
- Risk profiling for side effect analysis (probability Ă impact scoring)
|
|
476
|
+
- Trace matrix to ensure fix doesn't break related features
|
|
477
|
+
- NFR assessment to verify performance/security unchanged
|
|
478
|
+
- Gate decision documents fix safety
|
|
296
479
|
|
|
297
480
|
### Scenario 4: API Integration
|
|
298
481
|
|
|
299
482
|
1. Document existing API patterns
|
|
300
483
|
2. PRD defines integration requirements
|
|
301
|
-
3.
|
|
302
|
-
|
|
484
|
+
3. **Test Architect Contract Analysis**:
|
|
485
|
+
- `@qa *risk` identifies breaking change potential
|
|
486
|
+
- `@qa *design` creates contract test strategy
|
|
487
|
+
4. Architecture ensures consistent patterns
|
|
488
|
+
5. **API Testing Focus**:
|
|
489
|
+
- Contract tests for backward compatibility
|
|
490
|
+
- Integration tests for new endpoints
|
|
491
|
+
- Performance tests for added load
|
|
492
|
+
6. Stories include API documentation updates
|
|
493
|
+
7. **Validation Checkpoints**:
|
|
494
|
+
- `@qa *trace` maps all API consumers
|
|
495
|
+
- `@qa *nfr` validates response times
|
|
496
|
+
- `@qa *review` ensures no breaking changes
|
|
497
|
+
8. **Gate Decision**: Document any accepted breaking changes with migration path
|
|
303
498
|
|
|
304
499
|
## Troubleshooting
|
|
305
500
|
|
|
@@ -325,19 +520,37 @@ Document:
|
|
|
325
520
|
|
|
326
521
|
```bash
|
|
327
522
|
# Document existing project
|
|
328
|
-
@architect
|
|
523
|
+
@architect *document-project
|
|
329
524
|
|
|
330
525
|
# Create enhancement PRD
|
|
331
|
-
@pm
|
|
526
|
+
@pm *create-brownfield-prd
|
|
332
527
|
|
|
333
528
|
# Create architecture with integration focus
|
|
334
|
-
@architect
|
|
529
|
+
@architect *create-brownfield-architecture
|
|
335
530
|
|
|
336
531
|
# Quick epic creation
|
|
337
|
-
@pm
|
|
532
|
+
@pm *create-brownfield-epic
|
|
338
533
|
|
|
339
534
|
# Single story creation
|
|
340
|
-
@pm
|
|
535
|
+
@pm *create-brownfield-story
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
### Test Architect Commands for Brownfield
|
|
539
|
+
|
|
540
|
+
Note: Short forms shown below. Full commands: `*risk-profile`, `*test-design`, `*nfr-assess`, `*trace-requirements`
|
|
541
|
+
|
|
542
|
+
```bash
|
|
543
|
+
# BEFORE DEVELOPMENT (Planning)
|
|
544
|
+
@qa *risk {story} # Assess regression & integration risks
|
|
545
|
+
@qa *design {story} # Plan regression + new feature tests
|
|
546
|
+
|
|
547
|
+
# DURING DEVELOPMENT (Validation)
|
|
548
|
+
@qa *trace {story} # Verify coverage of old + new
|
|
549
|
+
@qa *nfr {story} # Check performance degradation
|
|
550
|
+
|
|
551
|
+
# AFTER DEVELOPMENT (Review)
|
|
552
|
+
@qa *review {story} # Deep integration analysis
|
|
553
|
+
@qa *gate {story} # Update quality decision
|
|
341
554
|
```
|
|
342
555
|
|
|
343
556
|
### Decision Tree
|
|
@@ -352,13 +565,33 @@ Do you have a large codebase or monorepo?
|
|
|
352
565
|
|
|
353
566
|
Is this a major enhancement affecting multiple systems?
|
|
354
567
|
ââ Yes â Full Brownfield Workflow
|
|
568
|
+
â ââ ALWAYS run Test Architect *risk + *design first
|
|
355
569
|
ââ No â Is this more than a simple bug fix?
|
|
356
|
-
ââ Yes â brownfield-
|
|
357
|
-
ââ
|
|
570
|
+
ââ Yes â *create-brownfield-epic
|
|
571
|
+
â ââ Run Test Architect *risk for integration points
|
|
572
|
+
ââ No â *create-brownfield-story
|
|
573
|
+
ââ Still run *risk if touching critical paths
|
|
574
|
+
|
|
575
|
+
Does the change touch legacy code?
|
|
576
|
+
ââ Yes â Test Architect is MANDATORY
|
|
577
|
+
â ââ *risk â Identify regression potential
|
|
578
|
+
â ââ *design â Plan test coverage
|
|
579
|
+
â ââ *review â Validate no breakage
|
|
580
|
+
ââ No â Test Architect is RECOMMENDED
|
|
581
|
+
ââ *review â Ensure quality standards
|
|
358
582
|
```
|
|
359
583
|
|
|
360
584
|
## Conclusion
|
|
361
585
|
|
|
362
|
-
Brownfield development with BMad
|
|
586
|
+
Brownfield development with BMad Method provides structure and safety when modifying existing systems. The Test Architect becomes your critical safety net, using risk assessment, regression testing, and continuous validation to ensure new changes don't destabilize existing functionality.
|
|
587
|
+
|
|
588
|
+
**The Brownfield Success Formula:**
|
|
589
|
+
|
|
590
|
+
1. **Document First** - Understand what exists
|
|
591
|
+
2. **Assess Risk Early** - Use Test Architect `*risk` before coding
|
|
592
|
+
3. **Plan Test Strategy** - Design regression + new feature tests
|
|
593
|
+
4. **Validate Continuously** - Check integration health during development
|
|
594
|
+
5. **Review Comprehensively** - Deep analysis before committing
|
|
595
|
+
6. **Gate Decisively** - Document quality decisions
|
|
363
596
|
|
|
364
|
-
Remember: **
|
|
597
|
+
Remember: **In brownfield, the Test Architect isn't optional - it's your insurance policy against breaking production.**
|
package/package.json
CHANGED
|
@@ -4,8 +4,8 @@ const { program } = require('commander');
|
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const fs = require('fs').promises;
|
|
6
6
|
const yaml = require('js-yaml');
|
|
7
|
-
const chalk = require('chalk');
|
|
8
|
-
const inquirer = require('inquirer');
|
|
7
|
+
const chalk = require('chalk').default || require('chalk');
|
|
8
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
9
9
|
const semver = require('semver');
|
|
10
10
|
const https = require('https');
|
|
11
11
|
|
|
@@ -45,7 +45,7 @@ program
|
|
|
45
45
|
.option('-f, --full', 'Install complete BMad Method')
|
|
46
46
|
.option('-x, --expansion-only', 'Install only expansion packs (no bmad-core)')
|
|
47
47
|
.option('-d, --directory <path>', 'Installation directory')
|
|
48
|
-
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, kilo, cline, gemini, qwen-code, github-copilot, other)')
|
|
48
|
+
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, kilo, cline, gemini, qwen-code, github-copilot, crush, other)')
|
|
49
49
|
.option('-e, --expansion-packs <packs...>', 'Install specific expansion packs (can specify multiple)')
|
|
50
50
|
.action(async (options) => {
|
|
51
51
|
try {
|
|
@@ -183,17 +183,17 @@ program
|
|
|
183
183
|
});
|
|
184
184
|
|
|
185
185
|
async function promptInstallation() {
|
|
186
|
-
|
|
186
|
+
|
|
187
187
|
// Display ASCII logo
|
|
188
188
|
console.log(chalk.bold.cyan(`
|
|
189
|
-
âââââââ ââââ ââââ ââââââ âââââââ ââââ ââââââââââââââââââââââââ âââ âââââââ âââââââ
|
|
189
|
+
âââââââ ââââ ââââ ââââââ âââââââ ââââ ââââââââââââââââââââââââ âââ âââââââ âââââââ
|
|
190
190
|
âââââââââââââ âââââââââââââââââââââ âââââ âââââââââââââââââââââââââ ââââââââââââââââââââ
|
|
191
191
|
ââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââ âââ âââââââââââ ââââââ âââ
|
|
192
192
|
ââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââ âââ âââââââââââ ââââââ âââ
|
|
193
193
|
âââââââââââ âââ ââââââ âââââââââââ âââ âââ âââââââââââ âââ âââ ââââââââââââââââââââ
|
|
194
|
-
âââââââ âââ ââââââ ââââââââââ âââ âââââââââââ âââ âââ âââ âââââââ âââââââ
|
|
194
|
+
âââââââ âââ ââââââ ââââââââââ âââ âââââââââââ âââ âââ âââ âââââââ âââââââ
|
|
195
195
|
`));
|
|
196
|
-
|
|
196
|
+
|
|
197
197
|
console.log(chalk.bold.magenta('đ Universal AI Agent Framework for Any Domain'));
|
|
198
198
|
console.log(chalk.bold.blue(`⨠Installer v${version}\n`));
|
|
199
199
|
|
|
@@ -218,63 +218,63 @@ async function promptInstallation() {
|
|
|
218
218
|
// Detect existing installations
|
|
219
219
|
const installDir = path.resolve(directory);
|
|
220
220
|
const state = await installer.detectInstallationState(installDir);
|
|
221
|
-
|
|
221
|
+
|
|
222
222
|
// Check for existing expansion packs
|
|
223
223
|
const existingExpansionPacks = state.expansionPacks || {};
|
|
224
|
-
|
|
224
|
+
|
|
225
225
|
// Get available expansion packs
|
|
226
226
|
const availableExpansionPacks = await installer.getAvailableExpansionPacks();
|
|
227
|
-
|
|
227
|
+
|
|
228
228
|
// Build choices list
|
|
229
229
|
const choices = [];
|
|
230
|
-
|
|
230
|
+
|
|
231
231
|
// Load core config to get short-title
|
|
232
232
|
const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.yaml');
|
|
233
233
|
const coreConfig = yaml.load(await fs.readFile(coreConfigPath, 'utf8'));
|
|
234
234
|
const coreShortTitle = coreConfig['short-title'] || 'BMad Agile Core System';
|
|
235
|
-
|
|
235
|
+
|
|
236
236
|
// Add BMad core option
|
|
237
237
|
let bmadOptionText;
|
|
238
238
|
if (state.type === 'v4_existing') {
|
|
239
239
|
const currentVersion = state.manifest?.version || 'unknown';
|
|
240
240
|
const newVersion = version; // Always use package.json version
|
|
241
|
-
const versionInfo = currentVersion === newVersion
|
|
241
|
+
const versionInfo = currentVersion === newVersion
|
|
242
242
|
? `(v${currentVersion} - reinstall)`
|
|
243
243
|
: `(v${currentVersion} â v${newVersion})`;
|
|
244
244
|
bmadOptionText = `Update ${coreShortTitle} ${versionInfo} .bmad-core`;
|
|
245
245
|
} else {
|
|
246
246
|
bmadOptionText = `${coreShortTitle} (v${version}) .bmad-core`;
|
|
247
247
|
}
|
|
248
|
-
|
|
248
|
+
|
|
249
249
|
choices.push({
|
|
250
250
|
name: bmadOptionText,
|
|
251
251
|
value: 'bmad-core',
|
|
252
252
|
checked: true
|
|
253
253
|
});
|
|
254
|
-
|
|
254
|
+
|
|
255
255
|
// Add expansion pack options
|
|
256
256
|
for (const pack of availableExpansionPacks) {
|
|
257
257
|
const existing = existingExpansionPacks[pack.id];
|
|
258
258
|
let packOptionText;
|
|
259
|
-
|
|
259
|
+
|
|
260
260
|
if (existing) {
|
|
261
261
|
const currentVersion = existing.manifest?.version || 'unknown';
|
|
262
262
|
const newVersion = pack.version;
|
|
263
|
-
const versionInfo = currentVersion === newVersion
|
|
263
|
+
const versionInfo = currentVersion === newVersion
|
|
264
264
|
? `(v${currentVersion} - reinstall)`
|
|
265
265
|
: `(v${currentVersion} â v${newVersion})`;
|
|
266
266
|
packOptionText = `Update ${pack.shortTitle} ${versionInfo} .${pack.id}`;
|
|
267
267
|
} else {
|
|
268
268
|
packOptionText = `${pack.shortTitle} (v${pack.version}) .${pack.id}`;
|
|
269
269
|
}
|
|
270
|
-
|
|
270
|
+
|
|
271
271
|
choices.push({
|
|
272
272
|
name: packOptionText,
|
|
273
273
|
value: pack.id,
|
|
274
274
|
checked: false
|
|
275
275
|
});
|
|
276
276
|
}
|
|
277
|
-
|
|
277
|
+
|
|
278
278
|
// Ask what to install
|
|
279
279
|
const { selectedItems } = await inquirer.prompt([
|
|
280
280
|
{
|
|
@@ -290,7 +290,7 @@ async function promptInstallation() {
|
|
|
290
290
|
}
|
|
291
291
|
}
|
|
292
292
|
]);
|
|
293
|
-
|
|
293
|
+
|
|
294
294
|
// Process selections
|
|
295
295
|
answers.installType = selectedItems.includes('bmad-core') ? 'full' : 'expansion-only';
|
|
296
296
|
answers.expansionPacks = selectedItems.filter(item => item !== 'bmad-core');
|
|
@@ -299,7 +299,7 @@ async function promptInstallation() {
|
|
|
299
299
|
if (selectedItems.includes('bmad-core')) {
|
|
300
300
|
console.log(chalk.cyan('\nđ Document Organization Settings'));
|
|
301
301
|
console.log(chalk.dim('Configure how your project documentation should be organized.\n'));
|
|
302
|
-
|
|
302
|
+
|
|
303
303
|
// Ask about PRD sharding
|
|
304
304
|
const { prdSharded } = await inquirer.prompt([
|
|
305
305
|
{
|
|
@@ -310,7 +310,7 @@ async function promptInstallation() {
|
|
|
310
310
|
}
|
|
311
311
|
]);
|
|
312
312
|
answers.prdSharded = prdSharded;
|
|
313
|
-
|
|
313
|
+
|
|
314
314
|
// Ask about architecture sharding
|
|
315
315
|
const { architectureSharded } = await inquirer.prompt([
|
|
316
316
|
{
|
|
@@ -321,7 +321,7 @@ async function promptInstallation() {
|
|
|
321
321
|
}
|
|
322
322
|
]);
|
|
323
323
|
answers.architectureSharded = architectureSharded;
|
|
324
|
-
|
|
324
|
+
|
|
325
325
|
// Show warning if architecture sharding is disabled
|
|
326
326
|
if (!architectureSharded) {
|
|
327
327
|
console.log(chalk.yellow.bold('\nâ ď¸ IMPORTANT: Architecture Sharding Disabled'));
|
|
@@ -330,7 +330,7 @@ async function promptInstallation() {
|
|
|
330
330
|
console.log(chalk.yellow('as these are used by the dev agent at runtime.'));
|
|
331
331
|
console.log(chalk.yellow('\nAlternatively, you can remove these files from the devLoadAlwaysFiles list'));
|
|
332
332
|
console.log(chalk.yellow('in your core-config.yaml after installation.'));
|
|
333
|
-
|
|
333
|
+
|
|
334
334
|
const { acknowledge } = await inquirer.prompt([
|
|
335
335
|
{
|
|
336
336
|
type: 'confirm',
|
|
@@ -339,7 +339,7 @@ async function promptInstallation() {
|
|
|
339
339
|
default: false
|
|
340
340
|
}
|
|
341
341
|
]);
|
|
342
|
-
|
|
342
|
+
|
|
343
343
|
if (!acknowledge) {
|
|
344
344
|
console.log(chalk.red('Installation cancelled.'));
|
|
345
345
|
process.exit(0);
|
|
@@ -350,14 +350,14 @@ async function promptInstallation() {
|
|
|
350
350
|
// Ask for IDE configuration
|
|
351
351
|
let ides = [];
|
|
352
352
|
let ideSelectionComplete = false;
|
|
353
|
-
|
|
353
|
+
|
|
354
354
|
while (!ideSelectionComplete) {
|
|
355
355
|
console.log(chalk.cyan('\nđ ď¸ IDE Configuration'));
|
|
356
356
|
console.log(chalk.bold.yellow.bgRed(' â ď¸ IMPORTANT: This is a MULTISELECT! Use SPACEBAR to toggle each IDE! '));
|
|
357
357
|
console.log(chalk.bold.magenta('đ¸ Use arrow keys to navigate'));
|
|
358
358
|
console.log(chalk.bold.magenta('đ¸ Use SPACEBAR to select/deselect IDEs'));
|
|
359
359
|
console.log(chalk.bold.magenta('đ¸ Press ENTER when finished selecting\n'));
|
|
360
|
-
|
|
360
|
+
|
|
361
361
|
const ideResponse = await inquirer.prompt([
|
|
362
362
|
{
|
|
363
363
|
type: 'checkbox',
|
|
@@ -373,11 +373,12 @@ async function promptInstallation() {
|
|
|
373
373
|
{ name: 'Cline', value: 'cline' },
|
|
374
374
|
{ name: 'Gemini CLI', value: 'gemini' },
|
|
375
375
|
{ name: 'Qwen Code', value: 'qwen-code' },
|
|
376
|
+
{ name: 'Crush', value: 'crush' },
|
|
376
377
|
{ name: 'Github Copilot', value: 'github-copilot' }
|
|
377
378
|
]
|
|
378
379
|
}
|
|
379
380
|
]);
|
|
380
|
-
|
|
381
|
+
|
|
381
382
|
ides = ideResponse.ides;
|
|
382
383
|
|
|
383
384
|
// Confirm no IDE selection if none selected
|
|
@@ -390,13 +391,13 @@ async function promptInstallation() {
|
|
|
390
391
|
default: false
|
|
391
392
|
}
|
|
392
393
|
]);
|
|
393
|
-
|
|
394
|
+
|
|
394
395
|
if (!confirmNoIde) {
|
|
395
396
|
console.log(chalk.bold.red('\nđ Returning to IDE selection. Remember to use SPACEBAR to select IDEs!\n'));
|
|
396
397
|
continue; // Go back to IDE selection only
|
|
397
398
|
}
|
|
398
399
|
}
|
|
399
|
-
|
|
400
|
+
|
|
400
401
|
ideSelectionComplete = true;
|
|
401
402
|
}
|
|
402
403
|
|
|
@@ -407,7 +408,7 @@ async function promptInstallation() {
|
|
|
407
408
|
if (ides.includes('github-copilot')) {
|
|
408
409
|
console.log(chalk.cyan('\nđ§ GitHub Copilot Configuration'));
|
|
409
410
|
console.log(chalk.dim('BMad works best with specific VS Code settings for optimal agent experience.\n'));
|
|
410
|
-
|
|
411
|
+
|
|
411
412
|
const { configChoice } = await inquirer.prompt([
|
|
412
413
|
{
|
|
413
414
|
type: 'list',
|
|
@@ -430,7 +431,7 @@ async function promptInstallation() {
|
|
|
430
431
|
default: 'defaults'
|
|
431
432
|
}
|
|
432
433
|
]);
|
|
433
|
-
|
|
434
|
+
|
|
434
435
|
answers.githubCopilotConfig = { configChoice };
|
|
435
436
|
}
|
|
436
437
|
|
|
@@ -28,6 +28,16 @@ ide-configurations:
|
|
|
28
28
|
# To use BMad agents in Claude Code:
|
|
29
29
|
# 1. Type /agent-name (e.g., "/dev", "/pm", "/architect")
|
|
30
30
|
# 2. Claude will switch to that agent's persona
|
|
31
|
+
crush:
|
|
32
|
+
name: Crush
|
|
33
|
+
rule-dir: .crush/commands/BMad/
|
|
34
|
+
format: multi-file
|
|
35
|
+
command-suffix: .md
|
|
36
|
+
instructions: |
|
|
37
|
+
# To use BMad agents in Crush:
|
|
38
|
+
# 1. Press CTRL + P and press TAB
|
|
39
|
+
# 2. Select agent or task
|
|
40
|
+
# 3. Crush will switch to that agent's persona / task
|
|
31
41
|
windsurf:
|
|
32
42
|
name: Windsurf
|
|
33
43
|
rule-dir: .windsurf/rules/
|
|
@@ -110,4 +120,4 @@ ide-configurations:
|
|
|
110
120
|
# 1. The installer creates a .qwen/bmad-method/ directory in your project.
|
|
111
121
|
# 2. It concatenates all agent files into a single QWEN.md file.
|
|
112
122
|
# 3. Simply mention the agent in your prompt (e.g., "As *dev, ...").
|
|
113
|
-
# 4. The Qwen Code CLI will automatically have the context for that agent.
|
|
123
|
+
# 4. The Qwen Code CLI will automatically have the context for that agent.
|
|
@@ -2,7 +2,7 @@ const fs = require("fs-extra");
|
|
|
2
2
|
const path = require("path");
|
|
3
3
|
const crypto = require("crypto");
|
|
4
4
|
const yaml = require("js-yaml");
|
|
5
|
-
const chalk = require("chalk");
|
|
5
|
+
const chalk = require("chalk").default || require("chalk");
|
|
6
6
|
const { createReadStream, createWriteStream, promises: fsPromises } = require('fs');
|
|
7
7
|
const { pipeline } = require('stream/promises');
|
|
8
8
|
const resourceLocator = require('./resource-locator');
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
const path = require("path");
|
|
7
7
|
const fs = require("fs-extra");
|
|
8
8
|
const yaml = require("js-yaml");
|
|
9
|
-
const chalk = require("chalk");
|
|
9
|
+
const chalk = require("chalk").default || require("chalk");
|
|
10
10
|
const fileManager = require("./file-manager");
|
|
11
11
|
const resourceLocator = require("./resource-locator");
|
|
12
12
|
const { extractYamlFromAgent } = require("../../lib/yaml-utils");
|