specweave 0.28.57 → 0.28.59

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.
@@ -28,79 +28,125 @@ export class ADOImporter {
28
28
  return items;
29
29
  }
30
30
  /**
31
- * Paginate through work items using WIQL (200 per page)
31
+ * Paginate through work items using WIQL with date-based pagination for 100K+ items
32
32
  *
33
33
  * CRITICAL FIX (2025-12-01): Also fetch missing parent items (Epics/Capabilities)
34
34
  * Problem: If a parent Epic wasn't modified recently, it won't be in the WIQL results,
35
35
  * causing all its child User Stories to be grouped into one generic folder.
36
36
  * Solution: After fetching all items, identify missing parents and fetch them separately.
37
+ *
38
+ * ENHANCEMENT (2025-12-01): Date-based pagination to handle 100K+ items
39
+ * ADO WIQL has a 20K ID limit per query. For larger projects, we need to:
40
+ * 1. Run initial WIQL query (up to 20K IDs)
41
+ * 2. If we hit the limit, run another query with older date range
42
+ * 3. Keep paginating by date until we have all items or hit maxItems
37
43
  */
38
44
  async *paginate(config = {}) {
39
45
  const { timeRangeMonths = 3, includeClosed = false, labels = [], maxItems = Infinity, } = config;
40
- // Build WIQL query
41
- // CRITICAL FIX (2025-12-01): Use ChangedDate instead of CreatedDate
42
- // This ensures recently updated items are imported even if they were created long ago
43
- // Also filter by work item types to get the full hierarchy (Capability/Epic/Feature/User Story/Task)
44
- const since = new Date();
45
- since.setMonth(since.getMonth() - timeRangeMonths);
46
- const sinceStr = since.toISOString().split('T')[0];
47
- const wiqlParts = [
48
- `SELECT [System.Id], [System.Title], [System.WorkItemType], [System.State]`,
49
- `FROM WorkItems`,
50
- `WHERE [System.TeamProject] = '${this.project}'`,
51
- // Use ChangedDate to include active items that were created earlier
52
- `AND [System.ChangedDate] >= '${sinceStr}'`,
53
- // Filter for relevant work item types (includes Capability for enterprise setups)
54
- `AND [System.WorkItemType] IN ('Capability', 'Epic', 'Feature', 'User Story', 'Product Backlog Item', 'Bug', 'Task')`,
55
- ];
56
- // Status filter
57
- if (!includeClosed) {
58
- wiqlParts.push(`AND [System.State] <> 'Closed' AND [System.State] <> 'Removed'`);
59
- }
60
- // Tags filter (ADO uses semicolon-separated tags)
61
- if (labels.length > 0) {
62
- const tagsCondition = labels.map((tag) => `[System.Tags] CONTAINS '${tag}'`).join(' OR ');
63
- wiqlParts.push(`AND (${tagsCondition})`);
64
- }
65
- wiqlParts.push(`ORDER BY [System.ChangedDate] DESC`);
66
- const wiql = wiqlParts.join(' ');
46
+ // Collect all items to find missing parents after pagination
47
+ const allFetchedItems = [];
48
+ const fetchedIds = new Set();
49
+ const top = 200; // ADO pagination size (max 200)
50
+ let totalFetched = 0;
51
+ // WIQL has a 20K limit per query - use date-based pagination for larger datasets
52
+ const WIQL_LIMIT = 20000;
53
+ let currentEndDate = new Date(); // Start from now
54
+ const sinceDate = new Date();
55
+ sinceDate.setMonth(sinceDate.getMonth() - timeRangeMonths);
67
56
  try {
68
- // Step 1: Execute WIQL query to get all work item IDs
69
- // CRITICAL: WIQL returns max 20,000 IDs by default. For larger projects, use $top parameter.
70
- const queryResult = await this.makeADORequest(`/_apis/wit/wiql?$top=50000&api-version=7.0`, {
71
- method: 'POST',
72
- body: JSON.stringify({ query: wiql }),
73
- });
74
- const allWorkItemIds = queryResult.workItems.map((wi) => wi.id);
75
- // Collect all items to find missing parents after pagination
76
- const allFetchedItems = [];
77
- const fetchedIds = new Set();
78
- // Step 2: Paginate through work item IDs
79
- let skip = 0;
80
- const top = 200; // ADO pagination size (max 200)
81
- let totalFetched = 0;
82
- while (skip < allWorkItemIds.length && totalFetched < maxItems) {
83
- // Get IDs for this page
84
- const ids = allWorkItemIds.slice(skip, skip + top);
85
- if (ids.length === 0) {
86
- break;
57
+ // Date-based pagination loop
58
+ let dateRangeIteration = 0;
59
+ let hasMoreItems = true;
60
+ while (hasMoreItems && totalFetched < maxItems && currentEndDate > sinceDate) {
61
+ dateRangeIteration++;
62
+ // Build WIQL query for this date range
63
+ const sinceDateStr = sinceDate.toISOString().split('T')[0];
64
+ const untilDateStr = currentEndDate.toISOString().split('T')[0];
65
+ const wiqlParts = [
66
+ `SELECT [System.Id], [System.Title], [System.WorkItemType], [System.State], [System.ChangedDate]`,
67
+ `FROM WorkItems`,
68
+ `WHERE [System.TeamProject] = '${this.project}'`,
69
+ // Use ChangedDate range for pagination
70
+ `AND [System.ChangedDate] >= '${sinceDateStr}'`,
71
+ ];
72
+ // For subsequent iterations, add upper bound to avoid duplicates
73
+ if (dateRangeIteration > 1) {
74
+ wiqlParts.push(`AND [System.ChangedDate] < '${untilDateStr}'`);
75
+ }
76
+ wiqlParts.push(
77
+ // Filter for relevant work item types (includes Capability for enterprise setups)
78
+ `AND [System.WorkItemType] IN ('Capability', 'Epic', 'Feature', 'User Story', 'Product Backlog Item', 'Bug', 'Task')`);
79
+ // Status filter
80
+ if (!includeClosed) {
81
+ wiqlParts.push(`AND [System.State] <> 'Closed' AND [System.State] <> 'Removed'`);
82
+ }
83
+ // Tags filter (ADO uses semicolon-separated tags)
84
+ if (labels.length > 0) {
85
+ const tagsCondition = labels.map((tag) => `[System.Tags] CONTAINS '${tag}'`).join(' OR ');
86
+ wiqlParts.push(`AND (${tagsCondition})`);
87
+ }
88
+ wiqlParts.push(`ORDER BY [System.ChangedDate] DESC`);
89
+ const wiql = wiqlParts.join(' ');
90
+ // Execute WIQL query - use high limit to maximize items per query
91
+ const queryResult = await this.makeADORequest(`/_apis/wit/wiql?$top=20000&api-version=7.0`, {
92
+ method: 'POST',
93
+ body: JSON.stringify({ query: wiql }),
94
+ });
95
+ const workItemIds = queryResult.workItems.map((wi) => wi.id);
96
+ // Filter out already fetched IDs (avoid duplicates across date ranges)
97
+ const newIds = workItemIds.filter(id => !fetchedIds.has(id));
98
+ console.log(` 📊 WIQL iteration ${dateRangeIteration}: ${workItemIds.length} IDs found (${newIds.length} new)`);
99
+ if (newIds.length === 0) {
100
+ // No new items - we're done or need to go further back in time
101
+ if (workItemIds.length >= WIQL_LIMIT) {
102
+ // Hit the limit but all were duplicates - shouldn't happen, but handle it
103
+ hasMoreItems = false;
104
+ }
105
+ else {
106
+ hasMoreItems = false;
107
+ }
108
+ continue;
109
+ }
110
+ // Paginate through work item IDs
111
+ let skip = 0;
112
+ let oldestChangedDate = null;
113
+ while (skip < newIds.length && totalFetched < maxItems) {
114
+ const ids = newIds.slice(skip, skip + top);
115
+ if (ids.length === 0) {
116
+ break;
117
+ }
118
+ // Fetch full work item details
119
+ const workItems = await this.getWorkItemsBatch(ids);
120
+ // Track fetched IDs and find oldest date for next iteration
121
+ for (const wi of workItems) {
122
+ fetchedIds.add(wi.fields['System.Id']);
123
+ const changedDate = new Date(wi.fields['System.ChangedDate']);
124
+ if (!oldestChangedDate || changedDate < oldestChangedDate) {
125
+ oldestChangedDate = changedDate;
126
+ }
127
+ }
128
+ // Convert to ExternalItems
129
+ const items = workItems.map((wi) => this.convertToExternalItem(wi));
130
+ allFetchedItems.push(...items);
131
+ // Yield page
132
+ if (items.length > 0) {
133
+ const itemsToYield = items.slice(0, maxItems - totalFetched);
134
+ yield itemsToYield;
135
+ totalFetched += itemsToYield.length;
136
+ }
137
+ skip += top;
87
138
  }
88
- // Fetch full work item details
89
- const workItems = await this.getWorkItemsBatch(ids);
90
- // Track fetched IDs
91
- for (const wi of workItems) {
92
- fetchedIds.add(wi.fields['System.Id']);
139
+ // Check if we hit the WIQL limit and need another date range iteration
140
+ if (workItemIds.length >= WIQL_LIMIT && oldestChangedDate && totalFetched < maxItems) {
141
+ // Move date window back to continue fetching older items
142
+ currentEndDate = oldestChangedDate;
143
+ console.log(` 📅 Hit WIQL limit, continuing with items before ${currentEndDate.toISOString().split('T')[0]}...`);
93
144
  }
94
- // Convert to ExternalItems
95
- const items = workItems.map((wi) => this.convertToExternalItem(wi));
96
- allFetchedItems.push(...items);
97
- // Yield page
98
- if (items.length > 0) {
99
- yield items.slice(0, maxItems - totalFetched);
100
- totalFetched += items.length;
145
+ else {
146
+ hasMoreItems = false;
101
147
  }
102
- skip += top;
103
148
  }
149
+ console.log(` ✅ Total items fetched: ${totalFetched}`);
104
150
  // Step 3: CRITICAL - Fetch missing parent items (Epics/Capabilities not in time range)
105
151
  // This ensures proper hierarchy grouping even for old parent items
106
152
  const missingParentIds = this.findMissingParentIds(allFetchedItems, fetchedIds);
@@ -264,8 +310,9 @@ export class ADOImporter {
264
310
  url: workItem._links.html.href,
265
311
  labels: tags,
266
312
  acceptanceCriteria,
313
+ // CRITICAL FIX (2025-12-01): System.Parent is a number, not object
267
314
  parentId: workItem.fields['System.Parent']
268
- ? `ADO-${workItem.fields['System.Parent'].id}`
315
+ ? `ADO-${workItem.fields['System.Parent']}`
269
316
  : undefined,
270
317
  platform: 'ado',
271
318
  adoProjectName: this.project,
@@ -1 +1 @@
1
- {"version":3,"file":"ado-importer.js","sourceRoot":"","sources":["../../../src/importers/ado-importer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ado-importer.js","sourceRoot":"","sources":["../../../src/importers/ado-importer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "0.28.57",
3
+ "version": "0.28.59",
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",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: specweave:jobs
3
- description: Monitor background jobs (repo cloning, issue import). Shows progress, allows pause/resume.
4
- usage: /specweave:jobs [--active|--all|--id <job-id>] [--resume <job-id>]
3
+ description: Monitor background jobs (repo cloning, issue import). Shows progress, allows pause/resume/kill.
4
+ usage: /specweave:jobs [--active|--all|--id <job-id>] [--resume <job-id>] [--kill <job-id>] [--follow <job-id>] [--logs <job-id>]
5
5
  ---
6
6
 
7
7
  # Background Jobs Monitor
@@ -17,6 +17,25 @@ Monitor and manage long-running background operations:
17
17
  - **Issue import** (10K+ items from GitHub/JIRA/ADO)
18
18
  - **External sync** operations
19
19
 
20
+ **ASYNC ARCHITECTURE (2025-12-01)**:
21
+ - Jobs run as **detached processes** that survive terminal close
22
+ - Progress tracked via filesystem (`.specweave/state/jobs/`)
23
+ - Can check status anytime with `/specweave:jobs`
24
+
25
+ ---
26
+
27
+ ## Command Options
28
+
29
+ | Option | Description |
30
+ |--------|-------------|
31
+ | (none) | Show active jobs |
32
+ | `--all` | Show all jobs (including completed) |
33
+ | `--id <jobId>` | Show details for specific job |
34
+ | `--follow <jobId>` | Follow job progress in real-time |
35
+ | `--logs <jobId>` | Show worker log output |
36
+ | `--resume <jobId>` | Resume paused job |
37
+ | `--kill <jobId>` | Kill running background job |
38
+
20
39
  ---
21
40
 
22
41
  ## Check Job Status
@@ -26,6 +45,12 @@ Read the background jobs state file and display status:
26
45
  ```bash
27
46
  # Find and read the state file
28
47
  STATE_FILE=".specweave/state/background-jobs.json"
48
+
49
+ # Also check job-specific files:
50
+ # .specweave/state/jobs/<jobId>/config.json - Job configuration
51
+ # .specweave/state/jobs/<jobId>/worker.pid - Process ID (if running)
52
+ # .specweave/state/jobs/<jobId>/worker.log - Worker output log
53
+ # .specweave/state/jobs/<jobId>/result.json - Results (when complete)
29
54
  ```
30
55
 
31
56
  ### Display Format
@@ -34,25 +59,28 @@ STATE_FILE=".specweave/state/background-jobs.json"
34
59
  📋 Background Jobs
35
60
 
36
61
  🔄 Running (1):
37
- [abc12345] clone-repos
38
- Progress: 2/4 (50%) → sw-meeting-cost-be
39
- Rate: 0.5/s | ETA: ~4s
40
- Started: 2 mins ago
62
+ [abc12345] import-issues (ADO)
63
+ Progress: 2,500/10,000 (25%)
64
+ Rate: 15.2/s | ETA: ~8m 14s
65
+ PID: 45678 | Started: 2 mins ago
41
66
 
42
67
  ⏸️ Paused (1):
43
68
  [def67890] import-issues (GitHub)
44
69
  Progress: 1,234/10,000 (12%)
45
- Reason: Rate limited
70
+ Reason: Rate limited (resumes in 45s)
46
71
  Resume: /specweave:jobs --resume def67890
47
72
 
48
73
  ✅ Completed (2):
49
- [ghi11111] clone-repos - 4/4 repos - 5 mins ago
50
- [jkl22222] import-issues - 500 items - 1 hour ago
74
+ [ghi11111] import-issues - 4,500 items - 5 mins ago
75
+ [jkl22222] clone-repos - 4/4 repos - 1 hour ago
51
76
 
52
77
  💡 Commands:
53
- /specweave:jobs --id abc12345 → Details for specific job
54
- /specweave:jobs --resume def67890 Resume paused job
55
- /specweave:jobs --all Show all jobs (including old)
78
+ /specweave:jobs --id abc12345 → Details for specific job
79
+ /specweave:jobs --follow abc12345 Follow progress live
80
+ /specweave:jobs --logs abc12345 View worker logs
81
+ /specweave:jobs --resume def67890 → Resume paused job
82
+ /specweave:jobs --kill abc12345 → Kill running job
83
+ /specweave:jobs --all → Show all jobs (including old)
56
84
  ```
57
85
 
58
86
  ---
@@ -66,32 +94,92 @@ STATE_FILE=".specweave/state/background-jobs.json"
66
94
 
67
95
  📦 Job Details: abc12345
68
96
 
69
- Type: clone-repos
97
+ Type: import-issues
70
98
  Status: running
99
+ Provider: ADO
100
+ PID: 45678
101
+
71
102
  Started: 2024-01-15 10:30:00
72
103
  Updated: 2024-01-15 10:32:15
73
104
 
74
- Progress: 2/4 (50%)
75
- Current: sw-meeting-cost-be
76
- Rate: 0.5 repos/sec
77
- ETA: ~4 seconds
105
+ Progress: 2,500/10,000 (25%)
106
+ Current: OlySense\Core-Operations
107
+ Rate: 15.2 items/sec
108
+ ETA: ~8 minutes
109
+
110
+ Files:
111
+ Config: .specweave/state/jobs/abc12345/config.json
112
+ Logs: .specweave/state/jobs/abc12345/worker.log
113
+ PID: .specweave/state/jobs/abc12345/worker.pid
114
+ ```
115
+
116
+ ### Follow Job Progress Live
117
+
118
+ Watch job progress in real-time (like `tail -f`):
78
119
 
79
- Completed:
80
- sw-meeting-cost-fe
81
- ✅ sw-meeting-cost-shared
120
+ ```
121
+ /specweave:jobs --follow abc12345
82
122
 
83
- Remaining:
84
- ⏳ sw-meeting-cost-be
85
- ⏳ sw-meeting-cost
123
+ 📦 Following job abc12345 (Ctrl+C to stop)
86
124
 
87
- Config:
88
- Project: /path/to/project
89
- Repos: 4 total
125
+ [10:30:15] Progress: 2,500/10,000 (25%) - OlySense\Core-Operations
126
+ [10:30:16] Progress: 2,520/10,000 (25%) - OlySense\Core-Operations
127
+ [10:30:17] Progress: 2,545/10,000 (25%) - OlySense\AI-Platform
128
+ [10:30:18] Progress: 2,570/10,000 (26%) - OlySense\AI-Platform
129
+ ...
130
+ ```
131
+
132
+ **Implementation**: Read `.specweave/state/jobs/<jobId>/worker.log` with tail-like behavior, or poll the job state file every second.
133
+
134
+ ### View Worker Logs
135
+
136
+ Show detailed worker output:
137
+
138
+ ```
139
+ /specweave:jobs --logs abc12345
140
+
141
+ 📋 Worker Logs for abc12345 (last 50 lines):
142
+
143
+ [2024-01-15T10:30:00.123Z] Worker started for job abc12345
144
+ [2024-01-15T10:30:00.456Z] Project path: /Users/dev/my-project
145
+ [2024-01-15T10:30:00.789Z] PID: 45678
146
+ [2024-01-15T10:30:01.234Z] Dependencies loaded, starting import...
147
+ [2024-01-15T10:30:02.567Z] Progress: 100/10000 - ado OlySense\Core-Operations
148
+ [2024-01-15T10:30:03.890Z] Progress: 200/10000 - ado OlySense\Core-Operations
149
+ ...
150
+ ```
151
+
152
+ **Implementation**: Read `.specweave/state/jobs/<jobId>/worker.log`
153
+
154
+ ### Kill Running Job
155
+
156
+ Stop a background job:
157
+
158
+ ```
159
+ /specweave:jobs --kill abc12345
160
+
161
+ ⚠️ Killing job abc12345...
162
+ Type: import-issues
163
+ PID: 45678
164
+ Progress: 2,500/10,000 (25%)
165
+
166
+ ✅ Job killed. Status changed to 'paused'.
167
+ Resume later: /specweave:jobs --resume abc12345
168
+ ```
169
+
170
+ **Implementation**:
171
+ ```typescript
172
+ import { killJob } from '../../../src/core/background/job-launcher.js';
173
+
174
+ const success = killJob(projectPath, jobId);
175
+ if (success) {
176
+ console.log('Job killed successfully');
177
+ }
90
178
  ```
91
179
 
92
180
  ### Resume Paused Job
93
181
 
94
- When a job is paused (rate limited, user requested), resume it:
182
+ When a job is paused (rate limited, killed, or user requested), resume it:
95
183
 
96
184
  ```
97
185
  /specweave:jobs --resume def67890
@@ -101,8 +189,24 @@ When a job is paused (rate limited, user requested), resume it:
101
189
  Provider: GitHub
102
190
  Resuming from: item 1,234 of 10,000
103
191
 
104
- Import in progress...
105
- [1,234/10,000] 12% → PROJ-1234
192
+ Spawning background worker...
193
+ New PID: 45679
194
+
195
+ ✅ Job resumed in background.
196
+ Check progress: /specweave:jobs --follow def67890
197
+ ```
198
+
199
+ **Implementation**:
200
+ ```typescript
201
+ import { launchImportJob } from '../../../src/core/background/job-launcher.js';
202
+
203
+ // Re-launch the worker with existing config
204
+ const result = await launchImportJob({
205
+ type: 'import-issues',
206
+ projectPath,
207
+ coordinatorConfig: existingConfig,
208
+ estimatedTotal: job.progress.total
209
+ });
106
210
  ```
107
211
 
108
212
  ---