specweave 1.0.29 → 1.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/CLAUDE.md +140 -1196
  2. package/bin/specweave.js +23 -0
  3. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +3 -0
  4. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  5. package/dist/plugins/specweave-github/lib/github-client-v2.js +39 -0
  6. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  7. package/dist/src/cli/commands/set-sync-target.d.ts +41 -0
  8. package/dist/src/cli/commands/set-sync-target.d.ts.map +1 -0
  9. package/dist/src/cli/commands/set-sync-target.js +126 -0
  10. package/dist/src/cli/commands/set-sync-target.js.map +1 -0
  11. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
  12. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +5 -8
  13. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  14. package/dist/src/core/hooks/HookScanner.d.ts +32 -0
  15. package/dist/src/core/hooks/HookScanner.d.ts.map +1 -1
  16. package/dist/src/core/hooks/HookScanner.js +125 -1
  17. package/dist/src/core/hooks/HookScanner.js.map +1 -1
  18. package/dist/src/core/hooks/types.d.ts +10 -1
  19. package/dist/src/core/hooks/types.d.ts.map +1 -1
  20. package/dist/src/core/increment/metadata-manager.d.ts +67 -1
  21. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  22. package/dist/src/core/increment/metadata-manager.js +93 -0
  23. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  24. package/dist/src/core/project/index.d.ts +21 -0
  25. package/dist/src/core/project/index.d.ts.map +1 -0
  26. package/dist/src/core/project/index.js +22 -0
  27. package/dist/src/core/project/index.js.map +1 -0
  28. package/dist/src/core/project/project-service.d.ts +122 -0
  29. package/dist/src/core/project/project-service.d.ts.map +1 -0
  30. package/dist/src/core/project/project-service.js +334 -0
  31. package/dist/src/core/project/project-service.js.map +1 -0
  32. package/dist/src/core/sync/external-tool-resolver.d.ts +171 -0
  33. package/dist/src/core/sync/external-tool-resolver.d.ts.map +1 -0
  34. package/dist/src/core/sync/external-tool-resolver.js +569 -0
  35. package/dist/src/core/sync/external-tool-resolver.js.map +1 -0
  36. package/dist/src/core/types/increment-metadata.d.ts +92 -0
  37. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  38. package/dist/src/hooks/processor.d.ts +7 -3
  39. package/dist/src/hooks/processor.d.ts.map +1 -1
  40. package/dist/src/hooks/processor.js +11 -5
  41. package/dist/src/hooks/processor.js.map +1 -1
  42. package/package.json +1 -1
  43. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  44. package/plugins/specweave/commands/check-hooks.md +43 -0
  45. package/plugins/specweave/hooks/hooks.json +78 -0
  46. package/plugins/specweave/hooks/lib/circuit-breaker.sh +381 -0
  47. package/plugins/specweave/hooks/lib/logging.sh +231 -0
  48. package/plugins/specweave/hooks/lib/metrics.sh +347 -0
  49. package/plugins/specweave/hooks/lib/semaphore.sh +216 -0
  50. package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +156 -22
  51. package/plugins/specweave/hooks/v2/handlers/project-bridge-handler.sh +96 -0
  52. package/plugins/specweave/hooks/v2/queue/processor.sh +13 -5
  53. package/plugins/specweave/lib/hooks/project-bridge.js +76 -0
  54. package/plugins/specweave/lib/hooks/update-tasks-md.js +0 -0
  55. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +0 -0
  56. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.d.ts +67 -1
  57. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +93 -0
  58. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  59. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +92 -0
  60. package/plugins/specweave/scripts/hook-health.sh +441 -0
  61. package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
  62. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +1 -1
  63. package/plugins/specweave-backend/.claude-plugin/plugin.json +1 -1
  64. package/plugins/specweave-confluent/.claude-plugin/plugin.json +1 -1
  65. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +1 -1
  66. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
  67. package/plugins/specweave-docs/.claude-plugin/plugin.json +1 -1
  68. package/plugins/specweave-figma/.claude-plugin/plugin.json +1 -1
  69. package/plugins/specweave-frontend/.claude-plugin/plugin.json +1 -1
  70. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
  71. package/plugins/specweave-github/lib/github-client-v2.js +39 -0
  72. package/plugins/specweave-github/lib/github-client-v2.ts +44 -0
  73. package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
  74. package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
  75. package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
  76. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
  77. package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +1 -1
  78. package/plugins/specweave-ml/.claude-plugin/plugin.json +1 -1
  79. package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -1
  80. package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
  81. package/plugins/specweave-payments/.claude-plugin/plugin.json +1 -1
  82. package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +1 -1
  83. package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
  84. package/plugins/specweave-testing/.claude-plugin/plugin.json +1 -1
  85. package/plugins/specweave-ui/.claude-plugin/plugin.json +1 -1
  86. package/plugins/specweave/hooks/docs-changed.sh +0 -87
  87. package/plugins/specweave/hooks/hooks.json.bak +0 -147
  88. package/plugins/specweave/hooks/human-input-required.sh +0 -83
  89. package/plugins/specweave/hooks/post-edit-write-consolidated.sh +0 -428
  90. package/plugins/specweave/hooks/post-first-increment.sh +0 -61
  91. package/plugins/specweave/hooks/post-increment-change.sh +0 -103
  92. package/plugins/specweave/hooks/post-increment-completion.sh +0 -513
  93. package/plugins/specweave/hooks/post-increment-planning.sh +0 -1204
  94. package/plugins/specweave/hooks/post-increment-status-change.sh +0 -243
  95. package/plugins/specweave/hooks/post-metadata-change.sh +0 -246
  96. package/plugins/specweave/hooks/post-spec-update.sh +0 -158
  97. package/plugins/specweave/hooks/post-task-completion.sh +0 -557
  98. package/plugins/specweave/hooks/post-task-edit.sh +0 -47
  99. package/plugins/specweave/hooks/post-user-story-complete.sh +0 -230
  100. package/plugins/specweave/hooks/pre-command-deduplication.sh +0 -68
  101. package/plugins/specweave/hooks/pre-edit-write-consolidated.sh +0 -225
  102. package/plugins/specweave/hooks/pre-implementation.sh +0 -75
  103. package/plugins/specweave/hooks/pre-increment-start.sh +0 -173
  104. package/plugins/specweave/hooks/pre-task-completion-edit.sh +0 -355
  105. package/plugins/specweave/hooks/pre-task-completion.sh +0 -269
  106. package/plugins/specweave/hooks/pre-tool-use.sh +0 -137
  107. package/plugins/specweave/hooks/session-start-reconcile.sh +0 -139
  108. package/plugins/specweave/hooks/shared/bulk-operation-detector.sh +0 -167
  109. package/plugins/specweave/hooks/test-pretooluse-env.sh +0 -72
  110. package/plugins/specweave/hooks/validate-increment-completion.sh +0 -113
  111. package/plugins/specweave/lib/hooks/consolidated-sync.js +0 -288
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-cost",
3
3
  "description": "Cloud cost optimization and analysis for AWS, Azure, GCP, and serverless platforms. Provides cost analysis, optimization recommendations, pricing comparisons, budget alerts, and serverless cost modeling with 2024/2025 pricing.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
