plugins/jira/skills/categorize-activity-types/SKILL.md
Categorize Jira issues into Red Hat Sankey Activity Type categories using MCP Jira tools. Supports single-issue and batch modes. Use when the user wants to categorize or set activity types on Jira issues, or mentions activity types, work types, Sankey, or capacity allocation.
npx skillsauth add openshift-eng/ai-helpers categorize-activity-typesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Categorize Jira issues into Red Hat's Sankey capacity allocation categories and update them via MCP Jira tools. This skill supports two modes of operation:
/jira:categorize-activity-type)/jira:batch-categorize-activity-types)Both modes use identical classification logic, validation, and reporting.
These are the only valid values. Use the exact strings:
| Activity Type | Short Description | |---|---| | Associate Wellness & Development | Onboarding, training, AI learning, conferences, team health | | Incidents & Support | Production incidents, customer escalations, on-call | | Security & Compliance | CVEs, weaknesses, FedRAMP, compliance, security tooling | | Quality / Stability / Reliability | Bugs, SLOs, chores, tech debt, toil reduction, PMR actions | | Future Sustainability | Proactive architecture, productivity improvements, upstream, enablement | | Product / Portfolio Work | New features, enhancements, strategic product/portfolio work |
For detailed definitions, subcategories, and edge cases, see resources/activity-type-guidance.md.
The Activity Type custom field ID is customfield_10464. This is the same across all projects on redhat.atlassian.net.
Before starting any work, verify MCP Jira tools are available:
searchJiraIssuesUsingJql with a simple query (e.g., jql: "project = OCM", maxResults: 1)Both modes write artifacts to .work/activity-type-classifier/. Create this directory before starting:
mkdir -p .work/activity-type-classifier
Copy this checklist and track progress:
Classification Progress:
- [ ] Prerequisites: MCP Jira tools available
- [ ] Phase 1: Gather issues
- [ ] Phase 2: Categorize each issue
- [ ] Phase 3: Validate & generate report
- [ ] Phase 4: Apply updates (with approval)
- [ ] Phase 5: Iterate (batch mode only)
Fetch the issue by key using getJiraIssue:
summary,description,issuetype,labels,parent,components,priority,customfield_10464customfield_10464 is not null), inform the user and stopParse user input for:
AND resolved >= "2025-01-01"Always filter for issues without an Activity Type set. The "Activity Type" is EMPTY condition is mandatory in every query — do not ask the user whether to include it.
Construct the JQL query using this template:
project = {PROJECT} AND issuetype = {TYPE} AND "Activity Type" is EMPTY
Common additions:
AND resolved >= "2025-01-01"AND status != ClosedExecute searchJiraIssuesUsingJql with maxResults: 50. If more results exist, make a second call with nextPageToken to get up to 100 total. Combine both result sets.
From each issue, extract: key, summary, description (truncate to 2000 chars), labels, issuetype, status, priority, comment, and parent. Save all extracted data to .work/activity-type-classifier/issues.json.
Report the count of issues found to the user before proceeding.
Pre-check — Parent inheritance: Before classifying each issue, check if it has a parent issue. If the parent has an Activity Type set (customfield_10464), inherit it directly — no further classification needed. Set confidence to "High" and reasoning to "Inherited from {PARENT_KEY}". To look up a parent's Activity Type, call getJiraIssue with the parent's key and check customfield_10464. Cache parent lookups to reduce API calls — multiple children may share the same parent.
For remaining issues (no parent or parent has no Activity Type), read summary, description, labels, comments, and status. Apply the classification rules below and the detailed guidance in resources/activity-type-guidance.md.
Save classifications to .work/activity-type-classifier/classifications.json as a JSON array:
[
{
"key": "OCM-12345",
"summary": "Issue title",
"activityType": "Product / Portfolio Work",
"confidence": "High",
"reasoning": "New customer-facing feature for cluster provisioning"
}
]
In single-issue mode, this array contains exactly one entry. In batch mode, it contains all classified issues.
If total issues exceed 50 (batch mode), process in sub-batches of 20 to manage context.
Run the validation and report generation scripts. These are located in scripts/ relative to this skill's directory.
bash plugins/jira/skills/categorize-activity-types/scripts/validate-classifications.sh .work/activity-type-classifier/classifications.json
python3 plugins/jira/skills/categorize-activity-types/scripts/generate-report.py .work/activity-type-classifier/classifications.json .work/activity-type-classifier/report.md
--auto-apply--auto-apply flag is present AND confidence is High: automatically update the Activity Type field without prompting--dry-run flag is present, skip this phase entirelyUse editJiraIssue to set customfield_10464 (Activity Type) to the classified value, e.g. {"value": "Product / Portfolio Work"}.
Updated OCM-12345: Activity Type set to "Product / Portfolio Work"
View at: https://redhat.atlassian.net/browse/OCM-12345
After applying updates, offer to re-run the workflow:
When classifying an issue:
For the complete category definitions with subcategories and examples, see resources/activity-type-guidance.md.
| File | Purpose | When to Read | |---|---|---| | resources/activity-type-guidance.md | Full Sankey category definitions and subcategories | Phase 2 (classifying) | | resources/report-template.md | Report format reference | Phase 3 (report generation) | | scripts/validate-classifications.sh | Validate classifications JSON | Phase 3 (validation) | | scripts/generate-report.py | Generate markdown report from JSON | Phase 3 (report generation) | | scripts/cleanup.sh | Remove data artifacts, preserve reports | Post-workflow cleanup |
testing
Snapshot OpenShift payload data (release controller, PR diffs, comments, CI jobs, JUnit results, regression tracking) to a local directory for offline analysis
research
Shared engine for analyzing Jira issue activity and generating status summaries
tools
This skill should be used before any Snowflake command to verify MCP connectivity, guide users through access provisioning, and set the session context. Invoke this skill proactively whenever a command needs Snowflake data access.
development
Analyze a payload snapshot to identify root causes of blocking job failures, score candidate PRs, and produce an HTML report with revert recommendations