Backlog Triage Skill
Prioritize open GitHub issues and Jira tickets without a milestone or release target.
Contract
- Inputs: optional filters such as
--github-only, --jira-only, --limit N, --apply.
- Output: a Polish triage report with proposed milestone, owner, and priority.
- Side effects: no mutations unless the user passes
--apply or explicitly confirms.
Workflow
1. GitHub issues without milestone
gh issue list \
--repo <OWNER>/<REPO> \
--state open \
--limit 200 \
--json number,title,labels,assignees,milestone,updatedAt,url \
--jq '.[] | select(.milestone == null)'
2. QA queue size
Use the Project board status field from .agent/context/project-ids.md:
PROJECT_IDS_FILE=.agent/context/project-ids.md
PROJECT_ID=$(awk -F'`' '/Project ID:/ {print $2; exit}' "$PROJECT_IDS_FILE")
STATUS_FIELD_ID=$(awk -F'`' '/^## Status Field:/ {print $2; exit}' "$PROJECT_IDS_FILE")
FOR_TESTING_OPTION_ID=$(awk -F'`' '/\| For testing \|/ {print $2; exit}' "$PROJECT_IDS_FILE")
gh api graphql --paginate \
-f projectId="$PROJECT_ID" \
-f query='
query($projectId: ID!, $endCursor: String) {
node(id: $projectId) {
... on ProjectV2 {
items(first: 100, after: $endCursor) {
nodes {
fieldValues(first: 20) {
nodes {
... on ProjectV2ItemFieldSingleSelectValue {
field {
... on ProjectV2SingleSelectField { id }
}
optionId
name
}
}
}
content {
... on Issue { number title }
... on PullRequest { number title }
}
}
pageInfo { hasNextPage endCursor }
}
}
}
}' --jq ".data.node.items.nodes[] | select(.fieldValues.nodes[]? | (.field.id == \"$STATUS_FIELD_ID\" and .optionId == \"$FOR_TESTING_OPTION_ID\"))"
Report the count and list the oldest or most important items.
3. Jira tickets without release target
Use Atlassian MCP when available:
- cloudId:
<JIRA_CLOUD_ID>
- JQL:
project = SPZA
AND statusCategory != Done
AND fixVersion is EMPTY
ORDER BY priority DESC, updated DESC
If Jira MCP is unavailable, mark Jira as not checked and keep the GitHub report useful.
4. Priority rubric
| Priority |
Use when |
| P0 |
Blocks demo, production, security, auth, payments, data loss, deploy. |
| P1 |
Directly affects core UX, active milestone delivery, or a public path users will hit. |
| P2 |
Tooling, internal workflow, polish, non-blocking quality improvements. |
| P3 |
Nice-to-have, deferred infra checks, exploratory tasks. |
Owner hints:
| Area |
Suggested owner |
| content, docs |
content owner or relevant agent |
| code quality, TypeScript, routing |
core dev |
| testing, QA queue |
test manager / QA |
| Supabase, RLS, migrations |
database owner |
| GitHub, CI, skills, release process |
repo-ops/tooling owner |
5. Output
## Backlog triage
**GitHub issues without milestone:** N
**Jira tickets without fixVersion:** M / not checked
**QA queue (`For testing`):** Q
### Recommended changes
| Item | Priority | Milestone | Owner | Why |
|---|---|---|---|---|
| #123 | P1 | M2: Matematyka E8 Ready | core dev | ... |
### Apply plan
- Add milestone ...
- Add labels ...
- Assign ...
If the user confirms applying changes, use gh issue edit for GitHub and Atlassian MCP for Jira. Apply one item at a time and report partial failures.
Rules
- Do not downgrade P0/P1 without evidence.
- Do not assign issues to Copilot unless the issue is explicitly suitable for Copilot implementation.
- Do not close issues from this skill.
- Do not mutate Jira/GitHub in preview mode.
1---2name: backlog-triage3description: Backlog prioritization for GitHub issues and Jira tickets. Finds items without milestones, proposes owners and priority, and reports QA queue size. Trigger when: /triage backlog, prioritize backlog, issues without milestone, triage backlogu.4---56# Backlog Triage Skill78Prioritize open GitHub issues and Jira tickets without a milestone or release target.910## Contract1112- Inputs: optional filters such as `--github-only`, `--jira-only`, `--limit N`, `--apply`.13- Output: a Polish triage report with proposed milestone, owner, and priority.14- Side effects: no mutations unless the user passes `--apply` or explicitly confirms.1516## Workflow1718### 1. GitHub issues without milestone1920```bash21gh issue list \22 --repo <OWNER>/<REPO> \23 --state open \24 --limit 200 \25 --json number,title,labels,assignees,milestone,updatedAt,url \26 --jq '.[] | select(.milestone == null)'27```2829### 2. QA queue size3031Use the Project board status field from `.agent/context/project-ids.md`:3233```bash34PROJECT_IDS_FILE=.agent/context/project-ids.md35PROJECT_ID=$(awk -F'`' '/Project ID:/ {print $2; exit}' "$PROJECT_IDS_FILE")36STATUS_FIELD_ID=$(awk -F'`' '/^## Status Field:/ {print $2; exit}' "$PROJECT_IDS_FILE")37FOR_TESTING_OPTION_ID=$(awk -F'`' '/\| For testing \|/ {print $2; exit}' "$PROJECT_IDS_FILE")3839gh api graphql --paginate \40 -f projectId="$PROJECT_ID" \41 -f query='42query($projectId: ID!, $endCursor: String) {43 node(id: $projectId) {44 ... on ProjectV2 {45 items(first: 100, after: $endCursor) {46 nodes {47 fieldValues(first: 20) {48 nodes {49 ... on ProjectV2ItemFieldSingleSelectValue {50 field {51 ... on ProjectV2SingleSelectField { id }52 }53 optionId54 name55 }56 }57 }58 content {59 ... on Issue { number title }60 ... on PullRequest { number title }61 }62 }63 pageInfo { hasNextPage endCursor }64 }65 }66 }67}' --jq ".data.node.items.nodes[] | select(.fieldValues.nodes[]? | (.field.id == \"$STATUS_FIELD_ID\" and .optionId == \"$FOR_TESTING_OPTION_ID\"))"68```6970Report the count and list the oldest or most important items.7172### 3. Jira tickets without release target7374Use Atlassian MCP when available:7576- cloudId: `<JIRA_CLOUD_ID>`77- JQL:7879```text80project = SPZA81AND statusCategory != Done82AND fixVersion is EMPTY83ORDER BY priority DESC, updated DESC84```8586If Jira MCP is unavailable, mark Jira as `not checked` and keep the GitHub report useful.8788### 4. Priority rubric8990| Priority | Use when |91|---|---|92| P0 | Blocks demo, production, security, auth, payments, data loss, deploy. |93| P1 | Directly affects core UX, active milestone delivery, or a public path users will hit. |94| P2 | Tooling, internal workflow, polish, non-blocking quality improvements. |95| P3 | Nice-to-have, deferred infra checks, exploratory tasks. |9697Owner hints:9899| Area | Suggested owner |100|---|---|101| content, docs | content owner or relevant agent |102| code quality, TypeScript, routing | core dev |103| testing, QA queue | test manager / QA |104| Supabase, RLS, migrations | database owner |105| GitHub, CI, skills, release process | repo-ops/tooling owner |106107### 5. Output108109```markdown110## Backlog triage111112**GitHub issues without milestone:** N113**Jira tickets without fixVersion:** M / not checked114**QA queue (`For testing`):** Q115116### Recommended changes117| Item | Priority | Milestone | Owner | Why |118|---|---|---|---|---|119| #123 | P1 | M2: Matematyka E8 Ready | core dev | ... |120121### Apply plan122- Add milestone ...123- Add labels ...124- Assign ...125```126127If the user confirms applying changes, use `gh issue edit` for GitHub and Atlassian MCP for Jira. Apply one item at a time and report partial failures.128129## Rules130131- Do not downgrade P0/P1 without evidence.132- Do not assign issues to Copilot unless the issue is explicitly suitable for Copilot implementation.133- Do not close issues from this skill.134- Do not mutate Jira/GitHub in preview mode.