specweave 0.23.14 → 0.23.16

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 (54) hide show
  1. package/CLAUDE.md +55 -0
  2. package/dist/src/core/spec-detector.d.ts +5 -0
  3. package/dist/src/core/spec-detector.d.ts.map +1 -1
  4. package/dist/src/core/spec-detector.js +91 -33
  5. package/dist/src/core/spec-detector.js.map +1 -1
  6. package/package.json +1 -1
  7. package/plugins/specweave-github/.claude-plugin/plugin.json +15 -1
  8. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +16 -0
  9. package/plugins/specweave-github/hooks/post-task-completion.sh +53 -0
  10. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +24 -0
  11. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +0 -21
  12. package/plugins/specweave-alternatives/skills/bmad-method-expert/SKILL.md +0 -626
  13. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
  14. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/check-setup.js +0 -208
  15. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
  16. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
  17. package/plugins/specweave-alternatives/skills/spec-kit-expert/SKILL.md +0 -1010
  18. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +0 -20
  19. package/plugins/specweave-cost-optimizer/skills/cost-optimizer/SKILL.md +0 -190
  20. package/plugins/specweave-docs/.claude-plugin/plugin.json +0 -19
  21. package/plugins/specweave-docs/skills/docusaurus/SKILL.md +0 -613
  22. package/plugins/specweave-docs/skills/spec-driven-brainstorming/README.md +0 -264
  23. package/plugins/specweave-docs/skills/spec-driven-brainstorming/SKILL.md +0 -439
  24. package/plugins/specweave-docs/skills/spec-driven-debugging/README.md +0 -479
  25. package/plugins/specweave-docs/skills/spec-driven-debugging/SKILL.md +0 -652
  26. package/plugins/specweave-figma/.claude-plugin/.mcp.json +0 -12
  27. package/plugins/specweave-figma/.claude-plugin/plugin.json +0 -20
  28. package/plugins/specweave-figma/ARCHITECTURE.md +0 -453
  29. package/plugins/specweave-figma/README.md +0 -728
  30. package/plugins/specweave-figma/skills/figma-to-code/SKILL.md +0 -632
  31. package/plugins/specweave-figma/skills/figma-to-code/test-1-token-generation.yaml +0 -29
  32. package/plugins/specweave-figma/skills/figma-to-code/test-2-component-generation.yaml +0 -27
  33. package/plugins/specweave-figma/skills/figma-to-code/test-3-typescript-generation.yaml +0 -28
  34. package/plugins/specweave-frontend/.claude-plugin/plugin.json +0 -21
  35. package/plugins/specweave-frontend/skills/design-system-architect/SKILL.md +0 -107
  36. package/plugins/specweave-frontend/skills/frontend/SKILL.md +0 -177
  37. package/plugins/specweave-frontend/skills/nextjs/SKILL.md +0 -176
  38. package/plugins/specweave-testing/.claude-plugin/plugin.json +0 -20
  39. package/plugins/specweave-testing/skills/e2e-playwright/README.md +0 -506
  40. package/plugins/specweave-testing/skills/e2e-playwright/SKILL.md +0 -457
  41. package/plugins/specweave-testing/skills/e2e-playwright/execute.js +0 -373
  42. package/plugins/specweave-testing/skills/e2e-playwright/lib/utils.js +0 -514
  43. package/plugins/specweave-testing/skills/e2e-playwright/package.json +0 -33
  44. package/plugins/specweave-tooling/.claude-plugin/plugin.json +0 -19
  45. package/plugins/specweave-tooling/skills/skill-creator/LICENSE.txt +0 -202
  46. package/plugins/specweave-tooling/skills/skill-creator/SKILL.md +0 -209
  47. package/plugins/specweave-tooling/skills/skill-creator/scripts/init_skill.py +0 -303
  48. package/plugins/specweave-tooling/skills/skill-creator/scripts/package_skill.py +0 -110
  49. package/plugins/specweave-tooling/skills/skill-creator/scripts/quick_validate.py +0 -65
  50. package/plugins/specweave-tooling/skills/skill-router/SKILL.md +0 -479
  51. package/plugins/specweave-ui/.claude-plugin/plugin.json +0 -26
  52. package/plugins/specweave-ui/.mcp.json +0 -10
  53. package/plugins/specweave-ui/README.md +0 -492
  54. package/plugins/specweave-ui/skills/browser-automation/SKILL.md +0 -676
