@comfanion/workflow 3.0.0

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 (95) hide show
  1. package/README.md +185 -0
  2. package/bin/cli.js +406 -0
  3. package/package.json +50 -0
  4. package/src/build-info.json +16 -0
  5. package/src/opencode/ARCHITECTURE.md +255 -0
  6. package/src/opencode/FLOW.yaml +900 -0
  7. package/src/opencode/agents/analyst.md +141 -0
  8. package/src/opencode/agents/architect.md +177 -0
  9. package/src/opencode/agents/change-manager.md +263 -0
  10. package/src/opencode/agents/dev.md +171 -0
  11. package/src/opencode/agents/module-docs.md +628 -0
  12. package/src/opencode/agents/pm.md +157 -0
  13. package/src/opencode/agents/researcher.md +254 -0
  14. package/src/opencode/agents/sm.md +184 -0
  15. package/src/opencode/agents/workflow-orchestrator.md +249 -0
  16. package/src/opencode/checklists/architecture-checklist.md +166 -0
  17. package/src/opencode/checklists/code-review-checklist.md +151 -0
  18. package/src/opencode/checklists/prd-checklist.md +140 -0
  19. package/src/opencode/checklists/requirements-checklist.md +86 -0
  20. package/src/opencode/checklists/story-checklist.md +137 -0
  21. package/src/opencode/commands/architecture.md +68 -0
  22. package/src/opencode/commands/archive.md +146 -0
  23. package/src/opencode/commands/change.md +169 -0
  24. package/src/opencode/commands/clarify.md +132 -0
  25. package/src/opencode/commands/code-review.md +96 -0
  26. package/src/opencode/commands/coding-standards.md +102 -0
  27. package/src/opencode/commands/dev-story.md +80 -0
  28. package/src/opencode/commands/diagram.md +152 -0
  29. package/src/opencode/commands/epics.md +52 -0
  30. package/src/opencode/commands/help.md +139 -0
  31. package/src/opencode/commands/jira-sync.md +58 -0
  32. package/src/opencode/commands/module-docs.md +158 -0
  33. package/src/opencode/commands/prd.md +63 -0
  34. package/src/opencode/commands/quick.md +166 -0
  35. package/src/opencode/commands/requirements.md +49 -0
  36. package/src/opencode/commands/research.md +113 -0
  37. package/src/opencode/commands/sprint-plan.md +59 -0
  38. package/src/opencode/commands/stories.md +61 -0
  39. package/src/opencode/commands/validate.md +84 -0
  40. package/src/opencode/commands/workflow-status.md +150 -0
  41. package/src/opencode/config.yaml +223 -0
  42. package/src/opencode/opencode.json +36 -0
  43. package/src/opencode/skills/acceptance-criteria/SKILL.md +212 -0
  44. package/src/opencode/skills/adr-writing/SKILL.md +241 -0
  45. package/src/opencode/skills/architecture-design/SKILL.md +183 -0
  46. package/src/opencode/skills/architecture-validation/SKILL.md +199 -0
  47. package/src/opencode/skills/archiving/SKILL.md +191 -0
  48. package/src/opencode/skills/changelog/SKILL.md +280 -0
  49. package/src/opencode/skills/code-review/SKILL.md +193 -0
  50. package/src/opencode/skills/coding-standards/SKILL.md +430 -0
  51. package/src/opencode/skills/diagram-creation/SKILL.md +273 -0
  52. package/src/opencode/skills/doc-todo/SKILL.md +325 -0
  53. package/src/opencode/skills/epic-writing/SKILL.md +291 -0
  54. package/src/opencode/skills/jira-integration/SKILL.md +560 -0
  55. package/src/opencode/skills/methodologies/SKILL.md +376 -0
  56. package/src/opencode/skills/module-documentation/SKILL.md +214 -0
  57. package/src/opencode/skills/prd-validation/SKILL.md +164 -0
  58. package/src/opencode/skills/prd-writing/SKILL.md +104 -0
  59. package/src/opencode/skills/requirements-gathering/SKILL.md +132 -0
  60. package/src/opencode/skills/requirements-validation/SKILL.md +141 -0
  61. package/src/opencode/skills/research-methodology/SKILL.md +140 -0
  62. package/src/opencode/skills/sprint-planning/SKILL.md +217 -0
  63. package/src/opencode/skills/story-writing/SKILL.md +574 -0
  64. package/src/opencode/skills/test-design/SKILL.md +313 -0
  65. package/src/opencode/skills/translation/SKILL.md +411 -0
  66. package/src/opencode/templates/CHANGELOG.md +82 -0
  67. package/src/opencode/templates/adr-template.md +115 -0
  68. package/src/opencode/templates/architecture-template.md +362 -0
  69. package/src/opencode/templates/change-proposal-template.md +186 -0
  70. package/src/opencode/templates/epic-template.md +151 -0
  71. package/src/opencode/templates/git-workflow-template.md +384 -0
  72. package/src/opencode/templates/integration-tests-template.md +265 -0
  73. package/src/opencode/templates/jira-cache-template.yaml +103 -0
  74. package/src/opencode/templates/module-index-template.md +139 -0
  75. package/src/opencode/templates/module-test-cases-template.md +230 -0
  76. package/src/opencode/templates/prd-acceptance-criteria-template.md +124 -0
  77. package/src/opencode/templates/prd-template.md +479 -0
  78. package/src/opencode/templates/requirements-template.md +132 -0
  79. package/src/opencode/templates/sprint-status-template.yaml +84 -0
  80. package/src/opencode/templates/story-template.md +437 -0
  81. package/src/opencode/templates/testing-standards-template.md +359 -0
  82. package/src/opencode/workflows/dev-story/instructions.md +529 -0
  83. package/src/repo-structure/.gitattributes +64 -0
  84. package/src/repo-structure/CONTRIBUTING.md +182 -0
  85. package/src/repo-structure/README.md +77 -0
  86. package/src/repo-structure/docs/README.md +62 -0
  87. package/src/repo-structure/docs/api/README.md +43 -0
  88. package/src/repo-structure/docs/architecture/README.md +36 -0
  89. package/src/repo-structure/docs/architecture/adr/README.md +53 -0
  90. package/src/repo-structure/docs/architecture/diagrams/README.md +59 -0
  91. package/src/repo-structure/docs/coding-standards/README.md +52 -0
  92. package/src/repo-structure/docs/confluence/README.md +43 -0
  93. package/src/repo-structure/docs/requirements/README.md +28 -0
  94. package/src/repo-structure/docs/sprint-artifacts/README.md +76 -0
  95. package/src/repo-structure/docs/sprint-artifacts/backlog/README.md +24 -0
