ma-agents 3.5.3 → 3.5.5
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/_bmad-output/implementation-artifacts/21-1-install-time-profile-prompt.md +181 -0
- package/_bmad-output/implementation-artifacts/21-10-profile-reconfigure.md +137 -0
- package/_bmad-output/implementation-artifacts/21-11-profile-uninstall.md +149 -0
- package/_bmad-output/implementation-artifacts/21-2-universal-instruction-block-expansion.md +98 -0
- package/_bmad-output/implementation-artifacts/21-3-roomodes-template-bmad-modes.md +106 -0
- package/_bmad-output/implementation-artifacts/21-4-agents-md-template-opencode.md +86 -0
- package/_bmad-output/implementation-artifacts/21-5-clinerules-template-extension.md +82 -0
- package/_bmad-output/implementation-artifacts/21-6-onprem-layered-guardrails.md +112 -0
- package/_bmad-output/implementation-artifacts/21-7-bmad-persona-phase-prefix.md +126 -0
- package/_bmad-output/implementation-artifacts/21-8-vllm-reference-doc-readme.md +100 -0
- package/_bmad-output/implementation-artifacts/21-9-tests-validation.md +97 -0
- package/_bmad-output/implementation-artifacts/bug-experimentalwarning-about-commonjs-loading-es-module-during-install.md +57 -0
- package/_bmad-output/implementation-artifacts/sprint-status.yaml +43 -1
- package/_bmad-output/methodology/BMAD_AI_Development_Training.pptx +0 -0
- package/_bmad-output/methodology/version.json +1 -1
- package/_bmad-output/planning-artifacts/architecture.md +52 -0
- package/_bmad-output/planning-artifacts/epics.md +397 -0
- package/_bmad-output/planning-artifacts/prd.md +46 -1
- package/bin/cli.js +109 -1
- package/docs/BMAD_AI_Development_Training.pptx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/logs/HEAD +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/logs/refs/heads/main +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-554778ad4e7254827618ebd2497c3f4bce9054a4.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/{pack-4b395d030ca386fc5748f1b670dcf8c0ef41c94c.pack → pack-554778ad4e7254827618ebd2497c3f4bce9054a4.pack} +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-554778ad4e7254827618ebd2497c3f4bce9054a4.rev +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-scaffold-setup-skill.py +7 -0
- package/lib/bmad-cache/cache-manifest.json +5 -5
- package/lib/bmad-cache/tea/_git_preserved/index +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-e75385cd52b693dbb8a3b2afb50058952543b3a2.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-c79805bb3fee27fa6d8c612a971af7fc86fc80e1.pack → pack-e75385cd52b693dbb8a3b2afb50058952543b3a2.pack} +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-e75385cd52b693dbb8a3b2afb50058952543b3a2.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.10.0 +1 -0
- package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +2 -2
- package/lib/bmad-cache/tea/docs/how-to/workflows/run-atdd.md +28 -30
- package/lib/bmad-cache/tea/docs/reference/commands.md +4 -4
- package/lib/bmad-cache/tea/docs/reference/configuration.md +1 -1
- package/lib/bmad-cache/tea/package-lock.json +2 -2
- package/lib/bmad-cache/tea/package.json +1 -1
- package/lib/bmad-cache/tea/src/module-help.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/SKILL.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/atdd-checklist-template.md +50 -27
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/checklist.md +18 -17
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/instructions.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-01-preflight-and-context.md +21 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-01b-resume.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-02-generation-mode.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-03-test-strategy.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04-generate-tests.md +20 -19
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04a-subagent-api-failing.md +13 -13
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04b-subagent-e2e-failing.md +13 -13
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04c-aggregate.md +42 -18
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-05-validate-and-complete.md +12 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/workflow-plan.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/workflow.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/workflow.yaml +2 -2
- package/lib/bmad.js +25 -4
- package/lib/installer.js +2 -1
- package/lib/methodology/BMAD_AI_Development_Training.pptx +0 -0
- package/lib/methodology/version.json +1 -1
- package/lib/profile.js +107 -0
- package/lib/warning-filter.js +245 -0
- package/package.json +2 -2
- package/test/experimental-warning.test.js +314 -0
- package/test/fixtures/README.md +74 -0
- package/test/fixtures/empty-project/README.md +5 -0
- package/test/fixtures/empty-project/package.json +5 -0
- package/test/fixtures/onprem-profile-baseline/.gitkeep +2 -0
- package/test/fixtures/standard-profile-baseline/.gitkeep +2 -0
- package/test/onprem-injection.test.js +48 -0
- package/test/profile.test.js +301 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-4b395d030ca386fc5748f1b670dcf8c0ef41c94c.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-4b395d030ca386fc5748f1b670dcf8c0ef41c94c.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-c79805bb3fee27fa6d8c612a971af7fc86fc80e1.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-c79805bb3fee27fa6d8c612a971af7fc86fc80e1.rev +0 -0
package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/atdd-checklist-template.md
CHANGED
|
@@ -3,6 +3,14 @@ stepsCompleted: []
|
|
|
3
3
|
lastStep: ''
|
|
4
4
|
lastSaved: ''
|
|
5
5
|
workflowType: 'testarch-atdd'
|
|
6
|
+
storyId: '{story_id}'
|
|
7
|
+
storyKey: '{story_key}'
|
|
8
|
+
storyFile: '{story_file}'
|
|
9
|
+
atddChecklistPath: '{test_artifacts}/atdd-checklist-{story_key}.md'
|
|
10
|
+
generatedTestFiles:
|
|
11
|
+
- '{api_test_file_path}'
|
|
12
|
+
- '{e2e_test_file_path}'
|
|
13
|
+
- '{component_test_file_path}'
|
|
6
14
|
inputDocuments: []
|
|
7
15
|
---
|
|
8
16
|
|
|
@@ -34,7 +42,19 @@ inputDocuments: []
|
|
|
34
42
|
|
|
35
43
|
---
|
|
36
44
|
|
|
37
|
-
##
|
|
45
|
+
## Story Integration Metadata
|
|
46
|
+
|
|
47
|
+
- **Story ID:** `{story_id}`
|
|
48
|
+
- **Story Key:** `{story_key}`
|
|
49
|
+
- **Story File:** `{story_file}`
|
|
50
|
+
- **Checklist Path:** `{test_artifacts}/atdd-checklist-{story_key}.md`
|
|
51
|
+
- **Generated Test Files:** `{e2e_test_file_path}`, `{api_test_file_path}`, `{component_test_file_path}`
|
|
52
|
+
|
|
53
|
+
If this story came from BMM `create-story`, mirror these artifact paths into the story's `Dev Notes` so `dev-story` can discover and activate the red-phase scaffolds.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Red-Phase Test Scaffolds Created
|
|
38
58
|
|
|
39
59
|
### E2E Tests ({e2e_test_count} tests)
|
|
40
60
|
|
|
@@ -166,7 +186,7 @@ test('should do something', async ({ {fixtureName} }) => {
|
|
|
166
186
|
|
|
167
187
|
## Implementation Checklist
|
|
168
188
|
|
|
169
|
-
{Map each
|
|
189
|
+
{Map each scaffolded test to concrete implementation tasks that will make it pass}
|
|
170
190
|
|
|
171
191
|
### Test: {test_name_1}
|
|
172
192
|
|
|
@@ -205,7 +225,7 @@ test('should do something', async ({ {fixtureName} }) => {
|
|
|
205
225
|
## Running Tests
|
|
206
226
|
|
|
207
227
|
```bash
|
|
208
|
-
# Run all
|
|
228
|
+
# Run all activated tests for this story
|
|
209
229
|
{test_command_all}
|
|
210
230
|
|
|
211
231
|
# Run specific test file
|
|
@@ -229,7 +249,7 @@ test('should do something', async ({ {fixtureName} }) => {
|
|
|
229
249
|
|
|
230
250
|
**TEA Agent Responsibilities:**
|
|
231
251
|
|
|
232
|
-
- ✅ All tests written
|
|
252
|
+
- ✅ All tests written as red-phase scaffolds with `test.skip()`
|
|
233
253
|
- ✅ Fixtures and factories created with auto-cleanup
|
|
234
254
|
- ✅ Mock requirements documented
|
|
235
255
|
- ✅ data-testid requirements listed
|
|
@@ -237,9 +257,9 @@ test('should do something', async ({ {fixtureName} }) => {
|
|
|
237
257
|
|
|
238
258
|
**Verification:**
|
|
239
259
|
|
|
240
|
-
- All tests
|
|
241
|
-
-
|
|
242
|
-
-
|
|
260
|
+
- All generated tests are present and marked with `test.skip()`
|
|
261
|
+
- Activation guidance is clear and actionable
|
|
262
|
+
- Any activated test fails due to missing implementation, not test bugs
|
|
243
263
|
|
|
244
264
|
---
|
|
245
265
|
|
|
@@ -247,12 +267,13 @@ test('should do something', async ({ {fixtureName} }) => {
|
|
|
247
267
|
|
|
248
268
|
**DEV Agent Responsibilities:**
|
|
249
269
|
|
|
250
|
-
1. **Pick one
|
|
251
|
-
2. **
|
|
252
|
-
3. **
|
|
253
|
-
4. **
|
|
254
|
-
5. **
|
|
255
|
-
6. **
|
|
270
|
+
1. **Pick one scaffolded test** from implementation checklist (start with highest priority)
|
|
271
|
+
2. **Remove `test.skip()`** for that test and confirm it fails first
|
|
272
|
+
3. **Read the test** to understand expected behavior
|
|
273
|
+
4. **Implement minimal code** to make that specific test pass
|
|
274
|
+
5. **Run the test** to verify it now passes (green)
|
|
275
|
+
6. **Check off the task** in implementation checklist
|
|
276
|
+
7. **Move to next test** and repeat
|
|
256
277
|
|
|
257
278
|
**Key Principles:**
|
|
258
279
|
|
|
@@ -297,14 +318,15 @@ test('should do something', async ({ {fixtureName} }) => {
|
|
|
297
318
|
|
|
298
319
|
## Next Steps
|
|
299
320
|
|
|
300
|
-
1. **
|
|
301
|
-
2. **
|
|
302
|
-
3. **
|
|
321
|
+
1. **Link this checklist and generated tests** into the story file `Dev Notes` / `ATDD Artifacts` section when a writable story file is available
|
|
322
|
+
2. **If the story file cannot be updated automatically**, share this checklist and generated tests with the dev workflow as a manual handoff
|
|
323
|
+
3. **Review this checklist** with team in standup or planning
|
|
303
324
|
4. **Begin implementation** using implementation checklist as guide
|
|
304
|
-
5. **
|
|
305
|
-
6. **
|
|
306
|
-
7. **
|
|
307
|
-
8. **When
|
|
325
|
+
5. **Activate one scaffold at a time** by removing `test.skip()` for the current task, then confirm it fails before implementing
|
|
326
|
+
6. **Work one activated test at a time** (red → green for each)
|
|
327
|
+
7. **Share progress** in daily standup
|
|
328
|
+
8. **When all activated tests pass**, refactor code for quality
|
|
329
|
+
9. **When refactoring complete**, manually update story status to 'done' in sprint-status.yaml
|
|
308
330
|
|
|
309
331
|
---
|
|
310
332
|
|
|
@@ -325,25 +347,26 @@ See `tea-index.csv` for complete knowledge fragment mapping.
|
|
|
325
347
|
|
|
326
348
|
## Test Execution Evidence
|
|
327
349
|
|
|
328
|
-
### Initial
|
|
350
|
+
### Initial Scaffold Review / RED Verification
|
|
329
351
|
|
|
330
|
-
**Command:** `{test_command_all}`
|
|
352
|
+
**Command:** `{test_command_all}` (or a narrower command after removing `test.skip()` for the current task)
|
|
331
353
|
|
|
332
354
|
**Results:**
|
|
333
355
|
|
|
334
356
|
```
|
|
335
|
-
{
|
|
357
|
+
{paste_test_run_output_showing_scaffolds_skipped_or_activated_tests_failing}
|
|
336
358
|
```
|
|
337
359
|
|
|
338
360
|
**Summary:**
|
|
339
361
|
|
|
340
362
|
- Total tests: {total_test_count}
|
|
341
|
-
-
|
|
342
|
-
-
|
|
343
|
-
-
|
|
363
|
+
- Skipped: {total_test_count} (expected before activation)
|
|
364
|
+
- Activated RED tests: {activated_test_count} (expected after activation, before implementation)
|
|
365
|
+
- Passing: 0 before implementation (expected for activated tests)
|
|
366
|
+
- Status: ✅ Red-phase scaffolds verified
|
|
344
367
|
|
|
345
368
|
**Expected Failure Messages:**
|
|
346
|
-
{
|
|
369
|
+
{list_expected_skip_or_failure_states_for_each_test}
|
|
347
370
|
|
|
348
371
|
---
|
|
349
372
|
|
|
@@ -50,7 +50,7 @@ Before starting this workflow, verify:
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## Step 3:
|
|
53
|
+
## Step 3: Red-Phase Test Scaffolds Generated
|
|
54
54
|
|
|
55
55
|
### Test File Structure Created
|
|
56
56
|
|
|
@@ -68,8 +68,8 @@ Before starting this workflow, verify:
|
|
|
68
68
|
- [ ] One assertion per test (atomic test design)
|
|
69
69
|
- [ ] No hard waits or sleeps (explicit waits only)
|
|
70
70
|
- [ ] Network-first pattern applied (route interception BEFORE navigation)
|
|
71
|
-
- [ ] Tests
|
|
72
|
-
- [ ]
|
|
71
|
+
- [ ] Tests are generated as `test.skip()` scaffolds
|
|
72
|
+
- [ ] Activation guidance is documented for the current task
|
|
73
73
|
|
|
74
74
|
### API Tests (If Applicable)
|
|
75
75
|
|
|
@@ -79,7 +79,7 @@ Before starting this workflow, verify:
|
|
|
79
79
|
- [ ] HTTP status codes verified
|
|
80
80
|
- [ ] Response body validation includes all required fields
|
|
81
81
|
- [ ] Error cases tested (400, 401, 403, 404, 500)
|
|
82
|
-
- [ ] Tests
|
|
82
|
+
- [ ] Tests are generated as `test.skip()` scaffolds
|
|
83
83
|
|
|
84
84
|
### Component Tests (If Applicable)
|
|
85
85
|
|
|
@@ -89,7 +89,7 @@ Before starting this workflow, verify:
|
|
|
89
89
|
- [ ] Interaction testing covers user actions (click, hover, keyboard)
|
|
90
90
|
- [ ] State management within component validated
|
|
91
91
|
- [ ] Props and events tested
|
|
92
|
-
- [ ] Tests
|
|
92
|
+
- [ ] Tests are generated as `test.skip()` scaffolds
|
|
93
93
|
|
|
94
94
|
### Test Quality Validation
|
|
95
95
|
|
|
@@ -144,7 +144,7 @@ Before starting this workflow, verify:
|
|
|
144
144
|
## Step 5: Implementation Checklist Created
|
|
145
145
|
|
|
146
146
|
- [ ] Implementation checklist created with clear structure
|
|
147
|
-
- [ ] Each
|
|
147
|
+
- [ ] Each scaffolded test mapped to concrete implementation tasks
|
|
148
148
|
- [ ] Tasks include:
|
|
149
149
|
- [ ] Route/component creation
|
|
150
150
|
- [ ] Business logic implementation
|
|
@@ -170,12 +170,12 @@ Before starting this workflow, verify:
|
|
|
170
170
|
|
|
171
171
|
### ATDD Checklist Document Created
|
|
172
172
|
|
|
173
|
-
- [ ] Output file created at `{test_artifacts}/atdd-checklist-{
|
|
173
|
+
- [ ] Output file created at `{test_artifacts}/atdd-checklist-{story_key}.md`
|
|
174
174
|
- [ ] Document follows template structure from `atdd-checklist-template.md`
|
|
175
175
|
- [ ] Document includes all required sections:
|
|
176
176
|
- [ ] Story summary
|
|
177
177
|
- [ ] Acceptance criteria breakdown
|
|
178
|
-
- [ ]
|
|
178
|
+
- [ ] Red-phase test scaffolds created (paths and line counts)
|
|
179
179
|
- [ ] Data factories created
|
|
180
180
|
- [ ] Fixtures created
|
|
181
181
|
- [ ] Mock requirements
|
|
@@ -184,15 +184,16 @@ Before starting this workflow, verify:
|
|
|
184
184
|
- [ ] Red-green-refactor workflow
|
|
185
185
|
- [ ] Execution commands
|
|
186
186
|
- [ ] Next steps for DEV team
|
|
187
|
-
- [ ]
|
|
187
|
+
- [ ] Checklist frontmatter includes `storyId`, `storyKey`, `storyFile`, `atddChecklistPath`, and generated test file paths
|
|
188
|
+
- [ ] If a writable story file was provided, ATDD artifacts were linked back into story context
|
|
189
|
+
- [ ] If a story file could not be updated, manual handoff instructions are present
|
|
188
190
|
|
|
189
|
-
###
|
|
191
|
+
### Red-Phase Scaffolds Verified
|
|
190
192
|
|
|
191
|
-
- [ ]
|
|
192
|
-
- [ ]
|
|
193
|
-
- [ ]
|
|
194
|
-
- [ ]
|
|
195
|
-
- [ ] Failures are due to missing implementation, not test bugs
|
|
193
|
+
- [ ] All generated acceptance test scaffolds are marked with `test.skip()`
|
|
194
|
+
- [ ] No scaffold was emitted as an active passing test before implementation
|
|
195
|
+
- [ ] Activation guidance is documented: remove `test.skip()` for the current task, then confirm RED before implementing
|
|
196
|
+
- [ ] Any assumptions or expected failure reasons are documented in ATDD checklist
|
|
196
197
|
- [ ] Test run output captured for reference
|
|
197
198
|
|
|
198
199
|
### Summary Provided
|
|
@@ -279,9 +280,9 @@ Before starting this workflow, verify:
|
|
|
279
280
|
All of the following must be true before marking this workflow as complete:
|
|
280
281
|
|
|
281
282
|
- [ ] **Story acceptance criteria analyzed** and mapped to appropriate test levels
|
|
282
|
-
- [ ] **
|
|
283
|
+
- [ ] **Red-phase test scaffolds created** at all appropriate levels (E2E, API, Component)
|
|
283
284
|
- [ ] **Given-When-Then format** used consistently across all tests
|
|
284
|
-
- [ ] **RED phase verified** by
|
|
285
|
+
- [ ] **RED phase verified** by scaffold generation plus task-by-task activation guidance
|
|
285
286
|
- [ ] **Network-first pattern** applied to E2E tests with network requests
|
|
286
287
|
- [ ] **Data factories created** using faker (no hardcoded test data)
|
|
287
288
|
- [ ] **Fixtures created** with auto-cleanup in teardown
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## Overview
|
|
10
10
|
|
|
11
|
-
Generates **
|
|
11
|
+
Generates **red-phase acceptance test scaffolds** before implementation (TDD red phase), plus an implementation checklist. Produces tests at appropriate levels (E2E/API/Component) with supporting fixtures and helpers.
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 'step-01-preflight-and-context'
|
|
3
3
|
description: 'Verify prerequisites and load story, framework, and knowledge base'
|
|
4
|
-
outputFile: '{test_artifacts}/atdd-checklist-{
|
|
4
|
+
outputFile: '{test_artifacts}/atdd-checklist-{story_key}.md'
|
|
5
5
|
nextStepFile: './step-02-generation-mode.md'
|
|
6
6
|
knowledgeIndex: './resources/tea-index.csv'
|
|
7
7
|
---
|
|
@@ -10,7 +10,7 @@ knowledgeIndex: './resources/tea-index.csv'
|
|
|
10
10
|
|
|
11
11
|
## STEP GOAL
|
|
12
12
|
|
|
13
|
-
Verify prerequisites and load all required inputs before generating
|
|
13
|
+
Verify prerequisites and load all required inputs before generating red-phase acceptance test scaffolds.
|
|
14
14
|
|
|
15
15
|
## MANDATORY EXECUTION RULES
|
|
16
16
|
|
|
@@ -71,6 +71,17 @@ If any are missing: **HALT** and notify the user.
|
|
|
71
71
|
- Read story markdown from `{story_file}` (or ask user if not provided)
|
|
72
72
|
- Extract acceptance criteria and constraints
|
|
73
73
|
- Identify affected components and integrations
|
|
74
|
+
- Derive and store `story_key` from the story filename when available (for BMM stories, this is the filename without `.md`, e.g. `1-2-user-authentication`)
|
|
75
|
+
- Derive and store `story_id` from story metadata, the H1 heading, or the filename when available (for BMM stories, this is typically `{epic_num}.{story_num}`)
|
|
76
|
+
- If a filename-based `story_key` is not available, create and persist a stable slug from the story title:
|
|
77
|
+
- lowercase the title
|
|
78
|
+
- collapse runs of whitespace to single `-`
|
|
79
|
+
- strip all non-alphanumeric and non-hyphen characters
|
|
80
|
+
- trim leading/trailing hyphens
|
|
81
|
+
- truncate to a safe max length (64 chars)
|
|
82
|
+
- Use that slug as `story_key` and for `{outputFile}` basename so all checklist and handoff paths stay consistent
|
|
83
|
+
- If `story_id` is still unavailable after metadata/H1/filename parsing, set it to the final `story_key` so `story_id` is never empty
|
|
84
|
+
- Preserve `{story_file}` as a tracked artifact path for later handoff into BMM `dev-story`
|
|
74
85
|
|
|
75
86
|
---
|
|
76
87
|
|
|
@@ -210,7 +221,14 @@ Summarize loaded inputs and confirm with the user. Then proceed.
|
|
|
210
221
|
- Set `lastSaved: '{date}'`
|
|
211
222
|
- Append this step's output to the appropriate section.
|
|
212
223
|
|
|
213
|
-
**Update
|
|
224
|
+
**Update frontmatter fields**:
|
|
225
|
+
|
|
226
|
+
- Set `storyId` to `{story_id}`
|
|
227
|
+
- Set `storyKey` to `{story_key}`
|
|
228
|
+
- Set `storyFile` to `{story_file}`
|
|
229
|
+
- Set `atddChecklistPath` to `{outputFile}`
|
|
230
|
+
- Initialize `generatedTestFiles` to `[]`
|
|
231
|
+
- Set `inputDocuments` to the list of artifact paths loaded in this step (e.g., knowledge fragments, test design documents, configuration files)
|
|
214
232
|
|
|
215
233
|
Load next step: `{nextStepFile}`
|
|
216
234
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 'step-02-generation-mode'
|
|
3
3
|
description: 'Choose AI generation or recording mode'
|
|
4
|
-
outputFile: '{test_artifacts}/atdd-checklist-{
|
|
4
|
+
outputFile: '{test_artifacts}/atdd-checklist-{story_key}.md'
|
|
5
5
|
nextStepFile: './step-03-test-strategy.md'
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 'step-03-test-strategy'
|
|
3
3
|
description: 'Map acceptance criteria to test levels and priorities'
|
|
4
|
-
outputFile: '{test_artifacts}/atdd-checklist-{
|
|
4
|
+
outputFile: '{test_artifacts}/atdd-checklist-{story_key}.md'
|
|
5
5
|
nextStepFile: './step-04-generate-tests.md'
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 'step-04-generate-tests'
|
|
3
|
-
description: 'Orchestrate adaptive
|
|
3
|
+
description: 'Orchestrate adaptive red-phase test scaffold generation (TDD red phase)'
|
|
4
4
|
nextStepFile: './step-04c-aggregate.md'
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Step 4: Orchestrate Adaptive
|
|
7
|
+
# Step 4: Orchestrate Adaptive Red-Phase Test Scaffold Generation
|
|
8
8
|
|
|
9
9
|
## STEP GOAL
|
|
10
10
|
|
|
11
|
-
Select execution mode deterministically, then generate
|
|
11
|
+
Select execution mode deterministically, then generate red-phase API and E2E test scaffolds (TDD RED PHASE) with consistent output contracts across agent-team, subagent, or sequential execution.
|
|
12
12
|
|
|
13
13
|
## MANDATORY EXECUTION RULES
|
|
14
14
|
|
|
@@ -16,10 +16,10 @@ Select execution mode deterministically, then generate FAILING API and E2E tests
|
|
|
16
16
|
- ✅ Speak in `{communication_language}`
|
|
17
17
|
- ✅ Resolve execution mode from config (`tea_execution_mode`, `tea_capability_probe`)
|
|
18
18
|
- ✅ Apply fallback rules deterministically when requested mode is unsupported
|
|
19
|
-
- ✅ Generate
|
|
19
|
+
- ✅ Generate red-phase test scaffolds only (TDD red phase)
|
|
20
20
|
- ✅ Wait for required worker steps to complete
|
|
21
21
|
- ❌ Do NOT skip capability checks when probing is enabled
|
|
22
|
-
- ❌ Do NOT generate passing tests (this is red phase)
|
|
22
|
+
- ❌ Do NOT generate active passing tests (this is red phase)
|
|
23
23
|
- ❌ Do NOT proceed until required worker steps finish
|
|
24
24
|
|
|
25
25
|
---
|
|
@@ -162,7 +162,7 @@ If probing is disabled, honor the requested mode strictly. If that mode cannot b
|
|
|
162
162
|
|
|
163
163
|
---
|
|
164
164
|
|
|
165
|
-
### 3. Dispatch Worker A:
|
|
165
|
+
### 3. Dispatch Worker A: Red-Phase API Test Generation
|
|
166
166
|
|
|
167
167
|
**Dispatch worker:**
|
|
168
168
|
|
|
@@ -172,21 +172,21 @@ If probing is disabled, honor the requested mode strictly. If that mode cannot b
|
|
|
172
172
|
- **Execution:**
|
|
173
173
|
- `agent-team` or `subagent`: launch non-blocking
|
|
174
174
|
- `sequential`: run blocking and wait before next dispatch
|
|
175
|
-
- **TDD Phase:** RED (
|
|
175
|
+
- **TDD Phase:** RED (scaffold tests with `test.skip()`)
|
|
176
176
|
|
|
177
177
|
**System Action:**
|
|
178
178
|
|
|
179
179
|
```
|
|
180
|
-
🚀 Launching Subagent A:
|
|
180
|
+
🚀 Launching Subagent A: RED-PHASE API Test Generation
|
|
181
181
|
📝 Output: /tmp/tea-atdd-api-tests-${timestamp}.json
|
|
182
182
|
⚙️ Mode: ${resolvedMode}
|
|
183
|
-
🔴 TDD Phase: RED (tests
|
|
183
|
+
🔴 TDD Phase: RED (tests emitted as `test.skip()` scaffolds)
|
|
184
184
|
⏳ Status: Running...
|
|
185
185
|
```
|
|
186
186
|
|
|
187
187
|
---
|
|
188
188
|
|
|
189
|
-
### 4. Dispatch Worker B:
|
|
189
|
+
### 4. Dispatch Worker B: Red-Phase E2E Test Generation
|
|
190
190
|
|
|
191
191
|
**Dispatch worker:**
|
|
192
192
|
|
|
@@ -196,15 +196,15 @@ If probing is disabled, honor the requested mode strictly. If that mode cannot b
|
|
|
196
196
|
- **Execution:**
|
|
197
197
|
- `agent-team` or `subagent`: launch non-blocking
|
|
198
198
|
- `sequential`: run blocking and wait before next dispatch
|
|
199
|
-
- **TDD Phase:** RED (
|
|
199
|
+
- **TDD Phase:** RED (scaffold tests with `test.skip()`)
|
|
200
200
|
|
|
201
201
|
**System Action:**
|
|
202
202
|
|
|
203
203
|
```
|
|
204
|
-
🚀 Launching Subagent B:
|
|
204
|
+
🚀 Launching Subagent B: RED-PHASE E2E Test Generation
|
|
205
205
|
📝 Output: /tmp/tea-atdd-e2e-tests-${timestamp}.json
|
|
206
206
|
⚙️ Mode: ${resolvedMode}
|
|
207
|
-
🔴 TDD Phase: RED (tests
|
|
207
|
+
🔴 TDD Phase: RED (tests emitted as `test.skip()` scaffolds)
|
|
208
208
|
⏳ Status: Running...
|
|
209
209
|
```
|
|
210
210
|
|
|
@@ -251,14 +251,15 @@ if (!apiOutputExists || !e2eOutputExists) {
|
|
|
251
251
|
**Display TDD status:**
|
|
252
252
|
|
|
253
253
|
```
|
|
254
|
-
🔴 TDD RED PHASE:
|
|
254
|
+
🔴 TDD RED PHASE: Test Scaffolds Generated
|
|
255
255
|
|
|
256
256
|
✅ Both subagents completed:
|
|
257
257
|
- API Tests: Generated with test.skip()
|
|
258
258
|
- E2E Tests: Generated with test.skip()
|
|
259
259
|
|
|
260
260
|
📋 All tests assert EXPECTED behavior
|
|
261
|
-
📋
|
|
261
|
+
📋 Activated tests will FAIL until feature is implemented
|
|
262
|
+
📋 Scaffolds stay skipped until a developer activates the current task
|
|
262
263
|
📋 This is INTENTIONAL (TDD red phase)
|
|
263
264
|
|
|
264
265
|
Next: Aggregation will verify TDD compliance
|
|
@@ -300,8 +301,8 @@ The aggregation step (4C) will:
|
|
|
300
301
|
|
|
301
302
|
Proceed to Step 4C (Aggregation) when:
|
|
302
303
|
|
|
303
|
-
- ✅ Subagent A (API
|
|
304
|
-
- ✅ Subagent B (E2E
|
|
304
|
+
- ✅ Subagent A (API red-phase tests) completed successfully
|
|
305
|
+
- ✅ Subagent B (E2E red-phase tests) completed successfully
|
|
305
306
|
- ✅ Both output files exist and are valid JSON
|
|
306
307
|
- ✅ TDD red phase status reported
|
|
307
308
|
|
|
@@ -309,7 +310,7 @@ Proceed to Step 4C (Aggregation) when:
|
|
|
309
310
|
|
|
310
311
|
- ❌ One or both subagents failed
|
|
311
312
|
- ❌ Output files missing or corrupted
|
|
312
|
-
- ❌ Subagent generated passing tests (wrong - must be
|
|
313
|
+
- ❌ Subagent generated active passing tests (wrong - must be red-phase scaffolds)
|
|
313
314
|
|
|
314
315
|
---
|
|
315
316
|
|
|
@@ -331,4 +332,4 @@ Proceed to Step 4C (Aggregation) when:
|
|
|
331
332
|
- Tests generated without test.skip() (wrong phase)
|
|
332
333
|
- Unsupported requested mode with probing disabled
|
|
333
334
|
|
|
334
|
-
**Master Rule:** TDD RED PHASE requires
|
|
335
|
+
**Master Rule:** TDD RED PHASE requires acceptance test scaffolds marked with `test.skip()`. Mode selection changes orchestration, never red-phase requirements.
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 'step-04a-subagent-api-failing'
|
|
3
|
-
description: 'Subagent: Generate
|
|
3
|
+
description: 'Subagent: Generate red-phase API test scaffolds (TDD red phase)'
|
|
4
4
|
subagent: true
|
|
5
5
|
outputFile: '/tmp/tea-atdd-api-tests-{{timestamp}}.json'
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# Subagent 4A: Generate
|
|
8
|
+
# Subagent 4A: Generate Red-Phase API Test Scaffolds (TDD Red Phase)
|
|
9
9
|
|
|
10
10
|
## SUBAGENT CONTEXT
|
|
11
11
|
|
|
12
|
-
This is an **isolated subagent** running in parallel with E2E
|
|
12
|
+
This is an **isolated subagent** running in parallel with E2E red-phase test generation.
|
|
13
13
|
|
|
14
14
|
**What you have from parent workflow:**
|
|
15
15
|
|
|
@@ -21,19 +21,19 @@ This is an **isolated subagent** running in parallel with E2E failing test gener
|
|
|
21
21
|
|
|
22
22
|
**If `use_pactjs_utils` is enabled:** Also generate consumer contract tests alongside API tests. Use the loaded pactjs-utils fragments (`pactjs-utils-overview`, `pactjs-utils-consumer-helpers`, `pactjs-utils-provider-verifier`, `pactjs-utils-request-filter`, `pact-consumer-di`) for patterns. If `pact_mcp` is `"mcp"`, use SmartBear MCP tools (Fetch Provider States, Generate Pact Tests) to inform test generation.
|
|
23
23
|
|
|
24
|
-
**Your task:** Generate API
|
|
24
|
+
**Your task:** Generate API test scaffolds for the feature's expected behavior. They stay in `test.skip()` until the developer activates them for the current task (TDD RED PHASE).
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
## MANDATORY EXECUTION RULES
|
|
29
29
|
|
|
30
30
|
- 📖 Read this entire subagent file before acting
|
|
31
|
-
- ✅ Generate
|
|
32
|
-
- ✅ Tests MUST
|
|
31
|
+
- ✅ Generate red-phase API test scaffolds ONLY
|
|
32
|
+
- ✅ Tests MUST be emitted with `test.skip()` until the developer activates them
|
|
33
33
|
- ✅ Output structured JSON to temp file
|
|
34
34
|
- ✅ Follow knowledge fragment patterns
|
|
35
35
|
- ❌ Do NOT generate E2E tests (that's subagent 4B)
|
|
36
|
-
- ❌ Do NOT generate passing tests (this is TDD red phase)
|
|
36
|
+
- ❌ Do NOT generate active passing tests (this is TDD red phase)
|
|
37
37
|
- ❌ Do NOT run tests (that's step 5)
|
|
38
38
|
|
|
39
39
|
---
|
|
@@ -59,7 +59,7 @@ Story: User Registration
|
|
|
59
59
|
- System returns 422 Unprocessable Entity if validation fails
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
### 2. Generate
|
|
62
|
+
### 2. Generate Red-Phase API Test Files
|
|
63
63
|
|
|
64
64
|
For each API endpoint, create test file in `tests/api/[feature].spec.ts`:
|
|
65
65
|
|
|
@@ -108,7 +108,7 @@ test.describe('[Story Name] API Tests (ATDD)', () => {
|
|
|
108
108
|
|
|
109
109
|
**CRITICAL ATDD Requirements:**
|
|
110
110
|
|
|
111
|
-
- ✅ Use `test.skip()` to mark tests as
|
|
111
|
+
- ✅ Use `test.skip()` to mark tests as red-phase scaffolds
|
|
112
112
|
- ✅ Write assertions for EXPECTED behavior (even though not implemented)
|
|
113
113
|
- ✅ Use realistic test data (not placeholder data)
|
|
114
114
|
- ✅ Test both happy path and error scenarios from acceptance criteria
|
|
@@ -213,7 +213,7 @@ Write JSON to temp file: `/tmp/tea-atdd-api-tests-{{timestamp}}.json`
|
|
|
213
213
|
{
|
|
214
214
|
"file": "tests/api/user-registration.spec.ts",
|
|
215
215
|
"content": "[full TypeScript test file content with test.skip()]",
|
|
216
|
-
"description": "ATDD API
|
|
216
|
+
"description": "ATDD API test scaffolds for user registration (RED PHASE)",
|
|
217
217
|
"expected_to_fail": true,
|
|
218
218
|
"acceptance_criteria_covered": [
|
|
219
219
|
"User can register with email/password",
|
|
@@ -239,7 +239,7 @@ Write JSON to temp file: `/tmp/tea-atdd-api-tests-{{timestamp}}.json`
|
|
|
239
239
|
"test_count": 3,
|
|
240
240
|
"tdd_phase": "RED",
|
|
241
241
|
"provider_scrutiny": "completed",
|
|
242
|
-
"summary": "Generated 3
|
|
242
|
+
"summary": "Generated 3 red-phase API test scaffolds for user registration story"
|
|
243
243
|
}
|
|
244
244
|
```
|
|
245
245
|
|
|
@@ -263,7 +263,7 @@ Write JSON to temp file: `/tmp/tea-atdd-api-tests-{{timestamp}}.json`
|
|
|
263
263
|
Subagent completes when:
|
|
264
264
|
|
|
265
265
|
- ✅ All API endpoints from acceptance criteria have test files
|
|
266
|
-
- ✅ All tests use `test.skip()` (documented
|
|
266
|
+
- ✅ All tests use `test.skip()` (documented red-phase scaffolds)
|
|
267
267
|
- ✅ All tests assert EXPECTED behavior (not placeholder assertions)
|
|
268
268
|
- ✅ JSON output written to temp file
|
|
269
269
|
- ✅ Fixture needs to be tracked
|
|
@@ -286,7 +286,7 @@ Subagent completes when:
|
|
|
286
286
|
|
|
287
287
|
### ❌ FAILURE:
|
|
288
288
|
|
|
289
|
-
- Generated passing tests (wrong - this is RED phase)
|
|
289
|
+
- Generated active passing tests (wrong - this is RED phase)
|
|
290
290
|
- Tests without test.skip() (will break CI)
|
|
291
291
|
- Placeholder assertions (expect(true).toBe(true))
|
|
292
292
|
- Did not follow knowledge fragment patterns
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 'step-04b-subagent-e2e-failing'
|
|
3
|
-
description: 'Subagent: Generate
|
|
3
|
+
description: 'Subagent: Generate red-phase E2E test scaffolds (TDD red phase)'
|
|
4
4
|
subagent: true
|
|
5
5
|
outputFile: '/tmp/tea-atdd-e2e-tests-{{timestamp}}.json'
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# Subagent 4B: Generate
|
|
8
|
+
# Subagent 4B: Generate Red-Phase E2E Test Scaffolds (TDD Red Phase)
|
|
9
9
|
|
|
10
10
|
## SUBAGENT CONTEXT
|
|
11
11
|
|
|
12
|
-
This is an **isolated subagent** running in parallel with API
|
|
12
|
+
This is an **isolated subagent** running in parallel with API red-phase test generation.
|
|
13
13
|
|
|
14
14
|
**What you have from parent workflow:**
|
|
15
15
|
|
|
@@ -18,19 +18,19 @@ This is an **isolated subagent** running in parallel with API failing test gener
|
|
|
18
18
|
- Knowledge fragments loaded: fixture-architecture, network-first, selector-resilience
|
|
19
19
|
- Config: test framework, Playwright Utils enabled/disabled
|
|
20
20
|
|
|
21
|
-
**Your task:** Generate E2E
|
|
21
|
+
**Your task:** Generate E2E test scaffolds for the feature's expected UI behavior. They stay in `test.skip()` until the developer activates them for the current task (TDD RED PHASE).
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
25
|
## MANDATORY EXECUTION RULES
|
|
26
26
|
|
|
27
27
|
- 📖 Read this entire subagent file before acting
|
|
28
|
-
- ✅ Generate
|
|
29
|
-
- ✅ Tests MUST
|
|
28
|
+
- ✅ Generate red-phase E2E test scaffolds ONLY
|
|
29
|
+
- ✅ Tests MUST be emitted with `test.skip()` until the developer activates them
|
|
30
30
|
- ✅ Output structured JSON to temp file
|
|
31
31
|
- ✅ Follow knowledge fragment patterns
|
|
32
32
|
- ❌ Do NOT generate API tests (that's subagent 4A)
|
|
33
|
-
- ❌ Do NOT generate passing tests (this is TDD red phase)
|
|
33
|
+
- ❌ Do NOT generate active passing tests (this is TDD red phase)
|
|
34
34
|
- ❌ Do NOT run tests (that's step 5)
|
|
35
35
|
|
|
36
36
|
---
|
|
@@ -89,7 +89,7 @@ If `none`:
|
|
|
89
89
|
|
|
90
90
|
- Generate selectors from best practices without browser verification
|
|
91
91
|
|
|
92
|
-
### 3. Generate
|
|
92
|
+
### 3. Generate Red-Phase E2E Test Files
|
|
93
93
|
|
|
94
94
|
For each user journey, create test file in `tests/e2e/[feature].spec.ts`:
|
|
95
95
|
|
|
@@ -129,7 +129,7 @@ test.describe('[Story Name] E2E User Journey (ATDD)', () => {
|
|
|
129
129
|
|
|
130
130
|
**CRITICAL ATDD Requirements:**
|
|
131
131
|
|
|
132
|
-
- ✅ Use `test.skip()` to mark tests as
|
|
132
|
+
- ✅ Use `test.skip()` to mark tests as red-phase scaffolds
|
|
133
133
|
- ✅ Write assertions for EXPECTED UI behavior (even though not implemented)
|
|
134
134
|
- ✅ Use resilient selectors: getByRole, getByText, getByLabel (from selector-resilience)
|
|
135
135
|
- ✅ Follow network-first patterns if API calls involved (from network-first)
|
|
@@ -169,7 +169,7 @@ Write JSON to temp file: `/tmp/tea-atdd-e2e-tests-{{timestamp}}.json`
|
|
|
169
169
|
{
|
|
170
170
|
"file": "tests/e2e/user-registration.spec.ts",
|
|
171
171
|
"content": "[full TypeScript test file content with test.skip()]",
|
|
172
|
-
"description": "ATDD E2E
|
|
172
|
+
"description": "ATDD E2E test scaffolds for user registration journey (RED PHASE)",
|
|
173
173
|
"expected_to_fail": true,
|
|
174
174
|
"acceptance_criteria_covered": [
|
|
175
175
|
"User can navigate to /register",
|
|
@@ -189,7 +189,7 @@ Write JSON to temp file: `/tmp/tea-atdd-e2e-tests-{{timestamp}}.json`
|
|
|
189
189
|
"knowledge_fragments_used": ["fixture-architecture", "network-first", "selector-resilience"],
|
|
190
190
|
"test_count": 2,
|
|
191
191
|
"tdd_phase": "RED",
|
|
192
|
-
"summary": "Generated 2
|
|
192
|
+
"summary": "Generated 2 red-phase E2E test scaffolds for user registration story"
|
|
193
193
|
}
|
|
194
194
|
```
|
|
195
195
|
|
|
@@ -213,7 +213,7 @@ Write JSON to temp file: `/tmp/tea-atdd-e2e-tests-{{timestamp}}.json`
|
|
|
213
213
|
Subagent completes when:
|
|
214
214
|
|
|
215
215
|
- ✅ All user journeys from acceptance criteria have test files
|
|
216
|
-
- ✅ All tests use `test.skip()` (documented
|
|
216
|
+
- ✅ All tests use `test.skip()` (documented red-phase scaffolds)
|
|
217
217
|
- ✅ All tests assert EXPECTED UI behavior (not placeholder assertions)
|
|
218
218
|
- ✅ Resilient selectors used (getByRole, getByText)
|
|
219
219
|
- ✅ JSON output written to temp file
|
|
@@ -236,7 +236,7 @@ Subagent completes when:
|
|
|
236
236
|
|
|
237
237
|
### ❌ FAILURE:
|
|
238
238
|
|
|
239
|
-
- Generated passing tests (wrong - this is RED phase)
|
|
239
|
+
- Generated active passing tests (wrong - this is RED phase)
|
|
240
240
|
- Tests without test.skip() (will break CI)
|
|
241
241
|
- Placeholder assertions (expect(true).toBe(true))
|
|
242
242
|
- Brittle selectors used (CSS classes, XPath)
|