@lbruton/specflow 3.5.2 → 3.5.4
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/dist/core/migration.d.ts.map +1 -1
- package/dist/core/migration.js +29 -1
- package/dist/core/migration.js.map +1 -1
- package/dist/core/workspace-initializer.d.ts.map +1 -1
- package/dist/core/workspace-initializer.js +4 -1
- package/dist/core/workspace-initializer.js.map +1 -1
- package/dist/prompts/create-spec.d.ts.map +1 -1
- package/dist/prompts/create-spec.js +9 -4
- package/dist/prompts/create-spec.js.map +1 -1
- package/dist/prompts/create-steering-doc.d.ts.map +1 -1
- package/dist/prompts/create-steering-doc.js +10 -5
- package/dist/prompts/create-steering-doc.js.map +1 -1
- package/dist/prompts/implement-task.d.ts.map +1 -1
- package/dist/prompts/implement-task.js +18 -11
- package/dist/prompts/implement-task.js.map +1 -1
- package/dist/prompts/inject-steering-guide.js +2 -2
- package/dist/prompts/spec-status.d.ts.map +1 -1
- package/dist/prompts/spec-status.js +4 -2
- package/dist/prompts/spec-status.js.map +1 -1
- package/dist/tools/spec-workflow-guide.d.ts.map +1 -1
- package/dist/tools/spec-workflow-guide.js +64 -62
- package/dist/tools/spec-workflow-guide.js.map +1 -1
- package/dist/tools/steering-guide.d.ts.map +1 -1
- package/dist/tools/steering-guide.js +28 -26
- package/dist/tools/steering-guide.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/core/migration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAgBD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/core/migration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAgBD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,eAAe,CAAC,CA4D1B"}
|
package/dist/core/migration.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* folder to the corresponding DocVault location defined in ResolvedConfig.
|
|
6
6
|
* Skips destinations that already contain files to prevent data loss.
|
|
7
7
|
*/
|
|
8
|
-
import { readdir, cp, access } from 'fs/promises';
|
|
8
|
+
import { readdir, cp, access, rm } from 'fs/promises';
|
|
9
9
|
import { join } from 'path';
|
|
10
10
|
import { constants } from 'fs';
|
|
11
11
|
import { ensureDirectoryExists } from './path-utils.js';
|
|
@@ -34,6 +34,17 @@ export async function needsMigration(projectPath, _config) {
|
|
|
34
34
|
return true;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
// Also check for legacy dirs that need cleanup (e.g., templates/)
|
|
38
|
+
const legacyDirs = ['templates'];
|
|
39
|
+
for (const dir of legacyDirs) {
|
|
40
|
+
try {
|
|
41
|
+
await access(join(localRoot, dir), constants.F_OK);
|
|
42
|
+
return true; // Legacy dir exists and needs cleanup
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Doesn't exist
|
|
46
|
+
}
|
|
47
|
+
}
|
|
37
48
|
return false;
|
|
38
49
|
}
|
|
39
50
|
/**
|
|
@@ -74,6 +85,9 @@ export async function migrateToDocVault(projectPath, config) {
|
|
|
74
85
|
await cp(srcPath, destPath, { recursive: true });
|
|
75
86
|
console.error(`[migration] Copied ${srcDir}/ → ${destPath}`);
|
|
76
87
|
result.migratedDirs.push(srcDir);
|
|
88
|
+
// Clean up local source after successful copy
|
|
89
|
+
await rm(srcPath, { recursive: true });
|
|
90
|
+
console.error(`[migration] Cleaned up local ${srcDir}/`);
|
|
77
91
|
}
|
|
78
92
|
catch (err) {
|
|
79
93
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -81,6 +95,20 @@ export async function migrateToDocVault(projectPath, config) {
|
|
|
81
95
|
result.errors.push(`${srcDir}: ${msg}`);
|
|
82
96
|
}
|
|
83
97
|
}
|
|
98
|
+
// Clean up legacy local directories that are no longer needed
|
|
99
|
+
// These were auto-created by old WorkspaceInitializer but are now in DocVault
|
|
100
|
+
const legacyCleanup = ['templates'];
|
|
101
|
+
for (const dir of legacyCleanup) {
|
|
102
|
+
const dirPath = join(localRoot, dir);
|
|
103
|
+
try {
|
|
104
|
+
await access(dirPath, constants.F_OK);
|
|
105
|
+
await rm(dirPath, { recursive: true });
|
|
106
|
+
console.error(`[migration] Cleaned up legacy local ${dir}/`);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Doesn't exist, nothing to clean
|
|
110
|
+
}
|
|
111
|
+
}
|
|
84
112
|
return result;
|
|
85
113
|
}
|
|
86
114
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/core/migration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/core/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-initializer.d.ts","sourceRoot":"","sources":["../../src/core/workspace-initializer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAiB;gBAEpB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IAMnE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-initializer.d.ts","sourceRoot":"","sources":["../../src/core/workspace-initializer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAiB;gBAEpB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IAMnE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;YAyB5B,qBAAqB;YAkBrB,mBAAmB;YAsBnB,6BAA6B;YAqB7B,yBAAyB;YAoBzB,oBAAoB;YAWpB,YAAY;YAkBZ,yBAAyB;IA8EvC;;;OAGG;YACW,yBAAyB;CAgBxC"}
|
|
@@ -23,7 +23,10 @@ export class WorkspaceInitializer {
|
|
|
23
23
|
await fs.mkdir(localRoot, { recursive: true });
|
|
24
24
|
await this.initializeDocVaultDirectories();
|
|
25
25
|
await this.initializeGlobalTemplates();
|
|
26
|
-
|
|
26
|
+
// NOTE: Do NOT call initializeTemplates() here — global templates
|
|
27
|
+
// are in DocVault/specflow/templates/ and project overrides come
|
|
28
|
+
// from migration (user-templates/ → templates/). We don't duplicate
|
|
29
|
+
// globals into the project folder.
|
|
27
30
|
await this.initializeIndexFiles();
|
|
28
31
|
}
|
|
29
32
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-initializer.js","sourceRoot":"","sources":["../../src/core/workspace-initializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,OAAO,oBAAoB;IACvB,WAAW,CAAS;IACpB,OAAO,CAAS;IAChB,MAAM,CAAkB;IAEhC,YAAY,WAAmB,EAAE,OAAe,EAAE,MAAuB;QACvE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,sEAAsE;YACtE,uDAAuD;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACtD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/C,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACvC,
|
|
1
|
+
{"version":3,"file":"workspace-initializer.js","sourceRoot":"","sources":["../../src/core/workspace-initializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-spec.d.ts","sourceRoot":"","sources":["../../src/prompts/create-spec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"create-spec.d.ts","sourceRoot":"","sources":["../../src/prompts/create-spec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAuG9C,eAAO,MAAM,gBAAgB,EAAE,gBAG9B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PathUtils } from '../core/path-utils.js';
|
|
1
2
|
const prompt = {
|
|
2
3
|
name: 'create-spec',
|
|
3
4
|
title: 'Create Specification Document',
|
|
@@ -29,6 +30,10 @@ async function handler(args, context) {
|
|
|
29
30
|
if (!validDocTypes.includes(documentType)) {
|
|
30
31
|
throw new Error(`documentType must be one of: ${validDocTypes.join(', ')}`);
|
|
31
32
|
}
|
|
33
|
+
// Resolve paths through PathUtils (DocVault-aware)
|
|
34
|
+
const workflowRoot = PathUtils.getWorkflowRoot(context.projectPath);
|
|
35
|
+
const templatesDir = `${workflowRoot}/templates`;
|
|
36
|
+
const specDir = `${workflowRoot}/specs/${specName}`;
|
|
32
37
|
// Build context-aware messages
|
|
33
38
|
const messages = [
|
|
34
39
|
{
|
|
@@ -45,17 +50,17 @@ ${description ? `- Description: ${description}` : ''}
|
|
|
45
50
|
${context.dashboardUrl ? `- Dashboard: ${context.dashboardUrl}` : ''}
|
|
46
51
|
|
|
47
52
|
**Instructions:**
|
|
48
|
-
1. First, read the template at:
|
|
53
|
+
1. First, read the template at: ${templatesDir}/${documentType}-template.md
|
|
49
54
|
2. Follow the template structure exactly - this ensures consistency across the project
|
|
50
55
|
3. Create comprehensive content that follows spec-driven development best practices
|
|
51
56
|
4. Include all required sections from the template
|
|
52
57
|
5. Use clear, actionable language
|
|
53
|
-
6. Create the document at:
|
|
58
|
+
6. Create the document at: ${specDir}/${documentType}.md
|
|
54
59
|
7. After creating, use approvals tool with action:'request' to get user approval
|
|
55
60
|
|
|
56
61
|
**File Paths:**
|
|
57
|
-
- Template location:
|
|
58
|
-
- Document destination:
|
|
62
|
+
- Template location: ${templatesDir}/${documentType}-template.md
|
|
63
|
+
- Document destination: ${specDir}/${documentType}.md
|
|
59
64
|
|
|
60
65
|
**Workflow Guidelines:**
|
|
61
66
|
- Requirements documents define WHAT needs to be built
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-spec.js","sourceRoot":"","sources":["../../src/prompts/create-spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-spec.js","sourceRoot":"","sources":["../../src/prompts/create-spec.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,+BAA+B;IACtC,WAAW,EAAE,qKAAqK;IAClL,SAAS,EAAE;QACT;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,iJAAiJ;YAC9J,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAyB,EAAE,OAAoB;IACpE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAErD,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,gCAAgC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,mDAAmD;IACnD,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,GAAG,YAAY,YAAY,CAAC;IACjD,MAAM,OAAO,GAAG,GAAG,YAAY,UAAU,QAAQ,EAAE,CAAC;IAEpD,+BAA+B;IAC/B,MAAM,QAAQ,GAAoB;QAChC;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY,YAAY,sBAAsB,QAAQ;;;aAGvD,OAAO,CAAC,WAAW;aACnB,QAAQ;mBACF,YAAY;EAC7B,WAAW,CAAC,CAAC,CAAC,kBAAkB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;EAClD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;;;kCAGlC,YAAY,IAAI,YAAY;;;;;6BAKjC,OAAO,IAAI,YAAY;;;;uBAI7B,YAAY,IAAI,YAAY;0BACzB,OAAO,IAAI,YAAY;;;;;;;;;EAS/C,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC;;;;;;;;;;;;;;CAc5B,CAAC,CAAC,CAAC,EAAE;;kBAEY,YAAY,wEAAwE;aAC/F;SACF;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,MAAM;IACN,OAAO;CACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-steering-doc.d.ts","sourceRoot":"","sources":["../../src/prompts/create-steering-doc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"create-steering-doc.d.ts","sourceRoot":"","sources":["../../src/prompts/create-steering-doc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAmF9C,eAAO,MAAM,uBAAuB,EAAE,gBAGrC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PathUtils } from '../core/path-utils.js';
|
|
1
2
|
const prompt = {
|
|
2
3
|
name: 'create-steering-doc',
|
|
3
4
|
title: 'Create Steering Document',
|
|
@@ -24,6 +25,10 @@ async function handler(args, context) {
|
|
|
24
25
|
if (!validDocTypes.includes(docType)) {
|
|
25
26
|
throw new Error(`docType must be one of: ${validDocTypes.join(', ')}`);
|
|
26
27
|
}
|
|
28
|
+
// Resolve paths through PathUtils (DocVault-aware)
|
|
29
|
+
const workflowRoot = PathUtils.getWorkflowRoot(context.projectPath);
|
|
30
|
+
const templatesDir = `${workflowRoot}/templates`;
|
|
31
|
+
const steeringDir = `${workflowRoot}/steering`;
|
|
27
32
|
const messages = [
|
|
28
33
|
{
|
|
29
34
|
role: 'user',
|
|
@@ -38,15 +43,15 @@ ${scope ? `- Scope: ${scope}` : ''}
|
|
|
38
43
|
${context.dashboardUrl ? `- Dashboard: ${context.dashboardUrl}` : ''}
|
|
39
44
|
|
|
40
45
|
**Instructions:**
|
|
41
|
-
1. First, read the template at:
|
|
42
|
-
2. Check if steering docs exist at:
|
|
46
|
+
1. First, read the template at: ${templatesDir}/${docType}-template.md
|
|
47
|
+
2. Check if steering docs exist at: ${steeringDir}/
|
|
43
48
|
3. Create comprehensive content following the template structure
|
|
44
|
-
4. Create the document at:
|
|
49
|
+
4. Create the document at: ${steeringDir}/${docType}.md
|
|
45
50
|
5. After creating, use approvals tool with action:'request' to get user approval
|
|
46
51
|
|
|
47
52
|
**File Paths:**
|
|
48
|
-
- Template location:
|
|
49
|
-
- Document destination:
|
|
53
|
+
- Template location: ${templatesDir}/${docType}-template.md
|
|
54
|
+
- Document destination: ${steeringDir}/${docType}.md
|
|
50
55
|
|
|
51
56
|
**Steering Document Types:**
|
|
52
57
|
- **product**: Defines project vision, goals, and user outcomes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-steering-doc.js","sourceRoot":"","sources":["../../src/prompts/create-steering-doc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-steering-doc.js","sourceRoot":"","sources":["../../src/prompts/create-steering-doc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE,kJAAkJ;IAC/J,SAAS,EAAE;QACT;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,wDAAwD;YACrE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,sEAAsE;YACnF,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAyB,EAAE,OAAoB;IACpE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,2BAA2B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,mDAAmD;IACnD,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,GAAG,YAAY,YAAY,CAAC;IACjD,MAAM,WAAW,GAAG,GAAG,YAAY,WAAW,CAAC;IAE/C,MAAM,QAAQ,GAAoB;QAChC;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY,OAAO;;;aAGpB,OAAO,CAAC,WAAW;4BACJ,OAAO;EACjC,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;EAChC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;;;kCAGlC,YAAY,IAAI,OAAO;sCACnB,WAAW;;6BAEpB,WAAW,IAAI,OAAO;;;;uBAI5B,YAAY,IAAI,OAAO;0BACpB,WAAW,IAAI,OAAO;;;;;;;;;;;;;;kBAc9B,OAAO,+EAA+E;aACjG;SACF;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,MAAM;IACN,OAAO;CACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement-task.d.ts","sourceRoot":"","sources":["../../src/prompts/implement-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"implement-task.d.ts","sourceRoot":"","sources":["../../src/prompts/implement-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAwM9C,eAAO,MAAM,mBAAmB,EAAE,gBAGjC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PathUtils } from '../core/path-utils.js';
|
|
1
2
|
const prompt = {
|
|
2
3
|
name: 'implement-task',
|
|
3
4
|
title: 'Implement Specification Task',
|
|
@@ -20,6 +21,12 @@ async function handler(args, context) {
|
|
|
20
21
|
if (!specName) {
|
|
21
22
|
throw new Error('specName is a required argument');
|
|
22
23
|
}
|
|
24
|
+
// Resolve paths through PathUtils (DocVault-aware)
|
|
25
|
+
const workflowRoot = PathUtils.getWorkflowRoot(context.projectPath);
|
|
26
|
+
const specDir = `${workflowRoot}/specs/${specName}`;
|
|
27
|
+
const templatesDir = `${workflowRoot}/templates`;
|
|
28
|
+
const tasksFile = `${specDir}/tasks.md`;
|
|
29
|
+
const logsDir = `${specDir}/Implementation Logs`;
|
|
23
30
|
const messages = [
|
|
24
31
|
{
|
|
25
32
|
role: 'user',
|
|
@@ -37,11 +44,11 @@ ${context.dashboardUrl ? `- Dashboard: ${context.dashboardUrl}` : ''}
|
|
|
37
44
|
|
|
38
45
|
1. **Check Current Status:**
|
|
39
46
|
- Use the spec-status tool with specName "${specName}" to see overall progress
|
|
40
|
-
- Read
|
|
47
|
+
- Read ${tasksFile} to see all tasks
|
|
41
48
|
- Identify ${taskId ? `task ${taskId}` : 'the next pending task marked with [ ]'}
|
|
42
49
|
|
|
43
50
|
2. **Start the Task:**
|
|
44
|
-
- Edit
|
|
51
|
+
- Edit ${tasksFile} directly
|
|
45
52
|
- Change the task marker from [ ] to [-] for the task you're starting
|
|
46
53
|
- Only one task should be in-progress at a time
|
|
47
54
|
|
|
@@ -56,18 +63,18 @@ ${context.dashboardUrl ? `- Dashboard: ${context.dashboardUrl}` : ''}
|
|
|
56
63
|
|
|
57
64
|
4. **Discover Existing Implementations (CRITICAL):**
|
|
58
65
|
- BEFORE writing any code, search implementation logs to understand existing artifacts
|
|
59
|
-
- Implementation logs are stored as markdown files in:
|
|
66
|
+
- Implementation logs are stored as markdown files in: ${logsDir}/
|
|
60
67
|
|
|
61
68
|
**Option 1: Use grep/ripgrep for fast searches**
|
|
62
69
|
\`\`\`bash
|
|
63
70
|
# Search for API endpoints
|
|
64
|
-
grep -r "GET\|POST\|PUT\|DELETE" "
|
|
71
|
+
grep -r "GET\|POST\|PUT\|DELETE" "${logsDir}/"
|
|
65
72
|
|
|
66
73
|
# Search for specific components
|
|
67
|
-
grep -r "ComponentName" "
|
|
74
|
+
grep -r "ComponentName" "${logsDir}/"
|
|
68
75
|
|
|
69
76
|
# Search for integration patterns
|
|
70
|
-
grep -r "integration\|dataFlow" "
|
|
77
|
+
grep -r "integration\|dataFlow" "${logsDir}/"
|
|
71
78
|
\`\`\`
|
|
72
79
|
|
|
73
80
|
**Option 2: Read markdown files directly**
|
|
@@ -91,21 +98,21 @@ ${context.dashboardUrl ? `- Dashboard: ${context.dashboardUrl}` : ''}
|
|
|
91
98
|
|
|
92
99
|
5. **Implement the Task (dispatch subagent):**
|
|
93
100
|
- Dispatch a fresh subagent (Agent tool) with the full task text, _Prompt guidance, and _Leverage file paths
|
|
94
|
-
- Template:
|
|
101
|
+
- Template: ${templatesDir}/implementer-prompt-template.md
|
|
95
102
|
- The subagent implements, tests, commits, and self-reviews
|
|
96
103
|
- Main context stays clean for orchestration — never write implementation code here
|
|
97
104
|
|
|
98
105
|
5.5. **Spec Compliance Review (dispatch reviewer subagent):**
|
|
99
106
|
- After the implementer reports back, dispatch a reviewer subagent
|
|
100
107
|
- Reviewer reads actual code and compares to task requirements line by line
|
|
101
|
-
- Template:
|
|
108
|
+
- Template: ${templatesDir}/spec-reviewer-template.md
|
|
102
109
|
- If issues found: implementer fixes them, then dispatch reviewer again
|
|
103
110
|
- Do NOT proceed to step 5.6 until spec review passes ✅
|
|
104
111
|
|
|
105
112
|
5.6. **Code Quality Review (dispatch reviewer subagent):**
|
|
106
113
|
- Only dispatch AFTER spec compliance passes in step 5.5
|
|
107
114
|
- Reviewer checks: architecture, error handling, testing, production readiness
|
|
108
|
-
- Template:
|
|
115
|
+
- Template: ${templatesDir}/code-quality-reviewer-template.md
|
|
109
116
|
- Issues categorized: Critical (must fix) / Important (should fix) / Minor
|
|
110
117
|
- Fix Critical and Important issues, re-review until approved ✅
|
|
111
118
|
|
|
@@ -144,7 +151,7 @@ ${context.dashboardUrl ? `- Dashboard: ${context.dashboardUrl}` : ''}
|
|
|
144
151
|
- Confirm that log-implementation returned success in step 6
|
|
145
152
|
- Verify all success criteria from the _Prompt are met
|
|
146
153
|
- Run any relevant tests to ensure nothing is broken
|
|
147
|
-
- Edit
|
|
154
|
+
- Edit ${tasksFile} directly
|
|
148
155
|
- Change the task marker from [-] to [x] for the completed task
|
|
149
156
|
- ⚠️ If you skipped step 6, go back now — a task marked [x] without a log is incomplete
|
|
150
157
|
|
|
@@ -170,7 +177,7 @@ ${context.dashboardUrl ? `- Dashboard: ${context.dashboardUrl}` : ''}
|
|
|
170
177
|
- All logged implementations appear in the "Logs" tab of the dashboard
|
|
171
178
|
- Filter by spec, task ID, or search by summary
|
|
172
179
|
- View detailed statistics including files changed and lines modified
|
|
173
|
-
- Or search directly using grep on markdown files in
|
|
180
|
+
- Or search directly using grep on markdown files in {workflowRoot}/specs/{specName}/Implementation Logs/
|
|
174
181
|
|
|
175
182
|
**Context Budget:** This session supports ~80-100 task dispatches with reviews (~800k tokens on 1M context models).
|
|
176
183
|
After completing 60+ tasks, consider using a handoff to relay to a fresh session.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement-task.js","sourceRoot":"","sources":["../../src/prompts/implement-task.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"implement-task.js","sourceRoot":"","sources":["../../src/prompts/implement-task.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,8BAA8B;IACrC,WAAW,EAAE,2PAA2P;IACxQ,SAAS,EAAE;QACT;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sDAAsD;YACnE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAyB,EAAE,OAAoB;IACpE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAElC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,mDAAmD;IACnD,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,GAAG,YAAY,UAAU,QAAQ,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,GAAG,YAAY,YAAY,CAAC;IACjD,MAAM,SAAS,GAAG,GAAG,OAAO,WAAW,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,OAAO,sBAAsB,CAAC;IAEjD,MAAM,QAAQ,GAAoB;QAChC;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAC,uBAAuB,aAAa,QAAQ;;;aAGtF,OAAO,CAAC,WAAW;aACnB,QAAQ;EACnB,MAAM,CAAC,CAAC,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;EACpC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;+CAKrB,QAAQ;YAC3C,SAAS;gBACL,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAC,uCAAuC;;;YAGvE,SAAS;;;;;;;;;;;;;;;4DAeuC,OAAO;;;;;uCAK5B,OAAO;;;8BAGhB,OAAO;;;sCAGC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;iBAwB5B,YAAY;;;;;;;iBAOZ,YAAY;;;;;;;iBAOZ,YAAY;;;;;;;;oBAQT,QAAQ;iBACX,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA8B9D,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAgCc,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAC,eAAe,2BAA2B;aAClG;SACF;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD,MAAM;IACN,OAAO;CACR,CAAC"}
|
|
@@ -31,8 +31,8 @@ ${nextSteps.map(step => `- ${step}`).join('\n')}
|
|
|
31
31
|
1. This guide has been injected into your context for creating steering documents
|
|
32
32
|
2. Only proceed if the user explicitly requested steering document creation
|
|
33
33
|
3. Follow the sequence exactly: product.md → tech.md → structure.md
|
|
34
|
-
4. Read templates from
|
|
35
|
-
5. Create documents in
|
|
34
|
+
4. Read templates from the project's templates directory (resolved by PathUtils through DocVault)
|
|
35
|
+
5. Create documents in the project's steering directory (resolved by PathUtils through DocVault)
|
|
36
36
|
6. Request approval after each document using the approvals tool
|
|
37
37
|
7. Never proceed to the next document without successful approval cleanup
|
|
38
38
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-status.d.ts","sourceRoot":"","sources":["../../src/prompts/spec-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"spec-status.d.ts","sourceRoot":"","sources":["../../src/prompts/spec-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgF9C,eAAO,MAAM,gBAAgB,EAAE,gBAG9B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PathUtils } from '../core/path-utils.js';
|
|
1
2
|
const prompt = {
|
|
2
3
|
name: 'spec-status',
|
|
3
4
|
title: 'Specification Status Overview',
|
|
@@ -19,6 +20,7 @@ async function handler(args, context) {
|
|
|
19
20
|
const { specName, detailed } = args;
|
|
20
21
|
const scope = specName ? `the "${specName}" feature` : 'all specifications in the project';
|
|
21
22
|
const detailLevel = detailed ? 'detailed' : 'summary';
|
|
23
|
+
const workflowRoot = PathUtils.getWorkflowRoot(context.projectPath);
|
|
22
24
|
const messages = [
|
|
23
25
|
{
|
|
24
26
|
role: 'user',
|
|
@@ -35,9 +37,9 @@ ${context.dashboardUrl ? `- Dashboard: ${context.dashboardUrl}` : ''}
|
|
|
35
37
|
**Instructions:**
|
|
36
38
|
${specName ?
|
|
37
39
|
`1. Use the spec-status tool with specName "${specName}" to get status information
|
|
38
|
-
2. If you need detailed task information, read the tasks.md file directly at
|
|
40
|
+
2. If you need detailed task information, read the tasks.md file directly at ${workflowRoot}/specs/${specName}/tasks.md
|
|
39
41
|
3. Check for any pending approvals using approvals tool with action:'status'` :
|
|
40
|
-
`1. List directory
|
|
42
|
+
`1. List directory ${workflowRoot}/specs/ to see all specifications
|
|
41
43
|
2. Use the spec-status tool to get status for each specification
|
|
42
44
|
3. Provide a consolidated overview of project progress`}
|
|
43
45
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-status.js","sourceRoot":"","sources":["../../src/prompts/spec-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spec-status.js","sourceRoot":"","sources":["../../src/prompts/spec-status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,+BAA+B;IACtC,WAAW,EAAE,kJAAkJ;IAC/J,SAAS,EAAE;QACT;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,4FAA4F;YACzG,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,oEAAoE;YACjF,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAyB,EAAE,OAAoB;IACpE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEpC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,WAAW,CAAC,CAAC,CAAC,mCAAmC,CAAC;IAC3F,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAoB;QAChC;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,WAAW,wBAAwB,KAAK;;;aAGhD,OAAO,CAAC,WAAW;EAC9B,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC,6BAA6B;kBACnD,WAAW;EAC3B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;;;EAGlE,QAAQ,CAAC,CAAC;oBACV,8CAA8C,QAAQ;+EACuB,YAAY,UAAU,QAAQ;6EAChC,CAAC,CAAC;oBAC7E,qBAAqB,YAAY;;uDAEoB;;;;;;;;;;;;;;;;EAgBrD,QAAQ,CAAC,CAAC,CAAC;;;;;oCAKuB,CAAC,CAAC,CAAC,EAAE;;qGAE4D;aAC9F;SACF;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,MAAM;IACN,OAAO;CACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-workflow-guide.d.ts","sourceRoot":"","sources":["../../src/tools/spec-workflow-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"spec-workflow-guide.d.ts","sourceRoot":"","sources":["../../src/tools/spec-workflow-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,eAAO,MAAM,qBAAqB,EAAE,IAenC,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAsBrG"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PathUtils } from '../core/path-utils.js';
|
|
1
2
|
export const specWorkflowGuideTool = {
|
|
2
3
|
name: 'spec-workflow-guide',
|
|
3
4
|
description: `Load essential spec workflow instructions to guide feature development from idea to implementation.
|
|
@@ -23,7 +24,7 @@ export async function specWorkflowGuideHandler(args, context) {
|
|
|
23
24
|
success: true,
|
|
24
25
|
message: 'Complete spec workflow guide loaded - follow this workflow exactly',
|
|
25
26
|
data: {
|
|
26
|
-
guide: getSpecWorkflowGuide(),
|
|
27
|
+
guide: getSpecWorkflowGuide(PathUtils.getWorkflowRoot(context.projectPath)),
|
|
27
28
|
dashboardUrl: context.dashboardUrl,
|
|
28
29
|
dashboardAvailable: !!context.dashboardUrl
|
|
29
30
|
},
|
|
@@ -36,8 +37,11 @@ export async function specWorkflowGuideHandler(args, context) {
|
|
|
36
37
|
]
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
|
-
function getSpecWorkflowGuide() {
|
|
40
|
+
function getSpecWorkflowGuide(workflowRoot) {
|
|
40
41
|
const currentYear = new Date().getFullYear();
|
|
42
|
+
// workflowRoot is the resolved path (DocVault or local ${wr}/)
|
|
43
|
+
// Use it in all path references so agents look in the right place
|
|
44
|
+
const wr = workflowRoot;
|
|
41
45
|
return `# Spec Development Workflow
|
|
42
46
|
|
|
43
47
|
## Overview
|
|
@@ -49,13 +53,13 @@ Spec names MUST use issue prefix: {ISSUE-ID}-{kebab-title} (e.g., STAK-123-user-
|
|
|
49
53
|
\`\`\`mermaid
|
|
50
54
|
flowchart TD
|
|
51
55
|
Start([Start: User requests feature]) --> CheckSteering{Steering docs exist?}
|
|
52
|
-
CheckSteering -->|Yes| P1_Load[Read steering docs:<br
|
|
56
|
+
CheckSteering -->|Yes| P1_Load[Read steering docs:<br/>${wr}/steering/*.md]
|
|
53
57
|
CheckSteering -->|No| P1_Template
|
|
54
58
|
|
|
55
59
|
%% Phase 1: Requirements
|
|
56
|
-
P1_Load --> P1_Template[Check
|
|
60
|
+
P1_Load --> P1_Template[Check project template overrides,<br/>then global template:<br/>requirements-template.md]
|
|
57
61
|
P1_Template --> P1_Research[Web search if available]
|
|
58
|
-
P1_Research --> P1_Create[Create file:<br
|
|
62
|
+
P1_Research --> P1_Create[Create file:<br/>${wr}/specs/{name}/<br/>requirements.md]
|
|
59
63
|
P1_Create --> P1_Approve[approvals<br/>action: request<br/>filePath only]
|
|
60
64
|
P1_Approve --> P1_Status[approvals<br/>action: status<br/>poll status]
|
|
61
65
|
P1_Status --> P1_Check{Status?}
|
|
@@ -65,9 +69,9 @@ flowchart TD
|
|
|
65
69
|
P1_Clean -->|failed| P1_Status
|
|
66
70
|
|
|
67
71
|
%% Phase 2: Design
|
|
68
|
-
P1_Clean -->|success| P2_Template[Check
|
|
72
|
+
P1_Clean -->|success| P2_Template[Check project template overrides,<br/>then global template:<br/>design-template.md]
|
|
69
73
|
P2_Template --> P2_Analyze[Analyze codebase patterns]
|
|
70
|
-
P2_Analyze --> P2_Create[Create file:<br
|
|
74
|
+
P2_Analyze --> P2_Create[Create file:<br/>${wr}/specs/{name}/<br/>design.md]
|
|
71
75
|
P2_Create --> P2_Approve[approvals<br/>action: request<br/>filePath only]
|
|
72
76
|
P2_Approve --> P2_Status[approvals<br/>action: status<br/>poll status]
|
|
73
77
|
P2_Status --> P2_Check{Status?}
|
|
@@ -77,9 +81,9 @@ flowchart TD
|
|
|
77
81
|
P2_Clean -->|failed| P2_Status
|
|
78
82
|
|
|
79
83
|
%% Phase 3: Tasks
|
|
80
|
-
P2_Clean -->|success| P3_Template[Check
|
|
84
|
+
P2_Clean -->|success| P3_Template[Check project template overrides,<br/>then global template:<br/>tasks-template.md]
|
|
81
85
|
P3_Template --> P3_Break[Convert design to tasks]
|
|
82
|
-
P3_Break --> P3_Create[Create file:<br
|
|
86
|
+
P3_Break --> P3_Create[Create file:<br/>${wr}/specs/{name}/<br/>tasks.md]
|
|
83
87
|
P3_Create --> P3_Approve[approvals<br/>action: request<br/>filePath only]
|
|
84
88
|
P3_Approve --> P3_Status[approvals<br/>action: status<br/>poll status]
|
|
85
89
|
P3_Status --> P3_Check{Status?}
|
|
@@ -171,20 +175,20 @@ flowchart TD
|
|
|
171
175
|
**Purpose**: Define what to build based on user needs.
|
|
172
176
|
|
|
173
177
|
**File Operations**:
|
|
174
|
-
- Read steering docs:
|
|
175
|
-
- Check for
|
|
176
|
-
- Read template:
|
|
177
|
-
- Create document:
|
|
178
|
+
- Read steering docs: \`${wr}/steering/*.md\` (if they exist)
|
|
179
|
+
- Check for project override: \`${wr}/templates/requirements-template.md\`
|
|
180
|
+
- Read global template: \`${wr}/templates/requirements-template.md\` (if no custom template)
|
|
181
|
+
- Create document: \`${wr}/specs/{issue-id}-{kebab-title}/requirements.md\`
|
|
178
182
|
|
|
179
183
|
**Tools**:
|
|
180
184
|
- approvals: Manage approval workflow (actions: request, status, delete)
|
|
181
185
|
|
|
182
186
|
**Process**:
|
|
183
|
-
1. Check if
|
|
184
|
-
2. Check for
|
|
185
|
-
3. If no
|
|
187
|
+
1. Check if \`${wr}/steering/\` exists (if yes, read product.md, tech.md, structure.md)
|
|
188
|
+
2. Check for project template override at \`${wr}/templates/requirements-template.md\`
|
|
189
|
+
3. If no project override, the global template is used automatically from \`${wr}/templates/requirements-template.md\`
|
|
186
190
|
4. Research market/user expectations (if web search available, current year: ${currentYear})
|
|
187
|
-
5. Generate requirements as user stories with EARS criteria6. Create \`requirements.md\` at
|
|
191
|
+
5. Generate requirements as user stories with EARS criteria6. Create \`requirements.md\` at \`${wr}/specs/{issue-id}-{kebab-title}/requirements.md\`
|
|
188
192
|
7. Request approval using approvals tool with action:'request' (filePath only, never content)
|
|
189
193
|
8. Poll status using approvals with action:'status' until approved/needs-revision (NEVER accept verbal approval)
|
|
190
194
|
9. If needs-revision: update document using comments, create NEW approval, do NOT proceed
|
|
@@ -195,19 +199,19 @@ flowchart TD
|
|
|
195
199
|
**Purpose**: Create technical design addressing all requirements.
|
|
196
200
|
|
|
197
201
|
**File Operations**:
|
|
198
|
-
- Check for
|
|
199
|
-
- Read template:
|
|
200
|
-
- Create document:
|
|
202
|
+
- Check for project override: \`${wr}/templates/design-template.md\`
|
|
203
|
+
- Read global template: \`${wr}/templates/design-template.md\` (if no custom template)
|
|
204
|
+
- Create document: \`${wr}/specs/{issue-id}-{kebab-title}/design.md\`
|
|
201
205
|
|
|
202
206
|
**Tools**:
|
|
203
207
|
- approvals: Manage approval workflow (actions: request, status, delete)
|
|
204
208
|
|
|
205
209
|
**Process**:
|
|
206
|
-
1. Check for
|
|
207
|
-
2. If no
|
|
210
|
+
1. Check for project template override at \`${wr}/templates/design-template.md\`
|
|
211
|
+
2. If no project override, the global template is used automatically from \`${wr}/templates/design-template.md\`
|
|
208
212
|
3. Analyze codebase for patterns to reuse
|
|
209
213
|
4. Research technology choices (if web search available, current year: ${currentYear})
|
|
210
|
-
5. Generate design with all template sections6. Create \`design.md\` at
|
|
214
|
+
5. Generate design with all template sections6. Create \`design.md\` at \`${wr}/specs/{issue-id}-{kebab-title}/design.md\`
|
|
211
215
|
7. Request approval using approvals tool with action:'request'
|
|
212
216
|
8. Poll status using approvals with action:'status' until approved/needs-revision
|
|
213
217
|
9. If needs-revision: update document using comments, create NEW approval, do NOT proceed
|
|
@@ -218,16 +222,16 @@ flowchart TD
|
|
|
218
222
|
**Purpose**: Break design into atomic implementation tasks.
|
|
219
223
|
|
|
220
224
|
**File Operations**:
|
|
221
|
-
- Check for
|
|
222
|
-
- Read template:
|
|
223
|
-
- Create document:
|
|
225
|
+
- Check for project override: \`${wr}/templates/tasks-template.md\`
|
|
226
|
+
- Read global template: \`${wr}/templates/tasks-template.md\` (if no custom template)
|
|
227
|
+
- Create document: \`${wr}/specs/{issue-id}-{kebab-title}/tasks.md\`
|
|
224
228
|
|
|
225
229
|
**Tools**:
|
|
226
230
|
- approvals: Manage approval workflow (actions: request, status, delete)
|
|
227
231
|
|
|
228
232
|
**Process**:
|
|
229
|
-
1. Check for
|
|
230
|
-
2. If no
|
|
233
|
+
1. Check for project template override at \`${wr}/templates/tasks-template.md\`
|
|
234
|
+
2. If no project override, the global template is used automatically from \`${wr}/templates/tasks-template.md\`
|
|
231
235
|
3. Convert design into atomic tasks (1-3 files each)
|
|
232
236
|
4. Include file paths and requirement references
|
|
233
237
|
5. **IMPORTANT**: Generate a _Prompt field for each task with:
|
|
@@ -241,7 +245,7 @@ flowchart TD
|
|
|
241
245
|
- Start the prompt with "Implement the task for spec {issue-id}-{kebab-title}, first run spec-workflow-guide to get the workflow guide then implement the task:"
|
|
242
246
|
6. (Optional) Add a **Recommended Agent** field to each task: Claude, Codex, Gemini, or Human
|
|
243
247
|
7. Include a **File Touch Map** at the top of tasks.md listing all files the spec will CREATE, MODIFY, or TEST with brief scope notes
|
|
244
|
-
8. Create \`tasks.md\` at
|
|
248
|
+
8. Create \`tasks.md\` at \`${wr}/specs/{issue-id}-{kebab-title}/tasks.md\`
|
|
245
249
|
7. Request approval using approvals tool with action:'request'
|
|
246
250
|
8. Poll status using approvals with action:'status' until approved/needs-revision
|
|
247
251
|
9. If needs-revision: update document using comments, create NEW approval, do NOT proceed
|
|
@@ -261,7 +265,7 @@ flowchart TD
|
|
|
261
265
|
2. If UI changes are declared with prototype required:
|
|
262
266
|
- Execute tasks 0.1–0.3 from tasks.md (these are the prototype gate tasks)
|
|
263
267
|
- Task 0.1: Create visual mockup via \`ui-mockup\` skill (Stitch) or \`frontend-design\` skill
|
|
264
|
-
- Task 0.2: Build interactive prototype via \`playground\` skill — **save to
|
|
268
|
+
- Task 0.2: Build interactive prototype via \`playground\` skill — **save to \`${wr}/specs/{spec-name}/artifacts/playground.html\`**
|
|
265
269
|
- Task 0.3: Present to user, collect explicit visual approval
|
|
266
270
|
3. If a reference HTML/mockup file path is listed in design.md, the prototype MUST use it as the baseline — do not ignore provided prototypes
|
|
267
271
|
4. **Save all visual artifacts** (playground HTML, mockup screenshots, Stitch exports) to the spec's \`artifacts/\` folder
|
|
@@ -277,8 +281,8 @@ flowchart TD
|
|
|
277
281
|
**Trigger**: This phase fires automatically after Phase 3 approval (and Phase 3.5 if applicable). It runs on EVERY spec — it is not conditional.
|
|
278
282
|
|
|
279
283
|
**File Operations**:
|
|
280
|
-
- Read specs:
|
|
281
|
-
- Create report:
|
|
284
|
+
- Read specs: \`${wr}/specs/{issue-id}-{kebab-title}/requirements.md\`, \`design.md\`, \`tasks.md\`
|
|
285
|
+
- Create report: \`${wr}/specs/{issue-id}-{kebab-title}/readiness-report.md\`
|
|
282
286
|
|
|
283
287
|
**Tools**:
|
|
284
288
|
- approvals: Submit readiness report for dashboard review (actions: request, status, delete)
|
|
@@ -293,7 +297,7 @@ flowchart TD
|
|
|
293
297
|
- **Prototype consistency**: If design.md references a prototype HTML file, verify it appears in task 0.1-0.3 artifacts and/or task \`_Leverage\` fields.
|
|
294
298
|
- **File touch map validation**: Verify the File Touch Map in tasks.md covers all files mentioned in individual tasks.
|
|
295
299
|
- **Test Design Coverage**: At least one task in tasks.md covers test authoring for new behavior (matching task title/description patterns: "test", "TDD", "verify", "write tests"). If no test task found → FAIL.
|
|
296
|
-
- **Release Hygiene**: Check
|
|
300
|
+
- **Release Hygiene**: Check \`${wr}/project-conventions.json\` (if exists):
|
|
297
301
|
- If version lock detected: verify a task covers version bump. Missing → FAIL.
|
|
298
302
|
- If changelog detected: verify a task covers changelog entry. Missing → FAIL.
|
|
299
303
|
- Verify a task covers DocVault documentation update. Missing → FAIL.
|
|
@@ -350,7 +354,7 @@ flowchart TD
|
|
|
350
354
|
**Purpose**: Execute tasks systematically.
|
|
351
355
|
|
|
352
356
|
**File Operations**:
|
|
353
|
-
- Read specs:
|
|
357
|
+
- Read specs: \`${wr}/specs/{issue-id}-{kebab-title}/*.md\` (if returning to work)
|
|
354
358
|
- Edit tasks.md to update status:
|
|
355
359
|
- \`- [ ]\` = Pending task
|
|
356
360
|
- \`- [-]\` = In-progress task
|
|
@@ -372,17 +376,17 @@ flowchart TD
|
|
|
372
376
|
- Read design.md \`UI Impact Assessment\` section
|
|
373
377
|
- If \`Prototype Required: Yes\`, confirm tasks 0.1–0.3 are marked \`[x]\` and \`Prototype Artifacts\` in design.md are populated
|
|
374
378
|
- If prototype gate is incomplete, STOP — complete Phase 3.5 first
|
|
375
|
-
- **MANDATORY**: Include the playground file path (e.g.,
|
|
379
|
+
- **MANDATORY**: Include the playground file path (e.g., \`${wr}/specs/{spec-name}/artifacts/playground.html\`) in the subagent prompt so the implementer has the approved visual reference
|
|
376
380
|
- Tell the implementer explicitly: "Source your visual design from the prototype file. Do NOT re-read earlier spec documents and reinvent the design. The prototype IS the approved design."
|
|
377
381
|
- The spec compliance reviewer (Stage 1) will compare implementation against the prototype — visual deviations are a FAIL
|
|
378
382
|
- Edit tasks.md: Change \`[ ]\` to \`[-]\` for the task you're starting
|
|
379
383
|
- **CRITICAL: BEFORE implementing, search existing implementation logs**:
|
|
380
|
-
- Implementation logs are in:
|
|
384
|
+
- Implementation logs are in: \`${wr}/specs/{issue-id}-{kebab-title}/Implementation Logs/\`
|
|
381
385
|
- **Option 1: Use grep for fast searches**:
|
|
382
|
-
- \`grep -r "api\|endpoint"
|
|
383
|
-
- \`grep -r "component"
|
|
384
|
-
- \`grep -r "function"
|
|
385
|
-
- \`grep -r "integration"
|
|
386
|
+
- \`grep -r "api\|endpoint" ${wr}/specs/{issue-id}-{kebab-title}/Implementation Logs/\` - Find API endpoints
|
|
387
|
+
- \`grep -r "component" ${wr}/specs/{issue-id}-{kebab-title}/Implementation Logs/\` - Find UI components
|
|
388
|
+
- \`grep -r "function" ${wr}/specs/{issue-id}-{kebab-title}/Implementation Logs/\` - Find utility functions
|
|
389
|
+
- \`grep -r "integration" ${wr}/specs/{issue-id}-{kebab-title}/Implementation Logs/\` - Find integration patterns
|
|
386
390
|
- **Option 2: Read markdown files directly** - Use Read tool to examine specific log files
|
|
387
391
|
- Best practice: Search 2-3 different terms to discover comprehensively
|
|
388
392
|
- This prevents: duplicate endpoints, reimplemented components, broken integrations
|
|
@@ -424,7 +428,7 @@ Never write implementation code in the main context — dispatch a subagent inst
|
|
|
424
428
|
|
|
425
429
|
**Parallel Session** — If the plan has 10+ tasks, split into session-sized batches. Each session handles ~3-4 batches of 3 tasks. Use a handoff mechanism between sessions to relay context (spec name, completed tasks, next task).
|
|
426
430
|
|
|
427
|
-
**Implementer template**: See
|
|
431
|
+
**Implementer template**: See \`${wr}/templates/implementer-prompt-template.md\` for the subagent dispatch template. Paste the full task text into the subagent prompt — don't make the subagent read the plan file.
|
|
428
432
|
|
|
429
433
|
#### Two-Stage Review (after each task, BEFORE marking [x])
|
|
430
434
|
|
|
@@ -436,7 +440,7 @@ Dispatch a reviewer subagent to verify the implementer built what was requested
|
|
|
436
440
|
- Check for missing requirements, extra/unneeded work, misunderstandings
|
|
437
441
|
- ✅ Pass = proceed to Stage 2
|
|
438
442
|
- ❌ Fail = implementer fixes issues → dispatch reviewer again
|
|
439
|
-
- Template:
|
|
443
|
+
- Template: \`${wr}/templates/spec-reviewer-template.md\`
|
|
440
444
|
|
|
441
445
|
**Stage 2 — Code Quality Review:**
|
|
442
446
|
Only dispatch AFTER Stage 1 passes. Verify the code is well-built and production-ready.
|
|
@@ -444,7 +448,7 @@ Only dispatch AFTER Stage 1 passes. Verify the code is well-built and production
|
|
|
444
448
|
- Categorize issues: Critical (must fix) / Important (should fix) / Minor (nice to have)
|
|
445
449
|
- ✅ Approved = proceed to log-implementation → mark [x]
|
|
446
450
|
- Issues found = implementer fixes → dispatch reviewer again
|
|
447
|
-
- Template:
|
|
451
|
+
- Template: \`${wr}/templates/code-quality-reviewer-template.md\`
|
|
448
452
|
|
|
449
453
|
**Review loop:** If either reviewer finds issues, the implementer subagent fixes them, then the reviewer re-reviews. Repeat until approved. Never skip re-review — "it should be fine now" is not verification.
|
|
450
454
|
|
|
@@ -476,7 +480,7 @@ Phase 5 has three stages. The spec is NOT complete until all three are done.
|
|
|
476
480
|
**Purpose**: Run the project's test suite to verify the implementation.
|
|
477
481
|
|
|
478
482
|
**Process**:
|
|
479
|
-
1. Check
|
|
483
|
+
1. Check \`${wr}/project-conventions.json\` for the project's test command and framework.
|
|
480
484
|
2. If conventions exist and specify a test command: run that command (e.g., \`npm test\`, \`npx vitest\`, \`pytest\`).
|
|
481
485
|
3. If no conventions exist: check \`package.json\` for a \`test\` script. If found, run \`npm test\`. If not found, ask the user for the test command.
|
|
482
486
|
4. If the project uses Browserbase/Stagehand (\`conventions.testing.hasBrowserbase\` is true):
|
|
@@ -535,7 +539,7 @@ Phase 5 has three stages. The spec is NOT complete until all three are done.
|
|
|
535
539
|
## Workflow Rules
|
|
536
540
|
|
|
537
541
|
- Create documents directly at specified file paths
|
|
538
|
-
-
|
|
542
|
+
- Templates are resolved automatically: project override (${wr}/templates/) → global → bundled fallback
|
|
539
543
|
- Follow exact template structures
|
|
540
544
|
- Get explicit user approval between phases (using approvals tool with action:'request')
|
|
541
545
|
- Complete phases in sequence (no skipping)
|
|
@@ -559,32 +563,30 @@ Phase 5 has three stages. The spec is NOT complete until all three are done.
|
|
|
559
563
|
- Steering docs are optional - only create when explicitly requested
|
|
560
564
|
|
|
561
565
|
## File Structure
|
|
566
|
+
|
|
567
|
+
All specflow artifacts live in DocVault. The project root only has \`.specflow/config.json\`.
|
|
568
|
+
|
|
562
569
|
\`\`\`
|
|
563
|
-
|
|
564
|
-
├── templates/
|
|
565
|
-
│ ├── requirements-template.md
|
|
566
|
-
│ ├── design-template.md
|
|
567
|
-
│ ├── tasks-template.md
|
|
568
|
-
│ ├── product-template.md
|
|
569
|
-
│ ├── tech-template.md
|
|
570
|
-
│ └── structure-template.md
|
|
570
|
+
${wr}/ # DocVault/specflow/{project}/ (resolved via config.json)
|
|
571
|
+
├── templates/ # Project-level overrides ONLY (not copies of globals)
|
|
571
572
|
├── specs/
|
|
572
573
|
│ └── {ISSUE-ID}-{kebab-title}/
|
|
573
574
|
│ ├── requirements.md
|
|
574
575
|
│ ├── design.md
|
|
575
576
|
│ ├── tasks.md
|
|
576
|
-
│ ├── readiness-report.md # Phase 3.9
|
|
577
|
+
│ ├── readiness-report.md # Phase 3.9
|
|
577
578
|
│ ├── artifacts/ # Visual source of truth for UI specs
|
|
578
|
-
│ │ ├── playground.html
|
|
579
|
-
│ │ └── *.png
|
|
580
|
-
│ └── Implementation Logs/
|
|
579
|
+
│ │ ├── playground.html
|
|
580
|
+
│ │ └── *.png
|
|
581
|
+
│ └── Implementation Logs/
|
|
581
582
|
│ ├── task-1_timestamp_id.md
|
|
582
|
-
│ ├── task-2_timestamp_id.md
|
|
583
583
|
│ └── ...
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
584
|
+
├── steering/
|
|
585
|
+
│ ├── product.md
|
|
586
|
+
│ ├── tech.md
|
|
587
|
+
│ └── structure.md
|
|
588
|
+
├── approvals/ # Approval records
|
|
589
|
+
└── archive/specs/ # Archived specs
|
|
588
590
|
\`\`\``;
|
|
589
591
|
}
|
|
590
592
|
//# sourceMappingURL=spec-workflow-guide.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-workflow-guide.js","sourceRoot":"","sources":["../../src/tools/spec-workflow-guide.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spec-workflow-guide.js","sourceRoot":"","sources":["../../src/tools/spec-workflow-guide.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACzC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;;;kXAGmW;IAChX,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAS,EAAE,OAAoB;IAC5E,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7C,kCAAkC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1D,gEAAgE,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,oEAAoE;QAC7E,IAAI,EAAE;YACJ,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3E,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY;SAC3C;QACD,SAAS,EAAE;YACT,iEAAiE;YACjE,gDAAgD;YAChD,sCAAsC;YACtC,oBAAoB;YACpB,gBAAgB;SACjB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAoB;IAChD,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,+DAA+D;IAC/D,kEAAkE;IAClE,MAAM,EAAE,GAAG,YAAY,CAAC;IACxB,OAAO;;;;6PAIoP,WAAW;;;;;;;6DAO3M,EAAE;;;;;;iDAMd,EAAE;;;;;;;;;;;;gDAYH,EAAE;;;;;;;;;;;;8CAYJ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA4FtB,EAAE;kCACM,EAAE;4BACR,EAAE;uBACP,EAAE;;;;;;gBAMT,EAAE;8CAC4B,EAAE;8EAC8B,EAAE;+EACD,WAAW;gGACM,EAAE;;;;;;;;;;;kCAWhE,EAAE;4BACR,EAAE;uBACP,EAAE;;;;;;8CAMqB,EAAE;8EAC8B,EAAE;;yEAEP,WAAW;4EACR,EAAE;;;;;;;;;;;kCAW5C,EAAE;4BACR,EAAE;uBACP,EAAE;;;;;;8CAMqB,EAAE;8EAC8B,EAAE;;;;;;;;;;;;;;8BAclD,EAAE;;;;;;;;;;;;;;;;;;;;oFAoBoD,EAAE;;;;;;;;;;;;;;;;kBAgBpE,EAAE;qBACC,EAAE;;;;;;;;;;;;;;;oCAea,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyDpB,EAAE;;;;;;;;;;;;;;;;;;;;;;kEAsB8C,EAAE;;;;;uCAK7B,EAAE;;qCAEJ,EAAE;iCACN,EAAE;gCACH,EAAE;mCACC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA0CH,EAAE;;;;;;;;;;;;gBAYpB,EAAE;;;;;;;;gBAQF,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAgCL,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4DA2D6C,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4B5D,EAAE;;;;;;;;;;;;;;;;;;;;OAoBG,CAAC;AACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steering-guide.d.ts","sourceRoot":"","sources":["../../src/tools/steering-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"steering-guide.d.ts","sourceRoot":"","sources":["../../src/tools/steering-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,eAAO,MAAM,iBAAiB,EAAE,IAe/B,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAgBjG"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PathUtils } from '../core/path-utils.js';
|
|
1
2
|
export const steeringGuideTool = {
|
|
2
3
|
name: 'steering-guide',
|
|
3
4
|
description: `Load guide for creating project steering documents.
|
|
@@ -19,7 +20,7 @@ export async function steeringGuideHandler(args, context) {
|
|
|
19
20
|
success: true,
|
|
20
21
|
message: 'Steering workflow guide loaded - follow this workflow exactly to avoid errors',
|
|
21
22
|
data: {
|
|
22
|
-
guide: getSteeringGuide(),
|
|
23
|
+
guide: getSteeringGuide(PathUtils.getWorkflowRoot(context.projectPath)),
|
|
23
24
|
dashboardUrl: context.dashboardUrl
|
|
24
25
|
},
|
|
25
26
|
nextSteps: [
|
|
@@ -31,7 +32,8 @@ export async function steeringGuideHandler(args, context) {
|
|
|
31
32
|
]
|
|
32
33
|
};
|
|
33
34
|
}
|
|
34
|
-
function getSteeringGuide() {
|
|
35
|
+
function getSteeringGuide(workflowRoot) {
|
|
36
|
+
const wr = workflowRoot;
|
|
35
37
|
return `# Steering Workflow
|
|
36
38
|
|
|
37
39
|
## Overview
|
|
@@ -47,7 +49,7 @@ flowchart TD
|
|
|
47
49
|
%% Phase 1: Product
|
|
48
50
|
Guide --> P1_Template[Check user-templates first,<br/>then read template:<br/>product-template.md]
|
|
49
51
|
P1_Template --> P1_Generate[Generate vision & goals]
|
|
50
|
-
P1_Generate --> P1_Create[Create file:<br
|
|
52
|
+
P1_Generate --> P1_Create[Create file:<br/>${wr}/steering/<br/>product.md]
|
|
51
53
|
P1_Create --> P1_Approve[approvals<br/>action: request<br/>filePath only]
|
|
52
54
|
P1_Approve --> P1_Status[approvals<br/>action: status<br/>poll status]
|
|
53
55
|
P1_Status --> P1_Check{Status?}
|
|
@@ -59,7 +61,7 @@ flowchart TD
|
|
|
59
61
|
%% Phase 2: Tech
|
|
60
62
|
P1_Clean -->|success| P2_Template[Check user-templates first,<br/>then read template:<br/>tech-template.md]
|
|
61
63
|
P2_Template --> P2_Analyze[Analyze tech stack]
|
|
62
|
-
P2_Analyze --> P2_Create[Create file:<br
|
|
64
|
+
P2_Analyze --> P2_Create[Create file:<br/>${wr}/steering/<br/>tech.md]
|
|
63
65
|
P2_Create --> P2_Approve[approvals<br/>action: request<br/>filePath only]
|
|
64
66
|
P2_Approve --> P2_Status[approvals<br/>action: status<br/>poll status]
|
|
65
67
|
P2_Status --> P2_Check{Status?}
|
|
@@ -71,7 +73,7 @@ flowchart TD
|
|
|
71
73
|
%% Phase 3: Structure
|
|
72
74
|
P2_Clean -->|success| P3_Template[Check user-templates first,<br/>then read template:<br/>structure-template.md]
|
|
73
75
|
P3_Template --> P3_Analyze[Analyze codebase structure]
|
|
74
|
-
P3_Analyze --> P3_Create[Create file:<br
|
|
76
|
+
P3_Analyze --> P3_Create[Create file:<br/>${wr}/steering/<br/>structure.md]
|
|
75
77
|
P3_Create --> P3_Approve[approvals<br/>action: request<br/>filePath only]
|
|
76
78
|
P3_Approve --> P3_Status[approvals<br/>action: status<br/>poll status]
|
|
77
79
|
P3_Status --> P3_Check{Status?}
|
|
@@ -95,9 +97,9 @@ flowchart TD
|
|
|
95
97
|
**Purpose**: Define vision, goals, and user outcomes.
|
|
96
98
|
|
|
97
99
|
**File Operations**:
|
|
98
|
-
- Check for custom template:
|
|
99
|
-
- Read template:
|
|
100
|
-
- Create document:
|
|
100
|
+
- Check for custom template: \`${wr}/user-templates/product-template.md\`
|
|
101
|
+
- Read template: \`${wr}/templates/product-template.md\` (if no custom template)
|
|
102
|
+
- Create document: \`${wr}/steering/product.md\`
|
|
101
103
|
|
|
102
104
|
**Tools**:
|
|
103
105
|
- steering-guide: Load workflow instructions
|
|
@@ -105,10 +107,10 @@ flowchart TD
|
|
|
105
107
|
|
|
106
108
|
**Process**:
|
|
107
109
|
1. Load steering guide for workflow overview
|
|
108
|
-
2. Check for custom template at
|
|
109
|
-
3. If no custom template, read from
|
|
110
|
+
2. Check for custom template at \`${wr}/user-templates/product-template.md\`
|
|
111
|
+
3. If no custom template, read from \`${wr}/templates/product-template.md\`
|
|
110
112
|
4. Generate product vision and goals
|
|
111
|
-
5. Create \`product.md\` at
|
|
113
|
+
5. Create \`product.md\` at \`${wr}/steering/product.md\`
|
|
112
114
|
6. Request approval using approvals tool with action:'request' (filePath only)
|
|
113
115
|
7. Poll status using approvals with action:'status' until approved/needs-revision (NEVER accept verbal approval)
|
|
114
116
|
8. If needs-revision: update document using comments, create NEW approval, do NOT proceed
|
|
@@ -119,19 +121,19 @@ flowchart TD
|
|
|
119
121
|
**Purpose**: Document technology decisions and architecture.
|
|
120
122
|
|
|
121
123
|
**File Operations**:
|
|
122
|
-
- Check for custom template:
|
|
123
|
-
- Read template:
|
|
124
|
-
- Create document:
|
|
124
|
+
- Check for custom template: \`${wr}/user-templates/tech-template.md\`
|
|
125
|
+
- Read template: \`${wr}/templates/tech-template.md\` (if no custom template)
|
|
126
|
+
- Create document: \`${wr}/steering/tech.md\`
|
|
125
127
|
|
|
126
128
|
**Tools**:
|
|
127
129
|
- approvals: Manage approval workflow (actions: request, status, delete)
|
|
128
130
|
|
|
129
131
|
**Process**:
|
|
130
|
-
1. Check for custom template at
|
|
131
|
-
2. If no custom template, read from
|
|
132
|
+
1. Check for custom template at \`${wr}/user-templates/tech-template.md\`
|
|
133
|
+
2. If no custom template, read from \`${wr}/templates/tech-template.md\`
|
|
132
134
|
3. Analyze existing technology stack
|
|
133
135
|
4. Document architectural decisions and patterns
|
|
134
|
-
5. Create \`tech.md\` at
|
|
136
|
+
5. Create \`tech.md\` at \`${wr}/steering/tech.md\`
|
|
135
137
|
6. Request approval using approvals tool with action:'request'
|
|
136
138
|
7. Poll status using approvals with action:'status' until approved/needs-revision
|
|
137
139
|
8. If needs-revision: update document using comments, create NEW approval, do NOT proceed
|
|
@@ -142,19 +144,19 @@ flowchart TD
|
|
|
142
144
|
**Purpose**: Map codebase organization and patterns.
|
|
143
145
|
|
|
144
146
|
**File Operations**:
|
|
145
|
-
- Check for custom template:
|
|
146
|
-
- Read template:
|
|
147
|
-
- Create document:
|
|
147
|
+
- Check for custom template: \`${wr}/user-templates/structure-template.md\`
|
|
148
|
+
- Read template: \`${wr}/templates/structure-template.md\` (if no custom template)
|
|
149
|
+
- Create document: \`${wr}/steering/structure.md\`
|
|
148
150
|
|
|
149
151
|
**Tools**:
|
|
150
152
|
- approvals: Manage approval workflow (actions: request, status, delete)
|
|
151
153
|
|
|
152
154
|
**Process**:
|
|
153
|
-
1. Check for custom template at
|
|
154
|
-
2. If no custom template, read from
|
|
155
|
+
1. Check for custom template at \`${wr}/user-templates/structure-template.md\`
|
|
156
|
+
2. If no custom template, read from \`${wr}/templates/structure-template.md\`
|
|
155
157
|
3. Analyze directory structure and file organization
|
|
156
158
|
4. Document coding patterns and conventions
|
|
157
|
-
5. Create \`structure.md\` at
|
|
159
|
+
5. Create \`structure.md\` at \`${wr}/steering/structure.md\`
|
|
158
160
|
6. Request approval using approvals tool with action:'request'
|
|
159
161
|
7. Poll status using approvals with action:'status' until approved/needs-revision
|
|
160
162
|
8. If needs-revision: update document using comments, create NEW approval, do NOT proceed
|
|
@@ -165,8 +167,8 @@ flowchart TD
|
|
|
165
167
|
## Workflow Rules
|
|
166
168
|
|
|
167
169
|
- Create documents directly at specified file paths
|
|
168
|
-
- Check for custom templates in
|
|
169
|
-
- Read templates from
|
|
170
|
+
- Check for custom templates in \`${wr}/user-templates/\` first
|
|
171
|
+
- Read templates from \`${wr}/templates/\` directory if no custom template exists
|
|
170
172
|
- Follow exact template structures
|
|
171
173
|
- Get explicit user approval between phases (using approvals tool with action:'request')
|
|
172
174
|
- Complete phases in sequence (no skipping)
|
|
@@ -178,7 +180,7 @@ flowchart TD
|
|
|
178
180
|
|
|
179
181
|
## File Structure
|
|
180
182
|
\`\`\`
|
|
181
|
-
|
|
183
|
+
${wr}/
|
|
182
184
|
├── templates/ # Auto-populated on server start
|
|
183
185
|
│ ├── product-template.md
|
|
184
186
|
│ ├── tech-template.md
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steering-guide.js","sourceRoot":"","sources":["../../src/tools/steering-guide.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"steering-guide.js","sourceRoot":"","sources":["../../src/tools/steering-guide.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;ySAG0R;IACvS,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAS,EAAE,OAAoB;IACxE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,+EAA+E;QACxF,IAAI,EAAE;YACJ,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACvE,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC;QACD,SAAS,EAAE;YACT,8CAA8C;YAC9C,yBAAyB;YACzB,+BAA+B;YAC/B,2BAA2B;YAC3B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,yDAAyD;SACxH;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,MAAM,EAAE,GAAG,YAAY,CAAC;IACxB,OAAO;;;;;;;;;;;;;;;iDAewC,EAAE;;;;;;;;;;;;gDAYH,EAAE;;;;;;;;;;;;gDAYF,EAAE;;;;;;;;;;;;;;;;;;;;;;;;iCAwBjB,EAAE;qBACd,EAAE;uBACA,EAAE;;;;;;;;oCAQW,EAAE;wCACE,EAAE;;gCAEV,EAAE;;;;;;;;;;;iCAWD,EAAE;qBACd,EAAE;uBACA,EAAE;;;;;;oCAMW,EAAE;wCACE,EAAE;;;6BAGb,EAAE;;;;;;;;;;;iCAWE,EAAE;qBACd,EAAE;uBACA,EAAE;;;;;;oCAMW,EAAE;wCACE,EAAE;;;kCAGR,EAAE;;;;;;;;;;;oCAWA,EAAE;0BACZ,EAAE;;;;;;;;;;;;EAY1B,EAAE;;;;;;;;;OASG,CAAC;AACR,CAAC"}
|