7
7
  "email": "anton.abyzov@gmail.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-diagrams",
3
3
  "description": "Architecture diagram generation with Mermaid following C4 Model conventions. Creates C4 Context/Container/Component diagrams, sequence diagrams, ER diagrams, and deployment diagrams. SpecWeave-aware for HLD/LLD documentation.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sw-docs",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0",
4
4
  "description": "Documentation generation and management - Docusaurus, spec-driven docs, API documentation, living documentation",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-figma",
3
3
  "description": "Comprehensive Figma design-to-code automation. Import Figma designs via API/MCP, convert components to React/Vue/Angular, extract design tokens, generate responsive layouts, and sync design systems. Focus on accelerating frontend development from Figma designs.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
7
7
  "email": "anton.abyzov@gmail.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-frontend",
3
3
  "description": "Frontend development for React, Vue, and Angular projects. Includes Next.js 14+ App Router support, design system architecture (Atomic Design), and UI component best practices. Focus on modern frontend patterns and performance.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
7
7
  "email": "anton.abyzov@gmail.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-github",
3
3
  "description": "GitHub Issues integration for SpecWeave increments. Bidirectional sync between SpecWeave increments and GitHub Issues. Automatically creates issues from increments, tracks progress, and closes issues on completion. Uses GitHub CLI (gh) for seamless integration.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -152,6 +152,7 @@ class GitHubClientV2 {
