specweave 0.17.12 → 0.17.15

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 (80) hide show
  1. package/CLAUDE.md +456 -0
  2. package/README.md +38 -1
  3. package/dist/src/cli/commands/cicd-monitor.d.ts +11 -0
  4. package/dist/src/cli/commands/cicd-monitor.d.ts.map +1 -0
  5. package/dist/src/cli/commands/cicd-monitor.js +154 -0
  6. package/dist/src/cli/commands/cicd-monitor.js.map +1 -0
  7. package/dist/src/cli/commands/validate-parent-repo.d.ts +8 -0
  8. package/dist/src/cli/commands/validate-parent-repo.d.ts.map +1 -0
  9. package/dist/src/cli/commands/validate-parent-repo.js +15 -0
  10. package/dist/src/cli/commands/validate-parent-repo.js.map +1 -0
  11. package/dist/src/cli/helpers/issue-tracker/types.d.ts +5 -0
  12. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  13. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  14. package/dist/src/core/cicd/config-loader.d.ts +21 -0
  15. package/dist/src/core/cicd/config-loader.d.ts.map +1 -0
  16. package/dist/src/core/cicd/config-loader.js +190 -0
  17. package/dist/src/core/cicd/config-loader.js.map +1 -0
  18. package/dist/src/core/cicd/index.d.ts +12 -0
  19. package/dist/src/core/cicd/index.d.ts.map +1 -0
  20. package/dist/src/core/cicd/index.js +18 -0
  21. package/dist/src/core/cicd/index.js.map +1 -0
  22. package/dist/src/core/cicd/monitor-service.d.ts +92 -0
  23. package/dist/src/core/cicd/monitor-service.d.ts.map +1 -0
  24. package/dist/src/core/cicd/monitor-service.js +132 -0
  25. package/dist/src/core/cicd/monitor-service.js.map +1 -0
  26. package/dist/src/core/cicd/notifier.d.ts +102 -0
  27. package/dist/src/core/cicd/notifier.d.ts.map +1 -0
  28. package/dist/src/core/cicd/notifier.js +184 -0
  29. package/dist/src/core/cicd/notifier.js.map +1 -0
  30. package/dist/src/core/cicd/parent-repo-validator.d.ts +42 -0
  31. package/dist/src/core/cicd/parent-repo-validator.d.ts.map +1 -0
  32. package/dist/src/core/cicd/parent-repo-validator.js +201 -0
  33. package/dist/src/core/cicd/parent-repo-validator.js.map +1 -0
  34. package/dist/src/core/cicd/state-manager.d.ts +79 -0
  35. package/dist/src/core/cicd/state-manager.d.ts.map +1 -0
  36. package/dist/src/core/cicd/state-manager.js +197 -0
  37. package/dist/src/core/cicd/state-manager.js.map +1 -0
  38. package/dist/src/core/cicd/types.d.ts +119 -0
  39. package/dist/src/core/cicd/types.d.ts.map +1 -0
  40. package/dist/src/core/cicd/types.js +18 -0
  41. package/dist/src/core/cicd/types.js.map +1 -0
  42. package/dist/src/core/cicd/workflow-monitor.d.ts +98 -0
  43. package/dist/src/core/cicd/workflow-monitor.d.ts.map +1 -0
  44. package/dist/src/core/cicd/workflow-monitor.js +215 -0
  45. package/dist/src/core/cicd/workflow-monitor.js.map +1 -0
  46. package/dist/src/core/repo-structure/repo-structure-manager.d.ts +3 -0
  47. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  48. package/dist/src/core/repo-structure/repo-structure-manager.js +5 -2
  49. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  50. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  51. package/dist/src/core/spec-content-sync.js +14 -6
  52. package/dist/src/core/spec-content-sync.js.map +1 -1
  53. package/package.json +2 -2
  54. package/plugins/specweave/agents/pm/AGENT.md +170 -2
  55. package/plugins/specweave/hooks/post-increment-planning.sh +89 -26
  56. package/plugins/specweave/hooks/user-prompt-submit.sh +4 -4
  57. package/plugins/specweave/skills/increment-planner/SKILL.md +15 -10
  58. package/plugins/specweave-ado/lib/ado-project-detector.js +32 -5
  59. package/plugins/specweave-ado/lib/ado-project-detector.ts +44 -5
  60. package/src/templates/AGENTS.md.template +55 -1
  61. package/src/templates/CLAUDE.md.template +51 -1
  62. package/dist/locales/de/.gitkeep +0 -0
  63. package/dist/locales/de/cli.json +0 -108
  64. package/dist/locales/en/cli.json +0 -287
  65. package/dist/locales/en/errors.json +0 -7
  66. package/dist/locales/en/templates.json +0 -6
  67. package/dist/locales/es/.gitkeep +0 -0
  68. package/dist/locales/es/cli.json +0 -41
  69. package/dist/locales/fr/.gitkeep +0 -0
  70. package/dist/locales/fr/cli.json +0 -108
  71. package/dist/locales/ja/.gitkeep +0 -0
  72. package/dist/locales/ja/cli.json +0 -108
  73. package/dist/locales/ko/.gitkeep +0 -0
  74. package/dist/locales/ko/cli.json +0 -108
  75. package/dist/locales/pt/.gitkeep +0 -0
  76. package/dist/locales/pt/cli.json +0 -108
  77. package/dist/locales/ru/.gitkeep +0 -0
  78. package/dist/locales/ru/cli.json +0 -269
  79. package/dist/locales/zh/.gitkeep +0 -0
  80. package/dist/locales/zh/cli.json +0 -108
