Skip to content

Commit 223893e

Browse files
committed
HYPERFLEET-1105: align plugins to use ticket-hygiene.md as source of truth
Replace hardcoded component lists, activity types, and story point scales across all JIRA-related skills with dynamic fetches from the architecture repo's ticket-hygiene.md standard. Also document correct argument order for jira issue link (Blocks relationship).
1 parent 6e28c01 commit 223893e

13 files changed

Lines changed: 111 additions & 27 deletions

File tree

hyperfleet-devtools/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hyperfleet-devtools",
3-
"version": "0.5.0",
3+
"version": "0.5.1",
44
"description": "Development assistance tools for HyperFleet - commit message generation, architecture impact analysis, E2E test case design, E2E test automation, and more",
55
"author": {
66
"name": "HyperFleet Team",

hyperfleet-devtools/skills/architecture-impact/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: architecture-impact
3-
description: Analyzes code changes in HyperFleet component repositories (API, Sentinel, Adapter, Broker) to determine if architecture documentation needs updates using directory-based scope and complete document reading with single comprehensive LLM analysis. Activates when users ask "analyze architecture impact", "check if docs need update", or use /architecture-impact.
3+
description: Analyzes code changes in HyperFleet component repositories (API, Sentinel, Adapter, Broker) to determine if architecture documentation needs updates using directory-based scope and complete document reading with single comprehensive LLM analysis. Activates when users ask "analyze architecture impact", "check if docs need update", or use /architecture-impact. Note - this skill operates on code repositories, not JIRA components. For the full list of valid JIRA components, see ticket-hygiene.md in the architecture repo.
44
---
55

66
# Architecture Impact Analyzer

hyperfleet-jira/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hyperfleet-jira",
3-
"version": "0.5.2",
3+
"version": "0.5.3",
44
"description": "JIRA integration for HyperFleet team - sprint management, task tracking, ticket creation, triage, and story point estimation",
55
"author": {
66
"name": "Ciaran Roche",

hyperfleet-jira/commands/triage.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ Audit JIRA tickets for sprint readiness, including required fields, valid compon
2020

2121
## Instructions
2222

23+
0. **Fetch ticket-hygiene standard (source of truth for field validation):**
24+
```bash
25+
curl -sL https://raw.githubusercontent.com/openshift-hyperfleet/architecture/main/hyperfleet/standards/ticket-hygiene.md 2>/dev/null
26+
```
27+
Extract the valid components list and activity types from the fetched document. Use them for all validation steps below. Do NOT use hardcoded values.
28+
2329
1. **Get tickets to audit (current sprint by default):**
2430
```bash
2531
jira sprint list --current -p HYPERFLEET --raw 2>/dev/null
@@ -41,15 +47,12 @@ Audit JIRA tickets for sprint readiness, including required fields, valid compon
4147
jira issue list -q"project = HYPERFLEET AND sprint in openSprints() AND description is EMPTY" --plain 2>/dev/null
4248
```
4349

44-
5. **Find tickets without valid components (must be Adapter, API, Architecture, or Sentinel):**
50+
5. **Find tickets without valid components:**
4551
```bash
4652
jira issue list -q"project = HYPERFLEET AND component is EMPTY AND sprint in openSprints()" --plain 2>/dev/null
4753
```
4854

49-
Also check for invalid components:
50-
```bash
51-
jira issue list -q"project = HYPERFLEET AND sprint in openSprints() AND component not in (Adapter, API, Architecture, Sentinel)" --plain 2>/dev/null
52-
```
55+
Also check for invalid components — build the JQL `component not in (...)` clause dynamically using the component names fetched from ticket-hygiene.md in step 0. Quote multi-word names with single quotes in JQL (e.g., `'Claude Plugins'`).
5356

5457
6. **Find tickets without Activity Type:**
5558
```bash
@@ -115,7 +118,7 @@ Audit JIRA tickets for sprint readiness, including required fields, valid compon
115118
| TICKET-1 | [Summary] | None |
116119
| TICKET-2 | [Summary] | InvalidComponent |
117120

118-
**Valid Components:** Adapter, API, Architecture, Sentinel
121+
**Valid Components:** [list from ticket-hygiene.md fetched in step 0]
119122

120123
**Action Required:** Assign valid component for tracking.
121124

@@ -126,7 +129,7 @@ Audit JIRA tickets for sprint readiness, including required fields, valid compon
126129
|--------|---------|------|
127130
| TICKET-1 | [Summary] | Story |
128131

129-
**Valid Activity Types:** Associate Wellness & Development, Incidents & Support, Security & Compliance, Quality / Stability / Reliability, Future Sustainability, Product / Portfolio Work
132+
**Valid Activity Types:** [list from ticket-hygiene.md fetched in step 0]
130133

131134
**Action Required:** Set Activity Type for capacity planning.
132135

hyperfleet-jira/skills/jira-story-pointer/SKILL.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@ Activate this skill when the user:
2727

2828
## Story Point Scale Reference
2929

30-
HyperFleet uses a modified Fibonacci sequence for story points:
30+
HyperFleet uses a modified Fibonacci sequence for story points. The authoritative source is **ticket-hygiene.md** in the architecture repo. The scale below should match. If in doubt, fetch the latest:
31+
32+
```bash
33+
curl -sL https://raw.githubusercontent.com/openshift-hyperfleet/architecture/main/hyperfleet/standards/ticket-hygiene.md 2>/dev/null
34+
```
3135

3236
| Points | Meaning | Typical Scope | Notes |
3337
|--------|---------|---------------|-------|

hyperfleet-jira/skills/jira-ticket-creator/SKILL.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@ All JIRA ticket content — summaries, descriptions, comments, and acceptance cr
2525

2626
The `jira-cli` accepts **Markdown** and converts it to ADF (Atlassian Document Format) for JIRA Cloud. Standard Markdown works correctly — headers, bullets, bold, inline code, fenced code blocks, links, and curly braces all render as expected.
2727

28+
## Authoritative Source
29+
30+
Field requirements, valid components, activity types, and story point scales are defined in **ticket-hygiene.md** in the architecture repo. Before creating tickets, fetch the current standard:
31+
32+
```bash
33+
curl -sL https://raw.githubusercontent.com/openshift-hyperfleet/architecture/main/hyperfleet/standards/ticket-hygiene.md 2>/dev/null
34+
```
35+
36+
Use the fetched document as the source of truth for valid components, activity types, and story point scales. Do NOT rely on hardcoded values.
37+
2838
## References
2939

3040
Load these files as needed:
@@ -165,6 +175,22 @@ All fields can be set via CLI during creation:
165175
- **Add Component**: use `-C ComponentName`
166176
- **Code blocks**: use fenced code blocks (triple backticks) in the description — they render correctly via CLI
167177

178+
#### Issue Links (Blocks / Is Blocked By)
179+
180+
When linking tickets with "Blocks" relationships, the argument order is critical:
181+
182+
```bash
183+
jira issue link <OUTWARD-TICKET> <INWARD-TICKET> "Blocks"
184+
```
185+
186+
This means: `OUTWARD-TICKET` **blocks** `INWARD-TICKET`.
187+
188+
Examples:
189+
- New ticket blocks an existing one: `jira issue link HYPERFLEET-NEW HYPERFLEET-EXISTING "Blocks"`
190+
- New ticket is blocked by an existing one: `jira issue link HYPERFLEET-EXISTING HYPERFLEET-NEW "Blocks"`
191+
192+
**Common mistake:** Swapping the arguments inverts the link direction — the parent ticket appears as "IS BLOCKED BY" instead of "BLOCKS".
193+
168194
### Step 9: Verify and Return Details
169195

170196
```bash

hyperfleet-jira/skills/jira-ticket-creator/references/activity-types.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
Activity Type is **required** for sprint/kanban capacity planning. Tickets without an Activity Type appear as "Uncategorized" and cannot be properly allocated.
44

5+
The authoritative source for activity types is **ticket-hygiene.md** in the architecture repo. The values below should match. If in doubt, fetch the latest version:
6+
7+
```bash
8+
curl -sL https://raw.githubusercontent.com/openshift-hyperfleet/architecture/main/hyperfleet/standards/ticket-hygiene.md 2>/dev/null
9+
```
10+
511
Set via CLI: `--custom activity-type="<value>"`
612

713
## Assignment Flow

hyperfleet-jira/skills/jira-ticket-creator/references/cli-examples.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,18 @@ Explanation of business value and impact.
210210
- Criterion 3
211211
```
212212

213+
## Linking Tickets (Blocks Relationship)
214+
215+
```bash
216+
# NEW_TICKET blocks EXISTING_TICKET
217+
jira issue link HYPERFLEET-NEW HYPERFLEET-EXISTING "Blocks"
218+
219+
# EXISTING_TICKET blocks NEW_TICKET (new ticket is blocked by existing)
220+
jira issue link HYPERFLEET-EXISTING HYPERFLEET-NEW "Blocks"
221+
```
222+
223+
The first argument is always the outward (blocking) ticket. Getting the order wrong inverts the link direction.
224+
213225
## Important Reminders
214226

215227
- Fenced code blocks (triple backticks) work correctly via CLI

hyperfleet-jira/skills/jira-ticket-creator/references/pitfalls.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
1. Use `--body-file` flag — it doesn't exist! Use `-b "$(cat /tmp/file.txt)"` instead
88
2. Use raw field IDs like `--custom customfield_10028=3` — silently ignored! Use aliases
99
3. Use JIRA wiki markup for links (`[text|url]`) — the `jira-cli` expects Markdown (`[text](url)`) and wiki markup renders as malformed, duplicated links
10+
4. Swap arguments in `jira issue link` — the first argument is the OUTWARD ticket (the one that "blocks"), the second is the INWARD ticket (the one that "is blocked by"). Wrong order inverts the link direction
1011

1112
### DO
1213

@@ -52,6 +53,18 @@ jira issue create --project HYPERFLEET --type Story \
5253

5354
**Solution:** Use the exact syntax with quotes: `--custom activity-type="Quality / Stability / Reliability"`. Use field aliases, never raw IDs.
5455

56+
### Issue: Link Direction Inverted (Blocks vs Is Blocked By)
57+
58+
**Symptom:** After `jira issue link`, the parent ticket shows "IS BLOCKED BY" the new ticket instead of "BLOCKS" it.
59+
60+
**Solution:** The argument order matters — first argument is the outward (blocking) ticket:
61+
62+
```bash
63+
jira issue link BLOCKER-TICKET BLOCKED-TICKET "Blocks"
64+
```
65+
66+
This creates: `BLOCKER-TICKET` blocks `BLOCKED-TICKET`.
67+
5568
### Issue: Description is Empty After Creation
5669

5770
**Solution:** Sometimes `-b "$(cat ...)"` fails silently. Verify with `jira issue view HYPERFLEET-XXX --plain`. If empty, set via pipe:

hyperfleet-jira/skills/jira-triage/SKILL.md

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,25 @@ Activate when the user:
2525

2626
## Triage Checklist
2727

28+
### Authoritative Source
29+
30+
Field requirements, valid components, activity types, and story point scales are defined in **ticket-hygiene.md** in the architecture repo. Before triaging, fetch the current standard:
31+
32+
```bash
33+
curl -sL https://raw.githubusercontent.com/openshift-hyperfleet/architecture/main/hyperfleet/standards/ticket-hygiene.md 2>/dev/null
34+
```
35+
36+
Use the fetched document as the source of truth for all validation in this skill. Do NOT rely on hardcoded values.
37+
2838
### Required Fields (Must Have)
2939
| Field | Requirement |
3040
|-------|-------------|
3141
| Title | Clear, actionable, under 100 characters |
3242
| Description | Detailed context (recommend > 100 characters) |
3343
| Acceptance Criteria | At least 2 clear, testable criteria |
34-
| Story Points | Set (scale: 0, 1, 3, 5, 8, 13) |
35-
| Component | One of: Adapter, API, Architecture, Sentinel |
36-
| Activity Type | Set for capacity planning |
44+
| Story Points | Per scale defined in ticket-hygiene.md |
45+
| Component | Must match a valid component from ticket-hygiene.md |
46+
| Activity Type | Must match a valid activity type from ticket-hygiene.md |
3747

3848
### Recommended Fields
3949
| Field | Requirement |
@@ -53,11 +63,7 @@ Activate when the user:
5363

5464
## Components
5565

56-
Valid components for HYPERFLEET project:
57-
- **Adapter** - Integration adapters
58-
- **API** - API services
59-
- **Architecture** - Architecture decisions and documentation
60-
- **Sentinel** - Background processing services
66+
Valid components are defined in the "Valid Components" section of ticket-hygiene.md (fetched above). Validate the ticket's component against that list.
6167

6268
## How to Check a Ticket
6369

@@ -88,7 +94,7 @@ When analyzing a ticket, provide:
8894
| Description | PASS/FAIL | [Length: X chars] |
8995
| Acceptance Criteria | PASS/FAIL | [Count: X criteria] |
9096
| Story Points | PASS/FAIL | [Value or "Missing"] |
91-
| Component | PASS/FAIL | [Must be: Adapter, API, Architecture, or Sentinel] |
97+
| Component | PASS/FAIL | [Must be a valid project component — see Components section] |
9298
| Activity Type | PASS/FAIL | [Type or "Uncategorized"] |
9399

94100
#### Overall Score: X/6 Required Checks Passed
@@ -104,7 +110,7 @@ When analyzing a ticket, provide:
104110

105111
## Activity Types
106112

107-
Follow the same activity type definitions used by the `jira-ticket-creator` skill. When triaging, verify the ticket's activity type is set and matches the correct Sankey tier (Non-Negotiable → Core Principles → Balance).
113+
Activity types and their tier assignments (Non-Negotiable → Core Principles → Balance) are defined in the "Activity Types" section of ticket-hygiene.md (fetched above). Validate the ticket's activity type against that list.
108114

109115
## Red Flags to Highlight
110116

@@ -115,7 +121,7 @@ Follow the same activity type definitions used by the `jira-ticket-creator` skil
115121
- Vague titles like "Fix bug" or "Update feature"
116122
- Tickets open > 30 days without progress
117123
- **Missing Activity Type** (appears as Uncategorized in capacity planning)
118-
- **Invalid Component** (must be Adapter, API, Architecture, or Sentinel)
124+
- **Invalid Component** (must be a valid project component — see Components section)
119125

120126
## Integration with Commands
121127

0 commit comments

Comments
 (0)