quarterly-initiative-report

Generate quarterly Jira status reports with RAG assessment, blocker tracking, and next-quarter recommendations. Use when preparing quarterly initiative reviews or tracking epic progress.

8 stars

Best use case

quarterly-initiative-report is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Generate quarterly Jira status reports with RAG assessment, blocker tracking, and next-quarter recommendations. Use when preparing quarterly initiative reviews or tracking epic progress.

Teams using quarterly-initiative-report should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/quarterly-initiative-report/SKILL.md --create-dirs "https://raw.githubusercontent.com/patternfly/ai-helpers/main/plugins/pf-workshop/skills/quarterly-initiative-report/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/quarterly-initiative-report/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How quarterly-initiative-report Compares

Feature / Agentquarterly-initiative-reportStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Generate quarterly Jira status reports with RAG assessment, blocker tracking, and next-quarter recommendations. Use when preparing quarterly initiative reviews or tracking epic progress.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Quarterly Initiative Status Report

Generate comprehensive quarterly status reports for Jira initiatives with progress tracking, RAG (Red/Amber/Green) status assessment, blocker identification, and next-quarter priority recommendations.

## Requirements

| Tool | Purpose | Check |
|---|---|---|
| `curl` | Jira REST API calls | `command -v curl` |
| `jq` | JSON parsing | `command -v jq` or `brew install jq` |

## Prerequisites

This skill requires Jira API credentials configured as environment variables:

