specweave 0.23.1 → 0.23.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.
Files changed (101) hide show
  1. package/.claude-plugin/marketplace.json +0 -88
  2. package/CLAUDE.md +368 -0
  3. package/bin/fix-marketplace-errors.sh +8 -8
  4. package/dist/plugins/specweave/lib/utils/fs-native.d.ts +133 -0
  5. package/dist/plugins/specweave/lib/utils/fs-native.d.ts.map +1 -0
  6. package/dist/plugins/specweave/lib/utils/fs-native.js +224 -0
  7. package/dist/plugins/specweave/lib/utils/fs-native.js.map +1 -0
  8. package/dist/plugins/specweave-github/lib/github-client-v2.js +1 -1
  9. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  10. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
  11. package/dist/plugins/specweave-github/lib/github-feature-sync.js +52 -20
  12. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
  13. package/dist/src/cli/helpers/init/initial-increment-generator.d.ts.map +1 -1
  14. package/dist/src/cli/helpers/init/initial-increment-generator.js +2 -1
  15. package/dist/src/cli/helpers/init/initial-increment-generator.js.map +1 -1
  16. package/dist/src/core/ac-test-validator-cli.d.ts +16 -0
  17. package/dist/src/core/ac-test-validator-cli.d.ts.map +1 -0
  18. package/dist/src/core/ac-test-validator-cli.js +118 -0
  19. package/dist/src/core/ac-test-validator-cli.js.map +1 -0
  20. package/dist/src/core/ac-test-validator.d.ts +111 -0
  21. package/dist/src/core/ac-test-validator.d.ts.map +1 -0
  22. package/dist/src/core/ac-test-validator.js +292 -0
  23. package/dist/src/core/ac-test-validator.js.map +1 -0
  24. package/dist/src/core/increment/desync-detector.d.ts +142 -0
  25. package/dist/src/core/increment/desync-detector.d.ts.map +1 -0
  26. package/dist/src/core/increment/desync-detector.js +270 -0
  27. package/dist/src/core/increment/desync-detector.js.map +1 -0
  28. package/dist/src/core/increment/metadata-manager.d.ts +8 -4
  29. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  30. package/dist/src/core/increment/metadata-manager.js +45 -21
  31. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  32. package/dist/src/core/qa/qa-runner.js +9 -2
  33. package/dist/src/core/qa/qa-runner.js.map +1 -1
  34. package/dist/src/sync/sync-coordinator.d.ts +1 -1
  35. package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
  36. package/dist/src/sync/sync-coordinator.js +40 -2
  37. package/dist/src/sync/sync-coordinator.js.map +1 -1
  38. package/dist/src/utils/fs-native.d.ts +133 -0
  39. package/dist/src/utils/fs-native.d.ts.map +1 -0
  40. package/dist/src/utils/fs-native.js +224 -0
  41. package/dist/src/utils/fs-native.js.map +1 -0
  42. package/package.json +1 -1
  43. package/plugins/specweave/.claude-plugin/plugin.json +22 -0
  44. package/plugins/specweave/agents/AGENTS-INDEX.md +216 -0
  45. package/plugins/specweave/agents/architect/AGENT.md +17 -0
  46. package/plugins/specweave/agents/code-standards-detective/AGENT.md +16 -0
  47. package/plugins/specweave/agents/docs-writer/AGENT.md +16 -0
  48. package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +704 -0
  49. package/plugins/specweave/agents/infrastructure/AGENT.md +16 -0
  50. package/plugins/specweave/agents/performance/AGENT.md +16 -0
  51. package/plugins/specweave/agents/pm/AGENT.md +17 -0
  52. package/plugins/specweave/agents/qa-lead/AGENT.md +15 -0
  53. package/plugins/specweave/agents/reflective-reviewer/AGENT.md +16 -0
  54. package/plugins/specweave/agents/security/AGENT.md +16 -0
  55. package/plugins/specweave/agents/tdd-orchestrator/AGENT.md +16 -0
  56. package/plugins/specweave/agents/tech-lead/AGENT.md +16 -0
  57. package/plugins/specweave/agents/test-aware-planner/AGENT.md +16 -0
  58. package/plugins/specweave/agents/translator/AGENT.md +13 -0
  59. package/plugins/specweave/commands/specweave-done.md +14 -0
  60. package/plugins/specweave/commands/specweave-qa.md +11 -1
  61. package/plugins/specweave/commands/specweave-sync-status.md +356 -0
  62. package/plugins/specweave/commands/specweave-validate.md +10 -1
  63. package/plugins/specweave/hooks/post-metadata-change.sh +160 -0
  64. package/plugins/specweave/hooks/pre-task-completion.sh +196 -0
  65. package/plugins/specweave/lib/hooks/git-diff-analyzer.js +3 -3
  66. package/plugins/specweave/lib/hooks/git-diff-analyzer.ts +3 -3
  67. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +3 -2
  68. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +3 -2
  69. package/plugins/specweave/lib/hooks/prepare-reflection-context.js +3 -3
  70. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +3 -3
  71. package/plugins/specweave/lib/hooks/reflection-config-loader.js +4 -4
  72. package/plugins/specweave/lib/hooks/reflection-config-loader.ts +4 -4
  73. package/plugins/specweave/lib/hooks/reflection-storage.js +9 -9
  74. package/plugins/specweave/lib/hooks/reflection-storage.ts +9 -9
  75. package/plugins/specweave/lib/hooks/sync-cache.js +9 -8
  76. package/plugins/specweave/lib/hooks/sync-living-docs.js +57 -6
  77. package/plugins/specweave/lib/hooks/sync-us-tasks.js +6 -6
  78. package/plugins/specweave/lib/hooks/translate-file.js +3 -2
  79. package/plugins/specweave/lib/hooks/translate-file.ts +3 -2
  80. package/plugins/specweave/lib/hooks/translate-living-docs.js +4 -3
  81. package/plugins/specweave/lib/hooks/translate-living-docs.ts +4 -3
  82. package/plugins/specweave/lib/utils/fs-native.js +182 -0
  83. package/plugins/specweave/lib/utils/fs-native.ts +283 -0
  84. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.d.ts +8 -4
  85. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +45 -21
  86. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  87. package/plugins/specweave/skills/SKILLS-INDEX.md +26 -2
  88. package/plugins/specweave/skills/increment-planner/SKILL.md +2 -2
  89. package/plugins/specweave-ado/commands/specweave-ado-close-workitem.md +1 -1
  90. package/plugins/specweave-ado/commands/specweave-ado-create-workitem.md +1 -1
  91. package/plugins/specweave-ado/commands/specweave-ado-status.md +1 -1
  92. package/plugins/specweave-ado/commands/specweave-ado-sync.md +1 -1
  93. package/plugins/specweave-diagrams/agents/diagrams-architect/AGENT.md +1 -1
  94. package/plugins/specweave-diagrams/skills/diagrams-generator/SKILL.md +4 -4
  95. package/plugins/specweave-github/lib/github-client-v2.js +2 -1
  96. package/plugins/specweave-github/lib/github-client-v2.ts +1 -1
  97. package/plugins/specweave-github/lib/github-feature-sync.js +30 -17
  98. package/plugins/specweave-github/lib/github-feature-sync.ts +54 -24
  99. package/plugins/specweave-mobile/README.md +1 -1
  100. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +72 -0
  101. package/plugins/specweave/skills/task-builder/README.md +0 -84
