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.
- package/CLAUDE.md +43 -0
- package/dist/src/cli/workers/living-docs-worker.js +80 -44
- package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +26 -14
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +137 -71
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/llm/index.d.ts +1 -0
- package/dist/src/core/llm/index.d.ts.map +1 -1
- package/dist/src/core/llm/index.js +2 -0
- package/dist/src/core/llm/index.js.map +1 -1
- package/dist/src/core/llm/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/anthropic-provider.js +15 -26
- package/dist/src/core/llm/providers/anthropic-provider.js.map +1 -1
- package/dist/src/core/llm/providers/azure-openai-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/azure-openai-provider.js +13 -5
- package/dist/src/core/llm/providers/azure-openai-provider.js.map +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.js +12 -8
- package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
- package/dist/src/core/llm/providers/claude-code-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/claude-code-provider.js +15 -25
- package/dist/src/core/llm/providers/claude-code-provider.js.map +1 -1
- package/dist/src/core/llm/providers/ollama-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/ollama-provider.js +12 -9
- package/dist/src/core/llm/providers/ollama-provider.js.map +1 -1
- package/dist/src/core/llm/providers/openai-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/openai-provider.js +13 -6
- package/dist/src/core/llm/providers/openai-provider.js.map +1 -1
- package/dist/src/core/llm/providers/vertex-ai-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/vertex-ai-provider.js +12 -8
- package/dist/src/core/llm/providers/vertex-ai-provider.js.map +1 -1
- package/dist/src/utils/llm-json-extractor.d.ts +105 -0
- package/dist/src/utils/llm-json-extractor.d.ts.map +1 -0
- package/dist/src/utils/llm-json-extractor.js +336 -0
- package/dist/src/utils/llm-json-extractor.js.map +1 -0
- package/dist/src/utils/structure-level-detector.d.ts +105 -0
- package/dist/src/utils/structure-level-detector.d.ts.map +1 -0
- package/dist/src/utils/structure-level-detector.js +388 -0
- package/dist/src/utils/structure-level-detector.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/specweave-increment.md +57 -9
- package/plugins/specweave/commands/specweave-sync-specs.md +37 -6
- package/plugins/specweave/hooks/hooks.json +10 -0
- package/plugins/specweave/hooks/spec-project-validator.sh +111 -0
- package/plugins/specweave/skills/increment-planner/SKILL.md +109 -10
- package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +2 -0
- package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +1 -0
- package/plugins/specweave/skills/multi-project-spec-mapper/SKILL.md +24 -1
- package/plugins/specweave/skills/spec-generator/SKILL.md +18 -0
- package/plugins/specweave/skills/specweave-framework/SKILL.md +25 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +14 -0
- 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 (
|
|
289
|
+
#### 4A: Single-Project Template (1-level structure)
|
|
213
290
|
|
|
214
291
|
**Template File**: `templates/spec-single-project.md`
|
|
215
292
|
|
|
216
|
-
Replace placeholders:
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
|
|
@@ -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
|
-
-
|
|
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
|