specweave 0.30.16 → 0.30.17

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 (53) hide show
  1. package/CLAUDE.md +43 -0
  2. package/dist/src/cli/workers/living-docs-worker.js +80 -44
  3. package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
  4. package/dist/src/core/living-docs/living-docs-sync.d.ts +26 -14
  5. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  6. package/dist/src/core/living-docs/living-docs-sync.js +137 -71
  7. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  8. package/dist/src/core/llm/index.d.ts +1 -0
  9. package/dist/src/core/llm/index.d.ts.map +1 -1
  10. package/dist/src/core/llm/index.js +2 -0
  11. package/dist/src/core/llm/index.js.map +1 -1
  12. package/dist/src/core/llm/providers/anthropic-provider.d.ts.map +1 -1
  13. package/dist/src/core/llm/providers/anthropic-provider.js +15 -26
  14. package/dist/src/core/llm/providers/anthropic-provider.js.map +1 -1
  15. package/dist/src/core/llm/providers/azure-openai-provider.d.ts.map +1 -1
  16. package/dist/src/core/llm/providers/azure-openai-provider.js +13 -5
  17. package/dist/src/core/llm/providers/azure-openai-provider.js.map +1 -1
  18. package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
  19. package/dist/src/core/llm/providers/bedrock-provider.js +12 -8
  20. package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
  21. package/dist/src/core/llm/providers/claude-code-provider.d.ts.map +1 -1
  22. package/dist/src/core/llm/providers/claude-code-provider.js +15 -25
  23. package/dist/src/core/llm/providers/claude-code-provider.js.map +1 -1
  24. package/dist/src/core/llm/providers/ollama-provider.d.ts.map +1 -1
  25. package/dist/src/core/llm/providers/ollama-provider.js +12 -9
  26. package/dist/src/core/llm/providers/ollama-provider.js.map +1 -1
  27. package/dist/src/core/llm/providers/openai-provider.d.ts.map +1 -1
  28. package/dist/src/core/llm/providers/openai-provider.js +13 -6
  29. package/dist/src/core/llm/providers/openai-provider.js.map +1 -1
  30. package/dist/src/core/llm/providers/vertex-ai-provider.d.ts.map +1 -1
  31. package/dist/src/core/llm/providers/vertex-ai-provider.js +12 -8
  32. package/dist/src/core/llm/providers/vertex-ai-provider.js.map +1 -1
  33. package/dist/src/utils/llm-json-extractor.d.ts +105 -0
  34. package/dist/src/utils/llm-json-extractor.d.ts.map +1 -0
  35. package/dist/src/utils/llm-json-extractor.js +336 -0
  36. package/dist/src/utils/llm-json-extractor.js.map +1 -0
  37. package/dist/src/utils/structure-level-detector.d.ts +105 -0
  38. package/dist/src/utils/structure-level-detector.d.ts.map +1 -0
  39. package/dist/src/utils/structure-level-detector.js +388 -0
  40. package/dist/src/utils/structure-level-detector.js.map +1 -0
  41. package/package.json +1 -1
  42. package/plugins/specweave/commands/specweave-increment.md +57 -9
  43. package/plugins/specweave/commands/specweave-sync-specs.md +37 -6
  44. package/plugins/specweave/hooks/hooks.json +10 -0
  45. package/plugins/specweave/hooks/spec-project-validator.sh +111 -0
  46. package/plugins/specweave/skills/increment-planner/SKILL.md +109 -10
  47. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +2 -0
  48. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +1 -0
  49. package/plugins/specweave/skills/multi-project-spec-mapper/SKILL.md +24 -1
  50. package/plugins/specweave/skills/spec-generator/SKILL.md +18 -0
  51. package/plugins/specweave/skills/specweave-framework/SKILL.md +25 -0
  52. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +14 -0
  53. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +21 -0
