specweave 0.23.14 → 0.23.18
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-plugin/marketplace.json +11 -0
- package/CLAUDE.md +77 -7
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +57 -0
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-content.js +3 -0
- package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
- package/dist/src/core/progress/progress-tracker.d.ts +4 -1
- package/dist/src/core/progress/progress-tracker.d.ts.map +1 -1
- package/dist/src/core/progress/progress-tracker.js +33 -4
- package/dist/src/core/progress/progress-tracker.js.map +1 -1
- package/dist/src/core/spec-content-sync.d.ts +1 -1
- package/dist/src/core/spec-content-sync.d.ts.map +1 -1
- package/dist/src/core/spec-detector.d.ts +5 -0
- package/dist/src/core/spec-detector.d.ts.map +1 -1
- package/dist/src/core/spec-detector.js +91 -33
- package/dist/src/core/spec-detector.js.map +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.js +39 -7
- package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/hooks/lib/migrate-increment-work.sh +1 -1
- package/plugins/specweave/hooks/lib/migrate-increment-work.sh.bak +245 -0
- package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
- package/plugins/specweave/hooks/lib/sync-spec-content.sh.bak +149 -0
- package/plugins/specweave/hooks/lib/update-status-line.sh +34 -4
- package/plugins/specweave/hooks/lib/validate-spec-status.sh +1 -1
- package/plugins/specweave/hooks/lib/validate-spec-status.sh.bak +163 -0
- package/plugins/specweave/hooks/post-first-increment.sh +1 -1
- package/plugins/specweave/hooks/post-first-increment.sh.bak +61 -0
- package/plugins/specweave/hooks/post-spec-update.sh +1 -1
- package/plugins/specweave/hooks/post-spec-update.sh.bak +158 -0
- package/plugins/specweave/hooks/post-user-story-complete.sh +1 -1
- package/plugins/specweave/hooks/post-user-story-complete.sh.bak +179 -0
- package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -1
- package/plugins/specweave/hooks/pre-command-deduplication.sh.bak +83 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
- package/plugins/specweave/hooks/user-prompt-submit.sh.bak +386 -0
- package/plugins/specweave/skills/specweave-framework/SKILL.md +1 -1
- package/plugins/specweave-ado/agents/ado-manager/AGENT.md +23 -0
- package/plugins/specweave-ado/agents/ado-multi-project-mapper/AGENT.md +23 -0
- package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +23 -0
- package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +23 -0
- package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +23 -0
- package/plugins/specweave-diagrams/agents/diagrams-architect/AGENT.md +23 -0
- package/plugins/specweave-github/.claude-plugin/plugin.json +15 -1
- package/plugins/specweave-github/agents/github-manager/AGENT.md +23 -0
- package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +25 -0
- package/plugins/specweave-github/agents/user-story-updater/AGENT.md +25 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +16 -0
- package/plugins/specweave-github/hooks/post-task-completion.sh +53 -0
- package/plugins/specweave-github/lib/github-spec-content-sync.js +49 -0
- package/plugins/specweave-github/lib/github-spec-content-sync.ts +67 -0
- package/plugins/specweave-infrastructure/agents/devops/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/sre/AGENT.md +26 -0
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +26 -0
- package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +26 -0
- package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +26 -0
- package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +26 -0
- package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +26 -0
- package/plugins/specweave-ml/.claude-plugin/plugin.json +2 -2
- package/plugins/specweave-ml/agents/data-scientist/AGENT.md +26 -0
- package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +26 -0
- package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +26 -0
- package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +26 -0
- package/plugins/specweave-payments/agents/payment-integration/AGENT.md +26 -0
- package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +19 -0
- package/plugins/specweave-plugin-dev/skills/plugin-expert/SKILL.md +1231 -0
- package/plugins/specweave-release/agents/release-manager/AGENT.md +27 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +24 -0
- package/plugins/specweave/skills/plugin-expert/SKILL.md +0 -340
- package/plugins/specweave-alternatives/.claude-plugin/plugin.json +0 -21
- package/plugins/specweave-alternatives/skills/bmad-method-expert/SKILL.md +0 -626
- package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
- package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/check-setup.js +0 -208
- package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
- package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
- package/plugins/specweave-alternatives/skills/spec-kit-expert/SKILL.md +0 -1010
- package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +0 -20
- package/plugins/specweave-cost-optimizer/skills/cost-optimizer/SKILL.md +0 -190
- package/plugins/specweave-docs/.claude-plugin/plugin.json +0 -19
- package/plugins/specweave-docs/skills/docusaurus/SKILL.md +0 -613
- package/plugins/specweave-docs/skills/spec-driven-brainstorming/README.md +0 -264
- package/plugins/specweave-docs/skills/spec-driven-brainstorming/SKILL.md +0 -439
- package/plugins/specweave-docs/skills/spec-driven-debugging/README.md +0 -479
- package/plugins/specweave-docs/skills/spec-driven-debugging/SKILL.md +0 -652
- package/plugins/specweave-figma/.claude-plugin/.mcp.json +0 -12
- package/plugins/specweave-figma/.claude-plugin/plugin.json +0 -20
- package/plugins/specweave-figma/ARCHITECTURE.md +0 -453
- package/plugins/specweave-figma/README.md +0 -728
- package/plugins/specweave-figma/skills/figma-to-code/SKILL.md +0 -632
- package/plugins/specweave-figma/skills/figma-to-code/test-1-token-generation.yaml +0 -29
- package/plugins/specweave-figma/skills/figma-to-code/test-2-component-generation.yaml +0 -27
- package/plugins/specweave-figma/skills/figma-to-code/test-3-typescript-generation.yaml +0 -28
- package/plugins/specweave-frontend/.claude-plugin/plugin.json +0 -21
- package/plugins/specweave-frontend/skills/design-system-architect/SKILL.md +0 -107
- package/plugins/specweave-frontend/skills/frontend/SKILL.md +0 -177
- package/plugins/specweave-frontend/skills/nextjs/SKILL.md +0 -176
- package/plugins/specweave-testing/.claude-plugin/plugin.json +0 -20
- package/plugins/specweave-testing/skills/e2e-playwright/README.md +0 -506
- package/plugins/specweave-testing/skills/e2e-playwright/SKILL.md +0 -457
- package/plugins/specweave-testing/skills/e2e-playwright/execute.js +0 -373
- package/plugins/specweave-testing/skills/e2e-playwright/lib/utils.js +0 -514
- package/plugins/specweave-testing/skills/e2e-playwright/package.json +0 -33
- package/plugins/specweave-tooling/.claude-plugin/plugin.json +0 -19
- package/plugins/specweave-tooling/skills/skill-creator/LICENSE.txt +0 -202
- package/plugins/specweave-tooling/skills/skill-creator/SKILL.md +0 -209
- package/plugins/specweave-tooling/skills/skill-creator/scripts/init_skill.py +0 -303
- package/plugins/specweave-tooling/skills/skill-creator/scripts/package_skill.py +0 -110
- package/plugins/specweave-tooling/skills/skill-creator/scripts/quick_validate.py +0 -65
- package/plugins/specweave-tooling/skills/skill-router/SKILL.md +0 -479
- package/plugins/specweave-ui/.claude-plugin/plugin.json +0 -26
- package/plugins/specweave-ui/.mcp.json +0 -10
- package/plugins/specweave-ui/README.md +0 -492
- package/plugins/specweave-ui/skills/browser-automation/SKILL.md +0 -676
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-detector.js","sourceRoot":"","sources":["../../../src/core/spec-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAe,MAAM,+BAA+B,CAAC;AA+BlF
|
|
1
|
+
{"version":3,"file":"spec-detector.js","sourceRoot":"","sources":["../../../src/core/spec-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,7 +86,7 @@ export declare class AdoDependencyLoader {
|
|
|
86
86
|
* Tier 3: Bulk pre-load all dependencies (optional command)
|
|
87
87
|
*
|
|
88
88
|
* Performance: 1-2 minutes for 50 projects (150-200 API calls, batched)
|
|
89
|
-
* Progress: Real-time progress tracking, cancelation
|
|
89
|
+
* Progress: Real-time progress tracking with ProgressTracker, cancelation with CancelationHandler
|
|
90
90
|
*
|
|
91
91
|
* @param projectNames Array of project names to preload
|
|
92
92
|
* @returns void (results cached)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-dependency-loader.d.ts","sourceRoot":"","sources":["../../../../src/integrations/ado/ado-dependency-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ado-dependency-loader.d.ts","sourceRoot":"","sources":["../../../../src/integrations/ado/ado-dependency-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAI9D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE;QACnB,SAAS,EAAE,SAAS,CAAC;QACrB,YAAY,EAAE,YAAY,CAAC;QAC3B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAOD;;;;;;;;OAQG;IACG,mBAAmB,CAAC,WAAW,GAAE,MAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA+DlF;;;;;;;;OAQG;IACG,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAwFnF;;;;;;;;OAQG;IACG,sBAAsB,CAC1B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QACtD,MAAM,CAAC,EAAE,WAAW,CAAC;KACjB,GACL,OAAO,CAAC,IAAI,CAAC;CAuEjB"}
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { RateLimitChecker } from '../../core/cache/rate-limit-checker.js';
|
|
18
18
|
import { consoleLogger } from '../../utils/logger.js';
|
|
19
|
+
import { ProgressTracker } from '../../core/progress/progress-tracker.js';
|
|
20
|
+
import { CancelationHandler } from '../../core/progress/cancelation-handler.js';
|
|
19
21
|
/**
|
|
20
22
|
* AdoDependencyLoader - Three-tier dependency loading with smart caching
|
|
21
23
|
*/
|
|
@@ -168,7 +170,7 @@ export class AdoDependencyLoader {
|
|
|
168
170
|
* Tier 3: Bulk pre-load all dependencies (optional command)
|
|
169
171
|
*
|
|
170
172
|
* Performance: 1-2 minutes for 50 projects (150-200 API calls, batched)
|
|
171
|
-
* Progress: Real-time progress tracking, cancelation
|
|
173
|
+
* Progress: Real-time progress tracking with ProgressTracker, cancelation with CancelationHandler
|
|
172
174
|
*
|
|
173
175
|
* @param projectNames Array of project names to preload
|
|
174
176
|
* @returns void (results cached)
|
|
@@ -177,22 +179,50 @@ export class AdoDependencyLoader {
|
|
|
177
179
|
const { onProgress, signal } = options;
|
|
178
180
|
const total = projectNames.length;
|
|
179
181
|
this.logger.log(`Preloading dependencies for ${total} projects...`);
|
|
182
|
+
// Initialize ProgressTracker
|
|
183
|
+
const progressTracker = new ProgressTracker({
|
|
184
|
+
total,
|
|
185
|
+
label: 'Preloading ADO dependencies',
|
|
186
|
+
updateFrequency: 5, // Update every 5 projects
|
|
187
|
+
showEta: true,
|
|
188
|
+
logger: this.logger
|
|
189
|
+
});
|
|
190
|
+
// Initialize CancelationHandler
|
|
191
|
+
let succeeded = 0;
|
|
192
|
+
let failed = 0;
|
|
193
|
+
let loadedProjects = [];
|
|
194
|
+
const cancelHandler = new CancelationHandler({
|
|
195
|
+
onSaveState: async () => {
|
|
196
|
+
this.logger.log(`\nPartial preload saved: ${loadedProjects.length}/${total} projects cached`);
|
|
197
|
+
this.logger.log(`Success: ${succeeded}, Failed: ${failed}`);
|
|
198
|
+
},
|
|
199
|
+
logger: this.logger
|
|
200
|
+
});
|
|
201
|
+
// Register SIGINT handler
|
|
202
|
+
cancelHandler.register();
|
|
180
203
|
for (let i = 0; i < total; i++) {
|
|
181
|
-
// Check for cancelation
|
|
182
|
-
if (signal?.aborted) {
|
|
183
|
-
this.logger.warn('Preload canceled by user');
|
|
204
|
+
// Check for cancelation (both new handler and legacy signal)
|
|
205
|
+
if (cancelHandler.shouldCancel() || signal?.aborted) {
|
|
206
|
+
this.logger.warn('\n⚠️ Preload canceled by user');
|
|
207
|
+
this.logger.log(`\n💡 Resume with: /specweave-ado:preload-dependencies --resume`);
|
|
208
|
+
cancelHandler.unregister();
|
|
184
209
|
throw new Error('Preload canceled');
|
|
185
210
|
}
|
|
186
211
|
const projectName = projectNames[i];
|
|
187
|
-
this.logger.log(`[${i + 1}/${total}] Preloading ${projectName}...`);
|
|
188
212
|
try {
|
|
189
213
|
await this.loadProjectDependencies(projectName);
|
|
190
|
-
|
|
214
|
+
loadedProjects.push(projectName);
|
|
215
|
+
succeeded++;
|
|
216
|
+
// Update progress
|
|
217
|
+
progressTracker.update(projectName, 'success');
|
|
218
|
+
// Legacy callback support
|
|
191
219
|
if (onProgress) {
|
|
192
220
|
onProgress(i + 1, total);
|
|
193
221
|
}
|
|
194
222
|
}
|
|
195
223
|
catch (error) {
|
|
224
|
+
failed++;
|
|
225
|
+
progressTracker.update(projectName, 'error');
|
|
196
226
|
this.logger.error(`Failed to preload ${projectName}: ${error.message}`);
|
|
197
227
|
// Continue with next project (don't fail entire batch)
|
|
198
228
|
}
|
|
@@ -201,7 +231,9 @@ export class AdoDependencyLoader {
|
|
|
201
231
|
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
202
232
|
}
|
|
203
233
|
}
|
|
204
|
-
|
|
234
|
+
// Unregister handler and show final summary
|
|
235
|
+
cancelHandler.unregister();
|
|
236
|
+
progressTracker.finish(succeeded, failed, 0);
|
|
205
237
|
}
|
|
206
238
|
}
|
|
207
239
|
//# sourceMappingURL=ado-dependency-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-dependency-loader.js","sourceRoot":"","sources":["../../../../src/integrations/ado/ado-dependency-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,OAAO,EAAU,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ado-dependency-loader.js","sourceRoot":"","sources":["../../../../src/integrations/ado/ado-dependency-loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.18",
|
|
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",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# 2. Adjust WIP limit (temporarily allow 3 active)
|
|
9
9
|
# 3. Force-close (mark as complete without transferring work)
|
|
10
10
|
|
|
11
|
-
set -euo pipefail
|
|
11
|
+
set +e # EMERGENCY FIX: Changed from set -euo pipefail to prevent Claude Code crashes
|
|
12
12
|
|
|
13
13
|
# ============================================================================
|
|
14
14
|
# CONFIGURATION
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# SpecWeave Increment Work Migration Utility
|
|
4
|
+
# Purpose: Smart migration options when WIP limit is reached
|
|
5
|
+
#
|
|
6
|
+
# Options:
|
|
7
|
+
# 1. Transfer work (move incomplete tasks to new increment)
|
|
8
|
+
# 2. Adjust WIP limit (temporarily allow 3 active)
|
|
9
|
+
# 3. Force-close (mark as complete without transferring work)
|
|
10
|
+
|
|
11
|
+
set -euo pipefail
|
|
12
|
+
|
|
13
|
+
# ============================================================================
|
|
14
|
+
# CONFIGURATION
|
|
15
|
+
# ============================================================================
|
|
16
|
+
|
|
17
|
+
SPECWEAVE_DIR="${SPECWEAVE_DIR:-.specweave}"
|
|
18
|
+
CONFIG_FILE="$SPECWEAVE_DIR/config.json"
|
|
19
|
+
|
|
20
|
+
# ============================================================================
|
|
21
|
+
# HELPER FUNCTIONS
|
|
22
|
+
# ============================================================================
|
|
23
|
+
|
|
24
|
+
# Get incomplete tasks from increment
|
|
25
|
+
get_incomplete_tasks() {
|
|
26
|
+
local increment_id="$1"
|
|
27
|
+
local tasks_file="$SPECWEAVE_DIR/increments/$increment_id/tasks.md"
|
|
28
|
+
|
|
29
|
+
if [[ ! -f "$tasks_file" ]]; then
|
|
30
|
+
echo ""
|
|
31
|
+
return
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Extract unchecked tasks (lines starting with "- [ ]")
|
|
35
|
+
grep -E "^\s*-\s*\[ \]" "$tasks_file" 2>/dev/null || echo ""
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# Count incomplete tasks
|
|
39
|
+
count_incomplete_tasks() {
|
|
40
|
+
local increment_id="$1"
|
|
41
|
+
local tasks=$(get_incomplete_tasks "$increment_id")
|
|
42
|
+
|
|
43
|
+
if [[ -z "$tasks" ]]; then
|
|
44
|
+
echo "0"
|
|
45
|
+
else
|
|
46
|
+
echo "$tasks" | wc -l | xargs
|
|
47
|
+
fi
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# Transfer work from old increment to new increment
|
|
51
|
+
transfer_work() {
|
|
52
|
+
local source_increment="$1"
|
|
53
|
+
local target_increment="$2"
|
|
54
|
+
|
|
55
|
+
echo "🔄 Transferring incomplete work from $source_increment to $target_increment..."
|
|
56
|
+
|
|
57
|
+
# Get incomplete tasks
|
|
58
|
+
local incomplete_tasks=$(get_incomplete_tasks "$source_increment")
|
|
59
|
+
|
|
60
|
+
if [[ -z "$incomplete_tasks" ]]; then
|
|
61
|
+
echo "✅ No incomplete tasks to transfer"
|
|
62
|
+
return 0
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
local task_count=$(echo "$incomplete_tasks" | wc -l | xargs)
|
|
66
|
+
echo " 📋 Found $task_count incomplete tasks"
|
|
67
|
+
|
|
68
|
+
# Append to target increment's tasks.md
|
|
69
|
+
local target_tasks="$SPECWEAVE_DIR/increments/$target_increment/tasks.md"
|
|
70
|
+
|
|
71
|
+
if [[ ! -f "$target_tasks" ]]; then
|
|
72
|
+
echo "❌ Target increment tasks.md not found: $target_tasks"
|
|
73
|
+
return 1
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
# Add separator and transferred tasks
|
|
77
|
+
cat >> "$target_tasks" <<EOF
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 🔄 Transferred from $source_increment
|
|
82
|
+
|
|
83
|
+
$incomplete_tasks
|
|
84
|
+
|
|
85
|
+
EOF
|
|
86
|
+
|
|
87
|
+
echo " ✅ Transferred $task_count tasks to $target_tasks"
|
|
88
|
+
|
|
89
|
+
# Mark source increment as completed-with-work-transfer
|
|
90
|
+
local source_metadata="$SPECWEAVE_DIR/increments/$source_increment/metadata.json"
|
|
91
|
+
|
|
92
|
+
if [[ -f "$source_metadata" ]]; then
|
|
93
|
+
node -e "
|
|
94
|
+
const fs = require('fs');
|
|
95
|
+
const path = '$source_metadata';
|
|
96
|
+
const data = JSON.parse(fs.readFileSync(path, 'utf-8'));
|
|
97
|
+
data.status = 'completed';
|
|
98
|
+
data.completionNote = 'Work transferred to $target_increment';
|
|
99
|
+
data.completedAt = new Date().toISOString();
|
|
100
|
+
data.workTransferredTo = '$target_increment';
|
|
101
|
+
fs.writeFileSync(path, JSON.stringify(data, null, 2));
|
|
102
|
+
"
|
|
103
|
+
echo " ✅ Updated $source_increment metadata (status: completed, work transferred)"
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
# Update target increment metadata
|
|
107
|
+
local target_metadata="$SPECWEAVE_DIR/increments/$target_increment/metadata.json"
|
|
108
|
+
|
|
109
|
+
if [[ -f "$target_metadata" ]]; then
|
|
110
|
+
node -e "
|
|
111
|
+
const fs = require('fs');
|
|
112
|
+
const path = '$target_metadata';
|
|
113
|
+
const data = JSON.parse(fs.readFileSync(path, 'utf-8'));
|
|
114
|
+
data.workTransferredFrom = data.workTransferredFrom || [];
|
|
115
|
+
data.workTransferredFrom.push('$source_increment');
|
|
116
|
+
fs.writeFileSync(path, JSON.stringify(data, null, 2));
|
|
117
|
+
"
|
|
118
|
+
echo " ✅ Updated $target_increment metadata (work received from $source_increment)"
|
|
119
|
+
fi
|
|
120
|
+
|
|
121
|
+
echo "✅ Work transfer complete!"
|
|
122
|
+
return 0
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
# Adjust WIP limit temporarily
|
|
126
|
+
adjust_wip_limit() {
|
|
127
|
+
local new_limit="$1"
|
|
128
|
+
|
|
129
|
+
echo "⚠️ Temporarily adjusting WIP limit to $new_limit..."
|
|
130
|
+
|
|
131
|
+
if [[ ! -f "$CONFIG_FILE" ]]; then
|
|
132
|
+
echo "❌ Config file not found: $CONFIG_FILE"
|
|
133
|
+
return 1
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
# Update config.json (create backup first)
|
|
137
|
+
cp "$CONFIG_FILE" "$CONFIG_FILE.bak"
|
|
138
|
+
|
|
139
|
+
node -e "
|
|
140
|
+
const fs = require('fs');
|
|
141
|
+
const path = '$CONFIG_FILE';
|
|
142
|
+
const data = JSON.parse(fs.readFileSync(path, 'utf-8'));
|
|
143
|
+
|
|
144
|
+
// Ensure limits object exists
|
|
145
|
+
if (!data.limits) {
|
|
146
|
+
data.limits = {};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Store original limit
|
|
150
|
+
if (!data.limits.originalHardCap) {
|
|
151
|
+
data.limits.originalHardCap = data.limits.hardCap || 2;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Set new limit
|
|
155
|
+
data.limits.hardCap = parseInt('$new_limit', 10);
|
|
156
|
+
data.limits.wipAdjustedAt = new Date().toISOString();
|
|
157
|
+
|
|
158
|
+
fs.writeFileSync(path, JSON.stringify(data, null, 2));
|
|
159
|
+
"
|
|
160
|
+
|
|
161
|
+
echo " ✅ WIP limit adjusted to $new_limit"
|
|
162
|
+
echo " ⚠️ Remember to revert after completing one increment!"
|
|
163
|
+
echo " 💡 Run: specweave revert-wip-limit"
|
|
164
|
+
|
|
165
|
+
return 0
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
# Force-close increment
|
|
169
|
+
force_close() {
|
|
170
|
+
local increment_id="$1"
|
|
171
|
+
|
|
172
|
+
echo "⚠️ Force-closing $increment_id..."
|
|
173
|
+
|
|
174
|
+
local metadata_file="$SPECWEAVE_DIR/increments/$increment_id/metadata.json"
|
|
175
|
+
|
|
176
|
+
if [[ ! -f "$metadata_file" ]]; then
|
|
177
|
+
echo "❌ Metadata file not found: $metadata_file"
|
|
178
|
+
return 1
|
|
179
|
+
fi
|
|
180
|
+
|
|
181
|
+
node -e "
|
|
182
|
+
const fs = require('fs');
|
|
183
|
+
const path = '$metadata_file';
|
|
184
|
+
const data = JSON.parse(fs.readFileSync(path, 'utf-8'));
|
|
185
|
+
data.status = 'completed';
|
|
186
|
+
data.completionNote = 'Force-closed to start new increment (WIP limit reached)';
|
|
187
|
+
data.completedAt = new Date().toISOString();
|
|
188
|
+
data.forceCloseReason = 'wip-limit-reached';
|
|
189
|
+
fs.writeFileSync(path, JSON.stringify(data, null, 2));
|
|
190
|
+
"
|
|
191
|
+
|
|
192
|
+
echo " ✅ $increment_id marked as completed (force-closed)"
|
|
193
|
+
echo " ⚠️ Incomplete work was not transferred!"
|
|
194
|
+
|
|
195
|
+
return 0
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
# ============================================================================
|
|
199
|
+
# MAIN CLI
|
|
200
|
+
# ============================================================================
|
|
201
|
+
|
|
202
|
+
case "${1:-}" in
|
|
203
|
+
transfer)
|
|
204
|
+
if [[ $# -ne 3 ]]; then
|
|
205
|
+
echo "Usage: $0 transfer <source_increment> <target_increment>"
|
|
206
|
+
exit 1
|
|
207
|
+
fi
|
|
208
|
+
transfer_work "$2" "$3"
|
|
209
|
+
;;
|
|
210
|
+
|
|
211
|
+
adjust-wip)
|
|
212
|
+
if [[ $# -ne 2 ]]; then
|
|
213
|
+
echo "Usage: $0 adjust-wip <new_limit>"
|
|
214
|
+
exit 1
|
|
215
|
+
fi
|
|
216
|
+
adjust_wip_limit "$2"
|
|
217
|
+
;;
|
|
218
|
+
|
|
219
|
+
force-close)
|
|
220
|
+
if [[ $# -ne 2 ]]; then
|
|
221
|
+
echo "Usage: $0 force-close <increment_id>"
|
|
222
|
+
exit 1
|
|
223
|
+
fi
|
|
224
|
+
force_close "$2"
|
|
225
|
+
;;
|
|
226
|
+
|
|
227
|
+
count-incomplete)
|
|
228
|
+
if [[ $# -ne 2 ]]; then
|
|
229
|
+
echo "Usage: $0 count-incomplete <increment_id>"
|
|
230
|
+
exit 1
|
|
231
|
+
fi
|
|
232
|
+
count_incomplete_tasks "$2"
|
|
233
|
+
;;
|
|
234
|
+
|
|
235
|
+
*)
|
|
236
|
+
echo "SpecWeave Increment Work Migration Utility"
|
|
237
|
+
echo ""
|
|
238
|
+
echo "Usage:"
|
|
239
|
+
echo " $0 transfer <source> <target> # Transfer work from source to target"
|
|
240
|
+
echo " $0 adjust-wip <limit> # Adjust WIP limit temporarily"
|
|
241
|
+
echo " $0 force-close <increment> # Force-close increment"
|
|
242
|
+
echo " $0 count-incomplete <increment> # Count incomplete tasks"
|
|
243
|
+
exit 1
|
|
244
|
+
;;
|
|
245
|
+
esac
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# sync-spec-content.sh <spec-path>
|
|
16
16
|
#
|
|
17
17
|
|
|
18
|
-
set -euo pipefail
|
|
18
|
+
set +e # EMERGENCY FIX: Changed from set -euo pipefail to prevent Claude Code crashes
|
|
19
19
|
|
|
20
20
|
# Get script directory
|
|
21
21
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
@@ -131,7 +131,7 @@ echo ""
|
|
|
131
131
|
set +e
|
|
132
132
|
node "$SYNC_CLI" --spec "$SPEC_PATH" --provider "$PROVIDER"
|
|
133
133
|
SYNC_EXIT_CODE=$?
|
|
134
|
-
set -e
|
|
134
|
+
set +e # EMERGENCY FIX: Changed from set -e to prevent Claude Code crashes
|
|
135
135
|
|
|
136
136
|
if [ $SYNC_EXIT_CODE -eq 0 ]; then
|
|
137
137
|
echo ""
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Sync Spec Content to External Tools
|
|
4
|
+
#
|
|
5
|
+
# This script automatically syncs spec CONTENT (title, description, user stories)
|
|
6
|
+
# to external tools (GitHub Issues, JIRA Epics, Azure DevOps Features).
|
|
7
|
+
#
|
|
8
|
+
# CRITICAL: This does NOT sync STATUS - that's managed by external tools.
|
|
9
|
+
#
|
|
10
|
+
# Sync Direction:
|
|
11
|
+
# - Title/Description/User Stories: SpecWeave → External Tool (we update)
|
|
12
|
+
# - Status/State: External Tool → SpecWeave (we read)
|
|
13
|
+
#
|
|
14
|
+
# Usage:
|
|
15
|
+
# sync-spec-content.sh <spec-path>
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
# Get script directory
|
|
21
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
22
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../.." && pwd)"
|
|
23
|
+
|
|
24
|
+
# Input validation
|
|
25
|
+
if [ $# -lt 1 ]; then
|
|
26
|
+
echo "Usage: $0 <spec-path>" >&2
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
SPEC_PATH="$1"
|
|
31
|
+
|
|
32
|
+
# Validate spec file exists
|
|
33
|
+
if [ ! -f "$SPEC_PATH" ]; then
|
|
34
|
+
echo "❌ Spec file not found: $SPEC_PATH" >&2
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# Check if sync is enabled
|
|
39
|
+
CONFIG_FILE="$PROJECT_ROOT/.specweave/config.json"
|
|
40
|
+
if [ ! -f "$CONFIG_FILE" ]; then
|
|
41
|
+
echo "ℹ️ No config file found, skipping spec content sync" >&2
|
|
42
|
+
exit 0
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
# Check if sync is enabled in config
|
|
46
|
+
SYNC_ENABLED=$(node -p "
|
|
47
|
+
try {
|
|
48
|
+
const config = require('$CONFIG_FILE');
|
|
49
|
+
config.sync?.enabled ?? false;
|
|
50
|
+
} catch {
|
|
51
|
+
false;
|
|
52
|
+
}
|
|
53
|
+
" 2>/dev/null || echo "false")
|
|
54
|
+
|
|
55
|
+
if [ "$SYNC_ENABLED" != "true" ]; then
|
|
56
|
+
echo "ℹ️ Sync disabled in config, skipping spec content sync" >&2
|
|
57
|
+
exit 0
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# Check if spec content sync is enabled
|
|
61
|
+
SPEC_SYNC_ENABLED=$(node -p "
|
|
62
|
+
try {
|
|
63
|
+
const config = require('$CONFIG_FILE');
|
|
64
|
+
config.sync?.settings?.syncSpecContent ?? true;
|
|
65
|
+
} catch {
|
|
66
|
+
true;
|
|
67
|
+
}
|
|
68
|
+
" 2>/dev/null || echo "true")
|
|
69
|
+
|
|
70
|
+
if [ "$SPEC_SYNC_ENABLED" != "true" ]; then
|
|
71
|
+
echo "ℹ️ Spec content sync disabled in config" >&2
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Get active provider
|
|
76
|
+
ACTIVE_PROFILE=$(node -p "
|
|
77
|
+
try {
|
|
78
|
+
const config = require('$CONFIG_FILE');
|
|
79
|
+
config.sync?.activeProfile ?? null;
|
|
80
|
+
} catch {
|
|
81
|
+
null;
|
|
82
|
+
}
|
|
83
|
+
" 2>/dev/null || echo "null")
|
|
84
|
+
|
|
85
|
+
if [ "$ACTIVE_PROFILE" = "null" ]; then
|
|
86
|
+
echo "ℹ️ No active sync profile, skipping spec content sync" >&2
|
|
87
|
+
exit 0
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
# Get provider from active profile
|
|
91
|
+
PROVIDER=$(node -p "
|
|
92
|
+
try {
|
|
93
|
+
const config = require('$CONFIG_FILE');
|
|
94
|
+
config.sync?.profiles?.['"$ACTIVE_PROFILE"']?.provider ?? null;
|
|
95
|
+
} catch {
|
|
96
|
+
null;
|
|
97
|
+
}
|
|
98
|
+
" 2>/dev/null || echo "null")
|
|
99
|
+
|
|
100
|
+
if [ "$PROVIDER" = "null" ]; then
|
|
101
|
+
echo "ℹ️ No provider configured for profile '$ACTIVE_PROFILE'" >&2
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
# Validate provider
|
|
106
|
+
if [[ ! "$PROVIDER" =~ ^(github|jira|ado)$ ]]; then
|
|
107
|
+
echo "❌ Invalid provider: $PROVIDER (must be github, jira, or ado)" >&2
|
|
108
|
+
exit 1
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
# Check if sync CLI command exists
|
|
112
|
+
SYNC_CLI="$PROJECT_ROOT/dist/src/cli/commands/sync-spec-content.js"
|
|
113
|
+
if [ ! -f "$SYNC_CLI" ]; then
|
|
114
|
+
echo "ℹ️ Sync CLI not built, skipping spec content sync" >&2
|
|
115
|
+
echo " Run: npm run build" >&2
|
|
116
|
+
exit 0
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
# Check if Node.js is available
|
|
120
|
+
if ! command -v node &> /dev/null; then
|
|
121
|
+
echo "❌ Node.js not found, cannot sync spec content" >&2
|
|
122
|
+
exit 1
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
echo ""
|
|
126
|
+
echo "🔄 Syncing spec content to $PROVIDER..."
|
|
127
|
+
echo " Spec: $(basename "$SPEC_PATH")"
|
|
128
|
+
echo ""
|
|
129
|
+
|
|
130
|
+
# Run sync
|
|
131
|
+
set +e
|
|
132
|
+
node "$SYNC_CLI" --spec "$SPEC_PATH" --provider "$PROVIDER"
|
|
133
|
+
SYNC_EXIT_CODE=$?
|
|
134
|
+
set -e
|
|
135
|
+
|
|
136
|
+
if [ $SYNC_EXIT_CODE -eq 0 ]; then
|
|
137
|
+
echo ""
|
|
138
|
+
echo "✅ Spec content synced successfully"
|
|
139
|
+
echo ""
|
|
140
|
+
else
|
|
141
|
+
echo ""
|
|
142
|
+
echo "⚠️ Spec content sync failed (exit code: $SYNC_EXIT_CODE)" >&2
|
|
143
|
+
echo " This is non-blocking. You can sync manually later:" >&2
|
|
144
|
+
echo " node dist/src/cli/commands/sync-spec-content.js --spec \"$SPEC_PATH\" --provider $PROVIDER" >&2
|
|
145
|
+
echo ""
|
|
146
|
+
# Non-blocking: continue execution even if sync fails
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
exit 0
|
|
@@ -14,8 +14,12 @@
|
|
|
14
14
|
# 6. Write to cache
|
|
15
15
|
#
|
|
16
16
|
# Performance: 50-100ms (runs async, user doesn't wait)
|
|
17
|
+
#
|
|
18
|
+
# EMERGENCY FIX (v0.24.4): Changed from set -euo pipefail to set +e
|
|
19
|
+
# CRITICAL: Hooks MUST use set +e to prevent Claude Code crashes!
|
|
20
|
+
# See: CLAUDE.md section 9a - Hook Performance & Safety
|
|
17
21
|
|
|
18
|
-
set
|
|
22
|
+
set +e
|
|
19
23
|
|
|
20
24
|
# Find project root
|
|
21
25
|
find_project_root() {
|
|
@@ -149,8 +153,20 @@ INCREMENT_ID=$(echo "$CURRENT_INCREMENT" | grep -oE '^[0-9]{4}')
|
|
|
149
153
|
INCREMENT_NAME_ONLY=$(echo "$CURRENT_INCREMENT" | sed 's/^[0-9]\{4\}-//')
|
|
150
154
|
INCREMENT_NAME="$INCREMENT_ID-$INCREMENT_NAME_ONLY"
|
|
151
155
|
|
|
152
|
-
# Step 6: Write cache (
|
|
153
|
-
|
|
156
|
+
# Step 6: Write cache with atomic validation (v0.24.4 - prevents corruption)
|
|
157
|
+
TMP_CACHE_FILE="$PROJECT_ROOT/.specweave/state/.status-line-tmp.json"
|
|
158
|
+
|
|
159
|
+
# Validate all numeric inputs before jq (prevents jq failures)
|
|
160
|
+
[[ "$TOTAL_TASKS" =~ ^[0-9]+$ ]] || TOTAL_TASKS=0
|
|
161
|
+
[[ "$COMPLETED_TASKS" =~ ^[0-9]+$ ]] || COMPLETED_TASKS=0
|
|
162
|
+
[[ "$PERCENTAGE" =~ ^[0-9]+$ ]] || PERCENTAGE=0
|
|
163
|
+
[[ "$TOTAL_ACS" =~ ^[0-9]+$ ]] || TOTAL_ACS=0
|
|
164
|
+
[[ "$COMPLETED_ACS" =~ ^[0-9]+$ ]] || COMPLETED_ACS=0
|
|
165
|
+
[[ "$OPEN_ACS" =~ ^[0-9]+$ ]] || OPEN_ACS=0
|
|
166
|
+
[[ "$OPEN_COUNT" =~ ^[0-9]+$ ]] || OPEN_COUNT=0
|
|
167
|
+
|
|
168
|
+
# Generate cache to temp file first (atomic operation)
|
|
169
|
+
if jq -n \
|
|
154
170
|
--arg id "$CURRENT_INCREMENT" \
|
|
155
171
|
--arg name "$INCREMENT_NAME" \
|
|
156
172
|
--argjson completed "$COMPLETED_TASKS" \
|
|
@@ -171,6 +187,20 @@ jq -n \
|
|
|
171
187
|
},
|
|
172
188
|
openCount: $openCount,
|
|
173
189
|
lastUpdate: (now | strftime("%Y-%m-%dT%H:%M:%SZ"))
|
|
174
|
-
}' > "$
|
|
190
|
+
}' > "$TMP_CACHE_FILE" 2>/dev/null; then
|
|
191
|
+
|
|
192
|
+
# Validate generated JSON before replacing cache (corruption prevention)
|
|
193
|
+
if jq empty "$TMP_CACHE_FILE" 2>/dev/null; then
|
|
194
|
+
mv "$TMP_CACHE_FILE" "$CACHE_FILE"
|
|
195
|
+
else
|
|
196
|
+
# Invalid JSON generated - keep old cache
|
|
197
|
+
echo "[$(date)] ERROR: Generated invalid JSON, keeping old cache" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
198
|
+
rm -f "$TMP_CACHE_FILE"
|
|
199
|
+
fi
|
|
200
|
+
else
|
|
201
|
+
# jq generation failed - keep old cache
|
|
202
|
+
echo "[$(date)] ERROR: jq failed to generate status cache (exit $?)" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
203
|
+
rm -f "$TMP_CACHE_FILE"
|
|
204
|
+
fi
|
|
175
205
|
|
|
176
206
|
exit 0
|