specweave 1.0.255 → 1.0.256

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.
Files changed (92) hide show
  1. package/CLAUDE.md +24 -24
  2. package/README.md +138 -203
  3. package/dist/src/core/ac-checkbox-formatter.d.ts +24 -0
  4. package/dist/src/core/ac-checkbox-formatter.d.ts.map +1 -0
  5. package/dist/src/core/ac-checkbox-formatter.js +35 -0
  6. package/dist/src/core/ac-checkbox-formatter.js.map +1 -0
  7. package/dist/src/core/ac-progress-sync.d.ts +116 -0
  8. package/dist/src/core/ac-progress-sync.d.ts.map +1 -0
  9. package/dist/src/core/ac-progress-sync.js +272 -0
  10. package/dist/src/core/ac-progress-sync.js.map +1 -0
  11. package/dist/src/core/fabric/registry-schema.d.ts +79 -0
  12. package/dist/src/core/fabric/registry-schema.d.ts.map +1 -0
  13. package/dist/src/core/fabric/registry-schema.js +6 -0
  14. package/dist/src/core/fabric/registry-schema.js.map +1 -0
  15. package/dist/src/core/fabric/security-scanner.d.ts +12 -0
  16. package/dist/src/core/fabric/security-scanner.d.ts.map +1 -0
  17. package/dist/src/core/fabric/security-scanner.js +219 -0
  18. package/dist/src/core/fabric/security-scanner.js.map +1 -0
  19. package/dist/src/core/types/sync-profile.d.ts +44 -0
  20. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  21. package/dist/src/core/types/sync-profile.js.map +1 -1
  22. package/package.json +1 -1
  23. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +4 -4
  24. package/plugins/{specweave-github/hooks/github-ac-sync-handler.sh → specweave/hooks/v2/handlers/ac-sync-dispatcher.sh} +96 -92
  25. package/plugins/specweave/skills/architect/SKILL.md +1 -1
  26. package/plugins/specweave/skills/auto/SKILL.md +1 -1
  27. package/plugins/specweave/skills/cancel-auto/SKILL.md +1 -1
  28. package/plugins/specweave/skills/code-simplifier/SKILL.md +1 -1
  29. package/plugins/specweave/skills/do/SKILL.md +1 -1
  30. package/plugins/specweave/skills/docs/SKILL.md +1 -1
  31. package/plugins/specweave/skills/docs-updater/SKILL.md +1 -1
  32. package/plugins/specweave/skills/done/SKILL.md +13 -70
  33. package/plugins/specweave/skills/framework/SKILL.md +1 -1
  34. package/plugins/specweave/skills/grill/SKILL.md +1 -1
  35. package/plugins/specweave/skills/increment/SKILL.md +1 -1
  36. package/plugins/specweave/skills/increment-planner/SKILL.md +1 -1
  37. package/plugins/specweave/skills/lsp/SKILL.md +1 -1
  38. package/plugins/specweave/skills/pm/SKILL.md +1 -1
  39. package/plugins/specweave/skills/progress/SKILL.md +1 -1
  40. package/plugins/specweave/skills/save/SKILL.md +1 -1
  41. package/plugins/specweave/skills/security/SKILL.md +1 -1
  42. package/plugins/specweave/skills/security-patterns/SKILL.md +1 -1
  43. package/plugins/specweave/skills/tdd-cycle/SKILL.md +1 -1
  44. package/plugins/specweave/skills/tdd-green/SKILL.md +1 -1
  45. package/plugins/specweave/skills/tdd-orchestrator/SKILL.md +1 -1
  46. package/plugins/specweave/skills/tdd-red/SKILL.md +1 -1
  47. package/plugins/specweave/skills/validate/SKILL.md +1 -1
  48. package/plugins/specweave-github/commands/sync.md +1 -22
  49. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +0 -205
  50. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts.map +0 -1
  51. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +0 -685
  52. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +0 -1
  53. package/dist/plugins/specweave-github/lib/cli-sync-increment-changes.d.ts +0 -12
  54. package/dist/plugins/specweave-github/lib/cli-sync-increment-changes.d.ts.map +0 -1
  55. package/dist/plugins/specweave-github/lib/cli-sync-increment-changes.js +0 -28
  56. package/dist/plugins/specweave-github/lib/cli-sync-increment-changes.js.map +0 -1
  57. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts +0 -21
  58. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts.map +0 -1
  59. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js +0 -471
  60. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js.map +0 -1
  61. package/dist/plugins/specweave-github/lib/github-status-sync.d.ts +0 -53
  62. package/dist/plugins/specweave-github/lib/github-status-sync.d.ts.map +0 -1
  63. package/dist/plugins/specweave-github/lib/github-status-sync.js +0 -120
  64. package/dist/plugins/specweave-github/lib/github-status-sync.js.map +0 -1
  65. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.d.ts +0 -18
  66. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.d.ts.map +0 -1
  67. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js +0 -297
  68. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js.map +0 -1
  69. package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts +0 -94
  70. package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts.map +0 -1
  71. package/dist/plugins/specweave-github/lib/increment-issue-builder.js +0 -385
  72. package/dist/plugins/specweave-github/lib/increment-issue-builder.js.map +0 -1
  73. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +0 -611
  74. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +0 -909
  75. package/plugins/specweave-github/lib/cli-sync-increment-changes.d.js +0 -1
  76. package/plugins/specweave-github/lib/cli-sync-increment-changes.d.ts +0 -12
  77. package/plugins/specweave-github/lib/cli-sync-increment-changes.d.ts.map +0 -1
  78. package/plugins/specweave-github/lib/cli-sync-increment-changes.js +0 -17
  79. package/plugins/specweave-github/lib/cli-sync-increment-changes.js.map +0 -1
  80. package/plugins/specweave-github/lib/cli-sync-increment-changes.ts +0 -33
  81. package/plugins/specweave-github/lib/github-increment-sync-cli.js +0 -474
  82. package/plugins/specweave-github/lib/github-increment-sync-cli.ts +0 -616
  83. package/plugins/specweave-github/lib/github-status-sync.js +0 -107
  84. package/plugins/specweave-github/lib/github-status-sync.ts +0 -163
  85. package/plugins/specweave-github/lib/github-sync-increment-changes.d.js +0 -0
  86. package/plugins/specweave-github/lib/github-sync-increment-changes.d.ts +0 -18
  87. package/plugins/specweave-github/lib/github-sync-increment-changes.d.ts.map +0 -1
  88. package/plugins/specweave-github/lib/github-sync-increment-changes.js +0 -253
  89. package/plugins/specweave-github/lib/github-sync-increment-changes.js.map +0 -1
  90. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +0 -391
  91. package/plugins/specweave-github/lib/increment-issue-builder.js +0 -402
  92. package/plugins/specweave-github/lib/increment-issue-builder.ts +0 -520
