@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.
- package/README.md +185 -0
- package/bin/cli.js +406 -0
- package/package.json +50 -0
- package/src/build-info.json +16 -0
- package/src/opencode/ARCHITECTURE.md +255 -0
- package/src/opencode/FLOW.yaml +900 -0
- package/src/opencode/agents/analyst.md +141 -0
- package/src/opencode/agents/architect.md +177 -0
- package/src/opencode/agents/change-manager.md +263 -0
- package/src/opencode/agents/dev.md +171 -0
- package/src/opencode/agents/module-docs.md +628 -0
- package/src/opencode/agents/pm.md +157 -0
- package/src/opencode/agents/researcher.md +254 -0
- package/src/opencode/agents/sm.md +184 -0
- package/src/opencode/agents/workflow-orchestrator.md +249 -0
- package/src/opencode/checklists/architecture-checklist.md +166 -0
- package/src/opencode/checklists/code-review-checklist.md +151 -0
- package/src/opencode/checklists/prd-checklist.md +140 -0
- package/src/opencode/checklists/requirements-checklist.md +86 -0
- package/src/opencode/checklists/story-checklist.md +137 -0
- package/src/opencode/commands/architecture.md +68 -0
- package/src/opencode/commands/archive.md +146 -0
- package/src/opencode/commands/change.md +169 -0
- package/src/opencode/commands/clarify.md +132 -0
- package/src/opencode/commands/code-review.md +96 -0
- package/src/opencode/commands/coding-standards.md +102 -0
- package/src/opencode/commands/dev-story.md +80 -0
- package/src/opencode/commands/diagram.md +152 -0
- package/src/opencode/commands/epics.md +52 -0
- package/src/opencode/commands/help.md +139 -0
- package/src/opencode/commands/jira-sync.md +58 -0
- package/src/opencode/commands/module-docs.md +158 -0
- package/src/opencode/commands/prd.md +63 -0
- package/src/opencode/commands/quick.md +166 -0
- package/src/opencode/commands/requirements.md +49 -0
- package/src/opencode/commands/research.md +113 -0
- package/src/opencode/commands/sprint-plan.md +59 -0
- package/src/opencode/commands/stories.md +61 -0
- package/src/opencode/commands/validate.md +84 -0
- package/src/opencode/commands/workflow-status.md +150 -0
- package/src/opencode/config.yaml +223 -0
- package/src/opencode/opencode.json +36 -0
- package/src/opencode/skills/acceptance-criteria/SKILL.md +212 -0
- package/src/opencode/skills/adr-writing/SKILL.md +241 -0
- package/src/opencode/skills/architecture-design/SKILL.md +183 -0
- package/src/opencode/skills/architecture-validation/SKILL.md +199 -0
- package/src/opencode/skills/archiving/SKILL.md +191 -0
- package/src/opencode/skills/changelog/SKILL.md +280 -0
- package/src/opencode/skills/code-review/SKILL.md +193 -0
- package/src/opencode/skills/coding-standards/SKILL.md +430 -0
- package/src/opencode/skills/diagram-creation/SKILL.md +273 -0
- package/src/opencode/skills/doc-todo/SKILL.md +325 -0
- package/src/opencode/skills/epic-writing/SKILL.md +291 -0
- package/src/opencode/skills/jira-integration/SKILL.md +560 -0
- package/src/opencode/skills/methodologies/SKILL.md +376 -0
- package/src/opencode/skills/module-documentation/SKILL.md +214 -0
- package/src/opencode/skills/prd-validation/SKILL.md +164 -0
- package/src/opencode/skills/prd-writing/SKILL.md +104 -0
- package/src/opencode/skills/requirements-gathering/SKILL.md +132 -0
- package/src/opencode/skills/requirements-validation/SKILL.md +141 -0
- package/src/opencode/skills/research-methodology/SKILL.md +140 -0
- package/src/opencode/skills/sprint-planning/SKILL.md +217 -0
- package/src/opencode/skills/story-writing/SKILL.md +574 -0
- package/src/opencode/skills/test-design/SKILL.md +313 -0
- package/src/opencode/skills/translation/SKILL.md +411 -0
- package/src/opencode/templates/CHANGELOG.md +82 -0
- package/src/opencode/templates/adr-template.md +115 -0
- package/src/opencode/templates/architecture-template.md +362 -0
- package/src/opencode/templates/change-proposal-template.md +186 -0
- package/src/opencode/templates/epic-template.md +151 -0
- package/src/opencode/templates/git-workflow-template.md +384 -0
- package/src/opencode/templates/integration-tests-template.md +265 -0
- package/src/opencode/templates/jira-cache-template.yaml +103 -0
- package/src/opencode/templates/module-index-template.md +139 -0
- package/src/opencode/templates/module-test-cases-template.md +230 -0
- package/src/opencode/templates/prd-acceptance-criteria-template.md +124 -0
- package/src/opencode/templates/prd-template.md +479 -0
- package/src/opencode/templates/requirements-template.md +132 -0
- package/src/opencode/templates/sprint-status-template.yaml +84 -0
- package/src/opencode/templates/story-template.md +437 -0
- package/src/opencode/templates/testing-standards-template.md +359 -0
- package/src/opencode/workflows/dev-story/instructions.md +529 -0
- package/src/repo-structure/.gitattributes +64 -0
- package/src/repo-structure/CONTRIBUTING.md +182 -0
- package/src/repo-structure/README.md +77 -0
- package/src/repo-structure/docs/README.md +62 -0
- package/src/repo-structure/docs/api/README.md +43 -0
- package/src/repo-structure/docs/architecture/README.md +36 -0
- package/src/repo-structure/docs/architecture/adr/README.md +53 -0
- package/src/repo-structure/docs/architecture/diagrams/README.md +59 -0
- package/src/repo-structure/docs/coding-standards/README.md +52 -0
- package/src/repo-structure/docs/confluence/README.md +43 -0
- package/src/repo-structure/docs/requirements/README.md +28 -0
- package/src/repo-structure/docs/sprint-artifacts/README.md +76 -0
- 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
|