package/CLAUDE.md CHANGED
@@ -252,6 +252,61 @@ Feature FS-048 → GitHub Milestone "FS-048: Feature Title"
252
252
 
253
253
  ---
254
254
 
255
+ ### 10a. NO Increment-to-Increment References (ADR-0061) ⛔
256
+
257
+ **CRITICAL ARCHITECTURAL RULE**: Increments NEVER reference other increments!
258
+
259
+ **The Only Allowed Flow**:
260
+ ```
261
+ INCREMENT (metadata.json: feature_id) → FEATURE → USER STORIES
262
+ ```
263
+
264
+ **❌ FORBIDDEN**:
265
+ ```yaml
266
+ # In user story frontmatter
267
+ ---
268
+ id: US-001
269
+ feature: FS-048
270
+ increments: [0050-external-tool-import] # ❌ NEVER DO THIS!
271
+ ---
272
+ ```
273
+
274
+ ```markdown
275
+ # In user story content
276
+ Implemented in increment 0050-external-tool-import ❌ NEVER DO THIS!
277
+ ```
278
+
279
+ **✅ CORRECT**:
280
+ ```yaml
281
+ # Increment metadata.json
282
+ {
283
+ "feature_id": "FS-048" ✅ Forward reference only
284
+ }
285
+
286
+ # User story frontmatter
287
+ ---
288
+ id: US-001
289
+ feature: FS-048 ✅ No increment reference needed!
290
+ ---
291
+ ```
292
+
293
+ **Why This Matters**:
294
+
295
+ 1. **Hooks Break Without This**: The GitHub sync hook reads increment metadata → finds feature_id → finds all user stories for that feature → creates GitHub issues. If user stories required increment references, this creates circular dependencies and hooks detect 0 specs.
296
+
297
+ 2. **Clean Separation**: Living docs (user stories) are permanent. Increments are temporary implementations. User stories should never know about increments.
298
+
299
+ 3. **Multi-Increment Support**: Multiple increments can implement the same feature (Phase 1a, 1b, 1c). Each auto-syncs ALL user stories without duplication.
300
+
301
+ **Enforcement**:
302
+ - Pre-commit hook validates NO increment references in living docs
303
+ - Spec-detector ignores reverse references (defensive)
304
+ - **See**: ADR-0061 for complete architectural rationale
305
+
306
+ **Incident**: 2025-11-22 - Hooks appeared broken (0 specs detected, 0 GitHub issues created) due to old spec-detector logic requiring reverse references. Fixed in v0.24.0+.
307
+
308
+ ---
309
+
255
310
  ### 11. Task Format with US Linkage (v0.23.0+)
256
311
 
257
312
  **Required fields**:
@@ -29,6 +29,11 @@ export interface MultiSpecDetectionResult {
29
29
  }
30
30
  /**
31
31
  * Detect all specs referenced in an increment
32
+ *
33
+ * CRITICAL ARCHITECTURE (v0.24.0+):
34
+ * - Increments NEVER reference other increments
35
+ * - Flow: INCREMENT (feature_id) → FEATURE → USER STORIES
36
+ * - Detection: Read increment metadata.json → Find feature_id → Find all user stories with that feature
32
37
  */
33
38
  export declare function detectSpecsInIncrement(incrementPath: string, config?: any): Promise<MultiSpecDetectionResult>;