@@ -0,0 +1,111 @@
1
+ #!/bin/bash
2
+ #
3
+ # spec-project-validator.sh
4
+ #
5
+ # Pre-tool-use hook that validates spec.md has required project/board fields
6
+ # before allowing Write tool to create/update spec.md files.
7
+ #
8
+ # Activation:
9
+ # - tool_name: Write
10
+ # - file_path matches: .specweave/increments/*/spec.md
11
+ #
12
+ # Rules:
13
+ # - 1-level structure: spec.md MUST have `project:` in YAML frontmatter
14
+ # - 2-level structure: spec.md MUST have BOTH `project:` AND `board:` in frontmatter
15
+ #
16
+ # Returns exit code 1 (block) if validation fails, 0 (allow) otherwise.
17
+
18
+ set -e
19
+
20
+ # Read tool input from stdin
21
+ INPUT=$(cat)
22
+
23
+ # Extract tool name
24
+ TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // ""')
25
+
26
+ # Only validate Write tool calls
27
+ if [ "$TOOL_NAME" != "Write" ]; then
28
+ echo '{"decision": "allow"}'
29
+ exit 0
30
+ fi
31
+
32
+ # Extract file path
33
+ FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // ""')
34
+
35
+ # Only validate spec.md files in increments folder
36
+ if [[ ! "$FILE_PATH" =~ \.specweave/increments/[0-9]{4}-[^/]+/spec\.md$ ]]; then
37
+ echo '{"decision": "allow"}'
38
+ exit 0
39
+ fi
40
+
41
+ # Extract file content
42
+ CONTENT=$(echo "$INPUT" | jq -r '.tool_input.content // ""')
43
+
44
+ # Check if content has YAML frontmatter
45
+ if [[ ! "$CONTENT" =~ ^---$'\n' ]]; then
46
+ echo '{"decision": "block", "reason": "spec.md must have YAML frontmatter (starting with ---)"}'
47
+ exit 0
48
+ fi
49
+
50
+ # Extract YAML frontmatter
51
+ FRONTMATTER=$(echo "$CONTENT" | sed -n '/^---$/,/^---$/p' | tail -n +2 | head -n -1)
52
+
53
+ # Check for unresolved project placeholder
54
+ if echo "$FRONTMATTER" | grep -q 'project:\s*{{PROJECT_ID}}'; then
55
+ echo '{"decision": "block", "reason": "spec.md has unresolved placeholder {{PROJECT_ID}}. Run STEP 0B to select project before creating spec.md."}'
56
+ exit 0
57
+ fi
58
+
59
+ # Check for unresolved board placeholder
60
+ if echo "$FRONTMATTER" | grep -q 'board:\s*{{BOARD_ID}}'; then
61
+ echo '{"decision": "block", "reason": "spec.md has unresolved placeholder {{BOARD_ID}}. Run STEP 0B to select board before creating spec.md."}'
62
+ exit 0
63
+ fi
64
+
65
+ # Check for project field
66
+ PROJECT=$(echo "$FRONTMATTER" | grep -E '^project:\s*' | sed 's/^project:\s*//' | tr -d '"'"'" | tr -d '[:space:]')
67
+
68
+ # Detect structure level by checking config
69
+ PROJECT_ROOT="${FILE_PATH%%/.specweave/*}"
70
+ CONFIG_PATH="$PROJECT_ROOT/.specweave/config.json"
71
+
72
+ IS_2_LEVEL=false
73
+
74
+ if [ -f "$CONFIG_PATH" ]; then
75
+ # Check for ADO area path mapping (indicates 2-level)
76
+ if jq -e '.sync.profiles | to_entries[] | select(.value.provider == "ado") | .value.config.areaPathMapping.mappings | length > 0' "$CONFIG_PATH" >/dev/null 2>&1; then
77
+ IS_2_LEVEL=true
78
+ fi
79
+
80
+ # Check for ADO areaPaths (indicates 2-level)
81
+ if jq -e '.sync.profiles | to_entries[] | select(.value.provider == "ado") | .value.config.areaPaths | length > 0' "$CONFIG_PATH" >/dev/null 2>&1; then
82
+ IS_2_LEVEL=true
83
+ fi
84
+ fi
85
+
86
+ # Validation based on structure level
87
+ if [ "$IS_2_LEVEL" = true ]; then
88
+ # 2-level: BOTH project AND board required
89
+ if [ -z "$PROJECT" ] || [ "$PROJECT" = "null" ]; then
90
+ echo '{"decision": "block", "reason": "spec.md missing required '\''project:'\'' field in YAML frontmatter. This is a 2-level structure - add '\''project: <project_name>'\'' to frontmatter."}'
91
+ exit 0
92
+ fi
93
+
94
+ BOARD=$(echo "$FRONTMATTER" | grep -E '^board:\s*' | sed 's/^board:\s*//' | tr -d '"'"'" | tr -d '[:space:]')
95
+
96
+ if [ -z "$BOARD" ] || [ "$BOARD" = "null" ]; then
97
+ echo '{"decision": "block", "reason": "spec.md missing required '\''board:'\'' field in YAML frontmatter. This is a 2-level structure - add '\''board: <board_name>'\'' to frontmatter."}'
98
+ exit 0
99
+ fi
100
+ else
101
+ # 1-level: project is strongly recommended (warning, not block)
102
+ if [ -z "$PROJECT" ] || [ "$PROJECT" = "null" ]; then
103
+ # For 1-level, we warn but don't block (backward compatibility)
104
+ echo '{"decision": "allow", "message": "⚠️ spec.md should have '\''project:'\'' field in YAML frontmatter for explicit sync target."}'
105
+ exit 0
106
+ fi
107
+ fi
108
+
109
+ # All validations passed
110
+ echo '{"decision": "allow"}'
111
+ exit 0
@@ -176,6 +176,81 @@ echo "Using coverageTarget: $coverageTarget"
176
176
 