152
152
  * - ✅ CORRECT: "[FS-XXX][US-YYY] Title" (User Story - STANDARD)
153
153
  * - ✅ CORRECT: "[FS-XXX] Title" (Feature-level, rare)
154
154
  * - ❌ WRONG: "[Increment XXXX] Title" (deprecated old format)
155
+ * - ❌ WRONG: "[0001] Title" (plain increment ID without FS- prefix)
155
156
  * - ❌ WRONG: "[BUG] Title" (type prefixes are labels, not title)
156
157
  * - ❌ WRONG: "[HOTFIX] Title" (type prefixes are labels, not title)
157
158
  * - ❌ WRONG: "[FEATURE] Title" (type prefixes are labels, not title)
@@ -174,6 +175,32 @@ WHY: Correct data flow is: Increment \u2192 Living Docs \u2192 GitHub
174
175
  FIX: Use /sw:sync-docs to generate living docs, then sync to GitHub.`
175
176
  );
176
177
  }
178
+ const plainIncrementPattern = /^\[\d{3,4}E?\]\s/;
179
+ if (plainIncrementPattern.test(title)) {
180
+ const match = title.match(/^\[(\d{3,4}E?)\]/);
181
+ const incrementId = match ? match[1] : "XXXX";
182
+ const num = parseInt(incrementId.replace("E", ""), 10);
183
+ const isExternal = incrementId.endsWith("E");
184
+ const properFsId = `FS-${String(num).padStart(3, "0")}${isExternal ? "E" : ""}`;
185
+ throw new Error(
186
+ `\u274C INVALID TITLE FORMAT: "${title}"
187
+
188
+ Plain increment IDs like [${incrementId}] are NOT allowed!
189
+
190
+ GitHub issues MUST use SpecWeave format:
191
+ \u2705 CORRECT: "[${properFsId}][US-001] Title" (User Story)
192
+ \u2705 CORRECT: "[${properFsId}] Title" (Feature-level)
193
+ \u274C WRONG: "[${incrementId}] Title" (missing FS- prefix)
194
+
195
+ WHY: FS-XXX format ensures traceability to Feature folders in living docs.
196
+ Plain increment IDs create duplicates and break the sync architecture.
197
+
198
+ FIX:
199
+ 1. Use /sw:sync-progress to sync with proper format
200
+ 2. Or use /sw-github:sync to create issues correctly
201
+ 3. Ensure increment has proper spec.md with User Stories`
202
+ );
203
+ }
177
204
  const typePrefixPattern = /^\[(BUG|HOTFIX|FEATURE|DOCS|REFACTOR|CHORE|EXPERIMENT|Bug|Hotfix|Feature|Docs|Refactor|Chore|Experiment)\]/i;
178
205
  if (typePrefixPattern.test(title)) {
179
206
  const match = title.match(typePrefixPattern);
@@ -220,9 +247,21 @@ FIX:
220
247
  }
221
248
  /**
222
249
  * Create epic issue (increment-level)
250
+ *
251
+ * CRITICAL: Includes duplicate detection to prevent creating duplicate issues
223
252
  */
224
253
  async createEpicIssue(title, body, milestone, labels = []) {
225
254
  this.validateIssueTitle(title);
255
+ const titlePatternMatch = title.match(/^\[FS-\d{3,}E?\](?:\[US-\d{3,}E?\])?/);
256
+ if (titlePatternMatch) {
257
+ const titlePattern = titlePatternMatch[0];
258
+ const existingIssue = await this.searchIssueByTitle(titlePattern, true);
259
+ if (existingIssue) {
260
+ console.log(`\u26A0\uFE0F Issue already exists: #${existingIssue.number} - "${existingIssue.title}"`);
261
+ console.log(` Returning existing issue instead of creating duplicate.`);
262
+ return existingIssue;
263
+ }
264
+ }
226
265
  const args = [
227
266
  "issue",
228
267
  "create",
@@ -214,6 +214,7 @@ export class GitHubClientV2 {
214
214
  * - ✅ CORRECT: "[FS-XXX][US-YYY] Title" (User Story - STANDARD)
215
215
  * - ✅ CORRECT: "[FS-XXX] Title" (Feature-level, rare)
216
216
  * - ❌ WRONG: "[Increment XXXX] Title" (deprecated old format)
217
+ * - ❌ WRONG: "[0001] Title" (plain increment ID without FS- prefix)
217
218
  * - ❌ WRONG: "[BUG] Title" (type prefixes are labels, not title)
218
219
  * - ❌ WRONG: "[HOTFIX] Title" (type prefixes are labels, not title)
219
220
  * - ❌ WRONG: "[FEATURE] Title" (type prefixes are labels, not title)
@@ -235,6 +236,32 @@ export class GitHubClientV2 {
235
236
  );
236
237
  }
237
238
 
239
+ // Check for plain increment ID format [0001] without FS- prefix (CRITICAL FIX v1.0.31)
240
+ // This catches issues like "[0001] Basic layout MVP" that should be "[FS-001][US-001] Basic layout MVP"
241
+ const plainIncrementPattern = /^\[\d{3,4}E?\]\s/;
242
+ if (plainIncrementPattern.test(title)) {
243
+ const match = title.match(/^\[(\d{3,4}E?)\]/);
244
+ const incrementId = match ? match[1] : 'XXXX';
245
+ // Derive proper FS-ID from the increment number
246
+ const num = parseInt(incrementId.replace('E', ''), 10);
247
+ const isExternal = incrementId.endsWith('E');
248
+ const properFsId = `FS-${String(num).padStart(3, '0')}${isExternal ? 'E' : ''}`;
249
+ throw new Error(
250
+ `❌ INVALID TITLE FORMAT: "${title}"\n\n` +
251
+ `Plain increment IDs like [${incrementId}] are NOT allowed!\n\n` +
252
+ `GitHub issues MUST use SpecWeave format:\n` +
253
+ ` ✅ CORRECT: "[${properFsId}][US-001] Title" (User Story)\n` +
254
+ ` ✅ CORRECT: "[${properFsId}] Title" (Feature-level)\n` +
255
+ ` ❌ WRONG: "[${incrementId}] Title" (missing FS- prefix)\n\n` +
256
+ `WHY: FS-XXX format ensures traceability to Feature folders in living docs.\n` +
257
+ ` Plain increment IDs create duplicates and break the sync architecture.\n\n` +
258
+ `FIX:\n` +
259
+ ` 1. Use /sw:sync-progress to sync with proper format\n` +
260
+ ` 2. Or use /sw-github:sync to create issues correctly\n` +
261
+ ` 3. Ensure increment has proper spec.md with User Stories`
262
+ );
263
+ }
264
+
238
265
  // Check for type-based prefixes (CRITICAL FIX for issue #749)
239
266
  // These prefixes belong as LABELS, not in the issue title!
240
267
  const typePrefixPattern = /^\[(BUG|HOTFIX|FEATURE|DOCS|REFACTOR|CHORE|EXPERIMENT|Bug|Hotfix|Feature|Docs|Refactor|Chore|Experiment)\]/i;
@@ -293,6 +320,8 @@ export class GitHubClientV2 {
293
320
 
294
321
  /**
295
322
  * Create epic issue (increment-level)
323
+ *
324
+ * CRITICAL: Includes duplicate detection to prevent creating duplicate issues
296
325
  */
297
326
  async createEpicIssue(
298
327
  title: string,
@@ -302,6 +331,21 @@ export class GitHubClientV2 {
302
331
  ): Promise<GitHubIssue> {
303
332
  // Validate title format before creating
304
333
  this.validateIssueTitle(title);
334
+
335
+ // DUPLICATE PREVENTION (v1.0.31): Check for existing issue with same title pattern
336
+ // Extract the [FS-XXX] or [FS-XXX][US-YYY] pattern to search for
337
+ const titlePatternMatch = title.match(/^\[FS-\d{3,}E?\](?:\[US-\d{3,}E?\])?/);
338
+ if (titlePatternMatch) {
339
+ const titlePattern = titlePatternMatch[0];
340
+ const existingIssue = await this.searchIssueByTitle(titlePattern, true);
341
+ if (existingIssue) {
342
+ // Return existing issue instead of creating duplicate
343
+ console.log(`⚠️ Issue already exists: #${existingIssue.number} - "${existingIssue.title}"`);
344
+ console.log(` Returning existing issue instead of creating duplicate.`);
345
+ return existingIssue;
346
+ }
347
+ }
348
+
305
349
  const args = [
306
350
  'issue',
307
351
  'create',
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-infra",
3
3
  "description": "Cloud infrastructure provisioning and monitoring. Includes Hetzner Cloud provisioning, Prometheus/Grafana setup, distributed tracing (Jaeger/Tempo), and SLO implementation. Focus on cost-effective, production-ready infrastructure.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-jira",
3
3
  "description": "JIRA integration for SpecWeave increments. Bidirectional sync between SpecWeave increments and JIRA epics/stories. Automatically creates JIRA issues from increments, tracks progress, and updates status.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-kafka",
3
3
  "description": "Apache Kafka event streaming integration with MCP servers, CLI tools (kcat), Terraform modules, and comprehensive observability stack",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-kafka-streams",
3
3
  "description": "Kafka Streams library integration for SpecWeave - Stream processing with Java/Kotlin, topology patterns, state stores, windowing, joins, and testing frameworks",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-k8s",
3
3
  "description": "Kubernetes deployment and management for SpecWeave projects. Generate K8s manifests, Helm charts, and GitOps workflows. Includes security policies (NetworkPolicy, RBAC) and best practices for production deployments.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sw-ml",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0",
4
4
  "description": "Complete ML/AI workflow integration for SpecWeave - from experiment tracking to production deployment. Includes 13 comprehensive skills covering the full ML lifecycle: pipeline orchestration, experiment tracking, model evaluation, explainability, deployment, feature engineering, AutoML, computer vision, NLP, time series forecasting, anomaly detection, data visualization, and model registry.",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sw-mobile",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0",
4
4
  "description": "Comprehensive React Native and Expo development support for mobile app development. Includes environment setup, debugging, performance optimization, native modules, and testing strategies.",
5
5
  "author": {
6
6
  "name": "SpecWeave Team"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-n8n",
3
3
  "description": "n8n workflow automation integration with Kafka - Event-driven workflows, Kafka triggers, producers, consumers, and workflow patterns for no-code/low-code event processing",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-payments",
3
3
  "description": "Payment processing integration for Stripe, PayPal, and billing automation. Includes checkout flows, subscription lifecycle management, PCI DSS compliance guidance, and recurring billing. Focus on production-ready payment systems.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
7
  "url": "https://spec-weave.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-plugin-dev",
3
3
  "description": "Claude Code plugin and skill development toolkit. Plugin creation, testing, publishing. Skill creation, validation, packaging. Agent development, CLI command integration, and marketplace publishing.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
7
7
  "email": "anton.abyzov@gmail.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sw-release",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0",
4
4
  "description": "Comprehensive release management for single-repo, multi-repo, and monorepo architectures. Detects existing release strategies, aligns versions across repositories, manages Release Candidates (RC), and integrates with CI/CD workflows. Supports semantic versioning, coordinated releases, and brownfield strategy detection.",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sw-testing",
3
3
  "description": "Comprehensive testing tools for modern web applications. Includes Playwright E2E testing, Vitest unit testing, test generation, and coverage analysis. Focus on test-driven development and quality assurance.",
4
- "version": "1.0.0-rc.1",
4
+ "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
7
7
  "email": "anton.abyzov@gmail.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sw-ui",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0",
4
4
  "description": "Browser automation and UI tools - Element inspection, automated testing, Playwright integration",
5
5
  "author": {
6
6
  "name": "Anton Abyzov",
@@ -1,87 +0,0 @@
1
- #!/bin/bash
2
-
3
- # SpecWeave Docs-Changed Hook
4
- # Runs after file changes are detected
5
- # Detects if documentation was changed during implementation
6
- # Triggers review workflow if needed
7
-
8
- set +e # EMERGENCY FIX: Prevents Claude Code crashes
9
-
10
- # EMERGENCY KILL SWITCH
11
- if [[ "${SPECWEAVE_DISABLE_HOOKS:-0}" == "1" ]]; then
12
- exit 0
13
- fi
14
-
15
- # Find project root by searching upward for .specweave/ directory
16
- # Works regardless of where hook is installed (source or .claude/hooks/)
17
- find_project_root() {
18
- local dir="$1"
19
- while [ "$dir" != "/" ]; do
20
- if [ -d "$dir/.specweave" ]; then
21
- echo "$dir"
22
- return 0
23
- fi
24
- dir="$(dirname "$dir")"
25
- done
26
- # Fallback: try current directory
27
- if [ -d "$(pwd)/.specweave" ]; then
28
- pwd
29
- else
30
- echo "$(pwd)"
31
- fi
32
- }
33
-
34
- PROJECT_ROOT="$(find_project_root "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")"
35
- cd "$PROJECT_ROOT"
36
-
37
- # Colors
38
- RED='\033[0;31m'
39
- YELLOW='\033[1;33m'
40
- NC='\033[0m'
41
-
42
- # Get changed files (git)
43
- if ! git rev-parse --git-dir > /dev/null 2>&1; then
44
- # Not a git repository, skip
45
- exit 0
46
- fi
47
-
48
- CHANGED_FILES=$(git diff --name-only HEAD 2>/dev/null || echo "")
49
-
50
- if [ -z "$CHANGED_FILES" ]; then
51
- # No changes
52
- exit 0
53
- fi
54
-
55
- # Check if any documentation files changed
56
- DOC_CHANGES=$(echo "$CHANGED_FILES" | grep -E '\.specweave/(docs|increments/.*/.*\.md)' || true)
57
-
58
- if [ -n "$DOC_CHANGES" ]; then
59
- echo -e "${RED}⚠️ Documentation changed during implementation${NC}"
60
- echo ""
61
- echo "📋 Files changed:"
62
- echo "$DOC_CHANGES" | sed 's/^/ /'
63
- echo ""
64
- echo -e "${YELLOW}🔔 Recommended actions:${NC}"
65
- echo " 1. Review documentation changes"
66
- echo " 2. Update tasks.md if architecture changed"
67
- echo " 3. Type /review-docs to see full impact"
68
- echo ""
69
-
70
- # Play notification sound
71
- case "$(uname -s)" in
72
- Darwin)
73
- afplay /System/Library/Sounds/Ping.aiff 2>/dev/null &
74
- ;;
75
- Linux)
76
- paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga 2>/dev/null || true
77
- ;;
78
- esac
79
-
80
- # Log to hooks log
81
- LOGS_DIR=".specweave/logs"
82
- mkdir -p "$LOGS_DIR"
83
- echo "[$(date)] Documentation changed: $DOC_CHANGES" >> "$LOGS_DIR/hooks.log"
84
- fi
85
-
86
- # ALWAYS exit 0 - NEVER let hook errors crash Claude Code
87
- exit 0
@@ -1,147 +0,0 @@
1
- {
2
- "hooks": {
3
- "SessionStart": [
4
- {
5
- "hooks": [
6
- {
7
- "type": "command",
8
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/dispatchers/session-start.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"continue\\\":true}\")'"
9
- }
10
- ]
11
- }
12
- ],
13
- "UserPromptSubmit": [
14
- {
15
- "hooks": [
16
- {
17
- "type": "command",
18
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/user-prompt-submit.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"approve\\\"}\")'"
19
- }
20
- ]
21
- }
22
- ],
23
- "PreToolUse": [
24
- {
25
- "matcher": "Bash",
26
- "hooks": [
27
- {
28
- "type": "command",
29
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/bash-file-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
30
- }
31
- ]
32
- },
33
- {
34
- "matcher": "Edit|Write",
35
- "matcher_content": "metadata\\.json.*completed",
36
- "hooks": [
37
- {
38
- "type": "command",
39
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/completion-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
40
- }
41
- ]
42
- },
43
- {
44
- "matcher": "Write",
45
- "matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/spec\\.md",
46
- "hooks": [
47
- {
48
- "type": "command",
49
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/metadata-json-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
50
- }
51
- ]
52
- },
53
- {
54
- "matcher": "Write",
55
- "matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/spec\\.md",
56
- "hooks": [
57
- {
58
- "type": "command",
59
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/per-us-project-validator.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
60
- }
61
- ]
62
- },
63
- {
64
- "matcher": "Write",
65
- "matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/spec\\.md",
66
- "hooks": [
67
- {
68
- "type": "command",
69
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/spec-project-validator.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
70
- }
71
- ]
72
- },
73
- {
74
- "matcher": "Write|Edit",
75
- "matcher_content": "\\.specweave/docs/internal/specs/_features/",
76
- "hooks": [
77
- {
78
- "type": "command",
79
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/features-folder-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
80
- }
81
- ]
82
- },
83
- {
84
- "matcher": "Write",
85
- "matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/",
86
- "hooks": [
87
- {
88
- "type": "command",
89
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/increment-duplicate-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
90
- }
91
- ]
92
- },
93
- {
94
- "matcher": "Write",
95
- "matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/[^/]+$",
96
- "hooks": [
97
- {
98
- "type": "command",
99
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/increment-root-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
100
- }
101
- ]
102
- },
103
- {
104
- "matcher": "Write",
105
- "matcher_content": "\\.specweave/docs/internal/specs/[^/]+/",
106
- "hooks": [
107
- {
108
- "type": "command",
109
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/project-folder-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
110
- }
111
- ]
112
- },
113
- {
114
- "matcher": "Edit|Write",
115
- "matcher_content": "/src/.*\\.ts$",
116
- "hooks": [
117
- {
118
- "type": "command",
119
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/config-env-separator.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
120
- }
121
- ]
122
- },
123
- {
124
- "matcher": "Edit|Write",
125
- "matcher_content": "plugins/specweave-github/lib/.*issue.*builder\\.ts$",
126
- "hooks": [
127
- {
128
- "type": "command",
129
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/github-metadata-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
130
- }
131
- ]
132
- }
133
- ],
134
- "PostToolUse": [
135
- {
136
- "matcher": "Edit|Write",
137
- "matcher_content": "\\.specweave/increments/",
138
- "hooks": [
139
- {
140
- "type": "command",
141
- "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/dispatchers/post-tool-use.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"continue\\\":true}\")'"
142
- }
143
- ]
144
- }
145
- ]
146
- }
147
- }
@@ -1,83 +0,0 @@
1
- #!/bin/bash
2
-
3
- # SpecWeave Human-Input-Required Hook
4
- # Runs when Claude needs clarification or approval
5
- #
6
- # Actions:
7
- # 1. Play notification sound (Ping.aiff)
8
- # 2. Log the question/requirement
9
- # 3. Record in current increment's work log (if applicable)
10
-
11
- set +e # EMERGENCY FIX: Prevents Claude Code crashes
12
-
13
- # EMERGENCY KILL SWITCH
14
- if [[ "${SPECWEAVE_DISABLE_HOOKS:-0}" == "1" ]]; then
15
- exit 0
16
- fi
17
-
18
- # Find project root by searching upward for .specweave/ directory
19
- # Works regardless of where hook is installed (source or .claude/hooks/)
20
- find_project_root() {
21
- local dir="$1"
22
- while [ "$dir" != "/" ]; do
23
- if [ -d "$dir/.specweave" ]; then
24
- echo "$dir"
25
- return 0
26
- fi
27
- dir="$(dirname "$dir")"
28
- done
29
- # Fallback: try current directory
30
- if [ -d "$(pwd)/.specweave" ]; then
31
- pwd
32
- else
33
- echo "$(pwd)"
34
- fi
35
- }
36
-
37
- PROJECT_ROOT="$(find_project_root "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")"
38
- cd "$PROJECT_ROOT"
39
-
40
- # Get question/requirement (passed as argument or default)
41
- QUESTION="${1:-User input required}"
42
-
43
- echo "❓ Human input required"
44
-
45
- # 1. Play notification sound (cross-platform)
46
- play_sound() {
47
- case "$(uname -s)" in
48
- Darwin)
49
- afplay /System/Library/Sounds/Ping.aiff 2>/dev/null &
50
- ;;
51
- Linux)
52
- paplay /usr/share/sounds/freedesktop/stereo/dialog-question.oga 2>/dev/null || \
53
- aplay /usr/share/sounds/alsa/Side_Left.wav 2>/dev/null || true
54
- ;;
55
- MINGW*|MSYS*|CYGWIN*)
56
- powershell -c "(New-Object Media.SoundPlayer 'C:\Windows\Media\notify.wav').PlaySync();" 2>/dev/null || true
57
- ;;
58
- esac
59
- }
60
-
61
- play_sound &
62
-
63
- # 2. Log to main hooks log
64
- LOGS_DIR=".specweave/logs"
65
- mkdir -p "$LOGS_DIR"
66
- echo "[$(date)] Human input required: $QUESTION" >> "$LOGS_DIR/hooks.log"
67
-
68
- # 3. Log to current work context (if exists)
69
- CURRENT_WORK=$(find .specweave/work -maxdepth 1 -type d -name "current-*" | head -1 || true)
70
-
71
- if [ -n "$CURRENT_WORK" ] && [ -d "$CURRENT_WORK" ]; then
72
- echo "" >> "$CURRENT_WORK/notes.md"
73
- echo "## Input Required ($(date +%Y-%m-%d\ %H:%M))" >> "$CURRENT_WORK/notes.md"
74
- echo "" >> "$CURRENT_WORK/notes.md"
75
- echo "$QUESTION" >> "$CURRENT_WORK/notes.md"
76
- echo "" >> "$CURRENT_WORK/notes.md"
77
- echo "📝 Logged to $CURRENT_WORK/notes.md"
78
- fi
79
-
80
- echo "✅ Hook complete"
81
-
82
- # ALWAYS exit 0 - NEVER let hook errors crash Claude Code
83
- exit 0