Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a hotfix PR directly to prod with backmerge instructions
.claude/skills/nudgebee-create-hotfix-pr/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 141% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 75% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 0% | 0% |
Create a hotfix PR targeting the prod branch with backmerge guidance. Argument: $ARGUMENTS (PR numbers to cherry-pick, optional description of the hotfix).
Hotfix flow: hotfix/description -> prod -> backmerge to test -> backmerge to mainbash# Ensure we have latest prod git fetch origin prod # Create hotfix branch from prod git checkout -b hotfix/$(date +%Y%m%d)-description origin/prod
If already on a hotfix/* branch, skip branch creation.
If $ARGUMENTS contains PR numbers (e.g., 23368 23371):
gh pr view {number} --json mergeCommit,commitsIf no PR numbers, assume the changes are already on the branch.
bash# Show what will be in the hotfix git log origin/prod..HEAD --oneline git diff origin/prod...HEAD --stat git diff origin/prod...HEAD
Confirm with the user that these are the intended hotfix changes.
Map changed files to services using this table:
| Path prefix | Service | Type | Validation | Working directory | |---|---|---|---|---| | api-server/services/ | api-server | Go | make validate | api-server/services/ | | ticket-server/ | ticket-server | Go | make validate | ticket-server/ | | collector-server/cloud-collector/ | cloud-collector | Go | make validate | collector-server/cloud-collector/ | | collector-server/k8s-collector/relay-server/ | relay-server | Go | make validate | collector-server/k8s-collector/relay-server/ | | collector-server/k8s-collector/app/ | k8s-collector-app | Python | make lint && make test | collector-server/k8s-collector/app/ | | llm/code-analysis/ | code-analysis | Go | make check | llm/code-analysis/ | | llm/llm-server/ | llm-server | Go | make validate | llm/llm-server/ | | llm/rag-server/ | rag-server | Python | make lint && make test | llm/rag-server/ | | llm/benchmark/ | benchmark | Python | poetry run pytest | llm/benchmark/ | | ml-k8s-server/ | ml-k8s-server | Python | make lint && make test | ml-k8s-server/ | | auto-pilot/ | auto-pilot | Python | poetry run black --check . && poetry run flake8 . | auto-pilot/ | | auto-pilot/sidecar/ | auto-pilot-sidecar | Python | poetry run black --check . && poetry run flake8 . | auto-pilot/sidecar/ | | notifications-server/ | notifications-server | Python | poetry run black --check . && poetry run flake8 . | notifications-server/ | | app/ | frontend | TypeScript | npm run lint2 | app/ | | deploy/ | infrastructure | — | Manual review | — |
For each affected service, run its validation command from the correct working directory. Report results to the user. If validation fails, ask the user whether to fix the issues or proceed anyway.
PRs MUST contain exactly one commit. Check the commit count:
bashgit log origin/prod..HEAD --oneline | wc -l
If there is more than one commit, squash them into a single commit:
bashgit reset --soft origin/prod git commit -m "<combined commit message covering all changes>"
The squashed commit message should use the PR title format: fix(scope): subject.
bash# Use --force-with-lease since squash rewrites history git push --force-with-lease -u origin $(git branch --show-current)
Title format: fix(scope): subject (per .github/semantic.yml)
Allowed scopes (required): | Scope | Services / paths | |---|---| | ui | app/ (frontend) | | autopilot | auto-pilot/, auto-pilot/sidecar/ | | ml | ml-k8s-server/, llm/code-analysis/, llm/llm-server/, llm/rag-server/, llm/benchmark/ | | notifications | notifications-server/ | | tickets | ticket-server/ | | relay | collector-server/k8s-collector/relay-server/ | | collector | collector-server/cloud-collector/, collector-server/k8s-collector/app/ | | deps | Dependency updates | | NB-xxx | Ticket number — use for api-server/, deploy/, or cross-service changes |
fix type. Use perf or revert only if applicable.fix(collector): handle nil pointer in cloud syncBody MUST follow the repo's PR template (.github/pull_request_template.md) with hotfix-specific additions:
bashgh pr create \ --base prod \ --title "fix(scope): subject" \ --body "$(cat <<'EOF' # Description **HOTFIX** — **Urgency:** {Critical / High} {Summary of the problem being fixed and motivation for the hotfix. Include relevant context about the production issue.} Cherry-picked from: {list PR numbers with # prefix if applicable, e.g., #23368, #23371} ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) # How Has This Been Tested? {Describe validation steps taken.} - [x] {Validation step, e.g., "Black formatting check passes"} - [x] {Validation step, e.g., "Flake8 lint passes"} - [ ] CI tests pass ## Backmerge Checklist After merging to `prod`, backmerge is required: - [ ] Create PR: `prod` -> `test` - [ ] Merge to `test` - [ ] Create PR: `test` -> `main` - [ ] Merge to `main` ## Rollback Plan {Describe how to rollback if this causes issues, e.g., revert commits and redeploy previous image tag.} EOF )"
Rules for filling the template:
[x] — only include checked types, delete all unchecked optionsHOTFIX PR created: {url}
Title: fix(scope): subject
Target: prod <- {branch}
Services: {list}
Validation: {pass/fail status per service}
IMPORTANT: After merge, remember to backmerge:
1. gh pr create --base test --head prod --title "chore(release): backmerge prod -> test"
2. After test merge: gh pr create --base main --head test --title "chore(release): backmerge test -> main"
Or use: /backmerge| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 6,973 | 6,103 | -12% | 1 | 1 | 0% | 341 | 2,498 | +633% | 0 | 0 | — |
case-19 | pass→pass | 6,046 | 2,164 | -64% | 1 | 1 | 0% | 940 | 2,374 | +153% | 0 | 0 | — |
case-20 | pass→pass | 9,487 | 5,509 | -42% | 1 | 1 | 0% | 1,551 | 2,880 | +86% | 0 | 0 | — |
case-21 | pass→pass | 8,230 | 4,177 | -49% | 1 | 1 | 0% | 1,378 | 2,658 | +93% | 0 | 0 | — |
case-22 | pass→pass | 9,652 | 4,454 | -54% | 1 | 1 | 0% | 1,736 | 2,743 | +58% | 0 | 0 | — |
case-02 | fail→fail | 5,469 | 4,840 | -12% | 1 | 1 | 0% | 334 | 2,188 | +555% | 0 | 0 | — |
case-03 | fail→fail | 13,306 | 4,527 | -66% | 1 | 1 | 0% | 2,180 | 2,659 | +22% | 0 | 0 | — |
case-09 | fail→fail | 7,468 | 5,599 | -25% | 1 | 1 | 0% | 1,403 | 2,256 | +61% | 0 | 0 | — |
case-04 | fail→fail | 8,865 | 4,863 | -45% | 1 | 1 | 0% | 1,447 | 2,173 | +50% | 0 | 0 | — |
case-05 | fail→fail | 4,282 | 5,671 | +32% | 1 | 1 | 0% | 498 | 2,387 | +379% | 0 | 0 | — |
case-06 | fail→pass | 20,005 | 2,487 | -88% | 1 | 1 | 0% | 1,221 | 2,432 | +99% | 0 | 0 | — |
case-07 | fail→fail | 7,567 | 4,360 | -42% | 1 | 1 | 0% | 1,352 | 2,191 | +62% | 0 | 0 | — |
case-08 | fail→pass | 6,543 | 2,474 | -62% | 1 | 1 | 0% | 976 | 2,348 | +141% | 0 | 0 | — |
case-10 | fail→pass | 9,522 | 3,713 | -61% | 1 | 1 | 0% | 1,515 | 2,658 | +75% | 0 | 0 | — |
case-11 | fail→fail | 5,149 | 5,298 | +3% | 1 | 1 | 0% | 248 | 2,211 | +792% | 0 | 0 | — |
case-12 | fail→fail | 13,545 | 5,900 | -56% | 1 | 1 | 0% | 2,289 | 2,261 | -1% | 0 | 0 | — |
case-13 | pass→pass | 9,857 | 6,359 | -35% | 1 | 1 | 0% | 1,731 | 3,000 | +73% | 0 | 0 | — |
case-14 | fail→pass | 9,255 | 1,478 | -84% | 1 | 1 | 0% | 1,353 | 2,166 | +60% | 0 | 0 | — |
case-15 | fail→pass | 14,566 | 3,832 | -74% | 1 | 1 | 0% | 2,536 | 2,544 | +0% | 0 | 0 | — |
case-16 | pass→pass | 6,093 | 1,867 | -69% | 1 | 1 | 0% | 1,016 | 2,244 | +121% | 0 | 0 | — |
case-17 | fail→pass | 12,687 | 2,464 | -81% | 1 | 1 | 0% | 2,026 | 2,418 | +19% | 0 | 0 | — |
case-18 | fail→pass | 6,738 | 1,739 | -74% | 1 | 1 | 0% | 1,081 | 2,224 | +106% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 14 counted toward the lift figure. The other 8 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 14 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.