@hyperdrive.bot/bmad-workflow 1.0.12 → 1.0.13
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.
|
@@ -390,10 +390,11 @@ export declare class WorkflowOrchestrator {
|
|
|
390
390
|
/**
|
|
391
391
|
* Execute QA phase
|
|
392
392
|
*
|
|
393
|
-
* Runs QA workflow on
|
|
393
|
+
* Runs QA workflow on stories matching the workflow prefix.
|
|
394
394
|
* Dynamically imports and delegates to StoriesQaCommand.
|
|
395
395
|
*
|
|
396
396
|
* @param config - Workflow configuration
|
|
397
|
+
* @param detection - Input detection result for prefix resolution
|
|
397
398
|
* @returns PhaseResult with success count, failures, and duration
|
|
398
399
|
* @private
|
|
399
400
|
*/
|
|
@@ -402,6 +403,7 @@ export declare class WorkflowOrchestrator {
|
|
|
402
403
|
* Execute QA phase if needed
|
|
403
404
|
*
|
|
404
405
|
* @param config - Workflow configuration
|
|
406
|
+
* @param detection - Input detection result for prefix resolution
|
|
405
407
|
* @param devPhase - Dev phase result
|
|
406
408
|
* @param shouldExecute - Whether to execute QA phase
|
|
407
409
|
* @returns QA phase result
|
|
@@ -112,7 +112,7 @@ export class WorkflowOrchestrator {
|
|
|
112
112
|
return this.buildFailureResult(startTime, epicPhase);
|
|
113
113
|
}
|
|
114
114
|
const { devPhase, storyPhase } = await this.executeStoryAndDevPhases(config, detection, epicPhase, phaseFlags, startTime);
|
|
115
|
-
const qaPhase = await this.executeQaPhaseIfNeeded(config, devPhase, phaseFlags.shouldExecuteQaPhase);
|
|
115
|
+
const qaPhase = await this.executeQaPhaseIfNeeded(config, detection, devPhase, phaseFlags.shouldExecuteQaPhase);
|
|
116
116
|
return this.buildSuccessResult(startTime, epicPhase, storyPhase, devPhase, qaPhase);
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
@@ -1126,14 +1126,15 @@ Write output to: ${outputPath}`;
|
|
|
1126
1126
|
/**
|
|
1127
1127
|
* Execute QA phase
|
|
1128
1128
|
*
|
|
1129
|
-
* Runs QA workflow on
|
|
1129
|
+
* Runs QA workflow on stories matching the workflow prefix.
|
|
1130
1130
|
* Dynamically imports and delegates to StoriesQaCommand.
|
|
1131
1131
|
*
|
|
1132
1132
|
* @param config - Workflow configuration
|
|
1133
|
+
* @param detection - Input detection result for prefix resolution
|
|
1133
1134
|
* @returns PhaseResult with success count, failures, and duration
|
|
1134
1135
|
* @private
|
|
1135
1136
|
*/
|
|
1136
|
-
async executeQaPhase(config) {
|
|
1137
|
+
async executeQaPhase(config, detection) {
|
|
1137
1138
|
const startTime = Date.now();
|
|
1138
1139
|
const failures = [];
|
|
1139
1140
|
let successCount = 0;
|
|
@@ -1143,8 +1144,9 @@ Write output to: ${outputPath}`;
|
|
|
1143
1144
|
try {
|
|
1144
1145
|
// Get QA story directory
|
|
1145
1146
|
const qaStoryDir = await this.pathResolver.getQaStoryDir();
|
|
1146
|
-
// Find
|
|
1147
|
-
const
|
|
1147
|
+
// Find stories matching the workflow prefix
|
|
1148
|
+
const prefix = this.resolvePrefix(config, detection);
|
|
1149
|
+
const storyPattern = `${prefix}-story-*.md`;
|
|
1148
1150
|
const storyFiles = await this.fileManager.listFiles(qaStoryDir, storyPattern);
|
|
1149
1151
|
if (storyFiles.length === 0) {
|
|
1150
1152
|
this.logger.info('No stories found in QA folder, skipping QA phase');
|
|
@@ -1159,9 +1161,9 @@ Write output to: ${outputPath}`;
|
|
|
1159
1161
|
this.logger.info({ storyCount: storyFiles.length }, 'Found stories for QA phase');
|
|
1160
1162
|
// Dynamically import QA command to avoid circular dependencies
|
|
1161
1163
|
const { default: StoriesQaCommand } = await import('../../commands/stories/qa.js');
|
|
1162
|
-
// Process each story through QA
|
|
1164
|
+
// Process each story through QA (storyFile is already an absolute path from listFiles)
|
|
1163
1165
|
for (const storyFile of storyFiles) {
|
|
1164
|
-
const storyPath =
|
|
1166
|
+
const storyPath = storyFile;
|
|
1165
1167
|
this.logger.info({ storyPath }, 'Running QA workflow for story');
|
|
1166
1168
|
try {
|
|
1167
1169
|
// Build args for QA command
|
|
@@ -1229,12 +1231,13 @@ Write output to: ${outputPath}`;
|
|
|
1229
1231
|
* Execute QA phase if needed
|
|
1230
1232
|
*
|
|
1231
1233
|
* @param config - Workflow configuration
|
|
1234
|
+
* @param detection - Input detection result for prefix resolution
|
|
1232
1235
|
* @param devPhase - Dev phase result
|
|
1233
1236
|
* @param shouldExecute - Whether to execute QA phase
|
|
1234
1237
|
* @returns QA phase result
|
|
1235
1238
|
* @private
|
|
1236
1239
|
*/
|
|
1237
|
-
async executeQaPhaseIfNeeded(config, devPhase, shouldExecute) {
|
|
1240
|
+
async executeQaPhaseIfNeeded(config, detection, devPhase, shouldExecute) {
|
|
1238
1241
|
if (!shouldExecute || !devPhase || devPhase.success === 0) {
|
|
1239
1242
|
return this.createSkippedPhaseResult('qa');
|
|
1240
1243
|
}
|
|
@@ -1242,7 +1245,7 @@ Write output to: ${outputPath}`;
|
|
|
1242
1245
|
this.logger.info('[DRY RUN] Would execute QA phase');
|
|
1243
1246
|
return this.createSkippedPhaseResult('qa');
|
|
1244
1247
|
}
|
|
1245
|
-
return this.executeQaPhase(config);
|
|
1248
|
+
return this.executeQaPhase(config, detection);
|
|
1246
1249
|
}
|
|
1247
1250
|
/**
|
|
1248
1251
|
* Execute dev phase in sequential mode
|
package/package.json
CHANGED