34
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"spec-detector.d.ts","sourceRoot":"","sources":["../../../src/core/spec-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,UAAU,EAAE,cAAc,CAAC;IAE3B,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,mDAAmD;IACnD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,yBAAyB;IACzB,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,6CAA6C;IAC7C,WAAW,EAAE,OAAO,CAAC;IAErB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,GAAQ,GACf,OAAO,CAAC,wBAAwB,CAAC,CAmFnC;AA0CD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,wCAAwC,CACtD,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAW,EACxB,MAAM,GAAE,GAAQ,GACf,sBAAsB,CA8DxB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAW,EACxB,MAAM,GAAE,GAAQ,GACf,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,GAAE,GAAQ,GACf,OAAO,CAwBT"}
1
+ {"version":3,"file":"spec-detector.d.ts","sourceRoot":"","sources":["../../../src/core/spec-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,UAAU,EAAE,cAAc,CAAC;IAE3B,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,mDAAmD;IACnD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,yBAAyB;IACzB,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,6CAA6C;IAC7C,WAAW,EAAE,OAAO,CAAC;IAErB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,GAAQ,GACf,OAAO,CAAC,wBAAwB,CAAC,CA+CnC;AAiJD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,wCAAwC,CACtD,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAW,EACxB,MAAM,GAAE,GAAQ,GACf,sBAAsB,CA8DxB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAW,EACxB,MAAM,GAAE,GAAQ,GACf,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,GAAE,GAAQ,GACf,OAAO,CAwBT"}
@@ -12,8 +12,61 @@ import matter from 'gray-matter';
12
12
  import { detectSpecIdentifier } from './spec-identifier-detector.js';
13
13
  /**
14
14
  * Detect all specs referenced in an increment
15
+ *
16
+ * CRITICAL ARCHITECTURE (v0.24.0+):
17
+ * - Increments NEVER reference other increments
18
+ * - Flow: INCREMENT (feature_id) → FEATURE → USER STORIES
19
+ * - Detection: Read increment metadata.json → Find feature_id → Find all user stories with that feature
15
20
  */
16
21
  export async function detectSpecsInIncrement(incrementPath, config = {}) {
22
+ const specs = [];
23
+ // STEP 1: Read increment metadata to get feature_id
24
+ const metadataPath = path.join(incrementPath, 'metadata.json');
25
+ if (!fs.existsSync(metadataPath)) {
26
+ // Fallback: try spec.md frontmatter
27
+ const specPath = path.join(incrementPath, 'spec.md');
28
+ if (fs.existsSync(specPath)) {
29
+ const specContent = fs.readFileSync(specPath, 'utf-8');
30
+ const { data: frontmatter } = matter(specContent);
31
+ // No feature_id in frontmatter either - return empty
32
+ if (!frontmatter.feature_id) {
33
+ return {
34
+ specs: [],
35
+ isMultiSpec: false,
36
+ projects: []
37
+ };
38
+ }
39
+ // Use feature_id from spec.md frontmatter
40
+ return await detectSpecsByFeatureId(frontmatter.feature_id, config);
41
+ }
42
+ return {
43
+ specs: [],
44
+ isMultiSpec: false,
45
+ projects: []
46
+ };
47
+ }
48
+ const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
49
+ const featureId = metadata.feature_id;
50
+ if (!featureId) {
51
+ // No feature_id - return empty (increment is standalone)
52
+ return {
53
+ specs: [],
54
+ isMultiSpec: false,
55
+ projects: []
56
+ };
57
+ }
58
+ // STEP 2: Find all user stories for this feature_id
59
+ return await detectSpecsByFeatureId(featureId, config);
60
+ }
61
+ /**
62
+ * Detect all user stories for a given feature_id
63
+ *
64
+ * ARCHITECTURE:
65
+ * - Scans .specweave/docs/internal/specs/{project}/{feature}/
66
+ * - Finds all user story files with feature: {featureId} in frontmatter
67
+ * - Returns detected specs ready for GitHub sync
68
+ */
69
+ async function detectSpecsByFeatureId(featureId, config = {}) {
17
70
  const specs = [];
18
71
  // 1. Check for specs in living docs folder
19
72
  const specsFolder = path.join(process.cwd(), '.specweave/docs/internal/specs');
@@ -28,49 +81,54 @@ export async function detectSpecsInIncrement(incrementPath, config = {}) {
28
81
  const projectFolders = fs.readdirSync(specsFolder);
29
82
  for (const projectFolder of projectFolders) {
30
83
  const projectPath = path.join(specsFolder, projectFolder);
31
- // Skip if not a directory
32
- if (!fs.statSync(projectPath).isDirectory()) {
84
+ // Skip if not a directory or _features folder
85
+ if (!fs.statSync(projectPath).isDirectory() || projectFolder === '_features') {
86
+ continue;
87
+ }
88
+ // 3. Scan for feature-specific folders (e.g., FS-048/)
89
+ const featureFolderPath = path.join(projectPath, featureId);
90
+ if (!fs.existsSync(featureFolderPath) || !fs.statSync(featureFolderPath).isDirectory()) {
33
91
  continue;
34
92
  }
35
- // 3. Scan all spec files in this project
36
- const specFiles = fs.readdirSync(projectPath).filter(f => f.endsWith('.md'));
93
+ // 4. Scan all user story files in this feature folder
94
+ const specFiles = fs.readdirSync(featureFolderPath).filter(f => f.endsWith('.md') && f.startsWith('us-'));
37
95
  for (const specFile of specFiles) {
38
- const specPath = path.join(projectPath, specFile);
96
+ const specPath = path.join(featureFolderPath, specFile);
39
97
  const specContent = fs.readFileSync(specPath, 'utf-8');
40
98
  const { data: frontmatter, content } = matter(specContent);
41
- // 4. Check if this spec references the current increment
42
- const references = extractIncrementReferences(content, frontmatter);
43
- if (references.includes(path.basename(incrementPath))) {
44
- // 5. Detect identifier for this spec
45
- const title = frontmatter.title || extractTitle(content);
46
- const specContentObj = {
47
- content: specContent,
48
- frontmatter,
49
- title,
50
- project: projectFolder,
51
- path: specPath
52
- };
53
- const identifier = detectSpecIdentifier(specContentObj, {
54
- existingSpecs: specs.map(s => s.identifier.full),
55
- preferTitleSlug: config.specs?.preferTitleSlug ?? true,
56
- minSlugLength: config.specs?.minSlugLength ?? 5
57
- });
58
- // 6. Check if sync is enabled for this project
59
- const projectConfig = config.specs?.projects?.[projectFolder];
60
- const syncEnabled = projectConfig?.syncEnabled !== false;
61
- specs.push({
62
- identifier,
63
- project: projectFolder,
64
- path: specPath,
65
- syncEnabled
66
- });
99
+ // 5. Verify this user story belongs to the feature
100
+ if (frontmatter.feature !== featureId) {
101
+ continue;
67
102
  }
103
+ // 6. Detect identifier for this spec
104
+ const title = frontmatter.title || extractTitle(content);
105
+ const specContentObj = {
106
+ content: specContent,
107
+ frontmatter,
108
+ title,
109
+ project: projectFolder,
110
+ path: specPath
111
+ };
112
+ const identifier = detectSpecIdentifier(specContentObj, {
113
+ existingSpecs: specs.map(s => s.identifier.full),
114
+ preferTitleSlug: config.specs?.preferTitleSlug ?? true,
115
+ minSlugLength: config.specs?.minSlugLength ?? 5
116
+ });
117
+ // 7. Check if sync is enabled for this project
118
+ const projectConfig = config.specs?.projects?.[projectFolder];
119
+ const syncEnabled = projectConfig?.syncEnabled !== false;
120
+ specs.push({
121
+ identifier,
122
+ project: projectFolder,
123
+ path: specPath,
124
+ syncEnabled
125
+ });
68
126
  }
69
127
  }
70
- // 7. Determine if multi-spec
128
+ // 8. Determine if multi-spec
71
129
  const isMultiSpec = specs.length > 1;
72
130
  const projects = [...new Set(specs.map(s => s.project))];
73
- // 8. Find primary spec (first non-parent spec)
131
+ // 9. Find primary spec (first non-parent spec)
74
132
  const primary = specs.find(s => s.project !== '_parent') || specs[0];
75
133
  return {
76
134
  specs,
@@ -1 +1 @@
1
- {"version":3,"file":"spec-detector.js","sourceRoot":"","sources":["../../../src/core/spec-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-detector.js","sourceRoot":"","sources":["../../../src/core/spec-detector.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.14",
3
+ "version": "0.23.16",
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",
@@ -15,5 +15,19 @@
15
15
  "integration",
16
16
  "sync",
17
17
  "specweave"
18
- ]
18
+ ],
19
+ "hooks": {
20
+ "PostToolUse": [
21
+ {
22
+ "matcher": "TodoWrite",
23
+ "hooks": [
24
+ {
25
+ "type": "command",
26
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/post-task-completion.sh",
27
+ "timeout": 15
28
+ }
29
+ ]
30
+ }
31
+ ]
32
+ }
19
33
  }
@@ -0,0 +1,16 @@
1
+ [Sat Nov 22 02:20:23 EST 2025] [GitHub] 🔗 GitHub sync hook fired
2
+ [Sat Nov 22 02:20:23 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
3
+ [Sat Nov 22 02:20:26 EST 2025] [GitHub] 🔗 GitHub sync hook fired
4
+ [Sat Nov 22 02:20:26 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
5
+ [Sat Nov 22 02:20:26 EST 2025] [GitHub] 🔗 GitHub sync hook fired
6
+ [Sat Nov 22 02:20:26 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
7
+ [Sat Nov 22 02:20:28 EST 2025] [GitHub] 🔗 GitHub sync hook fired
8
+ [Sat Nov 22 02:20:28 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
9
+ [Sat Nov 22 02:20:31 EST 2025] [GitHub] 🔗 GitHub sync hook fired
10
+ [Sat Nov 22 02:20:31 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
11
+ [Sat Nov 22 02:20:31 EST 2025] [GitHub] 🔗 GitHub sync hook fired
12
+ [Sat Nov 22 02:20:31 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
13
+ [Sat Nov 22 02:20:33 EST 2025] [GitHub] 🔗 GitHub sync hook fired
14
+ [Sat Nov 22 02:20:33 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
15
+ [Sat Nov 22 02:20:36 EST 2025] [GitHub] 🔗 GitHub sync hook fired
16
+ [Sat Nov 22 02:20:36 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
@@ -26,6 +26,53 @@ if [[ "${SPECWEAVE_DISABLE_HOOKS:-0}" == "1" ]]; then
26
26
  exit 0
27
27
  fi
28
28
 
29
+ # ============================================================================
30
+ # CIRCUIT BREAKER & FILE LOCKING
31
+ # ============================================================================
32
+
33
+ # CIRCUIT BREAKER: Auto-disable after consecutive failures
34
+ CIRCUIT_BREAKER_FILE=".specweave/state/.hook-circuit-breaker-github"
35
+ CIRCUIT_BREAKER_THRESHOLD=3
36
+
37
+ mkdir -p ".specweave/state" 2>/dev/null || true
38
+
39
+ if [[ -f "$CIRCUIT_BREAKER_FILE" ]]; then
40
+ FAILURE_COUNT=$(cat "$CIRCUIT_BREAKER_FILE" 2>/dev/null || echo 0)
41
+ if (( FAILURE_COUNT >= CIRCUIT_BREAKER_THRESHOLD )); then
42
+ # Circuit breaker is OPEN - hooks are disabled
43
+ exit 0
44
+ fi
45
+ fi
46
+
47
+ # FILE LOCK: Only allow 1 GitHub sync hook at a time
48
+ LOCK_FILE=".specweave/state/.hook-github-sync.lock"
49
+ LOCK_TIMEOUT=15 # seconds (GitHub sync can take longer)
50
+
51
+ LOCK_ACQUIRED=false
52
+ for i in {1..15}; do
53
+ if mkdir "$LOCK_FILE" 2>/dev/null; then
54
+ LOCK_ACQUIRED=true
55
+ trap 'rmdir "$LOCK_FILE" 2>/dev/null || true' EXIT
56
+ break
57
+ fi
58
+
59
+ # Check for stale lock
60
+ if [[ -d "$LOCK_FILE" ]]; then
61
+ LOCK_AGE=$(($(date +%s) - $(stat -f "%m" "$LOCK_FILE" 2>/dev/null || echo 0)))
62
+ if (( LOCK_AGE > LOCK_TIMEOUT )); then
63
+ rmdir "$LOCK_FILE" 2>/dev/null || true
64
+ continue
65
+ fi
66
+ fi
67
+
68
+ sleep 0.2
69
+ done
70
+
71
+ if [[ "$LOCK_ACQUIRED" == "false" ]]; then
72
+ # Another instance is running, skip
73
+ exit 0
74
+ fi
75
+
29
76
  # ============================================================================
30
77
  # PROJECT ROOT DETECTION
31
78
  # ============================================================================
@@ -252,6 +299,12 @@ else
252
299
  echo "[$(date)] [GitHub] ℹ️ Epic sync disabled (sync at User Story level only)" >> "$DEBUG_LOG" 2>/dev/null || true
253
300
  fi
254
301
 
302
+ # ============================================================================
303
+ # CIRCUIT BREAKER UPDATE
304
+ # ============================================================================
305
+ # Reset circuit breaker on successful completion (all errors are caught above)
306
+ echo "0" > "$CIRCUIT_BREAKER_FILE" 2>/dev/null || true
307
+
255
308
  # ============================================================================
256
309
  # OUTPUT TO CLAUDE
257
310
  # ============================================================================
@@ -250,3 +250,27 @@
250
250
  [2025-11-22 02:09:54] 🎯 Post-Increment-Completion Hook Triggered
251
251
  [2025-11-22 02:09:54] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
252
252
  [2025-11-22 02:09:54] Run: npm run build
253
+ [2025-11-22 02:20:23] 🎯 Post-Increment-Completion Hook Triggered
254
+ [2025-11-22 02:20:23] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
255
+ [2025-11-22 02:20:23] Run: npm run build
256
+ [2025-11-22 02:20:26] 🎯 Post-Increment-Completion Hook Triggered
257
+ [2025-11-22 02:20:26] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
258
+ [2025-11-22 02:20:26] Run: npm run build
259
+ [2025-11-22 02:20:26] 🎯 Post-Increment-Completion Hook Triggered
260
+ [2025-11-22 02:20:26] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
261
+ [2025-11-22 02:20:26] Run: npm run build
262
+ [2025-11-22 02:20:28] 🎯 Post-Increment-Completion Hook Triggered
263
+ [2025-11-22 02:20:28] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
264
+ [2025-11-22 02:20:28] Run: npm run build
265
+ [2025-11-22 02:20:31] 🎯 Post-Increment-Completion Hook Triggered
266
+ [2025-11-22 02:20:31] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
267
+ [2025-11-22 02:20:31] Run: npm run build
268
+ [2025-11-22 02:20:31] 🎯 Post-Increment-Completion Hook Triggered
269
+ [2025-11-22 02:20:31] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
270
+ [2025-11-22 02:20:31] Run: npm run build
271
+ [2025-11-22 02:20:33] 🎯 Post-Increment-Completion Hook Triggered
272
+ [2025-11-22 02:20:33] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
273
+ [2025-11-22 02:20:33] Run: npm run build
274
+ [2025-11-22 02:20:36] 🎯 Post-Increment-Completion Hook Triggered
275
+ [2025-11-22 02:20:36] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
276
+ [2025-11-22 02:20:36] Run: npm run build
@@ -1,21 +0,0 @@
1
- {
2
- "name": "specweave-alternatives",
3
- "description": "Compare SpecWeave with BMAD, spec-kit, openspec, and other spec-driven frameworks. Get gap analysis, feature comparison, and strategic recommendations to choose the best framework for your needs.",
4
- "version": "0.22.14",
5
- "author": {
6
- "name": "SpecWeave Team",
7
- "url": "https://spec-weave.com"
8
- },
9
- "homepage": "https://spec-weave.com",
10
- "repository": "https://github.com/anton-abyzov/specweave",
11
- "license": "MIT",
12
- "keywords": [
13
- "alternatives",
14
- "comparison",
15
- "bmad",
16
- "spec-kit",
17
- "openspec",
18
- "framework-comparison",
19
- "specweave"
20
- ]
21
- }