specweave 0.30.5 → 0.30.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/specweave-ado/lib/ado-profile-resolver.d.ts +9 -3
- package/dist/plugins/specweave-ado/lib/ado-profile-resolver.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-profile-resolver.js +13 -6
- package/dist/plugins/specweave-ado/lib/ado-profile-resolver.js.map +1 -1
- package/dist/src/cli/helpers/init/external-import-grouping.js +1 -1
- package/dist/src/cli/helpers/init/external-import-grouping.js.map +1 -1
- package/dist/src/cli/helpers/init/sync-profile-helpers.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/sync-profile-helpers.js +3 -2
- package/dist/src/cli/helpers/init/sync-profile-helpers.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js +2 -2
- package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +6 -5
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js +15 -10
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js.map +1 -1
- package/dist/src/cli/workers/clone-worker.js +55 -0
- package/dist/src/cli/workers/clone-worker.js.map +1 -1
- package/dist/src/cli/workers/living-docs-worker.js +7 -0
- package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
- package/dist/src/config/types.d.ts +2 -2
- package/dist/src/core/config/types.d.ts +15 -1
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/living-docs/discovery.d.ts +9 -0
- package/dist/src/core/living-docs/discovery.d.ts.map +1 -1
- package/dist/src/core/living-docs/discovery.js +204 -3
- package/dist/src/core/living-docs/discovery.js.map +1 -1
- package/dist/src/core/living-docs/foundation-builder.d.ts.map +1 -1
- package/dist/src/core/living-docs/foundation-builder.js +149 -34
- package/dist/src/core/living-docs/foundation-builder.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +3 -3
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +35 -20
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/suggestions-generator.d.ts +42 -0
- package/dist/src/core/living-docs/suggestions-generator.d.ts.map +1 -1
- package/dist/src/core/living-docs/suggestions-generator.js +219 -1
- package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
- package/dist/src/core/living-docs/umbrella-detector.d.ts +94 -0
- package/dist/src/core/living-docs/umbrella-detector.d.ts.map +1 -0
- package/dist/src/core/living-docs/umbrella-detector.js +484 -0
- package/dist/src/core/living-docs/umbrella-detector.js.map +1 -0
- package/dist/src/core/living-docs/workitem-matcher.d.ts +4 -0
- package/dist/src/core/living-docs/workitem-matcher.d.ts.map +1 -1
- package/dist/src/core/living-docs/workitem-matcher.js +513 -2
- package/dist/src/core/living-docs/workitem-matcher.js.map +1 -1
- package/dist/src/core/types/config.d.ts +41 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/types/sync-profile.d.ts +279 -2
- package/dist/src/core/types/sync-profile.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.js +163 -0
- package/dist/src/core/types/sync-profile.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +56 -1
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +217 -64
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/init/compliance/types.d.ts +1 -1
- package/dist/src/living-docs/epic-id-allocator.d.ts +1 -1
- package/dist/src/living-docs/epic-id-allocator.js +1 -1
- package/package.json +1 -1
- package/plugins/specweave-ado/commands/specweave-ado-close-workitem.md +5 -5
- package/plugins/specweave-ado/commands/specweave-ado-create-workitem.md +4 -4
- package/plugins/specweave-ado/commands/specweave-ado-sync.md +5 -5
- package/plugins/specweave-ado/lib/ado-profile-resolver.js +5 -3
- package/plugins/specweave-ado/lib/ado-profile-resolver.ts +16 -6
- package/plugins/specweave-ado/lib/ado-project-detector.ts +2 -2
- package/src/templates/config.json.template +1 -1
|
@@ -102,7 +102,7 @@ export declare class EpicIdAllocator {
|
|
|
102
102
|
* Create an Epic ID Allocator for a specific project
|
|
103
103
|
*
|
|
104
104
|
* @param projectRoot - Root directory of the SpecWeave project
|
|
105
|
-
* @param projectId - Project ID (e.g., "
|
|
105
|
+
* @param projectId - Project ID (e.g., "acme", "parent"). Required for per-project epics.
|
|
106
106
|
* @param options - Optional configuration
|
|
107
107
|
*/
|
|
108
108
|
constructor(projectRoot: string, projectId: string, options?: EpicIdAllocatorOptions);
|
|
@@ -40,7 +40,7 @@ export class EpicIdAllocator {
|
|
|
40
40
|
* Create an Epic ID Allocator for a specific project
|
|
41
41
|
*
|
|
42
42
|
* @param projectRoot - Root directory of the SpecWeave project
|
|
43
|
-
* @param projectId - Project ID (e.g., "
|
|
43
|
+
* @param projectId - Project ID (e.g., "acme", "parent"). Required for per-project epics.
|
|
44
44
|
* @param options - Optional configuration
|
|
45
45
|
*/
|
|
46
46
|
constructor(projectRoot, projectId, options) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.8",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -165,9 +165,9 @@ Checking permissions...
|
|
|
165
165
|
canUpdateStatus: true
|
|
166
166
|
|
|
167
167
|
Resolving ADO profile...
|
|
168
|
-
Using: ado-
|
|
169
|
-
Organization:
|
|
170
|
-
Project:
|
|
168
|
+
Using: ado-my-project (from increment)
|
|
169
|
+
Organization: acme-corp
|
|
170
|
+
Project: My Project
|
|
171
171
|
|
|
172
172
|
Validating completion...
|
|
173
173
|
Tasks: 10/10 complete
|
|
@@ -176,13 +176,13 @@ Closing work item...
|
|
|
176
176
|
|
|
177
177
|
✅ Closed ADO Epic #12345
|
|
178
178
|
|
|
179
|
-
Profile: ado-
|
|
179
|
+
Profile: ado-my-project
|
|
180
180
|
Increment: 0005-payment-integration
|
|
181
181
|
Status: 100% complete (10/10 tasks)
|
|
182
182
|
Duration: 3 days
|
|
183
183
|
|
|
184
184
|
Summary posted to ADO work item
|
|
185
|
-
URL: https://dev.azure.com/
|
|
185
|
+
URL: https://dev.azure.com/acme-corp/My%20Project/_workitems/edit/12345
|
|
186
186
|
```
|
|
187
187
|
|
|
188
188
|
### Permission Denied
|
|
@@ -149,15 +149,15 @@ Claude: Checking ADO permissions...
|
|
|
149
149
|
✓ canUpdateExternalItems: true
|
|
150
150
|
|
|
151
151
|
Resolving ADO profile...
|
|
152
|
-
✓ Using profile: ado-
|
|
153
|
-
✓ Organization:
|
|
154
|
-
✓ Project:
|
|
152
|
+
✓ Using profile: ado-my-project (from increment)
|
|
153
|
+
✓ Organization: acme-corp
|
|
154
|
+
✓ Project: My Project
|
|
155
155
|
|
|
156
156
|
Creating work item...
|
|
157
157
|
[Invokes ADO Manager Agent]
|
|
158
158
|
|
|
159
159
|
✅ Created ADO Epic #12345
|
|
160
|
-
URL: https://dev.azure.com/
|
|
160
|
+
URL: https://dev.azure.com/acme-corp/My%20Project/_workitems/edit/12345
|
|
161
161
|
|
|
162
162
|
# If permission denied:
|
|
163
163
|
Claude: Checking ADO permissions...
|
|
@@ -192,9 +192,9 @@ Checking permissions...
|
|
|
192
192
|
canUpdateExternalItems: true
|
|
193
193
|
|
|
194
194
|
Resolving ADO profile...
|
|
195
|
-
Using: ado-
|
|
196
|
-
Organization:
|
|
197
|
-
Project:
|
|
195
|
+
Using: ado-my-project (from increment)
|
|
196
|
+
Organization: acme-corp
|
|
197
|
+
Project: My Project
|
|
198
198
|
|
|
199
199
|
Syncing...
|
|
200
200
|
|
|
@@ -210,8 +210,8 @@ TO ADO:
|
|
|
210
210
|
Updated completion field: 60%
|
|
211
211
|
|
|
212
212
|
Sync Complete!
|
|
213
|
-
Profile: ado-
|
|
214
|
-
Work Item: https://dev.azure.com/
|
|
213
|
+
Profile: ado-my-project
|
|
214
|
+
Work Item: https://dev.azure.com/acme-corp/My%20Project/_workitems/edit/12345
|
|
215
215
|
```
|
|
216
216
|
|
|
217
217
|
### Permission Denied
|
|
@@ -11,7 +11,8 @@ class AdoProfileResolver {
|
|
|
11
11
|
*
|
|
12
12
|
* Priority:
|
|
13
13
|
* 1. Increment's metadata.json -> external_sync.ado.profile
|
|
14
|
-
* 2. Config.json -> sync.
|
|
14
|
+
* 2. Config.json -> sync.defaultProfile (v0.31.0+)
|
|
15
|
+
* 3. Config.json -> sync.activeProfile (legacy fallback)
|
|
15
16
|
*
|
|
16
17
|
* @param incrementId - Increment ID (e.g., "0093-my-feature")
|
|
17
18
|
* @returns Profile resolution result
|
|
@@ -26,11 +27,12 @@ class AdoProfileResolver {
|
|
|
26
27
|
};
|
|
27
28
|
}
|
|
28
29
|
const incrementProfile = await this.getIncrementProfile(incrementId);
|
|
29
|
-
const
|
|
30
|
+
const globalDefaultProfile = config.sync?.defaultProfile ?? config.sync?.activeProfile;
|
|
31
|
+
const profileName = incrementProfile || globalDefaultProfile;
|
|
30
32
|
if (!profileName) {
|
|
31
33
|
return {
|
|
32
34
|
success: false,
|
|
33
|
-
error: "No ADO profile configured. Set sync.
|
|
35
|
+
error: "No ADO profile configured. Set sync.defaultProfile in config.json or external_sync.ado.profile in increment metadata.",
|
|
34
36
|
incrementId
|
|
35
37
|
};
|
|
36
38
|
}
|
|
@@ -4,10 +4,15 @@
|
|
|
4
4
|
* Resolves the correct ADO profile to use for sync operations.
|
|
5
5
|
* Priority:
|
|
6
6
|
* 1. Increment's stored profile (metadata.json -> external_sync.ado.profile)
|
|
7
|
-
* 2. Global
|
|
7
|
+
* 2. Global defaultProfile (config.json -> sync.defaultProfile)
|
|
8
|
+
* 3. Legacy: Global activeProfile (config.json -> sync.activeProfile)
|
|
8
9
|
*
|
|
9
10
|
* This allows each increment to sync to its designated ADO project
|
|
10
|
-
* without requiring manual
|
|
11
|
+
* without requiring manual profile switching.
|
|
12
|
+
*
|
|
13
|
+
* NOTE (v0.31.0): Renamed from "activeProfile" to "defaultProfile" for clarity.
|
|
14
|
+
* The default profile is a FALLBACK, not a constraint. Bulk operations
|
|
15
|
+
* iterate ALL profiles.
|
|
11
16
|
*
|
|
12
17
|
* Usage:
|
|
13
18
|
* ```typescript
|
|
@@ -105,6 +110,9 @@ interface ConfigProfile {
|
|
|
105
110
|
* Sync config from config.json
|
|
106
111
|
*/
|
|
107
112
|
interface SyncConfig {
|
|
113
|
+
/** @since v0.31.0 - preferred */
|
|
114
|
+
defaultProfile?: string;
|
|
115
|
+
/** @deprecated Use defaultProfile */
|
|
108
116
|
activeProfile?: string;
|
|
109
117
|
profiles?: Record<string, ConfigProfile>;
|
|
110
118
|
}
|
|
@@ -135,7 +143,8 @@ export class AdoProfileResolver {
|
|
|
135
143
|
*
|
|
136
144
|
* Priority:
|
|
137
145
|
* 1. Increment's metadata.json -> external_sync.ado.profile
|
|
138
|
-
* 2. Config.json -> sync.
|
|
146
|
+
* 2. Config.json -> sync.defaultProfile (v0.31.0+)
|
|
147
|
+
* 3. Config.json -> sync.activeProfile (legacy fallback)
|
|
139
148
|
*
|
|
140
149
|
* @param incrementId - Increment ID (e.g., "0093-my-feature")
|
|
141
150
|
* @returns Profile resolution result
|
|
@@ -154,13 +163,14 @@ export class AdoProfileResolver {
|
|
|
154
163
|
// Try to get increment-specific profile first
|
|
155
164
|
const incrementProfile = await this.getIncrementProfile(incrementId);
|
|
156
165
|
|
|
157
|
-
// Determine which profile to use
|
|
158
|
-
const
|
|
166
|
+
// Determine which profile to use (defaultProfile preferred over activeProfile)
|
|
167
|
+
const globalDefaultProfile = config.sync?.defaultProfile ?? config.sync?.activeProfile;
|
|
168
|
+
const profileName = incrementProfile || globalDefaultProfile;
|
|
159
169
|
|
|
160
170
|
if (!profileName) {
|
|
161
171
|
return {
|
|
162
172
|
success: false,
|
|
163
|
-
error: 'No ADO profile configured. Set sync.
|
|
173
|
+
error: 'No ADO profile configured. Set sync.defaultProfile in config.json or external_sync.ado.profile in increment metadata.',
|
|
164
174
|
incrementId,
|
|
165
175
|
};
|
|
166
176
|
}
|
|
@@ -461,8 +461,8 @@ export async function createProjectFolders(
|
|
|
461
461
|
case 'project-per-team':
|
|
462
462
|
// Create folder for each project
|
|
463
463
|
// CRITICAL FIX (2025-12-01): Use normalizeToProjectId() for consistent folder names
|
|
464
|
-
// Bug: Using raw project name created "
|
|
465
|
-
// created "
|
|
464
|
+
// Bug: Using raw project name created "My Project" folder while external-import.ts
|
|
465
|
+
// created "my-project", causing duplicate folders for the same ADO project
|
|
466
466
|
for (const project of projects) {
|
|
467
467
|
const normalizedName = normalizeToProjectId(project);
|
|
468
468
|
const projectPath = path.join(specsPath, normalizedName);
|