@groupby/ai-dev 0.5.5 → 0.5.8
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/package.json +1 -1
- package/teams/OOF/skills/jira-ticket-creator/README.md +22 -0
- package/teams/OOF/skills/jira-ticket-creator/SKILL.md +266 -0
- package/teams/fhr-ai-team/github/PULL_REQUEST_TEMPLATE/full.md +31 -0
- package/teams/fhr-ai-team/github/PULL_REQUEST_TEMPLATE/light.md +7 -0
- package/teams/fhr-ai-team/github/copilot-instructions.md +24 -0
- package/teams/fhr-ai-team/github/instructions/python.instructions.md +23 -0
- package/teams/fhr-ai-team/github/pull_request_template.md +21 -0
- package/teams/fhr-ai-team/prompts/brainstorm.md +7 -0
- package/teams/fhr-ai-team/prompts/plan-algo-tests.md +7 -0
- package/teams/fhr-ai-team/prompts/plan.md +7 -0
- package/teams/fhr-ai-team/prompts/pr-description.md +7 -0
- package/teams/fhr-ai-team/prompts/test.md +7 -0
- package/teams/fhr-ai-team/resources/AGENTS.md +55 -0
- package/teams/fhr-ai-team/resources/CLAUDE.md +52 -0
- package/teams/fhr-ai-team/resources/README.md +51 -0
- package/teams/fhr-ai-team/resources/claude-code-setup.md +60 -0
- package/teams/fhr-ai-team/resources/copilot-setup.md +64 -0
- package/teams/fhr-ai-team/resources/onboarding.md +179 -0
- package/teams/fhr-ai-team/resources/opencode-install.md +29 -0
- package/teams/fhr-ai-team/resources/opencode-setup.md +43 -0
- package/teams/fhr-ai-team/skills/algo-test-planning/SKILL.md +192 -0
- package/teams/fhr-ai-team/skills/algo-test-planning/references/pipeline-registry.md +280 -0
- package/teams/fhr-ai-team/skills/brainstorming/SKILL.md +111 -0
- package/teams/fhr-ai-team/skills/e2e-testing/SKILL.md +163 -0
- package/teams/fhr-ai-team/skills/grill-me/SKILL.md +10 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/SKILL.md +313 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/references/kubectl-debug.md +165 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/references/mongodb-config.md +218 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/references/pipeline-configs.md +190 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/references/pipeline-steps.md +182 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/scripts/kf_logs.py +203 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/scripts/kf_query.py +233 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/scripts/kf_wait.py +195 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/scripts/mlflow_query.py +252 -0
- package/teams/fhr-ai-team/skills/ml-tooling-dev/scripts/mongo_predictor.py +352 -0
- package/teams/fhr-ai-team/skills/naming-conventions-reviewer/SKILL.md +230 -0
- package/teams/fhr-ai-team/skills/naming-conventions-reviewer/references/dataset-naming.md +190 -0
- package/teams/fhr-ai-team/skills/naming-conventions-reviewer/references/domain-vocabulary.md +447 -0
- package/teams/fhr-ai-team/skills/naming-conventions-reviewer/references/repo-dependency-graph.md +264 -0
- package/teams/fhr-ai-team/skills/planning/SKILL.md +138 -0
- package/teams/fhr-ai-team/skills/pr-description/SKILL.md +94 -0
- package/teams/snpd/skills/code-review-github/SKILL.md +475 -0
package/package.json
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Jira Ticket Creator
|
|
2
|
+
|
|
3
|
+
Creates well-structured Jira epics, stories, and sub-tasks from product and
|
|
4
|
+
technical specifications using the Atlassian MCP connector.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
- Reads product and/or technical specs from Confluence
|
|
8
|
+
- Plans Epics → Stories → Sub-tasks hierarchy
|
|
9
|
+
- Previews all ticket content for approval before creating anything in Jira
|
|
10
|
+
- Creates tickets with correct parent relationships and team assignments
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
- Atlassian MCP connector connected
|
|
14
|
+
- Write access to the target Jira project
|
|
15
|
+
|
|
16
|
+
## Trigger phrases
|
|
17
|
+
- "Create Jira tickets from this spec"
|
|
18
|
+
- "Break this PRD into epics and stories"
|
|
19
|
+
- "Generate Jira tickets from this Confluence page"
|
|
20
|
+
|
|
21
|
+
## Team
|
|
22
|
+
OOF
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-ticket-creator
|
|
3
|
+
description: Create Jira epics, stories and sub-tasks from product and technical specifications. Use this skill whenever a user asks to create epics, stories, sub-tasks, or tickets in Jira from a spec, PRD, product specification, technical specification, or Confluence page. Also trigger when a user says things like "break this spec into epics", "create Jira tickets from this document", "plan this initiative into stories", "generate epics for this project", or any request involving turning requirements or specifications into structured Jira work items. Requires the Atlassian MCP connector.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Jira Ticket Creator
|
|
7
|
+
|
|
8
|
+
Creates well-structured Jira epics, stories and sub-tasks from product and technical specifications, using the Atlassian MCP connector.
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
- **Atlassian MCP connector** must be connected. If not connected, prompt the user to connect it before proceeding.
|
|
13
|
+
- The user must have write access to the target Jira project.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Configuration Parameters
|
|
18
|
+
|
|
19
|
+
Collect ALL mandatory parameters before creating any tickets. Present them clearly and confirm with the user before proceeding.
|
|
20
|
+
|
|
21
|
+
### Mandatory Parameters
|
|
22
|
+
|
|
23
|
+
| Parameter | Description | Validation |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| **Jira Team** | The Jira team to assign to ALL tickets. The user MUST choose one of the two fixed options below. | Required. Present as a two-choice selection. Do not advance until the user selects a team. |
|
|
26
|
+
| **Parent** | The Jira initiative key that all epics will be children of (e.g. `BD-7711`). | Required. Must be a valid Jira issue key. Do not advance until provided. |
|
|
27
|
+
| **Product Specification** | A Confluence page URL containing the product spec / PRD. | Required. Must be a valid Confluence URL. Do not advance until provided. |
|
|
28
|
+
|
|
29
|
+
**Jira Team options** (offer these two as selectable choices — do NOT ask the user to type a free-text team name):
|
|
30
|
+
|
|
31
|
+
| Team name | Team ID (`customfield_10700` value) |
|
|
32
|
+
|---|---|
|
|
33
|
+
| **OOF Mobile Solution Team** | `b3f517d4-c4f8-4144-8920-b762ec5a033b` |
|
|
34
|
+
| **OOF Application Solution Team** | `9817d9ca-6170-48e8-9e98-1aeb7c81daa5` |
|
|
35
|
+
|
|
36
|
+
### Optional Parameters
|
|
37
|
+
|
|
38
|
+
| Parameter | Description | Default |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| **Technical Specification** | A Confluence page URL containing the technical spec. | None — if not supplied, generate tickets from the product spec only. |
|
|
41
|
+
| **Epic Number** | Maximum number of epics to produce. | LLM decides based on the scope of the specification. |
|
|
42
|
+
| **Ticket Style** | A URL pointing to a Confluence page with guidelines for how to write/format tickets. Always offer the user the choice to accept the default page or enter a new URL. | `https://rezolvetech.atlassian.net/wiki/spaces/CPST/pages/5303500826/Definition+of+user+story+acceptance+criteria` |
|
|
43
|
+
| **Sub Tasks** | Whether to create sub-tasks under each story. `yes` or `no`. | `no` — do not create sub-tasks unless explicitly set to `yes`. |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Workflow
|
|
48
|
+
|
|
49
|
+
### Step 1 — Collect and Confirm Configuration
|
|
50
|
+
|
|
51
|
+
**Always ask the user for the configuration values interactively before doing anything else.** Go through the parameters **one at a time, in order**. For each parameter:
|
|
52
|
+
|
|
53
|
+
- State the parameter name and a short description.
|
|
54
|
+
- Show its **default value** (or `None` / `LLM decides` where there is no fixed default).
|
|
55
|
+
- Offer the user the choice to **accept the default** or **enter a new value**. Use interactive options where possible (e.g. an "Accept default" choice alongside a free-text input).
|
|
56
|
+
- **For mandatory parameters (Jira Team, Parent, Product Specification), you MUST NOT advance to the next parameter until the user supplies a value.** If the user leaves it blank, skips, or gives an empty answer, re-ask the SAME parameter and keep asking until a value is provided.
|
|
57
|
+
- For **Jira Team**, present the two fixed options (**OOF Mobile Solution Team** and **OOF Application Solution Team**) as a selectable choice. Do NOT accept or ask for a free-text team name. Map the chosen team to its ID for the `customfield_10700` field.
|
|
58
|
+
- For **Ticket Style**, always present an explicit choice to **accept the default Confluence page** or **enter a new ticket style URL**.
|
|
59
|
+
|
|
60
|
+
Use a prompt along these lines, asking for one value at a time:
|
|
61
|
+
|
|
62
|
+
> Let's set up the configuration. For each item, reply **"default"** to accept the shown default, or type a new value.
|
|
63
|
+
>
|
|
64
|
+
> | # | Parameter | Mandatory | Default value |
|
|
65
|
+
> |---|---|---|---|
|
|
66
|
+
> | 1 | **Jira Team** | Yes | None — choose **OOF Mobile Solution Team** or **OOF Application Solution Team** |
|
|
67
|
+
> | 2 | **Parent** | Yes | None — please provide (e.g. `BD-7711`) |
|
|
68
|
+
> | 3 | **Product Specification** | Yes | None — please provide a Confluence URL |
|
|
69
|
+
> | 4 | **Technical Specification** | No | None (skipped if blank) |
|
|
70
|
+
> | 5 | **Epic Number** | No | LLM decides based on spec scope |
|
|
71
|
+
> | 6 | **Ticket Style** | No | `https://rezolvetech.atlassian.net/wiki/spaces/CPST/pages/5303500826/Definition+of+user+story+acceptance+criteria` |
|
|
72
|
+
> | 7 | **Sub Tasks** | No | `no` |
|
|
73
|
+
|
|
74
|
+
Once all values are collected, **display a summary table of the final configuration** — indicating for each parameter whether the default was accepted or a custom value was entered — and ask the user to confirm before proceeding.
|
|
75
|
+
|
|
76
|
+
### Step 2 — Read the Specifications
|
|
77
|
+
|
|
78
|
+
Use the Atlassian MCP connector to read the Confluence pages:
|
|
79
|
+
|
|
80
|
+
1. **Read the Product Specification** from the supplied Confluence URL. This is the primary source of requirements.
|
|
81
|
+
2. **Read the Technical Specification** (if supplied) from the Confluence URL. This supplements the product spec with implementation details.
|
|
82
|
+
3. **Read the Ticket Style guide** from the Ticket Style URL. This defines how to format epic descriptions, story titles, acceptance criteria, and other ticket fields.
|
|
83
|
+
|
|
84
|
+
If any page cannot be read, inform the user and ask for a corrected URL.
|
|
85
|
+
|
|
86
|
+
### Step 3 — Jira Field Reference
|
|
87
|
+
|
|
88
|
+
Use the following Jira field IDs and exact payload formats when creating tickets in the BD project. The `parent` field MUST be passed as an object (`{ "key": "..." }`), never as a bare string — passing a string is the usual cause of "can't find / invalid parent field" errors.
|
|
89
|
+
|
|
90
|
+
1. **Team field** — custom field `customfield_10700` (Atlassian Team field type). It is **mandatory** on every ticket. Set it to the **ID** of the configured **Jira Team** as a **bare string**, e.g. `"customfield_10700": "b3f517d4-c4f8-4144-8920-b762ec5a033b"`. Use the ID, never the team name. **Do NOT wrap the ID in an object** (e.g. `{ "id": "..." }`) — although the field reads back as an object, on write the API rejects the object form with `Team id 'JsonData{data={id=...}}' is not valid`. Pass the raw ID string only:
|
|
91
|
+
- **OOF Mobile Solution Team** → `b3f517d4-c4f8-4144-8920-b762ec5a033b`
|
|
92
|
+
- **OOF Application Solution Team** → `9817d9ca-6170-48e8-9e98-1aeb7c81daa5`
|
|
93
|
+
2. **Epic → parent initiative** — standard `parent` field: `"parent": { "key": "BD-7711" }` (substitute the configured **Parent** initiative key).
|
|
94
|
+
3. **Story → parent epic** — standard `parent` field set to the epic's key: `"parent": { "key": "<EPIC-KEY>" }`.
|
|
95
|
+
4. **Sub-task → parent story** — standard `parent` field: `"parent": { "key": "<STORY-KEY>" }`.
|
|
96
|
+
|
|
97
|
+
All ticket content must be derived exclusively from the Product Specification and Technical Specification provided by the user.
|
|
98
|
+
|
|
99
|
+
### Step 4 — Plan the Epics and Stories
|
|
100
|
+
|
|
101
|
+
Based on the specifications and ticket style guide, plan the breakdown:
|
|
102
|
+
|
|
103
|
+
1. **Identify logical epic groupings** from the product spec. Each epic should represent a coherent feature area or workstream.
|
|
104
|
+
2. If **Epic Number** is set, constrain to that maximum. If not set, choose the number that best represents the natural groupings in the spec.
|
|
105
|
+
3. For each epic, identify the user stories needed. Stories should be independently deliverable increments of work.
|
|
106
|
+
4. If **Sub Tasks** is `yes`, further decompose each story into sub-tasks (implementation steps, testing, etc.).
|
|
107
|
+
|
|
108
|
+
**Present the full plan to the user as a high-level tree for initial structural review:**
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Epic 1: [Title]
|
|
112
|
+
├── Story 1.1: [Title]
|
|
113
|
+
├── Story 1.2: [Title]
|
|
114
|
+
└── Story 1.3: [Title]
|
|
115
|
+
|
|
116
|
+
Epic 2: [Title]
|
|
117
|
+
├── Story 2.1: [Title]
|
|
118
|
+
└── Story 2.2: [Title]
|
|
119
|
+
...
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Ask the user: **"Does this structure look right? Should I add, remove, merge, or split any epics or stories before I draft the full ticket content?"**
|
|
123
|
+
|
|
124
|
+
Wait for approval or iterate on the structure until the user is satisfied.
|
|
125
|
+
|
|
126
|
+
### Step 5 — Preview Full Ticket Content
|
|
127
|
+
|
|
128
|
+
**CRITICAL: Do NOT create any tickets in Jira until the user explicitly approves the content in this step.**
|
|
129
|
+
|
|
130
|
+
Once the structure is approved, draft the **complete content** for every ticket and present it to the user for review. Show each ticket exactly as it will be created, including all fields:
|
|
131
|
+
|
|
132
|
+
#### For each Epic, show:
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
136
|
+
EPIC: [Title]
|
|
137
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
138
|
+
Type: Epic
|
|
139
|
+
Team: [configured team]
|
|
140
|
+
Parent: [configured initiative key]
|
|
141
|
+
Summary: [epic title]
|
|
142
|
+
Description:
|
|
143
|
+
📄 Product Spec: [Confluence URL]
|
|
144
|
+
📄 Tech Spec: [Confluence URL or N/A]
|
|
145
|
+
|
|
146
|
+
[Full epic description per Ticket Style guide]
|
|
147
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### For each Story, show:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
──────────────────────────────────────
|
|
154
|
+
STORY under [Epic Title]: [Story Title]
|
|
155
|
+
──────────────────────────────────────
|
|
156
|
+
Type: Story
|
|
157
|
+
Team: [configured team]
|
|
158
|
+
Epic: [parent epic title]
|
|
159
|
+
Summary: [story title]
|
|
160
|
+
Description:
|
|
161
|
+
📄 Product Spec: [Confluence URL]
|
|
162
|
+
📄 Tech Spec: [Confluence URL or N/A]
|
|
163
|
+
|
|
164
|
+
[Full story description per Ticket Style guide]
|
|
165
|
+
|
|
166
|
+
Acceptance Criteria:
|
|
167
|
+
[Full acceptance criteria per Ticket Style guide]
|
|
168
|
+
──────────────────────────────────────
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### For each Sub-Task (if Sub Tasks = yes), show:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
· SUB-TASK under [Story Title]: [Sub-task Title]
|
|
175
|
+
Type: Sub-task
|
|
176
|
+
Team: [configured team]
|
|
177
|
+
Parent: [parent story title]
|
|
178
|
+
Summary: [sub-task title]
|
|
179
|
+
Description: [sub-task details]
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
After presenting ALL ticket content, ask the user:
|
|
183
|
+
|
|
184
|
+
> **"Here is the full content for all tickets I'm about to create. Please review and let me know:**
|
|
185
|
+
> - **Approve** — create all tickets as shown
|
|
186
|
+
> - **Edit** — tell me which tickets to change and what to modify
|
|
187
|
+
> - **Cancel** — abort without creating anything"
|
|
188
|
+
|
|
189
|
+
**Do NOT proceed to Step 6 until the user explicitly says to approve / go ahead / create.** If the user requests edits, make the changes, re-display the affected tickets, and ask for approval again. Repeat until approved.
|
|
190
|
+
|
|
191
|
+
### Step 6 — Create Tickets in Jira
|
|
192
|
+
|
|
193
|
+
**Only execute this step after the user has explicitly approved the ticket content in Step 5.**
|
|
194
|
+
|
|
195
|
+
Use the Atlassian MCP connector to create the tickets. Follow this order:
|
|
196
|
+
|
|
197
|
+
#### 6a. Create Epics
|
|
198
|
+
|
|
199
|
+
For each epic, create it using the exact content approved in Step 5:
|
|
200
|
+
|
|
201
|
+
- **Issue Type**: Epic
|
|
202
|
+
- **Summary**: As approved
|
|
203
|
+
- **Description**: As approved — Product Spec link at top, Tech Spec link if supplied, full description per Ticket Style
|
|
204
|
+
- **Team**: Set the `customfield_10700` field to the **ID** of the configured Jira Team (mandatory)
|
|
205
|
+
- **Parent**: Set via the standard `parent` field as an object — `"parent": { "key": "<INITIATIVE-KEY>" }` (the user-supplied initiative key)
|
|
206
|
+
|
|
207
|
+
#### 6b. Create Stories
|
|
208
|
+
|
|
209
|
+
For each story, create it using the exact content approved in Step 5:
|
|
210
|
+
|
|
211
|
+
- **Issue Type**: Story
|
|
212
|
+
- **Summary**: As approved
|
|
213
|
+
- **Description**: As approved — Product Spec link at top, Tech Spec link if supplied, acceptance criteria and context per Ticket Style
|
|
214
|
+
- **Team**: Same team as the epics, set via `customfield_10700` to the selected team's ID (mandatory)
|
|
215
|
+
- **Parent**: Set via the standard `parent` field as an object — `"parent": { "key": "<EPIC-KEY>" }` (the epic created in step 6a)
|
|
216
|
+
|
|
217
|
+
#### 6c. Create Sub-Tasks (only if Sub Tasks = yes)
|
|
218
|
+
|
|
219
|
+
For each sub-task, create it using the exact content approved in Step 5:
|
|
220
|
+
|
|
221
|
+
- **Issue Type**: Sub-task
|
|
222
|
+
- **Summary**: As approved
|
|
223
|
+
- **Description**: As approved
|
|
224
|
+
- **Team**: Same team as the epics, set via `customfield_10700` to the selected team's ID (mandatory)
|
|
225
|
+
- **Parent**: Set via the standard `parent` field as an object — `"parent": { "key": "<STORY-KEY>" }` (the parent story)
|
|
226
|
+
|
|
227
|
+
### Step 7 — Report Results
|
|
228
|
+
|
|
229
|
+
After all tickets are created, present a summary:
|
|
230
|
+
|
|
231
|
+
1. A table of all created tickets with their keys, titles, types, and parent relationships
|
|
232
|
+
2. Direct links to each ticket
|
|
233
|
+
3. A link to the parent initiative showing the new epics
|
|
234
|
+
4. Any tickets that failed to create, with error details
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Ticket Content Rules
|
|
239
|
+
|
|
240
|
+
These rules apply to ALL tickets (epics, stories, and sub-tasks):
|
|
241
|
+
|
|
242
|
+
1. **Jira Team field is mandatory.** Set it on every ticket (epic, story, sub-task) using the **ID** of the team the user selected (`OOF Mobile Solution Team` → `b3f517d4-c4f8-4144-8920-b762ec5a033b`, `OOF Application Solution Team` → `9817d9ca-6170-48e8-9e98-1aeb7c81daa5`) via `customfield_10700`.
|
|
243
|
+
2. **Product Specification link** must appear at the top of every story description and every epic description. Format as a clickable Confluence link.
|
|
244
|
+
3. **Technical Specification link** (if provided) must appear directly below the product spec link in every description.
|
|
245
|
+
4. **All epics must be children of the parent initiative.** Use the Jira parent field, not just a link.
|
|
246
|
+
5. **Follow the Ticket Style guide** for all content — titles, descriptions, acceptance criteria, and formatting.
|
|
247
|
+
6. **Respect the Epic Number** constraint. If a max is set, do not exceed it. Consolidate related work into fewer epics if needed.
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Error Handling
|
|
252
|
+
|
|
253
|
+
- If the Atlassian MCP connector is not connected, stop and ask the user to connect it.
|
|
254
|
+
- If a Confluence page cannot be read, report the error and ask for a corrected URL.
|
|
255
|
+
- If a ticket fails to create, log the error, continue with remaining tickets, and report all failures at the end.
|
|
256
|
+
- If the selected team's ID is rejected by Jira, report this and confirm the user's team choice before retrying.
|
|
257
|
+
- If the parent initiative key is invalid, report this and ask for correction.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Tips for Best Results
|
|
262
|
+
|
|
263
|
+
- Provide a detailed product specification — the more complete the spec, the better the epic/story breakdown.
|
|
264
|
+
- Adding a technical specification helps generate more accurate implementation-focused stories.
|
|
265
|
+
- Use the Epic Number parameter to control granularity — fewer epics means broader groupings, more means finer-grained.
|
|
266
|
+
- Review the structure in Step 4 and the full ticket content in Step 5 carefully — nothing is created in Jira until you explicitly approve.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
<!-- What problem does this solve? Link the ticket (XO-XXXX / EB-XXXX) if there is one. Brief summary of the approach. -->
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
<!-- What is included in this PR? Delete this section when the scope is self-evident from the title. -->
|
|
8
|
+
|
|
9
|
+
## Behavior
|
|
10
|
+
|
|
11
|
+
<!-- Describe the observable outcomes of this change, not the implementation details.
|
|
12
|
+
What does the system do differently after this PR? State it in terms a reviewer can verify:
|
|
13
|
+
- Given X, the system now does Y (previously: Z)
|
|
14
|
+
- Config key `foo.bar` controls ... ; default is ...
|
|
15
|
+
For design decisions, explain what was chosen and why the alternatives were rejected. -->
|
|
16
|
+
|
|
17
|
+
## Wiring
|
|
18
|
+
|
|
19
|
+
<!-- How is the new code connected to the rest of the system? Which callers, configs, or entry points are affected? Delete this section for self-contained changes. -->
|
|
20
|
+
|
|
21
|
+
## Tests
|
|
22
|
+
|
|
23
|
+
<!-- How was this tested? List test commands, key scenarios covered, or link CI results. -->
|
|
24
|
+
|
|
25
|
+
## How to run
|
|
26
|
+
|
|
27
|
+
<!-- Steps to run or test this locally, if applicable. Delete this section for changes that don't need manual verification. -->
|
|
28
|
+
|
|
29
|
+
## Backward compatibility
|
|
30
|
+
|
|
31
|
+
<!-- Does this change any public API, config key, data format, or pipeline interface? If yes, explain the migration path. If fully backward-compatible, write "No breaking changes". Delete this section for internal-only changes. -->
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Custom instructions for GitHub Copilot
|
|
2
|
+
|
|
3
|
+
When performing a code review, please ensure the following:
|
|
4
|
+
|
|
5
|
+
## Crownpeak AI Team Conventions
|
|
6
|
+
- Search the codebase for existing utilities before creating new ones.
|
|
7
|
+
- Check shared libraries: earlybirds_commons, torch_toolbox, item-toolbox, nlp-toolbox.
|
|
8
|
+
- Use "item" not "product", "encodings" not "embeddings".
|
|
9
|
+
- JSON/YAML config keys: camelCase.
|
|
10
|
+
- Parquet columns: camelCase.
|
|
11
|
+
- GCS paths: kebab-case.
|
|
12
|
+
- Strategy IDs: kebab-case.
|
|
13
|
+
- Docker images: kebab-case.
|
|
14
|
+
- Parquet column labels: class-level attributes (_label pattern), not module-level constants.
|
|
15
|
+
- Config classes: use standard suffixes (*Config, *ModelConfig, *BatchConfig, etc.).
|
|
16
|
+
- No placeholders, no "TBD", no vague error handling.
|
|
17
|
+
|
|
18
|
+
## Commit Messages - Use the following guidelines
|
|
19
|
+
- Use the imperative mood in the subject line (e.g., "Fix bug" instead of "Fixed bug").
|
|
20
|
+
- Start with a capital letter.
|
|
21
|
+
- Do not end the subject line with a period.
|
|
22
|
+
- Use the body to explain what and why vs. how.
|
|
23
|
+
- Use bullet points for multiple changes if necessary.
|
|
24
|
+
- Keep the subject line under 50 characters.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
applyTo: "**/*.py"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Python Coding Style
|
|
6
|
+
|
|
7
|
+
- Use PEP 8 style guide for Python code.
|
|
8
|
+
- Don't write docstrings for all public modules, classes, functions, and methods.
|
|
9
|
+
- Use meaningful variable and function names.
|
|
10
|
+
- Use snake_case for variable and function names.
|
|
11
|
+
- Use CamelCase for class names.
|
|
12
|
+
- Use type annotations for function parameters and return types.
|
|
13
|
+
- Add '_opt' at the end of the function name for optional parameters and at the end of variable name for optional variables.
|
|
14
|
+
- Use double quotes for string literals. Use single quotes for string literals only when the string contains double quotes.
|
|
15
|
+
- Use triple quotes for multi-line strings. Use implicit string concatenation inside parentheses when joining shorter fragments across lines.
|
|
16
|
+
- Use f-strings for string formatting. Avoid using the format() method or % operator for string formatting.
|
|
17
|
+
- Use list comprehensions and generator expressions for creating lists and iterators. Avoid using map() and filter() functions.
|
|
18
|
+
- Use `with open(...) as file_obj:` for file I/O operations. Avoid manual `close()` calls when a context manager can manage the file handle.
|
|
19
|
+
- Use context managers for resource management when available. Avoid using `try/finally` for resource cleanup when a context manager can express the same behavior more clearly.
|
|
20
|
+
- Use exceptions for error handling. Avoid using return codes for error handling.
|
|
21
|
+
- Use pytest for functional testing. Avoid using other testing frameworks unless necessary.
|
|
22
|
+
- If a dict key is used in several places, use a variable for the key name. Use a constant for the key name if it is used in several modules. The variable name should be in snake_case and start with an underscore.
|
|
23
|
+
- Use single responsibility principle for SOLID code.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Pick a template:
|
|
3
|
+
- Small change (bug fix, config, dependency bump, typo): use light template
|
|
4
|
+
-> append ?template=light.md to the PR creation URL
|
|
5
|
+
- Feature, refactor, or architectural change: use full template
|
|
6
|
+
-> append ?template=full.md to the PR creation URL
|
|
7
|
+
|
|
8
|
+
Or fill in the default below.
|
|
9
|
+
-->
|
|
10
|
+
|
|
11
|
+
## Why
|
|
12
|
+
|
|
13
|
+
<!-- What problem does this solve? Link the ticket (XO-XXXX / EB-XXXX) if there is one. -->
|
|
14
|
+
|
|
15
|
+
## What
|
|
16
|
+
|
|
17
|
+
<!-- Describe the approach. For non-trivial changes, explain the design and key decisions. -->
|
|
18
|
+
|
|
19
|
+
## Tests
|
|
20
|
+
|
|
21
|
+
<!-- How was this tested? List test commands, key scenarios covered, or link CI results. -->
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Plan an implementation with mandatory codebase search and code reuse. Produces TDD-based bite-sized tasks with exact file paths.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Invoke the ai.pierre:planning skill.
|
|
6
|
+
|
|
7
|
+
Implement $ARGUMENTS. IMPORTANT: First search the codebase for existing utilities, scripts, and patterns that do similar things. Reuse them. Do not create new abstractions without showing me what already exists.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# ai.pierre - Agent Instructions
|
|
2
|
+
|
|
3
|
+
This file provides instructions for AI coding agents (OpenCode, Copilot, and others) working with Crownpeak AI team repositories.
|
|
4
|
+
|
|
5
|
+
## Skills Available
|
|
6
|
+
|
|
7
|
+
The `skills/` directory contains the following skills. Detect which skill applies based on the user's request and invoke it automatically.
|
|
8
|
+
|
|
9
|
+
### Workflow Skills
|
|
10
|
+
|
|
11
|
+
| Skill | Directory | Trigger |
|
|
12
|
+
|-------|-----------|---------|
|
|
13
|
+
| Brainstorming | `skills/brainstorming/` | User wants to design, explore, or brainstorm a feature |
|
|
14
|
+
| Planning | `skills/planning/` | User wants to plan an implementation or break down tasks |
|
|
15
|
+
| Algo Test Planning | `skills/algo-test-planning/` | User wants to test a Kubeflow pipeline |
|
|
16
|
+
| E2E Testing | `skills/e2e-testing/` | User wants to run tests (local, pipeline, or model validation) |
|
|
17
|
+
| Grill Me | `skills/grill-me/` | User wants to stress-test a plan or design through rigorous questioning |
|
|
18
|
+
|
|
19
|
+
### Domain Skills
|
|
20
|
+
|
|
21
|
+
| Skill | Directory | Trigger |
|
|
22
|
+
|-------|-----------|---------|
|
|
23
|
+
| ML Tooling Dev | `skills/ml-tooling-dev/` | User works with Kubeflow, MLflow, or MongoDB |
|
|
24
|
+
| Naming Conventions | `skills/naming-conventions-reviewer/` | User writes or reviews code in any ML repo |
|
|
25
|
+
|
|
26
|
+
## Automatic Skill Selection
|
|
27
|
+
|
|
28
|
+
The user does **not** need to explicitly request skills. Determine the applicable skill from the user's natural language request:
|
|
29
|
+
|
|
30
|
+
- "Design a feature" / "How should we approach..." -> brainstorming
|
|
31
|
+
- "Break this down" / "Plan the implementation" -> planning
|
|
32
|
+
- "Test the pipeline" / "Run a test for..." -> algo-test-planning or e2e-testing
|
|
33
|
+
- "Check the Kubeflow run" / "Debug this job" -> ml-tooling-dev
|
|
34
|
+
- "Grill me" / "Stress-test this plan" / "Challenge my design" -> grill-me
|
|
35
|
+
- "Review this code" / "Is this name right?" -> naming-conventions-reviewer
|
|
36
|
+
|
|
37
|
+
## Team Context
|
|
38
|
+
|
|
39
|
+
### Repository Naming
|
|
40
|
+
- `algo.*` - ML algorithm projects (training, inference, evaluation)
|
|
41
|
+
- `algo.*-ml` - ML model training/fine-tuning (run on Kubeflow)
|
|
42
|
+
- `ai.*` - AI-powered microservices (FastAPI, Streamlit)
|
|
43
|
+
- `*-toolbox` - Shared Python libraries
|
|
44
|
+
- `attraqt-kubeflow-*` - Kubeflow pipeline configs and definitions
|
|
45
|
+
- `ebap-*` - Early Birds AI Platform infrastructure
|
|
46
|
+
|
|
47
|
+
### Shared Libraries
|
|
48
|
+
Before writing new utilities, check:
|
|
49
|
+
- `earlybirds_commons`, `torch_toolbox`, `item-toolbox`, `nlp-toolbox`, `eb_tensorflow`
|
|
50
|
+
|
|
51
|
+
### Core Rules
|
|
52
|
+
1. Search the codebase for existing implementations before proposing new code
|
|
53
|
+
2. Reuse shared library utilities; do not duplicate
|
|
54
|
+
3. Follow naming conventions (see `skills/naming-conventions-reviewer/`)
|
|
55
|
+
4. No placeholders, no "TBD", no vague instructions in plans or designs
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# ai.pierre - Crownpeak AI Team Engineering Skills
|
|
2
|
+
|
|
3
|
+
This plugin provides engineering skills and slash commands for the Crownpeak AI team's ML development workflow.
|
|
4
|
+
|
|
5
|
+
## Available Commands
|
|
6
|
+
|
|
7
|
+
| Command | When to use |
|
|
8
|
+
|---------|-------------|
|
|
9
|
+
| `/brainstorm` | Designing a new feature, exploring architecture decisions, or evaluating approaches |
|
|
10
|
+
| `/pr-description` | Generating a PR description from the current branch diff |
|
|
11
|
+
| `/plan` | Breaking down an approved design into implementation tasks |
|
|
12
|
+
| `/plan-algo-tests` | Configuring and planning a Kubeflow pipeline test run |
|
|
13
|
+
| `/test` | Running local tests, launching pipeline e2e tests, or validating model outputs |
|
|
14
|
+
|
|
15
|
+
## Auto-Routing Rules
|
|
16
|
+
|
|
17
|
+
When working in any Crownpeak AI repo, apply these skills automatically:
|
|
18
|
+
|
|
19
|
+
- **Writing or reviewing code** in any repo -> invoke `ai.pierre:naming-conventions-reviewer` to validate names
|
|
20
|
+
- **Working with Kubeflow, MLflow, or MongoDB** -> invoke `ai.pierre:ml-tooling-dev` for operations and debugging
|
|
21
|
+
- **Brainstorming or designing** -> invoke `ai.pierre:brainstorming` for codebase-aware design
|
|
22
|
+
- **Planning implementation** -> invoke `ai.pierre:planning` for task breakdown
|
|
23
|
+
- **Testing pipelines** -> invoke `ai.pierre:algo-test-planning` for config generation, `ai.pierre:e2e-testing` for execution
|
|
24
|
+
- **Stress-testing a plan or design** -> invoke `ai.pierre:grill-me` to interrogate decisions branch by branch
|
|
25
|
+
- **Creating a PR or asked to write a PR description** -> invoke `ai.pierre:pr-description` to generate from the diff
|
|
26
|
+
|
|
27
|
+
## Team Repo Structure
|
|
28
|
+
|
|
29
|
+
| Pattern | Purpose | Examples |
|
|
30
|
+
|---------|---------|---------|
|
|
31
|
+
| `algo.*` | ML algorithm projects | `algo.search`, `algo.clip`, `algo.tagging` |
|
|
32
|
+
| `algo.*-ml` | ML training (Kubeflow) | `algo.search-ml`, `algo.clip-ml` |
|
|
33
|
+
| `ai.*` | AI microservices | `ai.tagging-service`, `ai.guardrails-service` |
|
|
34
|
+
| `*-toolbox` | Shared Python libraries | `pytorch-toolbox`, `nlp-toolbox`, `item-toolbox` |
|
|
35
|
+
| `attraqt-kubeflow-*` | Kubeflow infra | `attraqt-kubeflow-configs`, `attraqt-kubeflow-pipelines` |
|
|
36
|
+
| `ebap-*` | AI Platform infra | `ebap-argo-app`, `ebap-schema` |
|
|
37
|
+
|
|
38
|
+
## Shared Libraries
|
|
39
|
+
|
|
40
|
+
Always check these before writing new utilities:
|
|
41
|
+
- `earlybirds_commons` - shared utilities and configurations
|
|
42
|
+
- `torch_toolbox` - PyTorch model training/inference
|
|
43
|
+
- `item-toolbox` - e-commerce item data utilities
|
|
44
|
+
- `nlp-toolbox` - text tokenization and NLP
|
|
45
|
+
- `eb_tensorflow` - TensorFlow model utilities
|
|
46
|
+
|
|
47
|
+
## Non-Negotiable Principles
|
|
48
|
+
|
|
49
|
+
1. **Search before creating.** Always search the codebase for existing implementations before proposing new code.
|
|
50
|
+
2. **Reuse before writing.** If a utility exists in a shared library, use it.
|
|
51
|
+
3. **Name correctly.** All names must follow the conventions enforced by `naming-conventions-reviewer`.
|
|
52
|
+
4. **No placeholders.** Every plan, design, and implementation must be complete and precise.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# ai.agent-skills
|
|
2
|
+
|
|
3
|
+
Engineering skills for Crownpeak AI team coding agents. Plugin name: **ai.pierre**.
|
|
4
|
+
|
|
5
|
+
Provides codebase-aware brainstorming, implementation planning with mandatory code reuse, interactive Kubeflow pipeline test configuration, and cross-repo naming convention enforcement.
|
|
6
|
+
|
|
7
|
+
**New to Claude Code?** Start with the [onboarding guide](docs/onboarding.md) after installing.
|
|
8
|
+
|
|
9
|
+
## Quick Install
|
|
10
|
+
|
|
11
|
+
| Tool | Command |
|
|
12
|
+
|------|---------|
|
|
13
|
+
| **Claude Code** | `/plugin install ai.pierre` ([setup guide](docs/claude-code-setup.md)) |
|
|
14
|
+
| **OpenCode** | Clone repo, open in OpenCode ([setup guide](docs/opencode-setup.md)) |
|
|
15
|
+
| **GitHub Copilot** | Copy skills to `.github/skills/` ([setup guide](docs/copilot-setup.md)) |
|
|
16
|
+
|
|
17
|
+
## Commands
|
|
18
|
+
|
|
19
|
+
| Command | Description |
|
|
20
|
+
|---------|-------------|
|
|
21
|
+
| `/brainstorm` | Codebase-aware brainstorming with dynamic AI team repo discovery via `gh` |
|
|
22
|
+
| `/plan` | Implementation planning with mandatory codebase search and code reuse |
|
|
23
|
+
| `/plan-algo-tests` | Interactive 3-stage flow: pipeline selection, config gathering, Kubeflow JSON generation |
|
|
24
|
+
| `/test` | Local pytest, Kubeflow pipeline e2e testing, or MLflow model validation |
|
|
25
|
+
|
|
26
|
+
## Skills
|
|
27
|
+
|
|
28
|
+
| Skill | Description |
|
|
29
|
+
|-------|-------------|
|
|
30
|
+
| `brainstorming` | Design exploration with repo discovery, codebase search, interactive requirements gathering |
|
|
31
|
+
| `planning` | TDD-based task breakdown with cross-repo dependency mapping |
|
|
32
|
+
| `algo-test-planning` | Pipeline test config generation with 3-stage interactive flow |
|
|
33
|
+
| `e2e-testing` | Local, pipeline, and model validation testing workflows |
|
|
34
|
+
| `ml-tooling-dev` | Kubeflow, MLflow, and MongoDB dev environment management |
|
|
35
|
+
| `grill-me` | Stress-test a plan or design through relentless questioning, resolving each branch of the decision tree |
|
|
36
|
+
| `naming-conventions-reviewer` | Cross-repo naming convention enforcement for ML repositories |
|
|
37
|
+
|
|
38
|
+
## Copilot Instructions
|
|
39
|
+
|
|
40
|
+
A reference [`copilot-instructions.md`](.github/copilot-instructions.md) is included for GitHub Copilot code reviews. It covers Python coding style, Crownpeak AI team naming conventions, and commit message standards. Copy it into your project's `.github/` directory to enable Copilot-assisted reviews. See the [Copilot setup guide](docs/copilot-setup.md) for details.
|
|
41
|
+
|
|
42
|
+
## Repository Structure
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
.claude/commands/ Slash commands (thin wrappers invoking skills)
|
|
46
|
+
.github/ Reference copilot-instructions.md for code reviews
|
|
47
|
+
skills/ Skill definitions with SKILL.md, references/, and scripts/
|
|
48
|
+
docs/ Setup guides for Claude Code, OpenCode, and Copilot
|
|
49
|
+
CLAUDE.md Agent instructions for Claude Code
|
|
50
|
+
AGENTS.md Agent instructions for OpenCode and Copilot
|
|
51
|
+
```
|