@@ -247,7 +247,8 @@ ${body}`;
247
247
  "--json",
248
248
  "number,title,state,url,labels",
249
249
  "--limit",
250
- "1"
250
+ "50"
251
+ // ✅ FIX: Increased from 1 to 50 to catch duplicates (Issue #0047)
251
252
  ]);
252
253
  if (result.exitCode !== 0) {
253
254
  return null;
@@ -335,7 +335,7 @@ export class GitHubClientV2 {
335
335
  '--json',
336
336
  'number,title,state,url,labels',
337
337
  '--limit',
338
- '1',
338
+ '50', // ✅ FIX: Increased from 1 to 50 to catch duplicates (Issue #0047)
339
339
  ]);
340
340
 
341
341
  if (result.exitCode !== 0) {
@@ -4,6 +4,7 @@ import * as path from "path";
4
4
  import * as yaml from "yaml";
5
5
  import { UserStoryIssueBuilder } from "./user-story-issue-builder.js";
6
6
  import { CompletionCalculator } from "./completion-calculator.js";
7
+ import { DuplicateDetector } from "./duplicate-detector.js";
7
8
  import { execFileNoThrow } from "../../../src/utils/execFileNoThrow.js";
8
9
  class GitHubFeatureSync {
9
10
  constructor(client, specsDir, projectRoot) {
@@ -71,6 +72,8 @@ class GitHubFeatureSync {
71
72
  );
72
73
  const issueContent = await builder.buildIssueBody();
73
74
  issueContent.status = userStory.status;
75
+ let issueNumber;
76
+ let wasUpdated = false;
74
77
  if (userStory.existingIssue) {
75
78
  console.log(` \u267B\uFE0F Issue #${userStory.existingIssue} exists in frontmatter`);
