jira-release-blocker-validator
Detailed implementation guide for validating proposed release blockers
When & Why to Use This Skill
The JIRA Release Blocker Validator is a specialized Claude skill designed to automate the triage and validation of software release blockers. By integrating with JIRA MCP servers, it analyzes proposed bugs against rigorous criteria—such as severity, regression status, and workaround viability—to provide data-driven APPROVE or REJECT recommendations. This tool streamlines the release management process, ensuring high-quality deployments by focusing engineering efforts on genuine blockers while filtering out CI-only issues and low-priority bugs.
Use Cases
- Automated Release Triage: Quickly process large volumes of proposed blockers for specific software versions using automated JQL queries and criteria-based analysis.
- Blocker Justification Reports: Generate comprehensive Markdown reports that provide clear evidence and justifications for release decisions, suitable for stakeholder review.
- Quality Gate Enforcement: Systematically ensure that only bugs meeting 'Critical' severity or causing regressions are permitted to block a release, maintaining high shipment standards.
- Workaround Assessment: Analyze bug comments to determine if existing workarounds are safe, idempotent, and timely, helping to downgrade non-essential blockers and prevent unnecessary delays.
| name | JIRA Release Blocker Validator |
|---|---|
| description | Detailed implementation guide for validating proposed release blockers |
| command | /jira:validate-blockers |
JIRA Release Blocker Validator - Implementation Guide
This skill provides detailed implementation guidance for the /jira:validate-blockers command, which helps release managers make data-driven blocker approval/rejection decisions.
When to Use This Skill
This skill is invoked automatically when the /jira:validate-blockers command is executed. It provides step-by-step implementation details for:
- Querying JIRA for proposed release blockers (Release Blocker = Proposed)
- Scoring blockers against Red Hat OpenShift release blocker criteria
- Generating APPROVE/REJECT/DISCUSS recommendations
Prerequisites
- Jira MCP server must be configured (see plugin README)
- MCP tools available:
mcp__atlassian__jira_* - Read-only access to JIRA APIs (no credentials required for public Red Hat JIRA issues)
- For single bug mode: bug must be accessible and exist
Detailed Implementation Steps
Phase 1: Parse Arguments
Parse command-line arguments:
- Extract target version from $1 (optional, format: X.Y like "4.21")
- Extract component filter from $2 (optional, supports comma-separated values)
- Extract
--bugflag value (optional, for single bug validation mode)
Project:
- Hardcoded to "OCPBUGS" project
Validate inputs:
- If neither
--bugnortarget-versionis provided, error out with message: "Error: Either target-version or --bug must be provided. Usage: /jira:validate-blockers [target-version] [component-filter] [--bug issue-key]" - If target version provided, verify it matches pattern X.Y (e.g., "4.21", "4.22")
- If component filter provided without target version and without --bug, error out
Phase 2: Build JQL Query for Proposed Blockers
Determine query mode:
Single bug mode (if
--bugis provided):- Skip JQL query construction
- Use
mcp__atlassian__jira_get_issueto fetch the single bug - Target version and component filter are ignored in this mode
- Proceed to analysis with single bug only
Version + component mode (if both target version and component are provided):
- Build JQL query for proposed blockers matching target version and component filter
- Continue with query construction below
Version only mode (if only target version provided):
- Build JQL query for all proposed blockers for the target version
- Continue with query construction below
Base JQL for proposed blockers:
project = OCPBUGS AND type = Bug AND "Release Blocker" = Proposed
IMPORTANT: Use "Release Blocker" = Proposed NOT cf[12319743]. The field ID customfield_12319743 is the Release Blocker field, but in JQL use the field name.
Version filter construction:
When target version is provided (e.g., "4.21"), expand to search for both X.Y and X.Y.0:
AND ("Target Version" in (4.21, 4.21.0) OR "Target Backport Versions" in (4.21, 4.21.0) OR affectedVersion in (4.21, 4.21.0))
Status exclusion filter:
Always exclude already-fixed bugs:
AND status not in (Closed, "Release Pending", Verified, ON_QA)
Component filter construction:
No component specified:
- Query all components (no component filter in JQL)
Single component:
AND component = "{COMPONENT}"
Multiple components (comma-separated):
AND component IN ({COMPONENT_LIST})
Final JQL examples:
Version only (4.21):
project = OCPBUGS AND type = Bug AND "Release Blocker" = Proposed AND ("Target Version" in (4.21, 4.21.0) OR "Target Backport Versions" in (4.21, 4.21.0) OR affectedVersion in (4.21, 4.21.0)) AND status not in (Closed, "Release Pending", Verified, ON_QA)
Version + component (4.21, "Hypershift"):
project = OCPBUGS AND type = Bug AND "Release Blocker" = Proposed AND ("Target Version" in (4.21, 4.21.0) OR "Target Backport Versions" in (4.21, 4.21.0) OR affectedVersion in (4.21, 4.21.0)) AND status not in (Closed, "Release Pending", Verified, ON_QA) AND component = "Hypershift"
Version + multiple components (4.21, "Hypershift,CVO"):
project = OCPBUGS AND type = Bug AND "Release Blocker" = Proposed AND ("Target Version" in (4.21, 4.21.0) OR "Target Backport Versions" in (4.21, 4.21.0) OR affectedVersion in (4.21, 4.21.0)) AND status not in (Closed, "Release Pending", Verified, ON_QA) AND component IN ("Hypershift", "Cluster Version Operator")
Phase 3: Query Proposed Blockers
Use MCP tools to fetch proposed blockers:
For version/component mode, use mcp__atlassian__jira_search:
- jql: The constructed JQL query from Phase 2
- fields: "key,summary,priority,severity,status,assignee,created,updated,labels,components,description,reporter,customfield_12319743,customfield_12319940"
- expand: "renderedFields" (to get comments for workaround analysis)
- limit: 1000 (adjust based on expected results)
Parse the response to extract:
- Total count of proposed blockers
- List of bug objects with all required fields
Custom fields to include:
customfield_12319743- Release Blocker status (should be "Proposed")customfield_12319940- Target Version
For single bug mode (--bug flag), use mcp__atlassian__jira_get_issue:
- issue_key: The bug key provided by user
- fields: Same fields as above plus custom fields
- expand: "renderedFields"
- comment_limit: 100 (need to check for workaround mentions)
Handle query results:
- If total is 0, display message: "✅ No proposed blockers found" with filter summary
- If total > 20, show progress indicator
- Cache all bug data for analysis (avoid re-querying)
Phase 4: Analyze Each Proposed Blocker
Analyze each proposed blocker using Red Hat OpenShift release blocker criteria.
Red Hat OpenShift Release Blocker Criteria:
Based on the official OpenShift blocker definition, bugs should be approved as release blockers when they meet these criteria:
Automatic/Strong Blockers (Recommend APPROVE):
- Component Readiness regressions (label: ComponentReadinessRegression) - even tech-preview jobs, unless covered by approved exceptions
- Service Delivery blockers (label: ServiceDeliveryBlocker) - most bugs with this label are blockers
- Data loss, service unavailability, or data corruption - most bugs in this category are blockers
- Install/upgrade failures - may be blockers based on scope (all platforms vs specific form-factor)
- Perception of failed upgrade - bugs that appear as upgrade failures to users
- Regressions from previous release - most regressions are blockers (e.g., from Layered Product Testing)
- Bugs severely impacting Service Delivery - regressions/bugs in default ROSA/OSD/ARO fleet features without acceptable workaround
Never Blockers (Recommend REJECT):
- Severity below Important - no bugs with Low/Medium severity are blockers
- New features without regressions - most new feature bugs are NOT blockers unless they regress existing functionality
- CI-only issues - bugs that only affect CI infrastructure/jobs and don't impact product functionality are NOT release blockers
- Look for labels:
ci-fail,ci-only,test-flake - Check summary/description for keywords: "CI job", "test failure", "rehearsal", "periodic job", "e2e test"
- Check comments for explicit statements like "Won't affect the product", "CI-only", "infrastructure issue"
- Even if the bug describes install/upgrade failures, if it only manifests in CI environments, recommend REJECT
- Look for labels:
Workaround Assessment (may affect recommendation):
An acceptable workaround must meet ALL three criteria:
- Idempotent - can be applied repeatedly without resulting change
- Safe at scale - can be safely deployed to 1000's of clusters without material risk via automation
- Timely - SD can implement before release is pushed to more Cincinnati channels (candidate, fast, stable)
If a workaround doesn't meet all three criteria, it's NOT an acceptable workaround.
For each proposed blocker:
- Fetch bug details including summary, description, labels, priority, severity, comments
- Check for CI-only indicators (REJECT criteria):
- Check labels:
ci-fail,ci-only,test-flake - Check summary/description for CI-specific keywords:
- "CI job", "test failure", "rehearsal", "periodic job", "e2e test", "periodic-ci-"
- Check comments for explicit CI-only statements:
- "Won't affect the product"
- "CI-only"
- "infrastructure issue"
- "only affects CI"
- If CI-only indicators found, recommend REJECT regardless of severity or failure type
- Check labels:
- Analyze blocker criteria (if not CI-only):
- Check labels: ComponentReadinessRegression, ServiceDeliveryBlocker, UpgradeBlocker
- Check severity: Must be Important or higher (Critical/Urgent)
- Analyze summary/description for keywords:
- Data loss, corruption, service unavailable
- Install failure, upgrade failure
- Regression
- Identify scope: All platforms vs specific form-factor/configuration
- Check for acceptable workarounds:
- Use
expand="renderedFields"to get comment text - Search for keywords: "workaround", "work around", "alternative", "bypass"
- Assess if workaround meets all 3 criteria (idempotent, safe at scale, timely)
- Use
- Generate recommendation:
- ✅ APPROVE - Meets automatic/strong blocker criteria, no acceptable workaround
- ❌ REJECT - CI-only issue, OR severity below Important, OR new feature without regression, OR has acceptable workaround
- ⚠️ DISCUSS - Edge cases requiring team discussion
Use MCP tools:
mcp__atlassian__jira_get_issuewith expand="renderedFields" to get comments- Analyze comment text for workaround mentions
Phase 5: Generate Validation Report
Create comprehensive Markdown report with all blocker validation results.
Report Structure:
# 🚫 Release Blocker Validation Report
**Components**: {component list or "All"} | **Project**: OCPBUGS | **Proposed Blockers**: {count} | **Generated**: {timestamp}
## Summary
- ✅ **Recommend APPROVE**: X
- ❌ **Recommend REJECT**: Y
- ⚠️ **Needs DISCUSSION**: Z
---
## Blocker Analysis
### {BUG-KEY}: {Summary} {VERDICT}
**Recommendation**: {APPROVE/REJECT/DISCUSS} - {One-line justification}
**Criteria Matched**:
- {✅/❌} {Criterion name}
- {✅/❌} {Criterion name}
- ...
**Justification**:
{Detailed explanation of why this bug should or shouldn't be a blocker}
**Suggested Action**: {What to do next}
---
[Repeat for each proposed blocker]
---
## Next Steps
1. Review APPROVE recommendations - add to blocker list
2. Review REJECT recommendations - remove blocker status
3. Discuss unclear cases in triage meeting
Special case for single bug mode:
When --bug flag is used, adapt the report to focus on a single bug:
- Summary shows single bug details (key, summary, verdict)
- Analysis section shows detailed criteria analysis for this specific bug
- Next Steps adapted for single bug action
Phase 6: Error Handling
Invalid issue ID (single bug mode):
- Display error: "Could not find issue {issue-id}"
- Verify issue ID is correct format
- Check user has access to the issue
Invalid arguments:
- Invalid component name: Warn but continue (JIRA will return no results)
No proposed blockers found:
- Display success message: "✅ No proposed blockers found"
- Show filter summary (components, project: OCPBUGS)
- Confirm no blocker decisions needed
MCP tool errors:
- If
mcp__atlassian__jira_searchfails, display JQL query and error message - If
mcp__atlassian__jira_get_issuefails:- Fallback to WebFetch: Try fetching via
https://issues.redhat.com/browse/{issue-key} - If WebFetch succeeds: Parse the web page to extract bug details (summary, severity, description) and continue with validation
- If WebFetch also fails: Display clear error indicating bug doesn't exist or isn't accessible
- Fallback to WebFetch: Try fetching via
- Provide troubleshooting guidance (check MCP server, verify credentials)
Large result sets (>50 blockers):
- Show progress indicators during analysis
- Consider warning user: "Found {count} proposed blockers. This may take a moment to analyze."
Performance Considerations
- Query optimization: Only fetch proposed blockers (cf[12319940] = "Proposed")
- Component scoping: Use component filters to reduce result set size
- Batch operations: Use
mcp__atlassian__jira_searchwith appropriate limits (avoid pagination when possible) - Caching: Store bug data in memory during execution to avoid re-querying JIRA
JQL Query Examples
Version only (4.21):
project = OCPBUGS AND type = Bug AND "Release Blocker" = Proposed AND ("Target Version" in (4.21, 4.21.0) OR "Target Backport Versions" in (4.21, 4.21.0) OR affectedVersion in (4.21, 4.21.0)) AND status not in (Closed, "Release Pending", Verified, ON_QA)
Version + single component (4.21, "Hypershift"):
project = OCPBUGS AND type = Bug AND "Release Blocker" = Proposed AND ("Target Version" in (4.21, 4.21.0) OR "Target Backport Versions" in (4.21, 4.21.0) OR affectedVersion in (4.21, 4.21.0)) AND status not in (Closed, "Release Pending", Verified, ON_QA) AND component = "Hypershift"
Version + multiple components (4.21, multiple):
project = OCPBUGS AND type = Bug AND "Release Blocker" = Proposed AND ("Target Version" in (4.21, 4.21.0) OR "Target Backport Versions" in (4.21, 4.21.0) OR affectedVersion in (4.21, 4.21.0)) AND status not in (Closed, "Release Pending", Verified, ON_QA) AND component IN ("Hypershift", "Cluster Version Operator")
Field IDs Reference:
- Release Blocker field:
customfield_12319743(use"Release Blocker"in JQL) - Target Version field:
customfield_12319940(use"Target Version"in JQL)