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,53 +0,0 @@
1
- /**
2
- * GitHub Status Sync
3
- *
4
- * Synchronizes SpecWeave increment statuses with GitHub issues.
5
- *
6
- * Responsibilities:
7
- * - Get current status from GitHub issue
8
- * - Update GitHub issue state and labels
9
- * - Post status change comments
10
- */
11
- export interface ExternalStatus {
12
- state: string;
13
- labels?: string[];
14
- }
15
- export declare class GitHubStatusSync {
16
- private octokit;
17
- private owner;
18
- private repo;
19
- constructor(token: string, owner: string, repo: string);
20
- /**
21
- * Get current status from GitHub issue
22
- *
23
- * @param issueNumber - GitHub issue number
24
- * @returns External status with state and labels
25
- */
26
- getStatus(issueNumber: number): Promise<ExternalStatus>;
27
- /**
28
- * Update GitHub issue status
29
- *
30
- * Preserves existing labels that are not status-related.
31
- * Only replaces labels that start with "status:" prefix.
32
- *
33
- * @param issueNumber - GitHub issue number
34
- * @param status - New status (state and labels)
35
- */
36
- updateStatus(issueNumber: number, status: ExternalStatus): Promise<void>;
37
- /**
38
- * Get current labels from GitHub issue
39
- *
40
- * @param issueNumber - GitHub issue number
41
- * @returns Array of current label names
42
- */
43
- private getCurrentLabels;
44
- /**
45
- * Post status change comment to GitHub issue
46
- *
47
- * @param issueNumber - GitHub issue number
48
- * @param oldStatus - Previous SpecWeave status
49
- * @param newStatus - New SpecWeave status
50
- */
51
- postStatusComment(issueNumber: number, oldStatus: string, newStatus: string): Promise<void>;
52
- }
53
- //# sourceMappingURL=github-status-sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-status-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-status-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;gBAET,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAMtD;;;;;OAKG;IACU,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAiBpE;;;;;;;;OAQG;IACU,YAAY,CACvB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IA+ChB;;;;;OAKG;YACW,gBAAgB;IAgB9B;;;;;;OAMG;IACU,iBAAiB,CAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;CAkBjB"}
@@ -1,120 +0,0 @@
1
- /**
2
- * GitHub Status Sync
3
- *
4
- * Synchronizes SpecWeave increment statuses with GitHub issues.
5
- *
6
- * Responsibilities:
7
- * - Get current status from GitHub issue
8
- * - Update GitHub issue state and labels
9
- * - Post status change comments
10
- */
11
- import { Octokit } from '@octokit/rest';
12
- export class GitHubStatusSync {
13
- constructor(token, owner, repo) {
14
- this.octokit = new Octokit({ auth: token });
15
- this.owner = owner;
16
- this.repo = repo;
17
- }
18
- /**
19
- * Get current status from GitHub issue
20
- *
21
- * @param issueNumber - GitHub issue number
22
- * @returns External status with state and labels
23
- */
24
- async getStatus(issueNumber) {
25
- const response = await this.octokit.rest.issues.get({
26
- owner: this.owner,
27
- repo: this.repo,
28
- issue_number: issueNumber
29
- });
30
- const labels = response.data.labels
31
- .map((label) => (typeof label === 'string' ? label : label.name))
32
- .filter(Boolean);
33
- return {
34
- state: response.data.state,
35
- labels
36
- };
37
- }
38
- /**
39
- * Update GitHub issue status
40
- *
41
- * Preserves existing labels that are not status-related.
42
- * Only replaces labels that start with "status:" prefix.
43
- *
44
- * @param issueNumber - GitHub issue number
45
- * @param status - New status (state and labels)
46
- */
47
- async updateStatus(issueNumber, status) {
48
- const updateData = {
49
- owner: this.owner,
50
- repo: this.repo,
51
- issue_number: issueNumber,
52
- state: status.state
53
- };
54
- // Merge labels - preserve non-status labels, replace status labels
55
- if (status.labels && status.labels.length > 0) {
56
- // Fetch current labels to preserve non-status ones
57
- const currentLabels = await this.getCurrentLabels(issueNumber);
58
- // Filter out status-related labels (start with "status:")
59
- const preservedLabels = currentLabels.filter(label => !label.startsWith('status:'));
60
- // Get new status labels from the provided status
61
- const newStatusLabels = status.labels.filter(label => label.startsWith('status:'));
62
- // Get non-status labels from the provided status (e.g., priority, type)
63
- const newOtherLabels = status.labels.filter(label => !label.startsWith('status:'));
64
- // Combine: preserved non-status + new status + new other labels
65
- const mergedLabels = [...new Set([
66
- ...preservedLabels,
67
- ...newStatusLabels,
68
- ...newOtherLabels
69
- ])];
70
- updateData.labels = mergedLabels;
71
- }
72
- await this.octokit.rest.issues.update(updateData);
73
- }
74
- /**
75
- * Get current labels from GitHub issue
76
- *
77
- * @param issueNumber - GitHub issue number
78
- * @returns Array of current label names
79
- */
80
- async getCurrentLabels(issueNumber) {
81
- try {
82
- const response = await this.octokit.rest.issues.get({
83
- owner: this.owner,
84
- repo: this.repo,
85
- issue_number: issueNumber
86
- });
87
- return response.data.labels
88
- .map((label) => (typeof label === 'string' ? label : label.name))
89
- .filter(Boolean);
90
- }
91
- catch {
92
- return [];
93
- }
94
- }
95
- /**
96
- * Post status change comment to GitHub issue
97
- *
98
- * @param issueNumber - GitHub issue number
99
- * @param oldStatus - Previous SpecWeave status
100
- * @param newStatus - New SpecWeave status
101
- */
102
- async postStatusComment(issueNumber, oldStatus, newStatus) {
103
- const timestamp = new Date().toISOString();
104
- const body = `🔄 **Status Update**
105
-
106
- SpecWeave increment status changed:
107
- - **From**: ${oldStatus}
108
- - **To**: ${newStatus}
109
- - **When**: ${timestamp}
110
-
111
- This update was automatically synchronized by SpecWeave.`;
112
- await this.octokit.rest.issues.createComment({
113
- owner: this.owner,
114
- repo: this.repo,
115
- issue_number: issueNumber,
116
- body
117
- });
118
- }
119
- }
120
- //# sourceMappingURL=github-status-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-status-sync.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-status-sync.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * GitHub Sync for Increment Changes
3
- *
4
- * Handles syncing spec.md, plan.md, and tasks.md changes to GitHub issues.
5
- * Detects scope changes, architecture updates, and task modifications.
6
- *
7
- * @module github-sync-increment-changes
8
- */
9
- export interface SpecChanges {
10
- added: string[];
11
- removed: string[];
12
- modified: string[];
13
- }
14
- /**
15
- * Sync increment file changes to GitHub
16
- */
17
- export declare function syncIncrementChanges(incrementId: string, changedFile: 'spec.md' | 'plan.md' | 'tasks.md'): Promise<void>;
18
- //# sourceMappingURL=github-sync-increment-changes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-sync-increment-changes.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-sync-increment-changes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAC9C,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -1,297 +0,0 @@
1
- /**
2
- * GitHub Sync for Increment Changes
3
- *
4
- * Handles syncing spec.md, plan.md, and tasks.md changes to GitHub issues.
5
- * Detects scope changes, architecture updates, and task modifications.
6
- *
7
- * @module github-sync-increment-changes
8
- */
9
- import * as fs from '../../../src/utils/fs-native.js';
10
- import path from 'path';
11
- import { execSync } from 'child_process';
12
- import { loadIncrementMetadata, detectRepo, postScopeChangeComment } from './github-issue-updater.js';
13
- import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
14
- import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
15
- /**
16
- * Get environment object with GH_TOKEN for gh CLI commands.
17
- */
18
- function getGhEnv() {
19
- const { token } = getGitHubAuthFromProject(process.cwd());
20
- return token
21
- ? { ...process.env, GH_TOKEN: token }
22
- : process.env;
23
- }
24
- /**
25
- * Sync increment file changes to GitHub
26
- */
27
- export async function syncIncrementChanges(incrementId, changedFile) {
28
- console.log(`\n🔄 Syncing ${changedFile} changes to GitHub...`);
29
- try {
30
- // 1. Load metadata
31
- const metadata = await loadIncrementMetadata(incrementId);
32
- if (!metadata?.github?.issue) {
33
- console.log('ℹ️ No GitHub issue linked, skipping sync');
34
- return;
35
- }
36
- // 2. Detect repository
37
- const repoInfo = await detectRepo();
38
- if (!repoInfo) {
39
- console.log('⚠️ Could not detect GitHub repository, skipping sync');
40
- return;
41
- }
42
- const { owner, repo } = repoInfo;
43
- const issueNumber = metadata.github.issue;
44
- // 3. Handle different file types
45
- switch (changedFile) {
46
- case 'spec.md':
47
- await syncSpecChanges(incrementId, issueNumber, owner, repo);
48
- break;
49
- case 'plan.md':
50
- await syncPlanChanges(incrementId, issueNumber, owner, repo);
51
- break;
52
- case 'tasks.md':
53
- await syncTasksChanges(incrementId, issueNumber, owner, repo);
54
- break;
55
- }
56
- console.log(`✅ ${changedFile} changes synced to issue #${issueNumber}`);
57
- }
58
- catch (error) {
59
- console.error(`❌ Error syncing ${changedFile}:`, error);
60
- console.error(' (Non-blocking - continuing...)');
61
- }
62
- }
63
- /**
64
- * Sync spec.md changes (scope changes)
65
- */
66
- async function syncSpecChanges(incrementId, issueNumber, owner, repo) {
67
- const specPath = path.join(process.cwd(), '.specweave/increments', incrementId, 'spec.md');
68
- // Detect what changed in spec.md
69
- const changes = await detectSpecChanges(specPath);
70
- if (changes.added.length === 0 && changes.removed.length === 0 && changes.modified.length === 0) {
71
- console.log('ℹ️ No significant spec changes detected');
72
- return;
73
- }
74
- // Post scope change comment
75
- await postScopeChangeComment(issueNumber, {
76
- added: changes.added,
77
- removed: changes.removed,
78
- modified: changes.modified,
79
- reason: 'Spec updated',
80
- impact: estimateImpact(changes)
81
- }, owner, repo);
82
- // Update issue title if needed
83
- const title = await extractSpecTitle(specPath);
84
- if (title) {
85
- await updateIssueTitle(issueNumber, title, owner, repo);
86
- }
87
- }
88
- /**
89
- * Sync plan.md changes (architecture updates)
90
- */
91
- async function syncPlanChanges(incrementId, issueNumber, owner, repo) {
92
- const comment = `
93
- 🏗️ **Architecture Plan Updated**
94
-
95
- The implementation plan has been updated. See [\`plan.md\`](https://github.com/${owner}/${repo}/blob/develop/.specweave/increments/${incrementId}/plan.md) for details.
96
-
97
- **Timestamp**: ${new Date().toISOString()}
98
-
99
- ---
100
- 🤖 Auto-updated by SpecWeave
101
- `.trim();
102
- await postComment(issueNumber, comment, owner, repo);
103
- }
104
- /**
105
- * Sync tasks.md changes (task updates)
106
- */
107
- async function syncTasksChanges(incrementId, issueNumber, owner, repo) {
108
- const tasksPath = path.join(process.cwd(), '.specweave/increments', incrementId, 'tasks.md');
109
- // Extract task list
110
- const tasks = await extractTasks(tasksPath);
111
- // Update issue body with new task checklist
112
- await updateIssueTaskChecklist(issueNumber, tasks, owner, repo);
113
- const comment = `
114
- 📋 **Task List Updated**
115
-
116
- Tasks have been updated. Total tasks: ${tasks.length}
117
-
118
- **Timestamp**: ${new Date().toISOString()}
119
-
120
- ---
121
- 🤖 Auto-updated by SpecWeave
122
- `.trim();
123
- await postComment(issueNumber, comment, owner, repo);
124
- }
125
- /**
126
- * Detect changes in spec.md by comparing with git history
127
- */
128
- async function detectSpecChanges(specPath) {
129
- const changes = {
130
- added: [],
131
- removed: [],
132
- modified: []
133
- };
134
- try {
135
- // Get git diff for spec.md
136
- const diff = execSync(`git diff HEAD~1 "${specPath}" 2>/dev/null || true`, {
137
- encoding: 'utf-8',
138
- cwd: process.cwd()
139
- });
140
- if (!diff) {
141
- return changes;
142
- }
143
- // Parse diff to find user story changes
144
- const lines = diff.split('\n');
145
- for (const line of lines) {
146
- // Look for user story additions/removals
147
- if (line.startsWith('+') && line.includes('US-')) {
148
- const match = line.match(/US-\d+:([^(]+)/);
149
- if (match) {
150
- changes.added.push(match[1].trim());
151
- }
152
- }
153
- else if (line.startsWith('-') && line.includes('US-')) {
154
- const match = line.match(/US-\d+:([^(]+)/);
155
- if (match) {
156
- changes.removed.push(match[1].trim());
157
- }
158
- }
159
- }
160
- }
161
- catch (error) {
162
- console.warn('⚠️ Could not detect spec changes:', error);
163
- }
164
- return changes;
165
- }
166
- /**
167
- * Extract title from spec.md frontmatter
168
- */
169
- async function extractSpecTitle(specPath) {
170
- try {
171
- const content = await fs.readFile(specPath, 'utf-8');
172
- const match = content.match(/^#\s+(.+)$/m);
173
- return match ? match[1].trim() : null;
174
- }
175
- catch (error) {
176
- return null;
177
- }
178
- }
179
- /**
180
- * Extract tasks from tasks.md
181
- */
182
- async function extractTasks(tasksPath) {
183
- try {
184
- const content = await fs.readFile(tasksPath, 'utf-8');
185
- const tasks = [];
186
- const lines = content.split('\n');
187
- for (const line of lines) {
188
- // Match task headers: ## T-001: Task name
189
- const match = line.match(/^##\s+(T-\d+):\s*(.+)$/);
190
- if (match) {
191
- tasks.push(`${match[1]}: ${match[2]}`);
192
- }
193
- }
194
- return tasks;
195
- }
196
- catch (error) {
197
- return [];
198
- }
199
- }
200
- /**
201
- * Estimate impact of spec changes
202
- */
203
- function estimateImpact(changes) {
204
- const addedCount = changes.added.length;
205
- const removedCount = changes.removed.length;
206
- if (addedCount > removedCount) {
207
- return `+${addedCount * 8} hours (${addedCount} user stories added)`;
208
- }
209
- else if (removedCount > addedCount) {
210
- return `-${removedCount * 8} hours (${removedCount} user stories removed)`;
211
- }
212
- else {
213
- return 'Neutral (scope adjusted)';
214
- }
215
- }
216
- /**
217
- * Update issue title
218
- */
219
- async function updateIssueTitle(issueNumber, title, owner, repo) {
220
- const result = await execFileNoThrow('gh', [
221
- 'issue',
222
- 'edit',
223
- String(issueNumber),
224
- '--repo',
225
- `${owner}/${repo}`,
226
- '--title',
227
- title
228
- ], { env: getGhEnv() });
229
- if (result.exitCode !== 0) {
230
- console.warn(`⚠️ Could not update issue title: ${result.stderr}`);
231
- }
232
- }
233
- /**
234
- * Update issue task checklist
235
- */
236
- async function updateIssueTaskChecklist(issueNumber, tasks, owner, repo) {
237
- // Get current issue body
238
- const result = await execFileNoThrow('gh', [
239
- 'issue',
240
- 'view',
241
- String(issueNumber),
242
- '--repo',
243
- `${owner}/${repo}`,
244
- '--json',
245
- 'body',
246
- '-q',
247
- '.body'
248
- ], { env: getGhEnv() });
249
- if (result.exitCode !== 0) {
250
- throw new Error(`Failed to get issue body: ${result.stderr}`);
251
- }
252
- const currentBody = result.stdout.trim();
253
- // Build new task checklist
254
- const taskChecklist = tasks.map(task => `- [ ] ${task}`).join('\n');
255
- // Find and replace task section
256
- const taskSectionRegex = /## Tasks\n\n[\s\S]*?(?=\n## |$)/;
257
- const newTaskSection = `## Tasks\n\nProgress: 0/${tasks.length} tasks (0%)\n\n${taskChecklist}\n`;
258
- let updatedBody;
259
- if (taskSectionRegex.test(currentBody)) {
260
- updatedBody = currentBody.replace(taskSectionRegex, newTaskSection);
261
- }
262
- else {
263
- // Append task section
264
- updatedBody = currentBody + '\n\n' + newTaskSection;
265
- }
266
- // Update issue
267
- const updateResult = await execFileNoThrow('gh', [
268
- 'issue',
269
- 'edit',
270
- String(issueNumber),
271
- '--repo',
272
- `${owner}/${repo}`,
273
- '--body',
274
- updatedBody
275
- ], { env: getGhEnv() });
276
- if (updateResult.exitCode !== 0) {
277
- throw new Error(`Failed to update issue body: ${updateResult.stderr}`);
278
- }
279
- }
280
- /**
281
- * Post comment to issue
282
- */
283
- async function postComment(issueNumber, comment, owner, repo) {
284
- const result = await execFileNoThrow('gh', [
285
- 'issue',
286
- 'comment',
287
- String(issueNumber),
288
- '--repo',
289
- `${owner}/${repo}`,
290
- '--body',
291
- comment
292
- ], { env: getGhEnv() });
293
- if (result.exitCode !== 0) {
294
- throw new Error(`Failed to post comment: ${result.stderr}`);
295
- }
296
- }
297
- //# sourceMappingURL=github-sync-increment-changes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-sync-increment-changes.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-sync-increment-changes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACtD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAE9E;;GAEG;AACH,SAAS,QAAQ;IACf,MAAM,EAAE,KAAK,EAAE,GAAG,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,OAAO,KAAK;QACV,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE;QACrC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAClB,CAAC;AAQD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,WAA+C;IAE/C,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,uBAAuB,CAAC,CAAC;IAEhE,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,uBAAuB;QACvB,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAE1C,iCAAiC;QACjC,QAAQ,WAAW,EAAE,CAAC;YACpB,KAAK,SAAS;gBACZ,MAAM,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC7D,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC7D,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC9D,MAAM;QACV,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,6BAA6B,WAAW,EAAE,CAAC,CAAC;IAE1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,WAAmB,EACnB,WAAmB,EACnB,KAAa,EACb,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,CAAC,GAAG,EAAE,EACb,uBAAuB,EACvB,WAAW,EACX,SAAS,CACV,CAAC;IAEF,iCAAiC;IACjC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAElD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,MAAM,sBAAsB,CAC1B,WAAW,EACX;QACE,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC;KAChC,EACD,KAAK,EACL,IAAI,CACL,CAAC;IAEF,+BAA+B;IAC/B,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,WAAmB,EACnB,WAAmB,EACnB,KAAa,EACb,IAAY;IAEZ,MAAM,OAAO,GAAG;;;iFAG+D,KAAK,IAAI,IAAI,uCAAuC,WAAW;;iBAE/H,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;CAIxC,CAAC,IAAI,EAAE,CAAC;IAEP,MAAM,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,WAAmB,EACnB,KAAa,EACb,IAAY;IAEZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,OAAO,CAAC,GAAG,EAAE,EACb,uBAAuB,EACvB,WAAW,EACX,UAAU,CACX,CAAC;IAEF,oBAAoB;IACpB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAE5C,4CAA4C;IAC5C,MAAM,wBAAwB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,OAAO,GAAG;;;wCAGsB,KAAK,CAAC,MAAM;;iBAEnC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;CAIxC,CAAC,IAAI,EAAE,CAAC;IAEP,MAAM,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAAgB;QAC3B,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,QAAQ,uBAAuB,EAAE;YACzE,QAAQ,EAAE,OAAO;YACjB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,wCAAwC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,yCAAyC;YACzC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC3C,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC3C,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,SAAiB;IAC3C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,0CAA0C;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACnD,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAoB;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IAE5C,IAAI,UAAU,GAAG,YAAY,EAAE,CAAC;QAC9B,OAAO,IAAI,UAAU,GAAG,CAAC,WAAW,UAAU,sBAAsB,CAAC;IACvE,CAAC;SAAM,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;QACrC,OAAO,IAAI,YAAY,GAAG,CAAC,WAAW,YAAY,wBAAwB,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,OAAO,0BAA0B,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,KAAa,EACb,KAAa,EACb,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;QACzC,OAAO;QACP,MAAM;QACN,MAAM,CAAC,WAAW,CAAC;QACnB,QAAQ;QACR,GAAG,KAAK,IAAI,IAAI,EAAE;QAClB,SAAS;QACT,KAAK;KACN,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAExB,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,wBAAwB,CACrC,WAAmB,EACnB,KAAe,EACf,KAAa,EACb,IAAY;IAEZ,yBAAyB;IACzB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;QACzC,OAAO;QACP,MAAM;QACN,MAAM,CAAC,WAAW,CAAC;QACnB,QAAQ;QACR,GAAG,KAAK,IAAI,IAAI,EAAE;QAClB,QAAQ;QACR,MAAM;QACN,IAAI;QACJ,OAAO;KACR,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAExB,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAEzC,2BAA2B;IAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEpE,gCAAgC;IAChC,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;IAC3D,MAAM,cAAc,GAAG,2BAA2B,KAAK,CAAC,MAAM,kBAAkB,aAAa,IAAI,CAAC;IAElG,IAAI,WAAmB,CAAC;IACxB,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,sBAAsB;QACtB,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;IACtD,CAAC;IAED,eAAe;IACf,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;QAC/C,OAAO;QACP,MAAM;QACN,MAAM,CAAC,WAAW,CAAC;QACnB,QAAQ;QACR,GAAG,KAAK,IAAI,IAAI,EAAE;QAClB,QAAQ;QACR,WAAW;KACZ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAExB,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,gCAAgC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CACxB,WAAmB,EACnB,OAAe,EACf,KAAa,EACb,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;QACzC,OAAO;QACP,SAAS;QACT,MAAM,CAAC,WAAW,CAAC;QACnB,QAAQ;QACR,GAAG,KAAK,IAAI,IAAI,EAAE;QAClB,QAAQ;QACR,OAAO;KACR,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAExB,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -1,94 +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
- export interface IncrementFrontmatter {
14
- increment: string;
15
- feature_id?: string;
16
- type?: string;
17
- status?: string;
18
- created?: string;
19
- priority?: string;
20
- }
21
- export interface AcceptanceCriterion {
22
- id: string;
23
- description: string;
24
- completed: boolean;
25
- }
26
- export interface UserStory {
27
- id: string;
28
- title: string;
29
- asA: string;
30
- iWant: string;
31
- soThat: string;
32
- acceptanceCriteria: AcceptanceCriterion[];
33
- priority?: string;
34
- }
35
- export interface Task {
36
- id: string;
37
- title: string;
38
- completed: boolean;
39
- userStories: string[];
40
- priority?: string;
41
- description?: string;
42
- }
43
- export interface IncrementData {
44
- frontmatter: IncrementFrontmatter;
45
- title: string;
46
- problemStatement: string;
47
- userStories: UserStory[];
48
- tasks: Task[];
49
- outOfScope: string[];
50
- }
51
- export interface GitHubIssueContent {
52
- title: string;
53
- body: string;
54
- labels: string[];
55
- }
56
- export declare class IncrementIssueBuilder {
57
- private incrementPath;
58
- private projectRoot;
59
- constructor(incrementPath: string, projectRoot: string);
60
- /**
61
- * Parse increment spec.md and extract all data
62
- */
63
- parse(): Promise<IncrementData>;
64
- /**
65
- * Extract tasks from tasks.md
66
- */
67
- private extractTasks;
68
- /**
69
- * Extract a section by heading
70
- */
71
- private extractSection;
72
- /**
73
- * Extract user stories from spec.md
74
- */
75
- private extractUserStories;
76
- /**
77
- * Extract acceptance criteria from a user story block
78
- */
79
- private extractAcceptanceCriteria;
80
- /**
81
- * Build GitHub issue for a single user story
82
- */
83
- buildUserStoryIssue(story: UserStory, incrementData: IncrementData, githubRepo?: string): GitHubIssueContent;
84
- /**
85
- * Build GitHub issue for the entire increment (epic-style)
86
- */
87
- buildIncrementIssue(incrementData: IncrementData, githubRepo?: string): GitHubIssueContent;
88
- /**
89
- * Generate a feature ID if not present in frontmatter
90
- * Uses date-based format: FS-YY-MM-DD
91
- */
92
- private generateFeatureId;
93
- }
94
- //# sourceMappingURL=increment-issue-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"increment-issue-builder.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/increment-issue-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,oBAAoB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAKtD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAgDrC;;OAEG;YACW,YAAY;IAgE1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAuBjC;;OAEG;IACH,mBAAmB,CACjB,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,aAAa,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,kBAAkB;IA6GrB;;OAEG;IACH,mBAAmB,CACjB,aAAa,EAAE,aAAa,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,kBAAkB;IAuGrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAkB1B"}