specweave 0.9.1 → 0.10.1

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 (75) hide show
  1. package/CLAUDE.md +153 -13
  2. package/README.md +97 -251
  3. package/bin/install-agents.sh +1 -1
  4. package/bin/install-commands.sh +1 -1
  5. package/bin/install-hooks.sh +1 -1
  6. package/bin/install-skills.sh +1 -1
  7. package/bin/specweave.js +32 -0
  8. package/dist/cli/commands/init.d.ts.map +1 -1
  9. package/dist/cli/commands/init.js +29 -1
  10. package/dist/cli/commands/init.js.map +1 -1
  11. package/dist/cli/commands/validate-jira.d.ts +35 -0
  12. package/dist/cli/commands/validate-jira.d.ts.map +1 -0
  13. package/dist/cli/commands/validate-jira.js +112 -0
  14. package/dist/cli/commands/validate-jira.js.map +1 -0
  15. package/dist/cli/commands/validate-plugins.d.ts +41 -0
  16. package/dist/cli/commands/validate-plugins.d.ts.map +1 -0
  17. package/dist/cli/commands/validate-plugins.js +171 -0
  18. package/dist/cli/commands/validate-plugins.js.map +1 -0
  19. package/dist/core/types/sync-profile.d.ts +177 -29
  20. package/dist/core/types/sync-profile.d.ts.map +1 -1
  21. package/dist/core/types/sync-profile.js +48 -1
  22. package/dist/core/types/sync-profile.js.map +1 -1
  23. package/dist/hooks/lib/translate-living-docs.d.ts.map +1 -1
  24. package/dist/hooks/lib/translate-living-docs.js +16 -7
  25. package/dist/hooks/lib/translate-living-docs.js.map +1 -1
  26. package/dist/metrics/dora-calculator.d.ts +7 -3
  27. package/dist/metrics/dora-calculator.d.ts.map +1 -1
  28. package/dist/metrics/dora-calculator.js +19 -6
  29. package/dist/metrics/dora-calculator.js.map +1 -1
  30. package/dist/metrics/report-generator.d.ts +17 -0
  31. package/dist/metrics/report-generator.d.ts.map +1 -0
  32. package/dist/metrics/report-generator.js +403 -0
  33. package/dist/metrics/report-generator.js.map +1 -0
  34. package/dist/utils/external-resource-validator.d.ts +102 -0
  35. package/dist/utils/external-resource-validator.d.ts.map +1 -0
  36. package/dist/utils/external-resource-validator.js +400 -0
  37. package/dist/utils/external-resource-validator.js.map +1 -0
  38. package/dist/utils/plugin-validator.d.ts +161 -0
  39. package/dist/utils/plugin-validator.d.ts.map +1 -0
  40. package/dist/utils/plugin-validator.js +565 -0
  41. package/dist/utils/plugin-validator.js.map +1 -0
  42. package/package.json +2 -1
  43. package/plugins/specweave/commands/specweave-do.md +47 -0
  44. package/plugins/specweave/commands/specweave-increment.md +82 -0
  45. package/plugins/specweave/commands/specweave-next.md +47 -0
  46. package/plugins/specweave/hooks/post-increment-planning.sh +117 -38
  47. package/plugins/specweave/hooks/pre-tool-use.sh +133 -0
  48. package/plugins/specweave/plugin.json +22 -0
  49. package/plugins/specweave/skills/SKILLS-INDEX.md +23 -2
  50. package/plugins/specweave/skills/plugin-installer/SKILL.md +340 -0
  51. package/plugins/specweave/skills/plugin-validator/SKILL.md +427 -0
  52. package/plugins/specweave-ado/.claude-plugin/plugin.json +2 -4
  53. package/plugins/specweave-ado/lib/ado-board-resolver.ts +328 -0
  54. package/plugins/specweave-ado/lib/ado-hierarchical-sync.ts +484 -0
  55. package/plugins/specweave-ado/plugin.json +20 -0
  56. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +15 -2
  57. package/plugins/specweave-backend/.claude-plugin/plugin.json +15 -2
  58. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +14 -2
  59. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +14 -2
  60. package/plugins/specweave-docs/.claude-plugin/plugin.json +13 -2
  61. package/plugins/specweave-figma/.claude-plugin/plugin.json +14 -2
  62. package/plugins/specweave-frontend/.claude-plugin/plugin.json +15 -2
  63. package/plugins/specweave-github/lib/github-board-resolver.ts +164 -0
  64. package/plugins/specweave-github/lib/github-hierarchical-sync.ts +344 -0
  65. package/plugins/specweave-github/plugin.json +19 -0
  66. package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +15 -2
  67. package/plugins/specweave-jira/.claude-plugin/plugin.json +14 -2
  68. package/plugins/specweave-jira/lib/jira-board-resolver.ts +127 -0
  69. package/plugins/specweave-jira/lib/jira-hierarchical-sync.ts +283 -0
  70. package/plugins/specweave-jira/plugin.json +20 -0
  71. package/plugins/specweave-jira/skills/jira-resource-validator/SKILL.md +647 -0
  72. package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +14 -2
  73. package/plugins/specweave-payments/.claude-plugin/plugin.json +14 -2
  74. package/plugins/specweave-testing/.claude-plugin/plugin.json +14 -2
  75. package/plugins/specweave-tooling/.claude-plugin/plugin.json +13 -2
