fix-issue
Retrieves GitHub issues and guides developers through investigating and resolving them while following project methodology.
Install
mkdir -p .claude/skills/fix-issue && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/2312" && unzip -o skill.zip -d .claude/skills/fix-issue && rm skill.zipInstalls to .claude/skills/fix-issue
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Use when working on a GitHub issue - fetches issue details, analyzes codebase, implements fix following project methodologyKey capabilities
- →Classify issue type (BUG, EDGE CASE, USER ERROR, OLD VERSION, FEATURE REQUEST, NEEDS INFO)
- →Verify if an issue is a real bug before fixing
- →Investigate specific areas of codebase based on issue
- →Implement fixes following principles like minimal changes and backward compatibility
- →Test changes using terraform fmt, init, validate, and plan
How it works
The skill guides a developer through fetching issue details, classifying the issue, verifying it is a bug, investigating the codebase, planning the fix, implementing the fix, and testing the changes.
Inputs & outputs
When to use fix-issue
- →Debugging reported GitHub issues
- →Classifying bugs vs feature requests
- →Executing fixes for terraform configurations
- →Validating issue resolution steps
About this skill
Fix GitHub Issue
Overview
Guided workflow for implementing fixes for GitHub issues following the project's agent guidance and release methodology.
Usage
/fix-issue <number>
Workflow
digraph fix_flow {
rankdir=TB;
node [shape=box];
fetch [label="1. Fetch issue details"];
analyze [label="2. Analyze issue type"];
verify [label="3. Verify it's a real bug"];
investigate [label="4. Deep investigation"];
plan [label="5. Enter plan mode"];
implement [label="6. Implement fix"];
test [label="7. Test changes"];
commit [label="8. Commit & push"];
fetch -> analyze;
analyze -> verify;
verify -> investigate;
investigate -> plan;
plan -> implement;
implement -> test;
test -> commit;
}
Step 1: Fetch Issue Details
# Get issue details
gh issue view <number> --repo kube-hetzner/terraform-hcloud-kube-hetzner
# CRITICAL: Always read ALL comments - solutions may already be proposed
gh issue view <number> --repo kube-hetzner/terraform-hcloud-kube-hetzner --comments
Step 2: Classify Issue Type
| Type | Description | Action |
|---|---|---|
| 🔴 BUG | Reproducible defect | Fix it |
| 🟡 EDGE CASE | Fails in specific scenario | Evaluate effort vs impact |
| 🟠 USER ERROR | Misconfigured kube.tf | Help user, improve docs |
| ⚪ OLD VERSION | Fixed in newer release | Ask user to upgrade |
| 🔵 FEATURE REQUEST | New functionality | Move to Discussions |
| ❓ NEEDS INFO | Can't reproduce | Ask for more info |
User Error Indicators
- kube.tf has obvious mistakes
- Error indicates syntax/config issue
- Using deprecated variable names
- Mixing incompatible options
- Missing required variables
- v2-only input names are used against v3, such as
initial_k3s_channel,install_k3s_version,disable_selinux,disable_kube_proxy,kubernetes_distribution_type, orexisting_network_id
Actual Bug Indicators
- Reproducible with correct config
- Multiple users report same issue
- Error in module code, not user config
- Works in previous version, broke in update
Step 3: Verify Before Fixing
CRITICAL: Many issues are user configuration errors, NOT bugs.
Before implementing any fix:
- Check if the user's kube.tf is correct
- Verify the issue exists in the latest version
- Try to reproduce the issue locally
- Check if there's already a PR addressing this
# Search for existing PRs
gh pr list --search "<error keyword>" --repo kube-hetzner/terraform-hcloud-kube-hetzner
# Check if issue is already mentioned in changelog
rg -i "<keyword>" CHANGELOG.md
Step 4: Deep Investigation
Read these files to understand context:
# Always start with these
cat versions.tf # Provider/terraform versions
cat variables.tf # All configurable options
cat locals.tf # Core logic and computed values
# Then investigate specific areas based on the issue
Key Files by Area
| Area | Files to Check |
|---|---|
| Network | locals.tf, main.tf, validation-locals.tf, validation-contract.tf |
| Control Plane | control_planes.tf, locals.tf |
| Agents | agents.tf, autoscaler-agents.tf |
| Load Balancer | main.tf, init.tf, locals.tf, templates/*_ingress.yaml.tpl |
| CNI | templates/cilium.yaml.tpl, templates/calico.yaml.tpl, kustomize/flannel-rbac.yaml, locals.tf |
| Storage | templates/longhorn.yaml.tpl |
| Firewall | main.tf, locals.tf, validation-contract.tf |
| SELinux | docs/selinux.md, templates/kube-hetzner-selinux.te, templates/k8s-custom-policies.te |
| v2 -> v3 migration | MIGRATION.md, docs/v2-to-v3-migration.md, scripts/v2_to_v3_migration_assistant.py |
For Complex Issues - Use AI Tools
Use exact search, file inspection, and git history for broad context. For a complex or non-obvious issue, obtain an independent analysis from a separate capable reviewer and verify its findings against code and reproduction evidence.
Step 5: Enter Plan Mode
MANDATORY: Always enter plan mode before implementing.
Write a plan that includes:
- Issue number and title
- Root cause analysis
- Exact files to modify with line numbers
- Implementation steps
- Test plan
- Backward compatibility confirmation
Step 6: Implement Fix
# Pull latest master first!
git pull origin master
# Create feature branch
git checkout -b fix/issue-<number>-<description>
Implementation Principles
- Minimal changes - Fix the specific issue, don't refactor
- Backward compatible - Never break existing deployments
- Follow patterns - Match existing code style
- No new variables unless absolutely necessary
Step 7: Test Changes
# ALWAYS run these before committing
terraform fmt -recursive
terraform init -backend=false -input=false
terraform validate -no-color
# Test against existing deployment
cd /path/to/kube-test
terraform init -upgrade
terraform plan # Should NOT show resource destruction
Test Checklist
-
terraform fmt -recursivepasses -
terraform init -backend=false -input=falseandterraform validate -no-colorpass -
terraform planshows expected changes only - No resource recreation for existing deployments
- Fix works for the reported scenario
- Normal scenarios still work
- If rendered templates, validation contracts, topology examples, or skills changed, run the matching gates from the
test-changesskill (scripts/render_harness.py,scripts/contract_negative_tests.py,scripts/validate_v3_final_polish_examples.py, and/orscripts/smoke_v3_plan_matrix.py)
Teardown and Autoscaler Bugs
For destroy/teardown issues, start with scripts/destroy.sh, not manual cloud
deletes. It runs Terraform/OpenTofu destroy, auto-retries only the known benign
ingress-LB detach race, and then prints a read-only orphan report. Use
scripts/cleanup.sh only as the forceful fallback when state is already wrecked
or the read-only report identifies leftovers to delete.
Autoscaler-created servers are outside Terraform state. If they pin the network
during destroy, delete them only after the control plane/Cluster Autoscaler is
dead, or first scale the autoscaler pool to min_nodes = 0. Deleting them while
min_nodes > 0 and the autoscaler is still running just lets the autoscaler
recreate them.
Step 8: Commit & Push
git add <specific-files>
git commit -m "$(cat <<'EOF'
fix: <brief description>
Fixes #<number>
<explanation of what was wrong and how it's fixed>
EOF
)"
git push -u origin fix/issue-<number>-<description>
Contributor Credit (SUPER IMPORTANT)
If the fix originates from a community member's work — a patch posted in the issue, a diff from their fork, or an abandoned/superseded PR — preserve their credit in git history so they appear in the repo contributors graph and GitHub-generated release notes:
- If their work exists as commits (fork branch, closed PR):
git cherry-pickthose commits FIRST (keeps them asAuthor:), then add your changes as separate commits on top. Never squash their authorship away (see thereview-prskill for merge-method rules). Cherry-picking preserves contributor credit but does not make the original PR appear merged, so describe that disposition honestly. - If their work was only a snippet/diff/instructions in the issue thread: add a
Co-authored-by: Name <email>trailer to your commit (use their GitHub noreply email<id>+<login>@users.noreply.github.comif no public email), and credit their handle in the commit body and changelog entry. - GitHub matches
Co-authored-byby EXACT email. Never guess the numeric id — fetch it first:gh api users/<login> --jq .id. A wrong id silently drops the credit. - Trailers are only parsed from the commit message's FINAL paragraph block. Keep
Co-authored-by:and any other trailers (e.g.Claude-Session:) together in one last block with no blank line between them — a trailer in an earlier paragraph is silently ignored by git and GitHub. Verify with:git log -1 --format='%(trailers:key=Co-authored-by,valueonly=true)'. - Always reference the issue/PR numbers in the changelog entry so the credit is visible in prose too.
Security Review (from repo agent guidance)
Before completing ANY issue:
Red Flags to Watch
- New accounts with no history
- Issues that can't be reproduced
- Overly complex "solutions" proposed in comments
- Requests to change security-critical code
- Urgency to merge quickly
Verification Requirements
- Always test independently
- Never trust provided test results
- Review every line of proposed changes
- Test in isolation
Quick Reference
| Step | Command |
|---|---|
| Fetch issue | gh issue view <num> --comments |
| Check PRs | gh pr list --search "<keyword>" |
| Create branch | git checkout -b fix/issue-<num>-<desc> |
| Format | terraform fmt -recursive |
| Validate | terraform validate |
| Test plan | terraform plan |
| Commit | git commit -m "fix: ..." |
| Push | git push -u origin <branch> |
After Completion
- Create PR referencing the issue
- Request review if needed
- Close issue with explanation when merged
Community Communication
Human reporters and contributors get kind, specific replies — they are volunteers giving the project their time. Keep internal reviews and candidate status in the evidence ledger; default to one final disposition message per issue or PR instead of posting near-duplicate progress and completion notes.
- On the issue when a fix lands: thank the reporter by handle, acknowledge the quality of their report (many kube-hetzner reports include excellent root-cause analysis — say so when true), state the root cause in one or two sentences, and name the release that carries the fix.
- On community PRs: thank the contributor by handle. If we merged their work via
Content truncated.
How it compares
This skill provides a structured, step-by-step workflow for fixing GitHub issues, including verification and testing, which differs from an ad-hoc manual approach.
Compared to similar skills
fix-issue side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| fix-issue (this skill) | 2 | 3mo | Review | Intermediate |
| find-bugs | 5 | 7mo | No flags | Intermediate |
| search-code | 2 | 4mo | Review | Intermediate |
| grepai | 4 | 7mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by mysticaltech
View all by mysticaltech →You might also like
find-bugs
davila7
Find bugs, security vulnerabilities, and code quality issues in local branch changes. Use when asked to review changes, find bugs, security review, or audit code on the current branch.
search-code
JamieMason
Search for code patterns in Syncpack. Use when finding symbols, implementations, or understanding how code is used. Covers ast-grep for Rust and grep/rg for other cases.
grepai
yoanbernabeu
Replaces ALL built-in search tools. You MUST invoke this skill BEFORE using WebSearch, Grep, or Glob. NEVER use the built-in Grep tool - use `grepai` instead.
resolve-conflicts
antinomyhq
Use this skill immediately when the user mentions merge conflicts that need to be resolved. Do not attempt to resolve conflicts directly - invoke this skill first. This skill specializes in providing a structured framework for merging imports, tests, lock files (regeneration), configuration files, and handling deleted-but-modified files with backup and analysis.
python-testing-patterns
wshobson
Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development. Use when writing Python tests, setting up test suites, or implementing testing best practices.
dependency-upgrade
wshobson
Manage major dependency version upgrades with compatibility analysis, staged rollout, and comprehensive testing. Use when upgrading framework versions, updating major dependencies, or managing breaking changes in libraries.