Issue Naming Conventions Skill
Apply consistent, traceable requirement IDs to GitHub issues using a canonical naming taxonomy. This skill ensures issues are standardized across repositories and enables full traceability from requirements to implementation.
⛔ MANDATORY PRE-FLIGHT PROTOCOL
STOP! Before ANY issue creation or ID assignment, you MUST complete this checklist:
┌─────────────────────────────────────────────────────────────────────────────┐ │ ISSUE ID ASSIGNMENT PRE-FLIGHT CHECKLIST (MANDATORY) │ ├─────────────────────────────────────────────────────────────────────────────┤ │ □ Step 1: READ the taxonomy file │ │ read_file .github/skills/issue-naming-conventions/references/ │ │ issue-types.yml │ │ │ │ □ Step 2: IDENTIFY the correct prefix for the issue type │ │ Match user intent to FR/BG/HF/TC/SC/PF/DC/IN │ │ │ │ □ Step 3: QUERY existing issues to find the highest ID │ │ gh issue list --search "PREFIX-" --state all --limit 500 │ │ │ │ □ Step 4: INCREMENT to next sequential number, zero-pad to 4 digits │ │ If highest is FR-0042, next is FR-0043 │ │ │ │ □ Step 5: VALIDATE the ID doesn't already exist before creating │ │ gh issue list --search "PREFIX-NNNN" --state all │ │ │ │ ⚠️ SKIPPING ANY STEP = PROTOCOL VIOLATION │ └─────────────────────────────────────────────────────────────────────────────┘
If you haven't queried existing issues for the highest ID, you CANNOT create an issue.
Critical Constraints
⚠️ ABSOLUTE RULE #1: You MUST NEVER create an issue without first querying existing issues to determine the next sequential ID.
⚠️ ABSOLUTE RULE #2: You MUST NEVER reuse an ID, even for closed or deleted issues. IDs are permanently allocated.
⚠️ ABSOLUTE RULE #3: You MUST NEVER invent new prefixes. Only use prefixes defined in issue-types.yml.
If a user requests an issue type that doesn't fit existing prefixes:
- •Explain that no matching prefix exists
- •Suggest the closest matching prefix from the taxonomy
- •If truly no match, use TC (Technical Chore) as a fallback and note it in the issue
When to Use This Skill
- •User asks to create a new issue with proper ID
- •User asks to assign a requirement ID to work items
- •User asks to determine the next ID for a specific type
- •User asks about issue naming conventions or standards
- •User needs to ensure traceability across the codebase
- •User mentions FR, BG, HF, TC, SC, PF, DC, or IN prefixes
- •User asks to triage or categorize incoming work
- •User asks how to format an issue title
Issue Type Overview
All issues follow a [PREFIX-####] Title pattern. The taxonomy is defined in issue-types.yml.
Requirement Type Prefixes
| Prefix | Type | Use For | Example |
|---|---|---|---|
FR-#### | Feature Request | Net-new user-facing capabilities | [FR-0043] Add dark mode theme support |
BG-#### | Bug | Non-critical defects, broken functionality | [BG-0089] Login fails when SSO is enabled |
HF-#### | Hotfix | Critical production issues, P0 emergencies | [HF-0015] Critical: API returns 500 on all requests |
TC-#### | Technical Chore | Refactoring, tech debt, maintenance, config files | [TC-0023] Refactor authentication module |
SC-#### | Security | Vulnerabilities, compliance, security fixes | [SC-0007] Update dependencies with known CVEs |
PF-#### | Performance | Optimization, latency, throughput | [PF-0011] Optimize database queries for dashboard |
DC-#### | Documentation | Only docs/, README.md — NOT agents/skills/instructions | [DC-0034] Add API reference for v2 endpoints |
IN-#### | Infrastructure | CI/CD, deployment, DevOps | [IN-0019] Configure staging environment CI/CD |
CRITICAL: Changes to .github/ configuration files (agents, skills, instructions, prompts) should use TC-#### (Technical Chore) or FR-#### (Feature Request), NEVER DC-#### (Documentation). These files are configuration/tooling, not documentation.
ID Format Rules
- •Always 4-digit zero-padded:
FR-0001, notFR-1 - •Range: 0001-9999 per prefix type
- •Permanent allocation: IDs are never reused, even for closed issues
- •Title format:
[PREFIX-####] Descriptive Title - •Max title length: 72 characters (including prefix)
Step-by-Step Workflows
Workflow 1: Create a New Issue with Proper ID
- •
Read the taxonomy: Load issue-types.yml to identify the correct prefix
- •
Match user intent: Determine which prefix fits (see type descriptions)
- •
Query existing issues: Find the highest ID for that prefix
bashgh issue list --search "FR-" --state all --limit 500 --json title --jq '.[].title' | grep -oE 'FR-[0-9]+' | sort -t'-' -k2 -n | tail -1
- •
Increment the ID: If highest is
FR-0042, next isFR-0043 - •
Validate uniqueness: Confirm the ID doesn't exist
bashgh issue list --search "FR-0043" --state all
- •
Select template: Use the appropriate template from body-templates.md
- •
Create the issue: Apply proper title format and body template
Example Output:
Next available Feature Request ID: FR-0043 Issue title: [FR-0043] Add dark mode theme support Using template: Feature Request (Full) - Includes: Summary, User Story, Problem Statement, Proposed Solution, Acceptance Criteria
Workflow 2: Find Next Available ID
- •
Identify the prefix type from user request
- •
Execute the query:
bashPREFIX="FR" && gh issue list --search "$PREFIX-" --state all --limit 500 --json title --jq '.[].title' | grep -oE "$PREFIX-[0-9]+" | sort -t'-' -k2 -n | tail -1 | awk -F'-' -v p="$PREFIX" '{printf "%s-%04d\n", p, $2+1}' - •
If no issues exist with that prefix, start at
0001 - •
Report the result with confidence
Example:
Query: Find next Bug ID Result: BG-0090 (current highest: BG-0089)
Workflow 3: Validate an Existing ID
- •
Parse the ID from user input
- •
Check format validity: Must match
^[A-Z]{2}-[0-9]{4}$ - •
Verify prefix exists in taxonomy
- •
Check issue existence:
bashgh issue list --search "FR-0043" --state all --json number,title,state
- •
Report findings:
- •If exists: Return issue details
- •If not: Confirm ID is available for use
Workflow 4: Suggest Correct Prefix for Work Item
- •Analyze the work description provided by user
- •Match against type definitions in issue-types.yml
- •Consider keywords: Each type has associated keywords
- •Apply exclusion rules: Check "when_not_to_use" guidance
- •Recommend the prefix with justification
Example:
Work: "The dashboard is loading slowly, taking 5+ seconds" Analysis: Performance issue with measurable metric Recommendation: PF (Performance) Justification: Latency/speed issue, not a bug (functional), has measurable target
Quick Reference Commands
Find Next ID for Any Prefix
# Replace PREFIX with: FR, BG, HF, TC, SC, PF, DC, or IN
PREFIX="FR" && gh issue list --search "$PREFIX-" --state all --limit 500 --json title --jq '.[].title' | grep -oE "$PREFIX-[0-9]+" | sort -t'-' -k2 -n | tail -1 | awk -F'-' -v p="$PREFIX" '{printf "%s-%04d\n", p, $2+1}'
Check if ID Exists
gh issue list --search "FR-0043" --state all --json number,title,state
List All Issues with Prefix
gh issue list --search "BG-" --state all --limit 200 --json number,title,state
Get Highest ID for Each Prefix
for PREFIX in FR BG HF TC SC PF DC IN; do
HIGHEST=$(gh issue list --search "$PREFIX-" --state all --limit 500 --json title --jq '.[].title' | grep -oE "$PREFIX-[0-9]+" | sort -t'-' -k2 -n | tail -1)
echo "$PREFIX: ${HIGHEST:-$PREFIX-0000 (none)}"
done
Troubleshooting
| Issue | Solution |
|---|---|
| No issues found for prefix | Start numbering at 0001 |
| User requests unknown prefix | Map to closest existing prefix, suggest TC as fallback |
| ID already exists | Query was stale; re-run and increment |
| Title exceeds 72 characters | Shorten the descriptive portion, keep prefix |
| Unsure which type to use | Consult type keywords and when_to_use in YAML |
| Need to change issue type | Create new issue with correct prefix, close old one |
References
- •Issue Type Definitions (YAML) — Canonical taxonomy
- •Issue Body Templates — Full and minimal templates for each type