@@ -1,385 +0,0 @@
1
- /**
2
- * Increment Issue Builder - Generate GitHub issues from increment spec.md
3
- *
4
- * For brownfield projects without full living docs structure,
5
- * this builder extracts User Stories and ACs directly from spec.md
6
- * and generates properly formatted GitHub issues.
7
- *
8
- * Correct format: [FS-XXX][US-YYY] User Story Title
9
- * With ACs as checkable items in issue body.
10
- *
11
- * @see ADR-0143 (GitHub Issue Format)
12
- */
13
- import { readFile } from 'fs/promises';
14
- import { existsSync } from 'fs';
15
- import * as path from 'path';
16
- import * as yaml from 'yaml';
17
- export class IncrementIssueBuilder {
18
- constructor(incrementPath, projectRoot) {
19
- this.incrementPath = incrementPath;
20
- this.projectRoot = projectRoot;
21
- }
22
- /**
23
- * Parse increment spec.md and extract all data
24
- */
25
- async parse() {
26
- const specPath = path.join(this.incrementPath, 'spec.md');
27
- if (!existsSync(specPath)) {
28
- throw new Error(`spec.md not found at ${specPath}`);
29
- }
30
- const content = await readFile(specPath, 'utf-8');
31
- // Extract YAML frontmatter
32
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
33
- if (!frontmatterMatch) {
34
- throw new Error('spec.md missing YAML frontmatter');
35
- }
36
- const frontmatter = yaml.parse(frontmatterMatch[1]);
37
- const bodyContent = content.slice(frontmatterMatch[0].length).trim();
38
- // Extract main title
39
- const titleMatch = bodyContent.match(/^#\s+(.+)$/m);
40
- const title = titleMatch ? titleMatch[1].trim() : frontmatter.increment;
41
- // Extract problem statement
42
- const problemStatement = this.extractSection(bodyContent, 'Problem Statement');
43
- // Extract user stories
44
- const userStories = this.extractUserStories(bodyContent);
45
- // Extract out of scope
46
- const outOfScopeSection = this.extractSection(bodyContent, 'Out of Scope');
47
- const outOfScope = outOfScopeSection
48
- .split('\n')
49
- .filter(line => line.startsWith('-'))
50
- .map(line => line.replace(/^-\s*/, '').trim());
51
- // Extract tasks from tasks.md
52
- const tasks = await this.extractTasks();
53
- return {
54
- frontmatter,
55
- title,
56
- problemStatement,
57
- userStories,
58
- tasks,
59
- outOfScope,
60
- };
61
- }
62
- /**
63
- * Extract tasks from tasks.md
64
- */
65
- async extractTasks() {
66
- const tasksPath = path.join(this.incrementPath, 'tasks.md');
67
- if (!existsSync(tasksPath)) {
68
- return [];
69
- }
70
- try {
71
- const content = await readFile(tasksPath, 'utf-8');
72
- const tasks = [];
73
- // Split by task headers: ### T-XXX: Title
74
- const taskBlocks = content.split(/(?=###\s+T-\d+)/);
75
- for (const block of taskBlocks) {
76
- const headerMatch = block.match(/###\s+(T-\d+):\s*(.+)/);
77
- if (!headerMatch)
78
- continue;
79
- const id = headerMatch[1];
80
- const title = headerMatch[2].trim();
81
- // Extract status: **Status**: [x] completed or **Status**: [ ] pending
82
- const statusMatch = block.match(/\*\*Status\*\*:\s*\[([x\s])\]/i);
83
- const completed = statusMatch ? statusMatch[1].toLowerCase() === 'x' : false;
84
- // Extract user stories: **User Story**: US-001 or **Satisfies ACs**: AC-US1-01
85
- const userStoryMatch = block.match(/\*\*User Story\*\*:\s*([^\n]+)/i);
86
- const satisfiesMatch = block.match(/\*\*Satisfies ACs?\*\*:\s*([^\n]+)/i);
87
- let userStories = [];
88
- if (userStoryMatch) {
89
- userStories = userStoryMatch[1].split(',').map(s => s.trim());
90
- }
91
- else if (satisfiesMatch) {
92
- // Extract US IDs from AC IDs (AC-US1-01 → US-001)
93
- const acIds = satisfiesMatch[1].split(',').map(s => s.trim());
94
- const usIds = new Set();
95
- for (const ac of acIds) {
96
- const usMatch = ac.match(/AC-(US\d+)-/i);
97
- if (usMatch) {
98
- usIds.add(usMatch[1]);
99
- }
100
- }
101
- userStories = Array.from(usIds);
102
- }
103
- // Extract priority
104
- const priorityMatch = block.match(/\*\*Priority\*\*:\s*(P\d)/i);
105
- const priority = priorityMatch ? priorityMatch[1] : undefined;
106
- tasks.push({
107
- id,
108
- title,
109
- completed,
110
- userStories,
111
- priority,
112
- });
113
- }
114
- return tasks;
115
- }
116
- catch {
117
- return [];
118
- }
119
- }
120
- /**
121
- * Extract a section by heading
122
- */
123
- extractSection(content, heading) {
124
- const regex = new RegExp(`##\\s+${heading}\\s*\\n([\\s\\S]*?)(?=\\n##\\s|$)`, 'i');
125
- const match = content.match(regex);
126
- return match ? match[1].trim() : '';
127
- }
128
- /**
129
- * Extract user stories from spec.md
130
- */
131
- extractUserStories(content) {
132
- const stories = [];
133
- // Find User Stories section
134
- const userStoriesSection = this.extractSection(content, 'User Stories');
135
- if (!userStoriesSection) {
136
- return stories;
137
- }
138
- // Split by ### US-XXX headers
139
- const storyBlocks = userStoriesSection.split(/(?=###\s+US-\d+)/);
140
- for (const block of storyBlocks) {
141
- const headerMatch = block.match(/###\s+(US-\d+):\s*(.+)/);
142
- if (!headerMatch)
143
- continue;
144
- const id = headerMatch[1];
145
- const title = headerMatch[2].trim();
146
- // Extract As a/I want/So that
147
- const asAMatch = block.match(/\*\*As a\*\*\s+([^\n]+)/i);
148
- const iWantMatch = block.match(/\*\*I want\*\*\s+([^\n]+)/i);
149
- const soThatMatch = block.match(/\*\*So that\*\*\s+([^\n]+)/i);
150
- // Extract Acceptance Criteria
151
- const acceptanceCriteria = this.extractAcceptanceCriteria(block, id);
152
- stories.push({
153
- id,
154
- title,
155
- asA: asAMatch ? asAMatch[1].trim().replace(/,$/, '') : '',
156
- iWant: iWantMatch ? iWantMatch[1].trim().replace(/,$/, '') : '',
157
- soThat: soThatMatch ? soThatMatch[1].trim().replace(/\.$/, '') : '',
158
- acceptanceCriteria,
159
- });
160
- }
161
- return stories;
162
- }
163
- /**
164
- * Extract acceptance criteria from a user story block
165
- */
166
- extractAcceptanceCriteria(block, userStoryId) {
167
- const criteria = [];
168
- // Pattern: - [x] **AC-US1-01**: Description or - [ ] **AC-US1-01**: Description
169
- const acPattern = /-\s*\[([ x])\]\s*\*\*AC-(US\d+)-(\d+)\*\*:\s*(.+)/gi;
170
- let match;
171
- while ((match = acPattern.exec(block)) !== null) {
172
- const completed = match[1].toLowerCase() === 'x';
173
- const usNum = match[2];
174
- const acNum = match[3];
175
- const description = match[4].trim();
176
- criteria.push({
177
- id: `AC-${usNum}-${acNum}`,
178
- description,
179
- completed,
180
- });
181
- }
182
- return criteria;
183
- }
184
- /**
185
- * Build GitHub issue for a single user story
186
- */
187
- buildUserStoryIssue(story, incrementData, githubRepo) {
188
- const featureId = incrementData.frontmatter.feature_id || this.generateFeatureId(incrementData);
189
- const incrementId = incrementData.frontmatter.increment;
190
- // Title format: [FS-XXX][US-YYY] User Story Title
191
- const title = `[${featureId}][${story.id}] ${story.title}`;
192
- // Build body
193
- let body = '';
194
- // ❌ REMOVED: Metadata header (Feature, Status, Priority)
195
- // WHY: GitHub has NATIVE fields for this (labels, milestones)
196
- // Body should contain ONLY actual work content (ACs, tasks, user story)
197
- // See: .specweave/docs/internal/troubleshooting/CRITICAL-remove-metadata-header-from-github-issues.md
198
- // Progress section (consistency with user-story-issue-builder.ts)
199
- const completedACs = story.acceptanceCriteria.filter(ac => ac.completed).length;
200
- const totalACs = story.acceptanceCriteria.length;
201
- const storyTasks = incrementData.tasks.filter(t => t.userStories.includes(story.id) ||
202
- t.userStories.some(us => us.toUpperCase() === story.id.toUpperCase()));
203
- const completedTasks = storyTasks.filter(t => t.completed).length;
204
- const totalTasks = storyTasks.length;
205
- const overallPercentage = (totalACs + totalTasks) > 0
206
- ? Math.round(((completedACs + completedTasks) / (totalACs + totalTasks)) * 100)
207
- : 0;
208
- body += `## Progress\n\n`;
209
- body += `**Acceptance Criteria**: ${completedACs}/${totalACs} (${totalACs > 0 ? Math.round((completedACs / totalACs) * 100) : 0}%)\n`;
210
- body += `**Tasks**: ${completedTasks}/${totalTasks} (${totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0}%)\n`;
211
- body += `**Overall**: ${overallPercentage}%\n\n`;
212
- // Progress bar
213
- const filledBlocks = Math.floor(overallPercentage / 5);
214
- const emptyBlocks = 20 - filledBlocks;
215
- body += `${'█'.repeat(filledBlocks)}${'░'.repeat(emptyBlocks)} ${overallPercentage}%\n\n`;
216
- body += `---\n\n`;
217
- // User Story description
218
- body += `## User Story\n\n`;
219
- if (story.asA && story.iWant && story.soThat) {
220
- body += `**As a** ${story.asA}\n`;
221
- body += `**I want** ${story.iWant}\n`;
222
- body += `**So that** ${story.soThat}\n\n`;
223
- }
224
- else {
225
- body += `${story.title}\n\n`;
226
- }
227
- body += `---\n\n`;
228
- // Acceptance Criteria (checkable!)
229
- body += `## Acceptance Criteria\n\n`;
230
- if (story.acceptanceCriteria.length > 0) {
231
- const completed = story.acceptanceCriteria.filter(ac => ac.completed).length;
232
- const total = story.acceptanceCriteria.length;
233
- const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
234
- body += `Progress: ${completed}/${total} criteria met (${percentage}%)\n\n`;
235
- for (const ac of story.acceptanceCriteria) {
236
- const checkbox = ac.completed ? '[x]' : '[ ]';
237
- body += `- ${checkbox} **${ac.id}**: ${ac.description}\n`;
238
- }
239
- body += '\n';
240
- }
241
- else {
242
- body += `*No acceptance criteria defined*\n\n`;
243
- }
244
- body += `---\n\n`;
245
- // Tasks for this user story (already calculated above for Progress section)
246
- if (storyTasks.length > 0) {
247
- body += `## Tasks\n\n`;
248
- const completedTasks = storyTasks.filter(t => t.completed).length;
249
- body += `Progress: ${completedTasks}/${storyTasks.length} tasks\n\n`;
250
- for (const task of storyTasks) {
251
- const checkbox = task.completed ? '[x]' : '[ ]';
252
- body += `- ${checkbox} **${task.id}**: ${task.title}\n`;
253
- }
254
- body += '\n---\n\n';
255
- }
256
- // Link to increment
257
- body += `## Implementation\n\n`;
258
- if (githubRepo) {
259
- body += `**Increment**: [${incrementId}](https://github.com/${githubRepo}/tree/develop/.specweave/increments/${incrementId})\n\n`;
260
- }
261
- else {
262
- body += `**Increment**: ${incrementId}\n\n`;
263
- }
264
- body += `---\n\n`;
265
- body += `🤖 Auto-synced by SpecWeave Increment Sync`;
266
- // Labels
267
- const labels = ['specweave', 'user-story'];
268
- // Add type label if available
269
- if (incrementData.frontmatter.type) {
270
- labels.push(incrementData.frontmatter.type.toLowerCase());
271
- }
272
- // Add priority label (from story or default to p2)
273
- const priority = story.priority?.toLowerCase() || incrementData.frontmatter.priority?.toLowerCase() || 'p2';
274
- labels.push(priority);
275
- return { title, body, labels };
276
- }
277
- /**
278
- * Build GitHub issue for the entire increment (epic-style)
279
- */
280
- buildIncrementIssue(incrementData, githubRepo) {
281
- const featureId = incrementData.frontmatter.feature_id || this.generateFeatureId(incrementData);
282
- const incrementId = incrementData.frontmatter.increment;
283
- // Title format: [FS-XXX] Increment Title
284
- const title = `[${featureId}] ${incrementData.title}`;
285
- // Build body
286
- let body = '';
287
- // Header with metadata
288
- body += `**Increment**: ${incrementId}\n`;
289
- body += `**Status**: ${incrementData.frontmatter.status || 'planning'}\n`;
290
- body += `**Priority**: P0 (Critical)\n`;
291
- // Calculate progress
292
- const totalACs = incrementData.userStories.reduce((sum, us) => sum + us.acceptanceCriteria.length, 0);
293
- const completedACs = incrementData.userStories.reduce((sum, us) => sum + us.acceptanceCriteria.filter(ac => ac.completed).length, 0);
294
- const percentage = totalACs > 0 ? Math.round((completedACs / totalACs) * 100) : 0;
295
- body += `**Progress**: ${completedACs}/${totalACs} ACs (${percentage}%)\n`;
296
- body += `\n---\n\n`;
297
- // Overview
298
- body += `## Overview\n\n`;
299
- body += incrementData.problemStatement || incrementData.title;
300
- body += `\n\n---\n\n`;
301
- // User Stories with ACs
302
- body += `## User Stories\n\n`;
303
- for (const story of incrementData.userStories) {
304
- const usCompleted = story.acceptanceCriteria.filter(ac => ac.completed).length;
305
- const usTotal = story.acceptanceCriteria.length;
306
- const usCheckbox = usCompleted === usTotal && usTotal > 0 ? '[x]' : '[ ]';
307
- body += `### ${usCheckbox} ${story.id}: ${story.title}\n\n`;
308
- if (story.asA && story.iWant && story.soThat) {
309
- body += `> **As a** ${story.asA}, **I want** ${story.iWant}, **So that** ${story.soThat}\n\n`;
310
- }
311
- body += `**Acceptance Criteria:**\n`;
312
- for (const ac of story.acceptanceCriteria) {
313
- const checkbox = ac.completed ? '[x]' : '[ ]';
314
- body += `- ${checkbox} **${ac.id}**: ${ac.description}\n`;
315
- }
316
- body += '\n';
317
- }
318
- body += `---\n\n`;
319
- // Tasks section
320
- if (incrementData.tasks.length > 0) {
321
- body += `## Tasks\n\n`;
322
- const completedTasks = incrementData.tasks.filter(t => t.completed).length;
323
- const totalTasks = incrementData.tasks.length;
324
- const taskPercentage = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0;
325
- body += `Progress: ${completedTasks}/${totalTasks} tasks (${taskPercentage}%)\n\n`;
326
- for (const task of incrementData.tasks) {
327
- const checkbox = task.completed ? '[x]' : '[ ]';
328
- body += `- ${checkbox} **${task.id}**: ${task.title}\n`;
329
- if (task.priority || task.userStories.length > 0) {
330
- const parts = [];
331
- if (task.priority)
332
- parts.push(`Priority: ${task.priority}`);
333
- if (task.userStories.length > 0)
334
- parts.push(`User ${task.userStories.length === 1 ? 'Story' : 'Stories'}: ${task.userStories.join(', ')}`);
335
- body += ` - ${parts.join(' | ')}\n`;
336
- }
337
- }
338
- body += '\n---\n\n';
339
- }
340
- // Links to increment files
341
- body += `## SpecWeave Increment\n\n`;
342
- if (githubRepo) {
343
- body += `- **Spec**: [\`spec.md\`](https://github.com/${githubRepo}/blob/develop/.specweave/increments/${incrementId}/spec.md)\n`;
344
- body += `- **Plan**: [\`plan.md\`](https://github.com/${githubRepo}/blob/develop/.specweave/increments/${incrementId}/plan.md)\n`;
345
- body += `- **Tasks**: [\`tasks.md\`](https://github.com/${githubRepo}/blob/develop/.specweave/increments/${incrementId}/tasks.md)\n`;
346
- }
347
- else {
348
- body += `- **Spec**: \`spec.md\`\n`;
349
- body += `- **Plan**: \`plan.md\`\n`;
350
- body += `- **Tasks**: \`tasks.md\`\n`;
351
- }
352
- body += `\n---\n\n`;
353
- body += `🤖 Auto-synced by SpecWeave Increment Sync`;
354
- // Labels
355
- const labels = ['specweave', 'increment'];
356
- // Add type label (default to 'enhancement' if not specified)
357
- const typeLabel = incrementData.frontmatter.type?.toLowerCase() || 'enhancement';
358
- labels.push(typeLabel);
359
- // Add priority label (default to 'p2' if not specified)
360
- const priority = incrementData.frontmatter.priority?.toLowerCase() || 'p2';
361
- labels.push(priority);
362
- return { title, body, labels };
363
- }
364
- /**
365
- * Generate a feature ID if not present in frontmatter
366
- * Uses date-based format: FS-YY-MM-DD
367
- */
368
- generateFeatureId(incrementData) {
369
- // Try to extract increment number
370
- const incrementNum = incrementData.frontmatter.increment.match(/^(\d+)/)?.[1];
371
- if (incrementNum) {
372
- return `FS-${incrementNum.padStart(3, '0')}`;
373
- }
374
- // Fallback to date-based
375
- const created = incrementData.frontmatter.created;
376
- if (created) {
377
- const match = created.match(/^(\d{4})-(\d{2})-(\d{2})/);
378
- if (match) {
379
- return `FS-${match[1].slice(2)}-${match[2]}-${match[3]}`;
380
- }
381
- }
382
- return 'FS-UNKNOWN';
383
- }
384
- }
385
- //# sourceMappingURL=increment-issue-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"increment-issue-builder.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/increment-issue-builder.ts"],"names":[],"mappings":"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"}