@@ -30,7 +30,7 @@ if echo "$PROMPT" | grep -q "/specweave:increment"; then
30
30
  # Check active increments using MetadataManager
31
31
  ACTIVE_COUNT=$(node -e "
32
32
  try {
33
- const { MetadataManager } = require('./dist/core/increment/metadata-manager.js');
33
+ const { MetadataManager } = require('./dist/src/core/increment/metadata-manager.js');
34
34
  const active = MetadataManager.getActive();
35
35
  console.log(active.length);
36
36
  } catch (e) {
@@ -44,7 +44,7 @@ if echo "$PROMPT" | grep -q "/specweave:increment"; then
44
44
  # Get list of active increments for error message
45
45
  ACTIVE_LIST=$(node -e "
46
46
  try {
47
- const { MetadataManager } = require('./dist/core/increment/metadata-manager.js');
47
+ const { MetadataManager } = require('./dist/src/core/increment/metadata-manager.js');
48
48
  const active = MetadataManager.getActive();
49
49
  active.forEach(inc => console.log(' - ' + inc.id + ' [' + inc.type + ']'));
50
50
  } catch (e) {}
@@ -64,7 +64,7 @@ EOF
64
64
  # Get list of active increments for warning
65
65
  ACTIVE_LIST=$(node -e "
66
66
  try {
67
- const { MetadataManager } = require('./dist/core/increment/metadata-manager.js');
67
+ const { MetadataManager } = require('./dist/src/core/increment/metadata-manager.js');
68
68
  const active = MetadataManager.getActive();
69
69
  active.forEach(inc => console.log(' - ' + inc.id + ' [' + inc.type + ']'));
70
70
  } catch (e) {}
@@ -231,7 +231,7 @@ if [[ -d ".specweave/increments" ]]; then
231
231
  # Get status line from cache (ultra-fast)
232
232
  STATUS_LINE=$(node -e "
233
233
  try {
234
- const { StatusLineManager } = require('./dist/core/status-line/status-line-manager.js');
234
+ const { StatusLineManager } = require('./dist/src/core/status-line/status-line-manager.js');
235
235
  const manager = new StatusLineManager(process.cwd());
236
236
  const result = manager.render();
237
237
  console.log(result || '');
@@ -110,13 +110,15 @@ This skill activates automatically when users say:
110
110
 
111
111
  ---
112
112
 
113
- ## 🆕 Multi-Project Support (v0.8.0+)
113
+ ## 🆕 Multi-Project Support (v0.8.0+ | Flattened v0.16.11+)
114
114
 
115
115
  **Key Changes**:
116
- - Specs are now organized by project: `.specweave/docs/internal/projects/{project-id}/specs/`
117
- - Use `ProjectManager` (from `src/core/project-manager.ts`) to get correct paths
118
- - Single project uses `projects/default/` automatically (transparent)
116
+ - **CORRECT** (v0.16.11+): Specs organized with FLATTENED structure: `.specweave/docs/internal/specs/{project-id}/`
117
+ - **OLD** (v0.8.0-v0.16.10): `.specweave/docs/internal/projects/{project-id}/specs/` (DEPRECATED nested structure)
118
+ - Use `ProjectManager` (from `src/core/project-manager.ts`) to get correct paths (always returns flattened structure)
119
+ - Single project uses `specs/default/` automatically (transparent)
119
120
  - Multi-project mode allows multiple teams/repos
121
+ - Parent repo content goes to `specs/_parent/` (for multi-repo setups with parent repositories)
120
122
 
121
123
  **Path Resolution**:
122
124
  ```typescript
@@ -177,7 +179,7 @@ Task(
177
179
  1. Spec (living docs - SOURCE OF TRUTH, permanent):
178
180
  - IMPORTANT: Use ProjectManager to get correct path for active project
179
181
  - Create at: {projectManager.getSpecsPath()}/spec-{number}-{name}.md
180
- (This resolves to projects/{activeProject}/specs/ automatically)
182
+ (This resolves to specs/{activeProject}/ with FLATTENED structure v0.16.11+)
181
183
  - This is the COMPLETE, PERMANENT source of truth
182
184
  - Include ALL of:
183
185
  * User stories (US-001, US-002, etc.) with full details
@@ -299,17 +301,20 @@ STEP 6: Validate Living Docs and Increment Files
299
301
 
300
302
  #### Living Spec (Living Docs - Source of Truth) ✅
301
303
  ```
302
- .specweave/docs/internal/projects/{project-id}/specs/ # ← Multi-project (v0.8.0+)
304
+ .specweave/docs/internal/specs/{project-id}/ # ← FLATTENED structure (v0.16.11+)
303
305
  └── spec-{number}-{name}.md # ← PM Agent (MANDATORY)
304
306
  # COMPLETE user stories, AC, requirements
305
307
  # This is the PERMANENT source of truth
306
308
  # Can be linked to Jira/ADO/GitHub Issues
307
309
  # Persists after increment completes
308
310
 
309
- # Examples:
310
- # Single project: projects/default/specs/spec-001-user-auth.md
311
- # Multi-project: projects/web-app/specs/spec-001-user-auth.md
312
- # projects/mobile/specs/spec-001-push-notifications.md
311
+ # Examples (v0.16.11+ Flattened):
312
+ # Single project: specs/default/spec-001-user-auth.md
313
+ # Multi-project: specs/web-app/spec-001-user-auth.md
314
+ # specs/mobile/spec-001-push-notifications.md
315
+ # Parent repo: specs/_parent/spec-002-system-architecture.md
316
+
317
+ # OLD (v0.8.0-v0.16.10): projects/default/specs/... ← DEPRECATED
313
318
  ```
314
319
 
315
320
  #### Strategy Docs (Optional, High-Level) ⚠️
@@ -233,15 +233,15 @@ class AdoProjectDetector {
233
233
  */
234
234
  async detectFromContent(content) {
235
235
  const candidates = this.analyzeContent(content);
236
- if (candidates[0]?.confidence > 0.7) {
236
+ if (candidates[0]?.confidence >= 0.7) {
237
237
  return {
238
238
  primary: candidates[0].project,
239
239
  confidence: candidates[0].confidence,
240
240
  strategy: this.strategy
241
241
  };
242
242
  }
243
- if (candidates[0]?.confidence > 0.4) {
244
- const secondary = candidates.slice(1).filter((c) => c.confidence > 0.3).map((c) => c.project);
243
+ if (candidates[0]?.confidence >= 0.4) {
244
+ const secondary = candidates.slice(1).filter((c) => c.confidence >= 0.3).map((c) => c.project);
245
245
  return {
246
246
  primary: candidates[0].project,
247
247
  secondary: secondary.length > 0 ? secondary : void 0,
@@ -306,7 +306,7 @@ class AdoProjectDetector {
306
306
  */
307
307
  async detectMultiProject(content) {
308
308
  const candidates = this.analyzeContent(content);
309
- const significantProjects = candidates.filter((c) => c.confidence > 0.3);
309
+ const significantProjects = candidates.filter((c) => c.confidence >= 0.3);
310
310
  if (significantProjects.length === 0) {
311
311
  return {
312
312
  primary: this.availableProjects[0] || "Unknown",
@@ -328,11 +328,38 @@ class AdoProjectDetector {
328
328
  */
329
329
  mapToAreaPath(content, project) {
330
330
  const areaPaths = process.env.AZURE_DEVOPS_AREA_PATHS?.split(",").map((a) => a.trim()) || [];
331
+ const lowerContent = content.toLowerCase();
331
332
  for (const areaPath of areaPaths) {
332
- if (content.toLowerCase().includes(areaPath.toLowerCase())) {
333
+ if (lowerContent.includes(areaPath.toLowerCase())) {
333
334
  return `${project}\\${areaPath}`;
334
335
  }
335
336
  }
337
+ const areaPathKeywordMap = {
338
+ "Frontend": ["WebApp", "frontend"],
339
+ "Backend": ["backend", "api", "server"],
340
+ "Mobile": ["MobileApp", "mobile", "ios", "android"],
341
+ "Infrastructure": ["Platform", "infrastructure"],
342
+ "Data": ["DataService", "data", "analytics"]
343
+ };
344
+ let bestMatch = { areaPath: "", confidence: 0 };
345
+ for (const areaPath of areaPaths) {
346
+ const relatedTypes = areaPathKeywordMap[areaPath] || [areaPath];
347
+ let matchCount = 0;
348
+ for (const projectType of relatedTypes) {
349
+ const keywords = this.projectKeywords[projectType] || [];
350
+ for (const keyword of keywords) {
351
+ if (lowerContent.includes(keyword.toLowerCase())) {
352
+ matchCount++;
353
+ }
354
+ }
355
+ }
356
+ if (matchCount > bestMatch.confidence) {
357
+ bestMatch = { areaPath, confidence: matchCount };
358
+ }
359
+ }
360
+ if (bestMatch.confidence >= 2) {
361
+ return `${project}\\${bestMatch.areaPath}`;
362
+ }
336
363
  return project;
337
364
  }
338
365
  /**
@@ -202,7 +202,7 @@ export class AdoProjectDetector {
202
202
  const candidates = this.analyzeContent(content);
203
203
 
204
204
  // High confidence: Auto-select
205
- if (candidates[0]?.confidence > 0.7) {
205
+ if (candidates[0]?.confidence >= 0.7) {
206
206
  return {
207
207
  primary: candidates[0].project,
208
208
  confidence: candidates[0].confidence,
@@ -211,10 +211,10 @@ export class AdoProjectDetector {
211
211
  }
212
212
 
213
213
  // Medium confidence: Primary with secondary projects
214
- if (candidates[0]?.confidence > 0.4) {
214
+ if (candidates[0]?.confidence >= 0.4) {
215
215
  const secondary = candidates
216
216
  .slice(1)
217
- .filter(c => c.confidence > 0.3)
217
+ .filter(c => c.confidence >= 0.3)
218
218
  .map(c => c.project);
219
219
 
220
220
  return {
@@ -299,7 +299,7 @@ export class AdoProjectDetector {
299
299
  const candidates = this.analyzeContent(content);
300
300
 
301
301
  // Get all projects with meaningful confidence
302
- const significantProjects = candidates.filter(c => c.confidence > 0.3);
302
+ const significantProjects = candidates.filter(c => c.confidence >= 0.3);
303
303
 
304
304
  if (significantProjects.length === 0) {
305
305
  return {
@@ -330,13 +330,52 @@ export class AdoProjectDetector {
330
330
  */
331
331
  mapToAreaPath(content: string, project: string): string {
332
332
  const areaPaths = process.env.AZURE_DEVOPS_AREA_PATHS?.split(',').map(a => a.trim()) || [];
333
+ const lowerContent = content.toLowerCase();
333
334
 
335
+ // First try exact area path name match
334
336
  for (const areaPath of areaPaths) {
335
- if (content.toLowerCase().includes(areaPath.toLowerCase())) {
337
+ if (lowerContent.includes(areaPath.toLowerCase())) {
336
338
  return `${project}\\${areaPath}`;
337
339
  }
338
340
  }
339
341
 
342
+ // Try keyword-based detection using PROJECT_KEYWORDS
343
+ // Map area paths to common project types
344
+ const areaPathKeywordMap: { [key: string]: string[] } = {
345
+ 'Frontend': ['WebApp', 'frontend'],
346
+ 'Backend': ['backend', 'api', 'server'],
347
+ 'Mobile': ['MobileApp', 'mobile', 'ios', 'android'],
348
+ 'Infrastructure': ['Platform', 'infrastructure'],
349
+ 'Data': ['DataService', 'data', 'analytics']
350
+ };
351
+
352
+ let bestMatch = { areaPath: '', confidence: 0 };
353
+
354
+ for (const areaPath of areaPaths) {
355
+ // Get related project types for this area path
356
+ const relatedTypes = areaPathKeywordMap[areaPath] || [areaPath];
357
+ let matchCount = 0;
358
+
359
+ for (const projectType of relatedTypes) {
360
+ // Check if this project type has keywords defined
361
+ const keywords = this.projectKeywords[projectType] || [];
362
+ for (const keyword of keywords) {
363
+ if (lowerContent.includes(keyword.toLowerCase())) {
364
+ matchCount++;
365
+ }
366
+ }
367
+ }
368
+
369
+ if (matchCount > bestMatch.confidence) {
370
+ bestMatch = { areaPath, confidence: matchCount };
371
+ }
372
+ }
373
+
374
+ // Return best match if confidence is high enough
375
+ if (bestMatch.confidence >= 2) {
376
+ return `${project}\\${bestMatch.areaPath}`;
377
+ }
378
+
340
379
  // Default area path
341
380
  return project;
342
381
  }
@@ -22,6 +22,11 @@ This is a **SpecWeave project** where specifications and documentation are the s
22
22
 
23
23
  ## Project Structure
24
24
 
25
+ **IMPORTANT**: This project uses {MONOREPO_OR_SINGLE} mode.
26
+
27
+ {#IF_SINGLE_PROJECT}
28
+ ### Single Project Structure
29
+
25
30
  ```
26
31
  .specweave/
27
32
  ├── increments/ # Feature increments (auto-numbered)
@@ -36,7 +41,8 @@ This is a **SpecWeave project** where specifications and documentation are the s
36
41
  │ └── reports/ # Analysis, completion reports
37
42
  ├── docs/internal/
38
43
  │ ├── strategy/ # Business specs (WHAT, WHY)
39
- │ ├── specs/ # Feature specifications (detailed requirements)
44
+ │ ├── specs/ # Feature specifications (living docs)
45
+ │ │ └── default/ # ✅ All specs in default project
40
46
  │ ├── architecture/ # Technical design (HOW)
41
47
  │ ├── delivery/ # Roadmap, CI/CD, guides
42
48
  │ ├── operations/ # Runbooks, SLOs
@@ -55,6 +61,54 @@ plugins/ # Optional plugins (extended capabilities)
55
61
  ├── agents/ # Plugin-specific agents
56
62
  └── commands/ # Plugin-specific commands
57
63
  ```
64
+ {#ENDIF}
65
+
66
+ {#IF_MULTI_PROJECT}
67
+ ### Multi-Project Structure (v0.16.11+ Flattened)
68
+
69
+ **CRITICAL**: Specs are organized by project with FLATTENED structure (v0.16.11+).
70
+
71
+ ```
72
+ .specweave/
73
+ ├── docs/internal/
74
+ │ ├── strategy/ # Cross-project strategy
75
+ │ ├── specs/ # ✅ FLATTENED structure (v0.16.11+)
76
+ │ │ ├── backend/ # Backend project specs
77
+ │ │ │ ├── spec-001-api-auth.md
78
+ │ │ │ └── spec-002-data-layer.md
79
+ │ │ ├── frontend/ # Frontend project specs
80
+ │ │ │ ├── spec-001-user-dashboard.md
81
+ │ │ │ └── spec-002-dark-mode.md
82
+ │ │ ├── mobile/ # Mobile project specs (if applicable)
83
+ │ │ │ └── spec-001-push-notifications.md
84
+ │ │ └── _parent/ # Parent repo specs (multi-repo only)
85
+ │ │ └── spec-001-system-architecture.md
86
+ │ ├── architecture/ # System-wide technical design
87
+ │ ├── delivery/ # Cross-project delivery
88
+ │ ├── operations/ # Cross-project operations
89
+ │ └── governance/ # Cross-project governance
90
+ ├── increments/
91
+ │ ├── 0001-backend-auth/ # Backend increment
92
+ │ ├── 0002-frontend-ui/ # Frontend increment
93
+ │ └── 0003-mobile-push/ # Mobile increment
94
+ └── ...
95
+ ```
96
+
97
+ **Living Docs Path Format**:
98
+ - ✅ **CORRECT** (v0.16.11+): `.specweave/docs/internal/specs/{project-id}/spec-NNN-name.md`
99
+ - ❌ **OLD** (v0.8.0-v0.16.10): `.specweave/docs/internal/projects/{project-id}/specs/...` (DEPRECATED)
100
+
101
+ **Project Detection** (automatic):
102
+ - **From increment name**: `0001-backend-auth` → project: `backend`
103
+ - **From tech stack**: React/Next.js → `frontend`, ASP.NET/Node.js → `backend`
104
+ - **From config**: `multiProject.activeProject` in `.specweave/config.json`
105
+ - **Fallback**: Uses `default` project
106
+
107
+ **When creating living docs specs**:
108
+ 1. Detect project from increment name or tech stack
109
+ 2. Use flattened path: `specs/{project-id}/spec-NNN-name.md`
110
+ 3. Never use old nested structure: `projects/{project-id}/specs/...`
111
+ {#ENDIF}
58
112
 
59
113
  **CRITICAL**: Always read `context-manifest.yaml` first! Only load files listed there.
60
114
 
@@ -289,13 +289,19 @@ Config: Auto-detected from project files
289
289
 
290
290
  ## Project Structure
291
291
 
292
+ **IMPORTANT**: This project uses {MONOREPO_OR_SINGLE} mode.
293
+
294
+ {#IF_SINGLE_PROJECT}
295
+ ### Single Project Structure
296
+
292
297
  ```
293
298
  {PROJECT_NAME}/
294
299
  ├── .specweave/
295
300
  │ ├── docs/ # Strategic documentation
296
301
  │ │ ├── internal/
297
302
  │ │ │ ├── strategy/ # Business specs (WHAT, WHY)
298
- │ │ │ ├── specs/ # Feature specifications (detailed requirements)
303
+ │ │ │ ├── specs/ # Feature specifications (living docs)
304
+ │ │ │ │ └── default/ # ✅ All specs in default project
299
305
  │ │ │ ├── architecture/ # Technical design (HOW)
300
306
  │ │ │ ├── delivery/ # Guides, roadmap, CI/CD
301
307
  │ │ │ ├── operations/ # Runbooks, monitoring
@@ -319,6 +325,50 @@ Config: Auto-detected from project files
319
325
  ├── CLAUDE.md # This file
320
326
  └── src/ # Your source code
321
327
  ```
328
+ {#ENDIF}
329
+
330
+ {#IF_MULTI_PROJECT}
331
+ ### Multi-Project Structure (v0.16.11+ Flattened)
332
+
333
+ **CRITICAL**: Specs are organized by project with FLATTENED structure (v0.16.11+).
334
+
335
+ ```
336
+ {PROJECT_NAME}/
337
+ ├── .specweave/
338
+ │ ├── docs/internal/
339
+ │ │ ├── strategy/ # Cross-project strategy
340
+ │ │ ├── specs/ # ✅ FLATTENED structure (v0.16.11+)
341
+ │ │ │ ├── backend/ # Backend project specs
342
+ │ │ │ │ ├── spec-001-api-auth.md
343
+ │ │ │ │ └── spec-002-data-layer.md
344
+ │ │ │ ├── frontend/ # Frontend project specs
345
+ │ │ │ │ ├── spec-001-user-dashboard.md
346
+ │ │ │ │ └── spec-002-dark-mode.md
347
+ │ │ │ ├── mobile/ # Mobile project specs (if applicable)
348
+ │ │ │ │ └── spec-001-push-notifications.md
349
+ │ │ │ └── _parent/ # Parent repo specs (multi-repo only)
350
+ │ │ │ └── spec-001-system-architecture.md
351
+ │ │ ├── architecture/ # System-wide technical design
352
+ │ │ ├── delivery/ # Cross-project delivery
353
+ │ │ ├── operations/ # Cross-project operations
354
+ │ │ └── governance/ # Cross-project governance
355
+ │ ├── increments/
356
+ │ │ ├── 0001-backend-auth/ # Backend increment
357
+ │ │ ├── 0002-frontend-ui/ # Frontend increment
358
+ │ │ └── 0003-mobile-push/ # Mobile increment
359
+ │ └── ...
360
+ ```
361
+
362
+ **Living Docs Path Format**:
363
+ - ✅ **CORRECT** (v0.16.11+): `.specweave/docs/internal/specs/{project-id}/spec-NNN-name.md`
364
+ - ❌ **OLD** (v0.8.0-v0.16.10): `.specweave/docs/internal/projects/{project-id}/specs/...` (DEPRECATED)
365
+
366
+ **Project Detection** (automatic):
367
+ - **From increment name**: `0001-backend-auth` → project: `backend`
368
+ - **From tech stack**: React/Next.js → `frontend`, ASP.NET/Node.js → `backend`
369
+ - **From config**: `multiProject.activeProject` in `.specweave/config.json`
370
+ - **Fallback**: Uses `default` project
371
+ {#ENDIF}
322
372
 
323
373
  ---
324
374
 
File without changes
@@ -1,108 +0,0 @@
1
- {
2
- "init": {
3
- "welcome": "🚀 SpecWeave Initialization",
4
- "projectName": "Project name:",
5
- "projectNamePrompt": "Project name (for templates):",
6
- "projectNameDefault": "my-saas",
7
- "detectingTool": "Detecting AI tool...",
8
- "foundClaude": "✅ Found Claude Code",
9
- "foundCursor": "✅ Found Cursor",
10
- "foundCopilot": "✅ Found GitHub Copilot",
11
- "noToolDetected": "No AI tool detected, using Generic adapter",
12
- "complete": "✨ Initialization complete!",
13
- "claudeNativeComplete": "✨ Claude Code native installation complete!",
14
- "claudeNativeBenefits": "✅ Native skills, agents, hooks work out of the box",
15
- "projectSuccess": "SpecWeave project created successfully!",
16
- "readyToBuild": "🚀 Ready to build with SpecWeave!",
17
- "errors": {
18
- "invalidName": "Project name must contain only lowercase letters, numbers, and hyphens",
19
- "alreadyExists": ".specweave directory already exists",
20
- "cancelled": "❌ Initialization cancelled",
21
- "invalidLanguage": "❌ Invalid language: {{language}}",
22
- "supportedLanguages": "Supported languages: {{languages}}",
23
- "nestedNotSupported": "❌ Nested .specweave/ folders are NOT supported!",
24
- "parentFound": "Found parent .specweave/ at:",
25
- "projectCreationFailed": "Failed to create project",
26
- "commandsCopyFailed": "❌ Commands copy failed: {{error}}",
27
- "agentsCopyFailed": "❌ Agents copy failed: {{error}}",
28
- "skillsCopyFailed": "❌ Skills copy failed: {{error}}",
29
- "hooksCopyFailed": "❌ Hooks copy failed: {{error}}"
30
- },
31
- "warnings": {
32
- "invalidDirName": "⚠️ Current directory name '{{dirName}}' contains invalid characters.",
33
- "directoryNotEmpty": "⚠️ Current directory contains {{count}} file{{plural}}.",
34
- "skillsIndexWarning": "⚠️ Warning: Could not generate skills index: {{error}}",
35
- "skillsIndexNote": "Skills will still work, but manual indexing may be needed."
36
- },
37
- "prompts": {
38
- "confirmInitInCurrent": "Initialize SpecWeave in current directory?",
39
- "overwriteSpecweave": ".specweave directory already exists. Overwrite?",
40
- "overwriteDirectory": "Directory {{projectName}} already exists. Overwrite?",
41
- "enablePlugins": "Enable suggested plugins now?"
42
- },
43
- "info": {
44
- "nestedEnforcement": "SpecWeave enforces a single source of truth:",
45
- "nestedBullet1": "• Use the parent folder for all increments",
46
- "nestedBullet2": "• Increments can span multiple subdirectories",
47
- "nestedBullet3": "• See CLAUDE.md section \"Root-Level .specweave/ Folder\"",
48
- "nestedToFix": "To fix:",
49
- "suggestedPlugins": "💡 Suggested Plugins:",
50
- "copiedFiles": "✓ Copied {{count}} command files",
51
- "copiedAgents": "✓ Copied {{count}} agent directories",
52
- "copiedSkills": "✓ Copied {{count}} skill directories",
53
- "copiedHooks": "✓ Copied {{count}} hook files"
54
- },
55
- "progress": {
56
- "creatingProject": "Creating SpecWeave project...",
57
- "detected": "Detected {{tool}}...",
58
- "usingTool": "Using {{tool}}...",
59
- "directoryCreated": "Directory structure created...",
60
- "templatesCopied": "Base templates copied...",
61
- "installingComponents": "Installing Claude Code components...",
62
- "commandsInstalled": "Slash commands installed...",
63
- "agentsInstalled": "Agents installed...",
64
- "skillsInstalled": "Skills installed...",
65
- "hooksInstalled": "Hooks installed...",
66
- "generatingIndex": "Generating skills index...",
67
- "indexGenerated": "Skills index generated...",
68
- "installingAdapter": "Installing {{tool}} adapter...",
69
- "projectSuccess": "SpecWeave project created successfully!",
70
- "detectingPlugins": "Detecting plugins...",
71
- "detectedPlugins": "Detected {{count}} suggested plugins",
72
- "enablingPlugins": "Enabling plugins...",
73
- "enabledPlugin": "Enabled {{plugin}}",
74
- "pluginsEnabled": "Plugins enabled"
75
- },
76
- "nextSteps": {
77
- "header": "🎯 Next steps:",
78
- "cd": "cd {{projectName}}",
79
- "footer": "🚀 Ready to build with SpecWeave!",
80
- "docsLink": "Documentation: https://spec-weave.com",
81
- "githubLink": "GitHub: https://github.com/anton-abyzov/specweave"
82
- }
83
- },
84
- "increment": {
85
- "creating": "📝 Creating increment: {name}",
86
- "created": "✅ Increment {id} created successfully!",
87
- "nextStepDo": "Next: Run /specweave.do to start implementation",
88
- "errors": {
89
- "incompleteFound": "Cannot create new increment! Previous increments incomplete"
90
- }
91
- },
92
- "progress": {
93
- "currentIncrement": "Current Increment: {id}",
94
- "status": "Status: {status}",
95
- "completion": "Completion: {percent}%"
96
- },
97
- "translate": {
98
- "translating": "🌐 Translating content to {language}...",
99
- "complete": "✅ Translation complete!"
100
- },
101
- "version": {
102
- "current": "SpecWeave version: {version}"
103
- },
104
- "errors": {
105
- "fileNotFound": "❌ File not found: {path}",
106
- "invalidConfig": "❌ Invalid configuration: {error}"
107
- }
108
- }