@@ -0,0 +1,560 @@
1
+ # Jira Integration Skill
2
+
3
+ > **Purpose**: Bidirectional sync between local docs and Jira with development control
4
+ > **Used by**: SM agent, Dev agent
5
+
6
+ ---
7
+
8
+ ## Overview
9
+
10
+ ```
11
+ ┌─────────────────────────────────────────────────────────────────┐
12
+ │ JIRA INTEGRATION │
13
+ ├─────────────────────────────────────────────────────────────────┤
14
+ │ │
15
+ │ User Input Cache Jira API │
16
+ │ ─────────── ────── ───────── │
17
+ │ • Links (optional) → jira-cache.yaml ←→ REST API │
18
+ │ • Project key (local state) (remote) │
19
+ │ │
20
+ │ ┌─────────────────────────────────────────────────────────┐ │
21
+ │ │ HIERARCHY │ │
22
+ │ │ Epic (PROJ-E01) │ │
23
+ │ │ └── Story (PROJ-S01) │ │
24
+ │ │ └── Task (PROJ-T01) │ │
25
+ │ │ └── Task (PROJ-T02) │ │
26
+ │ └─────────────────────────────────────────────────────────┘ │
27
+ │ │
28
+ │ ┌─────────────────────────────────────────────────────────┐ │
29
+ │ │ DEVELOPMENT CONTROL MODE │ │
30
+ │ │ Backlog → Planned → In Progress → Review → QA → Done │ │
31
+ │ └─────────────────────────────────────────────────────────┘ │
32
+ │ │
33
+ └─────────────────────────────────────────────────────────────────┘
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Configuration
39
+
40
+ ### config.yaml
41
+
42
+ ```yaml
43
+ jira:
44
+ enabled: true
45
+ base_url: "https://your-domain.atlassian.net"
46
+ project_key: "PROJ"
47
+
48
+ cache:
49
+ enabled: true
50
+ file: "{project-root}/.opencode/jira-cache.yaml"
51
+ ttl_minutes: 30
52
+
53
+ control_development: true
54
+
55
+ required_statuses:
56
+ backlog: ["Backlog", "To Do"]
57
+ planned: ["Planned", "Ready"]
58
+ in_progress: ["In Progress"]
59
+ review: ["In Review", "Code Review"]
60
+ qa: ["QA", "Testing"]
61
+ done: ["Done", "Closed"]
62
+ ```
63
+
64
+ ### Environment Variables
65
+
66
+ ```bash
67
+ export JIRA_EMAIL="your-email@company.com"
68
+ export JIRA_API_TOKEN="your-api-token"
69
+ ```
70
+
71
+ ---
72
+
73
+ ## User Input Modes
74
+
75
+ ### Mode 1: User Provides Links
76
+
77
+ ```
78
+ User: "Sync with https://jira.company.com/browse/PROJ-123, PROJ-124"
79
+
80
+ Agent:
81
+ 1. Parse links → extract keys [PROJ-123, PROJ-124]
82
+ 2. Fetch from Jira API
83
+ 3. Find related issues (parent/children)
84
+ 4. Show found issues
85
+ 5. Ask: "Which do you want to update?"
86
+ ```
87
+
88
+ ### Mode 2: No Links (Auto-Create)
89
+
90
+ ```
91
+ User: "Create epics in Jira"
92
+
93
+ Agent:
94
+ 1. Read local docs (epics, stories)
95
+ 2. Check cache for existing Jira issues
96
+ 3. Show what will be created/updated
97
+ 4. Ask: "Proceed with creation?"
98
+ 5. Create in configured project
99
+ ```
100
+
101
+ ### Mode 3: Mixed
102
+
103
+ ```
104
+ User: "Sync epic PROJ-E01 with local docs"
105
+
106
+ Agent:
107
+ 1. Fetch PROJ-E01 from Jira
108
+ 2. Find local epic-01.md
109
+ 3. Compare and show differences
110
+ 4. Ask: "Update Jira or local?"
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Cache System
116
+
117
+ ### Cache File: `.opencode/jira-cache.yaml`
118
+
119
+ ```yaml
120
+ metadata:
121
+ last_sync: "2024-01-20T10:30:00Z"
122
+ cache_ttl_minutes: 30
123
+
124
+ project:
125
+ key: "PROJ"
126
+ statuses: [...]
127
+ workflow_valid: true
128
+
129
+ sprints:
130
+ - id: "123"
131
+ name: "Sprint 5"
132
+ state: "active"
133
+
134
+ epics:
135
+ - key: "PROJ-E01"
136
+ summary: "Product Catalog"
137
+ status: "In Progress"
138
+ local_doc: "docs/sprint-artifacts/sprint-1/epic-01.md"
139
+ stories:
140
+ - key: "PROJ-S01"
141
+ summary: "Product Aggregate"
142
+ status: "In Progress"
143
+ branch: "feature/PROJ-S01-product-aggregate"
144
+ tasks: [...]
145
+
146
+ lookup:
147
+ by_key: {...}
148
+ by_local_doc: {...}
149
+ by_status: {...}
150
+
151
+ pending_sync:
152
+ create: []
153
+ update: []
154
+ ```
155
+
156
+ ### Cache Operations
157
+
158
+ | Operation | When |
159
+ |-----------|------|
160
+ | **Refresh** | TTL expired, manual request |
161
+ | **Update** | After Jira API call |
162
+ | **Invalidate** | Config changed, errors |
163
+ | **Lookup** | Every agent query |
164
+
165
+ ### Cache Usage Flow
166
+
167
+ ```
168
+ Agent needs Jira data
169
+
170
+ ├─► Check cache exists?
171
+ │ ├─► No: Full refresh from API
172
+ │ └─► Yes: Check TTL
173
+ │ ├─► Expired: Refresh from API
174
+ │ └─► Valid: Use cache
175
+
176
+ └─► Return data
177
+ ```
178
+
179
+ ---
180
+
181
+ ## Workflow: Initial Setup
182
+
183
+ ### Step 1: Validate Project
184
+
185
+ ```xml
186
+ <step n="1" goal="Validate Jira project and statuses">
187
+ <action>Read config.yaml → jira settings</action>
188
+ <action>Call Jira API: GET /rest/api/3/project/{key}</action>
189
+ <action>Get available statuses: GET /rest/api/3/status</action>
190
+
191
+ <check if="project not found">
192
+ <ask>Project {key} not found. Enter correct project key:</ask>
193
+ </check>
194
+
195
+ <action>Map Jira statuses to required_statuses</action>
196
+ <action>Store mapping in cache</action>
197
+ </step>
198
+ ```
199
+
200
+ ### Step 2: Validate Workflow Statuses
201
+
202
+ ```xml
203
+ <step n="2" goal="Ensure required statuses exist">
204
+ <action>Check each required status category has at least one match</action>
205
+
206
+ <check if="missing statuses">
207
+ <output>
208
+ ⚠️ Missing required statuses for workflow:
209
+
210
+ | Category | Required | Found | Status |
211
+ |----------|----------|-------|--------|
212
+ | backlog | ✓ | "Backlog" | ✅ |
213
+ | in_progress | ✓ | "In Progress" | ✅ |
214
+ | review | ✓ | - | ❌ MISSING |
215
+ | qa | ✓ | - | ❌ MISSING |
216
+ | done | ✓ | "Done" | ✅ |
217
+
218
+ **Options:**
219
+ 1. Add missing statuses to Jira project
220
+ 2. Map existing statuses to these categories
221
+ 3. Disable development control mode
222
+ </output>
223
+ <ask>Choose option (1/2/3):</ask>
224
+
225
+ <on choice="2">
226
+ <ask>Which existing status should map to "review"?</ask>
227
+ <action>Update config with custom mapping</action>
228
+ </on>
229
+ </check>
230
+
231
+ <action>Mark workflow_valid: true in cache</action>
232
+ </step>
233
+ ```
234
+
235
+ ---
236
+
237
+ ## Workflow: Sync Epics
238
+
239
+ ### User provides links
240
+
241
+ ```xml
242
+ <workflow name="sync-with-links">
243
+ <input>User provides Jira links or keys</input>
244
+
245
+ <step n="1" goal="Parse and fetch">
246
+ <action>Extract keys from links</action>
247
+ <action>Fetch issues from Jira API</action>
248
+ <action>Fetch children (stories under epic)</action>
249
+ </step>
250
+
251
+ <step n="2" goal="Find related and show">
252
+ <output>
253
+ 📋 Found issues:
254
+
255
+ **Epic:** PROJ-E01 - Product Catalog
256
+ **Status:** In Progress
257
+ **Stories:**
258
+ - PROJ-S01 - Product Aggregate (In Progress)
259
+ - PROJ-S02 - Product Repository (To Do)
260
+ - PROJ-S03 - Product API (To Do)
261
+
262
+ **Local docs found:**
263
+ - epic-01.md → PROJ-E01 ✅
264
+ - story-01.md → PROJ-S01 ✅
265
+ - story-02.md → No link ⚠️
266
+ - story-03.md → No link ⚠️
267
+ </output>
268
+
269
+ <ask>
270
+ Which do you want to update?
271
+ 1. All (create missing links)
272
+ 2. Only existing links
273
+ 3. Select specific issues
274
+ </ask>
275
+ </step>
276
+
277
+ <step n="3" goal="Sync selected">
278
+ <action>For each selected: compare local ↔ Jira</action>
279
+ <action>Show diff</action>
280
+ <ask>Update Jira with local content? (y/n)</ask>
281
+ <action>Execute updates</action>
282
+ <action>Update cache</action>
283
+ </step>
284
+ </workflow>
285
+ ```
286
+
287
+ ### User provides no links (auto-create)
288
+
289
+ ```xml
290
+ <workflow name="auto-create">
291
+ <input>No links provided</input>
292
+
293
+ <step n="1" goal="Scan local docs">
294
+ <action>Find all epic-*.md files</action>
295
+ <action>Find all story-*.md files</action>
296
+ <action>Check cache for existing Jira links</action>
297
+ </step>
298
+
299
+ <step n="2" goal="Show plan">
300
+ <output>
301
+ 📋 Sync Plan:
302
+
303
+ **Will CREATE in Jira:**
304
+ - Epic: "Product Catalog" (from epic-01.md)
305
+ - Story: "Product Aggregate" (from story-01.md)
306
+ - Story: "Product Repository" (from story-02.md)
307
+
308
+ **Will UPDATE in Jira:**
309
+ - PROJ-S03: description changed
310
+
311
+ **Already synced (no changes):**
312
+ - PROJ-E02, PROJ-S04
313
+ </output>
314
+
315
+ <ask>Proceed? (y/n)</ask>
316
+ </step>
317
+
318
+ <step n="3" goal="Execute">
319
+ <action>Create epics first (get keys)</action>
320
+ <action>Create stories with epic parent</action>
321
+ <action>Create tasks under stories</action>
322
+ <action>Update local docs with Jira metadata</action>
323
+ <action>Update cache</action>
324
+ </step>
325
+ </workflow>
326
+ ```
327
+
328
+ ---
329
+
330
+ ## Development Control Mode
331
+
332
+ ### When `control_development: true`
333
+
334
+ Agent manages the full development lifecycle:
335
+
336
+ ```
337
+ ┌─────────────────────────────────────────────────────────────────┐
338
+ │ DEVELOPMENT LIFECYCLE │
339
+ ├─────────────────────────────────────────────────────────────────┤
340
+ │ │
341
+ │ BACKLOG → PLANNED → IN_PROGRESS → REVIEW → QA → DONE │
342
+ │ │ │ │ │ │ │ │
343
+ │ │ │ │ │ │ │ │
344
+ │ Groomed Sprint Dev starts PR QA Merged │
345
+ │ planned + branch created tests + deployed │
346
+ │ │
347
+ └─────────────────────────────────────────────────────────────────┘
348
+ ```
349
+
350
+ ### Status Transitions
351
+
352
+ | From | To | Trigger | Agent Action |
353
+ |------|----|---------|--------------|
354
+ | backlog | planned | Sprint planning | Update Jira status |
355
+ | planned | in_progress | `/dev-story` starts | Create branch, update status |
356
+ | in_progress | review | PR created | Link PR, update status |
357
+ | review | in_progress | Review failed | Update status, add comment |
358
+ | review | qa | Review passed | Update status |
359
+ | qa | in_progress | QA failed | Update status, create bug task |
360
+ | qa | done | QA passed | Update status |
361
+
362
+ ### Dev Agent Receives
363
+
364
+ When dev agent starts work on a task:
365
+
366
+ ```yaml
367
+ # Passed to dev agent
368
+ task:
369
+ jira_key: "PROJ-S01"
370
+ jira_url: "https://jira.company.com/browse/PROJ-S01"
371
+ branch: "feature/PROJ-S01-product-aggregate"
372
+ local_doc: "docs/sprint-artifacts/sprint-1/stories/story-01.md"
373
+ status: "in_progress"
374
+
375
+ parent_epic:
376
+ key: "PROJ-E01"
377
+ branch: "feature/epic-PROJ-E01-product-catalog"
378
+
379
+ transitions:
380
+ submit_review: "31" # Jira transition ID
381
+ mark_blocked: "41"
382
+ ```
383
+
384
+ ### Branch Creation
385
+
386
+ ```xml
387
+ <step goal="Create branch for task">
388
+ <action>Read branch pattern from config</action>
389
+ <action>Generate branch name: feature/{story_key}-{slug}</action>
390
+
391
+ <check if="parent epic has branch">
392
+ <action>Branch from epic branch</action>
393
+ </check>
394
+ <check else>
395
+ <action>Branch from main/develop</action>
396
+ </check>
397
+
398
+ <action>Create branch</action>
399
+ <action>Update Jira: add branch link</action>
400
+ <action>Update cache</action>
401
+
402
+ <output>
403
+ 🌿 Branch created: feature/PROJ-S01-product-aggregate
404
+ 📋 Jira: PROJ-S01 → In Progress
405
+ 📄 Doc: docs/sprint-artifacts/sprint-1/stories/story-01.md
406
+ </output>
407
+ </step>
408
+ ```
409
+
410
+ ---
411
+
412
+ ## API Operations
413
+
414
+ ### Fetch Issue with Children
415
+
416
+ ```bash
417
+ # Get epic with all stories
418
+ curl -X GET \
419
+ -H "Authorization: Basic $AUTH" \
420
+ "$JIRA_URL/rest/api/3/search?jql=parent=PROJ-E01&fields=summary,status,description"
421
+ ```
422
+
423
+ ### Create Epic
424
+
425
+ ```bash
426
+ curl -X POST \
427
+ -H "Authorization: Basic $AUTH" \
428
+ -H "Content-Type: application/json" \
429
+ "$JIRA_URL/rest/api/3/issue" \
430
+ -d '{
431
+ "fields": {
432
+ "project": {"key": "PROJ"},
433
+ "issuetype": {"name": "Epic"},
434
+ "summary": "Product Catalog",
435
+ "description": {...}
436
+ }
437
+ }'
438
+ ```
439
+
440
+ ### Transition Issue
441
+
442
+ ```bash
443
+ # Get available transitions
444
+ curl -X GET "$JIRA_URL/rest/api/3/issue/PROJ-S01/transitions"
445
+
446
+ # Execute transition
447
+ curl -X POST \
448
+ "$JIRA_URL/rest/api/3/issue/PROJ-S01/transitions" \
449
+ -d '{"transition": {"id": "31"}}'
450
+ ```
451
+
452
+ ### Link Branch to Issue
453
+
454
+ ```bash
455
+ curl -X POST \
456
+ "$JIRA_URL/rest/dev-status/1.0/issue/detail" \
457
+ -d '{
458
+ "issueId": "PROJ-S01",
459
+ "detail": {
460
+ "branches": [{
461
+ "name": "feature/PROJ-S01-product-aggregate",
462
+ "url": "https://github.com/org/repo/tree/feature/PROJ-S01-product-aggregate"
463
+ }]
464
+ }
465
+ }'
466
+ ```
467
+
468
+ ---
469
+
470
+ ## Sync Report
471
+
472
+ ```markdown
473
+ # Jira Sync Report
474
+
475
+ **Date:** 2024-01-20 10:30:00
476
+ **Project:** PROJ
477
+ **Mode:** Full Sync
478
+
479
+ ## Summary
480
+
481
+ | Action | Count |
482
+ |--------|-------|
483
+ | Epics created | 2 |
484
+ | Stories created | 8 |
485
+ | Tasks created | 24 |
486
+ | Issues updated | 3 |
487
+ | Status transitions | 5 |
488
+ | Branches created | 8 |
489
+ | Errors | 0 |
490
+
491
+ ## Created Issues
492
+
493
+ | Local Doc | Jira Key | Type | Summary |
494
+ |-----------|----------|------|---------|
495
+ | epic-01.md | PROJ-E01 | Epic | Product Catalog |
496
+ | story-01.md | PROJ-S01 | Story | Product Aggregate |
497
+
498
+ ## Status Transitions
499
+
500
+ | Key | From | To | Trigger |
501
+ |-----|------|----|---------|
502
+ | PROJ-S01 | Backlog | In Progress | Dev started |
503
+
504
+ ## Branches Created
505
+
506
+ | Key | Branch |
507
+ |-----|--------|
508
+ | PROJ-S01 | feature/PROJ-S01-product-aggregate |
509
+
510
+ ## Errors
511
+
512
+ None
513
+
514
+ ---
515
+
516
+ ## Changelog
517
+
518
+ | Version | Date | Author | Changes |
519
+ |---------|------|--------|---------|
520
+ | 1.0 | 2024-01-20 | @sm | Initial sync: 2 epics, 8 stories, 24 tasks |
521
+ ```
522
+
523
+ ---
524
+
525
+ ## Error Handling
526
+
527
+ ### Missing Statuses
528
+
529
+ ```
530
+ ⚠️ Cannot proceed: Missing required statuses
531
+
532
+ Required: [backlog, planned, in_progress, review, qa, done]
533
+ Found: [backlog, in_progress, done]
534
+ Missing: [planned, review, qa]
535
+
536
+ Options:
537
+ 1. Add statuses to Jira (requires admin)
538
+ 2. Map existing statuses: which status = "review"?
539
+ 3. Disable control_development mode
540
+ ```
541
+
542
+ ### API Errors
543
+
544
+ | Error | Cause | Resolution |
545
+ |-------|-------|------------|
546
+ | 401 | Invalid credentials | Check JIRA_EMAIL, JIRA_API_TOKEN |
547
+ | 403 | No permission | Check project access |
548
+ | 404 | Issue not found | Verify key, check cache |
549
+ | 400 | Invalid transition | Check workflow, get valid transitions |
550
+
551
+ ---
552
+
553
+ ## Validation Checklist
554
+
555
+ - [ ] Jira credentials configured
556
+ - [ ] Project key valid
557
+ - [ ] All required statuses mapped
558
+ - [ ] Cache file writable
559
+ - [ ] Workflow transitions work
560
+ - [ ] Branch naming valid