@groupby/ai-dev 0.2.1 → 0.2.3
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 +3 -1
- package/dist/index.js +86 -19
- package/package.json +2 -2
- package/toolsets/rzlv-flow/README.md +54 -9
- package/toolsets/rzlv-flow/resources/confluence-file-structure.md +129 -23
- package/toolsets/rzlv-flow/resources/sync-state-format.md +109 -0
- package/toolsets/rzlv-flow/skills/jira-daily-triage/SKILL.md +13 -5
- package/toolsets/rzlv-flow/skills/jira-sprint-status/SKILL.md +28 -1
- package/toolsets/rzlv-flow/skills/jira-ticket-focus/SKILL.md +6 -1
- package/toolsets/rzlv-flow/skills/jira-wrap-sync/SKILL.md +41 -8
- package/skills/skills/README.md +0 -61
- package/skills/skills/archived/README.md +0 -3
- package/skills/skills/library/README.md +0 -3
- package/skills/skills/library/frontend-design/LICENSE.txt +0 -177
- package/skills/skills/library/frontend-design/SKILL.md +0 -42
- package/teams/teams/brain-studio/skills/code-review/SKILL.md +0 -46
- package/toolsets/toolsets/rzlv-flow/README.md +0 -102
- package/toolsets/toolsets/rzlv-flow/docs/mcp-setup.md +0 -126
- package/toolsets/toolsets/rzlv-flow/resources/README.md +0 -16
- package/toolsets/toolsets/rzlv-flow/resources/confluence-file-structure.md +0 -285
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/README.md +0 -19
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/decisions.md +0 -36
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/initiative-overview.md +0 -40
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/strategic-context.md +0 -44
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/technical-architecture.md +0 -48
- package/toolsets/toolsets/rzlv-flow/resources/fcmp-protocol.md +0 -331
- package/toolsets/toolsets/rzlv-flow/resources/jira-file-structure.md +0 -177
- package/toolsets/toolsets/rzlv-flow/resources/sync-state-format.md +0 -318
- package/toolsets/toolsets/rzlv-flow/skills/atlassian-orchestrator/SKILL.md +0 -643
- package/toolsets/toolsets/rzlv-flow/skills/context-analyst/SKILL.md +0 -265
- package/toolsets/toolsets/rzlv-flow/skills/jira-comment/SKILL.md +0 -89
- package/toolsets/toolsets/rzlv-flow/skills/jira-daily-triage/SKILL.md +0 -143
- package/toolsets/toolsets/rzlv-flow/skills/jira-sprint-status/SKILL.md +0 -143
- package/toolsets/toolsets/rzlv-flow/skills/jira-status/SKILL.md +0 -97
- package/toolsets/toolsets/rzlv-flow/skills/jira-sync/SKILL.md +0 -148
- package/toolsets/toolsets/rzlv-flow/skills/jira-ticket-focus/SKILL.md +0 -245
- package/toolsets/toolsets/rzlv-flow/skills/jira-ticket-trace/SKILL.md +0 -112
- package/toolsets/toolsets/rzlv-flow/skills/jira-wrap-sync/SKILL.md +0 -260
- /package/toolsets/{toolsets/rzlv-flow → rzlv-flow}/docs/getting-started.md +0 -0
- /package/toolsets/{toolsets/rzlv-flow → rzlv-flow}/skills/confluence-fetch/SKILL.md +0 -0
- /package/toolsets/{toolsets/rzlv-flow → rzlv-flow}/skills/confluence-publish/SKILL.md +0 -0
|
@@ -1,643 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: atlassian-orchestrator
|
|
3
|
-
description: Pull surrounding Jira ticket context (parent epic, linked Confluence docs, related stories) and create or update Jira/Confluence structures. Creates epic folder structures with technical architecture docs, decisions, and strategic context. Imports existing Jira tickets into local mirrors. Use when you need to enrich a ticket's context, create a new epic structure, import tickets locally, add items to an existing structure, or sync documentation to Confluence.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Enriches Jira ticket context by pulling the full surrounding chain (parent epic, sibling stories, linked Confluence pages) and can create, import, extend, or sync Jira/Confluence structures. Operates in five modes: context enrichment, epic structure creation, ticket import, structure continuation, and Confluence sync.
|
|
7
|
-
|
|
8
|
-
## Requirements
|
|
9
|
-
|
|
10
|
-
Requires: Atlassian MCP (`atlassian-rovo`). See the rzlv-flow toolset README for setup.
|
|
11
|
-
|
|
12
|
-
## Resources to Load
|
|
13
|
-
|
|
14
|
-
Before executing, read these resource files — they are critical for correct behavior:
|
|
15
|
-
|
|
16
|
-
- `docs/ai/resources/fcmp-protocol.md` — follow for all Jira and Confluence read/write operations
|
|
17
|
-
- `docs/ai/resources/jira-file-structure.md` — directory layout and ownership rules for local Jira mirrors
|
|
18
|
-
- `docs/ai/resources/confluence-file-structure.md` — Confluence mirror layout, Leaf Bundle pattern, and dual-mode (structured/flexible) rules
|
|
19
|
-
- `docs/ai/resources/sync-state-format.md` — YAML frontmatter schema for ticket and page files
|
|
20
|
-
- `docs/ai/resources/confluence-page-templates/` — (optional) starter scaffolds for consistent Confluence page structure
|
|
21
|
-
|
|
22
|
-
## Core Principles
|
|
23
|
-
|
|
24
|
-
These principles govern all modes of operation:
|
|
25
|
-
|
|
26
|
-
- **FCMP is non-negotiable** — ALL Atlassian operations follow Fetch-Compare-Merge-Push. Never blind write.
|
|
27
|
-
- **Confluence BEFORE Jira** — When creating both, sync Confluence pages first to get page IDs, then create Jira tickets with Confluence links embedded. Single Jira sync pass.
|
|
28
|
-
- **Ownership boundaries** — This skill creates and owns `_docs/` folders. Never touch `_work/` folders (owned by `jira-ticket-focus` / developer workflows).
|
|
29
|
-
- **Document every assumption** — Any inference must include: source (what triggered it), confidence (High 80%+, Medium 50-80%, Low <50%), impact (what breaks if wrong), and how the PM can verify.
|
|
30
|
-
- **Graceful degradation** — If MCP fails, generate the local structure anyway and set sync status to `pending_sync`. Report what requires manual sync.
|
|
31
|
-
- **Human in the loop** — Confirm Atlassian targets (instance, project, space) before any sync operation. Never update Jira/Confluence without user confirmation.
|
|
32
|
-
- **Check before creating** — Search for existing content before creating to avoid duplicates.
|
|
33
|
-
|
|
34
|
-
## Modes
|
|
35
|
-
|
|
36
|
-
This skill supports five modes. The user may invoke one directly or the appropriate mode can be inferred from context:
|
|
37
|
-
|
|
38
|
-
1. **Context enrichment** — Pull the full surrounding context for a ticket (default if user says "get context for PROJ-123")
|
|
39
|
-
2. **Epic structure creation** — Create a new epic with folder structure, stories, and documentation (if user says "create epic structure" or provides an epic definition)
|
|
40
|
-
3. **Confluence sync** — Publish local documentation to Confluence (if user says "sync to Confluence" or "publish to Confluence")
|
|
41
|
-
4. **Import ticket** — Import an existing Jira ticket (and its hierarchy) into local mirror structure (if user says "import PROJ-123" or "pull down this ticket")
|
|
42
|
-
5. **Continue structure** — Add new items to an existing local structure (if user says "add a story to this epic" or "continue structure")
|
|
43
|
-
|
|
44
|
-
If the mode is unclear, ask:
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
What would you like to do?
|
|
48
|
-
1. Pull full context for a ticket (epic, stories, Confluence docs)
|
|
49
|
-
2. Create a new epic folder structure with documentation
|
|
50
|
-
3. Sync local documentation to Confluence
|
|
51
|
-
4. Import an existing Jira ticket into local structure
|
|
52
|
-
5. Add new items to an existing structure
|
|
53
|
-
|
|
54
|
-
Choose [1]:
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## Mode 1: Context Enrichment
|
|
60
|
-
|
|
61
|
-
Use when the user wants to understand the full picture around a Jira ticket — its parent epic, sibling stories, linked documentation, and Confluence pages.
|
|
62
|
-
|
|
63
|
-
### Step 1: Resolve Ticket
|
|
64
|
-
|
|
65
|
-
- Use `focused_ticket` from conversation context if available.
|
|
66
|
-
- Accept a Jira key directly (e.g. "PROJ-123").
|
|
67
|
-
- Accept a number from `numbered_ticket_list` if available from a prior `jira-daily-triage` run.
|
|
68
|
-
- If the key is incomplete, prepend `confirmed_project` from session context.
|
|
69
|
-
|
|
70
|
-
### Step 2: Fetch Ticket Details
|
|
71
|
-
|
|
72
|
-
Use `mcp_atlassian-rovo_fetch()` to retrieve:
|
|
73
|
-
|
|
74
|
-
- Summary, description, acceptance criteria
|
|
75
|
-
- Status, assignee, priority, story points
|
|
76
|
-
- Labels, components, fix versions
|
|
77
|
-
- Linked issues (blocks, is blocked by, relates to)
|
|
78
|
-
- Linked Confluence pages (remote links)
|
|
79
|
-
|
|
80
|
-
### Step 3: Fetch Parent Epic
|
|
81
|
-
|
|
82
|
-
Detect the parent epic (same logic as `jira-ticket-focus`):
|
|
83
|
-
|
|
84
|
-
1. Check `fields.parent` — if `parent.fields.issuetype.name == "Epic"`, that is the epic.
|
|
85
|
-
2. Check for an Epic Link custom field (varies by instance; commonly `customfield_10014` or similar).
|
|
86
|
-
3. If no epic is found, note the ticket is orphaned.
|
|
87
|
-
|
|
88
|
-
If an epic is found, fetch its full details:
|
|
89
|
-
- Epic summary, description, goals
|
|
90
|
-
- All child stories/tasks via JQL: `"Epic Link" = {EPIC-KEY} ORDER BY status ASC, priority DESC`
|
|
91
|
-
- Any linked Confluence pages on the epic
|
|
92
|
-
|
|
93
|
-
### Step 4: Fetch Linked Confluence Pages
|
|
94
|
-
|
|
95
|
-
For any Confluence links found on the ticket or epic:
|
|
96
|
-
|
|
97
|
-
- Fetch page content via `mcp_atlassian-rovo_fetch()` using the page ARI
|
|
98
|
-
- Extract key information: title, body summary, last updated
|
|
99
|
-
- Note the space and parent page hierarchy
|
|
100
|
-
|
|
101
|
-
Also check for local `_docs/` content if the epic folder exists locally:
|
|
102
|
-
- `{epic-folder}/_docs/technical-architecture.md`
|
|
103
|
-
- `{epic-folder}/_docs/decisions.md`
|
|
104
|
-
- `{epic-folder}/_docs/strategic-context.md`
|
|
105
|
-
|
|
106
|
-
### Step 5: Fetch Sibling Stories
|
|
107
|
-
|
|
108
|
-
If an epic was found, retrieve sibling stories to understand the broader work:
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
JQL: "Epic Link" = {EPIC-KEY} AND key != {TICKET-KEY} ORDER BY status ASC, priority DESC
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Summarize each sibling: key, summary, status, assignee.
|
|
115
|
-
|
|
116
|
-
### Step 6: Present Enriched Context
|
|
117
|
-
|
|
118
|
-
Display the full context chain in a structured format.
|
|
119
|
-
|
|
120
|
-
### Output Format (Context Enrichment)
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
## 🔍 Context: {TICKET-KEY} — {Summary}
|
|
124
|
-
|
|
125
|
-
**Status:** {status} | **Assignee:** {assignee} | **Priority:** {priority} | **Points:** {points}
|
|
126
|
-
|
|
127
|
-
### Parent Epic
|
|
128
|
-
**{EPIC-KEY}:** {Epic Summary}
|
|
129
|
-
{Epic description excerpt — first 2-3 sentences}
|
|
130
|
-
- **Goal:** {epic goal if identifiable}
|
|
131
|
-
- **Stories:** {total} ({done} done, {in_progress} in progress, {todo} to do)
|
|
132
|
-
|
|
133
|
-
### Sibling Stories
|
|
134
|
-
| # | Ticket | Summary | Status | Assignee |
|
|
135
|
-
|---|--------|---------|--------|----------|
|
|
136
|
-
| 1 | PROJ-101 | User login flow | Done | @alice |
|
|
137
|
-
| 2 | PROJ-102 | Session management | In Progress | @bob |
|
|
138
|
-
| 3 | PROJ-103 | Password reset | To Do | Unassigned |
|
|
139
|
-
|
|
140
|
-
### Linked Documentation
|
|
141
|
-
{FOR EACH LINKED CONFLUENCE PAGE:}
|
|
142
|
-
- **{Page Title}** — {space} — [link]({confluence_url})
|
|
143
|
-
{Brief summary or excerpt}
|
|
144
|
-
|
|
145
|
-
{IF LOCAL _docs/ EXISTS:}
|
|
146
|
-
### Local Documentation (_docs/)
|
|
147
|
-
- `technical-architecture.md` — {brief summary}
|
|
148
|
-
- `decisions.md` — {brief summary}
|
|
149
|
-
- `strategic-context.md` — {brief summary}
|
|
150
|
-
|
|
151
|
-
{IF NO DOCS FOUND:}
|
|
152
|
-
### Documentation
|
|
153
|
-
No linked Confluence pages or local _docs/ found. Consider creating documentation with epic structure creation (mode 2).
|
|
154
|
-
|
|
155
|
-
### Linked Issues
|
|
156
|
-
{FOR EACH LINKED ISSUE:}
|
|
157
|
-
- **{link_type}** {LINKED-KEY}: {summary} ({status})
|
|
158
|
-
|
|
159
|
-
### Suggested Actions
|
|
160
|
-
{Based on what's missing:}
|
|
161
|
-
1. {IF no _docs/} Create epic documentation structure
|
|
162
|
-
2. {IF no Confluence pages} Sync documentation to Confluence
|
|
163
|
-
3. {IF orphaned} This ticket has no parent epic — consider linking it
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## Mode 2: Epic Structure Creation
|
|
169
|
-
|
|
170
|
-
Use when the user wants to create a new epic folder structure with documentation. The input can come from a PM document, a `context-analyst` output, manual input, or an existing Jira epic that lacks local structure.
|
|
171
|
-
|
|
172
|
-
### Step 1: Get Epic Definition
|
|
173
|
-
|
|
174
|
-
Accept the epic definition from one of these sources:
|
|
175
|
-
|
|
176
|
-
- **Existing Jira epic** — User provides an epic key. Fetch from Jira and use its details.
|
|
177
|
-
- **Document input** — User provides or points to a document (e.g. from `context-analyst` output) containing goals, scope, stories, and technical details.
|
|
178
|
-
- **Manual input** — User describes the epic. Ask for:
|
|
179
|
-
1. Epic title / summary
|
|
180
|
-
2. Brief description and goals
|
|
181
|
-
3. Known stories or tasks (optional)
|
|
182
|
-
4. Technical approach or constraints (optional)
|
|
183
|
-
|
|
184
|
-
### Step 2: Resolve Project and Instance
|
|
185
|
-
|
|
186
|
-
- Use `confirmed_project` and instance from session context if available.
|
|
187
|
-
- Otherwise, ask for the Jira project key and instance identifier.
|
|
188
|
-
|
|
189
|
-
### Step 3: Create Local Folder Structure
|
|
190
|
-
|
|
191
|
-
Create the folder structure per `jira-file-structure.md`:
|
|
192
|
-
|
|
193
|
-
```
|
|
194
|
-
docs/jira/{instance}/{project}/{EPIC-KEY}-{slug}/
|
|
195
|
-
├── epic.md # Epic sync state + metadata
|
|
196
|
-
├── _docs/ # Generated documentation
|
|
197
|
-
│ ├── technical-architecture.md # Architecture decisions and design
|
|
198
|
-
│ ├── decisions.md # Decision log and rationale
|
|
199
|
-
│ └── strategic-context.md # Business context and alignment
|
|
200
|
-
└── stories/ # Story folders (created per story)
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
**For `epic.md`:**
|
|
204
|
-
- Populate YAML frontmatter per `sync-state-format.md`.
|
|
205
|
-
- If sourced from Jira, fill in all `sync` fields from the fetched data.
|
|
206
|
-
- If sourced from a document or manual input, set `sync.status: "draft"` and leave Jira fields empty until creation.
|
|
207
|
-
- Body: Epic summary, description, goals, scope.
|
|
208
|
-
|
|
209
|
-
**For `_docs/` files:**
|
|
210
|
-
|
|
211
|
-
The `_docs/` folder contains generated documentation mapped to Confluence page categories. The standard doc types are:
|
|
212
|
-
|
|
213
|
-
| Doc Type | File | Description |
|
|
214
|
-
|----------|------|-------------|
|
|
215
|
-
| `strategic-context` | `strategic-context.md` | Business goals, product vision, strategic decisions |
|
|
216
|
-
| `technical-architecture` | `technical-architecture.md` | System design, tech decisions, implementation patterns |
|
|
217
|
-
| `decisions` | `decisions.md` | Consolidated decision log with rationale |
|
|
218
|
-
| `research-and-findings` | `research-and-findings.md` | User research, discoveries, clarifications (if applicable) |
|
|
219
|
-
| `assumptions` | `assumptions.md` | Assumptions with confidence levels and validation needs (if applicable) |
|
|
220
|
-
|
|
221
|
-
At minimum, create `technical-architecture.md`, `decisions.md`, and `strategic-context.md`. Create `research-and-findings.md` and `assumptions.md` only if the input contains relevant content.
|
|
222
|
-
|
|
223
|
-
- Populate from the input if details are available; otherwise create a template with section headings.
|
|
224
|
-
- For `assumptions.md`, every assumption must include: source, confidence level (High/Medium/Low), impact if wrong, and how to verify.
|
|
225
|
-
|
|
226
|
-
Each `_docs/` file gets Confluence sync frontmatter per `sync-state-format.md` with `mode: "structured"` and empty sync fields (populated after Confluence sync).
|
|
227
|
-
|
|
228
|
-
### Step 4: Create Story Folders (Optional)
|
|
229
|
-
|
|
230
|
-
If stories were provided in the input:
|
|
231
|
-
|
|
232
|
-
For each story, create:
|
|
233
|
-
```
|
|
234
|
-
stories/{STORY-KEY}/{STORY-KEY}.md
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
Populate with sync state frontmatter. Set `structure.epic` to the epic key and `structure.parent` to the relative path to `epic.md`.
|
|
238
|
-
|
|
239
|
-
If stories are not yet in Jira, set `sync.status: "draft"`.
|
|
240
|
-
|
|
241
|
-
### Step 5: Optionally Create in Jira
|
|
242
|
-
|
|
243
|
-
If the epic and stories don't exist in Jira yet, offer to create them:
|
|
244
|
-
|
|
245
|
-
```
|
|
246
|
-
Local structure created. Would you like to create these in Jira?
|
|
247
|
-
1. Create epic and all stories in Jira now
|
|
248
|
-
2. Create only the epic in Jira (stories later)
|
|
249
|
-
3. Skip — keep as local drafts for now
|
|
250
|
-
|
|
251
|
-
Choose [3]:
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
If creating in Jira:
|
|
255
|
-
- Create the epic first via MCP. Store the returned key and ARI.
|
|
256
|
-
- Create stories with the epic link set.
|
|
257
|
-
- Update local files with the returned Jira keys and ARIs.
|
|
258
|
-
- Follow FCMP protocol (though these are new resources, no conflict is possible on creation).
|
|
259
|
-
|
|
260
|
-
### Step 6: Optionally Sync to Confluence
|
|
261
|
-
|
|
262
|
-
After creating the local structure, offer Confluence sync:
|
|
263
|
-
|
|
264
|
-
```
|
|
265
|
-
Would you like to publish documentation to Confluence?
|
|
266
|
-
1. Sync all _docs/ to Confluence now (structured mode)
|
|
267
|
-
2. Skip — I'll sync later
|
|
268
|
-
|
|
269
|
-
Choose [2]:
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
If syncing, proceed to Mode 3 (Confluence Sync — Structured).
|
|
273
|
-
|
|
274
|
-
### Output Format (Epic Structure Creation)
|
|
275
|
-
|
|
276
|
-
```
|
|
277
|
-
## 🏗️ Epic Structure Created: {EPIC-KEY} — {Epic Summary}
|
|
278
|
-
|
|
279
|
-
### Files Created
|
|
280
|
-
- `docs/jira/{instance}/{project}/{EPIC-KEY}-{slug}/epic.md`
|
|
281
|
-
- `docs/jira/{instance}/{project}/{EPIC-KEY}-{slug}/_docs/technical-architecture.md`
|
|
282
|
-
- `docs/jira/{instance}/{project}/{EPIC-KEY}-{slug}/_docs/decisions.md`
|
|
283
|
-
- `docs/jira/{instance}/{project}/{EPIC-KEY}-{slug}/_docs/strategic-context.md`
|
|
284
|
-
- `docs/jira/{instance}/{project}/{EPIC-KEY}-{slug}/stories/` (directory)
|
|
285
|
-
{IF STORIES CREATED:}
|
|
286
|
-
- `docs/jira/{instance}/{project}/{EPIC-KEY}-{slug}/stories/{STORY-KEY}/{STORY-KEY}.md` (×{n})
|
|
287
|
-
|
|
288
|
-
{IF CREATED IN JIRA:}
|
|
289
|
-
### Jira Issues Created
|
|
290
|
-
- Epic: {EPIC-KEY} — {summary}
|
|
291
|
-
{FOR EACH STORY:}
|
|
292
|
-
- Story: {STORY-KEY} — {summary}
|
|
293
|
-
|
|
294
|
-
{IF SYNCED TO CONFLUENCE:}
|
|
295
|
-
### Confluence Pages
|
|
296
|
-
- {page_title}: {confluence_url}
|
|
297
|
-
|
|
298
|
-
### Next Steps
|
|
299
|
-
{Based on what was done:}
|
|
300
|
-
1. {IF draft only} Run `atlassian-orchestrator` again to create in Jira when ready
|
|
301
|
-
2. {IF Jira created but no Confluence} Sync documentation to Confluence when ready
|
|
302
|
-
3. Use `jira-ticket-focus` to start working on individual stories
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
---
|
|
306
|
-
|
|
307
|
-
## Mode 3: Confluence Sync
|
|
308
|
-
|
|
309
|
-
Publish local documentation to Confluence. Supports two sub-modes per `confluence-file-structure.md`:
|
|
310
|
-
|
|
311
|
-
### Sub-mode 3a: Structured Sync
|
|
312
|
-
|
|
313
|
-
Used when syncing `_docs/` content from a Jira epic folder to Confluence following the predefined hierarchy.
|
|
314
|
-
|
|
315
|
-
#### Step 1: Identify Source Content
|
|
316
|
-
|
|
317
|
-
- Locate the epic folder and its `_docs/` directory.
|
|
318
|
-
- List all `.md` files in `_docs/`.
|
|
319
|
-
- Read each file to prepare for publishing.
|
|
320
|
-
|
|
321
|
-
#### Step 2: Determine Confluence Target
|
|
322
|
-
|
|
323
|
-
- Check if Confluence pages already exist (look for `sync.confluence_page_id` in each file's frontmatter).
|
|
324
|
-
- If pages exist, this is an update — follow FCMP protocol.
|
|
325
|
-
- If pages don't exist, determine the target:
|
|
326
|
-
- Use the initiative/epic hierarchy from `confluence-file-structure.md`.
|
|
327
|
-
- Ask the user for the Confluence space key if not known:
|
|
328
|
-
```
|
|
329
|
-
Which Confluence space? (e.g. ENG, PROJ):
|
|
330
|
-
```
|
|
331
|
-
- Ask for the parent page:
|
|
332
|
-
```
|
|
333
|
-
Parent page for this epic's documentation? (page title or ID):
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
#### Step 3: Sync to Confluence
|
|
337
|
-
|
|
338
|
-
For each `_docs/` file, in order:
|
|
339
|
-
|
|
340
|
-
1. **FETCH** — If updating, fetch the current Confluence page state.
|
|
341
|
-
2. **COMPARE** — If updating, compare local content against the remote page.
|
|
342
|
-
3. **MERGE** — If conflicts, follow the FCMP merge protocol.
|
|
343
|
-
4. **PUSH** — Create or update the Confluence page via MCP.
|
|
344
|
-
- Convert markdown to Confluence storage format.
|
|
345
|
-
- For new pages: set the parent page and space.
|
|
346
|
-
- For updates: include the version number for optimistic locking.
|
|
347
|
-
|
|
348
|
-
After each page is created/updated:
|
|
349
|
-
- Store `confluence_page_id` and `confluence_url` in the local file's frontmatter.
|
|
350
|
-
- Set `mode: "structured"` in the frontmatter.
|
|
351
|
-
- Set `source.doc_type` to the appropriate type (e.g. `technical-architecture`, `decisions`).
|
|
352
|
-
|
|
353
|
-
#### Step 4: Link Back to Jira
|
|
354
|
-
|
|
355
|
-
After Confluence pages are created:
|
|
356
|
-
- Add Confluence page URLs as remote links on the Jira epic (if the epic exists in Jira).
|
|
357
|
-
- Follow FCMP for the Jira update.
|
|
358
|
-
|
|
359
|
-
### Sub-mode 3b: Flexible Sync
|
|
360
|
-
|
|
361
|
-
Used for ad-hoc publishing of any markdown document to Confluence.
|
|
362
|
-
|
|
363
|
-
#### Step 1: Accept Content
|
|
364
|
-
|
|
365
|
-
- User specifies the file to publish (a local markdown file path).
|
|
366
|
-
- Read the file content.
|
|
367
|
-
|
|
368
|
-
#### Step 2: Determine Confluence Target
|
|
369
|
-
|
|
370
|
-
Ask the user:
|
|
371
|
-
|
|
372
|
-
```
|
|
373
|
-
Where should this page go in Confluence?
|
|
374
|
-
1. Space key (e.g. ENG):
|
|
375
|
-
2. Parent page (title or ID, or "root" for top-level):
|
|
376
|
-
3. Page title (default: {filename without extension}):
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
#### Step 3: Publish
|
|
380
|
-
|
|
381
|
-
- If the file already has `sync.confluence_page_id` in its frontmatter, this is an update — follow FCMP.
|
|
382
|
-
- Otherwise, create a new page via MCP.
|
|
383
|
-
- Convert markdown to Confluence storage format.
|
|
384
|
-
- Store page metadata in the file's frontmatter.
|
|
385
|
-
- Set `mode: "flexible"` in the frontmatter.
|
|
386
|
-
|
|
387
|
-
#### Step 4: Optional Jira Link
|
|
388
|
-
|
|
389
|
-
```
|
|
390
|
-
Link this page to a Jira ticket? (ticket key or "skip"):
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
If a ticket key is provided, add as a remote link on the Jira ticket.
|
|
394
|
-
|
|
395
|
-
### Output Format (Confluence Sync)
|
|
396
|
-
|
|
397
|
-
```
|
|
398
|
-
## 📄 Confluence Sync Complete
|
|
399
|
-
|
|
400
|
-
{FOR EACH PAGE:}
|
|
401
|
-
### {Page Title}
|
|
402
|
-
- **Space:** {space_key}
|
|
403
|
-
- **URL:** {confluence_url}
|
|
404
|
-
- **Status:** {Created | Updated (v{old} → v{new}) | No changes}
|
|
405
|
-
{IF CONFLICT RESOLVED:}
|
|
406
|
-
- **Conflict:** Resolved ({strategy})
|
|
407
|
-
|
|
408
|
-
{IF LINKED TO JIRA:}
|
|
409
|
-
### Jira Links Added
|
|
410
|
-
- {EPIC-KEY}: Linked to {n} Confluence pages
|
|
411
|
-
|
|
412
|
-
### Summary
|
|
413
|
-
- Pages created: {n}
|
|
414
|
-
- Pages updated: {n}
|
|
415
|
-
- Pages unchanged: {n}
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
---
|
|
419
|
-
|
|
420
|
-
## Mode 4: Import Ticket
|
|
421
|
-
|
|
422
|
-
Import an existing Jira ticket (and optionally its full hierarchy — parent epic, child stories) into the local mirror structure. Use when the ticket already exists in Jira but has no local representation.
|
|
423
|
-
|
|
424
|
-
### Step 1: Get Ticket Key
|
|
425
|
-
|
|
426
|
-
- Accept a Jira ticket key (e.g. "PROJ-123").
|
|
427
|
-
- Accept `focused_ticket` from conversation context.
|
|
428
|
-
- If the key is incomplete, prepend `confirmed_project`.
|
|
429
|
-
|
|
430
|
-
### Step 2: Fetch Ticket via MCP
|
|
431
|
-
|
|
432
|
-
Use `mcp_atlassian-rovo_fetch()` to retrieve:
|
|
433
|
-
|
|
434
|
-
- Issue type, summary, description, acceptance criteria
|
|
435
|
-
- Status, assignee, priority, story points
|
|
436
|
-
- Parent (epic or story)
|
|
437
|
-
- Child issues (if epic: stories; if story: subtasks)
|
|
438
|
-
- Linked Confluence pages
|
|
439
|
-
|
|
440
|
-
### Step 3: Determine Local Path
|
|
441
|
-
|
|
442
|
-
Based on the ticket type and parent:
|
|
443
|
-
|
|
444
|
-
- **Epic** → `docs/jira/{instance}/{project}/{EPIC-KEY}-{slug}/epic.md`
|
|
445
|
-
- **Story with epic** → `docs/jira/{instance}/{project}/{epic-folder}/stories/{STORY-KEY}/{STORY-KEY}.md`
|
|
446
|
-
- **Orphan** → `docs/jira/{instance}/{project}/_orphans/{TICKET-KEY}/{TICKET-KEY}.md`
|
|
447
|
-
- **Subtask** → Under the parent story's `subtasks/` folder
|
|
448
|
-
|
|
449
|
-
Check for existing local structure first — if the epic folder already exists, use it.
|
|
450
|
-
|
|
451
|
-
### Step 4: Create Local Structure
|
|
452
|
-
|
|
453
|
-
1. Create the ticket file with YAML frontmatter per `sync-state-format.md`.
|
|
454
|
-
2. Populate all `sync` fields from the fetched Jira data.
|
|
455
|
-
3. Set `sync.status: "synced"` and `sync.last_synced` to now.
|
|
456
|
-
4. Write the description and acceptance criteria to the file body.
|
|
457
|
-
|
|
458
|
-
### Step 5: Fetch Children Recursively (Optional)
|
|
459
|
-
|
|
460
|
-
If the ticket is an epic, offer to import its children:
|
|
461
|
-
|
|
462
|
-
```
|
|
463
|
-
This epic has {n} child stories. Import them?
|
|
464
|
-
1. Import all child stories
|
|
465
|
-
2. Import only — list children for reference
|
|
466
|
-
3. Skip children
|
|
467
|
-
|
|
468
|
-
Choose [1]:
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
If importing children:
|
|
472
|
-
- Create `stories/` folder structure.
|
|
473
|
-
- For each child, create the ticket file with full sync state.
|
|
474
|
-
- If a child has subtasks, recurse into those as well.
|
|
475
|
-
|
|
476
|
-
### Step 6: Generate `_docs/` Stubs (for Epics)
|
|
477
|
-
|
|
478
|
-
If importing an epic, create `_docs/` folder with stub files:
|
|
479
|
-
|
|
480
|
-
```
|
|
481
|
-
_docs/
|
|
482
|
-
├── technical-architecture.md # "Imported from Jira — enrich with technical details"
|
|
483
|
-
├── decisions.md # "Imported from Jira — add decisions as they're made"
|
|
484
|
-
└── strategic-context.md # "Imported from Jira — add business context"
|
|
485
|
-
```
|
|
486
|
-
|
|
487
|
-
Flag these for PM/developer enrichment.
|
|
488
|
-
|
|
489
|
-
### Output Format (Import)
|
|
490
|
-
|
|
491
|
-
```
|
|
492
|
-
## 📥 Imported: {TICKET-KEY} — {Summary}
|
|
493
|
-
|
|
494
|
-
**Type:** {issue_type} | **Status:** {status} | **Assignee:** {assignee}
|
|
495
|
-
**Local Path:** {relative_path}
|
|
496
|
-
|
|
497
|
-
### Structure Created
|
|
498
|
-
- {TICKET-KEY}.md (synced, version {version})
|
|
499
|
-
{IF EPIC WITH CHILDREN:}
|
|
500
|
-
- _docs/ (stub templates — needs enrichment)
|
|
501
|
-
- stories/ ({n} stories imported)
|
|
502
|
-
{FOR EACH CHILD:}
|
|
503
|
-
- {CHILD-KEY}: {summary} ({status})
|
|
504
|
-
|
|
505
|
-
{IF CONFLUENCE PAGES LINKED:}
|
|
506
|
-
### Linked Confluence Pages
|
|
507
|
-
- {page_title}: {confluence_url}
|
|
508
|
-
|
|
509
|
-
### Next Steps
|
|
510
|
-
1. {IF epic} Enrich _docs/ with architecture and decisions
|
|
511
|
-
2. Use `jira-ticket-focus` to start working on a specific story
|
|
512
|
-
3. {IF no Confluence} Consider syncing documentation to Confluence
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
---
|
|
516
|
-
|
|
517
|
-
## Mode 5: Continue Structure
|
|
518
|
-
|
|
519
|
-
Add new items (epics, stories, tasks, bugs) to an existing local structure while maintaining consistency with siblings and parent context.
|
|
520
|
-
|
|
521
|
-
### Step 1: Detect Current Context
|
|
522
|
-
|
|
523
|
-
- Identify what level we're at: initiative, epic, or story folder.
|
|
524
|
-
- Load the parent's context from its file and `_docs/`.
|
|
525
|
-
- Load sibling items for consistency (naming conventions, scope patterns, frontmatter format).
|
|
526
|
-
|
|
527
|
-
### Step 2: Accept New Item Definition
|
|
528
|
-
|
|
529
|
-
Ask the user:
|
|
530
|
-
|
|
531
|
-
```
|
|
532
|
-
What would you like to add?
|
|
533
|
-
1. Type: {Epic | Story | Task | Bug}
|
|
534
|
-
2. Parent: {folder path or ticket key}
|
|
535
|
-
3. Brief description
|
|
536
|
-
|
|
537
|
-
Or provide all at once, e.g.: "Add a story to PROJ-100 for user password reset"
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
### Step 3: Load Parent Context
|
|
541
|
-
|
|
542
|
-
- Read the parent's acceptance criteria, goals, and scope.
|
|
543
|
-
- Load `_docs/` content for architectural context.
|
|
544
|
-
- Review sibling items to ensure:
|
|
545
|
-
- Consistent naming conventions
|
|
546
|
-
- Complementary scope (no overlap with existing siblings)
|
|
547
|
-
- Similar structure and frontmatter format
|
|
548
|
-
|
|
549
|
-
### Step 4: Generate New Item
|
|
550
|
-
|
|
551
|
-
Create the new item's file(s):
|
|
552
|
-
|
|
553
|
-
- Match the parent's naming convention for the folder name.
|
|
554
|
-
- Use consistent YAML frontmatter (copy structure from a sibling).
|
|
555
|
-
- Set `structure.parent` as a relative path to the parent file.
|
|
556
|
-
- Include acceptance criteria derived from the description and parent context.
|
|
557
|
-
- Set `sync.status: "draft"`.
|
|
558
|
-
|
|
559
|
-
### Step 5: Optionally Create in Jira
|
|
560
|
-
|
|
561
|
-
```
|
|
562
|
-
Local file created. Create in Jira?
|
|
563
|
-
1. Create in Jira now (with parent link)
|
|
564
|
-
2. Keep as local draft
|
|
565
|
-
|
|
566
|
-
Choose [2]:
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
If creating: set parent/epic link, include Confluence links if parent has them, follow FCMP.
|
|
570
|
-
|
|
571
|
-
### Step 6: Optionally Add to Confluence
|
|
572
|
-
|
|
573
|
-
If the parent has Confluence pages:
|
|
574
|
-
|
|
575
|
-
```
|
|
576
|
-
Parent has Confluence documentation. Add a child page?
|
|
577
|
-
1. Create Confluence page under parent
|
|
578
|
-
2. Skip
|
|
579
|
-
|
|
580
|
-
Choose [2]:
|
|
581
|
-
```
|
|
582
|
-
|
|
583
|
-
### Output Format (Continue Structure)
|
|
584
|
-
|
|
585
|
-
```
|
|
586
|
-
## ➕ Added: {TICKET-KEY or "Draft"} — {Summary}
|
|
587
|
-
|
|
588
|
-
**Type:** {type} | **Parent:** {parent key/path}
|
|
589
|
-
**Local Path:** {relative_path}
|
|
590
|
-
|
|
591
|
-
### Context Used
|
|
592
|
-
- Parent: {parent summary}
|
|
593
|
-
- Siblings: {n} existing items reviewed for consistency
|
|
594
|
-
|
|
595
|
-
{IF CREATED IN JIRA:}
|
|
596
|
-
### Jira
|
|
597
|
-
- Created: {TICKET-KEY} — {summary}
|
|
598
|
-
- Parent: {PARENT-KEY}
|
|
599
|
-
|
|
600
|
-
### Next Steps
|
|
601
|
-
1. {IF draft} Create in Jira when ready
|
|
602
|
-
2. Use `jira-ticket-focus` to start working on this item
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
---
|
|
606
|
-
|
|
607
|
-
## Ownership Rules
|
|
608
|
-
|
|
609
|
-
This skill owns:
|
|
610
|
-
|
|
611
|
-
- `_docs/` folders within epic structures — this skill creates and maintains these files
|
|
612
|
-
- Confluence page generation and sync — both structured and flexible modes
|
|
613
|
-
- Epic folder creation — including `epic.md` structure
|
|
614
|
-
|
|
615
|
-
This skill does NOT own:
|
|
616
|
-
|
|
617
|
-
- `_work/` folders — owned by `jira-ticket-focus` / developer workflows
|
|
618
|
-
- Story ticket files — shared ownership with `jira-ticket-focus` and other skills
|
|
619
|
-
- Sprint/status operations — owned by other jira-* skills
|
|
620
|
-
|
|
621
|
-
## Session Context
|
|
622
|
-
|
|
623
|
-
After running, update conversational context with:
|
|
624
|
-
|
|
625
|
-
- **last_orchestrator_mode** — Which mode was used (context, create, sync)
|
|
626
|
-
- **last_epic_key** — The epic key that was operated on (if applicable)
|
|
627
|
-
- **last_epic_path** — Local path to the epic folder (if applicable)
|
|
628
|
-
- **confluence_pages_synced** — List of page URLs created/updated (if applicable)
|
|
629
|
-
|
|
630
|
-
## Doc-Type Mapping Reference
|
|
631
|
-
|
|
632
|
-
When creating `_docs/` content and syncing to Confluence, map source material to these Confluence page categories:
|
|
633
|
-
|
|
634
|
-
| Category | Confluence Title | Sources |
|
|
635
|
-
|----------|-----------------|---------|
|
|
636
|
-
| Strategic Context | "Strategic Context" | PRD, product context, initiative context docs |
|
|
637
|
-
| Technical Architecture | "Technical Architecture" | Architecture docs, technical notes, system design |
|
|
638
|
-
| Decisions | "Decision Log" | Decision logs from any level (consolidated) |
|
|
639
|
-
| Research & Findings | "Research & Findings" | UX research, user research, clarification logs |
|
|
640
|
-
| Assumptions | "Assumptions & Validations" | Assumption logs with confidence levels (consolidated) |
|
|
641
|
-
| Implementation Guidance | "Implementation Guidance" | Technical design docs (only if substantial) |
|
|
642
|
-
|
|
643
|
-
**Exclude from Confluence:** Individual story/task/bug files, implementation notes, subtask context, edge case lists, and test scenarios. These stay local only.
|