177
177
  **Store these values for use in STEP 4 and STEP 7!**
178
178
 
179
+ ### STEP 0B: Detect Structure Level & Select Project/Board (MANDATORY!)
180
+
181
+ **⚠️ CRITICAL: Before generating spec.md, you MUST know the target project (and board for 2-level structures)!**
182
+
183
+ **Structure Levels:**
184
+ - **1-Level**: `internal/specs/{project}/FS-XXX/` - requires `project` in spec.md
185
+ - **2-Level**: `internal/specs/{project}/{board}/FS-XXX/` - requires BOTH `project` AND `board`
186
+
187
+ **Detection Logic** (use `src/utils/structure-level-detector.ts`):
188
+
189
+ ```typescript
190
+ import { detectStructureLevel, getRequiredSpecFields } from './utils/structure-level-detector.js';
191
+
192
+ const structureConfig = detectStructureLevel(projectRoot);
193
+ console.log(`Structure level: ${structureConfig.level}`);
194
+ console.log(`Detection reason: ${structureConfig.detectionReason}`);
195
+ console.log(`Available projects: ${structureConfig.projects.map(p => p.id).join(', ')}`);
196
+
197
+ if (structureConfig.level === 2 && structureConfig.boardsByProject) {
198
+ console.log('Available boards by project:');
199
+ for (const [projectId, boards] of Object.entries(structureConfig.boardsByProject)) {
200
+ console.log(` ${projectId}: ${boards.map(b => b.id).join(', ')}`);
201
+ }
202
+ }
203
+ ```
204
+
205
+ **Manual Detection:**
206
+ ```bash
207
+ # Check if 2-level (ADO area paths or JIRA boards)
208
+ jq '.sync.profiles | to_entries[] | select(.value.provider == "ado") | .value.config.areaPathMapping' .specweave/config.json
209
+
210
+ # Check existing folder structure
211
+ ls -la .specweave/docs/internal/specs/*/ # If sub-folders exist (not FS-XXX) → 2-level
212
+ ```
213
+
214
+ **Project/Board Selection (MANDATORY BEFORE STEP 4!):**
215
+
216
+ 1. **For 1-level structure:**
217
+ - ASK user: "Which project should this increment sync to?"
218
+ - Options: List from `structureConfig.projects`
219
+ - Store selected `PROJECT_ID`
220
+
221
+ 2. **For 2-level structure:**
222
+ - ASK user: "Which project should this increment sync to?"
223
+ - Then ASK: "Which board/area path within {project}?"
224
+ - Options: List from `structureConfig.boardsByProject[selectedProject]`
225
+ - Store BOTH `PROJECT_ID` and `BOARD_ID`
226
+
227
+ **VALIDATION RULE:**
228
+ ```
229
+ ❌ FORBIDDEN: Creating spec.md without PROJECT_ID set
230
+ ❌ FORBIDDEN: Creating spec.md for 2-level without BOARD_ID set
231
+ ❌ FORBIDDEN: Vague increments like "show last git commits" without project context
232
+ ✅ REQUIRED: Always know WHERE this increment will sync BEFORE creating spec.md
233
+ ```
234
+
235
+ **Example User Interaction:**
236
+
237
+ ```
238
+ 🔍 Detected 2-level structure (ADO area path mapping)
239
+ Available projects: acme-corp
240
+
241
+ 📁 Project: acme-corp
242
+ Boards: clinical-insights, platform-engineering, digital-operations
243
+
244
+ Which board should this increment sync to?
245
+ > digital-operations
246
+
247
+ ✅ Increment will sync to: internal/specs/acme-corp/digital-operations/FS-XXX/
248
+ ```
249
+
250
+ **Store PROJECT_ID and BOARD_ID for use in STEP 4!**
251
+
252
+ ---
253
+
179
254
  ### STEP 1: Get Next Increment Number