@@ -0,0 +1,647 @@
1
+ ---
2
+ name: jira-resource-validator
3
+ description: Validates Jira projects and boards exist, creates missing resources automatically. Smart enough to prompt user to select existing or create new projects. For boards, accepts either IDs (validates existence) or names (creates boards and updates .env with IDs). Activates for jira setup, jira validation, jira configuration, missing jira project, missing jira boards, jira .env setup.
4
+ allowed-tools: Read, Bash, Write, Edit
5
+ ---
6
+
7
+ # Jira Resource Validator Skill
8
+
9
+ **Purpose**: Validate and auto-create Jira projects and boards, ensuring .env configuration is correct.
10
+
11
+ **Auto-Activation**: Triggers when Jira setup or validation is needed.
12
+
13
+ ## What This Skill Does
14
+
15
+ This skill ensures your Jira configuration in `.env` is valid and all resources exist. It's **smart enough** to:
16
+
17
+ 1. **Validate Jira projects** - Check if `JIRA_PROJECT` exists
18
+ 2. **Prompt for action** - Select existing project or create new one
19
+ 3. **Validate Jira boards** - Check if boards exist (by ID or name)
20
+ 4. **Create missing boards** - If board names provided, create them automatically
21
+ 5. **Update .env with IDs** - Replace board names with actual board IDs after creation
22
+
23
+ ## When This Skill Activates
24
+
25
+ ✅ **Automatically activates when**:
26
+ - You set up Jira integration for the first time
27
+ - You run `/specweave-jira:sync` and resources are missing
28
+ - Your `.env` has invalid Jira configuration
29
+ - You mention "jira setup" or "jira validation"
30
+
31
+ ## Jira Configuration Structure
32
+
33
+ ### Required .env Variables
34
+
35
+ ```bash
36
+ JIRA_API_TOKEN=your_token_here
37
+ JIRA_EMAIL=your_email@company.com
38
+ JIRA_DOMAIN=yourcompany.atlassian.net
39
+ JIRA_STRATEGY=board-based
40
+ JIRA_PROJECT=PROJECTKEY
41
+ JIRA_BOARDS=1,2,3 # IDs (if exist) OR names (if creating)
42
+ ```
43
+
44
+ ### Smart Per-Board Detection (Mixed Mode Support!)
45
+
46
+ **The system is smart enough to handle ANY combination of IDs and names:**
47
+
48
+ **All IDs** (validate existing boards):
49
+ ```bash
50
+ JIRA_BOARDS=1,2,3
51
+ ```
52
+ → Validates boards 1, 2, 3 exist
53
+
54
+ **All Names** (create new boards):
55
+ ```bash
56
+ JIRA_BOARDS=Frontend,Backend,Mobile
57
+ ```
58
+ → Creates 3 boards, updates .env with IDs: `JIRA_BOARDS=101,102,103`
59
+
60
+ **Mixed IDs and Names** (smart handling!):
61
+ ```bash
62
+ JIRA_BOARDS=101,102,QA,Dashboard
63
+ ```
64
+ → Validates 101, 102 exist
65
+ → Creates "QA" and "Dashboard" boards
66
+ → Updates .env: `JIRA_BOARDS=101,102,103,104` (all IDs!)
67
+
68
+ **How it works**: Each entry is checked individually:
69
+ - Numeric (e.g., "123") → Validate ID exists
70
+ - Non-numeric (e.g., "QA") → Create board with that name
71
+ - After creation, .env is updated with ALL board IDs
72
+
73
+ ## Validation Flow
74
+
75
+ ### Step 1: Project Validation
76
+
77
+ **Check if project exists**:
78
+ ```bash
79
+ # API call to Jira
80
+ GET /rest/api/3/project/PROJECTKEY
81
+ ```
82
+
83
+ **If project exists**:
84
+ ```
85
+ ✅ Project "PROJECTKEY" exists
86
+ ID: 10001
87
+ Name: My Project
88
+ ```
89
+
90
+ **If project doesn't exist**:
91
+ ```
92
+ ⚠️ Project "PROJECTKEY" not found
93
+
94
+ What would you like to do?
95
+ 1. Select an existing project
96
+ 2. Create a new project
97
+ 3. Cancel
98
+
99
+ Your choice [1]:
100
+ ```
101
+
102
+ **Option 1: Select Existing**:
103
+ ```
104
+ Available projects:
105
+ 1. PROJ1 - Project One
106
+ 2. PROJ2 - Project Two
107
+ 3. PROJ3 - Project Three
108
+
109
+ Select a project [1]:
110
+
111
+ ✅ Updated .env: JIRA_PROJECT=PROJ1
112
+ ```
113
+
114
+ **Option 2: Create New**:
115
+ ```
116
+ Enter project name: My New Project
117
+
118
+ 📦 Creating Jira project: PROJECTKEY (My New Project)...
119
+ ✅ Project created: PROJECTKEY (ID: 10005)
120
+ ```
121
+
122
+ ### Step 2: Board Validation (Per-Board Smart Detection)
123
+
124
+ **Scenario A: All Board IDs** (all numeric):
125
+ ```bash
126
+ JIRA_BOARDS=1,2,3
127
+ ```
128
+
129
+ **Validation**:
130
+ ```
131
+ Checking boards: 1,2,3...
132
+ ✅ Board 1: Frontend Board (exists)
133
+ ✅ Board 2: Backend Board (exists)
134
+ ⚠️ Board 3: Not found
135
+
136
+ ⚠️ Issues found: 1 board(s)
137
+ ```
138
+
139
+ **Scenario B: All Board Names** (all non-numeric):
140
+ ```bash
141
+ JIRA_BOARDS=Frontend,Backend,Mobile
142
+ ```
143
+
144
+ **Auto-creation**:
145
+ ```
146
+ Checking boards: Frontend,Backend,Mobile...
147
+ 📦 Creating board: Frontend...
148
+ ✅ Created: Frontend (ID: 101)
149
+ 📦 Creating board: Backend...
150
+ ✅ Created: Backend (ID: 102)
151
+ 📦 Creating board: Mobile...
152
+ ✅ Created: Mobile (ID: 103)
153
+
154
+ 📝 Updating .env with board IDs...
155
+ ✅ Updated JIRA_BOARDS: 101,102,103
156
+
157
+ ✅ All boards validated/created successfully
158
+ ```
159
+
160
+ **Scenario C: Mixed IDs and Names** (SMART!):
161
+ ```bash
162
+ JIRA_BOARDS=101,102,QA,Dashboard
163
+ ```
164
+
165
+ **Smart handling**:
166
+ ```
167
+ Checking boards: 101,102,QA,Dashboard...
168
+ ✅ Board 101: Frontend Board (exists)
169
+ ✅ Board 102: Backend Board (exists)
170
+ 📦 Creating board: QA...
171
+ ✅ Created: QA (ID: 103)
172
+ 📦 Creating board: Dashboard...
173
+ ✅ Created: Dashboard (ID: 104)
174
+
175
+ 📝 Updating .env with board IDs...
176
+ ✅ Updated JIRA_BOARDS: 101,102,103,104
177
+
178
+ ✅ All boards validated/created successfully
179
+ ```
180
+
181
+ ## Usage Examples
182
+
183
+ ### Example 1: Fresh Jira Setup
184
+
185
+ **Scenario**: New project, no Jira resources exist yet
186
+
187
+ **Action**: Run `/specweave-jira:sync`
188
+
189
+ **What Happens**:
190
+ ```bash
191
+ 🔍 Validating Jira configuration...
192
+
193
+ Checking project: MINIDOOM...
194
+ ⚠️ Project "MINIDOOM" not found
195
+
196
+ What would you like to do?
197
+ 1. Select an existing project
198
+ 2. Create a new project
199
+ 3. Cancel
200
+
201
+ Your choice [2]: 2
202
+
203
+ Enter project name: Mini DOOM Tournament
204
+
205
+ 📦 Creating Jira project: MINIDOOM (Mini DOOM Tournament)...
206
+ ✅ Project created: MINIDOOM (ID: 10005)
207
+
208
+ Checking boards: Frontend,Backend,Mobile...
209
+ 📦 Creating boards from names...
210
+
211
+ Creating board: Frontend in project MINIDOOM...
212
+ ✅ Board created: Frontend (ID: 101)
213
+
214
+ Creating board: Backend in project MINIDOOM...
215
+ ✅ Board created: Backend (ID: 102)
216
+
217
+ Creating board: Mobile in project MINIDOOM...
218
+ ✅ Board created: Mobile (ID: 103)
219
+
220
+ ✅ Updated .env: JIRA_BOARDS=101,102,103
221
+
222
+ 🎉 Jira configuration complete! All resources ready.
223
+ ```
224
+
225
+ **Result**: `.env` now has correct project and board IDs
226
+
227
+ ### Example 2: Select Existing Project
228
+
229
+ **Scenario**: Project already exists in Jira
230
+
231
+ **Action**: Run validation
232
+
233
+ **What Happens**:
234
+ ```bash
235
+ 🔍 Validating Jira configuration...
236
+
237
+ Checking project: PROJ...
238
+ ⚠️ Project "PROJ" not found
239
+
240
+ What would you like to do?
241
+ 1. Select an existing project
242
+ 2. Create a new project
243
+ 3. Cancel
244
+
245
+ Your choice [1]: 1
246
+
247
+ Available projects:
248
+ 1. FRONTEND - Frontend Team
249
+ 2. BACKEND - Backend Team
250
+ 3. MOBILE - Mobile Team
251
+
252
+ Select a project [1]: 2
253
+
254
+ ✅ Updated .env: JIRA_PROJECT=BACKEND
255
+ ✅ Project "BACKEND" exists
256
+
257
+ Checking boards: 45,46...
258
+ ✅ All boards exist
259
+ ```
260
+
261
+ ### Example 3: Mixed Board IDs (Some Exist, Some Don't)
262
+
263
+ **Scenario**: Some board IDs are invalid
264
+
265
+ **Action**: Run validation
266
+
267
+ **What Happens**:
268
+ ```bash
269
+ 🔍 Validating Jira configuration...
270
+
271
+ Checking project: PROJECTKEY...
272
+ ✅ Project "PROJECTKEY" exists
273
+
274
+ Checking boards: 1,2,999...
275
+
276
+ Board 1: ✅ Exists (Frontend Board)
277
+ Board 2: ✅ Exists (Backend Board)
278
+ Board 999: ❌ Not found
279
+
280
+ ⚠️ Boards not found: 999
281
+
282
+ Available boards in project PROJECTKEY:
283
+ 1. Frontend Board (ID: 1)
284
+ 2. Backend Board (ID: 2)
285
+ 3. QA Board (ID: 3)
286
+ 4. DevOps Board (ID: 4)
287
+
288
+ Would you like to:
289
+ 1. Remove invalid board (999) from configuration
290
+ 2. Replace with correct board ID
291
+ 3. Create new board
292
+
293
+ Your choice [2]: 2
294
+
295
+ Enter correct board ID or name: 3
296
+
297
+ ✅ Updated .env: JIRA_BOARDS=1,2,3
298
+ ```
299
+
300
+ ## CLI Command
301
+
302
+ **Manual validation**:
303
+ ```bash
304
+ # From TypeScript
305
+ npx tsx src/utils/external-resource-validator.ts
306
+
307
+ # Or via skill activation
308
+ "Can you validate my Jira configuration?"
309
+ ```
310
+
311
+ **Validation output**:
312
+ ```typescript
313
+ {
314
+ valid: true,
315
+ project: {
316
+ exists: true,
317
+ key: 'PROJECTKEY',
318
+ id: '10001',
319
+ name: 'My Project'
320
+ },
321
+ boards: {
322
+ valid: true,
323
+ existing: [1, 2, 3],
324
+ missing: [],
325
+ created: []
326
+ },
327
+ envUpdated: false
328
+ }
329
+ ```
330
+
331
+ ## Smart Board Creation Logic (Per-Board Detection)
332
+
333
+ ### Detection Algorithm
334
+
335
+ ```typescript
336
+ // Parse JIRA_BOARDS from .env
337
+ const boardsConfig = "101,102,QA,Dashboard"; // Mixed!
338
+ const boardEntries = boardsConfig.split(',').map(b => b.trim());
339
+ const finalBoardIds = [];
340
+
341
+ // Check EACH board individually
342
+ for (const entry of boardEntries) {
343
+ const isNumeric = /^\d+$/.test(entry);
344
+
345
+ if (isNumeric) {
346
+ // Entry is a board ID - validate it exists
347
+ const boardId = parseInt(entry);
348
+ const board = await checkBoard(boardId);
349
+ if (board) {
350
+ console.log(`✅ Board ${boardId}: ${board.name} (exists)`);
351
+ finalBoardIds.push(boardId);
352
+ } else {
353
+ console.error(`⚠️ Board ${boardId}: Not found`);
354
+ }
355
+ } else {
356
+ // Entry is a board name - create it
357
+ console.log(`📦 Creating board: ${entry}...`);
358
+ const board = await createBoard(entry, projectKey);
359
+ console.log(`✅ Created: ${entry} (ID: ${board.id})`);
360
+ finalBoardIds.push(board.id);
361
+ }
362
+ }
363
+
364
+ // Update .env if any boards were created
365
+ if (createdBoardIds.length > 0) {
366
+ updateEnv({ JIRA_BOARDS: finalBoardIds.join(',') });
367
+ }
368
+ ```
369
+
370
+ **Key improvement**: Per-board detection instead of all-or-nothing!
371
+ - `JIRA_BOARDS=1,2,3` → Validates all IDs
372
+ - `JIRA_BOARDS=A,B,C` → Creates all boards
373
+ - `JIRA_BOARDS=1,2,C` → Validates 1,2, creates C (mixed!)
374
+
375
+ ### Board Creation API
376
+
377
+ **Jira REST API** (v3):
378
+ ```bash
379
+ POST /rest/api/3/board
380
+ Content-Type: application/json
381
+
382
+ {
383
+ "name": "Frontend Board",
384
+ "type": "scrum",
385
+ "filterId": 10000, # Filter for project issues
386
+ "location": {
387
+ "type": "project",
388
+ "projectKeyOrId": "PROJECTKEY" # CRITICAL: Associates board with project
389
+ }
390
+ }
391
+
392
+ Response:
393
+ {
394
+ "id": 101,
395
+ "name": "Frontend Board",
396
+ "type": "scrum"
397
+ }
398
+ ```
399
+
400
+ **IMPORTANT**: The `location` field is **MANDATORY** to associate the board with a project. Without it, Jira creates the board but leaves it detached, requiring manual connection via the UI.
401
+
402
+ **Filter creation** (required for board):
403
+ ```bash
404
+ POST /rest/api/3/filter
405
+ Content-Type: application/json
406
+
407
+ {
408
+ "name": "PROJECTKEY Issues",
409
+ "jql": "project = PROJECTKEY"
410
+ }
411
+
412
+ Response:
413
+ {
414
+ "id": 10000
415
+ }
416
+ ```
417
+
418
+ ## Configuration Examples
419
+
420
+ ### Example 1: All Names (Create Boards)
421
+
422
+ **Before** (`.env`):
423
+ ```bash
424
+ JIRA_PROJECT=PROJ
425
+ JIRA_BOARDS=Frontend,Backend,QA,DevOps
426
+ ```
427
+
428
+ **After validation**:
429
+ ```bash
430
+ JIRA_PROJECT=PROJ
431
+ JIRA_BOARDS=101,102,103,104
432
+ ```
433
+
434
+ **What happened**:
435
+ - Detected non-numeric values (names)
436
+ - Created 4 boards in Jira
437
+ - Updated .env with actual board IDs
438
+
439
+ ### Example 2: All IDs (Validate Existing)
440
+
441
+ **Before** (`.env`):
442
+ ```bash
443
+ JIRA_PROJECT=PROJ
444
+ JIRA_BOARDS=1,2,3
445
+ ```
446
+
447
+ **After validation**:
448
+ ```bash
449
+ JIRA_PROJECT=PROJ
450
+ JIRA_BOARDS=1,2,3
451
+ ```
452
+
453
+ **What happened**:
454
+ - Detected numeric values (IDs)
455
+ - Validated all boards exist
456
+ - No changes needed
457
+
458
+ ### Example 3: Mixed IDs and Names (SMART!)
459
+
460
+ **Before** (`.env`):
461
+ ```bash
462
+ JIRA_PROJECT=PROJ
463
+ JIRA_BOARDS=101,102,QA,Dashboard
464
+ ```
465
+
466
+ **After validation**:
467
+ ```bash
468
+ JIRA_PROJECT=PROJ
469
+ JIRA_BOARDS=101,102,103,104
470
+ ```
471
+
472
+ **What happened**:
473
+ - Validated boards 101, 102 exist
474
+ - Created "QA" board (got ID 103)
475
+ - Created "Dashboard" board (got ID 104)
476
+ - Updated .env with ALL board IDs
477
+ - **This is the key feature** - you can mix existing IDs with new board names!
478
+
479
+ ### Example 4: Fix Invalid Project
480
+
481
+ **Before** (`.env`):
482
+ ```bash
483
+ JIRA_PROJECT=NONEXISTENT
484
+ JIRA_BOARDS=1,2
485
+ ```
486
+
487
+ **After validation** (user selected existing project):
488
+ ```bash
489
+ JIRA_PROJECT=EXISTINGPROJ
490
+ JIRA_BOARDS=1,2
491
+ ```
492
+
493
+ **What happened**:
494
+ - Project NONEXISTENT not found
495
+ - User selected EXISTINGPROJ from list
496
+ - Updated .env with correct project key
497
+
498
+ ## Error Handling
499
+
500
+ ### Error 1: Invalid Credentials
501
+
502
+ **Symptom**: API calls fail with 401 Unauthorized
503
+
504
+ **Solution**:
505
+ ```
506
+ ❌ Jira API authentication failed
507
+
508
+ Please check:
509
+ 1. JIRA_API_TOKEN is correct
510
+ 2. JIRA_EMAIL matches your Jira account
511
+ 3. JIRA_DOMAIN is correct (yourcompany.atlassian.net)
512
+
513
+ Generate new token at:
514
+ https://id.atlassian.com/manage-profile/security/api-tokens
515
+ ```
516
+
517
+ ### Error 2: Insufficient Permissions
518
+
519
+ **Symptom**: Cannot create projects/boards (403 Forbidden)
520
+
521
+ **Solution**:
522
+ ```
523
+ ❌ Insufficient permissions to create resources
524
+
525
+ You need:
526
+ - Project Creator permission (for projects)
527
+ - Board Creator permission (for boards)
528
+
529
+ Contact your Jira administrator to request permissions.
530
+ ```
531
+
532
+ ### Error 3: Project Key Already Taken
533
+
534
+ **Symptom**: Project creation fails (key exists)
535
+
536
+ **Solution**:
537
+ ```
538
+ ❌ Project key "PROJ" already exists
539
+
540
+ Options:
541
+ 1. Use a different project key
542
+ 2. Select the existing project
543
+ 3. Cancel
544
+
545
+ Your choice [2]:
546
+ ```
547
+
548
+ ### Error 4: Network/API Errors
549
+
550
+ **Symptom**: API calls timeout or fail
551
+
552
+ **Solution**:
553
+ ```
554
+ ❌ Jira API error: Request timeout
555
+
556
+ Please check:
557
+ 1. Internet connection
558
+ 2. Jira domain is correct
559
+ 3. Jira is not down (check status.atlassian.com)
560
+
561
+ Retry? [Y/n]:
562
+ ```
563
+
564
+ ## Integration with SpecWeave Workflow
565
+
566
+ ### Automatic Validation
567
+
568
+ When using `/specweave-jira:sync`, validation runs automatically:
569
+
570
+ ```bash
571
+ /specweave-jira:sync 0014
572
+
573
+ # Internally calls:
574
+ 1. validateJiraResources()
575
+ 2. Fix missing project/boards
576
+ 3. Proceed with sync
577
+ ```
578
+
579
+ ### Manual Validation
580
+
581
+ Run validation independently:
582
+
583
+ ```bash
584
+ # Via skill
585
+ "Validate my Jira configuration"
586
+
587
+ # Via TypeScript
588
+ npx tsx src/utils/external-resource-validator.ts
589
+
590
+ # Via CLI (future)
591
+ specweave validate-jira
592
+ ```
593
+
594
+ ## Best Practices
595
+
596
+ ✅ **Use board names for initial setup**:
597
+ ```bash
598
+ JIRA_BOARDS=Sprint-1,Sprint-2,Backlog
599
+ ```
600
+ - System creates boards automatically
601
+ - Updates .env with IDs
602
+ - One-time setup, then use IDs
603
+
604
+ ✅ **Use board IDs after creation**:
605
+ ```bash
606
+ JIRA_BOARDS=101,102,103
607
+ ```
608
+ - Faster validation (no creation needed)
609
+ - More reliable (IDs don't change)
610
+
611
+ ✅ **Keep .env in version control** (gitignored tokens):
612
+ ```bash
613
+ # Commit project/board structure
614
+ JIRA_PROJECT=PROJ
615
+ JIRA_BOARDS=101,102,103
616
+
617
+ # Don't commit sensitive data
618
+ JIRA_API_TOKEN=<redacted>
619
+ JIRA_EMAIL=<redacted>
620
+ ```
621
+
622
+ ✅ **Document board mapping** (in README):
623
+ ```markdown
624
+ ## Jira Boards
625
+
626
+ - Board 101: Frontend Team
627
+ - Board 102: Backend Team
628
+ - Board 103: QA Team
629
+ ```
630
+
631
+ ## Summary
632
+
633
+ This skill ensures your Jira configuration is **always valid** by:
634
+
635
+ 1. ✅ **Validating projects** - Check if project exists, prompt to select or create
636
+ 2. ✅ **Validating boards** - Check if boards exist (IDs) or create them (names)
637
+ 3. ✅ **Auto-updating .env** - Replace board names with IDs after creation
638
+ 4. ✅ **Clear error messages** - Actionable guidance for all failures
639
+ 5. ✅ **Non-blocking** - Graceful degradation with manual fallback
640
+
641
+ **Result**: Zero manual Jira setup - system handles everything!
642
+
643
+ ---
644
+
645
+ **Skill Version**: 1.0.0
646
+ **Introduced**: SpecWeave v0.9.5
647
+ **Last Updated**: 2025-11-09
@@ -3,6 +3,18 @@
3
3
  "description": "Kubernetes deployment and management for SpecWeave projects. Generate K8s manifests, Helm charts, and GitOps workflows. Includes security policies (NetworkPolicy, RBAC) and best practices for production deployments.",
4
4
  "version": "1.0.0",
5
5
  "author": {
6
- "name": "SpecWeave Team"
7
- }
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
+ "kubernetes",
14
+ "k8s",
15
+ "helm",
16
+ "deployment",
17
+ "gitops",
18
+ "specweave"
19
+ ]
8
20
  }
@@ -3,6 +3,18 @@
3
3
  "description": "Payment processing integration for Stripe, PayPal, and billing automation. Includes checkout flows, subscription lifecycle management, PCI DSS compliance guidance, and recurring billing. Focus on production-ready payment systems.",
4
4
  "version": "1.0.0",
5
5
  "author": {
6
- "name": "SpecWeave Team"
7
- }
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
+ "payments",
14
+ "stripe",
15
+ "paypal",
16
+ "billing",
17
+ "pci-compliance",
18
+ "specweave"
19
+ ]
8
20
  }
@@ -3,6 +3,18 @@
3
3
  "description": "End-to-end browser testing with Playwright. Validates user flows, captures screenshots, checks accessibility, and visual regression. Test execution infrastructure for SpecWeave increments.",
4
4
  "version": "1.0.0",
5
5
  "author": {
6
- "name": "SpecWeave Team"
7
- }
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
+ "testing",
14
+ "playwright",
15
+ "e2e",
16
+ "browser-automation",
17
+ "visual-regression",
18
+ "specweave"
19
+ ]
8
20
  }