name: backlog-triage description: “Deep LLM-powered Jira backlog triage against upstream repositories. USE WHEN user says ’triage backlog’, ‘backlog analysis’, ‘clean backlog’, ‘analyze jira backlog’, or wants to assess relevance of Jira issues against upstream git/GitHub activity.”
BacklogTriage
Deep analysis of Jira backlog issues by investigating upstream repositories to determine if issues are still relevant, have been addressed, or should be closed. Uses the agent’s tools (git, gh, jrc) to investigate each issue — no pre-truncated context dumps.
Architecture
Unlike batch-prompt approaches, this skill leverages the agent pattern: the LLM reads each issue, decides what to investigate, and uses tools to pull exactly the evidence it needs. This means:
- No context window limitations on upstream data
- The LLM decides which repos, commits, PRs, and issues to look at
- It can go deep: read specific PRs, check commit diffs, trace feature implementations
- Iterative reasoning: “this mentions TEP-0137, let me check if that landed”
Project Configuration
The skill expects a backlog-triage.toml config file in the project directory:
[project]
name = "OpenShift Pipelines"
jira_project = "SRVKP"
jira_base = "https://issues.redhat.com/browse"
[versions]
current = ["1.19", "1.20", "1.21"]
development = ["1.22"]
eol = ["1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11", "1.12", "1.13", "1.14", "1.15", "1.16", "1.17", "1.18"]
eol_ocp = ["4.1", "4.2", "4.3", "4.4", "4.5", "4.6", "4.7", "4.8", "4.9", "4.10", "4.11", "4.12", "4.13"]
[upstream]
org = "tektoncd"
repos_dir = "~/src/tektoncd"
# Map Jira components to upstream repos
[upstream.component_map]
"Tekton Pipelines" = "pipeline"
"Pipelines as Code" = "pipelines-as-code"
"Tekton Triggers" = "triggers"
"Tekton Chains" = "chains"
"Tekton Results" = "results"
"Tekton CLI" = "cli"
"Operator" = "operator"
"Tekton Ecosystem" = "catalog"
"UI" = "dashboard"
"Tekton Hub" = "hub"
[files]
backlog = "srvkp-backlog-full.json" # fetched by fetch-backlog.py
analysis = "srvkp-backlog-llm-analysis.json"
report = "srvkp-backlog-llm-report.html"
Workflow Routing
| Workflow | Trigger | File |
|---|---|---|
| Fetch | “fetch backlog”, “update backlog data” | workflows/Fetch.md |
| Analyze | “analyze backlog”, “triage backlog” | workflows/Analyze.md |
| Report | “generate report”, “backlog report” | workflows/Report.md |
| FullPipeline | “full backlog triage”, “end-to-end triage” | workflows/FullPipeline.md |
Tools Available
The agent should use these tools for investigation:
Jira (data already fetched)
- Backlog JSON is pre-fetched via
fetch-backlog.py(usesjrcCLI) - Read issues from the JSON file directly — no need to query Jira per-issue
Git (local repos)
# Search for related work in upstream repos
git -C ~/src/tektoncd/pipeline log --oneline --all --grep="keyword"
git -C ~/src/tektoncd/pipeline log --oneline --all --since="2024-01-01" -- path/to/file
GitHub CLI
# Search closed issues
gh issue list -R tektoncd/pipeline --state closed --search "keyword" --limit 10 --json number,title,closedAt,url
# Search merged PRs
gh pr list -R tektoncd/pipeline --state merged --search "keyword" --limit 10 --json number,title,mergedAt,url
# Read a specific issue/PR
gh issue view 1234 -R tektoncd/pipeline --json title,body,comments,labels
gh pr view 5678 -R tektoncd/pipeline --json title,body,mergedAt,files
Per-Issue Analysis Output
For each issue, produce:
{
"key": "SRVKP-1234",
"recommendation": "CLOSE|REVIEW_TO_CLOSE|NEEDS_TRIAGE|KEEP|HIGH_PRIORITY",
"relevance_score": 0-100,
"confidence": "high|medium|low",
"reason": "2-4 sentence explanation with specific evidence. Reference upstream PRs/commits.",
"tags": ["eol-version", "addressed-upstream", "stale", "customer-impact", ...],
"upstream_evidence": "tektoncd/pipeline#1234 merged 2025-03-15 — implemented this feature",
"suggested_comment": "Closing: this was addressed upstream in tektoncd/pipeline#1234 and shipped in OSP 1.20."
}
Recommendation Guidelines
| Recommendation | Score | Criteria |
|---|---|---|
| CLOSE | 0-20 | EOL version, confirmed fixed upstream, duplicate, obsolete |
| REVIEW_TO_CLOSE | 21-35 | Likely irrelevant but needs human confirmation |
| NEEDS_TRIAGE | 36-50 | Ambiguous, can’t determine without more context |
| KEEP | 51-75 | Still relevant, valid bug/feature, ongoing work |
| HIGH_PRIORITY | 76-100 | Blocker, customer-facing, security, active work needed |
Examples
Example 1: Full pipeline
User: "triage the SRVKP backlog"
→ Checks fetch-backlog.py output exists (runs if not)
→ Loads issues from JSON
→ For each issue, investigates upstream repos
→ Writes analysis JSON with per-issue reasoning
→ Generates interactive HTML report
Example 2: Analyze specific component
User: "triage backlog for Pipelines as Code"
→ Filters to PaC component issues
→ Focuses investigation on tektoncd/pipelines-as-code
→ Produces component-specific report
Example 3: Just the close candidates
User: "find backlog issues we can close"
→ Pre-filters to old issues, EOL versions, no-description
→ Investigates each against upstream
→ Produces close-focused report with suggested comments