180
255
 
181
256
  Use helper script:
@@ -207,26 +282,50 @@ mkdir -p .specweave/increments/0021-feature-name
207
282
 
208
283
  Create `.specweave/increments/0021-feature-name/spec.md`:
209
284
 
285
+ **⚠️ CRITICAL: You MUST have PROJECT_ID (and BOARD_ID for 2-level) from STEP 0B before proceeding!**
286
+
210
287
  **⚠️ IMPORTANT: Use the correct template based on STEP 0 detection!**
211
288
 
212
- #### 4A: Single-Project Template (umbrella.enabled: false)
289
+ #### 4A: Single-Project Template (1-level structure)
213
290
 
214
291
  **Template File**: `templates/spec-single-project.md`
215
292
 
216
- Replace placeholders: `{{INCREMENT_ID}}`, `{{FEATURE_TITLE}}`, `{{TYPE}}`, `{{PRIORITY}}`, `{{DATE}}`, `{{TEST_MODE}}`, `{{COVERAGE_TARGET}}`
293
+ Replace placeholders:
294
+ - `{{INCREMENT_ID}}`, `{{FEATURE_TITLE}}`, `{{TYPE}}`, `{{PRIORITY}}`, `{{DATE}}`
295
+ - `{{TEST_MODE}}`, `{{COVERAGE_TARGET}}`
296
+ - **`{{PROJECT_ID}}`** ← MANDATORY (from STEP 0B)
217
297
 
218
- #### 4B: Multi-Project Template (umbrella.enabled: true) - USE THIS!
298
+ #### 4B: Multi-Project Template (2-level structure) - USE THIS!
219
299
 
220
300
  **Template File**: `templates/spec-multi-project.md`
221
301
 
222
- Replace placeholders: `{{INCREMENT_ID}}`, `{{FEATURE_TITLE}}`, `{{PROJECT_FE_ID}}`, `{{PROJECT_BE_ID}}`, `{{PROJECT_SHARED_ID}}`, etc.
302
+ Replace placeholders:
303
+ - `{{INCREMENT_ID}}`, `{{FEATURE_TITLE}}`, `{{TYPE}}`, `{{PRIORITY}}`, `{{DATE}}`
304
+ - **`{{PROJECT_ID}}`** ← MANDATORY (from STEP 0B)
305
+ - **`{{BOARD_ID}}`** ← MANDATORY for 2-level (from STEP 0B)
306
+ - `{{PROJECT_FE_ID}}`, `{{PROJECT_BE_ID}}`, `{{PROJECT_SHARED_ID}}` (for multi-repo)
307
+
308
+ **Key Rules for spec.md:**
309
+ 1. **`project:` field MUST be set in YAML frontmatter** (1-level and 2-level)
310
+ 2. **`board:` field MUST be set in YAML frontmatter** (2-level only)
311
+ 3. **User stories grouped by project** if multi-project (Frontend, Backend, Shared, etc.)
312
+ 4. **User story IDs have project prefix**: `US-FE-001`, `US-BE-001` (multi-project)
313
+ 5. **AC-IDs have project prefix**: `AC-FE-US1-01`, `AC-BE-US1-01` (multi-project)
314
+
315
+ **VALIDATION (spec.md frontmatter):**
316
+ ```yaml
317
+ # 1-level structure (REQUIRED):
318
+ project: digital-operations # ← MUST be set
319
+
320
+ # 2-level structure (BOTH REQUIRED):
321
+ project: acme-corp # ← MUST be set
322
+ board: digital-operations # ← MUST be set
323
+ ```
223
324
 
224
- **Key Rules for Multi-Project spec.md:**
225
- 1. **User stories MUST be grouped by project** (Frontend, Backend, Shared, etc.)
226
- 2. **User story IDs MUST have project prefix**: `US-FE-001`, `US-BE-001`, `US-SHARED-001`
227
- 3. **AC-IDs MUST have project prefix**: `AC-FE-US1-01`, `AC-BE-US1-01`
228
- 4. **Each user story MUST have `Related Repo` field**
229
- 5. **Frontmatter MUST include `multi_project: true` and `projects` list**
325
+ **⚠️ FORBIDDEN:**
326
+ - Creating spec.md with `project: {{PROJECT_ID}}` (unresolved placeholder)
327
+ - Creating spec.md for 2-level with `board: {{BOARD_ID}}` (unresolved placeholder)
328
+ - Leaving project/board fields empty or undefined
230
329
 
