specweave 0.18.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/locales/de/.gitkeep +0 -0
- package/dist/locales/de/cli.json +108 -0
- package/dist/locales/en/cli.json +287 -0
- package/dist/locales/en/errors.json +7 -0
- package/dist/locales/en/templates.json +6 -0
- package/dist/locales/es/.gitkeep +0 -0
- package/dist/locales/es/cli.json +41 -0
- package/dist/locales/fr/.gitkeep +0 -0
- package/dist/locales/fr/cli.json +108 -0
- package/dist/locales/ja/.gitkeep +0 -0
- package/dist/locales/ja/cli.json +108 -0
- package/dist/locales/ko/.gitkeep +0 -0
- package/dist/locales/ko/cli.json +108 -0
- package/dist/locales/pt/.gitkeep +0 -0
- package/dist/locales/pt/cli.json +108 -0
- package/dist/locales/ru/.gitkeep +0 -0
- package/dist/locales/ru/cli.json +269 -0
- package/dist/locales/zh/.gitkeep +0 -0
- package/dist/locales/zh/cli.json +108 -0
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +25 -0
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +191 -0
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +63 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.js +216 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +2 -2
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.js +19 -4
- package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -1
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +26 -0
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +195 -0
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -0
- package/dist/spec-parser.js +629 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +107 -3
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts +32 -54
- package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.js +141 -138
- package/dist/src/core/sync/enhanced-content-builder.js.map +1 -1
- package/dist/src/core/sync/spec-content-sync.d.ts +88 -0
- package/dist/src/core/sync/spec-content-sync.d.ts.map +1 -0
- package/dist/src/core/sync/spec-content-sync.js +5 -0
- package/dist/src/core/sync/spec-content-sync.js.map +1 -0
- package/dist/src/core/sync/types.d.ts +52 -0
- package/dist/src/core/sync/types.d.ts.map +1 -0
- package/dist/src/core/sync/types.js +5 -0
- package/dist/src/core/sync/types.js.map +1 -0
- package/dist/src/core/types/config.d.ts +31 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js +9 -0
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +4 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/increment-metadata.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -1
- package/plugins/specweave/agents/pm/AGENT.md +159 -12
- package/plugins/specweave/commands/specweave.md +70 -405
- package/plugins/specweave/hooks/post-increment-planning.sh +26 -2
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
- package/plugins/specweave-github/hooks/post-task-completion.sh +32 -0
- package/plugins/specweave-github/lib/epic-content-builder.js +227 -0
- package/plugins/specweave-github/lib/epic-content-builder.ts +317 -0
- package/plugins/specweave-github/lib/github-epic-sync.js +23 -24
- package/plugins/specweave-github/lib/github-epic-sync.ts +29 -4
|
@@ -1,198 +1,201 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Enhanced Content Builder
|
|
3
3
|
*
|
|
4
|
-
* Builds rich external issue descriptions with full spec content
|
|
5
|
-
*
|
|
6
|
-
* - User stories with collapsible sections
|
|
7
|
-
* - Acceptance criteria
|
|
8
|
-
* - Task links with GitHub issue numbers
|
|
9
|
-
* - Architecture references
|
|
10
|
-
* - Source links
|
|
4
|
+
* Builds rich external issue descriptions with full spec content
|
|
5
|
+
* for GitHub, JIRA, and Azure DevOps integrations.
|
|
11
6
|
*/
|
|
12
7
|
export class EnhancedContentBuilder {
|
|
13
8
|
/**
|
|
14
|
-
* Build complete external
|
|
9
|
+
* Build complete external description from spec
|
|
15
10
|
*/
|
|
16
11
|
buildExternalDescription(spec) {
|
|
17
12
|
const sections = [];
|
|
18
|
-
// Summary
|
|
13
|
+
// 1. Executive Summary
|
|
19
14
|
sections.push(this.buildSummarySection(spec));
|
|
20
|
-
// User
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
// 2. User Stories (collapsible in GitHub)
|
|
16
|
+
sections.push(this.buildUserStoriesSection(spec.userStories));
|
|
17
|
+
// 3. Linked Tasks (if available)
|
|
18
|
+
if (spec.tasks && spec.tasks.length > 0) {
|
|
19
|
+
sections.push(this.buildTasksSection(spec.tasks));
|
|
23
20
|
}
|
|
24
|
-
//
|
|
25
|
-
if (spec.taskMapping) {
|
|
26
|
-
sections.push(this.buildTasksSection(spec.taskMapping));
|
|
27
|
-
}
|
|
28
|
-
// Architecture section
|
|
21
|
+
// 4. Architecture References (if available)
|
|
29
22
|
if (spec.architectureDocs && spec.architectureDocs.length > 0) {
|
|
30
23
|
sections.push(this.buildArchitectureSection(spec.architectureDocs));
|
|
31
24
|
}
|
|
32
|
-
// Source
|
|
25
|
+
// 5. Source Links (if available)
|
|
33
26
|
if (spec.sourceLinks) {
|
|
34
27
|
sections.push(this.buildSourceLinksSection(spec.sourceLinks));
|
|
35
28
|
}
|
|
36
|
-
return sections.
|
|
29
|
+
return sections.join('\n\n');
|
|
37
30
|
}
|
|
38
31
|
/**
|
|
39
|
-
* Build summary section
|
|
32
|
+
* Build summary section
|
|
40
33
|
*/
|
|
41
34
|
buildSummarySection(spec) {
|
|
42
|
-
return `## Summary\n\n${spec.summary
|
|
35
|
+
return `## Summary\n\n${spec.summary}`;
|
|
43
36
|
}
|
|
44
37
|
/**
|
|
45
|
-
* Build user stories section with collapsible
|
|
38
|
+
* Build user stories section with collapsible details
|
|
46
39
|
*/
|
|
47
40
|
buildUserStoriesSection(userStories) {
|
|
48
|
-
|
|
41
|
+
if (!userStories || userStories.length === 0) {
|
|
42
|
+
return `## User Stories\n\nNo user stories defined.`;
|
|
43
|
+
}
|
|
44
|
+
const sections = ['## User Stories'];
|
|
49
45
|
for (const story of userStories) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
lines.push(`<summary><strong>${story.id}: ${story.title}</strong></summary>`);
|
|
53
|
-
lines.push('');
|
|
54
|
-
if (story.acceptanceCriteria && story.acceptanceCriteria.length > 0) {
|
|
55
|
-
lines.push('**Acceptance Criteria**:');
|
|
56
|
-
for (const ac of story.acceptanceCriteria) {
|
|
57
|
-
const priority = ac.priority ? ` (${ac.priority}` : '';
|
|
58
|
-
const testable = ac.testable ? ', testable)' : ')';
|
|
59
|
-
const suffix = priority || ac.testable ? `${priority}${testable}` : '';
|
|
60
|
-
const checkbox = ac.completed ? '[x]' : '[ ]';
|
|
61
|
-
lines.push(`- ${checkbox} **${ac.id}**: ${ac.description}${suffix}`);
|
|
62
|
-
}
|
|
63
|
-
lines.push('');
|
|
64
|
-
}
|
|
65
|
-
lines.push('</details>');
|
|
46
|
+
const storySection = this.buildUserStoryDetails(story);
|
|
47
|
+
sections.push(storySection);
|
|
66
48
|
}
|
|
67
|
-
return
|
|
49
|
+
return sections.join('\n\n');
|
|
68
50
|
}
|
|
69
51
|
/**
|
|
70
|
-
* Build
|
|
71
|
-
*
|
|
72
|
-
* NEW: Shows tasks as checkboxes with completion status
|
|
52
|
+
* Build individual user story with collapsible details
|
|
73
53
|
*/
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
lines.push(
|
|
78
|
-
|
|
79
|
-
const total = taskMapping.tasks.length;
|
|
80
|
-
const completed = taskMapping.tasks.filter(t => t.completed || t.status === 'completed').length;
|
|
81
|
-
const percent = total > 0 ? Math.round((completed / total) * 100) : 0;
|
|
82
|
-
// Progress header with count
|
|
83
|
-
lines.push(`**Progress**: ${completed}/${total} tasks completed (${percent}%)`);
|
|
54
|
+
buildUserStoryDetails(story) {
|
|
55
|
+
const lines = [];
|
|
56
|
+
// Use GitHub collapsible format
|
|
57
|
+
lines.push(`<details>`);
|
|
58
|
+
lines.push(`<summary><strong>${story.id}: ${story.title}</strong></summary>`);
|
|
84
59
|
lines.push('');
|
|
85
|
-
//
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
const filled = Math.round((completed / total) * barWidth);
|
|
89
|
-
const bar = '█'.repeat(filled) + '░'.repeat(barWidth - filled);
|
|
90
|
-
lines.push(`\`${bar}\` ${percent}%`);
|
|
60
|
+
// Add description if available
|
|
61
|
+
if (story.description) {
|
|
62
|
+
lines.push(`**Description**: ${story.description}`);
|
|
91
63
|
lines.push('');
|
|
92
64
|
}
|
|
93
|
-
//
|
|
94
|
-
if (
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
checkbox = isCompleted ? '[x]' : '[ ]';
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// GitHub uses markdown checkboxes
|
|
110
|
-
checkbox = isCompleted ? '[x]' : '[ ]';
|
|
111
|
-
}
|
|
112
|
-
const statusEmoji = isCompleted && showCompletionStatus && provider === 'github' ? ' ✅' : '';
|
|
113
|
-
// Issue link (provider-specific)
|
|
114
|
-
let issueLink = '';
|
|
115
|
-
if (provider === 'github' && task.githubIssue) {
|
|
116
|
-
issueLink = ` [#${task.githubIssue}](https://github.com/issue/${task.githubIssue})`;
|
|
117
|
-
}
|
|
118
|
-
else if (provider === 'jira' && task.jiraIssue) {
|
|
119
|
-
issueLink = ` [${task.jiraIssue}]`;
|
|
120
|
-
}
|
|
121
|
-
else if (provider === 'ado' && task.adoWorkItem) {
|
|
122
|
-
issueLink = ` [#${task.adoWorkItem}]`;
|
|
65
|
+
// Acceptance Criteria
|
|
66
|
+
if (story.acceptanceCriteria && story.acceptanceCriteria.length > 0) {
|
|
67
|
+
lines.push('**Acceptance Criteria**:');
|
|
68
|
+
lines.push('');
|
|
69
|
+
// Group by priority
|
|
70
|
+
const byPriority = this.groupAcceptanceCriteriaByPriority(story.acceptanceCriteria);
|
|
71
|
+
for (const priority of ['P1', 'P2', 'P3', 'OTHER']) {
|
|
72
|
+
const criteria = byPriority[priority];
|
|
73
|
+
if (criteria && criteria.length > 0) {
|
|
74
|
+
for (const ac of criteria) {
|
|
75
|
+
const priorityLabel = ac.priority ? ` (${ac.priority})` : '';
|
|
76
|
+
lines.push(`- **${ac.id}**${priorityLabel}: ${ac.description}`);
|
|
77
|
+
}
|
|
123
78
|
}
|
|
124
|
-
// User stories
|
|
125
|
-
const userStories = task.userStories && task.userStories.length > 0
|
|
126
|
-
? ` (implements ${task.userStories.join(', ')})`
|
|
127
|
-
: '';
|
|
128
|
-
lines.push(`- ${checkbox} **${task.id}**: ${task.title}${userStories}${issueLink}${statusEmoji}`);
|
|
129
79
|
}
|
|
130
80
|
}
|
|
131
81
|
else {
|
|
132
|
-
|
|
133
|
-
for (const task of taskMapping.tasks) {
|
|
134
|
-
const issueLink = task.githubIssue ? ` (#${task.githubIssue})` : '';
|
|
135
|
-
lines.push(`- **${task.id}**: ${task.title}${issueLink}`);
|
|
136
|
-
if (task.userStories && task.userStories.length > 0) {
|
|
137
|
-
lines.push(` - Implements: ${task.userStories.join(', ')}`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
82
|
+
lines.push('**Acceptance Criteria**: No acceptance criteria defined.');
|
|
140
83
|
}
|
|
141
84
|
lines.push('');
|
|
142
|
-
lines.push(
|
|
85
|
+
lines.push('</details>');
|
|
143
86
|
return lines.join('\n');
|
|
144
87
|
}
|
|
145
88
|
/**
|
|
146
|
-
*
|
|
89
|
+
* Group acceptance criteria by priority
|
|
147
90
|
*/
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
91
|
+
groupAcceptanceCriteriaByPriority(criteria) {
|
|
92
|
+
const grouped = {
|
|
93
|
+
P1: [],
|
|
94
|
+
P2: [],
|
|
95
|
+
P3: [],
|
|
96
|
+
OTHER: [] // For criteria without priority or with other priorities
|
|
97
|
+
};
|
|
98
|
+
for (const ac of criteria) {
|
|
99
|
+
const priority = ac.priority || 'OTHER';
|
|
100
|
+
if (priority in grouped) {
|
|
101
|
+
grouped[priority].push(ac);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
grouped.OTHER.push(ac);
|
|
105
|
+
}
|
|
151
106
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
107
|
+
return grouped;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Build tasks section with GitHub issue links
|
|
111
|
+
* Supports both simple array and options object for backward compatibility
|
|
112
|
+
*/
|
|
113
|
+
buildTasksSection(tasks, ownerOrOptions, repo) {
|
|
114
|
+
// Handle both old and new signatures
|
|
115
|
+
let taskList;
|
|
116
|
+
let owner;
|
|
117
|
+
let options = {};
|
|
118
|
+
if (Array.isArray(tasks)) {
|
|
119
|
+
taskList = tasks;
|
|
120
|
+
if (typeof ownerOrOptions === 'string') {
|
|
121
|
+
owner = ownerOrOptions;
|
|
122
|
+
}
|
|
123
|
+
else if (typeof ownerOrOptions === 'object') {
|
|
124
|
+
options = ownerOrOptions;
|
|
162
125
|
}
|
|
163
|
-
lines.push('');
|
|
164
126
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
127
|
+
else {
|
|
128
|
+
// tasks is actually taskMapping object
|
|
129
|
+
taskList = tasks?.tasks || [];
|
|
130
|
+
if (typeof ownerOrOptions === 'object') {
|
|
131
|
+
options = ownerOrOptions;
|
|
132
|
+
owner = tasks?.owner;
|
|
133
|
+
repo = tasks?.repo;
|
|
169
134
|
}
|
|
135
|
+
}
|
|
136
|
+
if (!taskList || taskList.length === 0) {
|
|
137
|
+
return `## Tasks\n\nNo tasks defined.`;
|
|
138
|
+
}
|
|
139
|
+
const lines = ['## Tasks'];
|
|
140
|
+
lines.push('');
|
|
141
|
+
// Add progress bar if requested
|
|
142
|
+
if (options.showProgressBar && taskList.length > 0) {
|
|
143
|
+
const completed = taskList.filter(t => t.completed).length;
|
|
144
|
+
const total = taskList.length;
|
|
145
|
+
const percentage = Math.round((completed / total) * 100);
|
|
146
|
+
lines.push(`**Progress**: ${completed}/${total} tasks (${percentage}%)`);
|
|
170
147
|
lines.push('');
|
|
171
148
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
149
|
+
for (const task of taskList) {
|
|
150
|
+
let taskLine = '';
|
|
151
|
+
// Add checkbox if requested
|
|
152
|
+
if (options.showCheckboxes) {
|
|
153
|
+
taskLine += task.completed ? '- [x] ' : '- [ ] ';
|
|
176
154
|
}
|
|
177
|
-
|
|
155
|
+
else {
|
|
156
|
+
taskLine += '- ';
|
|
157
|
+
}
|
|
158
|
+
taskLine += `**${task.id}**: ${task.title}`;
|
|
159
|
+
// Add GitHub issue link if available
|
|
160
|
+
if (task.githubIssue && owner && repo) {
|
|
161
|
+
const issueUrl = `https://github.com/${owner}/${repo}/issues/${task.githubIssue}`;
|
|
162
|
+
taskLine += ` ([#${task.githubIssue}](${issueUrl}))`;
|
|
163
|
+
}
|
|
164
|
+
// Add user story references
|
|
165
|
+
if (task.userStoryIds && task.userStoryIds.length > 0) {
|
|
166
|
+
taskLine += ` → Implements: ${task.userStoryIds.join(', ')}`;
|
|
167
|
+
}
|
|
168
|
+
// Add completion status if requested
|
|
169
|
+
if (options.showCompletionStatus && task.completed) {
|
|
170
|
+
taskLine += ' ✅';
|
|
171
|
+
}
|
|
172
|
+
lines.push(taskLine);
|
|
178
173
|
}
|
|
179
|
-
return lines.join('\n')
|
|
174
|
+
return lines.join('\n');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Build architecture section
|
|
178
|
+
*/
|
|
179
|
+
buildArchitectureSection(docs) {
|
|
180
|
+
const lines = ['## Architecture'];
|
|
181
|
+
lines.push('');
|
|
182
|
+
lines.push('Related architecture documentation:');
|
|
183
|
+
lines.push('');
|
|
184
|
+
for (const doc of docs) {
|
|
185
|
+
const fileName = doc.split('/').pop() || doc;
|
|
186
|
+
lines.push(`- [${fileName}](${doc})`);
|
|
187
|
+
}
|
|
188
|
+
return lines.join('\n');
|
|
180
189
|
}
|
|
181
190
|
/**
|
|
182
191
|
* Build source links section
|
|
183
192
|
*/
|
|
184
193
|
buildSourceLinksSection(sourceLinks) {
|
|
185
|
-
const lines = ['## Source'];
|
|
194
|
+
const lines = ['## Source Files'];
|
|
186
195
|
lines.push('');
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
if (sourceLinks.plan) {
|
|
191
|
-
lines.push(`- [plan.md](${sourceLinks.plan})`);
|
|
192
|
-
}
|
|
193
|
-
if (sourceLinks.tasks) {
|
|
194
|
-
lines.push(`- [tasks.md](${sourceLinks.tasks})`);
|
|
195
|
-
}
|
|
196
|
+
lines.push(`- **Specification**: [spec.md](${sourceLinks.spec})`);
|
|
197
|
+
lines.push(`- **Technical Plan**: [plan.md](${sourceLinks.plan})`);
|
|
198
|
+
lines.push(`- **Task List**: [tasks.md](${sourceLinks.tasks})`);
|
|
196
199
|
return lines.join('\n');
|
|
197
200
|
}
|
|
198
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhanced-content-builder.js","sourceRoot":"","sources":["../../../../src/core/sync/enhanced-content-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"enhanced-content-builder.js","sourceRoot":"","sources":["../../../../src/core/sync/enhanced-content-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for spec content synchronization with external tools
|
|
3
|
+
*/
|
|
4
|
+
export interface SpecIdentifier {
|
|
5
|
+
/** Compact format: SPEC-0031 */
|
|
6
|
+
compact: string;
|
|
7
|
+
/** Full format: spec-0031-external-tool-status-sync */
|
|
8
|
+
full: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AcceptanceCriterion {
|
|
11
|
+
/** AC identifier: AC-US1-01 */
|
|
12
|
+
id: string;
|
|
13
|
+
/** Description of the acceptance criterion */
|
|
14
|
+
description: string;
|
|
15
|
+
/** Priority: P1, P2, P3 */
|
|
16
|
+
priority?: string;
|
|
17
|
+
/** Whether this criterion is testable */
|
|
18
|
+
testable?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface UserStory {
|
|
21
|
+
/** User story ID: 001, 002, etc. */
|
|
22
|
+
id: string;
|
|
23
|
+
/** Title of the user story */
|
|
24
|
+
title: string;
|
|
25
|
+
/** As a... (role) */
|
|
26
|
+
asA: string;
|
|
27
|
+
/** I want... (action) */
|
|
28
|
+
iWant: string;
|
|
29
|
+
/** So that... (benefit) */
|
|
30
|
+
soThat: string;
|
|
31
|
+
/** Acceptance criteria for this user story */
|
|
32
|
+
acceptanceCriteria: AcceptanceCriterion[];
|
|
33
|
+
}
|
|
34
|
+
export interface Task {
|
|
35
|
+
/** Task ID: T-001, T-002, etc. */
|
|
36
|
+
id: string;
|
|
37
|
+
/** Title of the task */
|
|
38
|
+
title: string;
|
|
39
|
+
/** User stories this task implements */
|
|
40
|
+
userStories: string[];
|
|
41
|
+
/** GitHub issue number (if synced) */
|
|
42
|
+
githubIssue?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface TaskMapping {
|
|
45
|
+
/** Increment ID this mapping belongs to */
|
|
46
|
+
incrementId: string;
|
|
47
|
+
/** Tasks from the increment */
|
|
48
|
+
tasks: Task[];
|
|
49
|
+
/** URL to tasks.md file */
|
|
50
|
+
tasksUrl: string;
|
|
51
|
+
}
|
|
52
|
+
export interface ArchitectureDoc {
|
|
53
|
+
/** Type of architecture document */
|
|
54
|
+
type: 'adr' | 'hld' | 'diagram';
|
|
55
|
+
/** Path to the document */
|
|
56
|
+
path: string;
|
|
57
|
+
/** Title/description of the document */
|
|
58
|
+
title: string;
|
|
59
|
+
}
|
|
60
|
+
export interface SourceLinks {
|
|
61
|
+
/** Link to spec.md */
|
|
62
|
+
spec?: string;
|
|
63
|
+
/** Link to plan.md */
|
|
64
|
+
plan?: string;
|
|
65
|
+
/** Link to tasks.md */
|
|
66
|
+
tasks?: string;
|
|
67
|
+
}
|
|
68
|
+
export interface SpecContent {
|
|
69
|
+
/** Spec identifier */
|
|
70
|
+
identifier: SpecIdentifier;
|
|
71
|
+
/** Title of the spec */
|
|
72
|
+
title: string;
|
|
73
|
+
/** Project this spec belongs to */
|
|
74
|
+
project: string;
|
|
75
|
+
/** Executive summary */
|
|
76
|
+
summary: string;
|
|
77
|
+
/** User stories */
|
|
78
|
+
userStories: UserStory[];
|
|
79
|
+
/** Metadata (priority, etc.) */
|
|
80
|
+
metadata: Record<string, any>;
|
|
81
|
+
/** Task mapping (optional) */
|
|
82
|
+
taskMapping?: TaskMapping;
|
|
83
|
+
/** Architecture documents (optional) */
|
|
84
|
+
architectureDocs?: ArchitectureDoc[];
|
|
85
|
+
/** Source links (optional) */
|
|
86
|
+
sourceLinks?: SourceLinks;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=spec-content-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-content-sync.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/spec-content-sync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,IAAI;IACnB,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IAChC,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,UAAU,EAAE,cAAc,CAAC;IAC3B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,8BAA8B;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-content-sync.js","sourceRoot":"","sources":["../../../../src/core/sync/spec-content-sync.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for Enhanced Content Sync
|
|
3
|
+
*/
|
|
4
|
+
export interface AcceptanceCriterion {
|
|
5
|
+
id: string;
|
|
6
|
+
description: string;
|
|
7
|
+
priority?: string;
|
|
8
|
+
completed?: boolean;
|
|
9
|
+
testable?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface UserStory {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
acceptanceCriteria?: AcceptanceCriterion[];
|
|
16
|
+
}
|
|
17
|
+
export interface TaskLink {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
githubIssue?: number;
|
|
21
|
+
jiraIssue?: string;
|
|
22
|
+
adoWorkItem?: number;
|
|
23
|
+
userStoryIds: string[];
|
|
24
|
+
completed?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface SourceLinks {
|
|
27
|
+
spec: string;
|
|
28
|
+
plan: string;
|
|
29
|
+
tasks: string;
|
|
30
|
+
}
|
|
31
|
+
export interface SpecContent {
|
|
32
|
+
id: string;
|
|
33
|
+
title: string;
|
|
34
|
+
summary: string;
|
|
35
|
+
userStories: UserStory[];
|
|
36
|
+
tasks?: TaskLink[];
|
|
37
|
+
architectureDocs?: string[];
|
|
38
|
+
sourceLinks?: SourceLinks;
|
|
39
|
+
}
|
|
40
|
+
export interface EnhancedContent {
|
|
41
|
+
title: string;
|
|
42
|
+
body: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Enhanced spec content for external tool sync
|
|
46
|
+
* Extends SpecContent with additional metadata
|
|
47
|
+
*/
|
|
48
|
+
export interface EnhancedSpecContent extends SpecContent {
|
|
49
|
+
taskMapping?: any;
|
|
50
|
+
[key: string]: any;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/sync/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -62,6 +62,35 @@ export interface AdapterConfig {
|
|
|
62
62
|
/** Additional adapter settings */
|
|
63
63
|
[key: string]: any;
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Testing mode options
|
|
67
|
+
*/
|
|
68
|
+
export type TestMode = 'TDD' | 'test-after' | 'manual';
|
|
69
|
+
/**
|
|
70
|
+
* Coverage target configuration
|
|
71
|
+
*/
|
|
72
|
+
export interface CoverageTargets {
|
|
73
|
+
/** Unit test coverage target (70-95%) */
|
|
74
|
+
unit: number;
|
|
75
|
+
/** Integration test coverage target (70-95%) */
|
|
76
|
+
integration: number;
|
|
77
|
+
/** E2E test coverage target (70-95%) */
|
|
78
|
+
e2e: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Testing configuration
|
|
82
|
+
*
|
|
83
|
+
* Controls default testing approach and coverage targets for all increments.
|
|
84
|
+
* Can be overridden per-increment via frontmatter.
|
|
85
|
+
*/
|
|
86
|
+
export interface TestingConfig {
|
|
87
|
+
/** Default testing mode for new increments */
|
|
88
|
+
defaultTestMode: TestMode;
|
|
89
|
+
/** Default overall coverage target (70-95%) */
|
|
90
|
+
defaultCoverageTarget: number;
|
|
91
|
+
/** Specific coverage targets per test type */
|
|
92
|
+
coverageTargets: CoverageTargets;
|
|
93
|
+
}
|
|
65
94
|
/**
|
|
66
95
|
* Complete SpecWeave Configuration
|
|
67
96
|
*
|
|
@@ -74,6 +103,8 @@ export interface SpecweaveConfig {
|
|
|
74
103
|
project?: ProjectMetadata;
|
|
75
104
|
/** Adapter configuration */
|
|
76
105
|
adapters?: AdapterConfig;
|
|
106
|
+
/** Testing configuration */
|
|
107
|
+
testing?: TestingConfig;
|
|
77
108
|
/** Primary language for generated content and CLI */
|
|
78
109
|
language?: SupportedLanguage;
|
|
79
110
|
/** Translation settings for multilingual support */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4EAA4E;IAC5E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,wCAAwC;IACxC,aAAa,CAAC,EAAE;QACd,mEAAmE;QACnE,YAAY,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;QAE1C,yDAAyD;QACzD,eAAe,CAAC,EAAE;YAChB,yDAAyD;YACzD,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IAEF,mCAAmC;IACnC,SAAS,CAAC,EAAE;QACV,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE1C,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,uBAAuB;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAE7B,oDAAoD;IACpD,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4EAA4E;IAC5E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,wCAAwC;IACxC,aAAa,CAAC,EAAE;QACd,mEAAmE;QACnE,YAAY,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;QAE1C,yDAAyD;QACzD,eAAe,CAAC,EAAE;YAChB,yDAAyD;YACzD,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IAEF,mCAAmC;IACnC,SAAS,CAAC,EAAE;QACV,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE1C,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IAEb,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,eAAe,EAAE,QAAQ,CAAC;IAE1B,+CAA+C;IAC/C,qBAAqB,EAAE,MAAM,CAAC;IAE9B,8CAA8C;IAC9C,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,uBAAuB;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAE7B,oDAAoD;IACpD,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,eAAe,CAyEnD,CAAC"}
|
|
@@ -18,6 +18,15 @@ export const DEFAULT_CONFIG = {
|
|
|
18
18
|
adapters: {
|
|
19
19
|
default: 'claude',
|
|
20
20
|
},
|
|
21
|
+
testing: {
|
|
22
|
+
defaultTestMode: 'TDD',
|
|
23
|
+
defaultCoverageTarget: 80,
|
|
24
|
+
coverageTargets: {
|
|
25
|
+
unit: 85,
|
|
26
|
+
integration: 80,
|
|
27
|
+
e2e: 90,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
21
30
|
limits: {
|
|
22
31
|
maxActiveIncrements: 1, // v0.7.0+: 1 active increment (maximum focus)
|
|
23
32
|
hardCap: 2, // Emergency ceiling (never >2)
|