Use when working on a GitHub issue - fetches issue details, analyzes codebase, implements fix following project methodology
64
77%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./.claude/skills/fix-issue/SKILL.mdGuided workflow for implementing fixes for GitHub issues following the project's agent guidance and release methodology.
/fix-issue <number>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;
}# 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| 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 |
initial_k3s_channel,
install_k3s_version, disable_selinux, disable_kube_proxy,
kubernetes_distribution_type, or existing_network_idCRITICAL: Many issues are user configuration errors, NOT bugs.
Before implementing any fix:
# 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.mdRead 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| 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 |
# Codex CLI for deep reasoning
codex exec -m gpt-5.5 -s read-only -c model_reasoning_effort="xhigh" \
"Analyze this issue and identify root cause: <issue description>"
# Gemini for large context analysis
gemini --model gemini-3.1-pro-preview -p \
"@locals.tf @variables.tf Analyze how <feature> works and potential issues"MANDATORY: Always enter plan mode before implementing.
Write a plan that includes:
# Pull latest master first!
git pull origin master
# Create feature branch
git checkout -b fix/issue-<number>-<description># 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 destructionterraform fmt -recursive passesterraform init -backend=false -input=false and terraform validate -no-color passterraform plan shows expected changes onlytest-changes skill (scripts/render_harness.py, scripts/contract_negative_tests.py, scripts/validate_v3_final_polish_examples.py, and/or scripts/smoke_v3_plan_matrix.py)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.
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>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 in the release's generated contributors list:
git cherry-pick those commits FIRST (keeps them as Author:), then add your changes as separate commits on top. Never squash their authorship away (see the review-pr skill for merge-method rules).Co-authored-by: Name <email> trailer to your commit (use their GitHub noreply email <id>+<login>@users.noreply.github.com if no public email), and credit their handle in the commit body and changelog entry.Co-authored-by by EXACT email. Never guess the numeric id — fetch it first: gh api users/<login> --jq .id. A wrong id silently drops the credit.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)'.Before completing ANY issue:
| 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> |
Every issue and PR interaction gets a kind, human reply — reporters and contributors are volunteers giving the project their time.
a8b696d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.