231
330
  ### STEP 5: Create plan.md Template
232
331
 
@@ -8,6 +8,8 @@ created: {{DATE}}
8
8
  structure: user-stories
9
9
  test_mode: {{TEST_MODE}}
10
10
  coverage_target: {{COVERAGE_TARGET}}
11
+ project: {{PROJECT_ID}}
12
+ board: {{BOARD_ID}}
11
13
  multi_project: true
12
14
  projects:
13
15
  - id: {{PROJECT_FE_ID}}
@@ -8,6 +8,7 @@ created: {{DATE}}
8
8
  structure: user-stories
9
9
  test_mode: {{TEST_MODE}}
10
10
  coverage_target: {{COVERAGE_TARGET}}
11
+ project: {{PROJECT_ID}}
11
12
  ---
12
13
 
13
14
  # Feature: {{FEATURE_TITLE}}
@@ -95,8 +95,31 @@ US-005: Cross-Platform Data Sync (Mobile)
95
95
  └── README.md
96
96
  ```
97
97
 
98
+ **spec.md YAML Frontmatter (v0.31.0+ MANDATORY)**:
99
+
100
+ ```yaml
101
+ # For 1-level structure (projects only)
102
+ ---
103
+ increment: 0001-fitness-tracker-web
104
+ project: FE # REQUIRED
105
+ title: "Fitness Tracker Web UI"
106
+ status: planned
107
+ ---
108
+
109
+ # For 2-level structure (projects + boards)
110
+ ---
111
+ increment: 0001-fitness-tracker-web
112
+ project: acme-corp # REQUIRED
113
+ board: digital-operations # REQUIRED for 2-level
114
+ title: "Fitness Tracker Web UI"
115
+ status: planned
116
+ ---
117
+ ```
118
+
119
+ **Detection**: Use `detectStructureLevel()` from `src/utils/structure-level-detector.ts`
120
+
98
121
  **Each spec contains**:
99
- - Frontmatter with `project: FE` tag
122
+ - YAML frontmatter with `project:` (and `board:` for 2-level) fields - MANDATORY
100
123
  - User stories mapped to that project
101
124
  - Project-specific acceptance criteria
102
125
  - Links to shared infrastructure/requirements
@@ -27,6 +27,24 @@ description: Generates comprehensive specifications (spec.md, plan.md, tasks.md
27
27
  - **Bug Fix**: Problem statement, root cause, solution, impact analysis
28
28
  - **Refactoring**: Current state, proposed changes, benefits, migration plan
29
29
 
30
+ **YAML Frontmatter** (v0.31.0+ MANDATORY):
31
+ ```yaml
32
+ ---
33
+ increment: 0001-feature-name
34
+ title: "Feature Title"
35
+ type: feature
36
+ priority: P1
37
+ status: planned
38
+ created: 2025-12-04
39
+ project: my-project # REQUIRED - target project for living docs sync
40
+ board: my-board # REQUIRED for 2-level structures (ADO area paths, JIRA boards)
41
+ ---
42
+ ```
43
+
44
+ **Detect Structure Level First** (see `src/utils/structure-level-detector.ts`):
45
+ - 1-level: `project:` field REQUIRED
46
+ - 2-level: `project:` AND `board:` fields REQUIRED
47
+
30
48
  **Core Sections** (Always Present):
31
49
  ```markdown
32
50
  # Product Specification: [Increment Name]
@@ -30,6 +30,31 @@ An **increment** = a complete feature with:
30
30
 
31
31
  > **When to skip plan.md**: Bug fixes, simple migrations, hotfixes, and straightforward tasks where spec.md already describes the approach.
32
32
 
33
+ ### spec.md Mandatory Fields (v0.31.0+)
34
+
35
+ **CRITICAL**: spec.md YAML frontmatter MUST include project (and board for 2-level structures):
36
+
37
+ ```yaml
38
+ # 1-level structure (single-project or multiProject):
39
+ ---
40
+ increment: 0001-feature-name
41
+ project: my-project # REQUIRED
42
+ ---
43
+
44
+ # 2-level structure (ADO area paths, JIRA boards, umbrella teams):
45
+ ---
46
+ increment: 0001-feature-name
47
+ project: acme-corp # REQUIRED
48
+ board: digital-operations # REQUIRED for 2-level
49
+ ---
50
+ ```
51
+
52
+ **Why?** Ensures increment syncs to correct location in living docs. Without explicit project/board, sync-specs may fail or place specs in wrong folder.
53
+
54
+ **Detection**: Use `src/utils/structure-level-detector.ts` to determine if 1-level or 2-level structure is needed.
55
+
56
+ **See**: [ADR-0190](/internal/architecture/adr/0190-spec-project-board-requirement.md)
57
+
33
58
  ### Increment Naming Convention (v0.6.0+)
