@groupby/ai-dev 0.1.0 → 0.2.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 +104 -0
- package/dist/index.js +260 -21
- package/package.json +15 -10
- package/toolsets/rzlv-flow/README.md +57 -0
- package/toolsets/rzlv-flow/docs/mcp-setup.md +126 -0
- package/toolsets/rzlv-flow/resources/README.md +16 -0
- package/toolsets/rzlv-flow/resources/confluence-file-structure.md +179 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/README.md +19 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/decisions.md +36 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/initiative-overview.md +40 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/strategic-context.md +44 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/technical-architecture.md +48 -0
- package/toolsets/rzlv-flow/resources/fcmp-protocol.md +331 -0
- package/toolsets/rzlv-flow/resources/jira-file-structure.md +177 -0
- package/toolsets/rzlv-flow/resources/sync-state-format.md +209 -0
- package/toolsets/rzlv-flow/skills/atlassian-orchestrator/SKILL.md +643 -0
- package/toolsets/rzlv-flow/skills/context-analyst/SKILL.md +265 -0
- package/toolsets/rzlv-flow/skills/jira-comment/SKILL.md +89 -0
- package/toolsets/rzlv-flow/skills/jira-daily-triage/SKILL.md +135 -0
- package/toolsets/rzlv-flow/skills/jira-sprint-status/SKILL.md +116 -0
- package/toolsets/rzlv-flow/skills/jira-status/SKILL.md +97 -0
- package/toolsets/rzlv-flow/skills/jira-sync/SKILL.md +148 -0
- package/toolsets/rzlv-flow/skills/jira-ticket-focus/SKILL.md +240 -0
- package/toolsets/rzlv-flow/skills/jira-ticket-trace/SKILL.md +112 -0
- package/toolsets/rzlv-flow/skills/jira-wrap-sync/SKILL.md +227 -0
- package/toolsets/toolsets/rzlv-flow/README.md +102 -0
- package/toolsets/toolsets/rzlv-flow/docs/getting-started.md +102 -0
- package/toolsets/toolsets/rzlv-flow/docs/mcp-setup.md +126 -0
- package/toolsets/toolsets/rzlv-flow/resources/README.md +16 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-file-structure.md +285 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/README.md +19 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/decisions.md +36 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/initiative-overview.md +40 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/strategic-context.md +44 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/technical-architecture.md +48 -0
- package/toolsets/toolsets/rzlv-flow/resources/fcmp-protocol.md +331 -0
- package/toolsets/toolsets/rzlv-flow/resources/jira-file-structure.md +177 -0
- package/toolsets/toolsets/rzlv-flow/resources/sync-state-format.md +318 -0
- package/toolsets/toolsets/rzlv-flow/skills/atlassian-orchestrator/SKILL.md +643 -0
- package/toolsets/toolsets/rzlv-flow/skills/confluence-fetch/SKILL.md +189 -0
- package/toolsets/toolsets/rzlv-flow/skills/confluence-publish/SKILL.md +178 -0
- package/toolsets/toolsets/rzlv-flow/skills/context-analyst/SKILL.md +265 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-comment/SKILL.md +89 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-daily-triage/SKILL.md +143 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-sprint-status/SKILL.md +143 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-status/SKILL.md +97 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-sync/SKILL.md +148 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-ticket-focus/SKILL.md +245 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-ticket-trace/SKILL.md +112 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-wrap-sync/SKILL.md +260 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-comment
|
|
3
|
+
description: Add a comment to a Jira ticket with FCMP sync safety. Fetches current ticket state first, shows any new comments since last sync, confirms the comment to add, then pushes via MCP. Use when you want to add a comment to a Jira ticket.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Add a comment to a Jira ticket with sync safety. Follows the FCMP protocol — fetches the current ticket state and recent comments before writing, so you have full context and avoid surprises.
|
|
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 this resource file:
|
|
15
|
+
|
|
16
|
+
- `docs/ai/resources/fcmp-protocol.md` — follow the FCMP protocol for the comment operation
|
|
17
|
+
|
|
18
|
+
## Process
|
|
19
|
+
|
|
20
|
+
### Step 1: Get Ticket Key and Comment
|
|
21
|
+
|
|
22
|
+
- Use the `focused_ticket` from conversation context if available.
|
|
23
|
+
- Otherwise, ask the user for the ticket key.
|
|
24
|
+
- Get the comment text from the user. If not provided, ask: "What would you like to comment?"
|
|
25
|
+
|
|
26
|
+
### Step 2: FETCH — Get Current State
|
|
27
|
+
|
|
28
|
+
Fetch the current ticket state via `mcp_atlassian-rovo_fetch()`:
|
|
29
|
+
|
|
30
|
+
- Current status, assignee, summary (brief context)
|
|
31
|
+
- All comments — especially any added since the last sync
|
|
32
|
+
|
|
33
|
+
### Step 3: Show New Comments
|
|
34
|
+
|
|
35
|
+
Compare the fetched comments against the last known state (from the local `{TICKET-KEY}.md` file's `sync.last_synced` timestamp, if available).
|
|
36
|
+
|
|
37
|
+
If there are new comments from others since the last sync, display them:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
### New Comments Since Last Sync
|
|
41
|
+
- **{author}** ({time ago}): "{comment excerpt}"
|
|
42
|
+
- **{author}** ({time ago}): "{comment excerpt}"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This ensures the user has full context before adding their own comment.
|
|
46
|
+
|
|
47
|
+
### Step 4: Confirm Comment
|
|
48
|
+
|
|
49
|
+
Present the comment to be added and ask for confirmation:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
### Comment to Add on {TICKET-KEY}
|
|
53
|
+
{comment text}
|
|
54
|
+
|
|
55
|
+
Add this comment? (y/n/edit)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- **y** — proceed to push
|
|
59
|
+
- **n** — cancel
|
|
60
|
+
- **edit** — let the user revise the comment text
|
|
61
|
+
|
|
62
|
+
### Step 5: PUSH — Add Comment
|
|
63
|
+
|
|
64
|
+
Push the comment via MCP.
|
|
65
|
+
|
|
66
|
+
- On success: confirm with the timestamp.
|
|
67
|
+
- On failure: report the error and preserve the comment text so the user can retry.
|
|
68
|
+
|
|
69
|
+
### Step 6: Update Local State
|
|
70
|
+
|
|
71
|
+
If a local `{TICKET-KEY}.md` file exists, update `sync.last_synced` to the current timestamp.
|
|
72
|
+
|
|
73
|
+
## Output Format
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
## 💬 Comment: {TICKET-KEY}
|
|
77
|
+
|
|
78
|
+
{IF NEW COMMENTS FOUND:}
|
|
79
|
+
### New Comments Since Last Sync
|
|
80
|
+
- **{author}** ({time ago}): "{comment excerpt}"
|
|
81
|
+
|
|
82
|
+
### Your Comment
|
|
83
|
+
{comment text}
|
|
84
|
+
|
|
85
|
+
Add this comment? (y/n/edit)
|
|
86
|
+
|
|
87
|
+
{AFTER PUSH:}
|
|
88
|
+
✓ Comment added to {TICKET-KEY} at {timestamp}
|
|
89
|
+
```
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-daily-triage
|
|
3
|
+
description: Start your day with intelligent Jira ticket triage. Confirms your project and sprint, fetches prioritized tickets grouped by status, identifies blockers, and recommends what to focus on. Use when starting your workday, switching projects, or needing a prioritized view of your sprint.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Daily ticket triage and sprint planning. Connects to Jira via MCP, detects the active sprint, fetches and prioritizes your tickets, and presents an actionable overview with numbered ticket selection.
|
|
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 for protocol and structure guidance:
|
|
15
|
+
|
|
16
|
+
- `docs/ai/resources/fcmp-protocol.md` — follow read protocols for all Jira operations
|
|
17
|
+
- `docs/ai/resources/jira-file-structure.md` — understand the local file structure
|
|
18
|
+
|
|
19
|
+
## Process
|
|
20
|
+
|
|
21
|
+
### Step 1: Confirm Project
|
|
22
|
+
|
|
23
|
+
- Check the conversation for a previously confirmed Jira project key.
|
|
24
|
+
- If a project is known from prior context, offer to continue with it or switch:
|
|
25
|
+
```
|
|
26
|
+
Select project for this session:
|
|
27
|
+
1. Continue with {PROJECT} (default)
|
|
28
|
+
2. Use a different project
|
|
29
|
+
|
|
30
|
+
Choose [1]:
|
|
31
|
+
```
|
|
32
|
+
- If the user enters "1" or presses Enter, use the default.
|
|
33
|
+
- If the user enters "2", ask: "Enter project key:"
|
|
34
|
+
- If the user provides a project key directly (e.g. "PROJ"), use it.
|
|
35
|
+
- Store the confirmed project for all subsequent commands in this session.
|
|
36
|
+
|
|
37
|
+
### Step 2: Detect Active Sprint
|
|
38
|
+
|
|
39
|
+
- Use MCP to search for the active sprint in the confirmed project:
|
|
40
|
+
```
|
|
41
|
+
JQL: project = {PROJECT} AND sprint in openSprints()
|
|
42
|
+
```
|
|
43
|
+
- Extract the sprint name, ID, end date, and days remaining from the results.
|
|
44
|
+
- If no open sprint is found, display: "No active sprint detected — Backlog mode" and continue without a sprint filter. In Backlog mode, skip sprint-scoped queries and show only the user's assigned tickets ordered by priority.
|
|
45
|
+
- Store the active sprint name, ID, end date, and days remaining for the session.
|
|
46
|
+
|
|
47
|
+
> **Note:** Sprint data may be stored in custom fields whose names vary by Jira instance. When using MCP to query sprint tickets, inspect the returned fields for sprint information (name, start/end dates, goal). If sprint details are missing from the default field set, request additional fields or use `'*all'` to retrieve all fields.
|
|
48
|
+
|
|
49
|
+
### Step 3: Fetch Tickets in Priority Order
|
|
50
|
+
|
|
51
|
+
Run three JQL queries via `mcp_atlassian-rovo_search()`:
|
|
52
|
+
|
|
53
|
+
**a) Sprint tickets assigned to me** (highest priority):
|
|
54
|
+
```
|
|
55
|
+
project = {PROJECT} AND sprint in openSprints() AND assignee = currentUser()
|
|
56
|
+
ORDER BY status ASC, priority DESC
|
|
57
|
+
```
|
|
58
|
+
Group results by status: "In Progress" first, then "To Do" / "Open".
|
|
59
|
+
|
|
60
|
+
**b) Unassigned sprint tickets:**
|
|
61
|
+
```
|
|
62
|
+
project = {PROJECT} AND sprint in openSprints() AND assignee is EMPTY
|
|
63
|
+
ORDER BY priority DESC
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**c) High-priority backlog — my assignments (top 3):**
|
|
67
|
+
```
|
|
68
|
+
project = {PROJECT} AND assignee = currentUser() AND sprint is EMPTY
|
|
69
|
+
ORDER BY priority DESC
|
|
70
|
+
```
|
|
71
|
+
Limit to 3 tickets. Exclude any tickets already in sprint results.
|
|
72
|
+
|
|
73
|
+
### Step 4: Triage and Present
|
|
74
|
+
|
|
75
|
+
- Calculate sprint progress metrics (tickets done / total tickets).
|
|
76
|
+
- Flag blockers or stale tickets (no updates for 3+ days).
|
|
77
|
+
- Identify quick wins (low-point tickets in "To Do") vs deep work (high-point "In Progress").
|
|
78
|
+
- Recommend a focus ticket based on status and priority:
|
|
79
|
+
- Prefer continuing "In Progress" tickets over starting new ones.
|
|
80
|
+
- Among "To Do" tickets, prefer higher priority and lower story points.
|
|
81
|
+
|
|
82
|
+
### Step 5: Assign Numbered List
|
|
83
|
+
|
|
84
|
+
- Assign a sequential number to every ticket across all sections (1, 2, 3, ...).
|
|
85
|
+
- The numbered mapping persists in conversational context so that subsequent commands (e.g. `jira-ticket-focus`) can accept a number instead of a full ticket key.
|
|
86
|
+
|
|
87
|
+
## Output Format
|
|
88
|
+
|
|
89
|
+
Present results using this structure:
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
## 🌅 Your Day — {date}
|
|
93
|
+
**Project:** {PROJECT} | **Sprint:** {Sprint Name} | **Ends:** {end_date} ({days_left} days left)
|
|
94
|
+
**Sprint Progress:** {X}/{Y} tickets complete
|
|
95
|
+
|
|
96
|
+
{IF NO SPRINT:}
|
|
97
|
+
## 🌅 Your Day — {date}
|
|
98
|
+
**Project:** {PROJECT} | **No active sprint detected — Backlog mode**
|
|
99
|
+
|
|
100
|
+
### 🔥 In Progress (Complete These First)
|
|
101
|
+
| # | Ticket | Summary | Points | Days Active |
|
|
102
|
+
|---|--------|---------|--------|-------------|
|
|
103
|
+
| 1 | PROJ-123 | Backend API endpoint | 3 | 2d |
|
|
104
|
+
|
|
105
|
+
### 📋 Sprint — Ready to Start
|
|
106
|
+
| # | Ticket | Summary | Points | Priority |
|
|
107
|
+
|---|--------|---------|--------|----------|
|
|
108
|
+
| 2 | PROJ-124 | User validation | 2 | High |
|
|
109
|
+
| 3 | PROJ-125 | Error handling | 1 | Medium |
|
|
110
|
+
|
|
111
|
+
### 🆘 Sprint — Needs Assignment
|
|
112
|
+
| # | Ticket | Summary | Points | Priority |
|
|
113
|
+
|---|--------|---------|--------|----------|
|
|
114
|
+
| 4 | PROJ-126 | Integration test | 3 | High |
|
|
115
|
+
|
|
116
|
+
### 📌 High Priority Backlog (Top 3)
|
|
117
|
+
| # | Ticket | Summary | Points | Priority |
|
|
118
|
+
|---|--------|---------|--------|----------|
|
|
119
|
+
| 5 | PROJ-130 | Performance fix | 5 | Critical |
|
|
120
|
+
|
|
121
|
+
### ⚠️ Blockers & Flags
|
|
122
|
+
- {TICKET-KEY}: {blocker description} ({n} days)
|
|
123
|
+
- {TICKET-KEY}: {blocker description} ({n} days)
|
|
124
|
+
{IF NO BLOCKERS:}
|
|
125
|
+
✓ No blockers detected
|
|
126
|
+
|
|
127
|
+
**Recommended Focus:** #1 PROJ-123 (continue in-progress work) or #2 PROJ-124 (fresh start)
|
|
128
|
+
|
|
129
|
+
Type a number (1-5) to focus on that ticket, or say "adjust" to reprioritize.
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Omit any section that has no tickets (e.g. skip "Needs Assignment" if all sprint tickets are assigned).
|
|
133
|
+
|
|
134
|
+
## Session Context
|
|
135
|
+
|
|
136
|
+
After running, remember the following in conversational context for subsequent commands:
|
|
137
|
+
|
|
138
|
+
- **confirmed_project** — The Jira project key
|
|
139
|
+
- **active_sprint_name** — The detected sprint name
|
|
140
|
+
- **active_sprint_id** — The sprint ID
|
|
141
|
+
- **numbered_ticket_list** — Mapping of display numbers to Jira ticket keys
|
|
142
|
+
|
|
143
|
+
These values should be reused by other skills (e.g. `jira-ticket-focus`) without re-prompting the user.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-sprint-status
|
|
3
|
+
description: Generate a sprint status report with completion metrics. Fetches all sprint tickets, groups by status, calculates progress percentages, identifies risks and blockers, and summarizes your personal contribution. Use when you need a sprint overview or standup preparation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Sprint status report with completion metrics. Fetches all tickets in the active sprint, groups them by status, calculates progress (ticket count and story points), flags risks and blockers, and highlights your personal contribution — useful for standups or mid-sprint check-ins.
|
|
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 this resource file:
|
|
15
|
+
|
|
16
|
+
- `docs/ai/resources/fcmp-protocol.md` — follow read protocols for Jira fetch operations
|
|
17
|
+
|
|
18
|
+
## Process
|
|
19
|
+
|
|
20
|
+
### Step 1: Confirm Project
|
|
21
|
+
|
|
22
|
+
- Use `confirmed_project` from conversation context (set by `jira-daily-triage`) if available.
|
|
23
|
+
- Otherwise, ask the user for their Jira project key.
|
|
24
|
+
|
|
25
|
+
### Step 2: Detect Active Sprint
|
|
26
|
+
|
|
27
|
+
Use MCP to find the active sprint:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
JQL: project = {PROJECT} AND sprint in openSprints()
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Extract the sprint name, ID, start date, end date, and sprint goal (if set). If no open sprint is found, inform the user and offer to report on a specific sprint or the full backlog.
|
|
34
|
+
|
|
35
|
+
> **Note:** Sprint data may be stored in custom fields whose names vary by Jira instance. When using MCP to query sprint tickets, inspect the returned fields for sprint information (name, start/end dates, goal). If sprint details are missing from the default field set, request additional fields or use `'*all'` to retrieve all fields.
|
|
36
|
+
|
|
37
|
+
### Step 3: Fetch All Sprint Tickets
|
|
38
|
+
|
|
39
|
+
Fetch all tickets in the sprint via `mcp_atlassian-rovo_search()`:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
JQL: project = {PROJECT} AND sprint in openSprints() ORDER BY status ASC, priority DESC
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
For each ticket, collect: key, summary, status, assignee, story points, priority, last updated date.
|
|
46
|
+
|
|
47
|
+
### Step 4: Group and Calculate Metrics
|
|
48
|
+
|
|
49
|
+
Group tickets by status category:
|
|
50
|
+
|
|
51
|
+
- **Done** — tickets in terminal/completed statuses
|
|
52
|
+
- **In Progress** — tickets actively being worked on
|
|
53
|
+
- **To Do** — tickets not yet started
|
|
54
|
+
- **Blocked** — tickets flagged or with blocker labels (if detectable)
|
|
55
|
+
|
|
56
|
+
Calculate:
|
|
57
|
+
- Ticket count per group
|
|
58
|
+
- Story points per group (sum)
|
|
59
|
+
- Overall completion percentage (done points / total points, or done count / total count)
|
|
60
|
+
- Sprint velocity so far (points completed)
|
|
61
|
+
|
|
62
|
+
### Step 4b: Calculate Velocity and Forecast
|
|
63
|
+
|
|
64
|
+
Using the sprint start date, end date, and points completed so far:
|
|
65
|
+
|
|
66
|
+
- **Days elapsed** — business days since sprint start
|
|
67
|
+
- **Days remaining** — business days until sprint end
|
|
68
|
+
- **Ideal velocity** — total points / total sprint days (points/day to finish on time)
|
|
69
|
+
- **Actual velocity** — done points / days elapsed
|
|
70
|
+
- **Forecast** — at current velocity, project whether the sprint will finish on time, ahead, or behind. If behind, estimate the shortfall: "May miss by {n} points"
|
|
71
|
+
|
|
72
|
+
### Step 5: Identify Risks
|
|
73
|
+
|
|
74
|
+
Flag potential risks:
|
|
75
|
+
|
|
76
|
+
- **Stale tickets:** "In Progress" tickets with no updates for 3+ days.
|
|
77
|
+
- **Unassigned work:** Sprint tickets with no assignee.
|
|
78
|
+
- **High-point items in To Do:** Large stories that haven't started yet (risk of not completing in sprint).
|
|
79
|
+
- **Scope indicators:** Compare total points against typical sprint velocity if known.
|
|
80
|
+
|
|
81
|
+
### Step 6: Summarize Personal Contribution
|
|
82
|
+
|
|
83
|
+
Filter tickets assigned to the current user:
|
|
84
|
+
|
|
85
|
+
- Tickets completed this sprint
|
|
86
|
+
- Tickets currently in progress
|
|
87
|
+
- Points completed vs total assigned
|
|
88
|
+
|
|
89
|
+
## Output Format
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
## 📊 Sprint Status: {Sprint Name}
|
|
93
|
+
**Project:** {PROJECT} | **Sprint:** {Sprint Name}
|
|
94
|
+
**Ends:** {end_date} ({days_left} days left)
|
|
95
|
+
{IF SPRINT GOAL SET:}
|
|
96
|
+
**Goal:** {Sprint Goal}
|
|
97
|
+
|
|
98
|
+
████████████░░░░░░░░ {percent}% Complete
|
|
99
|
+
|
|
100
|
+
### Progress
|
|
101
|
+
| Status | Tickets | Story Points |
|
|
102
|
+
|--------|---------|-------------|
|
|
103
|
+
| Done | {n} | {pts} |
|
|
104
|
+
| In Progress | {n} | {pts} |
|
|
105
|
+
| To Do | {n} | {pts} |
|
|
106
|
+
| **Total** | **{n}** | **{pts}** |
|
|
107
|
+
|
|
108
|
+
**Completion:** {percent}% by points ({done_pts}/{total_pts})
|
|
109
|
+
|
|
110
|
+
### Velocity & Forecast
|
|
111
|
+
- **Ideal:** {n} points/day
|
|
112
|
+
- **Actual:** {n} points/day
|
|
113
|
+
- **Forecast:** {On track | Ahead by {n} points | May miss by {n} points}
|
|
114
|
+
|
|
115
|
+
### Ticket Breakdown
|
|
116
|
+
| # | Ticket | Summary | Status | Assignee | Points |
|
|
117
|
+
|---|--------|---------|--------|----------|--------|
|
|
118
|
+
| 1 | PROJ-101 | Feature A | Done | @user1 | 3 |
|
|
119
|
+
| 2 | PROJ-102 | Feature B | In Progress | @user2 | 5 |
|
|
120
|
+
| 3 | PROJ-103 | Feature C | To Do | Unassigned | 2 |
|
|
121
|
+
|
|
122
|
+
### ⚠️ Risks
|
|
123
|
+
{IF STALE TICKETS:}
|
|
124
|
+
- **Stale:** {TICKET-KEY} — In Progress, no update for {n} days
|
|
125
|
+
{IF UNASSIGNED:}
|
|
126
|
+
- **Unassigned:** {TICKET-KEY} — {summary} ({points} pts)
|
|
127
|
+
{IF LARGE ITEMS NOT STARTED:}
|
|
128
|
+
- **At Risk:** {TICKET-KEY} — {points} pts, not started yet
|
|
129
|
+
{IF NO RISKS:}
|
|
130
|
+
✓ No risks detected
|
|
131
|
+
|
|
132
|
+
### My Contribution
|
|
133
|
+
- **Completed:** {n} tickets ({pts} pts)
|
|
134
|
+
- **In Progress:** {n} tickets ({pts} pts)
|
|
135
|
+
- **Assigned (To Do):** {n} tickets ({pts} pts)
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
**Quick Actions:**
|
|
139
|
+
1. View at-risk tickets in detail
|
|
140
|
+
2. Focus on blocked items
|
|
141
|
+
3. Generate standup update (summary for copy/paste)
|
|
142
|
+
4. Export sprint data as markdown table
|
|
143
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-status
|
|
3
|
+
description: Change a Jira ticket's status with transition validation and FCMP sync safety. Fetches current state, verifies status hasn't changed remotely, shows available transitions as a numbered list, and executes the selected transition. Use when you want to move a Jira ticket to a different status.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Transition a Jira ticket's status with sync safety. Follows the FCMP protocol — fetches the current state, verifies no remote status change since last sync, presents valid transitions as a numbered list, and executes the selected transition via MCP.
|
|
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 this resource file:
|
|
15
|
+
|
|
16
|
+
- `docs/ai/resources/fcmp-protocol.md` — follow the FCMP protocol for status transitions
|
|
17
|
+
|
|
18
|
+
## Process
|
|
19
|
+
|
|
20
|
+
### Step 1: Get Ticket Key
|
|
21
|
+
|
|
22
|
+
- Use the `focused_ticket` from conversation context if available.
|
|
23
|
+
- Otherwise, ask the user for the ticket key.
|
|
24
|
+
|
|
25
|
+
### Step 2: FETCH — Get Current State
|
|
26
|
+
|
|
27
|
+
Fetch the current ticket state via `mcp_atlassian-rovo_fetch()`:
|
|
28
|
+
|
|
29
|
+
- Current status
|
|
30
|
+
- Assignee and summary (for confirmation context)
|
|
31
|
+
- Version field (for optimistic locking)
|
|
32
|
+
|
|
33
|
+
### Step 3: COMPARE — Verify No Remote Change
|
|
34
|
+
|
|
35
|
+
Compare the fetched status against the last known local state (from the `{TICKET-KEY}.md` frontmatter if available).
|
|
36
|
+
|
|
37
|
+
- If the remote status has changed since last sync, warn the user:
|
|
38
|
+
```
|
|
39
|
+
⚠️ Status changed remotely: {old_status} → {current_remote_status}
|
|
40
|
+
Continue with transition from {current_remote_status}? (y/n)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Step 4: Get Available Transitions
|
|
44
|
+
|
|
45
|
+
Fetch available transitions for the ticket via MCP (e.g. `getTransitionsForJiraIssue` or equivalent).
|
|
46
|
+
|
|
47
|
+
Present as a numbered list:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Current Status: {current_status}
|
|
51
|
+
|
|
52
|
+
Available transitions:
|
|
53
|
+
1. {transition_name_1}
|
|
54
|
+
2. {transition_name_2}
|
|
55
|
+
3. {transition_name_3}
|
|
56
|
+
4. Cancel
|
|
57
|
+
|
|
58
|
+
Choose transition [1]:
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Do not assume a standard workflow (To Do → In Progress → Done). Always fetch the actual available transitions, as Jira workflows vary by project.
|
|
62
|
+
|
|
63
|
+
### Step 5: Execute Transition
|
|
64
|
+
|
|
65
|
+
After the user selects a transition number:
|
|
66
|
+
|
|
67
|
+
1. Confirm: "Transition {TICKET-KEY} from {current_status} to {target_status}? (y/n)"
|
|
68
|
+
2. **PUSH** — Execute the transition via MCP.
|
|
69
|
+
3. On success: confirm with the new status.
|
|
70
|
+
4. On failure: report the error (e.g. required fields missing, permission denied, transition not available).
|
|
71
|
+
|
|
72
|
+
### Step 6: Update Local State
|
|
73
|
+
|
|
74
|
+
If a local `{TICKET-KEY}.md` file exists:
|
|
75
|
+
|
|
76
|
+
- Update `sync.status` to the new status
|
|
77
|
+
- Update `sync.last_synced` to the current timestamp
|
|
78
|
+
- Update `sync.version` with the new version from Jira
|
|
79
|
+
|
|
80
|
+
## Output Format
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
## 🔄 Status: {TICKET-KEY}
|
|
84
|
+
|
|
85
|
+
**Current Status:** {current_status}
|
|
86
|
+
|
|
87
|
+
Available transitions:
|
|
88
|
+
1. {transition_1}
|
|
89
|
+
2. {transition_2}
|
|
90
|
+
3. {transition_3}
|
|
91
|
+
4. Cancel
|
|
92
|
+
|
|
93
|
+
Choose transition [1]:
|
|
94
|
+
|
|
95
|
+
{AFTER TRANSITION:}
|
|
96
|
+
✓ {TICKET-KEY} transitioned: {old_status} → {new_status}
|
|
97
|
+
```
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-sync
|
|
3
|
+
description: Force-sync local Jira context to bring it up to date with the remote state. Runs the full FCMP protocol (Fetch-Compare-Merge-Push) for a specified ticket, showing diffs if remote changes are detected and resolving conflicts with user input. Use when you want to refresh your local Jira mirror or suspect your local state is stale.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Force-sync a local Jira ticket file with the remote state. Runs the complete FCMP protocol — fetches the current remote state, compares against the local file, shows diffs if anything changed, and resolves conflicts with user input. Use this when your local state might be stale or after someone else updates the ticket in Jira.
|
|
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:
|
|
15
|
+
|
|
16
|
+
- `docs/ai/resources/fcmp-protocol.md` — **critical** — the full FCMP protocol to follow
|
|
17
|
+
- `docs/ai/resources/jira-file-structure.md` — to locate the local ticket file
|
|
18
|
+
- `docs/ai/resources/sync-state-format.md` — YAML frontmatter schema for reading and updating the ticket file
|
|
19
|
+
|
|
20
|
+
## Process
|
|
21
|
+
|
|
22
|
+
### Step 1: Get Ticket Key
|
|
23
|
+
|
|
24
|
+
- Use `focused_ticket` from conversation context if available.
|
|
25
|
+
- Otherwise, ask the user for the ticket key.
|
|
26
|
+
|
|
27
|
+
### Step 2: Locate Local File
|
|
28
|
+
|
|
29
|
+
Find the local `{TICKET-KEY}.md` file using the rules in `jira-file-structure.md`:
|
|
30
|
+
|
|
31
|
+
1. Search under `docs/jira/{instance}/{project}/` for a file matching `{TICKET-KEY}.md`.
|
|
32
|
+
2. It may be in an epic folder (`{epic-name}/stories/{TICKET-KEY}/{TICKET-KEY}.md`) or in `_orphans/`.
|
|
33
|
+
3. If no local file exists, inform the user and offer to create one by fetching from Jira (effectively a first-time sync).
|
|
34
|
+
|
|
35
|
+
### Step 3: FETCH — Get Remote State
|
|
36
|
+
|
|
37
|
+
Fetch the full ticket state from Jira via `mcp_atlassian-rovo_fetch()`:
|
|
38
|
+
|
|
39
|
+
- Summary, description, acceptance criteria
|
|
40
|
+
- Status, assignee, priority, story points
|
|
41
|
+
- Version number (for optimistic locking)
|
|
42
|
+
- Last updated timestamp
|
|
43
|
+
- Recent comments
|
|
44
|
+
|
|
45
|
+
### Step 4: COMPARE — Diff Local vs Remote
|
|
46
|
+
|
|
47
|
+
Compare the fetched remote state against the local file:
|
|
48
|
+
|
|
49
|
+
- **Frontmatter fields:** `sync.status`, `sync.assignee`, `sync.priority`, `sync.story_points`, `sync.version`
|
|
50
|
+
- **Body content:** description, acceptance criteria, technical notes
|
|
51
|
+
- **Timestamps:** `sync.remote_updated` vs the remote `updated_at`
|
|
52
|
+
|
|
53
|
+
Determine the scenario:
|
|
54
|
+
|
|
55
|
+
| Scenario | Condition | Action |
|
|
56
|
+
|----------|-----------|--------|
|
|
57
|
+
| Already up to date | `sync.version` matches remote version | Report "Already up to date" |
|
|
58
|
+
| Remote changed only | Remote version is newer, no local modifications | Apply remote changes |
|
|
59
|
+
| Local changed only | Local has edits, remote is same as last sync | No action needed (local changes preserved) |
|
|
60
|
+
| Both changed | Local edits AND remote version is newer | Conflict — proceed to merge |
|
|
61
|
+
|
|
62
|
+
### Step 5: Show Diff
|
|
63
|
+
|
|
64
|
+
If changes are detected, present them clearly:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
### Changes Detected
|
|
68
|
+
|
|
69
|
+
{FOR EACH CHANGED FIELD:}
|
|
70
|
+
**{field_name}:**
|
|
71
|
+
- Local: {local_value}
|
|
72
|
+
- Remote: {remote_value}
|
|
73
|
+
|
|
74
|
+
{FOR BODY CHANGES:}
|
|
75
|
+
**Description:**
|
|
76
|
+
- Lines added remotely: {n}
|
|
77
|
+
- Lines removed remotely: {n}
|
|
78
|
+
{Show abbreviated diff}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Step 6: MERGE — Resolve Conflicts
|
|
82
|
+
|
|
83
|
+
If both local and remote have changes:
|
|
84
|
+
|
|
85
|
+
1. Present the conflict to the user.
|
|
86
|
+
2. Offer resolution strategies:
|
|
87
|
+
```
|
|
88
|
+
Conflict detected. How would you like to resolve?
|
|
89
|
+
1. Keep remote (discard local changes)
|
|
90
|
+
2. Keep local (your changes will overwrite on next push)
|
|
91
|
+
3. Manual merge (I'll show both versions side by side)
|
|
92
|
+
```
|
|
93
|
+
3. For **auto-merge** (changes in different sections), combine both changes automatically and confirm with the user.
|
|
94
|
+
4. For **manual merge**, present both versions and let the user edit.
|
|
95
|
+
|
|
96
|
+
If only the remote changed (no local edits), apply the remote changes directly.
|
|
97
|
+
|
|
98
|
+
### Step 7: Update Local File
|
|
99
|
+
|
|
100
|
+
After merge resolution:
|
|
101
|
+
|
|
102
|
+
1. Write the merged content to the local `{TICKET-KEY}.md` file.
|
|
103
|
+
2. Update frontmatter fields:
|
|
104
|
+
- `sync.status` — current remote status
|
|
105
|
+
- `sync.assignee` — current assignee
|
|
106
|
+
- `sync.priority` — current priority
|
|
107
|
+
- `sync.story_points` — current story points
|
|
108
|
+
- `sync.last_synced` — current timestamp
|
|
109
|
+
- `sync.version` — remote version number
|
|
110
|
+
- `sync.remote_updated` — remote last updated timestamp
|
|
111
|
+
3. Preserve any `agile_companion` or `orchestrator` metadata that exists.
|
|
112
|
+
|
|
113
|
+
### Step 8: Report Results
|
|
114
|
+
|
|
115
|
+
Confirm what changed.
|
|
116
|
+
|
|
117
|
+
## Output Format
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
## 🔄 Sync: {TICKET-KEY}
|
|
121
|
+
|
|
122
|
+
{IF ALREADY UP TO DATE:}
|
|
123
|
+
✓ {TICKET-KEY} is already up to date (version {version})
|
|
124
|
+
|
|
125
|
+
{IF CHANGES APPLIED:}
|
|
126
|
+
### Changes Applied
|
|
127
|
+
{List of fields updated with old → new values}
|
|
128
|
+
|
|
129
|
+
- **Status:** {old} → {new}
|
|
130
|
+
- **Assignee:** {old} → {new}
|
|
131
|
+
- **Description:** Updated ({n} lines changed)
|
|
132
|
+
|
|
133
|
+
✓ Local file synced to version {version} at {timestamp}
|
|
134
|
+
|
|
135
|
+
{IF CONFLICT RESOLVED:}
|
|
136
|
+
### Conflict Resolved
|
|
137
|
+
- Strategy: {keep_remote | keep_local | auto_merge | manual_merge}
|
|
138
|
+
- Fields affected: {list}
|
|
139
|
+
|
|
140
|
+
✓ Conflict resolved and local file updated to version {version}
|
|
141
|
+
|
|
142
|
+
{IF NEW FILE CREATED:}
|
|
143
|
+
### New File Created
|
|
144
|
+
- Path: {relative_path_to_ticket_file}
|
|
145
|
+
- Fetched from Jira: version {version}
|
|
146
|
+
|
|
147
|
+
✓ Local file created for {TICKET-KEY}
|
|
148
|
+
```
|