76
79
  try {
@@ -83,25 +86,35 @@ class GitHubFeatureSync {
83
86
  console.log(` \u26A0\uFE0F Issue #${userStory.existingIssue} deleted on GitHub, creating new`);
84
87
  }
85
88
  }
86
- const existingByTitle = await this.client.searchIssueByTitle(issueContent.title);
87
- if (existingByTitle) {
88
- console.log(` \u267B\uFE0F Found existing issue by title: #${existingByTitle.number}`);
89
- await this.updateUserStoryFrontmatter(userStory.filePath, existingByTitle.number);
90
- await this.updateUserStoryIssue(existingByTitle.number, issueContent, userStory.filePath);
91
- issuesUpdated++;
92
- console.log(` \u2705 Linked and updated Issue #${existingByTitle.number}`);
93
- continue;
94
- }
95
- console.log(` \u{1F680} Creating new issue: ${issueContent.title}`);
89
+ const titlePattern = `[${featureId}][${userStory.id}]`;
96
90
  const milestoneTitle = `${featureData.id}: ${featureData.title}`;
97
- const issueNumber = await this.createUserStoryIssue(
98
- issueContent,
99
- milestoneTitle,
100
- userStory.filePath
101
- );
102
- issuesCreated++;
103
- console.log(` \u2705 Created Issue #${issueNumber}`);
91
+ console.log(` \u{1F6E1}\uFE0F Using DuplicateDetector (pattern: ${titlePattern})`);
92
+ const result = await DuplicateDetector.createWithProtection({
93
+ title: issueContent.title,
94
+ body: issueContent.body,
95
+ titlePattern,
96
+ incrementId: userStory.id,
97
+ labels: issueContent.labels,
98
+ milestone: milestoneTitle,
99
+ repo: `${this.client.getOwner()}/${this.client.getRepo()}`
100
+ });
101
+ issueNumber = result.issue.number;
102
+ if (result.wasReused) {
103
+ console.log(` \u267B\uFE0F Reused existing issue #${issueNumber} (duplicate prevented!)`);
104
+ wasUpdated = true;
105
+ } else {
106
+ console.log(` \u2705 Created issue #${issueNumber}`);
107
+ }
108
+ if (result.duplicatesFound > 0) {
109
+ console.log(` \u{1F6E1}\uFE0F Duplicates detected: ${result.duplicatesFound}, auto-closed: ${result.duplicatesClosed}`);
110
+ }
104
111
  await this.updateUserStoryFrontmatter(userStory.filePath, issueNumber);
112
+ if (result.wasReused) {
113
+ await this.updateUserStoryIssue(issueNumber, issueContent, userStory.filePath);
114
+ issuesUpdated++;
115
+ } else {
116
+ issuesCreated++;
117
+ }
105
118
  }
106
119
  console.log(`
107
120
  \u2705 Feature sync complete!`);
@@ -22,6 +22,7 @@ import * as yaml from 'yaml';
22
22
  import { GitHubClientV2 } from './github-client-v2.js';
23
23
  import { UserStoryIssueBuilder } from './user-story-issue-builder.js';
24
24
  import { CompletionCalculator } from './completion-calculator.js';
25
+ import { DuplicateDetector } from './duplicate-detector.js';
25
26
  import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
26
27
 