34
59
 
35
60
  **CRITICAL RULE**: All increments MUST use descriptive names, not just numbers!
@@ -280,3 +280,17 @@
280
280
  [Wed Dec 3 02:07:36 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
281
281
  [Wed Dec 3 02:07:36 EST 2025] [GitHub] 🔗 GitHub sync hook fired
282
282
  [Wed Dec 3 02:07:36 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
283
+ [Thu Dec 4 17:45:45 EST 2025] [GitHub] 🔗 GitHub sync hook fired
284
+ [Thu Dec 4 17:45:45 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
285
+ [Thu Dec 4 17:45:45 EST 2025] [GitHub] 🔗 GitHub sync hook fired
286
+ [Thu Dec 4 17:45:45 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
287
+ [Thu Dec 4 17:45:46 EST 2025] [GitHub] 🔗 GitHub sync hook fired
288
+ [Thu Dec 4 17:45:46 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
289
+ [Thu Dec 4 17:45:46 EST 2025] [GitHub] 🔗 GitHub sync hook fired
290
+ [Thu Dec 4 17:45:46 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
291
+ [Thu Dec 4 17:45:55 EST 2025] [GitHub] 🔗 GitHub sync hook fired
292
+ [Thu Dec 4 17:45:55 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
293
+ [Thu Dec 4 17:45:55 EST 2025] [GitHub] 🔗 GitHub sync hook fired
294
+ [Thu Dec 4 17:45:55 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
295
+ [Thu Dec 4 17:45:55 EST 2025] [GitHub] 🔗 GitHub sync hook fired
296
+ [Thu Dec 4 17:45:55 EST 2025] [GitHub] ⚠️ sync-spec-content CLI not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-github/hooks/dist/src/cli/commands/sync-spec-content.js, skipping sync
@@ -421,3 +421,24 @@
421
421
  [2025-12-03 02:07:36] 🎯 Post-Increment-Completion Hook Triggered
422
422
  [2025-12-03 02:07:36] ⚠️ DORA calculator not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
423
423
  [2025-12-03 02:07:36] Run: npm run build
424
+ [2025-12-04 17:45:45] 🎯 Post-Increment-Completion Hook Triggered
425
+ [2025-12-04 17:45:45] ⚠️ DORA calculator not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
426
+ [2025-12-04 17:45:45] Run: npm run build
427
+ [2025-12-04 17:45:45] 🎯 Post-Increment-Completion Hook Triggered
428
+ [2025-12-04 17:45:45] ⚠️ DORA calculator not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
429
+ [2025-12-04 17:45:45] Run: npm run build
430
+ [2025-12-04 17:45:46] 🎯 Post-Increment-Completion Hook Triggered
431
+ [2025-12-04 17:45:46] ⚠️ DORA calculator not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
432
+ [2025-12-04 17:45:46] Run: npm run build
433
+ [2025-12-04 17:45:46] 🎯 Post-Increment-Completion Hook Triggered
434
+ [2025-12-04 17:45:46] ⚠️ DORA calculator not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
435
+ [2025-12-04 17:45:46] Run: npm run build
436
+ [2025-12-04 17:45:55] 🎯 Post-Increment-Completion Hook Triggered
437
+ [2025-12-04 17:45:55] ⚠️ DORA calculator not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
438
+ [2025-12-04 17:45:55] Run: npm run build
439
+ [2025-12-04 17:45:55] 🎯 Post-Increment-Completion Hook Triggered
440
+ [2025-12-04 17:45:55] ⚠️ DORA calculator not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
441
+ [2025-12-04 17:45:55] Run: npm run build
442
+ [2025-12-04 17:45:55] 🎯 Post-Increment-Completion Hook Triggered
443
+ [2025-12-04 17:45:55] ⚠️ DORA calculator not found at /Users/antonabyzov/Documents/Projects/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
444
+ [2025-12-04 17:45:55] Run: npm run build