specweave 0.23.2 → 0.23.5
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/CLAUDE.md +367 -0
- package/dist/plugins/specweave/lib/utils/fs-native.d.ts +133 -0
- package/dist/plugins/specweave/lib/utils/fs-native.d.ts.map +1 -0
- package/dist/plugins/specweave/lib/utils/fs-native.js +224 -0
- package/dist/plugins/specweave/lib/utils/fs-native.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.js +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +52 -20
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +24 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.js +2 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.js.map +1 -1
- package/dist/src/core/ac-test-validator-cli.d.ts +16 -0
- package/dist/src/core/ac-test-validator-cli.d.ts.map +1 -0
- package/dist/src/core/ac-test-validator-cli.js +118 -0
- package/dist/src/core/ac-test-validator-cli.js.map +1 -0
- package/dist/src/core/ac-test-validator.d.ts +111 -0
- package/dist/src/core/ac-test-validator.d.ts.map +1 -0
- package/dist/src/core/ac-test-validator.js +292 -0
- package/dist/src/core/ac-test-validator.js.map +1 -0
- package/dist/src/core/increment/desync-detector.d.ts +142 -0
- package/dist/src/core/increment/desync-detector.d.ts.map +1 -0
- package/dist/src/core/increment/desync-detector.js +270 -0
- package/dist/src/core/increment/desync-detector.js.map +1 -0
- package/dist/src/core/increment/metadata-manager.d.ts +8 -4
- package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +45 -21
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/qa/qa-runner.js +9 -2
- package/dist/src/core/qa/qa-runner.js.map +1 -1
- package/dist/src/sync/sync-coordinator.d.ts +1 -1
- package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
- package/dist/src/sync/sync-coordinator.js +40 -2
- package/dist/src/sync/sync-coordinator.js.map +1 -1
- package/dist/src/utils/fs-native.d.ts +133 -0
- package/dist/src/utils/fs-native.d.ts.map +1 -0
- package/dist/src/utils/fs-native.js +224 -0
- package/dist/src/utils/fs-native.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +12 -0
- package/plugins/specweave/agents/AGENTS-INDEX.md +216 -0
- package/plugins/specweave/agents/architect/AGENT.md +17 -0
- package/plugins/specweave/agents/code-standards-detective/AGENT.md +16 -0
- package/plugins/specweave/agents/docs-writer/AGENT.md +16 -0
- package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +704 -0
- package/plugins/specweave/agents/infrastructure/AGENT.md +16 -0
- package/plugins/specweave/agents/performance/AGENT.md +16 -0
- package/plugins/specweave/agents/pm/AGENT.md +17 -0
- package/plugins/specweave/agents/qa-lead/AGENT.md +15 -0
- package/plugins/specweave/agents/reflective-reviewer/AGENT.md +16 -0
- package/plugins/specweave/agents/security/AGENT.md +16 -0
- package/plugins/specweave/agents/tdd-orchestrator/AGENT.md +16 -0
- package/plugins/specweave/agents/tech-lead/AGENT.md +16 -0
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +16 -0
- package/plugins/specweave/agents/translator/AGENT.md +13 -0
- package/plugins/specweave/commands/specweave-done.md +14 -0
- package/plugins/specweave/commands/specweave-qa.md +11 -1
- package/plugins/specweave/commands/specweave-sync-status.md +356 -0
- package/plugins/specweave/commands/specweave-validate.md +10 -1
- package/plugins/specweave/hooks/pre-task-completion.sh +196 -0
- package/plugins/specweave/lib/hooks/git-diff-analyzer.js +3 -3
- package/plugins/specweave/lib/hooks/git-diff-analyzer.ts +3 -3
- package/plugins/specweave/lib/hooks/invoke-translator-skill.js +3 -2
- package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +3 -2
- package/plugins/specweave/lib/hooks/prepare-reflection-context.js +3 -3
- package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +3 -3
- package/plugins/specweave/lib/hooks/reflection-config-loader.js +4 -4
- package/plugins/specweave/lib/hooks/reflection-config-loader.ts +4 -4
- package/plugins/specweave/lib/hooks/reflection-storage.js +9 -9
- package/plugins/specweave/lib/hooks/reflection-storage.ts +9 -9
- package/plugins/specweave/lib/hooks/sync-cache.js +9 -8
- package/plugins/specweave/lib/hooks/sync-living-docs.js +57 -6
- package/plugins/specweave/lib/hooks/sync-us-tasks.js +6 -6
- package/plugins/specweave/lib/hooks/translate-file.js +3 -2
- package/plugins/specweave/lib/hooks/translate-file.ts +3 -2
- package/plugins/specweave/lib/hooks/translate-living-docs.js +4 -3
- package/plugins/specweave/lib/hooks/translate-living-docs.ts +4 -3
- package/plugins/specweave/lib/hooks/update-tasks-md.js +3 -3
- package/plugins/specweave/lib/hooks/update-tasks-md.ts +3 -3
- package/plugins/specweave/lib/utils/fs-native.js +182 -0
- package/plugins/specweave/lib/utils/fs-native.ts +283 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.d.ts +8 -4
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +45 -21
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
- package/plugins/specweave/skills/SKILLS-INDEX.md +26 -2
- package/plugins/specweave/skills/increment-planner/SKILL.md +2 -2
- package/plugins/specweave-ado/commands/specweave-ado-close-workitem.md +1 -1
- package/plugins/specweave-ado/commands/specweave-ado-create-workitem.md +1 -1
- package/plugins/specweave-ado/commands/specweave-ado-status.md +1 -1
- package/plugins/specweave-ado/commands/specweave-ado-sync.md +1 -1
- package/plugins/specweave-diagrams/agents/diagrams-architect/AGENT.md +1 -1
- package/plugins/specweave-diagrams/skills/diagrams-generator/SKILL.md +4 -4
- package/plugins/specweave-github/lib/github-client-v2.js +2 -1
- package/plugins/specweave-github/lib/github-client-v2.ts +1 -1
- package/plugins/specweave-github/lib/github-feature-sync.js +30 -17
- package/plugins/specweave-github/lib/github-feature-sync.ts +54 -24
- package/plugins/specweave-github/lib/user-story-issue-builder.js +24 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.ts +33 -0
- package/plugins/specweave-mobile/README.md +1 -1
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +72 -0
- package/src/templates/CLAUDE.md.template +13 -0
- package/plugins/specweave/skills/task-builder/README.md +0 -84
|
@@ -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
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
// ✅
|
|
149
|
-
//
|
|
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:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
|
-
|
|
176
|
-
await this.updateUserStoryFrontmatter(userStory.filePath, existingByTitle.number);
|
|
190
|
+
console.log(` 🛡️ Using DuplicateDetector (pattern: ${titlePattern})`);
|
|
177
191
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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!`);
|
|
@@ -5,6 +5,20 @@ import * as yaml from "yaml";
|
|
|
5
5
|
import { IssueStateManager } from "./IssueStateManager.js";
|
|
6
6
|
class UserStoryIssueBuilder {
|
|
7
7
|
constructor(userStoryPath, projectRoot, featureId, repoInfo) {
|
|
8
|
+
if (!featureId || featureId.trim() === "") {
|
|
9
|
+
throw new Error(
|
|
10
|
+
`UserStoryIssueBuilder: featureId is required but was empty.
|
|
11
|
+
This prevents incorrect issue titles like [undefined][US-XXX] or [SP-US-XXX].
|
|
12
|
+
Provide the correct Feature ID (e.g., "FS-047") when constructing this builder.`
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
if (!/^FS-\d{3}$/.test(featureId)) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
`UserStoryIssueBuilder: Invalid featureId format "${featureId}".
|
|
18
|
+
Expected format: FS-XXX (e.g., "FS-047", "FS-123").
|
|
19
|
+
This prevents incorrect issue titles like [SP-US-XXX] or [${featureId}][US-XXX].`
|
|
20
|
+
);
|
|
21
|
+
}
|
|
8
22
|
this.userStoryPath = userStoryPath;
|
|
9
23
|
this.projectRoot = projectRoot;
|
|
10
24
|
this.featureId = featureId;
|
|
@@ -29,6 +43,16 @@ class UserStoryIssueBuilder {
|
|
|
29
43
|
const acceptanceCriteria = this.extractAcceptanceCriteria(bodyContent);
|
|
30
44
|
const tasks = await this.extractTasks(bodyContent, frontmatter.id);
|
|
31
45
|
const title = `[${this.featureId}][${frontmatter.id}] ${frontmatter.title}`;
|
|
46
|
+
const titlePattern = /^\[FS-\d{3}\]\[US-\d{3}\] .+$/;
|
|
47
|
+
if (!titlePattern.test(title)) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
`Generated issue title has incorrect format: "${title}"
|
|
50
|
+
Expected: [FS-XXX][US-YYY] Title
|
|
51
|
+
This indicates a bug in UserStoryIssueBuilder or invalid frontmatter.
|
|
52
|
+
Feature ID: ${this.featureId}
|
|
53
|
+
User Story ID: ${frontmatter.id}`
|
|
54
|
+
);
|
|
55
|
+
}
|
|
32
56
|
const body = this.buildBody({
|
|
33
57
|
frontmatter,
|
|
34
58
|
userStoryStatement,
|
|
@@ -56,6 +56,24 @@ export class UserStoryIssueBuilder {
|
|
|
56
56
|
featureId: string,
|
|
57
57
|
repoInfo?: { owner: string; repo: string; branch?: string }
|
|
58
58
|
) {
|
|
59
|
+
// ✅ VALIDATION: Ensure featureId is provided and has correct format
|
|
60
|
+
if (!featureId || featureId.trim() === '') {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`UserStoryIssueBuilder: featureId is required but was empty.\n` +
|
|
63
|
+
`This prevents incorrect issue titles like [undefined][US-XXX] or [SP-US-XXX].\n` +
|
|
64
|
+
`Provide the correct Feature ID (e.g., "FS-047") when constructing this builder.`
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ✅ VALIDATION: Ensure featureId matches expected pattern (FS-XXX)
|
|
69
|
+
if (!/^FS-\d{3}$/.test(featureId)) {
|
|
70
|
+
throw new Error(
|
|
71
|
+
`UserStoryIssueBuilder: Invalid featureId format "${featureId}".\n` +
|
|
72
|
+
`Expected format: FS-XXX (e.g., "FS-047", "FS-123").\n` +
|
|
73
|
+
`This prevents incorrect issue titles like [SP-US-XXX] or [${featureId}][US-XXX].`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
59
77
|
this.userStoryPath = userStoryPath;
|
|
60
78
|
this.projectRoot = projectRoot;
|
|
61
79
|
this.featureId = featureId;
|
|
@@ -91,8 +109,23 @@ export class UserStoryIssueBuilder {
|
|
|
91
109
|
const tasks = await this.extractTasks(bodyContent, frontmatter.id);
|
|
92
110
|
|
|
93
111
|
// 3. Build issue title
|
|
112
|
+
// ✅ VALIDATION: Double-check title format before returning
|
|
113
|
+
// Expected format: [FS-XXX][US-YYY] Title
|
|
114
|
+
// This prevents issues like [SP-US-XXX] or [undefined][US-XXX]
|
|
94
115
|
const title = `[${this.featureId}][${frontmatter.id}] ${frontmatter.title}`;
|
|
95
116
|
|
|
117
|
+
// ✅ SAFETY CHECK: Ensure title matches expected pattern
|
|
118
|
+
const titlePattern = /^\[FS-\d{3}\]\[US-\d{3}\] .+$/;
|
|
119
|
+
if (!titlePattern.test(title)) {
|
|
120
|
+
throw new Error(
|
|
121
|
+
`Generated issue title has incorrect format: "${title}"\n` +
|
|
122
|
+
`Expected: [FS-XXX][US-YYY] Title\n` +
|
|
123
|
+
`This indicates a bug in UserStoryIssueBuilder or invalid frontmatter.\n` +
|
|
124
|
+
`Feature ID: ${this.featureId}\n` +
|
|
125
|
+
`User Story ID: ${frontmatter.id}`
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
96
129
|
// 4. Build issue body
|
|
97
130
|
const body = this.buildBody({
|
|
98
131
|
frontmatter,
|
|
@@ -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
|
|
@@ -4,6 +4,19 @@ This project uses **SpecWeave** - a specification-first AI development framework
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## 🚨 Meta-Rule: Thinking-Before-Acting (For Claude)
|
|
8
|
+
|
|
9
|
+
**If you identify a dependency in your reasoning, satisfy it BEFORE attempting the dependent operation.**
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
❌ Anti-pattern: node script.js → Error: file not compiled → npm run build
|
|
13
|
+
✅ Correct: npm run build → node script.js → Success
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Why**: Avoids predictable failures when you already know what needs to happen first.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
7
20
|
## 🎯 Getting Started
|
|
8
21
|
|
|
9
22
|
**Initial Increment Created**: `0001-project-setup` (`.specweave/increments/0001-project-setup/`)
|
|
@@ -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/
|