27
28
  interface FeatureFrontmatter {
@@ -145,8 +146,18 @@ export class GitHubFeatureSync {
145
146
  // ✅ FIX: Add status to issue content for sync
146
147
  issueContent.status = userStory.status;
147
148
 
148
- // ✅ TRIPLE IDEMPOTENCY CHECK
149
- // This ensures 100% safety when running sync multiple times
149
+ // ✅ DUPLICATE PROTECTION WITH GLOBAL DETECTOR
150
+ // Uses proven 3-phase protection: Detection Verification Reflection
151
+ //
152
+ // WHY THIS MATTERS:
153
+ // - Previous implementation had race conditions (--limit 1, eventual consistency)
154
+ // - DuplicateDetector handles all edge cases automatically
155
+ // - Auto-closes duplicates if they slip through
156
+ //
157
+ // @see .specweave/increments/0047-us-task-linkage/reports/DUPLICATE-GITHUB-ISSUES-ROOT-CAUSE.md
158
+
159
+ let issueNumber: number;
160
+ let wasUpdated = false;
150
161
 
151
162
  // Check 1: User Story frontmatter has issue number
152
163
  if (userStory.existingIssue) {
@@ -167,34 +178,53 @@ export class GitHubFeatureSync {
167
178
  }
168
179
  }
169
180
 
170
- // Check 2: Search GitHub for issue by title
171
- const existingByTitle = await this.client.searchIssueByTitle(issueContent.title);
172
- if (existingByTitle) {
173
- console.log(` ♻️ Found existing issue by title: #${existingByTitle.number}`);
181
+ // Check 2 & 3: Use DuplicateDetector for robust duplicate prevention
182
+ // This handles:
183
+ // - Search with proper limits (not --limit 1)
184
+ // - Post-create verification
185
+ // - Auto-close duplicates
186
+ // - Eventual consistency race conditions
187
+ const titlePattern = `[${featureId}][${userStory.id}]`;
188
+ const milestoneTitle = `${featureData.id}: ${featureData.title}`;
174
189
 
175
- // Link it in frontmatter
176
- await this.updateUserStoryFrontmatter(userStory.filePath, existingByTitle.number);
190
+ console.log(` 🛡️ Using DuplicateDetector (pattern: ${titlePattern})`);
177
191
 
178
- // Update content with verification
179
- await this.updateUserStoryIssue(existingByTitle.number, issueContent, userStory.filePath);
180
- issuesUpdated++;
181
- console.log(` ✅ Linked and updated Issue #${existingByTitle.number}`);
182
- continue;
192
+ const result = await DuplicateDetector.createWithProtection({
193
+ title: issueContent.title,
194
+ body: issueContent.body,
195
+ titlePattern,
196
+ incrementId: userStory.id,
197
+ labels: issueContent.labels,
198
+ milestone: milestoneTitle,
199
+ repo: `${this.client.getOwner()}/${this.client.getRepo()}`
200
+ });
201
+
202
+ issueNumber = result.issue.number;
203
+
204
+ // Log duplicate protection results
205
+ if (result.wasReused) {
206
+ console.log(` ♻️ Reused existing issue #${issueNumber} (duplicate prevented!)`);
207
+ wasUpdated = true;
208
+ } else {
209
+ console.log(` ✅ Created issue #${issueNumber}`);
183
210
  }
184
211
 
185
- // Check 3: No existing issue found, create new
186
- console.log(` 🚀 Creating new issue: ${issueContent.title}`);
187
- const milestoneTitle = `${featureData.id}: ${featureData.title}`;
188
- const issueNumber = await this.createUserStoryIssue(
189
- issueContent,
190
- milestoneTitle,
191
- userStory.filePath
192
- );
193
- issuesCreated++;
194
- console.log(` ✅ Created Issue #${issueNumber}`);
212
+ if (result.duplicatesFound > 0) {
213
+ console.log(` 🛡️ Duplicates detected: ${result.duplicatesFound}, auto-closed: ${result.duplicatesClosed}`);
214
+ }
195
215
 
196
- // Update User Story frontmatter
216
+ // Update User Story frontmatter with issue link
197
217
  await this.updateUserStoryFrontmatter(userStory.filePath, issueNumber);
218
+
219
+ // Update completion tracking
220
+ if (result.wasReused) {
221
+ // Update existing issue with latest content
222
+ await this.updateUserStoryIssue(issueNumber, issueContent, userStory.filePath);
223
+ issuesUpdated++;
224
+ } else {
225
+ // New issue created
226
+ issuesCreated++;
227
+ }
198
228
  }
199
229
 
200
230
  console.log(`\n✅ Feature sync complete!`);
@@ -107,7 +107,7 @@ For architectural decisions and system design:
107
107
  Use the Task tool to invoke the mobile-architect agent:
108
108
 
109
109
  Task(
110
- subagent_type: "mobile-architect",
110
+ subagent_type: "specweave-mobile:mobile-architect:mobile-architect",
111
111
  description: "Design architecture for social media app",
112
112
  prompt: "Design a scalable React Native architecture for a social media app
113
113
  with feed, messaging, and profile features. Include state management,
@@ -6223,3 +6223,75 @@
6223
6223
  [2025-11-20 16:35:05] 🎯 Post-Increment-Completion Hook Triggered
6224
6224
  [2025-11-20 16:35:05] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6225
6225
  [2025-11-20 16:35:05] Run: npm run build
6226
+ [2025-11-20 17:12:16] 🎯 Post-Increment-Completion Hook Triggered
6227
+ [2025-11-20 17:12:16] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6228
+ [2025-11-20 17:12:16] Run: npm run build
6229
+ [2025-11-20 17:12:21] 🎯 Post-Increment-Completion Hook Triggered
6230
+ [2025-11-20 17:12:21] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6231
+ [2025-11-20 17:12:21] Run: npm run build
6232
+ [2025-11-20 17:12:27] 🎯 Post-Increment-Completion Hook Triggered
6233
+ [2025-11-20 17:12:27] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6234
+ [2025-11-20 17:12:27] Run: npm run build
6235
+ [2025-11-20 17:12:32] 🎯 Post-Increment-Completion Hook Triggered
6236
+ [2025-11-20 17:12:32] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6237
+ [2025-11-20 17:12:32] Run: npm run build
6238
+ [2025-11-20 18:11:17] 🎯 Post-Increment-Completion Hook Triggered
6239
+ [2025-11-20 18:11:17] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6240
+ [2025-11-20 18:11:17] Run: npm run build
6241
+ [2025-11-20 18:11:22] 🎯 Post-Increment-Completion Hook Triggered
6242
+ [2025-11-20 18:11:22] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6243
+ [2025-11-20 18:11:22] Run: npm run build
6244
+ [2025-11-20 18:11:27] 🎯 Post-Increment-Completion Hook Triggered
6245
+ [2025-11-20 18:11:27] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6246
+ [2025-11-20 18:11:27] Run: npm run build
6247
+ [2025-11-20 18:11:33] 🎯 Post-Increment-Completion Hook Triggered
6248
+ [2025-11-20 18:11:33] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6249
+ [2025-11-20 18:11:33] Run: npm run build
6250
+ [2025-11-20 18:35:45] 🎯 Post-Increment-Completion Hook Triggered
6251
+ [2025-11-20 18:35:45] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6252
+ [2025-11-20 18:35:45] Run: npm run build
6253
+ [2025-11-20 18:35:45] 🎯 Post-Increment-Completion Hook Triggered
6254
+ [2025-11-20 18:35:45] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6255
+ [2025-11-20 18:35:45] Run: npm run build
6256
+ [2025-11-20 18:35:45] 🎯 Post-Increment-Completion Hook Triggered
6257
+ [2025-11-20 18:35:45] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6258
+ [2025-11-20 18:35:45] Run: npm run build
6259
+ [2025-11-20 18:35:45] 🎯 Post-Increment-Completion Hook Triggered
6260
+ [2025-11-20 18:35:45] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6261
+ [2025-11-20 18:35:45] Run: npm run build
6262
+ [2025-11-20 18:35:51] 🎯 Post-Increment-Completion Hook Triggered
6263
+ [2025-11-20 18:35:51] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6264
+ [2025-11-20 18:35:51] Run: npm run build
6265
+ [2025-11-20 18:35:57] 🎯 Post-Increment-Completion Hook Triggered
6266
+ [2025-11-20 18:35:57] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6267
+ [2025-11-20 18:35:57] Run: npm run build
6268
+ [2025-11-20 18:36:03] 🎯 Post-Increment-Completion Hook Triggered
6269
+ [2025-11-20 18:36:03] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6270
+ [2025-11-20 18:36:03] Run: npm run build
6271
+ [2025-11-20 18:36:09] 🎯 Post-Increment-Completion Hook Triggered
6272
+ [2025-11-20 18:36:09] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6273
+ [2025-11-20 18:36:09] Run: npm run build
6274
+ [2025-11-20 18:50:14] 🎯 Post-Increment-Completion Hook Triggered
6275
+ [2025-11-20 18:50:14] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6276
+ [2025-11-20 18:50:14] Run: npm run build
6277
+ [2025-11-20 18:50:14] 🎯 Post-Increment-Completion Hook Triggered
6278
+ [2025-11-20 18:50:14] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6279
+ [2025-11-20 18:50:14] Run: npm run build
6280
+ [2025-11-20 18:50:14] 🎯 Post-Increment-Completion Hook Triggered
6281
+ [2025-11-20 18:50:14] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6282
+ [2025-11-20 18:50:14] Run: npm run build
6283
+ [2025-11-20 18:50:15] 🎯 Post-Increment-Completion Hook Triggered
6284
+ [2025-11-20 18:50:15] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6285
+ [2025-11-20 18:50:15] Run: npm run build
6286
+ [2025-11-20 18:50:20] 🎯 Post-Increment-Completion Hook Triggered
6287
+ [2025-11-20 18:50:20] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6288
+ [2025-11-20 18:50:20] Run: npm run build
6289
+ [2025-11-20 18:50:26] 🎯 Post-Increment-Completion Hook Triggered
6290
+ [2025-11-20 18:50:26] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6291
+ [2025-11-20 18:50:26] Run: npm run build
6292
+ [2025-11-20 18:50:32] 🎯 Post-Increment-Completion Hook Triggered
6293
+ [2025-11-20 18:50:32] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6294
+ [2025-11-20 18:50:32] Run: npm run build
6295
+ [2025-11-20 18:50:38] 🎯 Post-Increment-Completion Hook Triggered
6296
+ [2025-11-20 18:50:38] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6297
+ [2025-11-20 18:50:38] Run: npm run build
@@ -1,84 +0,0 @@
1
- # task-builder Skill
2
-
3
- **Status**: To be developed
4
- **Priority**: High
5
-
6
- ## Purpose
7
-
8
- Converts high-level spec.md (user stories, epics, capabilities) into detailed tasks.md with:
9
- - Technical implementation details
10
- - File paths and code snippets
11
- - Acceptance criteria per task
12
- - Agent/skill references (which agent to use for each task)
13
- - Documentation update requirements
14
-
15
- ## When It Activates
16
-
17
- - After increment-planner creates increment
18
- - After spec.md is created
19
- - User says "create tasks for this feature"
20
- - User says "break down implementation"
21
-
22
- ## What It Does
23
-
24
- 1. **Reads spec.md**: Understands user stories, acceptance tests
25
- 2. **Creates tasks.md**:
26
- - Maps user stories → tasks
27
- - Adds technical details (file paths, code)
28
- - Adds acceptance criteria per task
29
- - Specifies which agent/skills to use
30
- - Links to documentation
31
- 3. **Updates docs**: Marks sections as [DRAFT] that need updates
32
- 4. **Understands structure**: Adapts to JIRA, ADO, or simple user stories
33
-
34
- ## Task vs User Story
35
-
36
- - **User Story**: Has acceptance TESTS (verify feature works)
37
- - **Task**: Has acceptance CRITERIA (verify task complete)
38
-
39
- ## Example Output
40
-
41
- ```markdown
42
- # tasks.md
43
-
44
- ## Task T001: Create StripeService
45
-
46
- **Agent**: nodejs-backend
47
- **Skills**: stripe-integration, api-design
48
-
49
- **Description**: Create Stripe service class for payment processing
50
-
51
- **File**: src/services/stripe-service.ts
52
-
53
- **Implementation**:
54
- ```typescript
55
- export class StripeService {
56
- async createSubscription(params) {
57
- // Implementation
58
- }
59
- }
60
- ```
61
-
62
- **Acceptance Criteria**:
63
- - [ ] StripeService class exists in src/services/stripe-service.ts
64
- - [ ] createSubscription method implemented
65
- - [ ] Error handling added
66
- - [ ] Unit tests passing
67
-
68
- **Documentation Updates**:
69
- - [ ] .specweave/docs/api/payments.md [DRAFT]
70
- ```
71
-
72
- ## Integration
73
-
74
- - Called by: increment-planner (after spec.md created)
75
- - Calls: docs-updater (to update documentation)
76
- - Output: tasks.md in .specweave/increments/####-feature/
77
-
78
- ## Configuration
79
-
80
-
81
-
82
- ---
83
-
84
- **To implement**: See task in .specweave/increments/