| Variable | Description | Example |
|---|---|---|
| `ATLASSIAN_EMAIL` | Your Atlassian account email | `user@company.com` |
| `ATLASSIAN_API_TOKEN` | API token from [id.atlassian.com/manage-profile/security/api-tokens](https://id.atlassian.com/manage-profile/security/api-tokens) | `ATATT3xFfGF0...` |
| `ATLASSIAN_SITE_URL` | Your Atlassian instance URL | `https://company.atlassian.net` |

### Setting Environment Variables

**Option 1: In AI tool settings** (Claude Code settings.json, Cursor config):
```json
{
  "env": {
    "ATLASSIAN_EMAIL": "your-email@company.com",
    "ATLASSIAN_API_TOKEN": "your-token-here",
    "ATLASSIAN_SITE_URL": "https://your-company.atlassian.net"
  }
}
```

**Option 2: Shell environment**:
```bash
export ATLASSIAN_EMAIL="your-email@company.com"
export ATLASSIAN_API_TOKEN="your-token-here"
export ATLASSIAN_SITE_URL="https://your-company.atlassian.net"
```

**Verify credentials:**
```bash
curl -s -u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" \
  -H "Accept: application/json" \
  "$ATLASSIAN_SITE_URL/rest/api/3/myself" | jq '.displayName'
```

## Usage

When invoked, gather from the user:
1. **Jira Project Key** (e.g., "PF" for PatternFly)
2. **Label** identifying the initiative (e.g., "Q1-2026" or "Q12026")

Then execute the workflow below to generate the comprehensive report.

## Workflow

### Step 1: Fetch All Epics with the Label

```bash
# Search for all epics/initiatives with the label
curl -s -u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" \
  -H "Accept: application/json" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jql":"project=PROJECT AND labels=\"LABEL\" AND type IN (Epic, Initiative)","fields":["key","summary","status","assignee","duedate","issuetype","labels"],"maxResults":1000}' \
  "$ATLASSIAN_SITE_URL/rest/api/3/search/jql"
```

### Step 2: For Each Epic, Gather Complete Metrics

**Process for EVERY epic (including closed):**

1. **Fetch direct sub-issues:**
```bash
curl -s -u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" \
  -H "Accept: application/json" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jql":"parent=EPIC-KEY","fields":["key","summary","status","priority"],"maxResults":1000}' \
  "$ATLASSIAN_SITE_URL/rest/api/3/search/jql" | \
  jq '{
    total: (.issues | length),
    done: ([.issues[] | select(.fields.status.statusCategory.key == "done")] | length),
    in_progress: ([.issues[] | select(.fields.status.statusCategory.key == "indeterminate")] | length),
    todo: ([.issues[] | select(.fields.status.statusCategory.key == "new")] | length),
    completion_pct: (if (.issues | length) > 0 then (([.issues[] | select(.fields.status.statusCategory.key == "done")] | length) * 100 / (.issues | length) | floor) else 0 end)
  }'
```

2. **Check for duplicate links (CRITICAL for all epics):**
```bash
# Check EVERY epic for cross-project duplicate links
curl -s -u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" \
  -H "Accept: application/json" \
  "$ATLASSIAN_SITE_URL/rest/api/3/issue/EPIC-KEY?fields=issuelinks" | \
  jq '{
    key: .key,
    duplicates: [.fields.issuelinks[] | select(.type.name == "Duplicate") | {
      linked_issue: (if .outwardIssue then .outwardIssue.key else .inwardIssue.key end),
      linked_type: (if .outwardIssue then .outwardIssue.fields.issuetype.name else .inwardIssue.fields.issuetype.name end)
    }]
  }'
```

3. **For each linked epic, fetch its child issues:**
```bash
curl -s -u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" \
  -H "Accept: application/json" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jql":"parent=LINKED-EPIC-KEY","fields":["key","summary","status"],"maxResults":1000}' \
  "$ATLASSIAN_SITE_URL/rest/api/3/search/jql" | \
  jq '{
    total: (.issues | length),
    done: ([.issues[] | select(.fields.status.statusCategory.key == "done")] | length),
    in_progress: ([.issues[] | select(.fields.status.statusCategory.key == "indeterminate")] | length),
    todo: ([.issues[] | select(.fields.status.statusCategory.key == "new")] | length)
  }'
```

**IMPORTANT:** Combine direct children + linked epic children for total metrics. Many cross-project initiatives track significant work via duplicate links (e.g., AAP, MTV, CONSOLE, SAT projects).

### Step 3: Calculate Aggregate Metrics

- **Total Issues:** Sum all direct + linked issues across all epics
- **Overall Completion:** (Total Done / Total Issues) × 100
- **Epic Counts:** Closed, In Progress, New
- **Cross-Project Work:** Issues tracked via duplicate links

### Step 4: Identify Blockers

```bash
# Find high-priority or blocked issues
curl -s -u "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" \
  -H "Accept: application/json" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jql":"project=PROJECT AND labels=\"LABEL\" AND (status=Blocked OR priority=Highest)","fields":["key","summary","status","priority","assignee"],"maxResults":1000}' \
  "$ATLASSIAN_SITE_URL/rest/api/3/search/jql"
```

### Step 5: Determine RAG Status

For each epic, evaluate in this order (first match wins):
- **🔴 Red (Critical):** <40% complete OR critical blockers OR unassigned near deadline
- **🟡 Amber (At Risk):** 40-74% complete OR 1-2 non-critical blockers
- **🟢 Green (On Track):** ≥75% complete OR ≥50% with no blockers

### Step 6: Generate Report

Structure the output markdown report with these sections:

## Report Structure

```markdown
# Quarterly Initiative Status Report: [Initiative Name]
**Reporting Period:** [Quarter/Year]
**Report Date:** [Current Date]
**Overall Status:** 🟢/🟡/🔴 [RAG]

---

## Executive Summary

[2-3 paragraphs: overall health, key achievements, critical concerns]

**Key Metrics:**
- Overall Completion: X% (Y/Z issues)
- Epics Completed: A of B
- Critical Blockers: C

---

## Initiative Overview

**Initiative:** [Label/Name]
**Quarter:** Q# YYYY
**Timeline:** [Start] - [End]
**Days Remaining:** X days

**Goals:** [Extracted from initiative description or inferred]

---

## Epic Status Dashboard

| Epic | Owner | Status | Progress | RAG | Notes |
|------|-------|--------|----------|-----|-------|
| [KEY] [Summary] | [Owner] | In Progress | 75% (15/20) | 🟢 | |
| [KEY] [Summary] | [Owner] | In Progress | 45% (9/20) | 🟡 | Has 1 blocker |
| [KEY] [Summary] | [Owner] | New | 0% (0/10) | 🔴 | Unassigned |

---

## Detailed Metrics

### Overall Progress
- **Total Issues:** X
- **Completed:** Y (Z%)
- **In Progress:** A (B%)
- **To Do:** C (D%)

### Cross-Project Work
- **Total Linked Issues:** N (via duplicate epics)
- **Projects:** AAP, MTV, CONSOLE, SAT, etc.
- **Linked Completion:** P%

### By Epic
[For each epic with duplicate links, show:]
- **[Epic Key]** - [Summary]: X direct children (Y% complete)
  - Linked via duplicates: [Linked Epic Key] (Z children, W% complete)
  - Combined: Total issues, overall %

---

## Blockers and Risks

### Critical Blockers (Immediate Action Required)
1. **[Epic Key]:** [Description]
   - Impact: High/Medium/Low
   - Recommendation: [Action]

### Risks (Monitor Closely)
1. **[Risk]:** [Description]
   - Likelihood: High/Medium/Low
   - Impact: High/Medium/Low
   - Mitigation: [Strategy]

---

## Q+1 Priority Recommendations

### Must Complete (Carryover)
1. **[Epic/Task]** - [Reason why critical]

### High Priority (Next Phase)
1. **[Suggested Work]** - [Builds on completed X]

---

## Appendix

### Methodology
- Data source: Jira REST API v3
- Reporting period: [Dates]
- Status categories: "done", "indeterminate", "new"

### Complete Epic Reference Table

| Epic | Summary | Owner | Done | In Prog | To Do | Total | % | Link |
|------|---------|-------|------|---------|-------|-------|---|------|
| **[KEY]** | [Summary] | [Owner] | X | Y | Z | N | P% | [View]([url]) |

**Notes:**
- * Indicates epic with cross-project duplicate links
- Total includes direct + linked epic work
- Sorted by completion % (descending)

**Summary Totals:**
- Total Issues: X
- Completed: Y (Z%)
```

## Best Practices

1. **Check ALL epics for duplicate links** - Even closed epics may track work in other projects
2. **Report cross-project work** - Many initiatives span multiple Jira projects (AAP, MTV, etc.)
3. **Use data-driven RAG** - Don't guess; base status on actual completion %
4. **Track trends** - Compare with previous reports to show velocity
5. **Be concise in executive summary** - Decision-makers want key facts
6. **Include appendix table** - Full epic reference with links for drill-down

## Common Patterns

**Epic with no direct children but has linked work:**
```
Epic PF-3227: Ansible Nexus Migration (Closed)
  Direct children: 0 issues
  Linked via duplicates:
    - AAP-58793: 16 issues (16 done, 100%)
  Combined: 16 issues, 100% complete ✅
```

**Epic with both direct and linked work:**
```
Epic PF-3408: Ansible Q1 Features (In Progress)
  Direct children: 0 issues
  Linked via duplicates:
    - AAP-60038: 63 issues (55 done, 87%)
    - AAP-57961: 18 issues (18 done, 100%)
    - AAP-59349: 56 issues (22 done, 39%)
  Combined: 137 issues, 69% complete
```

## Example Invocation

**User:** "Generate a quarterly report for PF project with label Q12026"

**Assistant actions:**
1. Confirm project key and label with user
2. Fetch all epics with label
3. For each epic:
   - Fetch direct children
   - Check for duplicate links
   - Fetch linked epic children
   - Calculate combined metrics
4. Calculate aggregate statistics
5. Identify blockers and assign RAG status
6. Generate comprehensive markdown report
7. Save report to file with date in filename

**Output file:** `Q1-2026-Q12026-Quarterly-Report-[DATE].md`

Related Skills

pf-unit-test-generator

8
from patternfly/ai-helpers

Generate a unit test file for a React component using Testing Library. Use when adding test coverage to new or existing components.

pf-prototype-mode

8
from patternfly/ai-helpers

Enable prototype mode for React apps with grayscale styling and a banner overlay. Use when demoing early concepts, presenting wireframes, or preventing stakeholders from fixating on visual polish.

pf-project-scaffolder

8
from patternfly/ai-helpers

Scaffolds PatternFly React projects with PF6-safe dependencies, imports, and starter layout. Use when creating a new PatternFly app or bootstrapping a migration sandbox.

pf-import-checker

8
from patternfly/ai-helpers

Audit and fix invalid PatternFly import paths across packages. Use when imports fail, modules are unresolved, or after upgrading PatternFly versions.

pf-component-structure

8
from patternfly/ai-helpers

Audit PatternFly React component nesting, wrapper hierarchies, and layout structure. Use when scanning for hierarchy violations or debugging spacing caused by missing wrapper components.

write-example-description

8
from patternfly/ai-helpers

Write and refine example descriptions for PatternFly.org component and demo pages. Use when authoring or updating the prose in PatternFly example markdown files.

summarize-jira-issues

8
from patternfly/ai-helpers

Summarize your current sprint workload from Jira — assigned issues, contributor roles, and priorities. Use when checking what's left in the sprint or deciding what to work on next.

semantic-release-troubleshooting

8
from patternfly/ai-helpers

Diagnose and fix semantic-release issues when a specific version is not being released. Use when semantic-release skips a version, fails to release, or when troubleshooting after git push --force, squashed commits, permission errors, or reference already exists.

pf-tokens

8
from patternfly/ai-helpers

Build CSS design tokens for PatternFly core and copy them to the PatternFly repository. Use when regenerating tokens after design changes or during release preparation.

pf-org-version-update

8
from patternfly/ai-helpers

Update patternfly-org for a new PatternFly release — resolve versions, update package.json and versions.json, and provide build steps. Use when cutting a PF release or release candidate.

pf-create-issue

8
from patternfly/ai-helpers

Create well-structured GitHub issues for PatternFly repositories with templates, follow-up tracking, and duplicate detection. Use when filing bugs, feature requests, or cross-repo follow-ups.

pf-bug-triage

8
from patternfly/ai-helpers

Triage PatternFly bug reports — assess completeness, suggest fixes, identify affected components, and recommend assignees. Use when reviewing new bug issues or preparing them for assignment.