@groupby/ai-dev 0.2.1 → 0.3.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 +3 -1
- package/dist/index.js +86 -19
- package/package.json +4 -4
- package/skills/library/implementation-plan/README.md +19 -0
- package/skills/library/implementation-plan/SKILL.md +337 -0
- package/skills/library/jira-plan/README.md +17 -0
- package/skills/library/jira-plan/SKILL.md +163 -0
- 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,6 +1,6 @@
|
|
|
1
1
|
# Confluence File Structure — Local Page Mirrors
|
|
2
2
|
|
|
3
|
-
**Pattern:**
|
|
3
|
+
**Pattern:** Leaf Bundle local mirrors for Confluence pages
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -15,6 +15,30 @@ Both modes follow the FCMP protocol for safe sync operations and preserve manual
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
## Leaf Bundle Pattern
|
|
19
|
+
|
|
20
|
+
Every Confluence page is stored as a **directory** containing an `index.md` file — never as a standalone `.md` file. This is called the Leaf Bundle pattern.
|
|
21
|
+
|
|
22
|
+
### Why Folders, Not Files?
|
|
23
|
+
|
|
24
|
+
- **Child pages** — A Confluence page can have child pages. The folder naturally represents this hierarchy; child pages become subdirectories.
|
|
25
|
+
- **Assets** — Pages may include attachments, images, or diagrams. These are stored alongside `index.md` in the same folder.
|
|
26
|
+
- **Hierarchy expansion** — New child pages can be added without restructuring. A flat file cannot grow into a parent.
|
|
27
|
+
|
|
28
|
+
### DO NOT / DO
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
❌ DO NOT create flat files:
|
|
32
|
+
docs/confluence/rezolve/ENG/strategic-context.md
|
|
33
|
+
|
|
34
|
+
✅ DO create Leaf Bundle directories:
|
|
35
|
+
docs/confluence/rezolve/ENG/strategic-context/index.md
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
This rule applies to **all** Confluence page mirrors, in both structured and flexible modes.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
18
42
|
## Base Path
|
|
19
43
|
|
|
20
44
|
```
|
|
@@ -37,27 +61,34 @@ docs/confluence/{instance}/{space}/
|
|
|
37
61
|
└── {initiative-name}/
|
|
38
62
|
├── index.md # Initiative Overview
|
|
39
63
|
└── {epic-name}/
|
|
40
|
-
├── overview
|
|
41
|
-
|
|
42
|
-
├──
|
|
43
|
-
|
|
44
|
-
├──
|
|
45
|
-
|
|
46
|
-
|
|
64
|
+
├── overview/
|
|
65
|
+
│ └── index.md
|
|
66
|
+
├── technical-architecture/
|
|
67
|
+
│ └── index.md
|
|
68
|
+
├── decisions/
|
|
69
|
+
│ └── index.md
|
|
70
|
+
├── strategic-context/
|
|
71
|
+
│ └── index.md
|
|
72
|
+
├── research-and-findings/ # Created only if relevant content exists
|
|
73
|
+
│ └── index.md
|
|
74
|
+
├── assumptions/ # Created only if relevant content exists
|
|
75
|
+
│ └── index.md
|
|
76
|
+
└── implementation-guidance/
|
|
77
|
+
└── index.md
|
|
47
78
|
```
|
|
48
79
|
|
|
49
80
|
### Page Types
|
|
50
81
|
|
|
51
|
-
| Page Type | Source | Description |
|
|
52
|
-
|
|
53
|
-
| Initiative Overview
|
|
54
|
-
| `overview.md` | Epic `_docs/` | High-level epic overview and goals |
|
|
55
|
-
| `technical-architecture.md` | Epic `_docs/` | Architecture decisions and technical design |
|
|
56
|
-
| `decisions.md` | Epic `_docs/` | Decision log and rationale |
|
|
57
|
-
| `strategic-context.md` | Epic `_docs/` | Business context and strategic alignment |
|
|
58
|
-
| `research-and-findings.md` | Epic `_docs/` | User research, discoveries, and clarifications* |
|
|
59
|
-
| `assumptions.md` | Epic `_docs/` | Assumptions with confidence levels and validation status* |
|
|
60
|
-
| `implementation-guidance.md` | Epic `_docs/` | High-value technical guides for development |
|
|
82
|
+
| Page Type | Folder | Source | Description |
|
|
83
|
+
|-----------|--------|--------|-------------|
|
|
84
|
+
| Initiative Overview | `index.md` (at initiative root) | Initiative metadata | Top-level overview: goals, epic breakdown, navigation |
|
|
85
|
+
| Overview | `overview/index.md` | Epic `_docs/` | High-level epic overview and goals |
|
|
86
|
+
| Technical Architecture | `technical-architecture/index.md` | Epic `_docs/` | Architecture decisions and technical design |
|
|
87
|
+
| Decisions | `decisions/index.md` | Epic `_docs/` | Decision log and rationale |
|
|
88
|
+
| Strategic Context | `strategic-context/index.md` | Epic `_docs/` | Business context and strategic alignment |
|
|
89
|
+
| Research & Findings | `research-and-findings/index.md` | Epic `_docs/` | User research, discoveries, and clarifications* |
|
|
90
|
+
| Assumptions | `assumptions/index.md` | Epic `_docs/` | Assumptions with confidence levels and validation status* |
|
|
91
|
+
| Implementation Guidance | `implementation-guidance/index.md` | Epic `_docs/` | High-value technical guides for development |
|
|
61
92
|
|
|
62
93
|
\* Created only if the source material includes relevant content.
|
|
63
94
|
|
|
@@ -84,10 +115,11 @@ Used for ad-hoc documentation, user-specified locations, and non-epic-based cont
|
|
|
84
115
|
```
|
|
85
116
|
docs/confluence/{instance}/{space}/
|
|
86
117
|
└── {user-specified-path}/
|
|
87
|
-
└── {page-name}
|
|
118
|
+
└── {page-name}/
|
|
119
|
+
└── index.md
|
|
88
120
|
```
|
|
89
121
|
|
|
90
|
-
No predefined structure — adapts to the user's needs.
|
|
122
|
+
No predefined structure beyond the Leaf Bundle requirement — adapts to the user's needs.
|
|
91
123
|
|
|
92
124
|
### When to Use
|
|
93
125
|
|
|
@@ -141,15 +173,28 @@ Skills using flexible mode should ask:
|
|
|
141
173
|
|
|
142
174
|
---
|
|
143
175
|
|
|
176
|
+
## Confluence Link Format
|
|
177
|
+
|
|
178
|
+
When constructing Confluence URLs:
|
|
179
|
+
|
|
180
|
+
- Replace spaces in page titles with `+`
|
|
181
|
+
- Use the `/wiki/display/{SPACE}/{Title}` format for display links
|
|
182
|
+
- Use the `/wiki/spaces/{SPACE}/pages/{pageId}` format for direct links
|
|
183
|
+
|
|
184
|
+
Example: `https://company.atlassian.net/wiki/display/ENG/Technical+Architecture`
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
144
188
|
## Page File Format
|
|
145
189
|
|
|
146
|
-
Each local Confluence mirror file uses YAML frontmatter for sync metadata:
|
|
190
|
+
Each local Confluence mirror file (`index.md` inside a Leaf Bundle directory) uses YAML frontmatter for sync metadata:
|
|
147
191
|
|
|
148
192
|
```yaml
|
|
149
193
|
---
|
|
150
194
|
sync:
|
|
151
195
|
confluence_page_id: "123456789"
|
|
152
196
|
confluence_url: "https://company.atlassian.net/wiki/spaces/ENG/pages/123456789"
|
|
197
|
+
confluence_title: "Technical Architecture"
|
|
153
198
|
space: "ENG"
|
|
154
199
|
parent_page_id: "987654321"
|
|
155
200
|
last_synced: "2025-12-11T10:30:00Z"
|
|
@@ -163,6 +208,9 @@ source:
|
|
|
163
208
|
jira_ticket: "PROJ-120"
|
|
164
209
|
doc_type: "technical-architecture"
|
|
165
210
|
generated_from: "docs/jira/rezolve/PROJ/user-authentication/_docs/technical-architecture.md"
|
|
211
|
+
bmad_docs_referenced:
|
|
212
|
+
- "docs/jira/rezolve/PROJ/PROJ-120-user-auth/_docs/technical-architecture.md"
|
|
213
|
+
jira_initiative_key: "PROJ-100"
|
|
166
214
|
|
|
167
215
|
# For flexible mode
|
|
168
216
|
# origin: "manual"
|
|
@@ -174,6 +222,64 @@ source:
|
|
|
174
222
|
Page content in markdown, converted to Confluence storage format during sync.
|
|
175
223
|
```
|
|
176
224
|
|
|
177
|
-
|
|
225
|
+
### Frontmatter Field Reference
|
|
226
|
+
|
|
227
|
+
| Field | Type | Required | Description |
|
|
228
|
+
|-------|------|----------|-------------|
|
|
229
|
+
| `sync.confluence_page_id` | string | After first sync | Confluence page ID |
|
|
230
|
+
| `sync.confluence_url` | string | After first sync | Full page URL |
|
|
231
|
+
| `sync.confluence_title` | string | Yes | Exact title as it appears in Confluence (used for page lookups) |
|
|
232
|
+
| `sync.space` | string | Yes | Confluence space key |
|
|
233
|
+
| `sync.parent_page_id` | string | Yes | Parent page ID in Confluence |
|
|
234
|
+
| `sync.last_synced` | ISO8601 | After first sync | Last sync timestamp |
|
|
235
|
+
| `sync.version` | number | After first sync | Confluence page version for optimistic locking |
|
|
236
|
+
| `sync.remote_updated` | ISO8601 | After first sync | Last remote change timestamp |
|
|
237
|
+
| `mode` | enum | Yes | `structured` or `flexible` |
|
|
238
|
+
| `source.jira_ticket` | string | Structured | Associated Jira ticket key |
|
|
239
|
+
| `source.doc_type` | string | Structured | Page type (overview, technical-architecture, decisions, strategic-context) |
|
|
240
|
+
| `source.generated_from` | string | Structured | Path to the `_docs/` source file |
|
|
241
|
+
| `source.bmad_docs_referenced` | string[] | No | BMAD source docs used to generate the page (traceability) |
|
|
242
|
+
| `source.jira_initiative_key` | string | No | Related Jira initiative key (cross-linking) |
|
|
243
|
+
| `source.origin` | string | Flexible | Origin skill or `manual` |
|
|
244
|
+
| `source.linked_jira` | string | Flexible | Optionally linked Jira ticket |
|
|
245
|
+
|
|
246
|
+
> **Note on field naming:** The source rzlv-flow repo uses flat root-level fields (e.g. `confluence_space_key: "ENG"`). This toolset uses nested fields under `sync.*` for consistency with the Jira file schema. Both conventions represent the same data; skills should follow the nested format documented here.
|
|
247
|
+
|
|
248
|
+
### Post-Sync Frontmatter Example
|
|
249
|
+
|
|
250
|
+
**Before first sync (draft state):**
|
|
251
|
+
```yaml
|
|
252
|
+
---
|
|
253
|
+
sync:
|
|
254
|
+
confluence_title: "Technical Architecture"
|
|
255
|
+
space: "ENG"
|
|
256
|
+
parent_page_id: "987654321"
|
|
257
|
+
mode: "structured"
|
|
258
|
+
source:
|
|
259
|
+
jira_ticket: "PROJ-120"
|
|
260
|
+
doc_type: "technical-architecture"
|
|
261
|
+
generated_from: "docs/jira/rezolve/PROJ/PROJ-120-user-auth/_docs/technical-architecture.md"
|
|
262
|
+
---
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**After first sync (populated by sync operation):**
|
|
266
|
+
```yaml
|
|
267
|
+
---
|
|
268
|
+
sync:
|
|
269
|
+
confluence_page_id: "123456789"
|
|
270
|
+
confluence_url: "https://company.atlassian.net/wiki/spaces/ENG/pages/123456789"
|
|
271
|
+
confluence_title: "Technical Architecture"
|
|
272
|
+
space: "ENG"
|
|
273
|
+
parent_page_id: "987654321"
|
|
274
|
+
last_synced: "2025-12-11T10:30:00Z"
|
|
275
|
+
version: 1
|
|
276
|
+
remote_updated: "2025-12-11T10:30:00Z"
|
|
277
|
+
mode: "structured"
|
|
278
|
+
source:
|
|
279
|
+
jira_ticket: "PROJ-120"
|
|
280
|
+
doc_type: "technical-architecture"
|
|
281
|
+
generated_from: "docs/jira/rezolve/PROJ/PROJ-120-user-auth/_docs/technical-architecture.md"
|
|
282
|
+
---
|
|
283
|
+
```
|
|
178
284
|
|
|
179
|
-
|
|
285
|
+
See `sync-state-format.md` for the full frontmatter schema and worked examples.
|
|
@@ -113,6 +113,7 @@ Confluence mirror files use this frontmatter:
|
|
|
113
113
|
sync:
|
|
114
114
|
confluence_page_id: "123456789" # Confluence page ID
|
|
115
115
|
confluence_url: "https://..." # Full page URL
|
|
116
|
+
confluence_title: "Page Title" # Exact title as it appears in Confluence
|
|
116
117
|
space: "ENG" # Confluence space key
|
|
117
118
|
parent_page_id: "987654321" # Parent page ID in Confluence
|
|
118
119
|
last_synced: "2025-12-11T10:30:00Z" # Last sync timestamp
|
|
@@ -126,6 +127,9 @@ source:
|
|
|
126
127
|
jira_ticket: "PROJ-120" # Associated Jira ticket (optional)
|
|
127
128
|
doc_type: "technical-architecture" # overview | technical | decisions | strategic
|
|
128
129
|
generated_from: "docs/jira/.../technical-architecture.md" # Source _docs/ file
|
|
130
|
+
bmad_docs_referenced: # BMAD source docs used (traceability)
|
|
131
|
+
- "docs/jira/.../technical-architecture.md"
|
|
132
|
+
jira_initiative_key: "PROJ-100" # Related Jira initiative (cross-linking)
|
|
129
133
|
|
|
130
134
|
# Flexible mode fields (use instead of structured fields)
|
|
131
135
|
# origin: "manual" # manual | context-analyst | other skill
|
|
@@ -207,3 +211,108 @@ Build a REST API endpoint for user authentication that accepts username/password
|
|
|
207
211
|
- Uses existing `UserService` for credential validation
|
|
208
212
|
- Token signing key stored in environment variables
|
|
209
213
|
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Complete Example: Synced Confluence Page (Structured Mode)
|
|
218
|
+
|
|
219
|
+
This example shows a Confluence page mirror created via the `atlassian-orchestrator` skill from an epic's `_docs/` folder. The file lives at:
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
docs/confluence/rezolve/ENG/platform-initiative/user-authentication/technical-architecture/index.md
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Note the **Leaf Bundle** pattern: the page is a directory (`technical-architecture/`) containing `index.md`, not a flat `.md` file. See `confluence-file-structure.md` for details.
|
|
226
|
+
|
|
227
|
+
```yaml
|
|
228
|
+
---
|
|
229
|
+
sync:
|
|
230
|
+
confluence_page_id: "456789012"
|
|
231
|
+
confluence_url: "https://rezolve.atlassian.net/wiki/spaces/ENG/pages/456789012"
|
|
232
|
+
confluence_title: "Technical Architecture — User Authentication"
|
|
233
|
+
space: "ENG"
|
|
234
|
+
parent_page_id: "456789000"
|
|
235
|
+
last_synced: "2025-12-11T10:30:00Z"
|
|
236
|
+
version: 3
|
|
237
|
+
remote_updated: "2025-12-11T09:15:00Z"
|
|
238
|
+
|
|
239
|
+
mode: "structured"
|
|
240
|
+
|
|
241
|
+
source:
|
|
242
|
+
jira_ticket: "AIP-200"
|
|
243
|
+
doc_type: "technical-architecture"
|
|
244
|
+
generated_from: "docs/jira/rezolve/AIP/AIP-200-user-authentication/_docs/technical-architecture.md"
|
|
245
|
+
bmad_docs_referenced:
|
|
246
|
+
- "docs/jira/rezolve/AIP/AIP-200-user-authentication/_docs/technical-architecture.md"
|
|
247
|
+
jira_initiative_key: "AIP-100"
|
|
248
|
+
|
|
249
|
+
orchestrator:
|
|
250
|
+
generated_at: "2025-12-08T14:00:00Z"
|
|
251
|
+
auto_sync: true
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
# Technical Architecture — User Authentication
|
|
255
|
+
|
|
256
|
+
## Overview
|
|
257
|
+
|
|
258
|
+
REST API authentication using JWT tokens with bcrypt password hashing and Redis-backed rate limiting.
|
|
259
|
+
|
|
260
|
+
## Authentication Flow
|
|
261
|
+
|
|
262
|
+
1. Client sends POST `/api/auth/login` with credentials
|
|
263
|
+
2. Server validates against UserService
|
|
264
|
+
3. On success: sign JWT with RS256, return token + expiry
|
|
265
|
+
4. On failure: increment rate limiter, return 401
|
|
266
|
+
|
|
267
|
+
## Technology Decisions
|
|
268
|
+
|
|
269
|
+
- **JWT signing:** RS256 with rotating keys (see decisions.md)
|
|
270
|
+
- **Rate limiting:** Redis sliding window, 5 req/min/IP
|
|
271
|
+
- **Password storage:** bcrypt with cost factor 12
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Complete Example: Synced Confluence Page (Flexible Mode)
|
|
277
|
+
|
|
278
|
+
This example shows an ad-hoc page published to Confluence by a developer using the `confluence-publish` skill. The file lives at:
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
docs/confluence/rezolve/ENG/team-guides/onboarding-guide/index.md
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
```yaml
|
|
285
|
+
---
|
|
286
|
+
sync:
|
|
287
|
+
confluence_page_id: "789012345"
|
|
288
|
+
confluence_url: "https://rezolve.atlassian.net/wiki/spaces/ENG/pages/789012345"
|
|
289
|
+
confluence_title: "Developer Onboarding Guide"
|
|
290
|
+
space: "ENG"
|
|
291
|
+
parent_page_id: "789012000"
|
|
292
|
+
last_synced: "2025-12-12T14:00:00Z"
|
|
293
|
+
version: 1
|
|
294
|
+
remote_updated: "2025-12-12T14:00:00Z"
|
|
295
|
+
|
|
296
|
+
mode: "flexible"
|
|
297
|
+
|
|
298
|
+
source:
|
|
299
|
+
origin: "manual"
|
|
300
|
+
linked_jira: "AIP-300"
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
# Developer Onboarding Guide
|
|
304
|
+
|
|
305
|
+
Welcome to the team! This guide covers local setup, tooling, and key workflows.
|
|
306
|
+
|
|
307
|
+
## Local Setup
|
|
308
|
+
|
|
309
|
+
1. Clone the monorepo
|
|
310
|
+
2. Run `npm install` in the root
|
|
311
|
+
3. Copy `.env.example` to `.env` and fill in values
|
|
312
|
+
|
|
313
|
+
## Key Workflows
|
|
314
|
+
|
|
315
|
+
- **Daily triage:** Use `jira-daily-triage` to start your day
|
|
316
|
+
- **Ticket focus:** Use `jira-ticket-focus` to deep-load a ticket
|
|
317
|
+
- **Wrap up:** Use `jira-wrap-sync` when finishing work
|
|
318
|
+
```
|
|
@@ -40,9 +40,9 @@ Before executing, read these resource files for protocol and structure guidance:
|
|
|
40
40
|
```
|
|
41
41
|
JQL: project = {PROJECT} AND sprint in openSprints()
|
|
42
42
|
```
|
|
43
|
-
- Extract the sprint name and
|
|
44
|
-
- If no open sprint is found,
|
|
45
|
-
- Store the active sprint name and
|
|
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
46
|
|
|
47
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
48
|
|
|
@@ -90,7 +90,12 @@ Present results using this structure:
|
|
|
90
90
|
|
|
91
91
|
```
|
|
92
92
|
## 🌅 Your Day — {date}
|
|
93
|
-
**Project:** {PROJECT} | **Sprint:** {Sprint Name}
|
|
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**
|
|
94
99
|
|
|
95
100
|
### 🔥 In Progress (Complete These First)
|
|
96
101
|
| # | Ticket | Summary | Points | Days Active |
|
|
@@ -114,7 +119,10 @@ Present results using this structure:
|
|
|
114
119
|
| 5 | PROJ-130 | Performance fix | 5 | Critical |
|
|
115
120
|
|
|
116
121
|
### ⚠️ Blockers & Flags
|
|
117
|
-
-
|
|
122
|
+
- {TICKET-KEY}: {blocker description} ({n} days)
|
|
123
|
+
- {TICKET-KEY}: {blocker description} ({n} days)
|
|
124
|
+
{IF NO BLOCKERS:}
|
|
125
|
+
✓ No blockers detected
|
|
118
126
|
|
|
119
127
|
**Recommended Focus:** #1 PROJ-123 (continue in-progress work) or #2 PROJ-124 (fresh start)
|
|
120
128
|
|
|
@@ -30,7 +30,7 @@ Use MCP to find the active sprint:
|
|
|
30
30
|
JQL: project = {PROJECT} AND sprint in openSprints()
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
Extract the sprint name and
|
|
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
34
|
|
|
35
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
36
|
|
|
@@ -59,6 +59,16 @@ Calculate:
|
|
|
59
59
|
- Overall completion percentage (done points / total points, or done count / total count)
|
|
60
60
|
- Sprint velocity so far (points completed)
|
|
61
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
|
+
|
|
62
72
|
### Step 5: Identify Risks
|
|
63
73
|
|
|
64
74
|
Flag potential risks:
|
|
@@ -81,6 +91,11 @@ Filter tickets assigned to the current user:
|
|
|
81
91
|
```
|
|
82
92
|
## 📊 Sprint Status: {Sprint Name}
|
|
83
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
|
|
84
99
|
|
|
85
100
|
### Progress
|
|
86
101
|
| Status | Tickets | Story Points |
|
|
@@ -92,6 +107,11 @@ Filter tickets assigned to the current user:
|
|
|
92
107
|
|
|
93
108
|
**Completion:** {percent}% by points ({done_pts}/{total_pts})
|
|
94
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
|
+
|
|
95
115
|
### Ticket Breakdown
|
|
96
116
|
| # | Ticket | Summary | Status | Assignee | Points |
|
|
97
117
|
|---|--------|---------|--------|----------|--------|
|
|
@@ -113,4 +133,11 @@ Filter tickets assigned to the current user:
|
|
|
113
133
|
- **Completed:** {n} tickets ({pts} pts)
|
|
114
134
|
- **In Progress:** {n} tickets ({pts} pts)
|
|
115
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
|
|
116
143
|
```
|
|
@@ -25,7 +25,10 @@ Before executing, read these resource files — they are critical for correct be
|
|
|
25
25
|
- If the user provides a **number** (e.g. "3"), look it up from the `numbered_ticket_list` stored in conversational context from a prior `jira-daily-triage` run.
|
|
26
26
|
- If the user provides a **Jira key** (e.g. "PROJ-123"), use it directly.
|
|
27
27
|
- If the key is **incomplete** (e.g. "123"), prepend the `confirmed_project` key from session context (e.g. "PROJ-123").
|
|
28
|
-
- If neither a number mapping nor a project key is available,
|
|
28
|
+
- If neither a number mapping nor a project key is available, attempt fallback detection:
|
|
29
|
+
1. **Git branch:** Check the current branch name for a `{PROJECT}-{n}` pattern (e.g. `feature/PROJ-123` → project is `PROJ`).
|
|
30
|
+
2. **Config file:** Check for a `.jira.json` file in the project root containing `{ "project": "PROJ", "instance": "rezolve" }`.
|
|
31
|
+
3. If neither yields a project key, ask the user for the full ticket key.
|
|
29
32
|
|
|
30
33
|
### Step 2: Fetch Ticket Details (FCMP Fetch Step)
|
|
31
34
|
|
|
@@ -35,6 +38,8 @@ Use `mcp_atlassian-rovo_fetch()` to retrieve:
|
|
|
35
38
|
- Comments and recent history
|
|
36
39
|
- Sprint information (use `active_sprint_name` from session context if available)
|
|
37
40
|
- Linked Confluence documents (if any)
|
|
41
|
+
- **Subtasks** — fetch all subtasks of the ticket via JQL: `parent = {TICKET-KEY} ORDER BY status ASC, priority DESC`
|
|
42
|
+
- **Linked issues** — fetch linked issues (blocks, is blocked by, relates to)
|
|
38
43
|
|
|
39
44
|
**Parent Epic detection** — check in this order:
|
|
40
45
|
|
|
@@ -40,12 +40,23 @@ Before executing, read these resource files:
|
|
|
40
40
|
- Map code changes to acceptance criteria where possible.
|
|
41
41
|
- Summarize: files changed, insertions, deletions.
|
|
42
42
|
|
|
43
|
+
**c) Acceptance criteria progress:**
|
|
44
|
+
- Read the AC list from the ticket file.
|
|
45
|
+
- Based on code changes and commit messages, infer which AC items have been completed.
|
|
46
|
+
- Show checkbox progress:
|
|
47
|
+
```
|
|
48
|
+
- [x] AC 1 — Completed (matches changes in auth-controller.ts)
|
|
49
|
+
- [x] AC 2 — Completed (matches changes in rate-limiter.ts)
|
|
50
|
+
- [ ] AC 3 — Not yet addressed
|
|
51
|
+
```
|
|
52
|
+
- Note: this is a best-effort inference. The user confirms the final state.
|
|
53
|
+
|
|
43
54
|
### Step 3: Draft Jira Comment
|
|
44
55
|
|
|
45
|
-
Build a comprehensive comment
|
|
56
|
+
Build a comprehensive comment with the standardized prefix `[rzlv-flow Update]`:
|
|
46
57
|
|
|
47
58
|
```
|
|
48
|
-
|
|
59
|
+
[rzlv-flow Update]
|
|
49
60
|
|
|
50
61
|
{IF TICKET FIELD CHANGES:}
|
|
51
62
|
**Ticket Updates:**
|
|
@@ -61,22 +72,44 @@ Build a comprehensive comment covering both ticket updates and code progress:
|
|
|
61
72
|
- {file1}: {brief description}
|
|
62
73
|
- {file2}: {brief description}
|
|
63
74
|
|
|
64
|
-
**
|
|
65
|
-
|
|
75
|
+
**Acceptance Criteria:**
|
|
76
|
+
- [x] {completed AC 1}
|
|
77
|
+
- [x] {completed AC 2}
|
|
78
|
+
- [ ] {remaining AC 3}
|
|
79
|
+
**Progress:** {X}/{Y} completed
|
|
66
80
|
|
|
67
81
|
**Next Steps:** {suggested next action}
|
|
82
|
+
|
|
83
|
+
Context: {optional PR link or Confluence doc link}
|
|
68
84
|
```
|
|
69
85
|
|
|
70
|
-
### Step 4: FCMP
|
|
86
|
+
### Step 4: FCMP Preview (Prepare PUSH — Dry Run)
|
|
71
87
|
|
|
72
|
-
Before executing any write operations, run the full FCMP cycle:
|
|
88
|
+
Before executing any write operations, run the full FCMP cycle and present a dry-run preview:
|
|
73
89
|
|
|
74
90
|
1. **FETCH** — Get the current ticket state from Jira via MCP.
|
|
75
91
|
2. **COMPARE** — Check for remote changes since last sync (compare `sync.version` and `sync.remote_updated`).
|
|
76
92
|
3. **MERGE** — If conflicts detected, show a diff of remote changes vs local changes and resolve with the user.
|
|
77
|
-
4. Show
|
|
93
|
+
4. **Preview** — Show a dry-run diff of what will change if the user proceeds:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
### FCMP Preview (Dry Run)
|
|
97
|
+
{IF NO REMOTE CHANGES:}
|
|
98
|
+
✓ Remote is unchanged since last sync — safe to push.
|
|
99
|
+
|
|
100
|
+
{IF REMOTE CHANGES DETECTED:}
|
|
101
|
+
⚠️ Remote changes detected since last sync:
|
|
102
|
+
- {field}: {old_value} → {new_value}
|
|
103
|
+
|
|
104
|
+
**Proposed local → remote changes:**
|
|
105
|
+
- Description: {diff summary}
|
|
106
|
+
- Story Points: {old} → {new}
|
|
107
|
+
- Status: {current} (no change)
|
|
108
|
+
|
|
109
|
+
Proceed with sync? (y/n)
|
|
110
|
+
```
|
|
78
111
|
|
|
79
|
-
Only proceed to the action menu after the FCMP
|
|
112
|
+
Only proceed to the action menu after the FCMP preview is confirmed.
|
|
80
113
|
|
|
81
114
|
### Step 5: Present Multi-Select Action Menu
|
|
82
115
|
|
package/skills/skills/README.md
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# Skills
|
|
2
|
-
|
|
3
|
-
This folder manages all skills, archived skills, and examples/instructions on using them.
|
|
4
|
-
|
|
5
|
-
All skills in this `skills/library/` should represent _generally useful skills_ that might be used across teams.
|
|
6
|
-
|
|
7
|
-
If any particular skill goes missing, note that it may have simply been archived (see [the archive](skills/archived/)) and may no longer be recommended for use. Ideally skills are not simply deleted from this repository, since others may be expecting them to be there.
|
|
8
|
-
|
|
9
|
-
## Usage
|
|
10
|
-
|
|
11
|
-
When developing a project, it is generally recommended to commit any skills you use to that codebase so that others may use them as well. Skills are stored as folders and can include many files, but need to include at least a SKILL.md file. Normal locations are:
|
|
12
|
-
|
|
13
|
-
* **Claude Code**: `.claude/skills/<skill-name>/`
|
|
14
|
-
* **Copilot**: `.github/skills/<skill-name>/`
|
|
15
|
-
* **Codex**: `.agents/skills/<skill-name>/`
|
|
16
|
-
* Codex allows for storing skills in [many places](https://developers.openai.com/codex/skills#where-to-save-skills), including outside the repo.
|
|
17
|
-
|
|
18
|
-
Note that each folder must contain a SKILL.md file, and may optionally contain other arbitrary files:
|
|
19
|
-
* Other markdown files that describe processes
|
|
20
|
-
* Script files that allow for deterministic coding
|
|
21
|
-
* ...plus other resources required by either
|
|
22
|
-
|
|
23
|
-
All of the above should be referenced directly by their SKILL.md file, with an explanation on when to read or use them.
|
|
24
|
-
|
|
25
|
-
## Recommended usage
|
|
26
|
-
|
|
27
|
-
However, to allow everyone to use skills regardless of their LLM client of choice, it can be valuable to do the following:
|
|
28
|
-
|
|
29
|
-
* Store the skill folder in a place like `docs/ai/skills/<skill-name>/`
|
|
30
|
-
* Reference the skill in the folder for each relevant client.
|
|
31
|
-
|
|
32
|
-
For example:
|
|
33
|
-
|
|
34
|
-
In `docs/ai/skills/frontend-design/SKILL.md`:
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
---
|
|
38
|
-
name: frontend-design
|
|
39
|
-
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
|
|
43
|
-
|
|
44
|
-
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
|
|
45
|
-
|
|
46
|
-
...
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Then, in `.github/skills/frontend-design/SKILL.md` (and anywhere else needed):
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
---
|
|
53
|
-
name: frontend-design
|
|
54
|
-
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.
|
|
55
|
-
license: Complete terms in LICENSE.txt
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
See `docs/ai/skills/frontend-design/SKILL.md` and follow closely.
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Note that we MUST include the skill boilerplate in any official skills location (eg. `.github/skills/`, etc.) to enable discovery and usage. We then copy the entire skill into `docs/ai/skills/` to leave it intact, though we don't technically need the boilerplate.
|